Client side atproto account migrator in your web browser, along with services for backups and adversarial migrations. pdsmoover.com
pds atproto migrations moo cow

Bugfix: If a user moves PDSs backups now checks for that #6

merged opened by baileytownsend.dev targeting main from bugfix/DetectNewPds

We were not checking on the schedule job if the user was still on the PDS, just erroring out. Will not check for account status and on deactivated will look to see if they moved to a new PDS by the did doc. Could use some improvements especially on accounts that just deactivate but dont move and more other ones to mark as deactivated in the backups.

Oh also. backups every 2 hours

Labels

None yet.

Participants 1
AT URI
at://did:plc:rnpkyqnmsw4ipey6eotbdnnf/sh.tangled.repo.pull/3mdcin5eh7d22
+805 -142
Diff #0
+1
.gitignore
··· 6 6 web/.DS_Store 7 7 8 8 .DS_Store 9 + garage-data
+656 -126
Cargo.lock
··· 285 285 ] 286 286 287 287 [[package]] 288 + name = "atomic-polyfill" 289 + version = "1.0.3" 290 + source = "registry+https://github.com/rust-lang/crates.io-index" 291 + checksum = "8cf2bce30dfe09ef0bfaef228b9d414faaf7e563035494d7fe092dba54b300f4" 292 + dependencies = [ 293 + "critical-section", 294 + ] 295 + 296 + [[package]] 288 297 name = "atomic-waker" 289 298 version = "1.1.2" 290 299 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 805 814 checksum = "a1d728cc89cf3aee9ff92b05e62b19ee65a02b5702cff7d5a377e32c6ae29d8d" 806 815 807 816 [[package]] 817 + name = "cobs" 818 + version = "0.3.0" 819 + source = "registry+https://github.com/rust-lang/crates.io-index" 820 + checksum = "0fa961b519f0b462e3a3b4a34b64d119eeaca1d59af726fe450bbba07a9fc0a1" 821 + dependencies = [ 822 + "thiserror 2.0.17", 823 + ] 824 + 825 + [[package]] 808 826 name = "colorchoice" 809 827 version = "1.0.4" 810 828 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 895 913 checksum = "2f421161cb492475f1661ddc9815a745a1c894592070661180fdec3d4872e9c3" 896 914 897 915 [[package]] 916 + name = "cordyceps" 917 + version = "0.3.4" 918 + source = "registry+https://github.com/rust-lang/crates.io-index" 919 + checksum = "688d7fbb8092b8de775ef2536f36c8c31f2bc4006ece2e8d8ad2d17d00ce0a2a" 920 + dependencies = [ 921 + "loom", 922 + "tracing", 923 + ] 924 + 925 + [[package]] 898 926 name = "core-foundation" 899 927 version = "0.9.4" 900 928 source = "registry+https://github.com/rust-lang/crates.io-index" 901 929 checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" 930 + dependencies = [ 931 + "core-foundation-sys", 932 + "libc", 933 + ] 934 + 935 + [[package]] 936 + name = "core-foundation" 937 + version = "0.10.1" 938 + source = "registry+https://github.com/rust-lang/crates.io-index" 939 + checksum = "b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6" 902 940 dependencies = [ 903 941 "core-foundation-sys", 904 942 "libc", ··· 1162 1200 ] 1163 1201 1164 1202 [[package]] 1203 + name = "derive_more" 1204 + version = "1.0.0" 1205 + source = "registry+https://github.com/rust-lang/crates.io-index" 1206 + checksum = "4a9b99b9cbbe49445b21764dc0625032a89b145a2642e67603e1c936f5458d05" 1207 + dependencies = [ 1208 + "derive_more-impl", 1209 + ] 1210 + 1211 + [[package]] 1212 + name = "derive_more-impl" 1213 + version = "1.0.0" 1214 + source = "registry+https://github.com/rust-lang/crates.io-index" 1215 + checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" 1216 + dependencies = [ 1217 + "proc-macro2", 1218 + "quote", 1219 + "syn 2.0.106", 1220 + "unicode-xid", 1221 + ] 1222 + 1223 + [[package]] 1224 + name = "diatomic-waker" 1225 + version = "0.2.3" 1226 + source = "registry+https://github.com/rust-lang/crates.io-index" 1227 + checksum = "ab03c107fafeb3ee9f5925686dbb7a73bc76e3932abb0d2b365cb64b169cf04c" 1228 + 1229 + [[package]] 1165 1230 name = "digest" 1166 1231 version = "0.10.7" 1167 1232 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 1198 1263 version = "0.15.7" 1199 1264 source = "registry+https://github.com/rust-lang/crates.io-index" 1200 1265 checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b" 1266 + 1267 + [[package]] 1268 + name = "dyn-clone" 1269 + version = "1.0.20" 1270 + source = "registry+https://github.com/rust-lang/crates.io-index" 1271 + checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555" 1201 1272 1202 1273 [[package]] 1203 1274 name = "ecdsa" ··· 1247 1318 ] 1248 1319 1249 1320 [[package]] 1321 + name = "embedded-io" 1322 + version = "0.4.0" 1323 + source = "registry+https://github.com/rust-lang/crates.io-index" 1324 + checksum = "ef1a6892d9eef45c8fa6b9e0086428a2cca8491aca8f787c534a3d6d0bcb3ced" 1325 + 1326 + [[package]] 1327 + name = "embedded-io" 1328 + version = "0.6.1" 1329 + source = "registry+https://github.com/rust-lang/crates.io-index" 1330 + checksum = "edd0f118536f44f5ccd48bcb8b111bdc3de888b58c74639dfb034a357d0f206d" 1331 + 1332 + [[package]] 1250 1333 name = "encoding_rs" 1251 1334 version = "0.8.35" 1252 1335 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 1380 1463 dependencies = [ 1381 1464 "futures-core", 1382 1465 "futures-sink", 1383 - "spin", 1466 + "spin 0.9.8", 1384 1467 ] 1385 1468 1386 1469 [[package]] ··· 1430 1513 ] 1431 1514 1432 1515 [[package]] 1516 + name = "futf" 1517 + version = "0.1.5" 1518 + source = "registry+https://github.com/rust-lang/crates.io-index" 1519 + checksum = "df420e2e84819663797d1ec6544b13c5be84629e7bb00dc960d6917db2987843" 1520 + dependencies = [ 1521 + "mac", 1522 + "new_debug_unreachable", 1523 + ] 1524 + 1525 + [[package]] 1433 1526 name = "futures" 1434 1527 version = "0.3.31" 1435 1528 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 1445 1538 ] 1446 1539 1447 1540 [[package]] 1541 + name = "futures-buffered" 1542 + version = "0.2.12" 1543 + source = "registry+https://github.com/rust-lang/crates.io-index" 1544 + checksum = "a8e0e1f38ec07ba4abbde21eed377082f17ccb988be9d988a5adbf4bafc118fd" 1545 + dependencies = [ 1546 + "cordyceps", 1547 + "diatomic-waker", 1548 + "futures-core", 1549 + "pin-project-lite", 1550 + "spin 0.10.0", 1551 + ] 1552 + 1553 + [[package]] 1448 1554 name = "futures-channel" 1449 1555 version = "0.3.31" 1450 1556 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 1549 1655 ] 1550 1656 1551 1657 [[package]] 1552 - name = "genawaiter" 1553 - version = "0.99.1" 1554 - source = "registry+https://github.com/rust-lang/crates.io-index" 1555 - checksum = "c86bd0361bcbde39b13475e6e36cb24c329964aa2611be285289d1e4b751c1a0" 1556 - dependencies = [ 1557 - "futures-core", 1558 - "genawaiter-macro", 1559 - "genawaiter-proc-macro", 1560 - "proc-macro-hack", 1561 - ] 1562 - 1563 - [[package]] 1564 - name = "genawaiter-macro" 1565 - version = "0.99.1" 1566 - source = "registry+https://github.com/rust-lang/crates.io-index" 1567 - checksum = "0b32dfe1fdfc0bbde1f22a5da25355514b5e450c33a6af6770884c8750aedfbc" 1568 - 1569 - [[package]] 1570 - name = "genawaiter-proc-macro" 1571 - version = "0.99.1" 1658 + name = "generator" 1659 + version = "0.8.8" 1572 1660 source = "registry+https://github.com/rust-lang/crates.io-index" 1573 - checksum = "784f84eebc366e15251c4a8c3acee82a6a6f427949776ecb88377362a9621738" 1661 + checksum = "52f04ae4152da20c76fe800fa48659201d5cf627c5149ca0b707b69d7eef6cf9" 1574 1662 dependencies = [ 1575 - "proc-macro-error 0.4.12", 1576 - "proc-macro-hack", 1577 - "proc-macro2", 1578 - "quote", 1579 - "syn 1.0.109", 1663 + "cc", 1664 + "cfg-if", 1665 + "libc", 1666 + "log", 1667 + "rustversion", 1668 + "windows-link 0.2.1", 1669 + "windows-result 0.4.1", 1580 1670 ] 1581 1671 1582 1672 [[package]] ··· 1618 1708 ] 1619 1709 1620 1710 [[package]] 1711 + name = "gloo-storage" 1712 + version = "0.3.0" 1713 + source = "registry+https://github.com/rust-lang/crates.io-index" 1714 + checksum = "fbc8031e8c92758af912f9bc08fbbadd3c6f3cfcbf6b64cdf3d6a81f0139277a" 1715 + dependencies = [ 1716 + "gloo-utils", 1717 + "js-sys", 1718 + "serde", 1719 + "serde_json", 1720 + "thiserror 1.0.69", 1721 + "wasm-bindgen", 1722 + "web-sys", 1723 + ] 1724 + 1725 + [[package]] 1726 + name = "gloo-utils" 1727 + version = "0.2.0" 1728 + source = "registry+https://github.com/rust-lang/crates.io-index" 1729 + checksum = "0b5555354113b18c547c1d3a98fbf7fb32a9ff4f6fa112ce823a21641a0ba3aa" 1730 + dependencies = [ 1731 + "js-sys", 1732 + "serde", 1733 + "serde_json", 1734 + "wasm-bindgen", 1735 + "web-sys", 1736 + ] 1737 + 1738 + [[package]] 1621 1739 name = "governor" 1622 1740 version = "0.10.1" 1623 1741 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 1672 1790 "futures-core", 1673 1791 "futures-sink", 1674 1792 "http", 1675 - "indexmap", 1793 + "indexmap 2.11.4", 1676 1794 "slab", 1677 1795 "tokio", 1678 1796 "tokio-util", ··· 1691 1809 ] 1692 1810 1693 1811 [[package]] 1812 + name = "hash32" 1813 + version = "0.2.1" 1814 + source = "registry+https://github.com/rust-lang/crates.io-index" 1815 + checksum = "b0c35f58762feb77d74ebe43bdbc3210f09be9fe6742234d573bacc26ed92b67" 1816 + dependencies = [ 1817 + "byteorder", 1818 + ] 1819 + 1820 + [[package]] 1821 + name = "hashbrown" 1822 + version = "0.12.3" 1823 + source = "registry+https://github.com/rust-lang/crates.io-index" 1824 + checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" 1825 + 1826 + [[package]] 1694 1827 name = "hashbrown" 1695 1828 version = "0.14.5" 1696 1829 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 1723 1856 ] 1724 1857 1725 1858 [[package]] 1859 + name = "heapless" 1860 + version = "0.7.17" 1861 + source = "registry+https://github.com/rust-lang/crates.io-index" 1862 + checksum = "cdc6457c0eb62c71aac4bc17216026d8410337c4126773b9c5daba343f17964f" 1863 + dependencies = [ 1864 + "atomic-polyfill", 1865 + "hash32", 1866 + "rustc_version", 1867 + "serde", 1868 + "spin 0.9.8", 1869 + "stable_deref_trait", 1870 + ] 1871 + 1872 + [[package]] 1726 1873 name = "heck" 1727 1874 version = "0.4.1" 1728 1875 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 1877 2024 checksum = "589533453244b0995c858700322199b2becb13b627df2851f64a2775d024abcf" 1878 2025 dependencies = [ 1879 2026 "windows-sys 0.59.0", 2027 + ] 2028 + 2029 + [[package]] 2030 + name = "html5ever" 2031 + version = "0.27.0" 2032 + source = "registry+https://github.com/rust-lang/crates.io-index" 2033 + checksum = "c13771afe0e6e846f1e67d038d4cb29998a6779f93c809212e4e9c32efd244d4" 2034 + dependencies = [ 2035 + "log", 2036 + "mac", 2037 + "markup5ever", 2038 + "proc-macro2", 2039 + "quote", 2040 + "syn 2.0.106", 1880 2041 ] 1881 2042 1882 2043 [[package]] ··· 2165 2326 2166 2327 [[package]] 2167 2328 name = "indexmap" 2329 + version = "1.9.3" 2330 + source = "registry+https://github.com/rust-lang/crates.io-index" 2331 + checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" 2332 + dependencies = [ 2333 + "autocfg", 2334 + "hashbrown 0.12.3", 2335 + "serde", 2336 + ] 2337 + 2338 + [[package]] 2339 + name = "indexmap" 2168 2340 version = "2.11.4" 2169 2341 source = "registry+https://github.com/rust-lang/crates.io-index" 2170 2342 checksum = "4b0f83760fb341a774ed326568e19f5a863af4a952def8c39f9ab92fd95b88e5" 2171 2343 dependencies = [ 2172 2344 "equivalent", 2173 2345 "hashbrown 0.16.0", 2346 + "serde", 2347 + "serde_core", 2174 2348 ] 2175 2349 2176 2350 [[package]] ··· 2178 2352 version = "2.0.6" 2179 2353 source = "registry+https://github.com/rust-lang/crates.io-index" 2180 2354 checksum = "f4c7245a08504955605670dbf141fceab975f15ca21570696aebe9d2e71576bd" 2355 + 2356 + [[package]] 2357 + name = "inventory" 2358 + version = "0.3.21" 2359 + source = "registry+https://github.com/rust-lang/crates.io-index" 2360 + checksum = "bc61209c082fbeb19919bee74b176221b27223e27b65d781eb91af24eb1fb46e" 2361 + dependencies = [ 2362 + "rustversion", 2363 + ] 2181 2364 2182 2365 [[package]] 2183 2366 name = "ipconfig" ··· 2232 2415 2233 2416 [[package]] 2234 2417 name = "jacquard" 2235 - version = "0.6.0" 2418 + version = "0.9.5" 2236 2419 source = "registry+https://github.com/rust-lang/crates.io-index" 2237 - checksum = "5857f000e67605995ba7c24c9833f840adf5c063a731a6f72f69e0e3c986791c" 2420 + checksum = "f7c1fdbcf1153e6e6b87fde20036c1ffe7473c4852f1c6369bc4ef1fe47ccb9f" 2238 2421 dependencies = [ 2239 - "bon", 2240 2422 "bytes", 2241 2423 "getrandom 0.2.16", 2424 + "gloo-storage", 2242 2425 "http", 2243 2426 "jacquard-api", 2244 2427 "jacquard-common", 2245 - "jacquard-derive", 2428 + "jacquard-derive 0.9.5", 2246 2429 "jacquard-identity", 2247 2430 "jacquard-oauth", 2248 2431 "jose-jwk", 2249 2432 "miette", 2250 - "p256", 2251 - "percent-encoding", 2252 - "rand_core 0.6.4", 2433 + "regex", 2434 + "regex-lite", 2253 2435 "reqwest", 2254 2436 "serde", 2255 2437 "serde_html_form", 2256 - "serde_ipld_dagcbor", 2257 2438 "serde_json", 2258 2439 "smol_str", 2259 2440 "thiserror 2.0.17", 2260 2441 "tokio", 2261 2442 "trait-variant", 2262 2443 "url", 2444 + "webpage", 2263 2445 ] 2264 2446 2265 2447 [[package]] 2266 2448 name = "jacquard-api" 2267 - version = "0.6.0" 2449 + version = "0.9.5" 2268 2450 source = "registry+https://github.com/rust-lang/crates.io-index" 2269 - checksum = "58132b60473124a34c64c267a1c3390c2e4a4dfd62c801639903c4aefd05f52d" 2451 + checksum = "4979fb1848c1dd7ac8fd12745bc71f56f6da61374407d5f9b06005467a954e5a" 2270 2452 dependencies = [ 2271 2453 "bon", 2272 2454 "bytes", 2273 2455 "jacquard-common", 2274 - "jacquard-derive", 2456 + "jacquard-derive 0.9.5", 2457 + "jacquard-lexicon", 2275 2458 "miette", 2459 + "rustversion", 2276 2460 "serde", 2461 + "serde_bytes", 2277 2462 "serde_ipld_dagcbor", 2278 2463 "thiserror 2.0.17", 2464 + "unicode-segmentation", 2279 2465 ] 2280 2466 2281 2467 [[package]] 2282 2468 name = "jacquard-axum" 2283 - version = "0.6.0" 2469 + version = "0.9.6" 2284 2470 source = "registry+https://github.com/rust-lang/crates.io-index" 2285 - checksum = "dc630809a5a22fdce95d4a63f244e7f6e44479edabc10c487758011c0de0153c" 2471 + checksum = "ed99b0dc0cd54189bebb83d5d5cc5ac2889f62ede9729a6ead9035073d111bc9" 2286 2472 dependencies = [ 2287 2473 "axum", 2288 2474 "bytes", 2289 2475 "jacquard", 2290 2476 "jacquard-common", 2291 - "jacquard-derive", 2477 + "jacquard-derive 0.9.5", 2292 2478 "jacquard-identity", 2293 2479 "miette", 2294 2480 "multibase", 2295 2481 "serde", 2296 2482 "serde_html_form", 2297 - "serde_ipld_dagcbor", 2298 2483 "serde_json", 2299 2484 "thiserror 2.0.17", 2300 2485 "tokio", ··· 2304 2489 2305 2490 [[package]] 2306 2491 name = "jacquard-common" 2307 - version = "0.6.0" 2492 + version = "0.9.5" 2308 2493 source = "registry+https://github.com/rust-lang/crates.io-index" 2309 - checksum = "f7f1bab0279ae2e29c3383f132a05b9c708585fab62e94292affdf352ce13242" 2494 + checksum = "1751921e0bdae5e0077afade6161545e9ef7698306c868f800916e99ecbcaae9" 2310 2495 dependencies = [ 2311 2496 "base64 0.22.1", 2312 2497 "bon", 2313 2498 "bytes", 2314 2499 "chrono", 2315 2500 "cid", 2316 - "genawaiter", 2501 + "getrandom 0.2.16", 2317 2502 "getrandom 0.3.4", 2318 2503 "http", 2319 2504 "ipld-core", ··· 2324 2509 "multihash", 2325 2510 "ouroboros", 2326 2511 "p256", 2512 + "postcard", 2327 2513 "rand 0.9.2", 2328 2514 "regex", 2515 + "regex-lite", 2329 2516 "reqwest", 2330 2517 "serde", 2518 + "serde_bytes", 2331 2519 "serde_html_form", 2332 2520 "serde_ipld_dagcbor", 2333 2521 "serde_json", ··· 2352 2540 ] 2353 2541 2354 2542 [[package]] 2543 + name = "jacquard-derive" 2544 + version = "0.9.5" 2545 + source = "registry+https://github.com/rust-lang/crates.io-index" 2546 + checksum = "9c8d73dfee07943fdab93569ed1c28b06c6921ed891c08b415c4a323ff67e593" 2547 + dependencies = [ 2548 + "heck 0.5.0", 2549 + "jacquard-lexicon", 2550 + "proc-macro2", 2551 + "quote", 2552 + "syn 2.0.106", 2553 + ] 2554 + 2555 + [[package]] 2355 2556 name = "jacquard-identity" 2356 - version = "0.6.0" 2557 + version = "0.9.5" 2357 2558 source = "registry+https://github.com/rust-lang/crates.io-index" 2358 - checksum = "65ae022725ddc09ce03c1a02a97b895279e1d46957c0574a032fa78b81273263" 2559 + checksum = "e7aaefa819fa4213cf59f180dba932f018a7cd0599582fd38474ee2a38c16cf2" 2359 2560 dependencies = [ 2360 2561 "bon", 2361 2562 "bytes", ··· 2363 2564 "http", 2364 2565 "jacquard-api", 2365 2566 "jacquard-common", 2567 + "jacquard-lexicon", 2366 2568 "miette", 2569 + "mini-moka-wasm", 2570 + "n0-future", 2367 2571 "percent-encoding", 2368 2572 "reqwest", 2369 2573 "serde", ··· 2377 2581 ] 2378 2582 2379 2583 [[package]] 2584 + name = "jacquard-lexicon" 2585 + version = "0.9.5" 2586 + source = "registry+https://github.com/rust-lang/crates.io-index" 2587 + checksum = "8411aff546569b0a1e0ef669bed2380cec1c00d48f02f3fcd57a71545321b3d8" 2588 + dependencies = [ 2589 + "cid", 2590 + "dashmap", 2591 + "heck 0.5.0", 2592 + "inventory", 2593 + "jacquard-common", 2594 + "miette", 2595 + "multihash", 2596 + "prettyplease", 2597 + "proc-macro2", 2598 + "quote", 2599 + "serde", 2600 + "serde_ipld_dagcbor", 2601 + "serde_json", 2602 + "serde_repr", 2603 + "serde_with", 2604 + "sha2", 2605 + "syn 2.0.106", 2606 + "thiserror 2.0.17", 2607 + "unicode-segmentation", 2608 + ] 2609 + 2610 + [[package]] 2380 2611 name = "jacquard-oauth" 2381 - version = "0.6.0" 2612 + version = "0.9.6" 2382 2613 source = "registry+https://github.com/rust-lang/crates.io-index" 2383 - checksum = "8c37269e2ea0c6c3418bf61fb3d342aab87b1bda706ebae49e454f8e50580cab" 2614 + checksum = "68bf0b0e061d85b09cfa78588dc098918d5b62f539a719165c6a806a1d2c0ef2" 2384 2615 dependencies = [ 2385 2616 "base64 0.22.1", 2386 2617 "bytes", ··· 2395 2626 "miette", 2396 2627 "p256", 2397 2628 "rand 0.8.5", 2398 - "rand_core 0.6.4", 2399 - "reqwest", 2400 2629 "rouille", 2401 2630 "serde", 2402 2631 "serde_html_form", 2403 2632 "serde_json", 2404 2633 "sha2", 2405 - "signature", 2406 2634 "smol_str", 2407 2635 "thiserror 2.0.17", 2408 2636 "tokio", ··· 2565 2793 source = "registry+https://github.com/rust-lang/crates.io-index" 2566 2794 checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" 2567 2795 dependencies = [ 2568 - "spin", 2796 + "spin 0.9.8", 2569 2797 ] 2570 2798 2571 2799 [[package]] ··· 2574 2802 dependencies = [ 2575 2803 "bon", 2576 2804 "jacquard-common", 2577 - "jacquard-derive", 2805 + "jacquard-derive 0.6.0", 2578 2806 "miette", 2579 2807 "serde", 2580 2808 "thiserror 2.0.17", ··· 2647 2875 checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" 2648 2876 2649 2877 [[package]] 2878 + name = "loom" 2879 + version = "0.7.2" 2880 + source = "registry+https://github.com/rust-lang/crates.io-index" 2881 + checksum = "419e0dc8046cb947daa77eb95ae174acfbddb7673b4151f56d1eed8e93fbfaca" 2882 + dependencies = [ 2883 + "cfg-if", 2884 + "generator", 2885 + "scoped-tls", 2886 + "tracing", 2887 + "tracing-subscriber", 2888 + ] 2889 + 2890 + [[package]] 2650 2891 name = "lru" 2651 2892 version = "0.12.5" 2652 2893 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 2671 2912 checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" 2672 2913 2673 2914 [[package]] 2674 - name = "malloc_buf" 2675 - version = "0.0.6" 2915 + name = "mac" 2916 + version = "0.1.1" 2676 2917 source = "registry+https://github.com/rust-lang/crates.io-index" 2677 - checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" 2918 + checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4" 2919 + 2920 + [[package]] 2921 + name = "markup5ever" 2922 + version = "0.12.1" 2923 + source = "registry+https://github.com/rust-lang/crates.io-index" 2924 + checksum = "16ce3abbeba692c8b8441d036ef91aea6df8da2c6b6e21c7e14d3c18e526be45" 2678 2925 dependencies = [ 2679 - "libc", 2926 + "log", 2927 + "phf", 2928 + "phf_codegen", 2929 + "string_cache", 2930 + "string_cache_codegen", 2931 + "tendril", 2932 + ] 2933 + 2934 + [[package]] 2935 + name = "markup5ever_rcdom" 2936 + version = "0.3.0" 2937 + source = "registry+https://github.com/rust-lang/crates.io-index" 2938 + checksum = "edaa21ab3701bfee5099ade5f7e1f84553fd19228cf332f13cd6e964bf59be18" 2939 + dependencies = [ 2940 + "html5ever", 2941 + "markup5ever", 2942 + "tendril", 2943 + "xml5ever", 2680 2944 ] 2681 2945 2682 2946 [[package]] ··· 2755 3019 checksum = "2b166dea96003ee2531cf14833efedced545751d800f03535801d833313f8c15" 2756 3020 dependencies = [ 2757 3021 "base64 0.22.1", 2758 - "indexmap", 3022 + "indexmap 2.11.4", 2759 3023 "metrics", 2760 3024 "metrics-util", 2761 3025 "quanta", ··· 2817 3081 ] 2818 3082 2819 3083 [[package]] 3084 + name = "mini-moka-wasm" 3085 + version = "0.10.99" 3086 + source = "registry+https://github.com/rust-lang/crates.io-index" 3087 + checksum = "0102b9a2ad50fa47ca89eead2316c8222285ecfbd3f69ce99564fbe4253866e8" 3088 + dependencies = [ 3089 + "crossbeam-channel", 3090 + "crossbeam-utils", 3091 + "dashmap", 3092 + "smallvec", 3093 + "tagptr", 3094 + "triomphe", 3095 + "web-time", 3096 + ] 3097 + 3098 + [[package]] 2820 3099 name = "minidom" 2821 3100 version = "0.16.0" 2822 3101 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 2932 3211 ] 2933 3212 2934 3213 [[package]] 3214 + name = "n0-future" 3215 + version = "0.1.3" 3216 + source = "registry+https://github.com/rust-lang/crates.io-index" 3217 + checksum = "7bb0e5d99e681ab3c938842b96fcb41bf8a7bb4bfdb11ccbd653a7e83e06c794" 3218 + dependencies = [ 3219 + "cfg_aliases", 3220 + "derive_more", 3221 + "futures-buffered", 3222 + "futures-lite", 3223 + "futures-util", 3224 + "js-sys", 3225 + "pin-project", 3226 + "send_wrapper", 3227 + "tokio", 3228 + "tokio-util", 3229 + "wasm-bindgen", 3230 + "wasm-bindgen-futures", 3231 + "web-time", 3232 + ] 3233 + 3234 + [[package]] 2935 3235 name = "native-tls" 2936 3236 version = "0.2.14" 2937 3237 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 2953 3253 version = "0.1.1" 2954 3254 source = "registry+https://github.com/rust-lang/crates.io-index" 2955 3255 checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" 3256 + 3257 + [[package]] 3258 + name = "new_debug_unreachable" 3259 + version = "1.0.6" 3260 + source = "registry+https://github.com/rust-lang/crates.io-index" 3261 + checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" 2956 3262 2957 3263 [[package]] 2958 3264 name = "nom" ··· 3077 3383 ] 3078 3384 3079 3385 [[package]] 3080 - name = "objc" 3081 - version = "0.2.7" 3386 + name = "objc2" 3387 + version = "0.6.3" 3082 3388 source = "registry+https://github.com/rust-lang/crates.io-index" 3083 - checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" 3389 + checksum = "b7c2599ce0ec54857b29ce62166b0ed9b4f6f1a70ccc9a71165b6154caca8c05" 3084 3390 dependencies = [ 3085 - "malloc_buf", 3391 + "objc2-encode", 3086 3392 ] 3087 3393 3088 3394 [[package]] ··· 3095 3401 ] 3096 3402 3097 3403 [[package]] 3404 + name = "objc2-encode" 3405 + version = "4.1.0" 3406 + source = "registry+https://github.com/rust-lang/crates.io-index" 3407 + checksum = "ef25abbcd74fb2609453eb695bd2f860d389e457f67dc17cafc8b8cbc89d0c33" 3408 + 3409 + [[package]] 3410 + name = "objc2-foundation" 3411 + version = "0.3.2" 3412 + source = "registry+https://github.com/rust-lang/crates.io-index" 3413 + checksum = "e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272" 3414 + dependencies = [ 3415 + "bitflags", 3416 + "objc2", 3417 + ] 3418 + 3419 + [[package]] 3098 3420 name = "objc2-io-kit" 3099 3421 version = "0.3.2" 3100 3422 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 3267 3589 checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" 3268 3590 3269 3591 [[package]] 3592 + name = "phf" 3593 + version = "0.11.3" 3594 + source = "registry+https://github.com/rust-lang/crates.io-index" 3595 + checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078" 3596 + dependencies = [ 3597 + "phf_shared", 3598 + ] 3599 + 3600 + [[package]] 3601 + name = "phf_codegen" 3602 + version = "0.11.3" 3603 + source = "registry+https://github.com/rust-lang/crates.io-index" 3604 + checksum = "aef8048c789fa5e851558d709946d6d79a8ff88c0440c587967f8e94bfb1216a" 3605 + dependencies = [ 3606 + "phf_generator", 3607 + "phf_shared", 3608 + ] 3609 + 3610 + [[package]] 3611 + name = "phf_generator" 3612 + version = "0.11.3" 3613 + source = "registry+https://github.com/rust-lang/crates.io-index" 3614 + checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d" 3615 + dependencies = [ 3616 + "phf_shared", 3617 + "rand 0.8.5", 3618 + ] 3619 + 3620 + [[package]] 3621 + name = "phf_shared" 3622 + version = "0.11.3" 3623 + source = "registry+https://github.com/rust-lang/crates.io-index" 3624 + checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5" 3625 + dependencies = [ 3626 + "siphasher", 3627 + ] 3628 + 3629 + [[package]] 3270 3630 name = "pin-project" 3271 3631 version = "1.1.10" 3272 3632 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 3341 3701 ] 3342 3702 3343 3703 [[package]] 3704 + name = "postcard" 3705 + version = "1.1.3" 3706 + source = "registry+https://github.com/rust-lang/crates.io-index" 3707 + checksum = "6764c3b5dd454e283a30e6dfe78e9b31096d9e32036b5d1eaac7a6119ccb9a24" 3708 + dependencies = [ 3709 + "cobs", 3710 + "embedded-io 0.4.0", 3711 + "embedded-io 0.6.1", 3712 + "heapless", 3713 + "serde", 3714 + ] 3715 + 3716 + [[package]] 3344 3717 name = "potential_utf" 3345 3718 version = "0.1.3" 3346 3719 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 3365 3738 ] 3366 3739 3367 3740 [[package]] 3741 + name = "precomputed-hash" 3742 + version = "0.1.1" 3743 + source = "registry+https://github.com/rust-lang/crates.io-index" 3744 + checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" 3745 + 3746 + [[package]] 3368 3747 name = "prettyplease" 3369 3748 version = "0.2.37" 3370 3749 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 3385 3764 3386 3765 [[package]] 3387 3766 name = "proc-macro-error" 3388 - version = "0.4.12" 3389 - source = "registry+https://github.com/rust-lang/crates.io-index" 3390 - checksum = "18f33027081eba0a6d8aba6d1b1c3a3be58cbb12106341c2d5759fcd9b5277e7" 3391 - dependencies = [ 3392 - "proc-macro-error-attr 0.4.12", 3393 - "proc-macro2", 3394 - "quote", 3395 - "syn 1.0.109", 3396 - "version_check", 3397 - ] 3398 - 3399 - [[package]] 3400 - name = "proc-macro-error" 3401 3767 version = "1.0.4" 3402 3768 source = "registry+https://github.com/rust-lang/crates.io-index" 3403 3769 checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" 3404 3770 dependencies = [ 3405 - "proc-macro-error-attr 1.0.4", 3406 - "proc-macro2", 3407 - "quote", 3408 - "syn 1.0.109", 3409 - "version_check", 3410 - ] 3411 - 3412 - [[package]] 3413 - name = "proc-macro-error-attr" 3414 - version = "0.4.12" 3415 - source = "registry+https://github.com/rust-lang/crates.io-index" 3416 - checksum = "8a5b4b77fdb63c1eca72173d68d24501c54ab1269409f6b672c85deb18af69de" 3417 - dependencies = [ 3771 + "proc-macro-error-attr", 3418 3772 "proc-macro2", 3419 3773 "quote", 3420 3774 "syn 1.0.109", 3421 - "syn-mid", 3422 3775 "version_check", 3423 3776 ] 3424 3777 ··· 3434 3787 ] 3435 3788 3436 3789 [[package]] 3437 - name = "proc-macro-hack" 3438 - version = "0.5.20+deprecated" 3439 - source = "registry+https://github.com/rust-lang/crates.io-index" 3440 - checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" 3441 - 3442 - [[package]] 3443 3790 name = "proc-macro2" 3444 3791 version = "1.0.101" 3445 3792 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 3646 3993 ] 3647 3994 3648 3995 [[package]] 3649 - name = "raw-window-handle" 3650 - version = "0.5.2" 3651 - source = "registry+https://github.com/rust-lang/crates.io-index" 3652 - checksum = "f2ff9a1f06a88b01621b7ae906ef0211290d1c8a168a15542486a8f61c0833b9" 3653 - 3654 - [[package]] 3655 3996 name = "redox_syscall" 3656 3997 version = "0.5.18" 3657 3998 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 3661 4002 ] 3662 4003 3663 4004 [[package]] 4005 + name = "ref-cast" 4006 + version = "1.0.25" 4007 + source = "registry+https://github.com/rust-lang/crates.io-index" 4008 + checksum = "f354300ae66f76f1c85c5f84693f0ce81d747e2c3f21a45fef496d89c960bf7d" 4009 + dependencies = [ 4010 + "ref-cast-impl", 4011 + ] 4012 + 4013 + [[package]] 4014 + name = "ref-cast-impl" 4015 + version = "1.0.25" 4016 + source = "registry+https://github.com/rust-lang/crates.io-index" 4017 + checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da" 4018 + dependencies = [ 4019 + "proc-macro2", 4020 + "quote", 4021 + "syn 2.0.106", 4022 + ] 4023 + 4024 + [[package]] 3664 4025 name = "regex" 3665 4026 version = "1.12.1" 3666 4027 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 3682 4043 "memchr", 3683 4044 "regex-syntax", 3684 4045 ] 4046 + 4047 + [[package]] 4048 + name = "regex-lite" 4049 + version = "0.1.8" 4050 + source = "registry+https://github.com/rust-lang/crates.io-index" 4051 + checksum = "8d942b98df5e658f56f20d592c7f868833fe38115e65c33003d8cd224b0155da" 3685 4052 3686 4053 [[package]] 3687 4054 name = "regex-syntax" ··· 3975 4342 ] 3976 4343 3977 4344 [[package]] 4345 + name = "schemars" 4346 + version = "0.9.0" 4347 + source = "registry+https://github.com/rust-lang/crates.io-index" 4348 + checksum = "4cd191f9397d57d581cddd31014772520aa448f65ef991055d7f61582c65165f" 4349 + dependencies = [ 4350 + "dyn-clone", 4351 + "ref-cast", 4352 + "serde", 4353 + "serde_json", 4354 + ] 4355 + 4356 + [[package]] 4357 + name = "schemars" 4358 + version = "1.2.0" 4359 + source = "registry+https://github.com/rust-lang/crates.io-index" 4360 + checksum = "54e910108742c57a770f492731f99be216a52fadd361b06c8fb59d74ccc267d2" 4361 + dependencies = [ 4362 + "dyn-clone", 4363 + "ref-cast", 4364 + "serde", 4365 + "serde_json", 4366 + ] 4367 + 4368 + [[package]] 4369 + name = "scoped-tls" 4370 + version = "1.0.1" 4371 + source = "registry+https://github.com/rust-lang/crates.io-index" 4372 + checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" 4373 + 4374 + [[package]] 3978 4375 name = "scopeguard" 3979 4376 version = "1.2.0" 3980 4377 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 4022 4419 checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" 4023 4420 dependencies = [ 4024 4421 "bitflags", 4025 - "core-foundation", 4422 + "core-foundation 0.9.4", 4026 4423 "core-foundation-sys", 4027 4424 "libc", 4028 4425 "security-framework-sys", ··· 4045 4442 checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" 4046 4443 4047 4444 [[package]] 4445 + name = "send_wrapper" 4446 + version = "0.6.0" 4447 + source = "registry+https://github.com/rust-lang/crates.io-index" 4448 + checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" 4449 + 4450 + [[package]] 4048 4451 name = "sentry-core" 4049 4452 version = "0.42.0" 4050 4453 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 4120 4523 checksum = "b2f2d7ff8a2140333718bb329f5c40fc5f0865b84c426183ce14c97d2ab8154f" 4121 4524 dependencies = [ 4122 4525 "form_urlencoded", 4123 - "indexmap", 4526 + "indexmap 2.11.4", 4124 4527 "itoa", 4125 4528 "ryu", 4126 4529 "serde_core", ··· 4163 4566 ] 4164 4567 4165 4568 [[package]] 4569 + name = "serde_repr" 4570 + version = "0.1.20" 4571 + source = "registry+https://github.com/rust-lang/crates.io-index" 4572 + checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" 4573 + dependencies = [ 4574 + "proc-macro2", 4575 + "quote", 4576 + "syn 2.0.106", 4577 + ] 4578 + 4579 + [[package]] 4166 4580 name = "serde_urlencoded" 4167 4581 version = "0.7.1" 4168 4582 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 4175 4589 ] 4176 4590 4177 4591 [[package]] 4592 + name = "serde_with" 4593 + version = "3.16.1" 4594 + source = "registry+https://github.com/rust-lang/crates.io-index" 4595 + checksum = "4fa237f2807440d238e0364a218270b98f767a00d3dada77b1c53ae88940e2e7" 4596 + dependencies = [ 4597 + "base64 0.22.1", 4598 + "chrono", 4599 + "hex", 4600 + "indexmap 1.9.3", 4601 + "indexmap 2.11.4", 4602 + "schemars 0.9.0", 4603 + "schemars 1.2.0", 4604 + "serde_core", 4605 + "serde_json", 4606 + "serde_with_macros", 4607 + "time", 4608 + ] 4609 + 4610 + [[package]] 4611 + name = "serde_with_macros" 4612 + version = "3.16.1" 4613 + source = "registry+https://github.com/rust-lang/crates.io-index" 4614 + checksum = "52a8e3ca0ca629121f70ab50f95249e5a6f925cc0f6ffe8256c45b728875706c" 4615 + dependencies = [ 4616 + "darling", 4617 + "proc-macro2", 4618 + "quote", 4619 + "syn 2.0.106", 4620 + ] 4621 + 4622 + [[package]] 4178 4623 name = "serdect" 4179 4624 version = "0.2.0" 4180 4625 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 4232 4677 "async-compression", 4233 4678 "chrono", 4234 4679 "futures", 4680 + "jacquard", 4235 4681 "jacquard-api", 4236 4682 "jacquard-common", 4237 4683 "lexicon_types_crate", ··· 4276 4722 checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" 4277 4723 4278 4724 [[package]] 4725 + name = "siphasher" 4726 + version = "1.0.1" 4727 + source = "registry+https://github.com/rust-lang/crates.io-index" 4728 + checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" 4729 + 4730 + [[package]] 4279 4731 name = "sketches-ddsketch" 4280 4732 version = "0.3.0" 4281 4733 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 4336 4788 ] 4337 4789 4338 4790 [[package]] 4791 + name = "spin" 4792 + version = "0.10.0" 4793 + source = "registry+https://github.com/rust-lang/crates.io-index" 4794 + checksum = "d5fe4ccb98d9c292d56fec89a5e07da7fc4cf0dc11e156b41793132775d3e591" 4795 + 4796 + [[package]] 4339 4797 name = "spinning_top" 4340 4798 version = "0.3.0" 4341 4799 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 4387 4845 "futures-util", 4388 4846 "hashbrown 0.15.5", 4389 4847 "hashlink", 4390 - "indexmap", 4848 + "indexmap 2.11.4", 4391 4849 "log", 4392 4850 "memchr", 4393 4851 "once_cell", ··· 4573 5031 "ciborium", 4574 5032 "hex_fmt", 4575 5033 "indoc", 4576 - "proc-macro-error 1.0.4", 5034 + "proc-macro-error", 4577 5035 "proc-macro2", 4578 5036 "quote", 4579 5037 "serde", ··· 4589 5047 checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" 4590 5048 4591 5049 [[package]] 5050 + name = "string_cache" 5051 + version = "0.8.9" 5052 + source = "registry+https://github.com/rust-lang/crates.io-index" 5053 + checksum = "bf776ba3fa74f83bf4b63c3dcbbf82173db2632ed8452cb2d891d33f459de70f" 5054 + dependencies = [ 5055 + "new_debug_unreachable", 5056 + "parking_lot", 5057 + "phf_shared", 5058 + "precomputed-hash", 5059 + "serde", 5060 + ] 5061 + 5062 + [[package]] 5063 + name = "string_cache_codegen" 5064 + version = "0.5.4" 5065 + source = "registry+https://github.com/rust-lang/crates.io-index" 5066 + checksum = "c711928715f1fe0fe509c53b43e993a9a557babc2d0a3567d0a3006f1ac931a0" 5067 + dependencies = [ 5068 + "phf_generator", 5069 + "phf_shared", 5070 + "proc-macro2", 5071 + "quote", 5072 + ] 5073 + 5074 + [[package]] 4592 5075 name = "stringprep" 4593 5076 version = "0.1.5" 4594 5077 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 4634 5117 ] 4635 5118 4636 5119 [[package]] 4637 - name = "syn-mid" 4638 - version = "0.5.4" 4639 - source = "registry+https://github.com/rust-lang/crates.io-index" 4640 - checksum = "fea305d57546cc8cd04feb14b62ec84bf17f50e3f7b12560d7bfa9265f39d9ed" 4641 - dependencies = [ 4642 - "proc-macro2", 4643 - "quote", 4644 - "syn 1.0.109", 4645 - ] 4646 - 4647 - [[package]] 4648 5120 name = "sync_wrapper" 4649 5121 version = "1.0.2" 4650 5122 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 4685 5157 checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" 4686 5158 dependencies = [ 4687 5159 "bitflags", 4688 - "core-foundation", 5160 + "core-foundation 0.9.4", 4689 5161 "system-configuration-sys", 4690 5162 ] 4691 5163 ··· 4719 5191 ] 4720 5192 4721 5193 [[package]] 5194 + name = "tendril" 5195 + version = "0.4.3" 5196 + source = "registry+https://github.com/rust-lang/crates.io-index" 5197 + checksum = "d24a120c5fc464a3458240ee02c299ebcb9d67b5249c8848b09d639dca8d7bb0" 5198 + dependencies = [ 5199 + "futf", 5200 + "mac", 5201 + "utf-8", 5202 + ] 5203 + 5204 + [[package]] 4722 5205 name = "thiserror" 4723 5206 version = "1.0.69" 4724 5207 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 4924 5407 "futures-core", 4925 5408 "futures-io", 4926 5409 "futures-sink", 5410 + "futures-util", 4927 5411 "pin-project-lite", 4928 5412 "tokio", 4929 5413 ] ··· 4965 5449 dependencies = [ 4966 5450 "futures-core", 4967 5451 "futures-util", 4968 - "indexmap", 5452 + "indexmap 2.11.4", 4969 5453 "pin-project-lite", 4970 5454 "slab", 4971 5455 "sync_wrapper", ··· 5129 5613 ] 5130 5614 5131 5615 [[package]] 5616 + name = "triomphe" 5617 + version = "0.1.15" 5618 + source = "registry+https://github.com/rust-lang/crates.io-index" 5619 + checksum = "dd69c5aa8f924c7519d6372789a74eac5b94fb0f8fcf0d4a97eb0bfc3e785f39" 5620 + 5621 + [[package]] 5132 5622 name = "try-lock" 5133 5623 version = "0.2.5" 5134 5624 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 5194 5684 checksum = "e70f2a8b45122e719eb623c01822704c4e0907e7e426a05927e1a1cfff5b75d0" 5195 5685 5196 5686 [[package]] 5687 + name = "unicode-segmentation" 5688 + version = "1.12.0" 5689 + source = "registry+https://github.com/rust-lang/crates.io-index" 5690 + checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" 5691 + 5692 + [[package]] 5197 5693 name = "unicode-width" 5198 5694 version = "0.1.14" 5199 5695 source = "registry+https://github.com/rust-lang/crates.io-index" 5200 5696 checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" 5697 + 5698 + [[package]] 5699 + name = "unicode-xid" 5700 + version = "0.2.6" 5701 + source = "registry+https://github.com/rust-lang/crates.io-index" 5702 + checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" 5201 5703 5202 5704 [[package]] 5203 5705 name = "unsigned-varint" ··· 5228 5730 version = "2.1.3" 5229 5731 source = "registry+https://github.com/rust-lang/crates.io-index" 5230 5732 checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da" 5733 + 5734 + [[package]] 5735 + name = "utf-8" 5736 + version = "0.7.6" 5737 + source = "registry+https://github.com/rust-lang/crates.io-index" 5738 + checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" 5231 5739 5232 5740 [[package]] 5233 5741 name = "utf8_iter" ··· 5456 5964 5457 5965 [[package]] 5458 5966 name = "webbrowser" 5459 - version = "0.8.15" 5967 + version = "1.0.6" 5460 5968 source = "registry+https://github.com/rust-lang/crates.io-index" 5461 - checksum = "db67ae75a9405634f5882791678772c94ff5f16a66535aae186e26aa0841fc8b" 5969 + checksum = "00f1243ef785213e3a32fa0396093424a3a6ea566f9948497e5a2309261a4c97" 5462 5970 dependencies = [ 5463 - "core-foundation", 5464 - "home", 5971 + "core-foundation 0.10.1", 5465 5972 "jni", 5466 5973 "log", 5467 5974 "ndk-context", 5468 - "objc", 5469 - "raw-window-handle", 5975 + "objc2", 5976 + "objc2-foundation", 5470 5977 "url", 5471 5978 "web-sys", 5979 + ] 5980 + 5981 + [[package]] 5982 + name = "webpage" 5983 + version = "2.0.1" 5984 + source = "registry+https://github.com/rust-lang/crates.io-index" 5985 + checksum = "70862efc041d46e6bbaa82bb9c34ae0596d090e86cbd14bd9e93b36ee6802eac" 5986 + dependencies = [ 5987 + "html5ever", 5988 + "markup5ever_rcdom", 5989 + "serde_json", 5990 + "url", 5472 5991 ] 5473 5992 5474 5993 [[package]] ··· 6037 6556 version = "0.6.1" 6038 6557 source = "registry+https://github.com/rust-lang/crates.io-index" 6039 6558 checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb" 6559 + 6560 + [[package]] 6561 + name = "xml5ever" 6562 + version = "0.18.1" 6563 + source = "registry+https://github.com/rust-lang/crates.io-index" 6564 + checksum = "9bbb26405d8e919bc1547a5aa9abc95cbfa438f04844f5fdd9dc7596b748bf69" 6565 + dependencies = [ 6566 + "log", 6567 + "mac", 6568 + "markup5ever", 6569 + ] 6040 6570 6041 6571 [[package]] 6042 6572 name = "yansi"
+5 -5
Cargo.toml
··· 11 11 serde_json = "1.0" 12 12 thiserror = "2.0" 13 13 lexicon_types_crate = { path = "./lexicon_types_crate" } 14 - jacquard = "0.6.0" 15 - jacquard-axum = "0.6.0" 16 - jacquard-common = "0.6.0" 17 - jacquard-identity = "0.6.0" 18 - jacquard-api = "0.6.0" 14 + jacquard = "0.9.5" 15 + jacquard-axum = "0.9.6" 16 + jacquard-common = "0.9.5" 17 + jacquard-identity = { version = "0.9.5", features = ["dns", "cache"] } 18 + jacquard-api = "0.9.5" 19 19 apalis = { version = "0.7.3", features = ["retry", "limit", "layers", ] } 20 20 #Manually brought in migrations cause I was fighting them 21 21 apalis-sql = { version = "0.7.3", default-features = false, features = ["postgres", "tokio-comp"] }
+2 -2
justfile
··· 10 10 docker buildx build \ 11 11 --platform linux/arm64,linux/amd64 \ 12 12 --tag fatfingers23/moover_worker:latest \ 13 - --tag fatfingers23/moover_worker:0.0.2 \ 13 + --tag fatfingers23/moover_worker:0.0.3 \ 14 14 --file Dockerfiles/worker.Dockerfile \ 15 15 --push . 16 16 #cron worker ··· 27 27 --tag fatfingers23/moover_ui:latest \ 28 28 --tag fatfingers23/moover_ui:0.0.4 \ 29 29 --file Dockerfiles/web-ui.Dockerfile \ 30 - --push . 30 + --push .
+1
shared/Cargo.toml
··· 23 23 tokio-util.workspace = true 24 24 rust-s3.workspace = true 25 25 jacquard-api.workspace = true 26 + jacquard.workspace = true
+135 -6
shared/src/jobs/scheduled_back_up_start.rs
··· 1 1 use crate::jobs::account_backup::AccountBackupJobContext; 2 2 use crate::jobs::{account_backup, pds_backup, push_job_json}; 3 3 use apalis::prelude::{Data, Error}; 4 + use jacquard::{client::BasicClient, identity::PublicResolver, prelude::IdentityResolver, url}; 5 + use jacquard_api::com_atproto::sync::get_repo_status::GetRepoStatus; 6 + use jacquard_common::{types::did::Did, types::tid::Tid, xrpc::XrpcClient}; 4 7 use serde::{Deserialize, Serialize}; 5 8 use sqlx::{Pool, Postgres}; 6 9 use std::sync::Arc; ··· 10 13 #[derive(Debug, Deserialize, Serialize, Clone)] 11 14 pub struct ScheduledBackUpStartJobContext; 12 15 16 + /// Finds the new PDS and saves it in the database if the user has changed PDSs since signing up 17 + async fn find_new_pds_host(pool: &Pool<Postgres>, did: String) -> Option<String> { 18 + let resolver = PublicResolver::default(); 19 + let did_string = did.clone(); 20 + let did = match Did::new(did.as_str()) { 21 + Ok(did) => did, 22 + Err(err) => { 23 + log::error!("Failed to parse did {did} : {err}"); 24 + return None; 25 + } 26 + }; 27 + 28 + let did_doc = match resolver.resolve_did_doc_owned(&did).await { 29 + Ok(did_doc) => did_doc, 30 + Err(err) => { 31 + log::error!("Failed to resolve did doc for {did} : {err}"); 32 + return None; 33 + } 34 + }; 35 + 36 + match did_doc.pds_endpoint() { 37 + None => None, 38 + Some(url) => match url.host_str() { 39 + None => { 40 + log::error!("Failed to parse pds_endpoint for {did} : {url}"); 41 + return None; 42 + } 43 + Some(host) => { 44 + //I may of copied and pasted this to get it going <.< who needs dry in all this snow 45 + let result = sqlx::query( 46 + "UPDATE accounts SET pds_host = $2 WHERE did = $1 AND pds_host <> $2", 47 + ) 48 + .bind(did_string) 49 + .bind(host) 50 + .execute(pool) 51 + .await; 52 + if let Err(e) = result { 53 + log::error!("Failed to update pds_host for {did} : {e}"); 54 + } 55 + // Ok(result.rows_affected()) 56 + Some(host.to_string()) 57 + } 58 + }, 59 + } 60 + } 61 + 13 62 /// This scheduled job finds: 14 - /// - accounts that have not been backed up in the last 6 hours and have pds_sign_up = false, 63 + /// - accounts that have not been backed up in the last 2 hours and have pds_sign_up = false, 15 64 /// and enqueues AccountBackup jobs for them; 16 - /// - pds_hosts that are active and have not started a backup in the last 6 hours (tracked via 65 + /// - pds_hosts that are active and have not started a backup in the last 2 hours (tracked via 17 66 /// pds_hosts.last_backup_start), and enqueues PdsBackup jobs for each. 18 67 pub async fn scheduled_back_up_start_job( 19 68 _job: ScheduledBackUpStartJobContext, ··· 33 82 SELECT did, pds_host 34 83 FROM accounts 35 84 WHERE pds_sign_up = FALSE 36 - AND (last_backup IS NULL OR last_backup < NOW() - INTERVAL '6 HOURS') 85 + AND (last_backup IS NULL OR last_backup < NOW() - INTERVAL '2 HOURS') 37 86 "#, 38 87 ) 39 88 .fetch_all(&*pool) 40 89 .await 41 90 .map_err(|e| Error::Failed(Arc::new(Box::new(e))))?; 42 91 92 + //TODO maybe check here? 93 + let agent = BasicClient::unauthenticated(); 43 94 for (did, pds_host) in accounts { 95 + //This is a holder we can change the PDS if we need to 96 + let mut pds_host_to_call = pds_host.clone(); 97 + 98 + //Need to do matches here cause I don't want to fail the whole loop 99 + let pds_url = match url::Url::parse(&format!("https://{}", pds_host)) { 100 + Ok(url) => url, 101 + Err(e) => { 102 + log::warn!("Failed to parse pds_host: {pds_host} \n {e}"); 103 + continue; 104 + } 105 + }; 106 + 107 + //Sets the agent to the new PDS URL 108 + agent.set_base_uri(pds_url).await; 109 + 110 + let request = GetRepoStatus { 111 + //May just leave this ? 112 + did: did.clone().parse().map_err(|_| { 113 + Error::Failed(Arc::new(Box::new(std::io::Error::new( 114 + std::io::ErrorKind::Other, 115 + "Failed to parse did", 116 + )))) 117 + })?, 118 + }; 119 + 120 + let rev: Option<Tid> = match agent.send(request).await { 121 + Ok(response) => match response.parse() { 122 + Ok(output) => { 123 + log::info!("{output:?}"); 124 + if output.active { 125 + output.rev 126 + } else { 127 + match output.status { 128 + None => { 129 + log::warn!( 130 + "{did} has no status and not active. Not sure if this happens" 131 + ); 132 + continue; 133 + } 134 + Some(status) => { 135 + if status == "deactivated" { 136 + log::info!( 137 + "{did} has been deactivated on this PDS. Let's see if they moved." 138 + ); 139 + match find_new_pds_host(&pool, did.clone()).await { 140 + None => continue, 141 + Some(new_host) => { 142 + log::info!( 143 + "{did} has moved to {new_host}. Database updated." 144 + ); 145 + pds_host_to_call = new_host; 146 + } 147 + } 148 + //As long as it's successful, we can just send along None for the sub job to pick up the new rev on the new PDS 149 + None 150 + } else { 151 + //TODO will most likely set accounts to deactivated as i collect more data here 152 + log::warn!("{did} has the repo status {status}."); 153 + continue; 154 + } 155 + } 156 + } 157 + } 158 + } 159 + Err(err) => { 160 + log::warn!("Failed to parse GetRepoStatusResponse for: {did} \n {err}"); 161 + continue; 162 + } 163 + }, 164 + Err(err) => { 165 + log::warn!("Failed to send GetRepoStatusRequest for: {did} \n {err}"); 166 + continue; 167 + } 168 + }; 169 + 170 + let rev_string: Option<String> = rev.map(|r| r.to_string()); 171 + 44 172 let ctx = AccountBackupJobContext { 45 173 did, 46 - pds_host, 47 - rev: None, 174 + pds_host: pds_host_to_call, 175 + rev: rev_string, 48 176 }; 177 + 49 178 push_job_json(&pool, account_backup::JOB_NAMESPACE, &ctx).await?; 50 179 } 51 180 ··· 56 185 SELECT pds_host 57 186 FROM pds_hosts 58 187 WHERE active = TRUE 59 - AND (last_backup_start IS NULL OR last_backup_start < NOW() - INTERVAL '6 HOURS') 188 + AND (last_backup_start IS NULL OR last_backup_start < NOW() - INTERVAL '2 HOURS') 60 189 "#, 61 190 ) 62 191 .fetch_all(&*pool)
+1
shared/src/jobs/upload_blob.rs
··· 67 67 BlobType::Repo(rev) => { 68 68 let current_rev = match rev { 69 69 None => { 70 + //todo Prob just always pass in a rev? induivial uplaods do this anyhow 70 71 let url = format!( 71 72 "https://{}/xrpc/com.atproto.sync.getRepoStatus?did={}", 72 73 pds_host, did,
+2 -1
web-ui/package.json
··· 38 38 }, 39 39 "optionalDependencies": { 40 40 "@rollup/rollup-linux-x64-musl": "^4.52.5" 41 - } 41 + }, 42 + "packageManager": "pnpm@10.28.1+sha512.7d7dbbca9e99447b7c3bf7a73286afaaf6be99251eb9498baefa7d406892f67b879adb3a1d7e687fc4ccc1a388c7175fbaae567a26ab44d1067b54fcb0d6a316" 42 43 }
+1 -1
web-ui/src/routes/backups/SignUpForm.svelte
··· 136 136 <h2>No backup repository found</h2> 137 137 <p style="text-align: left;"> 138 138 Sign up now to backup your AT Protocol account. PDS MOOver automatically backups your posts, 139 - likes, media, and all account data every 6 hours. This is stored on our servers in something 139 + likes, media, and all account data every 2 hours. This is stored on our servers in something 140 140 called an <a 141 141 target="_blank" 142 142 rel="noopener noreferrer"
+1 -1
web-ui/src/routes/info/+page.svelte
··· 78 78 <p>PDS MOOver now supports backups. These are automated backups of your account saving your repo 79 79 (posts,likes,etc), and your blobs(picture/videos) from your AT Proto account to a cloud base object 80 80 store (S3). This is a free service for individual accounts and stores the backups on PDS MOOver's 81 - servers. These backups will happen every 6 hours from the time you sign up. We are expecting to lower 81 + servers. These backups will happen every 2 hours from the time you sign up. We are expecting to lower 82 82 this as we see how the service does. On login, you will be asked if you'd like to add a rotation key to 83 83 your account. It is highly recommended to do this if you do not already have one. This is the only way 84 84 you can recover your account in the event of a PDS failure or rogue account takeover</p>

History

1 round 0 comments
sign up or login to add to the discussion
4 commits
expand
get repo status stuff just need to resolve that PDS
detect new pds
Moved backups to every 2 hours
forgot to up the worker
expand 0 comments
pull request successfully merged