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 web/.DS_Store 7 8 .DS_Store
··· 6 web/.DS_Store 7 8 .DS_Store 9 + garage-data
+656 -126
Cargo.lock
··· 285 ] 286 287 [[package]] 288 name = "atomic-waker" 289 version = "1.1.2" 290 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 805 checksum = "a1d728cc89cf3aee9ff92b05e62b19ee65a02b5702cff7d5a377e32c6ae29d8d" 806 807 [[package]] 808 name = "colorchoice" 809 version = "1.0.4" 810 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 895 checksum = "2f421161cb492475f1661ddc9815a745a1c894592070661180fdec3d4872e9c3" 896 897 [[package]] 898 name = "core-foundation" 899 version = "0.9.4" 900 source = "registry+https://github.com/rust-lang/crates.io-index" 901 checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" 902 dependencies = [ 903 "core-foundation-sys", 904 "libc", ··· 1162 ] 1163 1164 [[package]] 1165 name = "digest" 1166 version = "0.10.7" 1167 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 1198 version = "0.15.7" 1199 source = "registry+https://github.com/rust-lang/crates.io-index" 1200 checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b" 1201 1202 [[package]] 1203 name = "ecdsa" ··· 1247 ] 1248 1249 [[package]] 1250 name = "encoding_rs" 1251 version = "0.8.35" 1252 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 1380 dependencies = [ 1381 "futures-core", 1382 "futures-sink", 1383 - "spin", 1384 ] 1385 1386 [[package]] ··· 1430 ] 1431 1432 [[package]] 1433 name = "futures" 1434 version = "0.3.31" 1435 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 1445 ] 1446 1447 [[package]] 1448 name = "futures-channel" 1449 version = "0.3.31" 1450 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 1549 ] 1550 1551 [[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" 1572 source = "registry+https://github.com/rust-lang/crates.io-index" 1573 - checksum = "784f84eebc366e15251c4a8c3acee82a6a6f427949776ecb88377362a9621738" 1574 dependencies = [ 1575 - "proc-macro-error 0.4.12", 1576 - "proc-macro-hack", 1577 - "proc-macro2", 1578 - "quote", 1579 - "syn 1.0.109", 1580 ] 1581 1582 [[package]] ··· 1618 ] 1619 1620 [[package]] 1621 name = "governor" 1622 version = "0.10.1" 1623 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 1672 "futures-core", 1673 "futures-sink", 1674 "http", 1675 - "indexmap", 1676 "slab", 1677 "tokio", 1678 "tokio-util", ··· 1691 ] 1692 1693 [[package]] 1694 name = "hashbrown" 1695 version = "0.14.5" 1696 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 1723 ] 1724 1725 [[package]] 1726 name = "heck" 1727 version = "0.4.1" 1728 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 1877 checksum = "589533453244b0995c858700322199b2becb13b627df2851f64a2775d024abcf" 1878 dependencies = [ 1879 "windows-sys 0.59.0", 1880 ] 1881 1882 [[package]] ··· 2165 2166 [[package]] 2167 name = "indexmap" 2168 version = "2.11.4" 2169 source = "registry+https://github.com/rust-lang/crates.io-index" 2170 checksum = "4b0f83760fb341a774ed326568e19f5a863af4a952def8c39f9ab92fd95b88e5" 2171 dependencies = [ 2172 "equivalent", 2173 "hashbrown 0.16.0", 2174 ] 2175 2176 [[package]] ··· 2178 version = "2.0.6" 2179 source = "registry+https://github.com/rust-lang/crates.io-index" 2180 checksum = "f4c7245a08504955605670dbf141fceab975f15ca21570696aebe9d2e71576bd" 2181 2182 [[package]] 2183 name = "ipconfig" ··· 2232 2233 [[package]] 2234 name = "jacquard" 2235 - version = "0.6.0" 2236 source = "registry+https://github.com/rust-lang/crates.io-index" 2237 - checksum = "5857f000e67605995ba7c24c9833f840adf5c063a731a6f72f69e0e3c986791c" 2238 dependencies = [ 2239 - "bon", 2240 "bytes", 2241 "getrandom 0.2.16", 2242 "http", 2243 "jacquard-api", 2244 "jacquard-common", 2245 - "jacquard-derive", 2246 "jacquard-identity", 2247 "jacquard-oauth", 2248 "jose-jwk", 2249 "miette", 2250 - "p256", 2251 - "percent-encoding", 2252 - "rand_core 0.6.4", 2253 "reqwest", 2254 "serde", 2255 "serde_html_form", 2256 - "serde_ipld_dagcbor", 2257 "serde_json", 2258 "smol_str", 2259 "thiserror 2.0.17", 2260 "tokio", 2261 "trait-variant", 2262 "url", 2263 ] 2264 2265 [[package]] 2266 name = "jacquard-api" 2267 - version = "0.6.0" 2268 source = "registry+https://github.com/rust-lang/crates.io-index" 2269 - checksum = "58132b60473124a34c64c267a1c3390c2e4a4dfd62c801639903c4aefd05f52d" 2270 dependencies = [ 2271 "bon", 2272 "bytes", 2273 "jacquard-common", 2274 - "jacquard-derive", 2275 "miette", 2276 "serde", 2277 "serde_ipld_dagcbor", 2278 "thiserror 2.0.17", 2279 ] 2280 2281 [[package]] 2282 name = "jacquard-axum" 2283 - version = "0.6.0" 2284 source = "registry+https://github.com/rust-lang/crates.io-index" 2285 - checksum = "dc630809a5a22fdce95d4a63f244e7f6e44479edabc10c487758011c0de0153c" 2286 dependencies = [ 2287 "axum", 2288 "bytes", 2289 "jacquard", 2290 "jacquard-common", 2291 - "jacquard-derive", 2292 "jacquard-identity", 2293 "miette", 2294 "multibase", 2295 "serde", 2296 "serde_html_form", 2297 - "serde_ipld_dagcbor", 2298 "serde_json", 2299 "thiserror 2.0.17", 2300 "tokio", ··· 2304 2305 [[package]] 2306 name = "jacquard-common" 2307 - version = "0.6.0" 2308 source = "registry+https://github.com/rust-lang/crates.io-index" 2309 - checksum = "f7f1bab0279ae2e29c3383f132a05b9c708585fab62e94292affdf352ce13242" 2310 dependencies = [ 2311 "base64 0.22.1", 2312 "bon", 2313 "bytes", 2314 "chrono", 2315 "cid", 2316 - "genawaiter", 2317 "getrandom 0.3.4", 2318 "http", 2319 "ipld-core", ··· 2324 "multihash", 2325 "ouroboros", 2326 "p256", 2327 "rand 0.9.2", 2328 "regex", 2329 "reqwest", 2330 "serde", 2331 "serde_html_form", 2332 "serde_ipld_dagcbor", 2333 "serde_json", ··· 2352 ] 2353 2354 [[package]] 2355 name = "jacquard-identity" 2356 - version = "0.6.0" 2357 source = "registry+https://github.com/rust-lang/crates.io-index" 2358 - checksum = "65ae022725ddc09ce03c1a02a97b895279e1d46957c0574a032fa78b81273263" 2359 dependencies = [ 2360 "bon", 2361 "bytes", ··· 2363 "http", 2364 "jacquard-api", 2365 "jacquard-common", 2366 "miette", 2367 "percent-encoding", 2368 "reqwest", 2369 "serde", ··· 2377 ] 2378 2379 [[package]] 2380 name = "jacquard-oauth" 2381 - version = "0.6.0" 2382 source = "registry+https://github.com/rust-lang/crates.io-index" 2383 - checksum = "8c37269e2ea0c6c3418bf61fb3d342aab87b1bda706ebae49e454f8e50580cab" 2384 dependencies = [ 2385 "base64 0.22.1", 2386 "bytes", ··· 2395 "miette", 2396 "p256", 2397 "rand 0.8.5", 2398 - "rand_core 0.6.4", 2399 - "reqwest", 2400 "rouille", 2401 "serde", 2402 "serde_html_form", 2403 "serde_json", 2404 "sha2", 2405 - "signature", 2406 "smol_str", 2407 "thiserror 2.0.17", 2408 "tokio", ··· 2565 source = "registry+https://github.com/rust-lang/crates.io-index" 2566 checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" 2567 dependencies = [ 2568 - "spin", 2569 ] 2570 2571 [[package]] ··· 2574 dependencies = [ 2575 "bon", 2576 "jacquard-common", 2577 - "jacquard-derive", 2578 "miette", 2579 "serde", 2580 "thiserror 2.0.17", ··· 2647 checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" 2648 2649 [[package]] 2650 name = "lru" 2651 version = "0.12.5" 2652 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 2671 checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" 2672 2673 [[package]] 2674 - name = "malloc_buf" 2675 - version = "0.0.6" 2676 source = "registry+https://github.com/rust-lang/crates.io-index" 2677 - checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" 2678 dependencies = [ 2679 - "libc", 2680 ] 2681 2682 [[package]] ··· 2755 checksum = "2b166dea96003ee2531cf14833efedced545751d800f03535801d833313f8c15" 2756 dependencies = [ 2757 "base64 0.22.1", 2758 - "indexmap", 2759 "metrics", 2760 "metrics-util", 2761 "quanta", ··· 2817 ] 2818 2819 [[package]] 2820 name = "minidom" 2821 version = "0.16.0" 2822 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 2932 ] 2933 2934 [[package]] 2935 name = "native-tls" 2936 version = "0.2.14" 2937 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 2953 version = "0.1.1" 2954 source = "registry+https://github.com/rust-lang/crates.io-index" 2955 checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" 2956 2957 [[package]] 2958 name = "nom" ··· 3077 ] 3078 3079 [[package]] 3080 - name = "objc" 3081 - version = "0.2.7" 3082 source = "registry+https://github.com/rust-lang/crates.io-index" 3083 - checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" 3084 dependencies = [ 3085 - "malloc_buf", 3086 ] 3087 3088 [[package]] ··· 3095 ] 3096 3097 [[package]] 3098 name = "objc2-io-kit" 3099 version = "0.3.2" 3100 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 3267 checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" 3268 3269 [[package]] 3270 name = "pin-project" 3271 version = "1.1.10" 3272 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 3341 ] 3342 3343 [[package]] 3344 name = "potential_utf" 3345 version = "0.1.3" 3346 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 3365 ] 3366 3367 [[package]] 3368 name = "prettyplease" 3369 version = "0.2.37" 3370 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 3385 3386 [[package]] 3387 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 version = "1.0.4" 3402 source = "registry+https://github.com/rust-lang/crates.io-index" 3403 checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" 3404 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 = [ 3418 "proc-macro2", 3419 "quote", 3420 "syn 1.0.109", 3421 - "syn-mid", 3422 "version_check", 3423 ] 3424 ··· 3434 ] 3435 3436 [[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 name = "proc-macro2" 3444 version = "1.0.101" 3445 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 3646 ] 3647 3648 [[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 name = "redox_syscall" 3656 version = "0.5.18" 3657 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 3661 ] 3662 3663 [[package]] 3664 name = "regex" 3665 version = "1.12.1" 3666 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 3682 "memchr", 3683 "regex-syntax", 3684 ] 3685 3686 [[package]] 3687 name = "regex-syntax" ··· 3975 ] 3976 3977 [[package]] 3978 name = "scopeguard" 3979 version = "1.2.0" 3980 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 4022 checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" 4023 dependencies = [ 4024 "bitflags", 4025 - "core-foundation", 4026 "core-foundation-sys", 4027 "libc", 4028 "security-framework-sys", ··· 4045 checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" 4046 4047 [[package]] 4048 name = "sentry-core" 4049 version = "0.42.0" 4050 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 4120 checksum = "b2f2d7ff8a2140333718bb329f5c40fc5f0865b84c426183ce14c97d2ab8154f" 4121 dependencies = [ 4122 "form_urlencoded", 4123 - "indexmap", 4124 "itoa", 4125 "ryu", 4126 "serde_core", ··· 4163 ] 4164 4165 [[package]] 4166 name = "serde_urlencoded" 4167 version = "0.7.1" 4168 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 4175 ] 4176 4177 [[package]] 4178 name = "serdect" 4179 version = "0.2.0" 4180 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 4232 "async-compression", 4233 "chrono", 4234 "futures", 4235 "jacquard-api", 4236 "jacquard-common", 4237 "lexicon_types_crate", ··· 4276 checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" 4277 4278 [[package]] 4279 name = "sketches-ddsketch" 4280 version = "0.3.0" 4281 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 4336 ] 4337 4338 [[package]] 4339 name = "spinning_top" 4340 version = "0.3.0" 4341 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 4387 "futures-util", 4388 "hashbrown 0.15.5", 4389 "hashlink", 4390 - "indexmap", 4391 "log", 4392 "memchr", 4393 "once_cell", ··· 4573 "ciborium", 4574 "hex_fmt", 4575 "indoc", 4576 - "proc-macro-error 1.0.4", 4577 "proc-macro2", 4578 "quote", 4579 "serde", ··· 4589 checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" 4590 4591 [[package]] 4592 name = "stringprep" 4593 version = "0.1.5" 4594 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 4634 ] 4635 4636 [[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 name = "sync_wrapper" 4649 version = "1.0.2" 4650 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 4685 checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" 4686 dependencies = [ 4687 "bitflags", 4688 - "core-foundation", 4689 "system-configuration-sys", 4690 ] 4691 ··· 4719 ] 4720 4721 [[package]] 4722 name = "thiserror" 4723 version = "1.0.69" 4724 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 4924 "futures-core", 4925 "futures-io", 4926 "futures-sink", 4927 "pin-project-lite", 4928 "tokio", 4929 ] ··· 4965 dependencies = [ 4966 "futures-core", 4967 "futures-util", 4968 - "indexmap", 4969 "pin-project-lite", 4970 "slab", 4971 "sync_wrapper", ··· 5129 ] 5130 5131 [[package]] 5132 name = "try-lock" 5133 version = "0.2.5" 5134 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 5194 checksum = "e70f2a8b45122e719eb623c01822704c4e0907e7e426a05927e1a1cfff5b75d0" 5195 5196 [[package]] 5197 name = "unicode-width" 5198 version = "0.1.14" 5199 source = "registry+https://github.com/rust-lang/crates.io-index" 5200 checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" 5201 5202 [[package]] 5203 name = "unsigned-varint" ··· 5228 version = "2.1.3" 5229 source = "registry+https://github.com/rust-lang/crates.io-index" 5230 checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da" 5231 5232 [[package]] 5233 name = "utf8_iter" ··· 5456 5457 [[package]] 5458 name = "webbrowser" 5459 - version = "0.8.15" 5460 source = "registry+https://github.com/rust-lang/crates.io-index" 5461 - checksum = "db67ae75a9405634f5882791678772c94ff5f16a66535aae186e26aa0841fc8b" 5462 dependencies = [ 5463 - "core-foundation", 5464 - "home", 5465 "jni", 5466 "log", 5467 "ndk-context", 5468 - "objc", 5469 - "raw-window-handle", 5470 "url", 5471 "web-sys", 5472 ] 5473 5474 [[package]] ··· 6037 version = "0.6.1" 6038 source = "registry+https://github.com/rust-lang/crates.io-index" 6039 checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb" 6040 6041 [[package]] 6042 name = "yansi"
··· 285 ] 286 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]] 297 name = "atomic-waker" 298 version = "1.1.2" 299 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 814 checksum = "a1d728cc89cf3aee9ff92b05e62b19ee65a02b5702cff7d5a377e32c6ae29d8d" 815 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]] 826 name = "colorchoice" 827 version = "1.0.4" 828 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 913 checksum = "2f421161cb492475f1661ddc9815a745a1c894592070661180fdec3d4872e9c3" 914 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]] 926 name = "core-foundation" 927 version = "0.9.4" 928 source = "registry+https://github.com/rust-lang/crates.io-index" 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" 940 dependencies = [ 941 "core-foundation-sys", 942 "libc", ··· 1200 ] 1201 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]] 1230 name = "digest" 1231 version = "0.10.7" 1232 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 1263 version = "0.15.7" 1264 source = "registry+https://github.com/rust-lang/crates.io-index" 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" 1272 1273 [[package]] 1274 name = "ecdsa" ··· 1318 ] 1319 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]] 1333 name = "encoding_rs" 1334 version = "0.8.35" 1335 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 1463 dependencies = [ 1464 "futures-core", 1465 "futures-sink", 1466 + "spin 0.9.8", 1467 ] 1468 1469 [[package]] ··· 1513 ] 1514 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]] 1526 name = "futures" 1527 version = "0.3.31" 1528 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 1538 ] 1539 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]] 1554 name = "futures-channel" 1555 version = "0.3.31" 1556 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 1655 ] 1656 1657 [[package]] 1658 + name = "generator" 1659 + version = "0.8.8" 1660 source = "registry+https://github.com/rust-lang/crates.io-index" 1661 + checksum = "52f04ae4152da20c76fe800fa48659201d5cf627c5149ca0b707b69d7eef6cf9" 1662 dependencies = [ 1663 + "cc", 1664 + "cfg-if", 1665 + "libc", 1666 + "log", 1667 + "rustversion", 1668 + "windows-link 0.2.1", 1669 + "windows-result 0.4.1", 1670 ] 1671 1672 [[package]] ··· 1708 ] 1709 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]] 1739 name = "governor" 1740 version = "0.10.1" 1741 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 1790 "futures-core", 1791 "futures-sink", 1792 "http", 1793 + "indexmap 2.11.4", 1794 "slab", 1795 "tokio", 1796 "tokio-util", ··· 1809 ] 1810 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]] 1827 name = "hashbrown" 1828 version = "0.14.5" 1829 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 1856 ] 1857 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]] 1873 name = "heck" 1874 version = "0.4.1" 1875 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 2024 checksum = "589533453244b0995c858700322199b2becb13b627df2851f64a2775d024abcf" 2025 dependencies = [ 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", 2041 ] 2042 2043 [[package]] ··· 2326 2327 [[package]] 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" 2340 version = "2.11.4" 2341 source = "registry+https://github.com/rust-lang/crates.io-index" 2342 checksum = "4b0f83760fb341a774ed326568e19f5a863af4a952def8c39f9ab92fd95b88e5" 2343 dependencies = [ 2344 "equivalent", 2345 "hashbrown 0.16.0", 2346 + "serde", 2347 + "serde_core", 2348 ] 2349 2350 [[package]] ··· 2352 version = "2.0.6" 2353 source = "registry+https://github.com/rust-lang/crates.io-index" 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 + ] 2364 2365 [[package]] 2366 name = "ipconfig" ··· 2415 2416 [[package]] 2417 name = "jacquard" 2418 + version = "0.9.5" 2419 source = "registry+https://github.com/rust-lang/crates.io-index" 2420 + checksum = "f7c1fdbcf1153e6e6b87fde20036c1ffe7473c4852f1c6369bc4ef1fe47ccb9f" 2421 dependencies = [ 2422 "bytes", 2423 "getrandom 0.2.16", 2424 + "gloo-storage", 2425 "http", 2426 "jacquard-api", 2427 "jacquard-common", 2428 + "jacquard-derive 0.9.5", 2429 "jacquard-identity", 2430 "jacquard-oauth", 2431 "jose-jwk", 2432 "miette", 2433 + "regex", 2434 + "regex-lite", 2435 "reqwest", 2436 "serde", 2437 "serde_html_form", 2438 "serde_json", 2439 "smol_str", 2440 "thiserror 2.0.17", 2441 "tokio", 2442 "trait-variant", 2443 "url", 2444 + "webpage", 2445 ] 2446 2447 [[package]] 2448 name = "jacquard-api" 2449 + version = "0.9.5" 2450 source = "registry+https://github.com/rust-lang/crates.io-index" 2451 + checksum = "4979fb1848c1dd7ac8fd12745bc71f56f6da61374407d5f9b06005467a954e5a" 2452 dependencies = [ 2453 "bon", 2454 "bytes", 2455 "jacquard-common", 2456 + "jacquard-derive 0.9.5", 2457 + "jacquard-lexicon", 2458 "miette", 2459 + "rustversion", 2460 "serde", 2461 + "serde_bytes", 2462 "serde_ipld_dagcbor", 2463 "thiserror 2.0.17", 2464 + "unicode-segmentation", 2465 ] 2466 2467 [[package]] 2468 name = "jacquard-axum" 2469 + version = "0.9.6" 2470 source = "registry+https://github.com/rust-lang/crates.io-index" 2471 + checksum = "ed99b0dc0cd54189bebb83d5d5cc5ac2889f62ede9729a6ead9035073d111bc9" 2472 dependencies = [ 2473 "axum", 2474 "bytes", 2475 "jacquard", 2476 "jacquard-common", 2477 + "jacquard-derive 0.9.5", 2478 "jacquard-identity", 2479 "miette", 2480 "multibase", 2481 "serde", 2482 "serde_html_form", 2483 "serde_json", 2484 "thiserror 2.0.17", 2485 "tokio", ··· 2489 2490 [[package]] 2491 name = "jacquard-common" 2492 + version = "0.9.5" 2493 source = "registry+https://github.com/rust-lang/crates.io-index" 2494 + checksum = "1751921e0bdae5e0077afade6161545e9ef7698306c868f800916e99ecbcaae9" 2495 dependencies = [ 2496 "base64 0.22.1", 2497 "bon", 2498 "bytes", 2499 "chrono", 2500 "cid", 2501 + "getrandom 0.2.16", 2502 "getrandom 0.3.4", 2503 "http", 2504 "ipld-core", ··· 2509 "multihash", 2510 "ouroboros", 2511 "p256", 2512 + "postcard", 2513 "rand 0.9.2", 2514 "regex", 2515 + "regex-lite", 2516 "reqwest", 2517 "serde", 2518 + "serde_bytes", 2519 "serde_html_form", 2520 "serde_ipld_dagcbor", 2521 "serde_json", ··· 2540 ] 2541 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]] 2556 name = "jacquard-identity" 2557 + version = "0.9.5" 2558 source = "registry+https://github.com/rust-lang/crates.io-index" 2559 + checksum = "e7aaefa819fa4213cf59f180dba932f018a7cd0599582fd38474ee2a38c16cf2" 2560 dependencies = [ 2561 "bon", 2562 "bytes", ··· 2564 "http", 2565 "jacquard-api", 2566 "jacquard-common", 2567 + "jacquard-lexicon", 2568 "miette", 2569 + "mini-moka-wasm", 2570 + "n0-future", 2571 "percent-encoding", 2572 "reqwest", 2573 "serde", ··· 2581 ] 2582 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]] 2611 name = "jacquard-oauth" 2612 + version = "0.9.6" 2613 source = "registry+https://github.com/rust-lang/crates.io-index" 2614 + checksum = "68bf0b0e061d85b09cfa78588dc098918d5b62f539a719165c6a806a1d2c0ef2" 2615 dependencies = [ 2616 "base64 0.22.1", 2617 "bytes", ··· 2626 "miette", 2627 "p256", 2628 "rand 0.8.5", 2629 "rouille", 2630 "serde", 2631 "serde_html_form", 2632 "serde_json", 2633 "sha2", 2634 "smol_str", 2635 "thiserror 2.0.17", 2636 "tokio", ··· 2793 source = "registry+https://github.com/rust-lang/crates.io-index" 2794 checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" 2795 dependencies = [ 2796 + "spin 0.9.8", 2797 ] 2798 2799 [[package]] ··· 2802 dependencies = [ 2803 "bon", 2804 "jacquard-common", 2805 + "jacquard-derive 0.6.0", 2806 "miette", 2807 "serde", 2808 "thiserror 2.0.17", ··· 2875 checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" 2876 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]] 2891 name = "lru" 2892 version = "0.12.5" 2893 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 2912 checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" 2913 2914 [[package]] 2915 + name = "mac" 2916 + version = "0.1.1" 2917 source = "registry+https://github.com/rust-lang/crates.io-index" 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" 2925 dependencies = [ 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", 2944 ] 2945 2946 [[package]] ··· 3019 checksum = "2b166dea96003ee2531cf14833efedced545751d800f03535801d833313f8c15" 3020 dependencies = [ 3021 "base64 0.22.1", 3022 + "indexmap 2.11.4", 3023 "metrics", 3024 "metrics-util", 3025 "quanta", ··· 3081 ] 3082 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]] 3099 name = "minidom" 3100 version = "0.16.0" 3101 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 3211 ] 3212 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]] 3235 name = "native-tls" 3236 version = "0.2.14" 3237 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 3253 version = "0.1.1" 3254 source = "registry+https://github.com/rust-lang/crates.io-index" 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" 3262 3263 [[package]] 3264 name = "nom" ··· 3383 ] 3384 3385 [[package]] 3386 + name = "objc2" 3387 + version = "0.6.3" 3388 source = "registry+https://github.com/rust-lang/crates.io-index" 3389 + checksum = "b7c2599ce0ec54857b29ce62166b0ed9b4f6f1a70ccc9a71165b6154caca8c05" 3390 dependencies = [ 3391 + "objc2-encode", 3392 ] 3393 3394 [[package]] ··· 3401 ] 3402 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]] 3420 name = "objc2-io-kit" 3421 version = "0.3.2" 3422 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 3589 checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" 3590 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]] 3630 name = "pin-project" 3631 version = "1.1.10" 3632 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 3701 ] 3702 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]] 3717 name = "potential_utf" 3718 version = "0.1.3" 3719 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 3738 ] 3739 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]] 3747 name = "prettyplease" 3748 version = "0.2.37" 3749 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 3764 3765 [[package]] 3766 name = "proc-macro-error" 3767 version = "1.0.4" 3768 source = "registry+https://github.com/rust-lang/crates.io-index" 3769 checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" 3770 dependencies = [ 3771 + "proc-macro-error-attr", 3772 "proc-macro2", 3773 "quote", 3774 "syn 1.0.109", 3775 "version_check", 3776 ] 3777 ··· 3787 ] 3788 3789 [[package]] 3790 name = "proc-macro2" 3791 version = "1.0.101" 3792 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 3993 ] 3994 3995 [[package]] 3996 name = "redox_syscall" 3997 version = "0.5.18" 3998 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 4002 ] 4003 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]] 4025 name = "regex" 4026 version = "1.12.1" 4027 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 4043 "memchr", 4044 "regex-syntax", 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" 4052 4053 [[package]] 4054 name = "regex-syntax" ··· 4342 ] 4343 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]] 4375 name = "scopeguard" 4376 version = "1.2.0" 4377 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 4419 checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" 4420 dependencies = [ 4421 "bitflags", 4422 + "core-foundation 0.9.4", 4423 "core-foundation-sys", 4424 "libc", 4425 "security-framework-sys", ··· 4442 checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" 4443 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]] 4451 name = "sentry-core" 4452 version = "0.42.0" 4453 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 4523 checksum = "b2f2d7ff8a2140333718bb329f5c40fc5f0865b84c426183ce14c97d2ab8154f" 4524 dependencies = [ 4525 "form_urlencoded", 4526 + "indexmap 2.11.4", 4527 "itoa", 4528 "ryu", 4529 "serde_core", ··· 4566 ] 4567 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]] 4580 name = "serde_urlencoded" 4581 version = "0.7.1" 4582 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 4589 ] 4590 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]] 4623 name = "serdect" 4624 version = "0.2.0" 4625 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 4677 "async-compression", 4678 "chrono", 4679 "futures", 4680 + "jacquard", 4681 "jacquard-api", 4682 "jacquard-common", 4683 "lexicon_types_crate", ··· 4722 checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" 4723 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]] 4731 name = "sketches-ddsketch" 4732 version = "0.3.0" 4733 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 4788 ] 4789 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]] 4797 name = "spinning_top" 4798 version = "0.3.0" 4799 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 4845 "futures-util", 4846 "hashbrown 0.15.5", 4847 "hashlink", 4848 + "indexmap 2.11.4", 4849 "log", 4850 "memchr", 4851 "once_cell", ··· 5031 "ciborium", 5032 "hex_fmt", 5033 "indoc", 5034 + "proc-macro-error", 5035 "proc-macro2", 5036 "quote", 5037 "serde", ··· 5047 checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" 5048 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]] 5075 name = "stringprep" 5076 version = "0.1.5" 5077 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 5117 ] 5118 5119 [[package]] 5120 name = "sync_wrapper" 5121 version = "1.0.2" 5122 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 5157 checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" 5158 dependencies = [ 5159 "bitflags", 5160 + "core-foundation 0.9.4", 5161 "system-configuration-sys", 5162 ] 5163 ··· 5191 ] 5192 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]] 5205 name = "thiserror" 5206 version = "1.0.69" 5207 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 5407 "futures-core", 5408 "futures-io", 5409 "futures-sink", 5410 + "futures-util", 5411 "pin-project-lite", 5412 "tokio", 5413 ] ··· 5449 dependencies = [ 5450 "futures-core", 5451 "futures-util", 5452 + "indexmap 2.11.4", 5453 "pin-project-lite", 5454 "slab", 5455 "sync_wrapper", ··· 5613 ] 5614 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]] 5622 name = "try-lock" 5623 version = "0.2.5" 5624 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 5684 checksum = "e70f2a8b45122e719eb623c01822704c4e0907e7e426a05927e1a1cfff5b75d0" 5685 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]] 5693 name = "unicode-width" 5694 version = "0.1.14" 5695 source = "registry+https://github.com/rust-lang/crates.io-index" 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" 5703 5704 [[package]] 5705 name = "unsigned-varint" ··· 5730 version = "2.1.3" 5731 source = "registry+https://github.com/rust-lang/crates.io-index" 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" 5739 5740 [[package]] 5741 name = "utf8_iter" ··· 5964 5965 [[package]] 5966 name = "webbrowser" 5967 + version = "1.0.6" 5968 source = "registry+https://github.com/rust-lang/crates.io-index" 5969 + checksum = "00f1243ef785213e3a32fa0396093424a3a6ea566f9948497e5a2309261a4c97" 5970 dependencies = [ 5971 + "core-foundation 0.10.1", 5972 "jni", 5973 "log", 5974 "ndk-context", 5975 + "objc2", 5976 + "objc2-foundation", 5977 "url", 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", 5991 ] 5992 5993 [[package]] ··· 6556 version = "0.6.1" 6557 source = "registry+https://github.com/rust-lang/crates.io-index" 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 + ] 6570 6571 [[package]] 6572 name = "yansi"
+5 -5
Cargo.toml
··· 11 serde_json = "1.0" 12 thiserror = "2.0" 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" 19 apalis = { version = "0.7.3", features = ["retry", "limit", "layers", ] } 20 #Manually brought in migrations cause I was fighting them 21 apalis-sql = { version = "0.7.3", default-features = false, features = ["postgres", "tokio-comp"] }
··· 11 serde_json = "1.0" 12 thiserror = "2.0" 13 lexicon_types_crate = { path = "./lexicon_types_crate" } 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 apalis = { version = "0.7.3", features = ["retry", "limit", "layers", ] } 20 #Manually brought in migrations cause I was fighting them 21 apalis-sql = { version = "0.7.3", default-features = false, features = ["postgres", "tokio-comp"] }
+2 -2
justfile
··· 10 docker buildx build \ 11 --platform linux/arm64,linux/amd64 \ 12 --tag fatfingers23/moover_worker:latest \ 13 - --tag fatfingers23/moover_worker:0.0.2 \ 14 --file Dockerfiles/worker.Dockerfile \ 15 --push . 16 #cron worker ··· 27 --tag fatfingers23/moover_ui:latest \ 28 --tag fatfingers23/moover_ui:0.0.4 \ 29 --file Dockerfiles/web-ui.Dockerfile \ 30 - --push .
··· 10 docker buildx build \ 11 --platform linux/arm64,linux/amd64 \ 12 --tag fatfingers23/moover_worker:latest \ 13 + --tag fatfingers23/moover_worker:0.0.3 \ 14 --file Dockerfiles/worker.Dockerfile \ 15 --push . 16 #cron worker ··· 27 --tag fatfingers23/moover_ui:latest \ 28 --tag fatfingers23/moover_ui:0.0.4 \ 29 --file Dockerfiles/web-ui.Dockerfile \ 30 + --push .
+1
shared/Cargo.toml
··· 23 tokio-util.workspace = true 24 rust-s3.workspace = true 25 jacquard-api.workspace = true
··· 23 tokio-util.workspace = true 24 rust-s3.workspace = true 25 jacquard-api.workspace = true 26 + jacquard.workspace = true
+135 -6
shared/src/jobs/scheduled_back_up_start.rs
··· 1 use crate::jobs::account_backup::AccountBackupJobContext; 2 use crate::jobs::{account_backup, pds_backup, push_job_json}; 3 use apalis::prelude::{Data, Error}; 4 use serde::{Deserialize, Serialize}; 5 use sqlx::{Pool, Postgres}; 6 use std::sync::Arc; ··· 10 #[derive(Debug, Deserialize, Serialize, Clone)] 11 pub struct ScheduledBackUpStartJobContext; 12 13 /// This scheduled job finds: 14 - /// - accounts that have not been backed up in the last 6 hours and have pds_sign_up = false, 15 /// 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 17 /// pds_hosts.last_backup_start), and enqueues PdsBackup jobs for each. 18 pub async fn scheduled_back_up_start_job( 19 _job: ScheduledBackUpStartJobContext, ··· 33 SELECT did, pds_host 34 FROM accounts 35 WHERE pds_sign_up = FALSE 36 - AND (last_backup IS NULL OR last_backup < NOW() - INTERVAL '6 HOURS') 37 "#, 38 ) 39 .fetch_all(&*pool) 40 .await 41 .map_err(|e| Error::Failed(Arc::new(Box::new(e))))?; 42 43 for (did, pds_host) in accounts { 44 let ctx = AccountBackupJobContext { 45 did, 46 - pds_host, 47 - rev: None, 48 }; 49 push_job_json(&pool, account_backup::JOB_NAMESPACE, &ctx).await?; 50 } 51 ··· 56 SELECT pds_host 57 FROM pds_hosts 58 WHERE active = TRUE 59 - AND (last_backup_start IS NULL OR last_backup_start < NOW() - INTERVAL '6 HOURS') 60 "#, 61 ) 62 .fetch_all(&*pool)
··· 1 use crate::jobs::account_backup::AccountBackupJobContext; 2 use crate::jobs::{account_backup, pds_backup, push_job_json}; 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}; 7 use serde::{Deserialize, Serialize}; 8 use sqlx::{Pool, Postgres}; 9 use std::sync::Arc; ··· 13 #[derive(Debug, Deserialize, Serialize, Clone)] 14 pub struct ScheduledBackUpStartJobContext; 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 + 62 /// This scheduled job finds: 63 + /// - accounts that have not been backed up in the last 2 hours and have pds_sign_up = false, 64 /// and enqueues AccountBackup jobs for them; 65 + /// - pds_hosts that are active and have not started a backup in the last 2 hours (tracked via 66 /// pds_hosts.last_backup_start), and enqueues PdsBackup jobs for each. 67 pub async fn scheduled_back_up_start_job( 68 _job: ScheduledBackUpStartJobContext, ··· 82 SELECT did, pds_host 83 FROM accounts 84 WHERE pds_sign_up = FALSE 85 + AND (last_backup IS NULL OR last_backup < NOW() - INTERVAL '2 HOURS') 86 "#, 87 ) 88 .fetch_all(&*pool) 89 .await 90 .map_err(|e| Error::Failed(Arc::new(Box::new(e))))?; 91 92 + //TODO maybe check here? 93 + let agent = BasicClient::unauthenticated(); 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 + 172 let ctx = AccountBackupJobContext { 173 did, 174 + pds_host: pds_host_to_call, 175 + rev: rev_string, 176 }; 177 + 178 push_job_json(&pool, account_backup::JOB_NAMESPACE, &ctx).await?; 179 } 180 ··· 185 SELECT pds_host 186 FROM pds_hosts 187 WHERE active = TRUE 188 + AND (last_backup_start IS NULL OR last_backup_start < NOW() - INTERVAL '2 HOURS') 189 "#, 190 ) 191 .fetch_all(&*pool)
+1
shared/src/jobs/upload_blob.rs
··· 67 BlobType::Repo(rev) => { 68 let current_rev = match rev { 69 None => { 70 let url = format!( 71 "https://{}/xrpc/com.atproto.sync.getRepoStatus?did={}", 72 pds_host, did,
··· 67 BlobType::Repo(rev) => { 68 let current_rev = match rev { 69 None => { 70 + //todo Prob just always pass in a rev? induivial uplaods do this anyhow 71 let url = format!( 72 "https://{}/xrpc/com.atproto.sync.getRepoStatus?did={}", 73 pds_host, did,
+2 -1
web-ui/package.json
··· 38 }, 39 "optionalDependencies": { 40 "@rollup/rollup-linux-x64-musl": "^4.52.5" 41 - } 42 }
··· 38 }, 39 "optionalDependencies": { 40 "@rollup/rollup-linux-x64-musl": "^4.52.5" 41 + }, 42 + "packageManager": "pnpm@10.28.1+sha512.7d7dbbca9e99447b7c3bf7a73286afaaf6be99251eb9498baefa7d406892f67b879adb3a1d7e687fc4ccc1a388c7175fbaae567a26ab44d1067b54fcb0d6a316" 43 }
+1 -1
web-ui/src/routes/backups/SignUpForm.svelte
··· 136 <h2>No backup repository found</h2> 137 <p style="text-align: left;"> 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 140 called an <a 141 target="_blank" 142 rel="noopener noreferrer"
··· 136 <h2>No backup repository found</h2> 137 <p style="text-align: left;"> 138 Sign up now to backup your AT Protocol account. PDS MOOver automatically backups your posts, 139 + likes, media, and all account data every 2 hours. This is stored on our servers in something 140 called an <a 141 target="_blank" 142 rel="noopener noreferrer"
+1 -1
web-ui/src/routes/info/+page.svelte
··· 78 <p>PDS MOOver now supports backups. These are automated backups of your account saving your repo 79 (posts,likes,etc), and your blobs(picture/videos) from your AT Proto account to a cloud base object 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 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 your account. It is highly recommended to do this if you do not already have one. This is the only way 84 you can recover your account in the event of a PDS failure or rogue account takeover</p>
··· 78 <p>PDS MOOver now supports backups. These are automated backups of your account saving your repo 79 (posts,likes,etc), and your blobs(picture/videos) from your AT Proto account to a cloud base object 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 2 hours from the time you sign up. We are expecting to lower 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 your account. It is highly recommended to do this if you do not already have one. This is the only way 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