A Wrapped / Replay like for teal.fm and rocksky.app (currently on hiatus)
3
fork

Configure Feed

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

start jetstream consumer

Mia 6b669ba3 610f9993

+481 -5
+395 -3
Cargo.lock
··· 555 555 checksum = "175812e0be2bccb6abe50bb8d566126198344f707e304f45c648fd8f2cc0365e" 556 556 557 557 [[package]] 558 + name = "byteorder" 559 + version = "1.5.0" 560 + source = "registry+https://github.com/rust-lang/crates.io-index" 561 + checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" 562 + 563 + [[package]] 558 564 name = "bytes" 559 565 version = "1.10.1" 560 566 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 804 810 checksum = "2f421161cb492475f1661ddc9815a745a1c894592070661180fdec3d4872e9c3" 805 811 806 812 [[package]] 813 + name = "cordyceps" 814 + version = "0.3.4" 815 + source = "registry+https://github.com/rust-lang/crates.io-index" 816 + checksum = "688d7fbb8092b8de775ef2536f36c8c31f2bc4006ece2e8d8ad2d17d00ce0a2a" 817 + dependencies = [ 818 + "loom", 819 + "tracing", 820 + ] 821 + 822 + [[package]] 807 823 name = "core-foundation" 808 824 version = "0.9.4" 809 825 source = "registry+https://github.com/rust-lang/crates.io-index" 810 826 checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" 827 + dependencies = [ 828 + "core-foundation-sys", 829 + "libc", 830 + ] 831 + 832 + [[package]] 833 + name = "core-foundation" 834 + version = "0.10.1" 835 + source = "registry+https://github.com/rust-lang/crates.io-index" 836 + checksum = "b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6" 811 837 dependencies = [ 812 838 "core-foundation-sys", 813 839 "libc", ··· 999 1025 ] 1000 1026 1001 1027 [[package]] 1028 + name = "derive_more" 1029 + version = "1.0.0" 1030 + source = "registry+https://github.com/rust-lang/crates.io-index" 1031 + checksum = "4a9b99b9cbbe49445b21764dc0625032a89b145a2642e67603e1c936f5458d05" 1032 + dependencies = [ 1033 + "derive_more-impl", 1034 + ] 1035 + 1036 + [[package]] 1037 + name = "derive_more-impl" 1038 + version = "1.0.0" 1039 + source = "registry+https://github.com/rust-lang/crates.io-index" 1040 + checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" 1041 + dependencies = [ 1042 + "proc-macro2", 1043 + "quote", 1044 + "syn 2.0.108", 1045 + "unicode-xid", 1046 + ] 1047 + 1048 + [[package]] 1049 + name = "diatomic-waker" 1050 + version = "0.2.3" 1051 + source = "registry+https://github.com/rust-lang/crates.io-index" 1052 + checksum = "ab03c107fafeb3ee9f5925686dbb7a73bc76e3932abb0d2b365cb64b169cf04c" 1053 + 1054 + [[package]] 1002 1055 name = "digest" 1003 1056 version = "0.10.7" 1004 1057 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 1192 1245 "clap", 1193 1246 "duckdb", 1194 1247 "eyre", 1248 + "futures", 1195 1249 "jacquard", 1196 1250 "jacquard-api", 1197 1251 "r2d2", ··· 1249 1303 ] 1250 1304 1251 1305 [[package]] 1306 + name = "futures" 1307 + version = "0.3.31" 1308 + source = "registry+https://github.com/rust-lang/crates.io-index" 1309 + checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" 1310 + dependencies = [ 1311 + "futures-channel", 1312 + "futures-core", 1313 + "futures-executor", 1314 + "futures-io", 1315 + "futures-sink", 1316 + "futures-task", 1317 + "futures-util", 1318 + ] 1319 + 1320 + [[package]] 1321 + name = "futures-buffered" 1322 + version = "0.2.12" 1323 + source = "registry+https://github.com/rust-lang/crates.io-index" 1324 + checksum = "a8e0e1f38ec07ba4abbde21eed377082f17ccb988be9d988a5adbf4bafc118fd" 1325 + dependencies = [ 1326 + "cordyceps", 1327 + "diatomic-waker", 1328 + "futures-core", 1329 + "pin-project-lite", 1330 + "spin 0.10.0", 1331 + ] 1332 + 1333 + [[package]] 1252 1334 name = "futures-channel" 1253 1335 version = "0.3.31" 1254 1336 source = "registry+https://github.com/rust-lang/crates.io-index" 1255 1337 checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" 1256 1338 dependencies = [ 1257 1339 "futures-core", 1340 + "futures-sink", 1258 1341 ] 1259 1342 1260 1343 [[package]] ··· 1264 1347 checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" 1265 1348 1266 1349 [[package]] 1350 + name = "futures-executor" 1351 + version = "0.3.31" 1352 + source = "registry+https://github.com/rust-lang/crates.io-index" 1353 + checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" 1354 + dependencies = [ 1355 + "futures-core", 1356 + "futures-task", 1357 + "futures-util", 1358 + ] 1359 + 1360 + [[package]] 1267 1361 name = "futures-io" 1268 1362 version = "0.3.31" 1269 1363 source = "registry+https://github.com/rust-lang/crates.io-index" 1270 1364 checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" 1271 1365 1272 1366 [[package]] 1367 + name = "futures-lite" 1368 + version = "2.6.1" 1369 + source = "registry+https://github.com/rust-lang/crates.io-index" 1370 + checksum = "f78e10609fe0e0b3f4157ffab1876319b5b0db102a2c60dc4626306dc46b44ad" 1371 + dependencies = [ 1372 + "fastrand", 1373 + "futures-core", 1374 + "futures-io", 1375 + "parking", 1376 + "pin-project-lite", 1377 + ] 1378 + 1379 + [[package]] 1273 1380 name = "futures-macro" 1274 1381 version = "0.3.31" 1275 1382 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 1298 1405 source = "registry+https://github.com/rust-lang/crates.io-index" 1299 1406 checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" 1300 1407 dependencies = [ 1408 + "futures-channel", 1301 1409 "futures-core", 1302 1410 "futures-io", 1303 1411 "futures-macro", ··· 1307 1415 "pin-project-lite", 1308 1416 "pin-utils", 1309 1417 "slab", 1418 + ] 1419 + 1420 + [[package]] 1421 + name = "generator" 1422 + version = "0.8.7" 1423 + source = "registry+https://github.com/rust-lang/crates.io-index" 1424 + checksum = "605183a538e3e2a9c1038635cc5c2d194e2ee8fd0d1b66b8349fad7dbacce5a2" 1425 + dependencies = [ 1426 + "cc", 1427 + "cfg-if", 1428 + "libc", 1429 + "log", 1430 + "rustversion", 1431 + "windows", 1310 1432 ] 1311 1433 1312 1434 [[package]] ··· 1650 1772 "js-sys", 1651 1773 "log", 1652 1774 "wasm-bindgen", 1653 - "windows-core", 1775 + "windows-core 0.62.2", 1654 1776 ] 1655 1777 1656 1778 [[package]] ··· 1926 2048 "bon", 1927 2049 "bytes", 1928 2050 "chrono", 2051 + "ciborium", 1929 2052 "cid", 2053 + "futures", 1930 2054 "getrandom 0.2.16", 1931 2055 "getrandom 0.3.4", 1932 2056 "http", ··· 1936 2060 "miette", 1937 2061 "multibase", 1938 2062 "multihash", 2063 + "n0-future", 1939 2064 "ouroboros", 1940 2065 "p256", 1941 2066 "rand 0.9.2", ··· 1949 2074 "smol_str", 1950 2075 "thiserror 2.0.17", 1951 2076 "tokio", 2077 + "tokio-tungstenite-wasm", 1952 2078 "tokio-util", 1953 2079 "trait-variant", 1954 2080 "url", ··· 2137 2263 source = "registry+https://github.com/rust-lang/crates.io-index" 2138 2264 checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" 2139 2265 dependencies = [ 2140 - "spin", 2266 + "spin 0.9.8", 2141 2267 ] 2142 2268 2143 2269 [[package]] ··· 2269 2395 checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" 2270 2396 2271 2397 [[package]] 2398 + name = "loom" 2399 + version = "0.7.2" 2400 + source = "registry+https://github.com/rust-lang/crates.io-index" 2401 + checksum = "419e0dc8046cb947daa77eb95ae174acfbddb7673b4151f56d1eed8e93fbfaca" 2402 + dependencies = [ 2403 + "cfg-if", 2404 + "generator", 2405 + "scoped-tls", 2406 + "tracing", 2407 + "tracing-subscriber", 2408 + ] 2409 + 2410 + [[package]] 2272 2411 name = "lru-cache" 2273 2412 version = "0.1.2" 2274 2413 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 2441 2580 ] 2442 2581 2443 2582 [[package]] 2583 + name = "n0-future" 2584 + version = "0.1.3" 2585 + source = "registry+https://github.com/rust-lang/crates.io-index" 2586 + checksum = "7bb0e5d99e681ab3c938842b96fcb41bf8a7bb4bfdb11ccbd653a7e83e06c794" 2587 + dependencies = [ 2588 + "cfg_aliases", 2589 + "derive_more", 2590 + "futures-buffered", 2591 + "futures-lite", 2592 + "futures-util", 2593 + "js-sys", 2594 + "pin-project", 2595 + "send_wrapper", 2596 + "tokio", 2597 + "tokio-util", 2598 + "wasm-bindgen", 2599 + "wasm-bindgen-futures", 2600 + "web-time", 2601 + ] 2602 + 2603 + [[package]] 2444 2604 name = "new_debug_unreachable" 2445 2605 version = "1.0.6" 2446 2606 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 2574 2734 checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" 2575 2735 2576 2736 [[package]] 2737 + name = "openssl-probe" 2738 + version = "0.1.6" 2739 + source = "registry+https://github.com/rust-lang/crates.io-index" 2740 + checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" 2741 + 2742 + [[package]] 2577 2743 name = "ouroboros" 2578 2744 version = "0.18.5" 2579 2745 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 2620 2786 ] 2621 2787 2622 2788 [[package]] 2789 + name = "parking" 2790 + version = "2.2.1" 2791 + source = "registry+https://github.com/rust-lang/crates.io-index" 2792 + checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" 2793 + 2794 + [[package]] 2623 2795 name = "parking_lot" 2624 2796 version = "0.12.5" 2625 2797 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 2693 2865 checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5" 2694 2866 dependencies = [ 2695 2867 "siphasher", 2868 + ] 2869 + 2870 + [[package]] 2871 + name = "pin-project" 2872 + version = "1.1.10" 2873 + source = "registry+https://github.com/rust-lang/crates.io-index" 2874 + checksum = "677f1add503faace112b9f1373e43e9e054bfdd22ff1a63c1bc485eaec6a6a8a" 2875 + dependencies = [ 2876 + "pin-project-internal", 2877 + ] 2878 + 2879 + [[package]] 2880 + name = "pin-project-internal" 2881 + version = "1.1.10" 2882 + source = "registry+https://github.com/rust-lang/crates.io-index" 2883 + checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" 2884 + dependencies = [ 2885 + "proc-macro2", 2886 + "quote", 2887 + "syn 2.0.108", 2696 2888 ] 2697 2889 2698 2890 [[package]] ··· 3262 3454 ] 3263 3455 3264 3456 [[package]] 3457 + name = "rustls-native-certs" 3458 + version = "0.8.2" 3459 + source = "registry+https://github.com/rust-lang/crates.io-index" 3460 + checksum = "9980d917ebb0c0536119ba501e90834767bffc3d60641457fd84a1f3fd337923" 3461 + dependencies = [ 3462 + "openssl-probe", 3463 + "rustls-pki-types", 3464 + "schannel", 3465 + "security-framework", 3466 + ] 3467 + 3468 + [[package]] 3265 3469 name = "rustls-pki-types" 3266 3470 version = "1.13.0" 3267 3471 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 3304 3508 ] 3305 3509 3306 3510 [[package]] 3511 + name = "schannel" 3512 + version = "0.1.28" 3513 + source = "registry+https://github.com/rust-lang/crates.io-index" 3514 + checksum = "891d81b926048e76efe18581bf793546b4c0eaf8448d72be8de2bbee5fd166e1" 3515 + dependencies = [ 3516 + "windows-sys 0.61.2", 3517 + ] 3518 + 3519 + [[package]] 3307 3520 name = "scheduled-thread-pool" 3308 3521 version = "0.2.7" 3309 3522 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 3337 3550 ] 3338 3551 3339 3552 [[package]] 3553 + name = "scoped-tls" 3554 + version = "1.0.1" 3555 + source = "registry+https://github.com/rust-lang/crates.io-index" 3556 + checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" 3557 + 3558 + [[package]] 3340 3559 name = "scopeguard" 3341 3560 version = "1.2.0" 3342 3561 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 3363 3582 ] 3364 3583 3365 3584 [[package]] 3585 + name = "security-framework" 3586 + version = "3.5.1" 3587 + source = "registry+https://github.com/rust-lang/crates.io-index" 3588 + checksum = "b3297343eaf830f66ede390ea39da1d462b6b0c1b000f420d0a83f898bbbe6ef" 3589 + dependencies = [ 3590 + "bitflags", 3591 + "core-foundation 0.10.1", 3592 + "core-foundation-sys", 3593 + "libc", 3594 + "security-framework-sys", 3595 + ] 3596 + 3597 + [[package]] 3598 + name = "security-framework-sys" 3599 + version = "2.15.0" 3600 + source = "registry+https://github.com/rust-lang/crates.io-index" 3601 + checksum = "cc1f0cbffaac4852523ce30d8bd3c5cdc873501d96ff467ca09b6767bb8cd5c0" 3602 + dependencies = [ 3603 + "core-foundation-sys", 3604 + "libc", 3605 + ] 3606 + 3607 + [[package]] 3366 3608 name = "semver" 3367 3609 version = "1.0.27" 3368 3610 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 3373 3615 ] 3374 3616 3375 3617 [[package]] 3618 + name = "send_wrapper" 3619 + version = "0.6.0" 3620 + source = "registry+https://github.com/rust-lang/crates.io-index" 3621 + checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" 3622 + 3623 + [[package]] 3376 3624 name = "serde" 3377 3625 version = "1.0.228" 3378 3626 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 3516 3764 ] 3517 3765 3518 3766 [[package]] 3767 + name = "sha1" 3768 + version = "0.10.6" 3769 + source = "registry+https://github.com/rust-lang/crates.io-index" 3770 + checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" 3771 + dependencies = [ 3772 + "cfg-if", 3773 + "cpufeatures", 3774 + "digest", 3775 + ] 3776 + 3777 + [[package]] 3519 3778 name = "sha2" 3520 3779 version = "0.10.9" 3521 3780 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 3642 3901 checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" 3643 3902 3644 3903 [[package]] 3904 + name = "spin" 3905 + version = "0.10.0" 3906 + source = "registry+https://github.com/rust-lang/crates.io-index" 3907 + checksum = "d5fe4ccb98d9c292d56fec89a5e07da7fc4cf0dc11e156b41793132775d3e591" 3908 + 3909 + [[package]] 3645 3910 name = "spki" 3646 3911 version = "0.7.3" 3647 3912 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 3809 4074 checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" 3810 4075 dependencies = [ 3811 4076 "bitflags", 3812 - "core-foundation", 4077 + "core-foundation 0.9.4", 3813 4078 "system-configuration-sys", 3814 4079 ] 3815 4080 ··· 4023 4288 ] 4024 4289 4025 4290 [[package]] 4291 + name = "tokio-tungstenite" 4292 + version = "0.24.0" 4293 + source = "registry+https://github.com/rust-lang/crates.io-index" 4294 + checksum = "edc5f74e248dc973e0dbb7b74c7e0d6fcc301c694ff50049504004ef4d0cdcd9" 4295 + dependencies = [ 4296 + "futures-util", 4297 + "log", 4298 + "rustls", 4299 + "rustls-native-certs", 4300 + "rustls-pki-types", 4301 + "tokio", 4302 + "tokio-rustls", 4303 + "tungstenite", 4304 + ] 4305 + 4306 + [[package]] 4307 + name = "tokio-tungstenite-wasm" 4308 + version = "0.4.0" 4309 + source = "registry+https://github.com/rust-lang/crates.io-index" 4310 + checksum = "e21a5c399399c3db9f08d8297ac12b500e86bca82e930253fdc62eaf9c0de6ae" 4311 + dependencies = [ 4312 + "futures-channel", 4313 + "futures-util", 4314 + "http", 4315 + "httparse", 4316 + "js-sys", 4317 + "rustls", 4318 + "thiserror 1.0.69", 4319 + "tokio", 4320 + "tokio-tungstenite", 4321 + "wasm-bindgen", 4322 + "web-sys", 4323 + ] 4324 + 4325 + [[package]] 4026 4326 name = "tokio-util" 4027 4327 version = "0.7.17" 4028 4328 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 4031 4331 "bytes", 4032 4332 "futures-core", 4033 4333 "futures-sink", 4334 + "futures-util", 4034 4335 "pin-project-lite", 4035 4336 "tokio", 4036 4337 ] ··· 4198 4499 checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" 4199 4500 4200 4501 [[package]] 4502 + name = "tungstenite" 4503 + version = "0.24.0" 4504 + source = "registry+https://github.com/rust-lang/crates.io-index" 4505 + checksum = "18e5b8366ee7a95b16d32197d0b2604b43a0be89dc5fac9f8e96ccafbaedda8a" 4506 + dependencies = [ 4507 + "byteorder", 4508 + "bytes", 4509 + "data-encoding", 4510 + "http", 4511 + "httparse", 4512 + "log", 4513 + "rand 0.8.5", 4514 + "rustls", 4515 + "rustls-pki-types", 4516 + "sha1", 4517 + "thiserror 1.0.69", 4518 + "utf-8", 4519 + ] 4520 + 4521 + [[package]] 4201 4522 name = "typenum" 4202 4523 version = "1.19.0" 4203 4524 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 4232 4553 version = "0.2.2" 4233 4554 source = "registry+https://github.com/rust-lang/crates.io-index" 4234 4555 checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254" 4556 + 4557 + [[package]] 4558 + name = "unicode-xid" 4559 + version = "0.2.6" 4560 + source = "registry+https://github.com/rust-lang/crates.io-index" 4561 + checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" 4235 4562 4236 4563 [[package]] 4237 4564 name = "unsigned-varint" ··· 4471 4798 ] 4472 4799 4473 4800 [[package]] 4801 + name = "windows" 4802 + version = "0.61.3" 4803 + source = "registry+https://github.com/rust-lang/crates.io-index" 4804 + checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893" 4805 + dependencies = [ 4806 + "windows-collections", 4807 + "windows-core 0.61.2", 4808 + "windows-future", 4809 + "windows-link 0.1.3", 4810 + "windows-numerics", 4811 + ] 4812 + 4813 + [[package]] 4814 + name = "windows-collections" 4815 + version = "0.2.0" 4816 + source = "registry+https://github.com/rust-lang/crates.io-index" 4817 + checksum = "3beeceb5e5cfd9eb1d76b381630e82c4241ccd0d27f1a39ed41b2760b255c5e8" 4818 + dependencies = [ 4819 + "windows-core 0.61.2", 4820 + ] 4821 + 4822 + [[package]] 4823 + name = "windows-core" 4824 + version = "0.61.2" 4825 + source = "registry+https://github.com/rust-lang/crates.io-index" 4826 + checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" 4827 + dependencies = [ 4828 + "windows-implement", 4829 + "windows-interface", 4830 + "windows-link 0.1.3", 4831 + "windows-result 0.3.4", 4832 + "windows-strings 0.4.2", 4833 + ] 4834 + 4835 + [[package]] 4474 4836 name = "windows-core" 4475 4837 version = "0.62.2" 4476 4838 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 4484 4846 ] 4485 4847 4486 4848 [[package]] 4849 + name = "windows-future" 4850 + version = "0.2.1" 4851 + source = "registry+https://github.com/rust-lang/crates.io-index" 4852 + checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e" 4853 + dependencies = [ 4854 + "windows-core 0.61.2", 4855 + "windows-link 0.1.3", 4856 + "windows-threading", 4857 + ] 4858 + 4859 + [[package]] 4487 4860 name = "windows-implement" 4488 4861 version = "0.60.2" 4489 4862 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 4516 4889 version = "0.2.1" 4517 4890 source = "registry+https://github.com/rust-lang/crates.io-index" 4518 4891 checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" 4892 + 4893 + [[package]] 4894 + name = "windows-numerics" 4895 + version = "0.2.0" 4896 + source = "registry+https://github.com/rust-lang/crates.io-index" 4897 + checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1" 4898 + dependencies = [ 4899 + "windows-core 0.61.2", 4900 + "windows-link 0.1.3", 4901 + ] 4519 4902 4520 4903 [[package]] 4521 4904 name = "windows-registry" ··· 4646 5029 "windows_x86_64_gnu 0.53.1", 4647 5030 "windows_x86_64_gnullvm 0.53.1", 4648 5031 "windows_x86_64_msvc 0.53.1", 5032 + ] 5033 + 5034 + [[package]] 5035 + name = "windows-threading" 5036 + version = "0.1.0" 5037 + source = "registry+https://github.com/rust-lang/crates.io-index" 5038 + checksum = "b66463ad2e0ea3bbf808b7f1d371311c80e115c0b71d60efc142cafbcfb057a6" 5039 + dependencies = [ 5040 + "windows-link 0.1.3", 4649 5041 ] 4650 5042 4651 5043 [[package]]
+2 -1
Cargo.toml
··· 9 9 clap = { version = "4.5", features = ["derive", "env"] } 10 10 duckdb = { version = "1.4", features = ["bundled", "chrono", "r2d2", "uuid"] } 11 11 eyre = "0.6" 12 - jacquard = { version = "0.9", default-features = false , features = ["api_bluesky", "derive", "dns"] } 12 + futures = "0.3.31" 13 + jacquard = { version = "0.9", default-features = false , features = ["api_bluesky", "derive", "dns", "websocket"] } 13 14 jacquard-api = { version = "0.9", features = ["fm_teal", "app_rocksky"] } 14 15 r2d2 = "0.8" 15 16 tokio = { version = "1.42", features = ["full"] }
+79
src/ingest/mod.rs
··· 1 + use futures::StreamExt; 2 + use jacquard::jetstream::{ 3 + CommitOperation, JetstreamAccount, JetstreamCommit, JetstreamIdentity, JetstreamMessage, 4 + JetstreamParams, 5 + }; 6 + use jacquard::types::collection::Collection; 7 + use jacquard::types::did::Did; 8 + use jacquard::xrpc::{SubscriptionClient, TungsteniteSubscriptionClient}; 9 + use jacquard_api::app_rocksky::scrobble::Scrobble as RockskyScrobble; 10 + use jacquard_api::fm_teal::alpha::feed::play::Play as TealAlphaPlay; 11 + use tracing::instrument; 12 + 13 + pub async fn jetstream(jetstream: String, cursor: Option<i64>) -> eyre::Result<()> { 14 + let client = TungsteniteSubscriptionClient::from_base_uri(jetstream.parse()?); 15 + 16 + let params = JetstreamParams::new() 17 + .maybe_cursor(cursor) 18 + .wanted_collections(vec![RockskyScrobble::nsid(), TealAlphaPlay::nsid()]) 19 + .build(); 20 + 21 + let stream = client.subscribe(&params).await?; 22 + 23 + let (_sink, mut messages) = stream.into_stream(); 24 + 25 + while let Some(msg) = messages.next().await { 26 + match msg { 27 + Ok(msg) => match handle_message(msg).await { 28 + Ok(_) => {} 29 + Err(e) => println!("Error handling jetstream message: {:?}", e), 30 + }, 31 + Err(e) => { 32 + tracing::error!("Failed to read jetstream: {e}"); 33 + } 34 + } 35 + } 36 + 37 + Ok(()) 38 + } 39 + 40 + async fn handle_message(message: JetstreamMessage<'_>) -> eyre::Result<()> { 41 + match message { 42 + JetstreamMessage::Commit { did, commit, .. } => handle_js_commit(did, commit).await, 43 + JetstreamMessage::Identity { identity, .. } => handle_js_identity(identity).await, 44 + JetstreamMessage::Account { account, .. } => handle_js_account(account).await, 45 + } 46 + } 47 + 48 + #[instrument(skip(commit), fields(nsid=commit.collection.as_str(), rkey=commit.rkey.as_str()))] 49 + async fn handle_js_commit(did: Did<'_>, commit: JetstreamCommit<'_>) -> eyre::Result<()> { 50 + if commit.operation == CommitOperation::Delete { 51 + return Ok(()); 52 + } 53 + 54 + let Some(data) = commit.record else { 55 + eyre::bail!("got no data for a {:?} operation", commit.operation); 56 + }; 57 + 58 + match data.type_discriminator() { 59 + Some(RockskyScrobble::NSID) => { 60 + let scrobble: RockskyScrobble = jacquard::from_data(&data)?; 61 + dbg!(&scrobble); 62 + } 63 + Some(TealAlphaPlay::NSID) => { 64 + let scrobble: TealAlphaPlay = jacquard::from_data(&data)?; 65 + dbg!(&scrobble); 66 + } 67 + _ => unreachable!("only rocksky or teal (alpha) scrobbles supported"), 68 + } 69 + 70 + Ok(()) 71 + } 72 + 73 + async fn handle_js_identity(account: JetstreamIdentity<'_>) -> eyre::Result<()> { 74 + Ok(()) 75 + } 76 + 77 + async fn handle_js_account(account: JetstreamAccount<'_>) -> eyre::Result<()> { 78 + Ok(()) 79 + }
+5 -1
src/main.rs
··· 1 1 use clap::Parser; 2 2 3 3 mod config; 4 - // mod ingest; 4 + mod ingest; 5 5 6 6 #[tokio::main] 7 7 async fn main() -> eyre::Result<()> { ··· 10 10 let config = config::Config::parse(); 11 11 12 12 let ddb = duckdb::DuckdbConnectionManager::file(config.db)?; 13 + 14 + let jetstream_handle = tokio::spawn(ingest::jetstream(config.jetstream, None)); 15 + 16 + jetstream_handle.await??; 13 17 14 18 Ok(()) 15 19 }