Script that has 50% chance of unfollowing a non-mutual

Initial commit

modamo 65c56bb6

+1
.gitignore
··· 1 + node_modules/
index.ts

This is a binary file and will not be displayed.

+348
package-lock.json
··· 1 + { 2 + "name": "thanossnap", 3 + "version": "1.0.0", 4 + "lockfileVersion": 3, 5 + "requires": true, 6 + "packages": { 7 + "": { 8 + "name": "thanossnap", 9 + "version": "1.0.0", 10 + "license": "ISC", 11 + "dependencies": { 12 + "@atproto/api": "^0.17.7" 13 + }, 14 + "devDependencies": { 15 + "ts-node": "^10.9.2", 16 + "typescript": "^5.9.3" 17 + } 18 + }, 19 + "node_modules/@atproto/api": { 20 + "version": "0.17.7", 21 + "resolved": "https://registry.npmjs.org/@atproto/api/-/api-0.17.7.tgz", 22 + "integrity": "sha512-V+OJBZq9chcrD21xk1bUa6oc5DSKfQj5DmUPf5rmZncqL1w9ZEbS38H5cMyqqdhfgo2LWeDRdZHD0rvNyJsIaw==", 23 + "license": "MIT", 24 + "dependencies": { 25 + "@atproto/common-web": "^0.4.3", 26 + "@atproto/lexicon": "^0.5.1", 27 + "@atproto/syntax": "^0.4.1", 28 + "@atproto/xrpc": "^0.7.5", 29 + "await-lock": "^2.2.2", 30 + "multiformats": "^9.9.0", 31 + "tlds": "^1.234.0", 32 + "zod": "^3.23.8" 33 + } 34 + }, 35 + "node_modules/@atproto/common-web": { 36 + "version": "0.4.3", 37 + "resolved": "https://registry.npmjs.org/@atproto/common-web/-/common-web-0.4.3.tgz", 38 + "integrity": "sha512-nRDINmSe4VycJzPo6fP/hEltBcULFxt9Kw7fQk6405FyAWZiTluYHlXOnU7GkQfeUK44OENG1qFTBcmCJ7e8pg==", 39 + "license": "MIT", 40 + "dependencies": { 41 + "graphemer": "^1.4.0", 42 + "multiformats": "^9.9.0", 43 + "uint8arrays": "3.0.0", 44 + "zod": "^3.23.8" 45 + } 46 + }, 47 + "node_modules/@atproto/lexicon": { 48 + "version": "0.5.1", 49 + "resolved": "https://registry.npmjs.org/@atproto/lexicon/-/lexicon-0.5.1.tgz", 50 + "integrity": "sha512-y8AEtYmfgVl4fqFxqXAeGvhesiGkxiy3CWoJIfsFDDdTlZUC8DFnZrYhcqkIop3OlCkkljvpSJi1hbeC1tbi8A==", 51 + "license": "MIT", 52 + "dependencies": { 53 + "@atproto/common-web": "^0.4.3", 54 + "@atproto/syntax": "^0.4.1", 55 + "iso-datestring-validator": "^2.2.2", 56 + "multiformats": "^9.9.0", 57 + "zod": "^3.23.8" 58 + } 59 + }, 60 + "node_modules/@atproto/syntax": { 61 + "version": "0.4.1", 62 + "resolved": "https://registry.npmjs.org/@atproto/syntax/-/syntax-0.4.1.tgz", 63 + "integrity": "sha512-CJdImtLAiFO+0z3BWTtxwk6aY5w4t8orHTMVJgkf++QRJWTxPbIFko/0hrkADB7n2EruDxDSeAgfUGehpH6ngw==", 64 + "license": "MIT" 65 + }, 66 + "node_modules/@atproto/xrpc": { 67 + "version": "0.7.5", 68 + "resolved": "https://registry.npmjs.org/@atproto/xrpc/-/xrpc-0.7.5.tgz", 69 + "integrity": "sha512-MUYNn5d2hv8yVegRL0ccHvTHAVj5JSnW07bkbiaz96UH45lvYNRVwt44z+yYVnb0/mvBzyD3/ZQ55TRGt7fHkA==", 70 + "license": "MIT", 71 + "dependencies": { 72 + "@atproto/lexicon": "^0.5.1", 73 + "zod": "^3.23.8" 74 + } 75 + }, 76 + "node_modules/@cspotcode/source-map-support": { 77 + "version": "0.8.1", 78 + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", 79 + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", 80 + "dev": true, 81 + "license": "MIT", 82 + "dependencies": { 83 + "@jridgewell/trace-mapping": "0.3.9" 84 + }, 85 + "engines": { 86 + "node": ">=12" 87 + } 88 + }, 89 + "node_modules/@jridgewell/resolve-uri": { 90 + "version": "3.1.2", 91 + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", 92 + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", 93 + "dev": true, 94 + "license": "MIT", 95 + "engines": { 96 + "node": ">=6.0.0" 97 + } 98 + }, 99 + "node_modules/@jridgewell/sourcemap-codec": { 100 + "version": "1.5.5", 101 + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", 102 + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", 103 + "dev": true, 104 + "license": "MIT" 105 + }, 106 + "node_modules/@jridgewell/trace-mapping": { 107 + "version": "0.3.9", 108 + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", 109 + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", 110 + "dev": true, 111 + "license": "MIT", 112 + "dependencies": { 113 + "@jridgewell/resolve-uri": "^3.0.3", 114 + "@jridgewell/sourcemap-codec": "^1.4.10" 115 + } 116 + }, 117 + "node_modules/@tsconfig/node10": { 118 + "version": "1.0.11", 119 + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", 120 + "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", 121 + "dev": true, 122 + "license": "MIT" 123 + }, 124 + "node_modules/@tsconfig/node12": { 125 + "version": "1.0.11", 126 + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", 127 + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", 128 + "dev": true, 129 + "license": "MIT" 130 + }, 131 + "node_modules/@tsconfig/node14": { 132 + "version": "1.0.3", 133 + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", 134 + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", 135 + "dev": true, 136 + "license": "MIT" 137 + }, 138 + "node_modules/@tsconfig/node16": { 139 + "version": "1.0.4", 140 + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", 141 + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", 142 + "dev": true, 143 + "license": "MIT" 144 + }, 145 + "node_modules/@types/node": { 146 + "version": "24.9.2", 147 + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.9.2.tgz", 148 + "integrity": "sha512-uWN8YqxXxqFMX2RqGOrumsKeti4LlmIMIyV0lgut4jx7KQBcBiW6vkDtIBvHnHIquwNfJhk8v2OtmO8zXWHfPA==", 149 + "dev": true, 150 + "license": "MIT", 151 + "peer": true, 152 + "dependencies": { 153 + "undici-types": "~7.16.0" 154 + } 155 + }, 156 + "node_modules/acorn": { 157 + "version": "8.15.0", 158 + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", 159 + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", 160 + "dev": true, 161 + "license": "MIT", 162 + "bin": { 163 + "acorn": "bin/acorn" 164 + }, 165 + "engines": { 166 + "node": ">=0.4.0" 167 + } 168 + }, 169 + "node_modules/acorn-walk": { 170 + "version": "8.3.4", 171 + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", 172 + "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", 173 + "dev": true, 174 + "license": "MIT", 175 + "dependencies": { 176 + "acorn": "^8.11.0" 177 + }, 178 + "engines": { 179 + "node": ">=0.4.0" 180 + } 181 + }, 182 + "node_modules/arg": { 183 + "version": "4.1.3", 184 + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", 185 + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", 186 + "dev": true, 187 + "license": "MIT" 188 + }, 189 + "node_modules/await-lock": { 190 + "version": "2.2.2", 191 + "resolved": "https://registry.npmjs.org/await-lock/-/await-lock-2.2.2.tgz", 192 + "integrity": "sha512-aDczADvlvTGajTDjcjpJMqRkOF6Qdz3YbPZm/PyW6tKPkx2hlYBzxMhEywM/tU72HrVZjgl5VCdRuMlA7pZ8Gw==", 193 + "license": "MIT" 194 + }, 195 + "node_modules/create-require": { 196 + "version": "1.1.1", 197 + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", 198 + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", 199 + "dev": true, 200 + "license": "MIT" 201 + }, 202 + "node_modules/diff": { 203 + "version": "4.0.2", 204 + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", 205 + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", 206 + "dev": true, 207 + "license": "BSD-3-Clause", 208 + "engines": { 209 + "node": ">=0.3.1" 210 + } 211 + }, 212 + "node_modules/graphemer": { 213 + "version": "1.4.0", 214 + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", 215 + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", 216 + "license": "MIT" 217 + }, 218 + "node_modules/iso-datestring-validator": { 219 + "version": "2.2.2", 220 + "resolved": "https://registry.npmjs.org/iso-datestring-validator/-/iso-datestring-validator-2.2.2.tgz", 221 + "integrity": "sha512-yLEMkBbLZTlVQqOnQ4FiMujR6T4DEcCb1xizmvXS+OxuhwcbtynoosRzdMA69zZCShCNAbi+gJ71FxZBBXx1SA==", 222 + "license": "MIT" 223 + }, 224 + "node_modules/make-error": { 225 + "version": "1.3.6", 226 + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", 227 + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", 228 + "dev": true, 229 + "license": "ISC" 230 + }, 231 + "node_modules/multiformats": { 232 + "version": "9.9.0", 233 + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.9.0.tgz", 234 + "integrity": "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==", 235 + "license": "(Apache-2.0 AND MIT)" 236 + }, 237 + "node_modules/tlds": { 238 + "version": "1.261.0", 239 + "resolved": "https://registry.npmjs.org/tlds/-/tlds-1.261.0.tgz", 240 + "integrity": "sha512-QXqwfEl9ddlGBaRFXIvNKK6OhipSiLXuRuLJX5DErz0o0Q0rYxulWLdFryTkV5PkdZct5iMInwYEGe/eR++1AA==", 241 + "license": "MIT", 242 + "bin": { 243 + "tlds": "bin.js" 244 + } 245 + }, 246 + "node_modules/ts-node": { 247 + "version": "10.9.2", 248 + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", 249 + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", 250 + "dev": true, 251 + "license": "MIT", 252 + "dependencies": { 253 + "@cspotcode/source-map-support": "^0.8.0", 254 + "@tsconfig/node10": "^1.0.7", 255 + "@tsconfig/node12": "^1.0.7", 256 + "@tsconfig/node14": "^1.0.0", 257 + "@tsconfig/node16": "^1.0.2", 258 + "acorn": "^8.4.1", 259 + "acorn-walk": "^8.1.1", 260 + "arg": "^4.1.0", 261 + "create-require": "^1.1.0", 262 + "diff": "^4.0.1", 263 + "make-error": "^1.1.1", 264 + "v8-compile-cache-lib": "^3.0.1", 265 + "yn": "3.1.1" 266 + }, 267 + "bin": { 268 + "ts-node": "dist/bin.js", 269 + "ts-node-cwd": "dist/bin-cwd.js", 270 + "ts-node-esm": "dist/bin-esm.js", 271 + "ts-node-script": "dist/bin-script.js", 272 + "ts-node-transpile-only": "dist/bin-transpile.js", 273 + "ts-script": "dist/bin-script-deprecated.js" 274 + }, 275 + "peerDependencies": { 276 + "@swc/core": ">=1.2.50", 277 + "@swc/wasm": ">=1.2.50", 278 + "@types/node": "*", 279 + "typescript": ">=2.7" 280 + }, 281 + "peerDependenciesMeta": { 282 + "@swc/core": { 283 + "optional": true 284 + }, 285 + "@swc/wasm": { 286 + "optional": true 287 + } 288 + } 289 + }, 290 + "node_modules/typescript": { 291 + "version": "5.9.3", 292 + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", 293 + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", 294 + "dev": true, 295 + "license": "Apache-2.0", 296 + "bin": { 297 + "tsc": "bin/tsc", 298 + "tsserver": "bin/tsserver" 299 + }, 300 + "engines": { 301 + "node": ">=14.17" 302 + } 303 + }, 304 + "node_modules/uint8arrays": { 305 + "version": "3.0.0", 306 + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-3.0.0.tgz", 307 + "integrity": "sha512-HRCx0q6O9Bfbp+HHSfQQKD7wU70+lydKVt4EghkdOvlK/NlrF90z+eXV34mUd48rNvVJXwkrMSPpCATkct8fJA==", 308 + "license": "MIT", 309 + "dependencies": { 310 + "multiformats": "^9.4.2" 311 + } 312 + }, 313 + "node_modules/undici-types": { 314 + "version": "7.16.0", 315 + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", 316 + "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", 317 + "dev": true, 318 + "license": "MIT", 319 + "peer": true 320 + }, 321 + "node_modules/v8-compile-cache-lib": { 322 + "version": "3.0.1", 323 + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", 324 + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", 325 + "dev": true, 326 + "license": "MIT" 327 + }, 328 + "node_modules/yn": { 329 + "version": "3.1.1", 330 + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", 331 + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", 332 + "dev": true, 333 + "license": "MIT", 334 + "engines": { 335 + "node": ">=6" 336 + } 337 + }, 338 + "node_modules/zod": { 339 + "version": "3.25.76", 340 + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", 341 + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", 342 + "license": "MIT", 343 + "funding": { 344 + "url": "https://github.com/sponsors/colinhacks" 345 + } 346 + } 347 + } 348 + }
+23
package.json
··· 1 + { 2 + "name": "thanossnap", 3 + "version": "1.0.0", 4 + "description": "", 5 + "repository": { 6 + "type": "git", 7 + "url": "git@tangled.sh:modamo.xyz/thanosSnap" 8 + }, 9 + "license": "ISC", 10 + "author": "", 11 + "type": "commonjs", 12 + "main": "index.ts", 13 + "scripts": { 14 + "test": "echo \"Error: no test specified\" && exit 1" 15 + }, 16 + "dependencies": { 17 + "@atproto/api": "^0.17.7" 18 + }, 19 + "devDependencies": { 20 + "ts-node": "^10.9.2", 21 + "typescript": "^5.9.3" 22 + } 23 + }
+44
tsconfig.json
··· 1 + { 2 + // Visit https://aka.ms/tsconfig to read more about this file 3 + "compilerOptions": { 4 + // File Layout 5 + // "rootDir": "./src", 6 + // "outDir": "./dist", 7 + 8 + // Environment Settings 9 + // See also https://aka.ms/tsconfig/module 10 + "module": "nodenext", 11 + "target": "esnext", 12 + "types": [], 13 + // For nodejs: 14 + // "lib": ["esnext"], 15 + // "types": ["node"], 16 + // and npm install -D @types/node 17 + 18 + // Other Outputs 19 + "sourceMap": true, 20 + "declaration": true, 21 + "declarationMap": true, 22 + 23 + // Stricter Typechecking Options 24 + "noUncheckedIndexedAccess": true, 25 + "exactOptionalPropertyTypes": true, 26 + 27 + // Style Options 28 + // "noImplicitReturns": true, 29 + // "noImplicitOverride": true, 30 + // "noUnusedLocals": true, 31 + // "noUnusedParameters": true, 32 + // "noFallthroughCasesInSwitch": true, 33 + // "noPropertyAccessFromIndexSignature": true, 34 + 35 + // Recommended Options 36 + "strict": true, 37 + "jsx": "react-jsx", 38 + "verbatimModuleSyntax": true, 39 + "isolatedModules": true, 40 + "noUncheckedSideEffectImports": true, 41 + "moduleDetection": "force", 42 + "skipLibCheck": true, 43 + } 44 + }