Scalable and distributed custom feed generator, ott - on that topic

Send some posts to tei

Changed files
+667 -1015
crates
+4
README.md
··· 17 17 18 18 # Install rust 19 19 curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh 20 + 21 + # Install tei 22 + cargo install --git https://github.com/huggingface/text-embeddings-inference 23 + 20 24 ``` 21 25 22 26 ## Create a cluster
+486 -807
crates/ott-ingest/Cargo.lock
··· 9 9 checksum = "ffd5e23cd33dd73c030d1c424967eb2fbdc917d89e0bdcf1162edc4cf504f756" 10 10 dependencies = [ 11 11 "anyhow", 12 - "thiserror 2.0.17", 12 + "thiserror", 13 13 ] 14 14 15 15 [[package]] ··· 167 167 ] 168 168 169 169 [[package]] 170 - name = "atomic-waker" 171 - version = "1.1.2" 172 - source = "registry+https://github.com/rust-lang/crates.io-index" 173 - checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" 174 - 175 - [[package]] 176 - name = "atproto-client" 177 - version = "0.13.0" 178 - source = "registry+https://github.com/rust-lang/crates.io-index" 179 - checksum = "c34ed7ebeec01cd7775c1c7841838c142d123d403983ed7179b31850435b5c7c" 180 - dependencies = [ 181 - "anyhow", 182 - "atproto-identity", 183 - "atproto-oauth", 184 - "atproto-record", 185 - "bytes", 186 - "reqwest", 187 - "reqwest-chain", 188 - "reqwest-middleware", 189 - "serde", 190 - "serde_json", 191 - "thiserror 2.0.17", 192 - "tokio", 193 - "tracing", 194 - "urlencoding", 195 - ] 196 - 197 - [[package]] 198 - name = "atproto-identity" 199 - version = "0.13.0" 170 + name = "atoi" 171 + version = "2.0.0" 200 172 source = "registry+https://github.com/rust-lang/crates.io-index" 201 - checksum = "b956c07726fce812630be63c5cb31b1961cbb70f0a05614278523102d78c3a48" 202 - dependencies = [ 203 - "anyhow", 204 - "async-trait", 205 - "ecdsa", 206 - "elliptic-curve", 207 - "hickory-resolver", 208 - "k256", 209 - "lru", 210 - "multibase", 211 - "p256", 212 - "p384", 213 - "rand 0.8.5", 214 - "reqwest", 215 - "serde", 216 - "serde_ipld_dagcbor", 217 - "serde_json", 218 - "thiserror 2.0.17", 219 - "tokio", 220 - "tracing", 221 - "urlencoding", 222 - ] 223 - 224 - [[package]] 225 - name = "atproto-lexicon" 226 - version = "0.13.0" 227 - source = "registry+https://github.com/rust-lang/crates.io-index" 228 - checksum = "602d31385e34d3098f530ebbaa592861e920a36d117ade3c4ce6378b4cd4c709" 229 - dependencies = [ 230 - "anyhow", 231 - "async-trait", 232 - "atproto-client", 233 - "atproto-identity", 234 - "hickory-resolver", 235 - "reqwest", 236 - "serde", 237 - "serde_json", 238 - "thiserror 2.0.17", 239 - "tokio", 240 - "tracing", 241 - ] 242 - 243 - [[package]] 244 - name = "atproto-oauth" 245 - version = "0.13.0" 246 - source = "registry+https://github.com/rust-lang/crates.io-index" 247 - checksum = "3ea205901c33d074a1b498591d0511bcd788b6772ec0ca6e09a92c4327ddbdff" 173 + checksum = "f28d99ec8bfea296261ca1af174f24225171fea9664ba9003cbebee704810528" 248 174 dependencies = [ 249 - "anyhow", 250 - "async-trait", 251 - "atproto-identity", 252 - "base64", 253 - "chrono", 254 - "ecdsa", 255 - "elliptic-curve", 256 - "k256", 257 - "lru", 258 - "multibase", 259 - "p256", 260 - "p384", 261 - "rand 0.8.5", 262 - "reqwest", 263 - "reqwest-chain", 264 - "reqwest-middleware", 265 - "serde", 266 - "serde_ipld_dagcbor", 267 - "serde_json", 268 - "sha2", 269 - "thiserror 2.0.17", 270 - "tokio", 271 - "tracing", 272 - "ulid", 175 + "num-traits", 273 176 ] 274 177 275 178 [[package]] 276 - name = "atproto-record" 277 - version = "0.13.0" 179 + name = "atomic-waker" 180 + version = "1.1.2" 278 181 source = "registry+https://github.com/rust-lang/crates.io-index" 279 - checksum = "0550f74423ca745132dc07ba1cb01f2f08243a7bf7497f5c3f2185a774c92ca2" 280 - dependencies = [ 281 - "anyhow", 282 - "atproto-identity", 283 - "base64", 284 - "chrono", 285 - "serde", 286 - "serde_ipld_dagcbor", 287 - "serde_json", 288 - "thiserror 2.0.17", 289 - ] 182 + checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" 290 183 291 184 [[package]] 292 185 name = "autocfg" ··· 334 227 ] 335 228 336 229 [[package]] 337 - name = "base-x" 338 - version = "0.2.11" 339 - source = "registry+https://github.com/rust-lang/crates.io-index" 340 - checksum = "4cbbc9d0964165b47557570cce6c952866c2678457aca742aafc9fb771d30270" 341 - 342 - [[package]] 343 - name = "base16ct" 344 - version = "0.2.0" 345 - source = "registry+https://github.com/rust-lang/crates.io-index" 346 - checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" 347 - 348 - [[package]] 349 - name = "base256emoji" 350 - version = "1.0.2" 351 - source = "registry+https://github.com/rust-lang/crates.io-index" 352 - checksum = "b5e9430d9a245a77c92176e649af6e275f20839a48389859d1661e9a128d077c" 353 - dependencies = [ 354 - "const-str", 355 - "match-lookup", 356 - ] 357 - 358 - [[package]] 359 230 name = "base64" 360 231 version = "0.22.1" 361 232 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 398 269 version = "2.9.4" 399 270 source = "registry+https://github.com/rust-lang/crates.io-index" 400 271 checksum = "2261d10cca569e4643e526d8dc2e62e433cc8aba21ab764233731f8d369bf394" 272 + dependencies = [ 273 + "serde", 274 + ] 401 275 402 276 [[package]] 403 277 name = "block-buffer" ··· 455 329 ] 456 330 457 331 [[package]] 458 - name = "cbor4ii" 459 - version = "0.2.14" 460 - source = "registry+https://github.com/rust-lang/crates.io-index" 461 - checksum = "b544cf8c89359205f4f990d0e6f3828db42df85b5dac95d09157a250eb0749c4" 462 - dependencies = [ 463 - "serde", 464 - ] 465 - 466 - [[package]] 467 332 name = "cc" 468 333 version = "1.2.39" 469 334 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 505 370 "iana-time-zone", 506 371 "js-sys", 507 372 "num-traits", 508 - "serde", 509 373 "wasm-bindgen", 510 374 "windows-link 0.2.0", 511 375 ] 512 376 513 377 [[package]] 514 - name = "cid" 515 - version = "0.11.1" 516 - source = "registry+https://github.com/rust-lang/crates.io-index" 517 - checksum = "3147d8272e8fa0ccd29ce51194dd98f79ddfb8191ba9e3409884e751798acf3a" 518 - dependencies = [ 519 - "core2", 520 - "multibase", 521 - "multihash", 522 - "serde", 523 - "serde_bytes", 524 - "unsigned-varint", 525 - ] 526 - 527 - [[package]] 528 378 name = "clang-sys" 529 379 version = "1.8.1" 530 380 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 560 410 checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" 561 411 562 412 [[package]] 563 - name = "const-str" 564 - version = "0.4.3" 565 - source = "registry+https://github.com/rust-lang/crates.io-index" 566 - checksum = "2f421161cb492475f1661ddc9815a745a1c894592070661180fdec3d4872e9c3" 567 - 568 - [[package]] 569 413 name = "content_inspector" 570 414 version = "0.2.4" 571 415 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 591 435 checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" 592 436 593 437 [[package]] 594 - name = "core2" 595 - version = "0.4.0" 438 + name = "cpufeatures" 439 + version = "0.2.17" 596 440 source = "registry+https://github.com/rust-lang/crates.io-index" 597 - checksum = "b49ba7ef1ad6107f8824dbe97de947cbaac53c44e7f9756a1fba0d37c1eec505" 441 + checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" 598 442 dependencies = [ 599 - "memchr", 443 + "libc", 600 444 ] 601 445 602 446 [[package]] 603 - name = "cpufeatures" 604 - version = "0.2.17" 447 + name = "crc" 448 + version = "3.3.0" 605 449 source = "registry+https://github.com/rust-lang/crates.io-index" 606 - checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" 450 + checksum = "9710d3b3739c2e349eb44fe848ad0b7c8cb1e42bd87ee49371df2f7acaf3e675" 607 451 dependencies = [ 608 - "libc", 452 + "crc-catalog", 609 453 ] 454 + 455 + [[package]] 456 + name = "crc-catalog" 457 + version = "2.4.0" 458 + source = "registry+https://github.com/rust-lang/crates.io-index" 459 + checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" 610 460 611 461 [[package]] 612 462 name = "crc32c" ··· 627 477 ] 628 478 629 479 [[package]] 630 - name = "critical-section" 631 - version = "1.2.0" 632 - source = "registry+https://github.com/rust-lang/crates.io-index" 633 - checksum = "790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b" 634 - 635 - [[package]] 636 480 name = "crossbeam-channel" 637 481 version = "0.5.15" 638 482 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 651 495 ] 652 496 653 497 [[package]] 654 - name = "crossbeam-utils" 655 - version = "0.8.21" 498 + name = "crossbeam-queue" 499 + version = "0.3.12" 656 500 source = "registry+https://github.com/rust-lang/crates.io-index" 657 - checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" 501 + checksum = "0f58bbc28f91df819d0aa2a2c00cd19754769c2fad90579b3592b1c9ba7a3115" 502 + dependencies = [ 503 + "crossbeam-utils", 504 + ] 658 505 659 506 [[package]] 660 - name = "crypto-bigint" 661 - version = "0.5.5" 507 + name = "crossbeam-utils" 508 + version = "0.8.21" 662 509 source = "registry+https://github.com/rust-lang/crates.io-index" 663 - checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" 664 - dependencies = [ 665 - "generic-array", 666 - "rand_core 0.6.4", 667 - "subtle", 668 - "zeroize", 669 - ] 510 + checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" 670 511 671 512 [[package]] 672 513 name = "crypto-common" ··· 714 555 ] 715 556 716 557 [[package]] 717 - name = "data-encoding" 718 - version = "2.9.0" 719 - source = "registry+https://github.com/rust-lang/crates.io-index" 720 - checksum = "2a2330da5de22e8a3cb63252ce2abb30116bf5265e89c0e01bc17015ce30a476" 721 - 722 - [[package]] 723 - name = "data-encoding-macro" 724 - version = "0.1.18" 725 - source = "registry+https://github.com/rust-lang/crates.io-index" 726 - checksum = "47ce6c96ea0102f01122a185683611bd5ac8d99e62bc59dd12e6bda344ee673d" 727 - dependencies = [ 728 - "data-encoding", 729 - "data-encoding-macro-internal", 730 - ] 731 - 732 - [[package]] 733 - name = "data-encoding-macro-internal" 734 - version = "0.1.16" 735 - source = "registry+https://github.com/rust-lang/crates.io-index" 736 - checksum = "8d162beedaa69905488a8da94f5ac3edb4dd4788b732fadb7bd120b2625c1976" 737 - dependencies = [ 738 - "data-encoding", 739 - "syn 2.0.106", 740 - ] 741 - 742 - [[package]] 743 558 name = "der" 744 559 version = "0.7.10" 745 560 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 826 641 ] 827 642 828 643 [[package]] 644 + name = "dotenvy" 645 + version = "0.15.7" 646 + source = "registry+https://github.com/rust-lang/crates.io-index" 647 + checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b" 648 + 649 + [[package]] 829 650 name = "dunce" 830 651 version = "1.0.5" 831 652 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 838 659 checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555" 839 660 840 661 [[package]] 841 - name = "ecdsa" 842 - version = "0.16.9" 843 - source = "registry+https://github.com/rust-lang/crates.io-index" 844 - checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" 845 - dependencies = [ 846 - "der", 847 - "digest", 848 - "elliptic-curve", 849 - "rfc6979", 850 - "serdect", 851 - "signature", 852 - "spki", 853 - ] 854 - 855 - [[package]] 856 662 name = "educe" 857 663 version = "0.6.0" 858 664 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 869 675 version = "1.15.0" 870 676 source = "registry+https://github.com/rust-lang/crates.io-index" 871 677 checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" 872 - 873 - [[package]] 874 - name = "elliptic-curve" 875 - version = "0.13.8" 876 - source = "registry+https://github.com/rust-lang/crates.io-index" 877 - checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" 878 678 dependencies = [ 879 - "base16ct", 880 - "base64ct", 881 - "crypto-bigint", 882 - "digest", 883 - "ff", 884 - "generic-array", 885 - "group", 886 - "hkdf", 887 - "pem-rfc7468", 888 - "pkcs8", 889 - "rand_core 0.6.4", 890 - "sec1", 891 - "serde_json", 892 - "serdect", 893 - "subtle", 894 - "zeroize", 679 + "serde", 895 680 ] 896 681 897 682 [[package]] ··· 904 689 ] 905 690 906 691 [[package]] 907 - name = "enum-as-inner" 908 - version = "0.6.1" 909 - source = "registry+https://github.com/rust-lang/crates.io-index" 910 - checksum = "a1e6a265c649f3f5979b601d26f1d05ada116434c87741c9493cb56218f76cbc" 911 - dependencies = [ 912 - "heck", 913 - "proc-macro2", 914 - "quote", 915 - "syn 2.0.106", 916 - ] 917 - 918 - [[package]] 919 692 name = "enum-ordinalize" 920 693 version = "4.3.0" 921 694 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 949 722 dependencies = [ 950 723 "libc", 951 724 "windows-sys 0.61.1", 725 + ] 726 + 727 + [[package]] 728 + name = "etcetera" 729 + version = "0.8.0" 730 + source = "registry+https://github.com/rust-lang/crates.io-index" 731 + checksum = "136d1b5283a1ab77bd9257427ffd09d8667ced0570b6f938942bc7568ed5b943" 732 + dependencies = [ 733 + "cfg-if", 734 + "home", 735 + "windows-sys 0.48.0", 952 736 ] 953 737 954 738 [[package]] ··· 995 779 checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" 996 780 997 781 [[package]] 998 - name = "ff" 999 - version = "0.13.1" 1000 - source = "registry+https://github.com/rust-lang/crates.io-index" 1001 - checksum = "c0b50bfb653653f9ca9095b427bed08ab8d75a137839d9ad64eb11810d5b6393" 1002 - dependencies = [ 1003 - "rand_core 0.6.4", 1004 - "subtle", 1005 - ] 1006 - 1007 - [[package]] 1008 782 name = "find-msvc-tools" 1009 783 version = "0.1.2" 1010 784 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 1021 795 ] 1022 796 1023 797 [[package]] 798 + name = "flume" 799 + version = "0.11.1" 800 + source = "registry+https://github.com/rust-lang/crates.io-index" 801 + checksum = "da0e4dd2a88388a1f4ccc7c9ce104604dab68d9f408dc34cd45823d5a9069095" 802 + dependencies = [ 803 + "futures-core", 804 + "futures-sink", 805 + "spin", 806 + ] 807 + 808 + [[package]] 1024 809 name = "fluvio" 1025 810 version = "0.50.1" 1026 811 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 1053 838 "semver", 1054 839 "serde", 1055 840 "siphasher", 1056 - "thiserror 2.0.17", 841 + "thiserror", 1057 842 "tokio", 1058 843 "toml", 1059 844 "tracing", ··· 1072 857 "lz4_flex", 1073 858 "serde", 1074 859 "snap", 1075 - "thiserror 2.0.17", 860 + "thiserror", 1076 861 "zstd", 1077 862 ] 1078 863 ··· 1095 880 "flv-util", 1096 881 "humantime-serde", 1097 882 "lenient_semver", 1098 - "schemars 1.0.4", 883 + "schemars", 1099 884 "semver", 1100 885 "serde", 1101 886 "serde_yaml", 1102 - "thiserror 2.0.17", 887 + "thiserror", 1103 888 "toml", 1104 889 "tracing", 1105 890 ] ··· 1124 909 "pin-project", 1125 910 "rustls-pemfile", 1126 911 "socket2 0.5.10", 1127 - "thiserror 2.0.17", 912 + "thiserror", 1128 913 "tokio", 1129 914 "tracing", 1130 915 "wasm-bindgen-futures", ··· 1149 934 "flv-util", 1150 935 "once_cell", 1151 936 "semver", 1152 - "thiserror 2.0.17", 937 + "thiserror", 1153 938 "tokio-util", 1154 939 "tracing", 1155 940 ] ··· 1179 964 "fluvio-stream-model", 1180 965 "paste", 1181 966 "static_assertions", 1182 - "thiserror 2.0.17", 967 + "thiserror", 1183 968 "tracing", 1184 969 ] 1185 970 ··· 1192 977 "eyre", 1193 978 "fluvio-protocol", 1194 979 "fluvio-smartmodule-derive", 1195 - "thiserror 2.0.17", 980 + "thiserror", 1196 981 "tracing", 1197 982 ] 1198 983 ··· 1227 1012 "once_cell", 1228 1013 "pin-project", 1229 1014 "semver", 1230 - "thiserror 2.0.17", 1015 + "thiserror", 1231 1016 "tokio", 1232 1017 "tokio-util", 1233 1018 "tracing", ··· 1297 1082 checksum = "abe5675758c2ae542f6c2c64cca1f187b26c22708c2a7358d6454dd9c6d8561d" 1298 1083 dependencies = [ 1299 1084 "event-listener", 1300 - "schemars 1.0.4", 1085 + "schemars", 1301 1086 "serde", 1302 - "thiserror 2.0.17", 1087 + "thiserror", 1303 1088 "toml", 1304 1089 "tracing", 1305 1090 ] ··· 1414 1199 ] 1415 1200 1416 1201 [[package]] 1202 + name = "futures-intrusive" 1203 + version = "0.5.0" 1204 + source = "registry+https://github.com/rust-lang/crates.io-index" 1205 + checksum = "1d930c203dd0b6ff06e0201a4a2fe9149b43c684fd4420555b26d21b1a02956f" 1206 + dependencies = [ 1207 + "futures-core", 1208 + "lock_api", 1209 + "parking_lot 0.12.4", 1210 + ] 1211 + 1212 + [[package]] 1417 1213 name = "futures-io" 1418 1214 version = "0.3.31" 1419 1215 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 1467 1263 checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" 1468 1264 1469 1265 [[package]] 1266 + name = "futures-timer" 1267 + version = "3.0.3" 1268 + source = "registry+https://github.com/rust-lang/crates.io-index" 1269 + checksum = "f288b0a4f20f9a56b5d1da57e2227c661b7b16168e2f72365f57b63326e29b24" 1270 + 1271 + [[package]] 1470 1272 name = "futures-util" 1471 1273 version = "0.3.31" 1472 1274 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 1492 1294 dependencies = [ 1493 1295 "typenum", 1494 1296 "version_check", 1495 - "zeroize", 1496 1297 ] 1497 1298 1498 1299 [[package]] ··· 1502 1303 checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" 1503 1304 dependencies = [ 1504 1305 "cfg-if", 1505 - "js-sys", 1506 1306 "libc", 1507 1307 "wasi 0.11.1+wasi-snapshot-preview1", 1508 - "wasm-bindgen", 1509 1308 ] 1510 1309 1511 1310 [[package]] ··· 1515 1314 checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4" 1516 1315 dependencies = [ 1517 1316 "cfg-if", 1518 - "js-sys", 1519 1317 "libc", 1520 1318 "r-efi", 1521 1319 "wasi 0.14.7+wasi-0.2.4", 1522 - "wasm-bindgen", 1523 1320 ] 1524 1321 1525 1322 [[package]] ··· 1535 1332 checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" 1536 1333 1537 1334 [[package]] 1538 - name = "group" 1539 - version = "0.13.0" 1540 - source = "registry+https://github.com/rust-lang/crates.io-index" 1541 - checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" 1542 - dependencies = [ 1543 - "ff", 1544 - "rand_core 0.6.4", 1545 - "subtle", 1546 - ] 1547 - 1548 - [[package]] 1549 1335 name = "h2" 1550 1336 version = "0.4.12" 1551 1337 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 1580 1366 version = "0.16.0" 1581 1367 source = "registry+https://github.com/rust-lang/crates.io-index" 1582 1368 checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d" 1369 + 1370 + [[package]] 1371 + name = "hashlink" 1372 + version = "0.10.0" 1373 + source = "registry+https://github.com/rust-lang/crates.io-index" 1374 + checksum = "7382cf6263419f2d8df38c55d7da83da5c18aef87fc7a7fc1fb1e344edfe14c1" 1375 + dependencies = [ 1376 + "hashbrown 0.15.5", 1377 + ] 1583 1378 1584 1379 [[package]] 1585 1380 name = "heck" ··· 1594 1389 checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" 1595 1390 1596 1391 [[package]] 1597 - name = "hickory-proto" 1598 - version = "0.25.2" 1392 + name = "hex" 1393 + version = "0.4.3" 1599 1394 source = "registry+https://github.com/rust-lang/crates.io-index" 1600 - checksum = "f8a6fe56c0038198998a6f217ca4e7ef3a5e51f46163bd6dd60b5c71ca6c6502" 1601 - dependencies = [ 1602 - "async-trait", 1603 - "cfg-if", 1604 - "data-encoding", 1605 - "enum-as-inner", 1606 - "futures-channel", 1607 - "futures-io", 1608 - "futures-util", 1609 - "idna", 1610 - "ipnet", 1611 - "once_cell", 1612 - "rand 0.9.2", 1613 - "ring", 1614 - "thiserror 2.0.17", 1615 - "tinyvec", 1616 - "tokio", 1617 - "tracing", 1618 - "url", 1619 - ] 1620 - 1621 - [[package]] 1622 - name = "hickory-resolver" 1623 - version = "0.25.2" 1624 - source = "registry+https://github.com/rust-lang/crates.io-index" 1625 - checksum = "dc62a9a99b0bfb44d2ab95a7208ac952d31060efc16241c87eaf36406fecf87a" 1626 - dependencies = [ 1627 - "cfg-if", 1628 - "futures-util", 1629 - "hickory-proto", 1630 - "ipconfig", 1631 - "moka", 1632 - "once_cell", 1633 - "parking_lot 0.12.4", 1634 - "rand 0.9.2", 1635 - "resolv-conf", 1636 - "smallvec", 1637 - "thiserror 2.0.17", 1638 - "tokio", 1639 - "tracing", 1640 - ] 1395 + checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" 1641 1396 1642 1397 [[package]] 1643 1398 name = "hkdf" ··· 1655 1410 checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" 1656 1411 dependencies = [ 1657 1412 "digest", 1413 + ] 1414 + 1415 + [[package]] 1416 + name = "home" 1417 + version = "0.5.11" 1418 + source = "registry+https://github.com/rust-lang/crates.io-index" 1419 + checksum = "589533453244b0995c858700322199b2becb13b627df2851f64a2775d024abcf" 1420 + dependencies = [ 1421 + "windows-sys 0.59.0", 1658 1422 ] 1659 1423 1660 1424 [[package]] ··· 1749 1513 "tokio", 1750 1514 "tokio-rustls", 1751 1515 "tower-service", 1752 - "webpki-roots", 1753 1516 ] 1754 1517 1755 1518 [[package]] ··· 1971 1734 ] 1972 1735 1973 1736 [[package]] 1974 - name = "ipconfig" 1975 - version = "0.3.2" 1976 - source = "registry+https://github.com/rust-lang/crates.io-index" 1977 - checksum = "b58db92f96b720de98181bbbe63c831e87005ab460c1bf306eb2622b4707997f" 1978 - dependencies = [ 1979 - "socket2 0.5.10", 1980 - "widestring", 1981 - "windows-sys 0.48.0", 1982 - "winreg", 1983 - ] 1984 - 1985 - [[package]] 1986 - name = "ipld-core" 1987 - version = "0.4.2" 1988 - source = "registry+https://github.com/rust-lang/crates.io-index" 1989 - checksum = "104718b1cc124d92a6d01ca9c9258a7df311405debb3408c445a36452f9bf8db" 1990 - dependencies = [ 1991 - "cid", 1992 - "serde", 1993 - "serde_bytes", 1994 - ] 1995 - 1996 - [[package]] 1997 1737 name = "ipnet" 1998 1738 version = "2.11.0" 1999 1739 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 2045 1785 ] 2046 1786 2047 1787 [[package]] 2048 - name = "k256" 2049 - version = "0.13.4" 2050 - source = "registry+https://github.com/rust-lang/crates.io-index" 2051 - checksum = "f6e3919bbaa2945715f0bb6d3934a173d1e9a59ac23767fbaaef277265a7411b" 2052 - dependencies = [ 2053 - "cfg-if", 2054 - "ecdsa", 2055 - "elliptic-curve", 2056 - "once_cell", 2057 - "sha2", 2058 - "signature", 2059 - ] 2060 - 2061 - [[package]] 2062 1788 name = "k8-types" 2063 1789 version = "0.9.0" 2064 1790 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 2073 1799 version = "1.5.0" 2074 1800 source = "registry+https://github.com/rust-lang/crates.io-index" 2075 1801 checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" 1802 + dependencies = [ 1803 + "spin", 1804 + ] 2076 1805 2077 1806 [[package]] 2078 1807 name = "lenient_semver" ··· 2118 1847 "cfg-if", 2119 1848 "windows-targets 0.53.4", 2120 1849 ] 1850 + 1851 + [[package]] 1852 + name = "libm" 1853 + version = "0.2.15" 1854 + source = "registry+https://github.com/rust-lang/crates.io-index" 1855 + checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" 2121 1856 2122 1857 [[package]] 2123 1858 name = "libredox" ··· 2131 1866 ] 2132 1867 2133 1868 [[package]] 1869 + name = "libsqlite3-sys" 1870 + version = "0.30.1" 1871 + source = "registry+https://github.com/rust-lang/crates.io-index" 1872 + checksum = "2e99fb7a497b1e3339bc746195567ed8d3e24945ecd636e3619d20b9de9e9149" 1873 + dependencies = [ 1874 + "pkg-config", 1875 + "vcpkg", 1876 + ] 1877 + 1878 + [[package]] 2134 1879 name = "linux-raw-sys" 2135 1880 version = "0.11.0" 2136 1881 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 2159 1904 checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" 2160 1905 2161 1906 [[package]] 2162 - name = "lru" 2163 - version = "0.12.5" 2164 - source = "registry+https://github.com/rust-lang/crates.io-index" 2165 - checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38" 2166 - dependencies = [ 2167 - "hashbrown 0.15.5", 2168 - ] 2169 - 2170 - [[package]] 2171 - name = "lru-slab" 2172 - version = "0.1.2" 2173 - source = "registry+https://github.com/rust-lang/crates.io-index" 2174 - checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" 2175 - 2176 - [[package]] 2177 1907 name = "lz4_flex" 2178 1908 version = "0.11.5" 2179 1909 source = "registry+https://github.com/rust-lang/crates.io-index" 2180 1910 checksum = "08ab2867e3eeeca90e844d1940eab391c9dc5228783db2ed999acbc0a9ed375a" 2181 1911 dependencies = [ 2182 1912 "twox-hash", 2183 - ] 2184 - 2185 - [[package]] 2186 - name = "match-lookup" 2187 - version = "0.1.1" 2188 - source = "registry+https://github.com/rust-lang/crates.io-index" 2189 - checksum = "1265724d8cb29dbbc2b0f06fffb8bf1a8c0cf73a78eede9ba73a4a66c52a981e" 2190 - dependencies = [ 2191 - "proc-macro2", 2192 - "quote", 2193 - "syn 1.0.109", 2194 1913 ] 2195 1914 2196 1915 [[package]] ··· 2225 1944 checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" 2226 1945 2227 1946 [[package]] 2228 - name = "mime_guess" 2229 - version = "2.0.5" 2230 - source = "registry+https://github.com/rust-lang/crates.io-index" 2231 - checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e" 2232 - dependencies = [ 2233 - "mime", 2234 - "unicase", 2235 - ] 2236 - 2237 - [[package]] 2238 1947 name = "minimal-lexical" 2239 1948 version = "0.2.1" 2240 1949 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 2279 1988 ] 2280 1989 2281 1990 [[package]] 2282 - name = "multibase" 2283 - version = "0.9.2" 2284 - source = "registry+https://github.com/rust-lang/crates.io-index" 2285 - checksum = "8694bb4835f452b0e3bb06dbebb1d6fc5385b6ca1caf2e55fd165c042390ec77" 2286 - dependencies = [ 2287 - "base-x", 2288 - "base256emoji", 2289 - "data-encoding", 2290 - "data-encoding-macro", 2291 - ] 2292 - 2293 - [[package]] 2294 - name = "multihash" 2295 - version = "0.19.3" 2296 - source = "registry+https://github.com/rust-lang/crates.io-index" 2297 - checksum = "6b430e7953c29dd6a09afc29ff0bb69c6e306329ee6794700aee27b76a1aea8d" 2298 - dependencies = [ 2299 - "core2", 2300 - "serde", 2301 - "unsigned-varint", 2302 - ] 2303 - 2304 - [[package]] 2305 1991 name = "native-tls" 2306 1992 version = "0.2.14" 2307 1993 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 2350 2036 ] 2351 2037 2352 2038 [[package]] 2039 + name = "num-bigint-dig" 2040 + version = "0.8.4" 2041 + source = "registry+https://github.com/rust-lang/crates.io-index" 2042 + checksum = "dc84195820f291c7697304f3cbdadd1cb7199c0efc917ff5eafd71225c136151" 2043 + dependencies = [ 2044 + "byteorder", 2045 + "lazy_static", 2046 + "libm", 2047 + "num-integer", 2048 + "num-iter", 2049 + "num-traits", 2050 + "rand 0.8.5", 2051 + "smallvec", 2052 + "zeroize", 2053 + ] 2054 + 2055 + [[package]] 2056 + name = "num-integer" 2057 + version = "0.1.46" 2058 + source = "registry+https://github.com/rust-lang/crates.io-index" 2059 + checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" 2060 + dependencies = [ 2061 + "num-traits", 2062 + ] 2063 + 2064 + [[package]] 2065 + name = "num-iter" 2066 + version = "0.1.45" 2067 + source = "registry+https://github.com/rust-lang/crates.io-index" 2068 + checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" 2069 + dependencies = [ 2070 + "autocfg", 2071 + "num-integer", 2072 + "num-traits", 2073 + ] 2074 + 2075 + [[package]] 2353 2076 name = "num-traits" 2354 2077 version = "0.2.19" 2355 2078 source = "registry+https://github.com/rust-lang/crates.io-index" 2356 2079 checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" 2357 2080 dependencies = [ 2358 2081 "autocfg", 2082 + "libm", 2359 2083 ] 2360 2084 2361 2085 [[package]] ··· 2372 2096 version = "1.21.3" 2373 2097 source = "registry+https://github.com/rust-lang/crates.io-index" 2374 2098 checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" 2375 - dependencies = [ 2376 - "critical-section", 2377 - "portable-atomic", 2378 - ] 2379 2099 2380 2100 [[package]] 2381 2101 name = "openssl" ··· 2431 2151 name = "ott-ingest" 2432 2152 version = "0.1.0" 2433 2153 dependencies = [ 2434 - "anyhow", 2435 - "atproto-identity", 2436 - "atproto-lexicon", 2437 2154 "fluvio", 2438 2155 "moka", 2439 - "prettyplease", 2156 + "pgvector", 2440 2157 "reqwest", 2441 - "schemars 1.0.4", 2158 + "rstest", 2442 2159 "serde", 2443 2160 "serde_json", 2444 - "syn 2.0.106", 2161 + "sqlx", 2445 2162 "tokio", 2446 2163 "tokio-postgres", 2447 2164 "tokio-stream", 2448 2165 "tracing", 2449 2166 "tracing-subscriber", 2450 - "typify", 2451 - ] 2452 - 2453 - [[package]] 2454 - name = "p256" 2455 - version = "0.13.2" 2456 - source = "registry+https://github.com/rust-lang/crates.io-index" 2457 - checksum = "c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b" 2458 - dependencies = [ 2459 - "ecdsa", 2460 - "elliptic-curve", 2461 - "primeorder", 2462 - "serdect", 2463 - "sha2", 2464 - ] 2465 - 2466 - [[package]] 2467 - name = "p384" 2468 - version = "0.13.1" 2469 - source = "registry+https://github.com/rust-lang/crates.io-index" 2470 - checksum = "fe42f1670a52a47d448f14b6a5c61dd78fce51856e68edaa38f7ae3a46b8d6b6" 2471 - dependencies = [ 2472 - "ecdsa", 2473 - "elliptic-curve", 2474 - "primeorder", 2475 - "serdect", 2476 - "sha2", 2477 2167 ] 2478 2168 2479 2169 [[package]] ··· 2552 2242 checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" 2553 2243 2554 2244 [[package]] 2245 + name = "pgvector" 2246 + version = "0.4.1" 2247 + source = "registry+https://github.com/rust-lang/crates.io-index" 2248 + checksum = "fc58e2d255979a31caa7cabfa7aac654af0354220719ab7a68520ae7a91e8c0b" 2249 + dependencies = [ 2250 + "sqlx", 2251 + ] 2252 + 2253 + [[package]] 2555 2254 name = "pharos" 2556 2255 version = "0.5.3" 2557 2256 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 2624 2323 ] 2625 2324 2626 2325 [[package]] 2326 + name = "pkcs1" 2327 + version = "0.7.5" 2328 + source = "registry+https://github.com/rust-lang/crates.io-index" 2329 + checksum = "c8ffb9f10fa047879315e6625af03c164b16962a5368d724ed16323b68ace47f" 2330 + dependencies = [ 2331 + "der", 2332 + "pkcs8", 2333 + "spki", 2334 + ] 2335 + 2336 + [[package]] 2627 2337 name = "pkcs8" 2628 2338 version = "0.10.2" 2629 2339 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 2717 2427 ] 2718 2428 2719 2429 [[package]] 2720 - name = "primeorder" 2721 - version = "0.13.6" 2430 + name = "proc-macro-crate" 2431 + version = "3.4.0" 2722 2432 source = "registry+https://github.com/rust-lang/crates.io-index" 2723 - checksum = "353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6" 2433 + checksum = "219cb19e96be00ab2e37d6e299658a0cfa83e52429179969b0f0121b4ac46983" 2724 2434 dependencies = [ 2725 - "elliptic-curve", 2726 - "serdect", 2435 + "toml_edit 0.23.6", 2727 2436 ] 2728 2437 2729 2438 [[package]] ··· 2736 2445 ] 2737 2446 2738 2447 [[package]] 2739 - name = "quinn" 2740 - version = "0.11.9" 2741 - source = "registry+https://github.com/rust-lang/crates.io-index" 2742 - checksum = "b9e20a958963c291dc322d98411f541009df2ced7b5a4f2bd52337638cfccf20" 2743 - dependencies = [ 2744 - "bytes", 2745 - "cfg_aliases", 2746 - "pin-project-lite", 2747 - "quinn-proto", 2748 - "quinn-udp", 2749 - "rustc-hash", 2750 - "rustls", 2751 - "socket2 0.6.0", 2752 - "thiserror 2.0.17", 2753 - "tokio", 2754 - "tracing", 2755 - "web-time", 2756 - ] 2757 - 2758 - [[package]] 2759 - name = "quinn-proto" 2760 - version = "0.11.13" 2761 - source = "registry+https://github.com/rust-lang/crates.io-index" 2762 - checksum = "f1906b49b0c3bc04b5fe5d86a77925ae6524a19b816ae38ce1e426255f1d8a31" 2763 - dependencies = [ 2764 - "bytes", 2765 - "getrandom 0.3.3", 2766 - "lru-slab", 2767 - "rand 0.9.2", 2768 - "ring", 2769 - "rustc-hash", 2770 - "rustls", 2771 - "rustls-pki-types", 2772 - "slab", 2773 - "thiserror 2.0.17", 2774 - "tinyvec", 2775 - "tracing", 2776 - "web-time", 2777 - ] 2778 - 2779 - [[package]] 2780 - name = "quinn-udp" 2781 - version = "0.5.14" 2782 - source = "registry+https://github.com/rust-lang/crates.io-index" 2783 - checksum = "addec6a0dcad8a8d96a771f815f0eaf55f9d1805756410b39f5fa81332574cbd" 2784 - dependencies = [ 2785 - "cfg_aliases", 2786 - "libc", 2787 - "once_cell", 2788 - "socket2 0.6.0", 2789 - "tracing", 2790 - "windows-sys 0.60.2", 2791 - ] 2792 - 2793 - [[package]] 2794 2448 name = "quote" 2795 2449 version = "1.0.41" 2796 2450 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 2890 2544 dependencies = [ 2891 2545 "getrandom 0.2.16", 2892 2546 "libredox", 2893 - "thiserror 2.0.17", 2547 + "thiserror", 2894 2548 ] 2895 2549 2896 2550 [[package]] ··· 2943 2597 checksum = "caf4aa5b0f434c91fe5c7f1ecb6a5ece2130b02ad2a590589dda5146df959001" 2944 2598 2945 2599 [[package]] 2946 - name = "regress" 2947 - version = "0.10.4" 2600 + name = "relative-path" 2601 + version = "1.9.3" 2948 2602 source = "registry+https://github.com/rust-lang/crates.io-index" 2949 - checksum = "145bb27393fe455dd64d6cbc8d059adfa392590a45eadf079c01b11857e7b010" 2950 - dependencies = [ 2951 - "hashbrown 0.15.5", 2952 - "memchr", 2953 - ] 2603 + checksum = "ba39f3699c378cd8970968dcbff9c43159ea4cfbd88d43c00b22f2ef10a435d2" 2954 2604 2955 2605 [[package]] 2956 2606 name = "reqwest" ··· 2962 2612 "bytes", 2963 2613 "encoding_rs", 2964 2614 "futures-core", 2965 - "futures-util", 2966 2615 "h2", 2967 2616 "http", 2968 2617 "http-body", ··· 2974 2623 "js-sys", 2975 2624 "log", 2976 2625 "mime", 2977 - "mime_guess", 2978 2626 "native-tls", 2979 2627 "percent-encoding", 2980 2628 "pin-project-lite", 2981 - "quinn", 2982 - "rustls", 2983 2629 "rustls-pki-types", 2984 2630 "serde", 2985 2631 "serde_json", ··· 2987 2633 "sync_wrapper", 2988 2634 "tokio", 2989 2635 "tokio-native-tls", 2990 - "tokio-rustls", 2991 2636 "tower", 2992 2637 "tower-http", 2993 2638 "tower-service", ··· 2995 2640 "wasm-bindgen", 2996 2641 "wasm-bindgen-futures", 2997 2642 "web-sys", 2998 - "webpki-roots", 2999 2643 ] 3000 2644 3001 2645 [[package]] 3002 - name = "reqwest-chain" 3003 - version = "1.0.0" 2646 + name = "ring" 2647 + version = "0.17.14" 3004 2648 source = "registry+https://github.com/rust-lang/crates.io-index" 3005 - checksum = "da5c014fb79a8227db44a0433d748107750d2550b7fca55c59a3d7ee7d2ee2b2" 2649 + checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" 3006 2650 dependencies = [ 3007 - "anyhow", 3008 - "async-trait", 3009 - "http", 3010 - "reqwest-middleware", 2651 + "cc", 2652 + "cfg-if", 2653 + "getrandom 0.2.16", 2654 + "libc", 2655 + "untrusted", 2656 + "windows-sys 0.52.0", 3011 2657 ] 3012 2658 3013 2659 [[package]] 3014 - name = "reqwest-middleware" 3015 - version = "0.4.2" 2660 + name = "rsa" 2661 + version = "0.9.8" 3016 2662 source = "registry+https://github.com/rust-lang/crates.io-index" 3017 - checksum = "57f17d28a6e6acfe1733fe24bcd30774d13bffa4b8a22535b4c8c98423088d4e" 2663 + checksum = "78928ac1ed176a5ca1d17e578a1825f3d81ca54cf41053a592584b020cfd691b" 3018 2664 dependencies = [ 3019 - "anyhow", 3020 - "async-trait", 3021 - "http", 3022 - "reqwest", 3023 - "serde", 3024 - "thiserror 1.0.69", 3025 - "tower-service", 2665 + "const-oid", 2666 + "digest", 2667 + "num-bigint-dig", 2668 + "num-integer", 2669 + "num-traits", 2670 + "pkcs1", 2671 + "pkcs8", 2672 + "rand_core 0.6.4", 2673 + "signature", 2674 + "spki", 2675 + "subtle", 2676 + "zeroize", 3026 2677 ] 3027 2678 3028 2679 [[package]] 3029 - name = "resolv-conf" 3030 - version = "0.7.5" 3031 - source = "registry+https://github.com/rust-lang/crates.io-index" 3032 - checksum = "6b3789b30bd25ba102de4beabd95d21ac45b69b1be7d14522bab988c526d6799" 3033 - 3034 - [[package]] 3035 - name = "rfc6979" 3036 - version = "0.4.0" 2680 + name = "rstest" 2681 + version = "0.26.1" 3037 2682 source = "registry+https://github.com/rust-lang/crates.io-index" 3038 - checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" 2683 + checksum = "f5a3193c063baaa2a95a33f03035c8a72b83d97a54916055ba22d35ed3839d49" 3039 2684 dependencies = [ 3040 - "hmac", 3041 - "subtle", 2685 + "futures-timer", 2686 + "futures-util", 2687 + "rstest_macros", 3042 2688 ] 3043 2689 3044 2690 [[package]] 3045 - name = "ring" 3046 - version = "0.17.14" 2691 + name = "rstest_macros" 2692 + version = "0.26.1" 3047 2693 source = "registry+https://github.com/rust-lang/crates.io-index" 3048 - checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" 2694 + checksum = "9c845311f0ff7951c5506121a9ad75aec44d083c31583b2ea5a30bcb0b0abba0" 3049 2695 dependencies = [ 3050 - "cc", 3051 2696 "cfg-if", 3052 - "getrandom 0.2.16", 3053 - "libc", 3054 - "untrusted", 3055 - "windows-sys 0.52.0", 2697 + "glob", 2698 + "proc-macro-crate", 2699 + "proc-macro2", 2700 + "quote", 2701 + "regex", 2702 + "relative-path", 2703 + "rustc_version", 2704 + "syn 2.0.106", 2705 + "unicode-ident", 3056 2706 ] 3057 2707 3058 2708 [[package]] ··· 3098 2748 "aws-lc-rs", 3099 2749 "log", 3100 2750 "once_cell", 3101 - "ring", 3102 2751 "rustls-pki-types", 3103 2752 "rustls-webpki", 3104 2753 "subtle", ··· 3120 2769 source = "registry+https://github.com/rust-lang/crates.io-index" 3121 2770 checksum = "229a4a4c221013e7e1f1a043678c5cc39fe5171437c88fb47151a21e6f5b5c79" 3122 2771 dependencies = [ 3123 - "web-time", 3124 2772 "zeroize", 3125 2773 ] 3126 2774 ··· 3159 2807 3160 2808 [[package]] 3161 2809 name = "schemars" 3162 - version = "0.8.22" 3163 - source = "registry+https://github.com/rust-lang/crates.io-index" 3164 - checksum = "3fbf2ae1b8bc8e02df939598064d22402220cd5bbcca1c76f7d6a310974d5615" 3165 - dependencies = [ 3166 - "dyn-clone", 3167 - "schemars_derive 0.8.22", 3168 - "serde", 3169 - "serde_json", 3170 - ] 3171 - 3172 - [[package]] 3173 - name = "schemars" 3174 2810 version = "1.0.4" 3175 2811 source = "registry+https://github.com/rust-lang/crates.io-index" 3176 2812 checksum = "82d20c4491bc164fa2f6c5d44565947a52ad80b9505d8e36f8d54c27c739fcd0" 3177 2813 dependencies = [ 3178 2814 "dyn-clone", 3179 2815 "ref-cast", 3180 - "schemars_derive 1.0.4", 2816 + "schemars_derive", 3181 2817 "serde", 3182 2818 "serde_json", 3183 2819 ] 3184 2820 3185 2821 [[package]] 3186 2822 name = "schemars_derive" 3187 - version = "0.8.22" 3188 - source = "registry+https://github.com/rust-lang/crates.io-index" 3189 - checksum = "32e265784ad618884abaea0600a9adf15393368d840e0222d101a072f3f7534d" 3190 - dependencies = [ 3191 - "proc-macro2", 3192 - "quote", 3193 - "serde_derive_internals", 3194 - "syn 2.0.106", 3195 - ] 3196 - 3197 - [[package]] 3198 - name = "schemars_derive" 3199 2823 version = "1.0.4" 3200 2824 source = "registry+https://github.com/rust-lang/crates.io-index" 3201 2825 checksum = "33d020396d1d138dc19f1165df7545479dcd58d93810dc5d646a16e55abefa80" ··· 3213 2837 checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" 3214 2838 3215 2839 [[package]] 3216 - name = "sec1" 3217 - version = "0.7.3" 3218 - source = "registry+https://github.com/rust-lang/crates.io-index" 3219 - checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" 3220 - dependencies = [ 3221 - "base16ct", 3222 - "der", 3223 - "generic-array", 3224 - "pkcs8", 3225 - "serdect", 3226 - "subtle", 3227 - "zeroize", 3228 - ] 3229 - 3230 - [[package]] 3231 2840 name = "security-framework" 3232 2841 version = "2.11.1" 3233 2842 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 3277 2886 ] 3278 2887 3279 2888 [[package]] 3280 - name = "serde_bytes" 3281 - version = "0.11.19" 3282 - source = "registry+https://github.com/rust-lang/crates.io-index" 3283 - checksum = "a5d440709e79d88e51ac01c4b72fc6cb7314017bb7da9eeff678aa94c10e3ea8" 3284 - dependencies = [ 3285 - "serde", 3286 - "serde_core", 3287 - ] 3288 - 3289 - [[package]] 3290 2889 name = "serde_core" 3291 2890 version = "1.0.228" 3292 2891 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 3318 2917 ] 3319 2918 3320 2919 [[package]] 3321 - name = "serde_ipld_dagcbor" 3322 - version = "0.6.4" 3323 - source = "registry+https://github.com/rust-lang/crates.io-index" 3324 - checksum = "46182f4f08349a02b45c998ba3215d3f9de826246ba02bb9dddfe9a2a2100778" 3325 - dependencies = [ 3326 - "cbor4ii", 3327 - "ipld-core", 3328 - "scopeguard", 3329 - "serde", 3330 - ] 3331 - 3332 - [[package]] 3333 2920 name = "serde_json" 3334 2921 version = "1.0.145" 3335 2922 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 3352 2939 ] 3353 2940 3354 2941 [[package]] 3355 - name = "serde_tokenstream" 3356 - version = "0.2.2" 3357 - source = "registry+https://github.com/rust-lang/crates.io-index" 3358 - checksum = "64060d864397305347a78851c51588fd283767e7e7589829e8121d65512340f1" 3359 - dependencies = [ 3360 - "proc-macro2", 3361 - "quote", 3362 - "serde", 3363 - "syn 2.0.106", 3364 - ] 3365 - 3366 - [[package]] 3367 2942 name = "serde_urlencoded" 3368 2943 version = "0.7.1" 3369 2944 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 3389 2964 ] 3390 2965 3391 2966 [[package]] 3392 - name = "serdect" 3393 - version = "0.2.0" 2967 + name = "sha1" 2968 + version = "0.10.6" 3394 2969 source = "registry+https://github.com/rust-lang/crates.io-index" 3395 - checksum = "a84f14a19e9a014bb9f4512488d9829a68e04ecabffb0f9904cd1ace94598177" 2970 + checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" 3396 2971 dependencies = [ 3397 - "base16ct", 3398 - "serde", 2972 + "cfg-if", 2973 + "cpufeatures", 2974 + "digest", 3399 2975 ] 3400 2976 3401 2977 [[package]] ··· 3460 3036 version = "1.15.1" 3461 3037 source = "registry+https://github.com/rust-lang/crates.io-index" 3462 3038 checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" 3039 + dependencies = [ 3040 + "serde", 3041 + ] 3463 3042 3464 3043 [[package]] 3465 3044 name = "snap" ··· 3488 3067 ] 3489 3068 3490 3069 [[package]] 3070 + name = "spin" 3071 + version = "0.9.8" 3072 + source = "registry+https://github.com/rust-lang/crates.io-index" 3073 + checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" 3074 + dependencies = [ 3075 + "lock_api", 3076 + ] 3077 + 3078 + [[package]] 3491 3079 name = "spki" 3492 3080 version = "0.7.3" 3493 3081 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 3498 3086 ] 3499 3087 3500 3088 [[package]] 3089 + name = "sqlx" 3090 + version = "0.8.6" 3091 + source = "registry+https://github.com/rust-lang/crates.io-index" 3092 + checksum = "1fefb893899429669dcdd979aff487bd78f4064e5e7907e4269081e0ef7d97dc" 3093 + dependencies = [ 3094 + "sqlx-core", 3095 + "sqlx-macros", 3096 + "sqlx-mysql", 3097 + "sqlx-postgres", 3098 + "sqlx-sqlite", 3099 + ] 3100 + 3101 + [[package]] 3102 + name = "sqlx-core" 3103 + version = "0.8.6" 3104 + source = "registry+https://github.com/rust-lang/crates.io-index" 3105 + checksum = "ee6798b1838b6a0f69c007c133b8df5866302197e404e8b6ee8ed3e3a5e68dc6" 3106 + dependencies = [ 3107 + "base64", 3108 + "bytes", 3109 + "crc", 3110 + "crossbeam-queue", 3111 + "either", 3112 + "event-listener", 3113 + "futures-core", 3114 + "futures-intrusive", 3115 + "futures-io", 3116 + "futures-util", 3117 + "hashbrown 0.15.5", 3118 + "hashlink", 3119 + "indexmap", 3120 + "log", 3121 + "memchr", 3122 + "native-tls", 3123 + "once_cell", 3124 + "percent-encoding", 3125 + "serde", 3126 + "serde_json", 3127 + "sha2", 3128 + "smallvec", 3129 + "thiserror", 3130 + "tokio", 3131 + "tokio-stream", 3132 + "tracing", 3133 + "url", 3134 + ] 3135 + 3136 + [[package]] 3137 + name = "sqlx-macros" 3138 + version = "0.8.6" 3139 + source = "registry+https://github.com/rust-lang/crates.io-index" 3140 + checksum = "a2d452988ccaacfbf5e0bdbc348fb91d7c8af5bee192173ac3636b5fb6e6715d" 3141 + dependencies = [ 3142 + "proc-macro2", 3143 + "quote", 3144 + "sqlx-core", 3145 + "sqlx-macros-core", 3146 + "syn 2.0.106", 3147 + ] 3148 + 3149 + [[package]] 3150 + name = "sqlx-macros-core" 3151 + version = "0.8.6" 3152 + source = "registry+https://github.com/rust-lang/crates.io-index" 3153 + checksum = "19a9c1841124ac5a61741f96e1d9e2ec77424bf323962dd894bdb93f37d5219b" 3154 + dependencies = [ 3155 + "dotenvy", 3156 + "either", 3157 + "heck", 3158 + "hex", 3159 + "once_cell", 3160 + "proc-macro2", 3161 + "quote", 3162 + "serde", 3163 + "serde_json", 3164 + "sha2", 3165 + "sqlx-core", 3166 + "sqlx-mysql", 3167 + "sqlx-postgres", 3168 + "sqlx-sqlite", 3169 + "syn 2.0.106", 3170 + "tokio", 3171 + "url", 3172 + ] 3173 + 3174 + [[package]] 3175 + name = "sqlx-mysql" 3176 + version = "0.8.6" 3177 + source = "registry+https://github.com/rust-lang/crates.io-index" 3178 + checksum = "aa003f0038df784eb8fecbbac13affe3da23b45194bd57dba231c8f48199c526" 3179 + dependencies = [ 3180 + "atoi", 3181 + "base64", 3182 + "bitflags 2.9.4", 3183 + "byteorder", 3184 + "bytes", 3185 + "crc", 3186 + "digest", 3187 + "dotenvy", 3188 + "either", 3189 + "futures-channel", 3190 + "futures-core", 3191 + "futures-io", 3192 + "futures-util", 3193 + "generic-array", 3194 + "hex", 3195 + "hkdf", 3196 + "hmac", 3197 + "itoa", 3198 + "log", 3199 + "md-5", 3200 + "memchr", 3201 + "once_cell", 3202 + "percent-encoding", 3203 + "rand 0.8.5", 3204 + "rsa", 3205 + "serde", 3206 + "sha1", 3207 + "sha2", 3208 + "smallvec", 3209 + "sqlx-core", 3210 + "stringprep", 3211 + "thiserror", 3212 + "tracing", 3213 + "whoami", 3214 + ] 3215 + 3216 + [[package]] 3217 + name = "sqlx-postgres" 3218 + version = "0.8.6" 3219 + source = "registry+https://github.com/rust-lang/crates.io-index" 3220 + checksum = "db58fcd5a53cf07c184b154801ff91347e4c30d17a3562a635ff028ad5deda46" 3221 + dependencies = [ 3222 + "atoi", 3223 + "base64", 3224 + "bitflags 2.9.4", 3225 + "byteorder", 3226 + "crc", 3227 + "dotenvy", 3228 + "etcetera", 3229 + "futures-channel", 3230 + "futures-core", 3231 + "futures-util", 3232 + "hex", 3233 + "hkdf", 3234 + "hmac", 3235 + "home", 3236 + "itoa", 3237 + "log", 3238 + "md-5", 3239 + "memchr", 3240 + "once_cell", 3241 + "rand 0.8.5", 3242 + "serde", 3243 + "serde_json", 3244 + "sha2", 3245 + "smallvec", 3246 + "sqlx-core", 3247 + "stringprep", 3248 + "thiserror", 3249 + "tracing", 3250 + "whoami", 3251 + ] 3252 + 3253 + [[package]] 3254 + name = "sqlx-sqlite" 3255 + version = "0.8.6" 3256 + source = "registry+https://github.com/rust-lang/crates.io-index" 3257 + checksum = "c2d12fe70b2c1b4401038055f90f151b78208de1f9f89a7dbfd41587a10c3eea" 3258 + dependencies = [ 3259 + "atoi", 3260 + "flume", 3261 + "futures-channel", 3262 + "futures-core", 3263 + "futures-executor", 3264 + "futures-intrusive", 3265 + "futures-util", 3266 + "libsqlite3-sys", 3267 + "log", 3268 + "percent-encoding", 3269 + "serde", 3270 + "serde_urlencoded", 3271 + "sqlx-core", 3272 + "thiserror", 3273 + "tracing", 3274 + "url", 3275 + ] 3276 + 3277 + [[package]] 3501 3278 name = "stable_deref_trait" 3502 3279 version = "1.2.0" 3503 3280 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 3612 3389 "once_cell", 3613 3390 "rustix", 3614 3391 "windows-sys 0.61.1", 3615 - ] 3616 - 3617 - [[package]] 3618 - name = "thiserror" 3619 - version = "1.0.69" 3620 - source = "registry+https://github.com/rust-lang/crates.io-index" 3621 - checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" 3622 - dependencies = [ 3623 - "thiserror-impl 1.0.69", 3624 3392 ] 3625 3393 3626 3394 [[package]] ··· 3629 3397 source = "registry+https://github.com/rust-lang/crates.io-index" 3630 3398 checksum = "f63587ca0f12b72a0600bcba1d40081f830876000bb46dd2337a3051618f4fc8" 3631 3399 dependencies = [ 3632 - "thiserror-impl 2.0.17", 3633 - ] 3634 - 3635 - [[package]] 3636 - name = "thiserror-impl" 3637 - version = "1.0.69" 3638 - source = "registry+https://github.com/rust-lang/crates.io-index" 3639 - checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" 3640 - dependencies = [ 3641 - "proc-macro2", 3642 - "quote", 3643 - "syn 2.0.106", 3400 + "thiserror-impl", 3644 3401 ] 3645 3402 3646 3403 [[package]] ··· 3799 3556 "indexmap", 3800 3557 "serde", 3801 3558 "serde_spanned", 3802 - "toml_datetime", 3803 - "toml_edit", 3559 + "toml_datetime 0.6.11", 3560 + "toml_edit 0.22.27", 3804 3561 ] 3805 3562 3806 3563 [[package]] ··· 3813 3570 ] 3814 3571 3815 3572 [[package]] 3573 + name = "toml_datetime" 3574 + version = "0.7.2" 3575 + source = "registry+https://github.com/rust-lang/crates.io-index" 3576 + checksum = "32f1085dec27c2b6632b04c80b3bb1b4300d6495d1e129693bdda7d91e72eec1" 3577 + dependencies = [ 3578 + "serde_core", 3579 + ] 3580 + 3581 + [[package]] 3816 3582 name = "toml_edit" 3817 3583 version = "0.22.27" 3818 3584 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 3821 3587 "indexmap", 3822 3588 "serde", 3823 3589 "serde_spanned", 3824 - "toml_datetime", 3590 + "toml_datetime 0.6.11", 3825 3591 "toml_write", 3826 3592 "winnow", 3827 3593 ] 3828 3594 3829 3595 [[package]] 3596 + name = "toml_edit" 3597 + version = "0.23.6" 3598 + source = "registry+https://github.com/rust-lang/crates.io-index" 3599 + checksum = "f3effe7c0e86fdff4f69cdd2ccc1b96f933e24811c5441d44904e8683e27184b" 3600 + dependencies = [ 3601 + "indexmap", 3602 + "toml_datetime 0.7.2", 3603 + "toml_parser", 3604 + "winnow", 3605 + ] 3606 + 3607 + [[package]] 3608 + name = "toml_parser" 3609 + version = "1.0.3" 3610 + source = "registry+https://github.com/rust-lang/crates.io-index" 3611 + checksum = "4cf893c33be71572e0e9aa6dd15e6677937abd686b066eac3f8cd3531688a627" 3612 + dependencies = [ 3613 + "winnow", 3614 + ] 3615 + 3616 + [[package]] 3830 3617 name = "toml_write" 3831 3618 version = "0.1.2" 3832 3619 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 3883 3670 source = "registry+https://github.com/rust-lang/crates.io-index" 3884 3671 checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" 3885 3672 dependencies = [ 3673 + "log", 3886 3674 "pin-project-lite", 3887 3675 "tracing-attributes", 3888 3676 "tracing-core", ··· 3957 3745 checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" 3958 3746 3959 3747 [[package]] 3960 - name = "typify" 3961 - version = "0.4.3" 3962 - source = "registry+https://github.com/rust-lang/crates.io-index" 3963 - checksum = "7144144e97e987c94758a3017c920a027feac0799df325d6df4fc8f08d02068e" 3964 - dependencies = [ 3965 - "typify-impl", 3966 - "typify-macro", 3967 - ] 3968 - 3969 - [[package]] 3970 - name = "typify-impl" 3971 - version = "0.4.3" 3972 - source = "registry+https://github.com/rust-lang/crates.io-index" 3973 - checksum = "062879d46aa4c9dfe0d33b035bbaf512da192131645d05deacb7033ec8581a09" 3974 - dependencies = [ 3975 - "heck", 3976 - "log", 3977 - "proc-macro2", 3978 - "quote", 3979 - "regress", 3980 - "schemars 0.8.22", 3981 - "semver", 3982 - "serde", 3983 - "serde_json", 3984 - "syn 2.0.106", 3985 - "thiserror 2.0.17", 3986 - "unicode-ident", 3987 - ] 3988 - 3989 - [[package]] 3990 - name = "typify-macro" 3991 - version = "0.4.3" 3992 - source = "registry+https://github.com/rust-lang/crates.io-index" 3993 - checksum = "9708a3ceb6660ba3f8d2b8f0567e7d4b8b198e2b94d093b8a6077a751425de9e" 3994 - dependencies = [ 3995 - "proc-macro2", 3996 - "quote", 3997 - "schemars 0.8.22", 3998 - "semver", 3999 - "serde", 4000 - "serde_json", 4001 - "serde_tokenstream", 4002 - "syn 2.0.106", 4003 - "typify-impl", 4004 - ] 4005 - 4006 - [[package]] 4007 - name = "ulid" 4008 - version = "1.2.1" 4009 - source = "registry+https://github.com/rust-lang/crates.io-index" 4010 - checksum = "470dbf6591da1b39d43c14523b2b469c86879a53e8b758c8e090a470fe7b1fbe" 4011 - dependencies = [ 4012 - "rand 0.9.2", 4013 - "web-time", 4014 - ] 4015 - 4016 - [[package]] 4017 - name = "unicase" 4018 - version = "2.8.1" 4019 - source = "registry+https://github.com/rust-lang/crates.io-index" 4020 - checksum = "75b844d17643ee918803943289730bec8aac480150456169e647ed0b576ba539" 4021 - 4022 - [[package]] 4023 3748 name = "unicode-bidi" 4024 3749 version = "0.3.18" 4025 3750 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 4053 3778 checksum = "673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861" 4054 3779 4055 3780 [[package]] 4056 - name = "unsigned-varint" 4057 - version = "0.8.0" 4058 - source = "registry+https://github.com/rust-lang/crates.io-index" 4059 - checksum = "eb066959b24b5196ae73cb057f45598450d2c5f71460e98c49b738086eff9c06" 4060 - 4061 - [[package]] 4062 3781 name = "untrusted" 4063 3782 version = "0.9.0" 4064 3783 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 4077 3796 ] 4078 3797 4079 3798 [[package]] 4080 - name = "urlencoding" 4081 - version = "2.1.3" 4082 - source = "registry+https://github.com/rust-lang/crates.io-index" 4083 - checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da" 4084 - 4085 - [[package]] 4086 3799 name = "utf8_iter" 4087 3800 version = "1.0.4" 4088 3801 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 4249 3962 ] 4250 3963 4251 3964 [[package]] 4252 - name = "webpki-roots" 4253 - version = "1.0.2" 4254 - source = "registry+https://github.com/rust-lang/crates.io-index" 4255 - checksum = "7e8983c3ab33d6fb807cfcdad2491c4ea8cbc8ed839181c7dfd9c67c83e261b2" 4256 - dependencies = [ 4257 - "rustls-pki-types", 4258 - ] 4259 - 4260 - [[package]] 4261 3965 name = "whoami" 4262 3966 version = "1.6.1" 4263 3967 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 4267 3971 "wasite", 4268 3972 "web-sys", 4269 3973 ] 4270 - 4271 - [[package]] 4272 - name = "widestring" 4273 - version = "1.2.0" 4274 - source = "registry+https://github.com/rust-lang/crates.io-index" 4275 - checksum = "dd7cf3379ca1aac9eea11fba24fd7e315d621f8dfe35c8d7d2be8b793726e07d" 4276 3974 4277 3975 [[package]] 4278 3976 name = "winapi" ··· 4419 4117 4420 4118 [[package]] 4421 4119 name = "windows-sys" 4422 - version = "0.60.2" 4423 - source = "registry+https://github.com/rust-lang/crates.io-index" 4424 - checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" 4425 - dependencies = [ 4426 - "windows-targets 0.53.4", 4427 - ] 4428 - 4429 - [[package]] 4430 - name = "windows-sys" 4431 4120 version = "0.61.1" 4432 4121 source = "registry+https://github.com/rust-lang/crates.io-index" 4433 4122 checksum = "6f109e41dd4a3c848907eb83d5a42ea98b3769495597450cf6d153507b166f0f" ··· 4631 4320 ] 4632 4321 4633 4322 [[package]] 4634 - name = "winreg" 4635 - version = "0.50.0" 4636 - source = "registry+https://github.com/rust-lang/crates.io-index" 4637 - checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" 4638 - dependencies = [ 4639 - "cfg-if", 4640 - "windows-sys 0.48.0", 4641 - ] 4642 - 4643 - [[package]] 4644 4323 name = "wit-bindgen" 4645 4324 version = "0.46.0" 4646 4325 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 4665 4344 "pharos", 4666 4345 "rustc_version", 4667 4346 "send_wrapper", 4668 - "thiserror 2.0.17", 4347 + "thiserror", 4669 4348 "wasm-bindgen", 4670 4349 "wasm-bindgen-futures", 4671 4350 "web-sys",
+5 -12
crates/ott-ingest/Cargo.toml
··· 6 6 [dependencies] 7 7 fluvio = "0.50.1" 8 8 moka = { version = "0.12.11", features = ["sync"] } 9 + pgvector = { version = "0.4", features = ["sqlx"] } 9 10 reqwest = { version = "0.12.23", features = ["json"] } 10 11 serde = { version = "1.0.226", features = ["derive"] } 11 12 serde_json = "1.0.145" 12 - tokio = "1.47.1" 13 + sqlx = { version = "0.8.6", features = [ "postgres", "runtime-tokio", "tls-native-tls" ] } 14 + tokio = { version = "1.47.1", features = ["full", "sync"] } 13 15 tokio-postgres = "0.7.14" 14 16 tokio-stream = "0.1.17" 15 17 tracing = "0.1.41" 16 18 tracing-subscriber = { version = "0.3.20", features = ["env-filter"] } 17 19 18 - [build-dependencies] 19 - anyhow = "1.0.100" 20 - atproto-identity = "0.13.0" 21 - atproto-lexicon = "0.13.0" 22 - reqwest = "0.12.23" 23 - serde_json = "1.0.145" 24 - tokio = { version = "1.47.1", features = ["full"] } 25 - prettyplease = "0.2" 26 - schemars = "1.0.4" 27 - syn = "2.0.106" 28 - typify = "0.4.3" 20 + [dev-dependencies] 21 + rstest = "0.26.1"
-40
crates/ott-ingest/build.rs
··· 1 - use std::{fs, path::Path}; 2 - 3 - use atproto_identity::resolve::HickoryDnsResolver; 4 - use atproto_lexicon::resolve::{DefaultLexiconResolver, LexiconResolver}; 5 - use atproto_lexicon::resolve_recursive::{RecursiveLexiconResolver, RecursiveResolverConfig}; 6 - 7 - fn main() -> anyhow::Result<()> { 8 - let rt = tokio::runtime::Runtime::new()?; 9 - 10 - rt.block_on(async { 11 - let http_client = reqwest::Client::new(); 12 - let dns_resolver = HickoryDnsResolver::create_resolver(&[]); 13 - let resolver = DefaultLexiconResolver::new(http_client, dns_resolver); 14 - 15 - let config = RecursiveResolverConfig { 16 - max_depth: 5, // Maximum recursion depth 17 - include_entry: true, // Include the entry lexicon in results 18 - }; 19 - 20 - let recursive_resolver = RecursiveLexiconResolver::with_config(resolver, config); 21 - 22 - let lexicon = recursive_resolver 23 - .resolve_recursive("app.bsky.feed.post") 24 - .await?; 25 - let json = serde_json::to_string_pretty(&lexicon)?; 26 - let out_dir = std::env::var("OUT_DIR")?; 27 - let dest_path = Path::new(&out_dir).join("post.json"); 28 - fs::write(&dest_path, json)?; 29 - 30 - let lexicon = recursive_resolver 31 - .resolve_recursive("app.bsky.feed.like") 32 - .await?; 33 - let json = serde_json::to_string_pretty(&lexicon)?; 34 - let out_dir = std::env::var("OUT_DIR")?; 35 - let dest_path = Path::new(&out_dir).join("like.json"); 36 - fs::write(&dest_path, json)?; 37 - 38 - Ok(()) 39 - }) 40 - }
-56
crates/ott-ingest/schemas/like.json
··· 1 - { 2 - "com.atproto.repo.strongRef": { 3 - "$type": "com.atproto.lexicon.schema", 4 - "defs": { 5 - "main": { 6 - "properties": { 7 - "cid": { 8 - "format": "cid", 9 - "type": "string" 10 - }, 11 - "uri": { 12 - "format": "at-uri", 13 - "type": "string" 14 - } 15 - }, 16 - "required": [ 17 - "uri", 18 - "cid" 19 - ], 20 - "type": "object" 21 - } 22 - }, 23 - "description": "A URI with a content-hash fingerprint.", 24 - "id": "com.atproto.repo.strongRef", 25 - "lexicon": 1 26 - }, 27 - "app.bsky.feed.like": { 28 - "$type": "com.atproto.lexicon.schema", 29 - "defs": { 30 - "main": { 31 - "description": "Record declaring a 'like' of a piece of subject content.", 32 - "key": "tid", 33 - "record": { 34 - "properties": { 35 - "createdAt": { 36 - "format": "datetime", 37 - "type": "string" 38 - }, 39 - "subject": { 40 - "ref": "com.atproto.repo.strongRef", 41 - "type": "ref" 42 - } 43 - }, 44 - "required": [ 45 - "subject", 46 - "createdAt" 47 - ], 48 - "type": "object" 49 - }, 50 - "type": "record" 51 - } 52 - }, 53 - "id": "app.bsky.feed.like", 54 - "lexicon": 1 55 - } 56 - }
-31
crates/ott-ingest/schemas/like.rs
··· 1 - #![allow(clippy::redundant_closure_call)] 2 - #![allow(clippy::needless_lifetimes)] 3 - #![allow(clippy::match_single_binding)] 4 - #![allow(clippy::clone_on_copy)] 5 - 6 - #[doc = r" Error types."] 7 - pub mod error { 8 - #[doc = r" Error from a `TryFrom` or `FromStr` implementation."] 9 - pub struct ConversionError(::std::borrow::Cow<'static, str>); 10 - impl ::std::error::Error for ConversionError {} 11 - impl ::std::fmt::Display for ConversionError { 12 - fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> Result<(), ::std::fmt::Error> { 13 - ::std::fmt::Display::fmt(&self.0, f) 14 - } 15 - } 16 - impl ::std::fmt::Debug for ConversionError { 17 - fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> Result<(), ::std::fmt::Error> { 18 - ::std::fmt::Debug::fmt(&self.0, f) 19 - } 20 - } 21 - impl From<&'static str> for ConversionError { 22 - fn from(value: &'static str) -> Self { 23 - Self(value.into()) 24 - } 25 - } 26 - impl From<String> for ConversionError { 27 - fn from(value: String) -> Self { 28 - Self(value.into()) 29 - } 30 - } 31 - }
+1
crates/ott-ingest/src/lib.rs
··· 1 + pub mod pg_client; 1 2 pub mod tei_client;
+103 -39
crates/ott-ingest/src/main.rs
··· 1 1 use serde::Deserialize; 2 2 use tokio::{ 3 3 select, 4 - time::{Duration, sleep}, 4 + sync::mpsc::{self, Receiver, Sender}, 5 + time::{sleep, Duration}, 5 6 }; 7 + 6 8 use tokio_stream::StreamExt; 7 9 use tracing::{debug, error, info, warn}; 8 - use tracing_subscriber::{EnvFilter, field::display, fmt}; 10 + use tracing_subscriber::{field::display, fmt, EnvFilter}; 9 11 10 12 use fluvio::{ 13 + consumer::{ConsumerConfigExtBuilder, ConsumerRecord, ConsumerStream}, 11 14 Fluvio, Offset, 12 - consumer::{ConsumerConfigExtBuilder, ConsumerRecord}, 13 15 }; 14 - use moka::{ 15 - ops::compute::{CompResult, Op}, 16 - sync::Cache, 17 - }; 18 - use ott_ingest::tei_client; 16 + use moka::{ops::compute::Op, sync::Cache}; 17 + use ott_ingest::tei_client::TextEmbedding; 19 18 20 19 const LIKES_TOPIC: &str = "raw-likes"; 21 20 const POSTS_TOPIC: &str = "raw-posts"; 22 21 const PARTITION_NUM: u32 = 0; 22 + const TEI_URL: &str = "http://localhost:8080"; 23 23 24 24 #[derive(Debug, Deserialize, Clone)] 25 + struct RawPost { 26 + did: String, 27 + uri: String, 28 + commit: Commit, 29 + } 30 + 31 + #[derive(Debug, Deserialize, Clone)] 32 + #[serde(tag = "operation", rename_all = "lowercase")] 33 + enum Commit { 34 + Create { record: Record }, 35 + Delete, 36 + Update, 37 + } 38 + 39 + #[derive(Debug, Deserialize, Clone)] 40 + struct Record { 41 + text: String, 42 + } 43 + 44 + #[derive(Debug, Deserialize, Clone, Default)] 25 45 struct Post { 26 46 did: String, 27 47 uri: String, 28 - #[serde(default)] 48 + text: String, 29 49 count: u32, 30 50 } 31 51 ··· 50 70 .await 51 71 .expect("Failed to connect to Fluvio"); 52 72 53 - let config = ConsumerConfigExtBuilder::default() 54 - .topic(POSTS_TOPIC) 55 - .partition(PARTITION_NUM) 56 - .offset_start(Offset::beginning()) 57 - .build() 58 - .expect("Failed to build consumer config"); 59 - let mut posts_stream = fluvio 60 - .consumer_with_config(config) 61 - .await 62 - .expect("Failed to create consumer"); 73 + let posts_fut = get_topic_stream(POSTS_TOPIC, PARTITION_NUM, &fluvio); 74 + let like_fut = get_topic_stream(LIKES_TOPIC, PARTITION_NUM, &fluvio); 75 + let (mut posts_stream, mut like_stream) = tokio::join!(posts_fut, like_fut); 76 + 77 + let (embed_tx, embed_rx) = mpsc::channel::<Post>(1000); 78 + let (store_tx, store_rx) = mpsc::channel::<PostEmbedding>(1000); 63 79 64 - let config = ConsumerConfigExtBuilder::default() 65 - .topic(LIKES_TOPIC) 66 - .partition(PARTITION_NUM) 67 - .offset_start(Offset::beginning()) 68 - .build() 69 - .expect("Failed to build consumer config"); 70 - let mut like_stream = fluvio 71 - .consumer_with_config(config) 72 - .await 73 - .expect("Failed to create consumer"); 80 + // Start embedding tracing_subscriber 81 + let fut = async move { 82 + embed_post(embed_rx, store_tx).await; 83 + }; 84 + tokio::spawn(fut); 74 85 75 86 loop { 76 87 let pcc = posts_cache.clone(); 77 88 let lcc = posts_cache.clone(); 78 89 select! { 79 90 Some(Ok(record)) = posts_stream.next() => { 80 - let post: Post = serde_json::from_slice(record.value()).unwrap(); 81 - pcc.entry(post.uri.clone()) 82 - .and_compute_with(|maybe_entry| { 83 - if maybe_entry.is_some() { 84 - Op::Nop 85 - } else { 86 - Op::Put(post) // Insert 87 - } 88 - }); 91 + let post: RawPost = serde_json::from_slice(record.value()).unwrap(); 92 + match &post.commit { 93 + Commit::Create{record} => { 94 + pcc.entry(post.uri.clone()) 95 + .and_compute_with(|maybe_entry| { 96 + if maybe_entry.is_some() { 97 + Op::Nop 98 + } else { 99 + let post = Post{ 100 + uri: post.uri, 101 + did: post.did, 102 + text: record.text.to_string(), 103 + ..Default::default()}; 104 + Op::Put(post) // Insert 105 + } 106 + } 107 + ); 108 + }, 109 + _ => { 110 + info!("Got create or update post"); 111 + } 112 + } 113 + 89 114 }, 90 115 Some(Ok(record)) = like_stream.next() => { 91 116 if let Ok(like) = serde_json::from_slice::<Like>(record.value()) { ··· 95 120 let mut post = entry.into_value(); 96 121 if post.count < 20 { 97 122 post.count +=1; 98 - warn!("Incread counter for {:#?}", post); 99 123 Op::Put(post) 100 124 } else { 125 + let tx_clone = embed_tx.clone(); 126 + tokio::spawn(async move { 127 + if let Err(e) = tx_clone.send(post).await { 128 + error!("Failed to send post: {}", e); 129 + } 130 + }); 101 131 Op::Remove 102 132 } 103 133 } else { ··· 111 141 } 112 142 } 113 143 } 144 + 145 + async fn get_topic_stream(topic: &str, partition: u32, fluvio: &Fluvio) -> impl ConsumerStream { 146 + let config = ConsumerConfigExtBuilder::default() 147 + .topic(topic) 148 + .partition(partition) 149 + .offset_start(Offset::beginning()) 150 + .build() 151 + .expect("Failed to build consumer config"); 152 + let posts_stream = fluvio 153 + .consumer_with_config(config) 154 + .await 155 + .expect("Failed to create consumer"); 156 + posts_stream 157 + } 158 + 159 + struct PostEmbedding { 160 + uri: String, 161 + vector: Vec<f32>, 162 + } 163 + 164 + async fn embed_post(mut post_rx: Receiver<Post>, embedding_tx: Sender<PostEmbedding>) { 165 + let tei_client = TextEmbedding::new(TEI_URL); 166 + while let Some(post) = post_rx.recv().await { 167 + if let Ok(vec) = tei_client.embed(post.text.as_str()).await { 168 + embedding_tx 169 + .send(PostEmbedding { 170 + uri: post.uri, 171 + vector: vec, 172 + }) 173 + .await 174 + .expect("Failed to send vector"); 175 + }; 176 + } 177 + }
+5
crates/ott-ingest/src/pg_client.rs
··· 1 + use sqlx::PgPool; 2 + 3 + struct PgClient { 4 + pool: PgPool, 5 + }
+63 -30
crates/ott-ingest/src/tei_client.rs
··· 1 - use serde_json::{Error, json}; 1 + use serde_json::json; 2 + use std::sync::Arc; 2 3 use std::time::Duration; 3 - use tokio::sync::OnceCell; 4 + 5 + #[derive(Clone)] 6 + pub struct TextEmbedding { 7 + client: Arc<reqwest::Client>, 8 + url: String, 9 + } 10 + 11 + impl TextEmbedding { 12 + pub fn new(url: &str) -> Self { 13 + Self { 14 + url: url.to_string(), 15 + client: Arc::new( 16 + reqwest::Client::builder() 17 + .timeout(Duration::from_secs(30)) 18 + .build() 19 + .expect("Failed to create HTTP client"), 20 + ), 21 + } 22 + } 23 + 24 + pub async fn embed(&self, message: &str) -> Result<Vec<f32>, String> { 25 + // Create JSON payload 26 + let payload = json!({ 27 + "inputs": message, 28 + }); 29 + 30 + // Send POST request 31 + let response = self 32 + .client 33 + .post(&self.url) 34 + .header("Content-Type", "application/json") 35 + .json(&payload) 36 + .send() 37 + .await 38 + .map_err(|error| error.to_string())?; 4 39 5 - static HTTP_CLIENT: OnceCell<reqwest::Client> = OnceCell::const_new(); 40 + let data = response 41 + .json::<Vec<Vec<f32>>>() 42 + .await 43 + .map_err(|e| e.to_string())?[0] 44 + .clone(); 6 45 7 - // Simple function to get the shared client 8 - async fn get_client() -> &'static reqwest::Client { 9 - HTTP_CLIENT 10 - .get_or_init(|| async { 11 - reqwest::Client::builder() 12 - .timeout(Duration::from_secs(30)) 13 - .build() 14 - .expect("Failed to create HTTP client") 15 - }) 16 - .await 46 + Ok(data) 47 + } 17 48 } 18 49 19 - async fn send_json_post(url: &str, message: &str) -> Result<Vec<f32>, String> { 20 - let client = get_client().await; 50 + #[cfg(test)] 51 + mod tests { 52 + use rstest::{fixture, rstest}; 21 53 22 - // Create JSON payload 23 - let payload = json!({ 24 - "inputs": message, 25 - }); 54 + use crate::tei_client::TextEmbedding; 26 55 27 - // Send POST request 28 - let response = client 29 - .post(url) 30 - .header("Content-Type", "application/json") 31 - .json(&payload) 32 - .send() 33 - .await 34 - .map_err(|error| error.to_string())?; 56 + #[fixture] 57 + fn tei_url() -> String { 58 + "http://localhost:8080".to_string() 59 + } 60 + 61 + #[fixture] 62 + fn tei_client(tei_url: String) -> TextEmbedding { 63 + TextEmbedding::new(tei_url.as_str()) 64 + } 35 65 36 - // TODO 37 - let data = response.json::<Vec<Vec<f32>>>().await.unwrap()[0].clone(); 38 - Ok(data) 66 + #[rstest] 67 + #[tokio::test] 68 + async fn embed_string(tei_client: TextEmbedding) { 69 + let resp = tei_client.embed("This is a test").await; 70 + assert!(resp.is_ok()); 71 + } 39 72 }