Unfollow tool for Bluesky

apply ratelimit fix

Changed files
+208 -203
src
+5 -5
package.json
··· 9 9 "serve": "vite preview" 10 10 }, 11 11 "devDependencies": { 12 - "@atcute/bluesky": "^1.0.8", 13 - "@types/node": "^22.9.1", 12 + "@atcute/bluesky": "^1.0.9", 13 + "@types/node": "^22.9.3", 14 14 "prettier": "^3.3.3", 15 15 "prettier-plugin-tailwindcss": "^0.6.9", 16 - "typescript": "^5.6.3", 16 + "typescript": "^5.7.2", 17 17 "unocss": "^0.64.1", 18 18 "vite": "^5.4.11", 19 19 "vite-plugin-solid": "^2.10.2" 20 20 }, 21 21 "dependencies": { 22 - "@atcute/client": "^2.0.4", 23 - "@atcute/oauth-browser-client": "^1.0.5", 22 + "@atcute/client": "^2.0.6", 23 + "@atcute/oauth-browser-client": "^1.0.6", 24 24 "solid-js": "^1.9.3" 25 25 }, 26 26 "packageManager": "pnpm@9.12.2+sha512.22721b3a11f81661ae1ec68ce1a7b879425a1ca5b991c975b074ac220b187ce56c708fe5db69f4c962c989452eee76c82877f4ee80f474cebd61ee13461b6228"
+146 -146
pnpm-lock.yaml
··· 9 9 .: 10 10 dependencies: 11 11 '@atcute/client': 12 - specifier: ^2.0.4 13 - version: 2.0.4 12 + specifier: ^2.0.6 13 + version: 2.0.6 14 14 '@atcute/oauth-browser-client': 15 - specifier: ^1.0.5 16 - version: 1.0.5 15 + specifier: ^1.0.6 16 + version: 1.0.6 17 17 solid-js: 18 18 specifier: ^1.9.3 19 19 version: 1.9.3 20 20 devDependencies: 21 21 '@atcute/bluesky': 22 - specifier: ^1.0.8 23 - version: 1.0.8(@atcute/client@2.0.4) 22 + specifier: ^1.0.9 23 + version: 1.0.9(@atcute/client@2.0.6) 24 24 '@types/node': 25 - specifier: ^22.9.1 26 - version: 22.9.1 25 + specifier: ^22.9.3 26 + version: 22.9.3 27 27 prettier: 28 28 specifier: ^3.3.3 29 29 version: 3.3.3 ··· 31 31 specifier: ^0.6.9 32 32 version: 0.6.9(prettier@3.3.3) 33 33 typescript: 34 - specifier: ^5.6.3 35 - version: 5.6.3 34 + specifier: ^5.7.2 35 + version: 5.7.2 36 36 unocss: 37 37 specifier: ^0.64.1 38 - version: 0.64.1(postcss@8.4.49)(rollup@4.27.3)(vite@5.4.11(@types/node@22.9.1))(vue@3.5.12(typescript@5.6.3)) 38 + version: 0.64.1(postcss@8.4.49)(rollup@4.27.4)(vite@5.4.11(@types/node@22.9.3))(vue@3.5.12(typescript@5.7.2)) 39 39 vite: 40 40 specifier: ^5.4.11 41 - version: 5.4.11(@types/node@22.9.1) 41 + version: 5.4.11(@types/node@22.9.3) 42 42 vite-plugin-solid: 43 43 specifier: ^2.10.2 44 - version: 2.10.2(solid-js@1.9.3)(vite@5.4.11(@types/node@22.9.1)) 44 + version: 2.10.2(solid-js@1.9.3)(vite@5.4.11(@types/node@22.9.3)) 45 45 46 46 packages: 47 47 ··· 55 55 '@antfu/utils@0.7.10': 56 56 resolution: {integrity: sha512-+562v9k4aI80m1+VuMHehNJWLOFjBnXn3tdOitzD0il5b7smkSBal4+a3oKiQTbrwMmN/TBUMDvbdoWDehgOww==} 57 57 58 - '@atcute/bluesky@1.0.8': 59 - resolution: {integrity: sha512-XqAZHYh65ZyBBT5rRkEhP656THYaY6CE+EY0AZXkIDaXJNdIl9KINZW5dnSrVWifspJbM+gUw1QFlCv8Yrx01g==} 58 + '@atcute/bluesky@1.0.9': 59 + resolution: {integrity: sha512-06UbqlnREobZB5vVlstJXsJJVNBPr/RhauVVWQk9k8eIfzyiV9uxklc5olv+wULld+iBL6OQItnTEyZPv8QFLw==} 60 60 peerDependencies: 61 61 '@atcute/client': ^1.0.0 || ^2.0.0 62 62 63 - '@atcute/client@2.0.4': 64 - resolution: {integrity: sha512-bKA6KEOmrdhU2CDRNp13M4WyKN0EdrVLKJffzPo62ANSTMacz5hRJhmvQYwuo7BZSGIoDql4sH+QR6Xbk3DERg==} 63 + '@atcute/client@2.0.6': 64 + resolution: {integrity: sha512-mhdqEicGUx0s5HTFOLpz91rcLS9j/g63de0nmAqv7blhU3j+xBf4le54qr2YIXNfnReZI7EwLYLX/YIBez4LGA==} 65 65 66 - '@atcute/oauth-browser-client@1.0.5': 67 - resolution: {integrity: sha512-UUs2WFMh22rXOapRM848WfWtvgaxV/ji0tEupFrrBYe2i+/UlwhXcphlqdwm43LBsFtMWtV1Xsy2zmnItf0Akg==} 66 + '@atcute/oauth-browser-client@1.0.6': 67 + resolution: {integrity: sha512-O9M7YdpPTWdXfqqdGNlYFmyMwbTEwHvMz5Ew79ASiQFsrcAdFhdVywe/rMDT6jd2La6gQDhyhfLofUPMCRiDGQ==} 68 68 69 69 '@babel/code-frame@7.26.2': 70 70 resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} ··· 461 461 rollup: 462 462 optional: true 463 463 464 - '@rollup/rollup-android-arm-eabi@4.27.3': 465 - resolution: {integrity: sha512-EzxVSkIvCFxUd4Mgm4xR9YXrcp976qVaHnqom/Tgm+vU79k4vV4eYTjmRvGfeoW8m9LVcsAy/lGjcgVegKEhLQ==} 464 + '@rollup/rollup-android-arm-eabi@4.27.4': 465 + resolution: {integrity: sha512-2Y3JT6f5MrQkICUyRVCw4oa0sutfAsgaSsb0Lmmy1Wi2y7X5vT9Euqw4gOsCyy0YfKURBg35nhUKZS4mDcfULw==} 466 466 cpu: [arm] 467 467 os: [android] 468 468 469 - '@rollup/rollup-android-arm64@4.27.3': 470 - resolution: {integrity: sha512-LJc5pDf1wjlt9o/Giaw9Ofl+k/vLUaYsE2zeQGH85giX2F+wn/Cg8b3c5CDP3qmVmeO5NzwVUzQQxwZvC2eQKw==} 469 + '@rollup/rollup-android-arm64@4.27.4': 470 + resolution: {integrity: sha512-wzKRQXISyi9UdCVRqEd0H4cMpzvHYt1f/C3CoIjES6cG++RHKhrBj2+29nPF0IB5kpy9MS71vs07fvrNGAl/iA==} 471 471 cpu: [arm64] 472 472 os: [android] 473 473 474 - '@rollup/rollup-darwin-arm64@4.27.3': 475 - resolution: {integrity: sha512-OuRysZ1Mt7wpWJ+aYKblVbJWtVn3Cy52h8nLuNSzTqSesYw1EuN6wKp5NW/4eSre3mp12gqFRXOKTcN3AI3LqA==} 474 + '@rollup/rollup-darwin-arm64@4.27.4': 475 + resolution: {integrity: sha512-PlNiRQapift4LNS8DPUHuDX/IdXiLjf8mc5vdEmUR0fF/pyy2qWwzdLjB+iZquGr8LuN4LnUoSEvKRwjSVYz3Q==} 476 476 cpu: [arm64] 477 477 os: [darwin] 478 478 479 - '@rollup/rollup-darwin-x64@4.27.3': 480 - resolution: {integrity: sha512-xW//zjJMlJs2sOrCmXdB4d0uiilZsOdlGQIC/jjmMWT47lkLLoB1nsNhPUcnoqyi5YR6I4h+FjBpILxbEy8JRg==} 479 + '@rollup/rollup-darwin-x64@4.27.4': 480 + resolution: {integrity: sha512-o9bH2dbdgBDJaXWJCDTNDYa171ACUdzpxSZt+u/AAeQ20Nk5x+IhA+zsGmrQtpkLiumRJEYef68gcpn2ooXhSQ==} 481 481 cpu: [x64] 482 482 os: [darwin] 483 483 484 - '@rollup/rollup-freebsd-arm64@4.27.3': 485 - resolution: {integrity: sha512-58E0tIcwZ+12nK1WiLzHOD8I0d0kdrY/+o7yFVPRHuVGY3twBwzwDdTIBGRxLmyjciMYl1B/U515GJy+yn46qw==} 484 + '@rollup/rollup-freebsd-arm64@4.27.4': 485 + resolution: {integrity: sha512-NBI2/i2hT9Q+HySSHTBh52da7isru4aAAo6qC3I7QFVsuhxi2gM8t/EI9EVcILiHLj1vfi+VGGPaLOUENn7pmw==} 486 486 cpu: [arm64] 487 487 os: [freebsd] 488 488 489 - '@rollup/rollup-freebsd-x64@4.27.3': 490 - resolution: {integrity: sha512-78fohrpcVwTLxg1ZzBMlwEimoAJmY6B+5TsyAZ3Vok7YabRBUvjYTsRXPTjGEvv/mfgVBepbW28OlMEz4w8wGA==} 489 + '@rollup/rollup-freebsd-x64@4.27.4': 490 + resolution: {integrity: sha512-wYcC5ycW2zvqtDYrE7deary2P2UFmSh85PUpAx+dwTCO9uw3sgzD6Gv9n5X4vLaQKsrfTSZZ7Z7uynQozPVvWA==} 491 491 cpu: [x64] 492 492 os: [freebsd] 493 493 494 - '@rollup/rollup-linux-arm-gnueabihf@4.27.3': 495 - resolution: {integrity: sha512-h2Ay79YFXyQi+QZKo3ISZDyKaVD7uUvukEHTOft7kh00WF9mxAaxZsNs3o/eukbeKuH35jBvQqrT61fzKfAB/Q==} 494 + '@rollup/rollup-linux-arm-gnueabihf@4.27.4': 495 + resolution: {integrity: sha512-9OwUnK/xKw6DyRlgx8UizeqRFOfi9mf5TYCw1uolDaJSbUmBxP85DE6T4ouCMoN6pXw8ZoTeZCSEfSaYo+/s1w==} 496 496 cpu: [arm] 497 497 os: [linux] 498 498 499 - '@rollup/rollup-linux-arm-musleabihf@4.27.3': 500 - resolution: {integrity: sha512-Sv2GWmrJfRY57urktVLQ0VKZjNZGogVtASAgosDZ1aUB+ykPxSi3X1nWORL5Jk0sTIIwQiPH7iE3BMi9zGWfkg==} 499 + '@rollup/rollup-linux-arm-musleabihf@4.27.4': 500 + resolution: {integrity: sha512-Vgdo4fpuphS9V24WOV+KwkCVJ72u7idTgQaBoLRD0UxBAWTF9GWurJO9YD9yh00BzbkhpeXtm6na+MvJU7Z73A==} 501 501 cpu: [arm] 502 502 os: [linux] 503 503 504 - '@rollup/rollup-linux-arm64-gnu@4.27.3': 505 - resolution: {integrity: sha512-FPoJBLsPW2bDNWjSrwNuTPUt30VnfM8GPGRoLCYKZpPx0xiIEdFip3dH6CqgoT0RnoGXptaNziM0WlKgBc+OWQ==} 504 + '@rollup/rollup-linux-arm64-gnu@4.27.4': 505 + resolution: {integrity: sha512-pleyNgyd1kkBkw2kOqlBx+0atfIIkkExOTiifoODo6qKDSpnc6WzUY5RhHdmTdIJXBdSnh6JknnYTtmQyobrVg==} 506 506 cpu: [arm64] 507 507 os: [linux] 508 508 509 - '@rollup/rollup-linux-arm64-musl@4.27.3': 510 - resolution: {integrity: sha512-TKxiOvBorYq4sUpA0JT+Fkh+l+G9DScnG5Dqx7wiiqVMiRSkzTclP35pE6eQQYjP4Gc8yEkJGea6rz4qyWhp3g==} 509 + '@rollup/rollup-linux-arm64-musl@4.27.4': 510 + resolution: {integrity: sha512-caluiUXvUuVyCHr5DxL8ohaaFFzPGmgmMvwmqAITMpV/Q+tPoaHZ/PWa3t8B2WyoRcIIuu1hkaW5KkeTDNSnMA==} 511 511 cpu: [arm64] 512 512 os: [linux] 513 513 514 - '@rollup/rollup-linux-powerpc64le-gnu@4.27.3': 515 - resolution: {integrity: sha512-v2M/mPvVUKVOKITa0oCFksnQQ/TqGrT+yD0184/cWHIu0LoIuYHwox0Pm3ccXEz8cEQDLk6FPKd1CCm+PlsISw==} 514 + '@rollup/rollup-linux-powerpc64le-gnu@4.27.4': 515 + resolution: {integrity: sha512-FScrpHrO60hARyHh7s1zHE97u0KlT/RECzCKAdmI+LEoC1eDh/RDji9JgFqyO+wPDb86Oa/sXkily1+oi4FzJQ==} 516 516 cpu: [ppc64] 517 517 os: [linux] 518 518 519 - '@rollup/rollup-linux-riscv64-gnu@4.27.3': 520 - resolution: {integrity: sha512-LdrI4Yocb1a/tFVkzmOE5WyYRgEBOyEhWYJe4gsDWDiwnjYKjNs7PS6SGlTDB7maOHF4kxevsuNBl2iOcj3b4A==} 519 + '@rollup/rollup-linux-riscv64-gnu@4.27.4': 520 + resolution: {integrity: sha512-qyyprhyGb7+RBfMPeww9FlHwKkCXdKHeGgSqmIXw9VSUtvyFZ6WZRtnxgbuz76FK7LyoN8t/eINRbPUcvXB5fw==} 521 521 cpu: [riscv64] 522 522 os: [linux] 523 523 524 - '@rollup/rollup-linux-s390x-gnu@4.27.3': 525 - resolution: {integrity: sha512-d4wVu6SXij/jyiwPvI6C4KxdGzuZOvJ6y9VfrcleHTwo68fl8vZC5ZYHsCVPUi4tndCfMlFniWgwonQ5CUpQcA==} 524 + '@rollup/rollup-linux-s390x-gnu@4.27.4': 525 + resolution: {integrity: sha512-PFz+y2kb6tbh7m3A7nA9++eInGcDVZUACulf/KzDtovvdTizHpZaJty7Gp0lFwSQcrnebHOqxF1MaKZd7psVRg==} 526 526 cpu: [s390x] 527 527 os: [linux] 528 528 529 - '@rollup/rollup-linux-x64-gnu@4.27.3': 530 - resolution: {integrity: sha512-/6bn6pp1fsCGEY5n3yajmzZQAh+mW4QPItbiWxs69zskBzJuheb3tNynEjL+mKOsUSFK11X4LYF2BwwXnzWleA==} 529 + '@rollup/rollup-linux-x64-gnu@4.27.4': 530 + resolution: {integrity: sha512-Ni8mMtfo+o/G7DVtweXXV/Ol2TFf63KYjTtoZ5f078AUgJTmaIJnj4JFU7TK/9SVWTaSJGxPi5zMDgK4w+Ez7Q==} 531 531 cpu: [x64] 532 532 os: [linux] 533 533 534 - '@rollup/rollup-linux-x64-musl@4.27.3': 535 - resolution: {integrity: sha512-nBXOfJds8OzUT1qUreT/en3eyOXd2EH5b0wr2bVB5999qHdGKkzGzIyKYaKj02lXk6wpN71ltLIaQpu58YFBoQ==} 534 + '@rollup/rollup-linux-x64-musl@4.27.4': 535 + resolution: {integrity: sha512-5AeeAF1PB9TUzD+3cROzFTnAJAcVUGLuR8ng0E0WXGkYhp6RD6L+6szYVX+64Rs0r72019KHZS1ka1q+zU/wUw==} 536 536 cpu: [x64] 537 537 os: [linux] 538 538 539 - '@rollup/rollup-win32-arm64-msvc@4.27.3': 540 - resolution: {integrity: sha512-ogfbEVQgIZOz5WPWXF2HVb6En+kWzScuxJo/WdQTqEgeyGkaa2ui5sQav9Zkr7bnNCLK48uxmmK0TySm22eiuw==} 539 + '@rollup/rollup-win32-arm64-msvc@4.27.4': 540 + resolution: {integrity: sha512-yOpVsA4K5qVwu2CaS3hHxluWIK5HQTjNV4tWjQXluMiiiu4pJj4BN98CvxohNCpcjMeTXk/ZMJBRbgRg8HBB6A==} 541 541 cpu: [arm64] 542 542 os: [win32] 543 543 544 - '@rollup/rollup-win32-ia32-msvc@4.27.3': 545 - resolution: {integrity: sha512-ecE36ZBMLINqiTtSNQ1vzWc5pXLQHlf/oqGp/bSbi7iedcjcNb6QbCBNG73Euyy2C+l/fn8qKWEwxr+0SSfs3w==} 544 + '@rollup/rollup-win32-ia32-msvc@4.27.4': 545 + resolution: {integrity: sha512-KtwEJOaHAVJlxV92rNYiG9JQwQAdhBlrjNRp7P9L8Cb4Rer3in+0A+IPhJC9y68WAi9H0sX4AiG2NTsVlmqJeQ==} 546 546 cpu: [ia32] 547 547 os: [win32] 548 548 549 - '@rollup/rollup-win32-x64-msvc@4.27.3': 550 - resolution: {integrity: sha512-vliZLrDmYKyaUoMzEbMTg2JkerfBjn03KmAw9CykO0Zzkzoyd7o3iZNam/TpyWNjNT+Cz2iO3P9Smv2wgrR+Eg==} 549 + '@rollup/rollup-win32-x64-msvc@4.27.4': 550 + resolution: {integrity: sha512-3j4jx1TppORdTAoBJRd+/wJRGCPC0ETWkXOecJ6PPZLj6SptXkrXcNqdj0oclbKML6FkQltdz7bBA3rUSirZug==} 551 551 cpu: [x64] 552 552 os: [win32] 553 553 ··· 566 566 '@types/estree@1.0.6': 567 567 resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} 568 568 569 - '@types/node@22.9.1': 570 - resolution: {integrity: sha512-p8Yy/8sw1caA8CdRIQBG5tiLHmxtQKObCijiAa9Ez+d4+PRffM4054xbju0msf+cvhJpnFEeNjxmVT/0ipktrg==} 569 + '@types/node@22.9.3': 570 + resolution: {integrity: sha512-F3u1fs/fce3FFk+DAxbxc78DF8x0cY09RRL8GnXLmkJ1jvx3TtPdWoTT5/NiYfI5ASqXBmfqJi9dZ3gxMx4lzw==} 571 571 572 572 '@unocss/astro@0.64.1': 573 573 resolution: {integrity: sha512-UBB2nDc3aqBmdcgJHOsnAQaQnbdch4f3CKfV+LTv77D4tPizagUCODwPVTK3CA3leQzVbbUV06uHfo5hsv2PUw==} ··· 720 720 resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} 721 721 engines: {node: '>=8'} 722 722 723 - caniuse-lite@1.0.30001680: 724 - resolution: {integrity: sha512-rPQy70G6AGUMnbwS1z6Xg+RkHYPAi18ihs47GH0jcxIG7wArmPgY3XbS2sRdBbxJljp3thdT8BIqv9ccCypiPA==} 723 + caniuse-lite@1.0.30001683: 724 + resolution: {integrity: sha512-iqmNnThZ0n70mNwvxpEC2nBJ037ZHZUoBI5Gorh1Mw6IlEAZujEoU1tXA628iZfzm7R9FvFzxbfdgml82a3k8Q==} 725 725 726 726 chokidar@3.6.0: 727 727 resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} ··· 765 765 duplexer@0.1.2: 766 766 resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} 767 767 768 - electron-to-chromium@1.5.63: 769 - resolution: {integrity: sha512-ddeXKuY9BHo/mw145axlyWjlJ1UBt4WK3AlvkT7W2AbqfRQoacVoRUCF6wL3uIx/8wT9oLKXzI+rFqHHscByaA==} 768 + electron-to-chromium@1.5.64: 769 + resolution: {integrity: sha512-IXEuxU+5ClW2IGEYFC2T7szbyVgehupCWQe5GNh+H065CD6U6IFN0s4KeAMFGNmQolRU4IV7zGBWSYMmZ8uuqQ==} 770 770 771 771 entities@4.5.0: 772 772 resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} ··· 1026 1026 resolve-pkg-maps@1.0.0: 1027 1027 resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} 1028 1028 1029 - rollup@4.27.3: 1030 - resolution: {integrity: sha512-SLsCOnlmGt9VoZ9Ek8yBK8tAdmPHeppkw+Xa7yDlCEhDTvwYei03JlWo1fdc7YTfLZ4tD8riJCUyAgTbszk1fQ==} 1029 + rollup@4.27.4: 1030 + resolution: {integrity: sha512-RLKxqHEMjh/RGLsDxAEsaLO3mWgyoU6x9w6n1ikAzet4B3gI2/3yP6PWY2p9QzRTh6MfEIXB3MwsOY0Iv3vNrw==} 1031 1031 engines: {node: '>=18.0.0', npm: '>=8.0.0'} 1032 1032 hasBin: true 1033 1033 ··· 1081 1081 engines: {node: '>=18.0.0'} 1082 1082 hasBin: true 1083 1083 1084 - typescript@5.6.3: 1085 - resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==} 1084 + typescript@5.7.2: 1085 + resolution: {integrity: sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==} 1086 1086 engines: {node: '>=14.17'} 1087 1087 hasBin: true 1088 1088 ··· 1195 1195 1196 1196 '@antfu/utils@0.7.10': {} 1197 1197 1198 - '@atcute/bluesky@1.0.8(@atcute/client@2.0.4)': 1198 + '@atcute/bluesky@1.0.9(@atcute/client@2.0.6)': 1199 1199 dependencies: 1200 - '@atcute/client': 2.0.4 1200 + '@atcute/client': 2.0.6 1201 1201 1202 - '@atcute/client@2.0.4': {} 1202 + '@atcute/client@2.0.6': {} 1203 1203 1204 - '@atcute/oauth-browser-client@1.0.5': 1204 + '@atcute/oauth-browser-client@1.0.6': 1205 1205 dependencies: 1206 - '@atcute/client': 2.0.4 1206 + '@atcute/client': 2.0.6 1207 1207 nanoid: 5.0.8 1208 1208 1209 1209 '@babel/code-frame@7.26.2': ··· 1489 1489 1490 1490 '@polka/url@1.0.0-next.28': {} 1491 1491 1492 - '@rollup/pluginutils@5.1.3(rollup@4.27.3)': 1492 + '@rollup/pluginutils@5.1.3(rollup@4.27.4)': 1493 1493 dependencies: 1494 1494 '@types/estree': 1.0.6 1495 1495 estree-walker: 2.0.2 1496 1496 picomatch: 4.0.2 1497 1497 optionalDependencies: 1498 - rollup: 4.27.3 1498 + rollup: 4.27.4 1499 1499 1500 - '@rollup/rollup-android-arm-eabi@4.27.3': 1500 + '@rollup/rollup-android-arm-eabi@4.27.4': 1501 1501 optional: true 1502 1502 1503 - '@rollup/rollup-android-arm64@4.27.3': 1503 + '@rollup/rollup-android-arm64@4.27.4': 1504 1504 optional: true 1505 1505 1506 - '@rollup/rollup-darwin-arm64@4.27.3': 1506 + '@rollup/rollup-darwin-arm64@4.27.4': 1507 1507 optional: true 1508 1508 1509 - '@rollup/rollup-darwin-x64@4.27.3': 1509 + '@rollup/rollup-darwin-x64@4.27.4': 1510 1510 optional: true 1511 1511 1512 - '@rollup/rollup-freebsd-arm64@4.27.3': 1512 + '@rollup/rollup-freebsd-arm64@4.27.4': 1513 1513 optional: true 1514 1514 1515 - '@rollup/rollup-freebsd-x64@4.27.3': 1515 + '@rollup/rollup-freebsd-x64@4.27.4': 1516 1516 optional: true 1517 1517 1518 - '@rollup/rollup-linux-arm-gnueabihf@4.27.3': 1518 + '@rollup/rollup-linux-arm-gnueabihf@4.27.4': 1519 1519 optional: true 1520 1520 1521 - '@rollup/rollup-linux-arm-musleabihf@4.27.3': 1521 + '@rollup/rollup-linux-arm-musleabihf@4.27.4': 1522 1522 optional: true 1523 1523 1524 - '@rollup/rollup-linux-arm64-gnu@4.27.3': 1524 + '@rollup/rollup-linux-arm64-gnu@4.27.4': 1525 1525 optional: true 1526 1526 1527 - '@rollup/rollup-linux-arm64-musl@4.27.3': 1527 + '@rollup/rollup-linux-arm64-musl@4.27.4': 1528 1528 optional: true 1529 1529 1530 - '@rollup/rollup-linux-powerpc64le-gnu@4.27.3': 1530 + '@rollup/rollup-linux-powerpc64le-gnu@4.27.4': 1531 1531 optional: true 1532 1532 1533 - '@rollup/rollup-linux-riscv64-gnu@4.27.3': 1533 + '@rollup/rollup-linux-riscv64-gnu@4.27.4': 1534 1534 optional: true 1535 1535 1536 - '@rollup/rollup-linux-s390x-gnu@4.27.3': 1536 + '@rollup/rollup-linux-s390x-gnu@4.27.4': 1537 1537 optional: true 1538 1538 1539 - '@rollup/rollup-linux-x64-gnu@4.27.3': 1539 + '@rollup/rollup-linux-x64-gnu@4.27.4': 1540 1540 optional: true 1541 1541 1542 - '@rollup/rollup-linux-x64-musl@4.27.3': 1542 + '@rollup/rollup-linux-x64-musl@4.27.4': 1543 1543 optional: true 1544 1544 1545 - '@rollup/rollup-win32-arm64-msvc@4.27.3': 1545 + '@rollup/rollup-win32-arm64-msvc@4.27.4': 1546 1546 optional: true 1547 1547 1548 - '@rollup/rollup-win32-ia32-msvc@4.27.3': 1548 + '@rollup/rollup-win32-ia32-msvc@4.27.4': 1549 1549 optional: true 1550 1550 1551 - '@rollup/rollup-win32-x64-msvc@4.27.3': 1551 + '@rollup/rollup-win32-x64-msvc@4.27.4': 1552 1552 optional: true 1553 1553 1554 1554 '@types/babel__core@7.20.5': ··· 1574 1574 1575 1575 '@types/estree@1.0.6': {} 1576 1576 1577 - '@types/node@22.9.1': 1577 + '@types/node@22.9.3': 1578 1578 dependencies: 1579 1579 undici-types: 6.19.8 1580 1580 1581 - '@unocss/astro@0.64.1(rollup@4.27.3)(vite@5.4.11(@types/node@22.9.1))(vue@3.5.12(typescript@5.6.3))': 1581 + '@unocss/astro@0.64.1(rollup@4.27.4)(vite@5.4.11(@types/node@22.9.3))(vue@3.5.12(typescript@5.7.2))': 1582 1582 dependencies: 1583 1583 '@unocss/core': 0.64.1 1584 1584 '@unocss/reset': 0.64.1 1585 - '@unocss/vite': 0.64.1(rollup@4.27.3)(vite@5.4.11(@types/node@22.9.1))(vue@3.5.12(typescript@5.6.3)) 1585 + '@unocss/vite': 0.64.1(rollup@4.27.4)(vite@5.4.11(@types/node@22.9.3))(vue@3.5.12(typescript@5.7.2)) 1586 1586 optionalDependencies: 1587 - vite: 5.4.11(@types/node@22.9.1) 1587 + vite: 5.4.11(@types/node@22.9.3) 1588 1588 transitivePeerDependencies: 1589 1589 - rollup 1590 1590 - supports-color 1591 1591 - vue 1592 1592 1593 - '@unocss/cli@0.64.1(rollup@4.27.3)': 1593 + '@unocss/cli@0.64.1(rollup@4.27.4)': 1594 1594 dependencies: 1595 1595 '@ampproject/remapping': 2.3.0 1596 - '@rollup/pluginutils': 5.1.3(rollup@4.27.3) 1596 + '@rollup/pluginutils': 5.1.3(rollup@4.27.4) 1597 1597 '@unocss/config': 0.64.1 1598 1598 '@unocss/core': 0.64.1 1599 1599 '@unocss/preset-uno': 0.64.1 ··· 1622 1622 dependencies: 1623 1623 '@unocss/core': 0.64.1 1624 1624 1625 - '@unocss/inspector@0.64.1(vue@3.5.12(typescript@5.6.3))': 1625 + '@unocss/inspector@0.64.1(vue@3.5.12(typescript@5.7.2))': 1626 1626 dependencies: 1627 1627 '@unocss/core': 0.64.1 1628 1628 '@unocss/rule-utils': 0.64.1 1629 1629 gzip-size: 6.0.0 1630 1630 sirv: 2.0.4 1631 - vue-flow-layout: 0.1.1(vue@3.5.12(typescript@5.6.3)) 1631 + vue-flow-layout: 0.1.1(vue@3.5.12(typescript@5.7.2)) 1632 1632 transitivePeerDependencies: 1633 1633 - vue 1634 1634 ··· 1713 1713 dependencies: 1714 1714 '@unocss/core': 0.64.1 1715 1715 1716 - '@unocss/vite@0.64.1(rollup@4.27.3)(vite@5.4.11(@types/node@22.9.1))(vue@3.5.12(typescript@5.6.3))': 1716 + '@unocss/vite@0.64.1(rollup@4.27.4)(vite@5.4.11(@types/node@22.9.3))(vue@3.5.12(typescript@5.7.2))': 1717 1717 dependencies: 1718 1718 '@ampproject/remapping': 2.3.0 1719 - '@rollup/pluginutils': 5.1.3(rollup@4.27.3) 1719 + '@rollup/pluginutils': 5.1.3(rollup@4.27.4) 1720 1720 '@unocss/config': 0.64.1 1721 1721 '@unocss/core': 0.64.1 1722 - '@unocss/inspector': 0.64.1(vue@3.5.12(typescript@5.6.3)) 1722 + '@unocss/inspector': 0.64.1(vue@3.5.12(typescript@5.7.2)) 1723 1723 chokidar: 3.6.0 1724 1724 magic-string: 0.30.13 1725 1725 tinyglobby: 0.2.10 1726 - vite: 5.4.11(@types/node@22.9.1) 1726 + vite: 5.4.11(@types/node@22.9.3) 1727 1727 transitivePeerDependencies: 1728 1728 - rollup 1729 1729 - supports-color ··· 1775 1775 '@vue/shared': 3.5.12 1776 1776 csstype: 3.1.3 1777 1777 1778 - '@vue/server-renderer@3.5.12(vue@3.5.12(typescript@5.6.3))': 1778 + '@vue/server-renderer@3.5.12(vue@3.5.12(typescript@5.7.2))': 1779 1779 dependencies: 1780 1780 '@vue/compiler-ssr': 3.5.12 1781 1781 '@vue/shared': 3.5.12 1782 - vue: 3.5.12(typescript@5.6.3) 1782 + vue: 3.5.12(typescript@5.7.2) 1783 1783 1784 1784 '@vue/shared@3.5.12': {} 1785 1785 ··· 1813 1813 1814 1814 browserslist@4.24.2: 1815 1815 dependencies: 1816 - caniuse-lite: 1.0.30001680 1817 - electron-to-chromium: 1.5.63 1816 + caniuse-lite: 1.0.30001683 1817 + electron-to-chromium: 1.5.64 1818 1818 node-releases: 2.0.18 1819 1819 update-browserslist-db: 1.1.1(browserslist@4.24.2) 1820 1820 ··· 1825 1825 1826 1826 cac@6.7.14: {} 1827 1827 1828 - caniuse-lite@1.0.30001680: {} 1828 + caniuse-lite@1.0.30001683: {} 1829 1829 1830 1830 chokidar@3.6.0: 1831 1831 dependencies: ··· 1864 1864 1865 1865 duplexer@0.1.2: {} 1866 1866 1867 - electron-to-chromium@1.5.63: {} 1867 + electron-to-chromium@1.5.64: {} 1868 1868 1869 1869 entities@4.5.0: {} 1870 1870 ··· 2080 2080 2081 2081 resolve-pkg-maps@1.0.0: {} 2082 2082 2083 - rollup@4.27.3: 2083 + rollup@4.27.4: 2084 2084 dependencies: 2085 2085 '@types/estree': 1.0.6 2086 2086 optionalDependencies: 2087 - '@rollup/rollup-android-arm-eabi': 4.27.3 2088 - '@rollup/rollup-android-arm64': 4.27.3 2089 - '@rollup/rollup-darwin-arm64': 4.27.3 2090 - '@rollup/rollup-darwin-x64': 4.27.3 2091 - '@rollup/rollup-freebsd-arm64': 4.27.3 2092 - '@rollup/rollup-freebsd-x64': 4.27.3 2093 - '@rollup/rollup-linux-arm-gnueabihf': 4.27.3 2094 - '@rollup/rollup-linux-arm-musleabihf': 4.27.3 2095 - '@rollup/rollup-linux-arm64-gnu': 4.27.3 2096 - '@rollup/rollup-linux-arm64-musl': 4.27.3 2097 - '@rollup/rollup-linux-powerpc64le-gnu': 4.27.3 2098 - '@rollup/rollup-linux-riscv64-gnu': 4.27.3 2099 - '@rollup/rollup-linux-s390x-gnu': 4.27.3 2100 - '@rollup/rollup-linux-x64-gnu': 4.27.3 2101 - '@rollup/rollup-linux-x64-musl': 4.27.3 2102 - '@rollup/rollup-win32-arm64-msvc': 4.27.3 2103 - '@rollup/rollup-win32-ia32-msvc': 4.27.3 2104 - '@rollup/rollup-win32-x64-msvc': 4.27.3 2087 + '@rollup/rollup-android-arm-eabi': 4.27.4 2088 + '@rollup/rollup-android-arm64': 4.27.4 2089 + '@rollup/rollup-darwin-arm64': 4.27.4 2090 + '@rollup/rollup-darwin-x64': 4.27.4 2091 + '@rollup/rollup-freebsd-arm64': 4.27.4 2092 + '@rollup/rollup-freebsd-x64': 4.27.4 2093 + '@rollup/rollup-linux-arm-gnueabihf': 4.27.4 2094 + '@rollup/rollup-linux-arm-musleabihf': 4.27.4 2095 + '@rollup/rollup-linux-arm64-gnu': 4.27.4 2096 + '@rollup/rollup-linux-arm64-musl': 4.27.4 2097 + '@rollup/rollup-linux-powerpc64le-gnu': 4.27.4 2098 + '@rollup/rollup-linux-riscv64-gnu': 4.27.4 2099 + '@rollup/rollup-linux-s390x-gnu': 4.27.4 2100 + '@rollup/rollup-linux-x64-gnu': 4.27.4 2101 + '@rollup/rollup-linux-x64-musl': 4.27.4 2102 + '@rollup/rollup-win32-arm64-msvc': 4.27.4 2103 + '@rollup/rollup-win32-ia32-msvc': 4.27.4 2104 + '@rollup/rollup-win32-x64-msvc': 4.27.4 2105 2105 fsevents: 2.3.3 2106 2106 2107 2107 semver@6.3.1: {} ··· 2155 2155 optionalDependencies: 2156 2156 fsevents: 2.3.3 2157 2157 2158 - typescript@5.6.3: {} 2158 + typescript@5.7.2: {} 2159 2159 2160 2160 ufo@1.5.4: {} 2161 2161 ··· 2169 2169 2170 2170 undici-types@6.19.8: {} 2171 2171 2172 - unocss@0.64.1(postcss@8.4.49)(rollup@4.27.3)(vite@5.4.11(@types/node@22.9.1))(vue@3.5.12(typescript@5.6.3)): 2172 + unocss@0.64.1(postcss@8.4.49)(rollup@4.27.4)(vite@5.4.11(@types/node@22.9.3))(vue@3.5.12(typescript@5.7.2)): 2173 2173 dependencies: 2174 - '@unocss/astro': 0.64.1(rollup@4.27.3)(vite@5.4.11(@types/node@22.9.1))(vue@3.5.12(typescript@5.6.3)) 2175 - '@unocss/cli': 0.64.1(rollup@4.27.3) 2174 + '@unocss/astro': 0.64.1(rollup@4.27.4)(vite@5.4.11(@types/node@22.9.3))(vue@3.5.12(typescript@5.7.2)) 2175 + '@unocss/cli': 0.64.1(rollup@4.27.4) 2176 2176 '@unocss/core': 0.64.1 2177 2177 '@unocss/postcss': 0.64.1(postcss@8.4.49) 2178 2178 '@unocss/preset-attributify': 0.64.1 ··· 2187 2187 '@unocss/transformer-compile-class': 0.64.1 2188 2188 '@unocss/transformer-directives': 0.64.1 2189 2189 '@unocss/transformer-variant-group': 0.64.1 2190 - '@unocss/vite': 0.64.1(rollup@4.27.3)(vite@5.4.11(@types/node@22.9.1))(vue@3.5.12(typescript@5.6.3)) 2190 + '@unocss/vite': 0.64.1(rollup@4.27.4)(vite@5.4.11(@types/node@22.9.3))(vue@3.5.12(typescript@5.7.2)) 2191 2191 optionalDependencies: 2192 - vite: 5.4.11(@types/node@22.9.1) 2192 + vite: 5.4.11(@types/node@22.9.3) 2193 2193 transitivePeerDependencies: 2194 2194 - postcss 2195 2195 - rollup ··· 2204 2204 2205 2205 validate-html-nesting@1.2.2: {} 2206 2206 2207 - vite-plugin-solid@2.10.2(solid-js@1.9.3)(vite@5.4.11(@types/node@22.9.1)): 2207 + vite-plugin-solid@2.10.2(solid-js@1.9.3)(vite@5.4.11(@types/node@22.9.3)): 2208 2208 dependencies: 2209 2209 '@babel/core': 7.26.0 2210 2210 '@types/babel__core': 7.20.5 ··· 2212 2212 merge-anything: 5.1.7 2213 2213 solid-js: 1.9.3 2214 2214 solid-refresh: 0.6.3(solid-js@1.9.3) 2215 - vite: 5.4.11(@types/node@22.9.1) 2216 - vitefu: 0.2.5(vite@5.4.11(@types/node@22.9.1)) 2215 + vite: 5.4.11(@types/node@22.9.3) 2216 + vitefu: 0.2.5(vite@5.4.11(@types/node@22.9.3)) 2217 2217 transitivePeerDependencies: 2218 2218 - supports-color 2219 2219 2220 - vite@5.4.11(@types/node@22.9.1): 2220 + vite@5.4.11(@types/node@22.9.3): 2221 2221 dependencies: 2222 2222 esbuild: 0.21.5 2223 2223 postcss: 8.4.49 2224 - rollup: 4.27.3 2224 + rollup: 4.27.4 2225 2225 optionalDependencies: 2226 - '@types/node': 22.9.1 2226 + '@types/node': 22.9.3 2227 2227 fsevents: 2.3.3 2228 2228 2229 - vitefu@0.2.5(vite@5.4.11(@types/node@22.9.1)): 2229 + vitefu@0.2.5(vite@5.4.11(@types/node@22.9.3)): 2230 2230 optionalDependencies: 2231 - vite: 5.4.11(@types/node@22.9.1) 2231 + vite: 5.4.11(@types/node@22.9.3) 2232 2232 2233 - vue-flow-layout@0.1.1(vue@3.5.12(typescript@5.6.3)): 2233 + vue-flow-layout@0.1.1(vue@3.5.12(typescript@5.7.2)): 2234 2234 dependencies: 2235 - vue: 3.5.12(typescript@5.6.3) 2235 + vue: 3.5.12(typescript@5.7.2) 2236 2236 2237 - vue@3.5.12(typescript@5.6.3): 2237 + vue@3.5.12(typescript@5.7.2): 2238 2238 dependencies: 2239 2239 '@vue/compiler-dom': 3.5.12 2240 2240 '@vue/compiler-sfc': 3.5.12 2241 2241 '@vue/runtime-dom': 3.5.12 2242 - '@vue/server-renderer': 3.5.12(vue@3.5.12(typescript@5.6.3)) 2242 + '@vue/server-renderer': 3.5.12(vue@3.5.12(typescript@5.7.2)) 2243 2243 '@vue/shared': 3.5.12 2244 2244 optionalDependencies: 2245 - typescript: 5.6.3 2245 + typescript: 5.7.2 2246 2246 2247 2247 yallist@3.1.1: {}
+57 -52
src/App.tsx
··· 211 211 212 212 let res = await fetchPage(); 213 213 let follows = res.data.records; 214 + setNotice(`Fetching follows: ${follows.length}`); 214 215 215 216 while (res.data.cursor && res.data.records.length >= PAGE_LIMIT) { 217 + setNotice(`Fetching follows: ${follows.length}`); 216 218 res = await fetchPage(res.data.cursor); 217 219 follows = follows.concat(res.data.records); 218 220 } ··· 221 223 }; 222 224 223 225 setProgress(0); 224 - setNotice(""); 225 - 226 226 const follows = await fetchFollows(); 227 227 setFollowCount(follows.length); 228 228 const tmpFollows: FollowRecord[] = []; 229 + setNotice(""); 229 230 230 - follows.forEach(async (record) => { 231 - let status: RepoStatus | undefined = undefined; 232 - const follow = record.value as AppBskyGraphFollow.Record; 233 - let handle = ""; 231 + const timer = (ms: number) => new Promise((res) => setTimeout(res, ms)); 232 + for (let i = 0; i < follows.length; i = i + 10) { 233 + if (follows.length > 1000) await timer(1000); 234 + follows.slice(i, i + 10).forEach(async (record) => { 235 + let status: RepoStatus | undefined = undefined; 236 + const follow = record.value as AppBskyGraphFollow.Record; 237 + let handle = ""; 234 238 235 - try { 236 - const res = await rpc.get("app.bsky.actor.getProfile", { 237 - params: { actor: follow.subject }, 238 - }); 239 + try { 240 + const res = await rpc.get("app.bsky.actor.getProfile", { 241 + params: { actor: follow.subject }, 242 + }); 239 243 240 - handle = res.data.handle; 241 - const viewer = res.data.viewer!; 244 + handle = res.data.handle; 245 + const viewer = res.data.viewer!; 246 + 247 + if (viewer.blockedBy) { 248 + status = 249 + viewer.blocking || viewer.blockingByList ? 250 + RepoStatus.BLOCKEDBY | RepoStatus.BLOCKING 251 + : RepoStatus.BLOCKEDBY; 252 + } else if (res.data.did.includes(agent.sub)) { 253 + status = RepoStatus.YOURSELF; 254 + } else if (viewer.blocking || viewer.blockingByList) { 255 + status = RepoStatus.BLOCKING; 256 + } 257 + } catch (e: any) { 258 + handle = await resolveDid(follow.subject); 242 259 243 - if (viewer.blockedBy) { 244 260 status = 245 - viewer.blocking || viewer.blockingByList ? 246 - RepoStatus.BLOCKEDBY | RepoStatus.BLOCKING 247 - : RepoStatus.BLOCKEDBY; 248 - } else if (res.data.did.includes(agent.sub)) { 249 - status = RepoStatus.YOURSELF; 250 - } else if (viewer.blocking || viewer.blockingByList) { 251 - status = RepoStatus.BLOCKING; 261 + e.message.includes("not found") ? RepoStatus.DELETED 262 + : e.message.includes("deactivated") ? RepoStatus.DEACTIVATED 263 + : e.message.includes("suspended") ? RepoStatus.SUSPENDED 264 + : undefined; 252 265 } 253 - } catch (e: any) { 254 - handle = await resolveDid(follow.subject); 255 266 256 - status = 257 - e.message.includes("not found") ? RepoStatus.DELETED 258 - : e.message.includes("deactivated") ? RepoStatus.DEACTIVATED 259 - : e.message.includes("suspended") ? RepoStatus.SUSPENDED 260 - : undefined; 261 - } 267 + const status_label = 268 + status == RepoStatus.DELETED ? "Deleted" 269 + : status == RepoStatus.DEACTIVATED ? "Deactivated" 270 + : status == RepoStatus.SUSPENDED ? "Suspended" 271 + : status == RepoStatus.YOURSELF ? "Literally Yourself" 272 + : status == RepoStatus.BLOCKING ? "Blocking" 273 + : status == RepoStatus.BLOCKEDBY ? "Blocked by" 274 + : RepoStatus.BLOCKEDBY | RepoStatus.BLOCKING ? "Mutual Block" 275 + : ""; 262 276 263 - const status_label = 264 - status == RepoStatus.DELETED ? "Deleted" 265 - : status == RepoStatus.DEACTIVATED ? "Deactivated" 266 - : status == RepoStatus.SUSPENDED ? "Suspended" 267 - : status == RepoStatus.YOURSELF ? "Literally Yourself" 268 - : status == RepoStatus.BLOCKING ? "Blocking" 269 - : status == RepoStatus.BLOCKEDBY ? "Blocked by" 270 - : RepoStatus.BLOCKEDBY | RepoStatus.BLOCKING ? "Mutual Block" 271 - : ""; 272 - 273 - if (status !== undefined) { 274 - tmpFollows.push({ 275 - did: follow.subject, 276 - handle: handle, 277 - uri: record.uri, 278 - status: status, 279 - status_label: status_label, 280 - toDelete: false, 281 - visible: true, 282 - }); 283 - } 284 - setProgress(progress() + 1); 285 - if (progress() == followCount()) setFollowRecords(tmpFollows); 286 - }); 277 + if (status !== undefined) { 278 + tmpFollows.push({ 279 + did: follow.subject, 280 + handle: handle, 281 + uri: record.uri, 282 + status: status, 283 + status_label: status_label, 284 + toDelete: false, 285 + visible: true, 286 + }); 287 + } 288 + setProgress(progress() + 1); 289 + if (progress() == followCount()) setFollowRecords(tmpFollows); 290 + }); 291 + } 287 292 }; 288 293 289 294 const unfollow = async () => {