{"_id":"spooder","_rev":"127-78efd0efc15504f32b20ad73d190beb0","name":"spooder","dist-tags":{"latest":"6.2.12"},"versions":{"2.0.1":{"name":"spooder","version":"2.0.1","_id":"spooder@2.0.1","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"dist":{"shasum":"fe44f331e09d673e6212f59c1259a6a5574eff93","tarball":"https://registry.npmjs.org/spooder/-/spooder-2.0.1.tgz","fileCount":7,"integrity":"sha512-5zf2doqPr3bc5vlLZdS6aZE0c9Jodc2UwuoaW2yDw0NJCb53YpL5/JoTAbh6YJ5L6TAv9qVuz0nquj1JeqfXBQ==","signatures":[{"sig":"MEYCIQCjoCo5M1OpyDuuzljTnJor0lOmFrO+rXDIyDfOB0nI4gIhAIEMffyTx0SHdUFsORyUX9y4xioszDT5E9Twzy4eC9cw","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":4276,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkUmJbACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmro+g/+Pi41w3NdCu5JoiQzjhnCm4c6ggnqyqbi84DNdzL7Bj7N0Qmw\r\nt1IQ8S9DhMR7u6BAjDV450geLq4ImkkfXFy/5DrKuu5+YWLaKAMh3bVd1BO5\r\nzoqE8b5pgtGI6mUFZ0wyUttBqFwjZG0CuzqXRbdk3k6WPKf6brEwHgjm6r02\r\nIwlnJ6f8Yg0Jyp83sfqL71//L8W82O9K+gOjJeRkGgwP4ItsSqXJQXRZZ3n9\r\nf27XJIZ8MDg7zFOuEt0M/7q3yM5w7o0UIGvc4lJXsppl2znV753JWKxZgQS+\r\ndA2w0Qr7LUtbNkocSeNrT7UnufBF9XBWxfVAAeL6UxdgFs4ZYP1MTvzvh4YU\r\nzcCXpv1Ux9v6dIaV8QbsPlnMOIEpOs8bXcoL9y8+ybiy21422qHbjCZZ0Z2b\r\neyjaSfX+Ps3PdVYb4NWUDfRq7oXswzDwsV3H9DRe1f+QqZLfVDca/uXLkUaB\r\nePNlunE1WMAsrNxc3JKmdEObzqlQ5o/9ReIfmmMCHRqneqfZGDA6n1m7NKdN\r\nSLj6L84ZjzdJsGdZ0KcekEkfGPLj/XWMp/rtEKVDAIdVWMzJizld+dYUQ+nM\r\nOS99W81USRL2qsdIysZyw0H/726IKEkh7vH7eQX4lPWH/uTcWB0ikvgBgGW/\r\n0QkRUmZunI3QG/e3m08NOJ8jtu7BnF/Qhy4=\r\n=VDQb\r\n-----END PGP SIGNATURE-----\r\n"},"type":"module","module":"index.ts","exports":{"bun":"./src/api.ts"},"gitHead":"cbfeeedd64816550cfc3213292c3d70780e5d5c5","scripts":{"watcher":"bun ./src/watcher.ts"},"_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"9.6.4","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.0.0","_hasShrinkwrap":false,"devDependencies":{"bun-types":"^0.5.0"},"_npmOperationalInternal":{"tmp":"tmp/spooder_2.0.1_1683120730840_0.7346849321289284","host":"s3://npm-registry-packages"}},"2.0.2":{"name":"spooder","version":"2.0.2","_id":"spooder@2.0.2","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"dist":{"shasum":"ee08853caa5281ac579e5da3ab88e70eaa3f3e87","tarball":"https://registry.npmjs.org/spooder/-/spooder-2.0.2.tgz","fileCount":8,"integrity":"sha512-Mo6kSewZVzGWPu6gRMhH5g40RY349TW6wdKgAGM/vueMsl1U3VGqpQdHby6QRXzBLvH6xMacdu3uVkze839BTA==","signatures":[{"sig":"MEUCIHqS4ff8hqZgCXchVIEp78cqm5WwGMOc/R2mcANGocC1AiEA+/4TZ3zsz8pfNtStWTlzjobt3XxYVJ0XIk+ECUqENyM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":86011,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkUmMiACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrBeA//UVsrr6NoTH8Vs+/338kTp66Iel3H0VTKpGEAK49y3KRIzSbq\r\n05rjv9FTP88E3uYwf6QkzEu3hQQnveuhtV0CM1042yt3r/Lqc5eUHt/tfq7f\r\nu+B3ROhqOlmGG21msLy64i0c8g0Z0YJKgtZvXvS9+UH8S+lAUjwm78b7OlCw\r\nJhPog2kHipC4IaXPpTYwiNLienV4xbmk4MwPPj1Thf/1VCpZdgnsq4i6f6gg\r\ngiD4NZAswUkLLfZRPzE8A53hCfVqT7uj0XFCwMaTTNGim1EXqY4U6Fz8NVN2\r\n/3hQpByLPgmjCSMLbkeLmFSbIdDjrK2FVwunzmQcyYYhmX4gFKkg5y1u0fEV\r\ngalorTqP/oS76MqSyV1yyTqpCLeWz3knKyudasfpUd7FbwKdMOR7RKGNxXww\r\nRWQsy//nV/pxbzI9KSGM4K2Xr74yg7IGJnUNc7/8JyQ+5bBwj8tSBeZgCHrw\r\nSzUEWBN0DrxKgC0RV5/7ZQrNaA3gnDHqYTsl8ZDkkFR3rYwclDir+fbmw20q\r\nad/djzUoOfdvGksWmOtg8RpeDPR1ejR5Lzf4AUBzP8GKzb0Q5hrFxNZQCaQo\r\nqI3DLCqBORIl81JTzVpRBiIvaiSI+DAWoKFnIiwEZdw5IKXciDxuo4e0W1HF\r\nPepM24l7LTH9DiwoZZHLzunHbKGZhSt6epY=\r\n=qP28\r\n-----END PGP SIGNATURE-----\r\n"},"type":"module","module":"index.ts","exports":{"bun":"./src/api.ts"},"gitHead":"c9a50a7e3596e5b3e668b12422ac33467e3c192c","scripts":{"watcher":"bun ./src/watcher.ts"},"_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"9.6.4","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.0.0","_hasShrinkwrap":false,"devDependencies":{"bun-types":"^0.5.0"},"_npmOperationalInternal":{"tmp":"tmp/spooder_2.0.2_1683120930161_0.4968101545195074","host":"s3://npm-registry-packages"}},"2.0.3":{"name":"spooder","version":"2.0.3","_id":"spooder@2.0.3","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"dist":{"shasum":"355630b282c8d6aa8b0f3cace041cb244ee078ae","tarball":"https://registry.npmjs.org/spooder/-/spooder-2.0.3.tgz","fileCount":10,"integrity":"sha512-wyAVuLszqdnNSy3kd95a/CWLlV+eqaPxBQvcDrJwyK/Mnw3OWxuV5w6cfremIMKS85MCwv5ug3ZOFeQ/NTF3MQ==","signatures":[{"sig":"MEUCIFOeV5xIpt26Dk8B1UBOlWqi+wAUc1F5XclKcvogwKFaAiEAulm8Iylg4MlpYilxXUM+R7HX0ecAKaew9D+DUuIFi/g=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":86131,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkU7PKACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmolkw//TuL2gmptAEyCWhOkllH9TIZW1Q9/mp/v7GhGxaAkh5TyR7+o\r\nOS03Sc/cfQE3IXgcxEFtaeM/5mTWBWSJa7lpZcMvNnNXphJevlddq9ZECmEv\r\nt0nD/eDUrkHGOSHXmoqw3xrZt/0atpW3kzmoXtKGlQQy2UCSg+a8oh7x118m\r\nIpj9TwIetfOJleYD/bJaBd3X2h8uo7EJA0FENGo+RfW0ov49Bpiz6Ba/hjvl\r\ngkcCTzqjvAk8LCQN/v53faxNkKfplsJ4kmhlSHQVDYEMlTHBImerH7kctQdm\r\n1EbHU7xDZtHr5k8GSWalNKttOrSOnWaaCvwrUzwJqeQDDnTov/IT7mq29Rv2\r\nefL0fafmMP5681XdhGKQHMZgMsMP+69H1GLHuEfdnsVADEsb+0ivxvESaqus\r\n2wV/XDVXUDCJ3qU6XMrFoIagGHZ7l9F2+NBA9gvGo3kvDbB4Mtz4e7CCdGMv\r\ntGlV5pCVmOhDPYIryjh9YVES8us/xEai8v0R+g5IIQkZeSRgYXQCYSlUV9t4\r\ny3xYhIsXmpA7V3eXVcnY2SBVUTsVch2uhtHXG0ynSECAvvv+IPc2agqmcU7D\r\nzo6KthZOE49XytVY23upRnossmqS5jDgBeOTl84v2HqryKXqN1W1328hQK+z\r\nLFGbLiPYu7IBY1lNCrNry12x/Yh1DhaBr0Q=\r\n=IzJI\r\n-----END PGP SIGNATURE-----\r\n"},"type":"module","module":"index.ts","exports":{"bun":"./src/api.ts"},"gitHead":"21f921f79158e5f4fcf0619f07b4fe408e18b1a9","scripts":{"watcher":"bun ./src/watcher.ts"},"_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"9.6.4","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.0.0","_hasShrinkwrap":false,"devDependencies":{"bun-types":"^0.5.0"},"_npmOperationalInternal":{"tmp":"tmp/spooder_2.0.3_1683207114733_0.38563190613408493","host":"s3://npm-registry-packages"}},"2.0.4":{"name":"spooder","version":"2.0.4","_id":"spooder@2.0.4","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"src/watcher.ts"},"dist":{"shasum":"b980573ca915c55fff3afe228797e64838fbc902","tarball":"https://registry.npmjs.org/spooder/-/spooder-2.0.4.tgz","fileCount":10,"integrity":"sha512-uDLq84RdKnhup7uL+PJLLPkbbd4J1GMUqaWGNfyRc4sUObxQdlbHD+KVUJf/qflxsgGyCea1wWB+Nj2ngsC9tQ==","signatures":[{"sig":"MEYCIQC+J+wFNcvf9S6WxYW8WERkzMMTRW7q5SYn0KpGuBjMYAIhAKq2IlTPY+8QeHwxUd957V6Vlr3jbVB4SeXZ+rbwvdUr","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":86182,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkU7l2ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqC1g/9EjwQcZ9c93NIAy54K6BQ0xoMPLjKgCen3yYZAXB0++ACq4og\r\nSVilGz91IwA91BHI3wYAHiNv3vM4Wq00GTHzyZcQVNUqueyAoVj158bU8DQ3\r\nzBbHcc5akK5CHuz7qVjmrGFSXFVbiPeZNySxq8hPBq866jfwL6jWVbbwzUVu\r\n8Ik8VYJwW/65Pux5pH4ajxH5AkmrcbjAzxMTgY2LDHjlxbeyLHhnF3toBim5\r\n5uVzYw3uYD9inF/V5dYO/rDLDwTLfx2WxIp13drP1GqQ4E1owC2gNE9TtiS3\r\n5nxlEP9MMYtiYmQ0ILfWYfrMDK/uQ9L8mWh0ctc15GoChRWva5ScClSd5KUC\r\nYM8VF3MXMwhQnNzBydOF7mZcrn2hQ3H4/iSH4NwBfYYFN3bVYEICM3D8l69m\r\nXTq/mwv5PlEjJ2Ac2DN2novV0G/1a2vQLap4OckMW2GK6cUx06IJe6H4XWHY\r\nJOrnea7SSMFqbBvUB6LESmVAJ8FQcNy3HQk4bZUhT3reASumHFOhePaP3TGI\r\npOzAYg60eUzOjP2u566+54BWUJoynAHhb7MKYjATh+A4mFe8BHYFr3idvxFy\r\ntONudb06bhxpbAbugpGkwhCH1Kx11DhHYITB4XYlhIqQK00NMnfhkLBS4ATD\r\nz5dKACoQTaoXZxX+H5G6N8iuJIL2CDyny4I=\r\n=7ItU\r\n-----END PGP SIGNATURE-----\r\n"},"type":"module","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts"}},"gitHead":"1830b97ade985ee83c373be7493c5fa7c2190341","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"9.6.4","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.0.0","_hasShrinkwrap":false,"devDependencies":{"bun-types":"^0.5.0"},"_npmOperationalInternal":{"tmp":"tmp/spooder_2.0.4_1683208566253_0.9239089517411421","host":"s3://npm-registry-packages"}},"2.0.5":{"name":"spooder","version":"2.0.5","_id":"spooder@2.0.5","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"src/watcher.ts"},"dist":{"shasum":"d8526f9eec94a34e24a5918274936254c4de1b16","tarball":"https://registry.npmjs.org/spooder/-/spooder-2.0.5.tgz","fileCount":10,"integrity":"sha512-URYpp+IcyBK3XINHupZPCqPnDAfY+wMoQcrczSxp8mTKNlj+R+o/FxjVBQzGQhk09fMyk1K2WO2e4Qc6soJhXg==","signatures":[{"sig":"MEQCIFPYs86QvV3uXfgTRjvzMA9HaGZOVmkSdgRAVe9y8FD3AiA+lxccPq+rvN5sjhJtY5B75XBFo6osF4UG9que/sYM7Q==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":86182},"type":"module","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts"}},"gitHead":"ff73709c0a86fdfbad61597d11a6f4bf6b48bd64","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"9.6.4","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.1.0","_hasShrinkwrap":false,"devDependencies":{"bun-types":"^0.5.0"},"_npmOperationalInternal":{"tmp":"tmp/spooder_2.0.5_1683306007669_0.4409145531472194","host":"s3://npm-registry-packages"}},"2.0.6":{"name":"spooder","version":"2.0.6","_id":"spooder@2.0.6","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"src/instance.ts","spooder-update":"src/update.ts"},"dist":{"shasum":"98d4dadb405c1602aa8e412a789b4b13defc7145","tarball":"https://registry.npmjs.org/spooder/-/spooder-2.0.6.tgz","fileCount":12,"integrity":"sha512-6MxIMfOaW3C953E7MSKQhPL5XaWB2/DLCCmFPcP1SP/W4dsawxDGmvBegg2F8ga62T9jregdGMHhsv29H5eVBg==","signatures":[{"sig":"MEYCIQCKlhSIsB8gbJnj35P40K0muXhAN0xLE3Bk/8l14f06hAIhAL031cne6oGQbtGAA9HlJJbI2hgJ0X4KclXX/vzM5szD","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":90396},"type":"module","gitHead":"6d6aaa9f7cd1afa07f9b0d722e627f80ab0dec02","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"9.6.4","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.1.0","dependencies":{"zod":"^3.21.4"},"_hasShrinkwrap":false,"devDependencies":{"bun-types":"^0.5.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/spooder_2.0.6_1683306286793_0.6854099214597185","host":"s3://npm-registry-packages"}},"2.0.7":{"name":"spooder","version":"2.0.7","_id":"spooder@2.0.7","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"src/instance.ts","spooder-update":"src/update.ts","spooder-heartbeat":"src/heartbeat.ts"},"dist":{"shasum":"2f621b1628d8eda92a380ba5c69d0aeb562f6365","tarball":"https://registry.npmjs.org/spooder/-/spooder-2.0.7.tgz","fileCount":12,"integrity":"sha512-M8muv/Ewy9TiDTcWtQ/lrPTu+kQ11u7XBYwLUQ0NFPkb0iqJ0R3eCTKWIAqEiooPb+xs5WtQ0ygaXB4OKXJa/w==","signatures":[{"sig":"MEUCIQCzX9EDJc5tnqhdo5uwiSmJGk5uhD5KJT7w+3KHVrwiUQIgYOexXsG/+enPaOF3HswOiZJFM3SPbbP2y4huM5ovt4M=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":90507},"type":"module","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts"}},"gitHead":"b2907a4430056369ba815087ea29394eb8d1b325","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"9.6.4","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.1.0","dependencies":{"zod":"^3.21.4"},"_hasShrinkwrap":false,"devDependencies":{"bun-types":"^0.5.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/spooder_2.0.7_1683309567236_0.35630810709170313","host":"s3://npm-registry-packages"}},"2.0.8":{"name":"spooder","version":"2.0.8","_id":"spooder@2.0.8","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"src/instance.ts","spooder-update":"src/update.ts","spooder-heartbeat":"src/heartbeat.ts"},"dist":{"shasum":"0e6e9b14a74d22589136f2f4f6f6163c537751d7","tarball":"https://registry.npmjs.org/spooder/-/spooder-2.0.8.tgz","fileCount":12,"integrity":"sha512-hcTCD8k85HMGax8EFGjcXwFTasxWKpchDtCxCbHxgVXtHjvKPgadrNKBWVuDWh0Xl3MUheG3BNsehIJ7qesN0Q==","signatures":[{"sig":"MEYCIQDH//sckmQhrMf+3z3dRe/1pMCimdZxGMUajtAgYAg82wIhAIMGehdL45w1pFzGXVOx+3/qH0q5VCUjRAj8eIv/OHSU","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":90422},"type":"module","gitHead":"e28b244877eda9eacdfad7d779b7b4583e489716","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"9.6.4","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.1.0","dependencies":{"zod":"^3.21.4"},"_hasShrinkwrap":false,"devDependencies":{"bun-types":"^0.5.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/spooder_2.0.8_1683309804810_0.3286160847558943","host":"s3://npm-registry-packages"}},"2.0.9":{"name":"spooder","version":"2.0.9","_id":"spooder@2.0.9","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"6f25a2a510e1a619b4537e976569d627c54dd103","tarball":"https://registry.npmjs.org/spooder/-/spooder-2.0.9.tgz","fileCount":10,"integrity":"sha512-G2CtUHUXCXPYyHx0HTB3YVAwZ4jk7e+mAYxJTZODAtTDINakvptCR3KuViSvaqf8/oMpNgUsNk/v1toyJ5WNzA==","signatures":[{"sig":"MEQCICIY75eHh71cO6gs1vucDcHelQhethl4VdWSfILswutEAiBs5DsC5psxFUBc8duQtpQIEnKRVTGxmdtPv/Aa3CV8Lw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":87740},"type":"module","module":"./src/api.ts","gitHead":"c38631829dcf8f00c3b63cfb72795f45fc7d6612","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"9.6.6","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.2.0","_hasShrinkwrap":false,"devDependencies":{"bun-types":"^0.5.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/spooder_2.0.9_1685525195167_0.4325349296957768","host":"s3://npm-registry-packages"}},"3.0.0":{"name":"spooder","version":"3.0.0","_id":"spooder@3.0.0","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"230d10056ec6d5b37effcf603e4597f3b5514950","tarball":"https://registry.npmjs.org/spooder/-/spooder-3.0.0.tgz","fileCount":10,"integrity":"sha512-8y/83FW2yr9CcIjh6a4s4+xhXkSA1+zmtxLKxHpLexnnYb+Iw3+Wa4WkDuzMVl7D/kkYmjEm7305jQ3MozDEQg==","signatures":[{"sig":"MEUCIQDxP7ffTqEyb1t9VZ2J8VcAVmE3NfhKMjAJrV+qflXRaAIgc4kAv/PEjH7WYPeVxWNhAYFQvJsKMn+iIduDwIMr/w8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":87740},"type":"module","module":"./src/api.ts","gitHead":"bd8d119fe7f725498ea22dbb36f67e4178d4bb7f","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"9.6.6","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.2.0","_hasShrinkwrap":false,"devDependencies":{"bun-types":"^0.5.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/spooder_3.0.0_1685525995619_0.5203433728750677","host":"s3://npm-registry-packages"}},"3.0.1":{"name":"spooder","version":"3.0.1","_id":"spooder@3.0.1","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"480252af954d676b0f12c3d7ddac7989ba12e157","tarball":"https://registry.npmjs.org/spooder/-/spooder-3.0.1.tgz","fileCount":10,"integrity":"sha512-FTA7qy5mgLdMyJMoRh44R3kSNviSgScB93y7qKsytsPLiifLATuJARfI0d3Ksc6X/wHjyRFQ9fMDkpX5eB3pAg==","signatures":[{"sig":"MEQCIGCmPQ9UyELdcfvvIQ+F8fGh4uW6xAe76x+IBxaFO+ZuAiBAqTe4ocAaQhYaWvH2ZyOwtVB/jkl2jLzdMduwUvFksA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":87825},"type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts"}},"gitHead":"a3b4ea536a975ebd4aaea68a718179e77e5d59ec","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"9.6.6","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.2.0","_hasShrinkwrap":false,"devDependencies":{"bun-types":"^0.5.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/spooder_3.0.1_1685526245463_0.9257577736353066","host":"s3://npm-registry-packages"}},"3.0.2":{"name":"spooder","version":"3.0.2","_id":"spooder@3.0.2","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"bun run ./src/cli.ts"},"dist":{"shasum":"1ce0c2a0a53f8260c12c0a9e418f5543989ff5b6","tarball":"https://registry.npmjs.org/spooder/-/spooder-3.0.2.tgz","fileCount":8,"integrity":"sha512-5K4ftFeelHc+FSpWT0qdsDJA0S7vs62+T428SnlPz7dA63Uk9L/af12suzE/oRQwC5erjnouuDevwlsKk9bB0g==","signatures":[{"sig":"MEQCIE4yA90Hdg0+BtZb98jvL3pk0SSJ3YNAv4BZWeSoYvPpAiBZB8n2t7QhV65XxWjUcQU21YCp9A00+FietK0NqSO6EA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":7798},"type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts"}},"gitHead":"8909d4e5fd8af58b594fc8c56c12d18355049d09","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"9.6.6","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.2.0","_hasShrinkwrap":false,"devDependencies":{"bun-types":"^0.5.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/spooder_3.0.2_1685538090927_0.29019277336048854","host":"s3://npm-registry-packages"}},"3.0.3":{"name":"spooder","version":"3.0.3","_id":"spooder@3.0.3","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"bun run ./src/cli.ts"},"dist":{"shasum":"6fa3c77272fb79ee783ff732af78d30495ef4a24","tarball":"https://registry.npmjs.org/spooder/-/spooder-3.0.3.tgz","fileCount":9,"integrity":"sha512-u8DqPMg1IfnHrwsNbyVc1goV7KrhbWiDnLUcdMhGJiC2wtE79ml4jqXnNU5TNH2zbY/FvWvxowmFpJht1m5QOw==","signatures":[{"sig":"MEQCIDr5gpGNWAzxhhmtJpbiHL67YNOtwoj773DauPneaMPIAiBAn5zwk1Flzn58cv8RPF2CK5Md6lB9HKzG0typ0avNvA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":9236},"type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts"}},"gitHead":"9de1e9e11914e28573b2812f7fd028254246616e","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"9.6.6","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.2.0","_hasShrinkwrap":false,"devDependencies":{"bun-types":"^0.5.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/spooder_3.0.3_1685539225079_0.6669883904988867","host":"s3://npm-registry-packages"}},"3.0.4":{"name":"spooder","version":"3.0.4","_id":"spooder@3.0.4","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"bun run ./src/cli.ts"},"dist":{"shasum":"a11353f0474ee32233dffd1828ee8c11d4fd07e9","tarball":"https://registry.npmjs.org/spooder/-/spooder-3.0.4.tgz","fileCount":8,"integrity":"sha512-13/P+AMME6K+kfq6MqAJKNjUBpiduawSpNdNk3ivtod0Z5OO5CChxkNTI0FEfTBg1yea2fyZ2FFYJ5npKk09vQ==","signatures":[{"sig":"MEQCIG1/XZ2i5GzmgAx6eLppj8CIvouIeMG3m2hGzvFNbkYAAiAIVrU4QANgHJWEe2XB6lKJPQokfgAfkj//NtFliu9brw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":7713},"type":"module","module":"./src/api.ts","gitHead":"d59f42b36ce2f2c4808d8ee2e792c2a4c8d961d7","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"9.6.6","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.2.0","_hasShrinkwrap":false,"devDependencies":{"bun-types":"^0.5.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/spooder_3.0.4_1685539938372_0.8368275609926599","host":"s3://npm-registry-packages"}},"3.0.5":{"name":"spooder","version":"3.0.5","_id":"spooder@3.0.5","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"cheese":"echo \"cheese\"","spooder":"bun run ./src/cli.ts"},"dist":{"shasum":"d95c4f9245b9304661970ccfa7ee0ac856b74d57","tarball":"https://registry.npmjs.org/spooder/-/spooder-3.0.5.tgz","fileCount":8,"integrity":"sha512-1hcvmM+osHhhxemjj+t44jkFs9fvbXAiAkN7EmAJCR7FIyd2IiDRnIwqDsi9TGnIqx7LZycgaoKpdTC5sONU0A==","signatures":[{"sig":"MEUCIQDjkf4U9LX+Vlj1S/3j++4TN4jubPJ5bNLovFTCO99/awIgfWt47nkHPWyq2DM1PEPtaYQYfl6euGcdtgvCgrqfBAE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":7829},"type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts"}},"gitHead":"bc115aa818a22146615ff59027530244ae9e8c3d","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"9.6.6","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.2.0","_hasShrinkwrap":false,"devDependencies":{"bun-types":"^0.5.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/spooder_3.0.5_1685540142787_0.3584634675906506","host":"s3://npm-registry-packages"}},"3.0.6":{"name":"spooder","version":"3.0.6","_id":"spooder@3.0.6","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"9024849f385355e439e4ac3a5ded38fc4c545f7f","tarball":"https://registry.npmjs.org/spooder/-/spooder-3.0.6.tgz","fileCount":8,"integrity":"sha512-01AIrWeswOzWIPOy11JDXRRslOqC/92NaKFh5xBVyqqEQRivV9elQPDJ6Poh7VBMs7gqdtN9ANWhhchwtK6sVQ==","signatures":[{"sig":"MEUCIG4ZwYhvZEeVltHSFGqbj7vt/jIZXMlZqs5V2zHTeBo/AiEA5vRNwCW2utfBlnVT3ZXIWpDISG4X/sdw7SgjsiF2+6k=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":7790},"type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts"}},"gitHead":"68edffacbf28788822c2c0c5a7632b68142b1380","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"9.6.6","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.2.0","_hasShrinkwrap":false,"devDependencies":{"bun-types":"^0.5.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/spooder_3.0.6_1685541739840_0.5672960669106866","host":"s3://npm-registry-packages"}},"3.0.7":{"name":"spooder","version":"3.0.7","_id":"spooder@3.0.7","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"77dfd70cab0f1ffa16b7f1333c6d1738998073d0","tarball":"https://registry.npmjs.org/spooder/-/spooder-3.0.7.tgz","fileCount":8,"integrity":"sha512-VyIH8ziFMe/zVWnr10T6qVuRv5bKaZUo/BPJep6uGOwiwbyEvA3wdMoRtZEKuxpAAivNyjUqN2S+A7nMCLFZxQ==","signatures":[{"sig":"MEYCIQD1xTqANVLKLykANHc02l14ChVAIgOVCQMUjS0gPceWogIhAMKJO9NQmqfGbu8YjBbEL2qnoP56R+zlOrg7ShjGb+e9","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":7828},"type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts"}},"gitHead":"0ea0b0f4b01d8bcf2c1f74ba61760e1e91d8e4d4","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"9.6.6","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.2.0","_hasShrinkwrap":false,"devDependencies":{"bun-types":"^0.5.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/spooder_3.0.7_1685542175226_0.6772351634267892","host":"s3://npm-registry-packages"}},"3.0.8":{"name":"spooder","version":"3.0.8","_id":"spooder@3.0.8","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"4b6aaeeb577369aa3f6b3034406ebfaf3e10e23a","tarball":"https://registry.npmjs.org/spooder/-/spooder-3.0.8.tgz","fileCount":8,"integrity":"sha512-S4h3nyufkRWtdvKAbR0+H+5Uni2TnRk3TGV/4wn/nkruRvql2GgT6LgV7jPm4roDn3lTTafzFK8gtNPP3jYg9g==","signatures":[{"sig":"MEQCIEZDSpCtJ1FS5BG1Q3B3hP94KE0aSqskrQmB2okglqLaAiBQPHCxnhiqe92qEJVvF42Xq0WF5hYDv0FysLDZtJWK3g==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":8447},"type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts"}},"gitHead":"769142aa3f7d3461bc9ed5a002b7ef1b07027121","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"9.6.6","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.2.0","_hasShrinkwrap":false,"devDependencies":{"bun-types":"^0.5.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/spooder_3.0.8_1685548518304_0.5126152845343108","host":"s3://npm-registry-packages"}},"3.1.0":{"name":"spooder","version":"3.1.0","_id":"spooder@3.1.0","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"4da77899d534fc71168d8a6a59160742f20656b9","tarball":"https://registry.npmjs.org/spooder/-/spooder-3.1.0.tgz","fileCount":14,"integrity":"sha512-Jj+OWPYV/26ygJovHdF/zF6bU/6UQhtbSVMBRG02yJAVgrIRmx7kHN3mHxjUoPkPEDkDKzVP2x579av3Bgv/uQ==","signatures":[{"sig":"MEYCIQDne8rwkod5avNBTzZ4E+vFrCUORa4BeM20I50NMvJS1gIhAJiDr2E8Z7vCpG9sgM5gBo/T2euK+LVdWnLf2XVVn3hH","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":28819},"type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts"}},"gitHead":"41d38adb7f637e50d7314226a4edc0a68bcc72d9","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"9.6.6","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.2.0","dependencies":{"@octokit/app":"^13.1.5"},"_hasShrinkwrap":false,"devDependencies":{"bun-types":"^0.5.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/spooder_3.1.0_1686223741903_0.39990082965998996","host":"s3://npm-registry-packages"}},"3.2.0":{"name":"spooder","version":"3.2.0","_id":"spooder@3.2.0","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"ca334f5e5ba7cf7eb34c98225ec27ff15dd01489","tarball":"https://registry.npmjs.org/spooder/-/spooder-3.2.0.tgz","fileCount":14,"integrity":"sha512-QoNTyGd/NTzJsbBf7mDtKIwp+C2YzRdt05YqywdfiFJpe5MHd7e3qYYzIv+C+xIj5idnu/5DuOnjfvQmxxtyyw==","signatures":[{"sig":"MEYCIQCXk2nsdexUCH001le+6EB/XeWjGjOCyqGaJPk4Jd8ASwIhAKTE3nA5qtMQ/M7EX9j4g1yDSBBnVDak/IMlF/NJSfyC","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":46773},"type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts"}},"gitHead":"be71dddcd57ae51ef249a4ba4d194082a960949b","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"9.6.7","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.3.1","dependencies":{"@octokit/app":"^13.1.5"},"_hasShrinkwrap":false,"devDependencies":{"bun-types":"^0.5.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/spooder_3.2.0_1688632944498_0.7468636159739097","host":"s3://npm-registry-packages"}},"3.2.1":{"name":"spooder","version":"3.2.1","_id":"spooder@3.2.1","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"886f358f16cae887eebe1a2308968655ea960e48","tarball":"https://registry.npmjs.org/spooder/-/spooder-3.2.1.tgz","fileCount":14,"integrity":"sha512-eOdOWtxxyTVpmTWgNfiTJGM6hS/tqaahiJ1y31YipSlpPNXvTNJnPen6rskzuuQgpzRAM1xmuXSYvvdSI/yoQg==","signatures":[{"sig":"MEYCIQDa2DnIzZlrp7713tPK7/XTK9WoscS1Cn3MS9Fl11NWgQIhALPrBGST4DoTh2vuMfoQ8rB8l5uNGQhzWaAvmpq2q35D","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":47958},"type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts"}},"gitHead":"34ff2b5474977f147099d7bee6986eba9b7db46e","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"9.6.7","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.3.1","dependencies":{"@octokit/app":"^13.1.5"},"_hasShrinkwrap":false,"devDependencies":{"bun-types":"^0.5.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/spooder_3.2.1_1688637463479_0.12656956199257485","host":"s3://npm-registry-packages"}},"3.2.2":{"name":"spooder","version":"3.2.2","_id":"spooder@3.2.2","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"5346ba2015d424012d1fcadc151a06792be971df","tarball":"https://registry.npmjs.org/spooder/-/spooder-3.2.2.tgz","fileCount":14,"integrity":"sha512-SZO8xgZKbTBPdCTdlJfD/OFhmKuWH68J/rek4fHxDD1ZXOaTDrGg096zSAqlGL16luzXhd8qbURVyPHpWrAIDQ==","signatures":[{"sig":"MEUCIQDdICAK/lwgxFjlgxTTLtgH2+xMzjUfN68mI3aWbsRscwIgHi0ksx3N91DxL6N0dnnBuwYs7JEsFyXZT4V6Rg1NDjs=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":48299},"type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts"}},"gitHead":"53699b0e909e51cf2616441ee3b176f3e523986a","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"9.6.7","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.3.1","dependencies":{"@octokit/app":"^13.1.5"},"_hasShrinkwrap":false,"devDependencies":{"bun-types":"^0.5.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/spooder_3.2.2_1688666509443_0.6561751754214216","host":"s3://npm-registry-packages"}},"3.2.3":{"name":"spooder","version":"3.2.3","_id":"spooder@3.2.3","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"beedec463e4b11fc227f1b5888345e1925eeea58","tarball":"https://registry.npmjs.org/spooder/-/spooder-3.2.3.tgz","fileCount":14,"integrity":"sha512-fb2t/2dV4/Bgr5iAS3b3mRwdSMWkl9lY/5vhCud3Qkk8KhFl8ypE6fy9e6eEHD2RLWiwIVxDDacMRv3fn1Y1QQ==","signatures":[{"sig":"MEQCIHLJCffIe5wCh7Mhpk9YWKXROYMsorbVuRcCMBNyQ+/GAiAG8S7idrB72smAClpOI0JhqYLRpb8EcW165rO9eo5JRg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":48290},"type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts"}},"gitHead":"0ce5828df040a9330f8df4948c67ef139818be0d","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"9.7.2","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.4.0","dependencies":{"@octokit/app":"^13.1.5"},"_hasShrinkwrap":false,"devDependencies":{"bun-types":"^0.5.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/spooder_3.2.3_1689149182472_0.9823697716894348","host":"s3://npm-registry-packages"}},"3.2.4":{"name":"spooder","version":"3.2.4","_id":"spooder@3.2.4","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"1dbee74b365651d0d7519e5f490d2d1a198150bc","tarball":"https://registry.npmjs.org/spooder/-/spooder-3.2.4.tgz","fileCount":14,"integrity":"sha512-BB/SFFE/kKH6kLLOF5pB6yDlVrSz1Ccj3evPCf3p/N6uovEbyK6A1E6fpSraqOoaG7w8A7ktoskOHq5eEOqkmA==","signatures":[{"sig":"MEYCIQCeI/6bCmMt1k+zEun0fyAH+PGyghuAaTR7knQoUvp5pwIhALwoJeTtxYJqw7nG2jsred7V6rSAgUxttWDPKDXZFAo5","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":49878},"type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts"}},"gitHead":"e024510371fd45f6a49895b26504d846c0d1f0ba","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"9.7.2","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.4.0","dependencies":{"@octokit/app":"^13.1.5"},"_hasShrinkwrap":false,"devDependencies":{"bun-types":"^0.5.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/spooder_3.2.4_1689153575777_0.4011889427738802","host":"s3://npm-registry-packages"}},"3.2.5":{"name":"spooder","version":"3.2.5","_id":"spooder@3.2.5","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"877e2c91511ac7d2465b5ad39e7fafcab3ec96f1","tarball":"https://registry.npmjs.org/spooder/-/spooder-3.2.5.tgz","fileCount":14,"integrity":"sha512-/IkE0KhjpCVb3D5lu8GTzurVQRcxy9nP2VDKqFSB0qJiO4vtSE7WQX4WmUaQl/RNvlcZ7DUtJqDrqCQhOo/OOQ==","signatures":[{"sig":"MEYCIQDx+qlF7E7NV/06WX8fWDUzTHaIzX4IL0STU2O5RIi1UgIhAKHeFYg76GICtd7c7cB4JcwqC7xTFaVtaGisCMrrUxwM","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":49910},"type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts"}},"gitHead":"e9c7f04e5d14943a3129cd519320b4739e912470","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"9.7.2","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.4.0","dependencies":{"@octokit/app":"^13.1.5"},"_hasShrinkwrap":false,"devDependencies":{"bun-types":"^0.5.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/spooder_3.2.5_1689180431534_0.7606203117906618","host":"s3://npm-registry-packages"}},"3.2.6":{"name":"spooder","version":"3.2.6","_id":"spooder@3.2.6","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"6475138f3b7c4f6899db19b715f986b709fc7030","tarball":"https://registry.npmjs.org/spooder/-/spooder-3.2.6.tgz","fileCount":14,"integrity":"sha512-dNYB69UqeWp1EHzbR4Vkc6A7pS/yuuOIxDxbXF+lLoWHxFarJCLkqwrmdKAG+80TsrnWT5FZgVOYo++k1glUVQ==","signatures":[{"sig":"MEQCIEZ1G61EEvNjJSzj0LsuvqGnm7JVD49NwBPjTWefXia5AiBgT4GNMCmjL8bCbO2P6AZXVBfkFyLAgqvuc55xqi42Yw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":49991},"type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts"}},"gitHead":"bba10cebf39977586fe9986cbf16b5c49cccfe88","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"9.7.2","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.4.0","dependencies":{"@octokit/app":"^13.1.5"},"_hasShrinkwrap":false,"devDependencies":{"bun-types":"^0.5.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/spooder_3.2.6_1689670915376_0.24409992728423013","host":"s3://npm-registry-packages"}},"3.2.7":{"name":"spooder","version":"3.2.7","_id":"spooder@3.2.7","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"d8dfcf843337af1164d8046114f83ae3fbcbe978","tarball":"https://registry.npmjs.org/spooder/-/spooder-3.2.7.tgz","fileCount":14,"integrity":"sha512-SdlflhVcdQhbN9I0Q1ies9Mr/KqhvPfd2ObOXjvir3svWD63CTDQw1LQr2FrhJe3LC1xlysF94TyT4qcXXe86Q==","signatures":[{"sig":"MEQCIA9F2+QO+cnoIgr/RELgWw/M6t0XM6Igotu/Y0PeD1HCAiAJbb+HTx84ozpmZBtR8kAIVLWUER08rIr01lvZnIWh/g==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":49860},"type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts"}},"gitHead":"e2a18c9271c80d70aed1f1cddcb5e69b5636cfb5","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"9.8.0","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.5.0","dependencies":{"@octokit/app":"^13.1.5"},"_hasShrinkwrap":false,"devDependencies":{"bun-types":"^0.5.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/spooder_3.2.7_1691517197756_0.06094529652283098","host":"s3://npm-registry-packages"}},"3.2.8":{"name":"spooder","version":"3.2.8","_id":"spooder@3.2.8","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"eaacbe3eac04aaa5b7c6b60cf704ecb4ba2c7824","tarball":"https://registry.npmjs.org/spooder/-/spooder-3.2.8.tgz","fileCount":14,"integrity":"sha512-7u0ZZxmDweDLxIFIVJPhK073vPJjnhqhAjytL4oJupxJcsU9W/0lgPjMdvISJ83iz72Qx01/bGUAJA/8DyhY9w==","signatures":[{"sig":"MEQCIH1RO5+/EqJm1oJnkt/QERj+baXRdlvh/KLYUp7uqLe5AiAhqwkpoIIhpcIxkE1wfJrM9X6B96AFzbgBQYmmFDDscA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":51550},"type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts"}},"gitHead":"f46f76308ad86ffa51c14f0ba5d60b0d3cabecf1","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"9.8.1","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.6.0","dependencies":{"@octokit/app":"^13.1.5"},"_hasShrinkwrap":false,"devDependencies":{"bun-types":"^0.5.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/spooder_3.2.8_1694097541613_0.9123153931530672","host":"s3://npm-registry-packages"}},"4.0.0":{"name":"spooder","version":"4.0.0","_id":"spooder@4.0.0","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"0aa59ca4939259eec5eacf3290d3602e4885c1d6","tarball":"https://registry.npmjs.org/spooder/-/spooder-4.0.0.tgz","fileCount":16,"integrity":"sha512-uQ4juKLQfuN9nt8kWGxcdCylBXoyjDkpGveo+oWopCquj540xjohO1hCdmEnwylY2RYDNXQ9c5UW+As8AY41cQ==","signatures":[{"sig":"MEYCIQCQozhcAVGUbbzKBYmHkHF9bTirhOWV8nAgTKqpHlzHfAIhAOK1fj2q3wFEc2SWx5BZnFfzcC+QjIw9tzpWiBo0b7IL","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":70907},"type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts"}},"gitHead":"2e5ce35986b939be7089088073d2af5313241ed9","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"10.1.0","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.9.0","_hasShrinkwrap":false,"devDependencies":{"bun-types":"^0.5.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/spooder_4.0.0_1699399464233_0.09263664352034295","host":"s3://npm-registry-packages"}},"4.0.1":{"name":"spooder","version":"4.0.1","_id":"spooder@4.0.1","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"0c908634894fe808c45d20c5bbc435d5b399d57b","tarball":"https://registry.npmjs.org/spooder/-/spooder-4.0.1.tgz","fileCount":16,"integrity":"sha512-Et/85APh5a4RwhPkdJi0ThXVHa+1ozj8dtyN/rISTTlm6orLLHHLn6XWQePDmvOjDNNh2bXrscgiYcHpTFrrhw==","signatures":[{"sig":"MEYCIQDEAC4kzQ4ntYe0UysIeGSj2gUrQO/0oXR7EnPFBNgRtwIhALkxexGB7hstpuYhQb82jiw57EfJdqTLFYCuzXq9nGZY","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":72062},"type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts"}},"gitHead":"49ede2043b77be704437b9fc6f3c9c4e0603789a","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"10.1.0","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.9.0","_hasShrinkwrap":false,"devDependencies":{"bun-types":"^0.5.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/spooder_4.0.1_1699528693017_0.37333436039881307","host":"s3://npm-registry-packages"}},"4.0.2":{"name":"spooder","version":"4.0.2","_id":"spooder@4.0.2","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"26977075e7e4898eb516cec25ba304db9728da17","tarball":"https://registry.npmjs.org/spooder/-/spooder-4.0.2.tgz","fileCount":16,"integrity":"sha512-SUTkayuKGz1WIXa7oZ81xKz21MgLTst2v/4t2GKvQ59R0vkzVaI1PSVYlCv5bMULEsSHAH1HjKYkyHvBZLTNsg==","signatures":[{"sig":"MEUCIBD/sU3gqG2pyA2EHh52RU6sNsJq2UU6q36ZDY+kNnhaAiEAlt8Y5yWUk0ROUS7QS/EYdF+02aYap2r2BwI3xJLDMx0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":72568},"type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts"}},"gitHead":"56bd4588d32eaea5d27180f4ca6b2741d1dce666","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"10.1.0","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.9.0","_hasShrinkwrap":false,"devDependencies":{"bun-types":"^0.5.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/spooder_4.0.2_1699534578428_0.24963887857287403","host":"s3://npm-registry-packages"}},"4.1.0":{"name":"spooder","version":"4.1.0","_id":"spooder@4.1.0","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"bdbee868ce0937618b0a557148d442f349fd8508","tarball":"https://registry.npmjs.org/spooder/-/spooder-4.1.0.tgz","fileCount":16,"integrity":"sha512-p1TbsCx7TPw6c5P4OSgGEAbC79y36lSF5mrxgSVugESC6BC0zhkBzXML1UiRPpGSTyOqOsSsX5UOYzldsM9S4w==","signatures":[{"sig":"MEUCIAKU5wfnhyDWNyR2kMLJZc/E7bMFJXzdIpdk+8x6MbQiAiEAxkLRtwHImZXGbzENJWfOkpnLA9hIre7lkQE8Xz0spLo=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":74473},"type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts"}},"gitHead":"9128deb6616214a5fa7a27ec70a00e2860da5ffa","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"10.1.0","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.9.0","_hasShrinkwrap":false,"devDependencies":{"bun-types":"^0.5.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/spooder_4.1.0_1699553073409_0.5680390771635362","host":"s3://npm-registry-packages"}},"4.1.1":{"name":"spooder","version":"4.1.1","_id":"spooder@4.1.1","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"af35ffbef8390488d7e1d71784b71caadfbb3d52","tarball":"https://registry.npmjs.org/spooder/-/spooder-4.1.1.tgz","fileCount":16,"integrity":"sha512-TbPX+Vgm1TU5ZcA3nmD7nIt3F2CBcTP/C+tJKDtPaZkkkMp4BSirC3sPGNinpcPmceZqPFv5fVcq1I/zxHOqIQ==","signatures":[{"sig":"MEYCIQDeoT65JmovhOOYdqa47gzZQUInSEETBf8O1J8LDM99sQIhAI4I460ONwp5jh8FBt8cg5XV0Guh4bSelQdRY7iPsv+l","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":74496},"type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts"}},"gitHead":"4c245ff98c52c61e9527d2e2aa48bf791df0bcab","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"10.1.0","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.9.0","_hasShrinkwrap":false,"devDependencies":{"bun-types":"^0.5.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/spooder_4.1.1_1699618914828_0.8905157607277643","host":"s3://npm-registry-packages"}},"4.2.0":{"name":"spooder","version":"4.2.0","_id":"spooder@4.2.0","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"5e957e14751abb8f11083b9cc14156db780b51dd","tarball":"https://registry.npmjs.org/spooder/-/spooder-4.2.0.tgz","fileCount":16,"integrity":"sha512-Kt0OCk3SOE1MGzuJ0PVuD+eI/vbdjsdPDsTtzbP6kGcWONaYu8ooQU4VyaHOxZVi5LfSK+EdylIPxZJJow2rEQ==","signatures":[{"sig":"MEQCIHBtwgBBackAHaKiqchnkrM6PiUR8qc+qqlD3E3it6hPAiAutI+lSXGMnL2HwpOl959SZdcQgrNzz6PRWL4JYGH3qA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":74779},"type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts"}},"gitHead":"3d77d005c7ad01dd2cb6ac5a1c207d84db2f1fce","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"10.1.0","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.9.0","_hasShrinkwrap":false,"devDependencies":{"bun-types":"^0.5.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/spooder_4.2.0_1699971662787_0.5501470017767411","host":"s3://npm-registry-packages"}},"4.2.1":{"name":"spooder","version":"4.2.1","_id":"spooder@4.2.1","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"a84afc964f1658b7544f4f7e317e1f6170dfe9d2","tarball":"https://registry.npmjs.org/spooder/-/spooder-4.2.1.tgz","fileCount":16,"integrity":"sha512-E75F3NimF6NniHXf/v09ziTa9rZSKcrIv7MFh6KfYfSrlS9aPxQz0H4mFLdpdcsZe88i7wSiYbi4tvaFlsuIPg==","signatures":[{"sig":"MEQCIFJeTkFnGFXsLZ2Ry5fwBkyQsTcH3mw9zOgzcgX1tfBFAiA7vOYxhG73Utcqu1TtO9vCUMuSMgIol7xpGqs2NtGHcw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":75954},"type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts"}},"gitHead":"78e2c299cede93b7fdf107dd37587a0a7335e364","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"10.1.0","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.9.0","_hasShrinkwrap":false,"devDependencies":{"bun-types":"^0.5.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/spooder_4.2.1_1699980041414_0.8899632849297965","host":"s3://npm-registry-packages"}},"4.2.2":{"name":"spooder","version":"4.2.2","_id":"spooder@4.2.2","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"5687d235239f5d6f70839cb0b91c4c84c705e20f","tarball":"https://registry.npmjs.org/spooder/-/spooder-4.2.2.tgz","fileCount":16,"integrity":"sha512-gc5EhtnpmQ2C86Sur2V0CwH6/IW8wjlx6ywbrMu34vvFtPtecwmtm2UfVFQgp4MQQNj2XtgiFK+u88/mXzpx1w==","signatures":[{"sig":"MEUCIDoTKnL27mcCVhErT08NawG2sif0mfkzwqYIWZoHQU5wAiEA1l3bZNhsz6LNIn4XiIcSjFFB+RyBJ5FqQiRNpKv2K0A=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":76094},"type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts"}},"gitHead":"42dc78db9dbdf7d10b77252dcef872b28e477999","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"10.1.0","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.9.0","_hasShrinkwrap":false,"devDependencies":{"bun-types":"^0.5.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/spooder_4.2.2_1700045043374_0.378190765666242","host":"s3://npm-registry-packages"}},"4.2.3":{"name":"spooder","version":"4.2.3","_id":"spooder@4.2.3","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"d4927047a200367ed572e7babf08f477d7acc897","tarball":"https://registry.npmjs.org/spooder/-/spooder-4.2.3.tgz","fileCount":16,"integrity":"sha512-K1rMb4p4EAATOGNKQi2yQS2OJB7duzRe8Q+CkJMVYBWKym3VS/VBifpm7WbBEhsezzqZhaTR5QVpEEPnG/iJ+w==","signatures":[{"sig":"MEQCICLk/PUIicCbtAK3j8COY41PaDlPxWSgL/U7k0Cy7YdnAiBj44TGvvWk7X1YCzlkcxU42uSyQ4J8hhWQlLOj+nI2bw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":76091},"type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts"}},"gitHead":"f224e18389e4389ab5b471d4e05e991e0fa3a297","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"10.1.0","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.9.0","_hasShrinkwrap":false,"devDependencies":{"bun-types":"^0.5.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/spooder_4.2.3_1700046169355_0.38736433300992723","host":"s3://npm-registry-packages"}},"4.2.4":{"name":"spooder","version":"4.2.4","_id":"spooder@4.2.4","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"c1807dcb00c6f58d7bf2b6972a978c968779cb69","tarball":"https://registry.npmjs.org/spooder/-/spooder-4.2.4.tgz","fileCount":16,"integrity":"sha512-zA++gMkt+K75CzlwGNANxbQB93Ty0KZNpQJ2vpmpb/qUaaOkz2qNuBvS7f7qF2+yabGSEjzpaWXAL8Ea+KTnKw==","signatures":[{"sig":"MEUCIQCrA1Sgx0H2xh8CzxHKEMWc5SssMTLcG9zeAt/9ZyKtEAIgXx2blk1B6ZrZL5XjDirVixTd9t2RD6HmpRknsPYgcgY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":76130},"type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts"}},"gitHead":"ee68f682a011688d1be619bb831c700303eb7cf6","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"10.1.0","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.9.0","_hasShrinkwrap":false,"devDependencies":{"bun-types":"^0.5.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/spooder_4.2.4_1700047232178_0.27426989158257964","host":"s3://npm-registry-packages"}},"4.2.5":{"name":"spooder","version":"4.2.5","_id":"spooder@4.2.5","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"3950fb397e950c1a5d237413975bebc1b1d938d9","tarball":"https://registry.npmjs.org/spooder/-/spooder-4.2.5.tgz","fileCount":16,"integrity":"sha512-gXkts0F+IVrPBfo+NZdEPFWBYe8IN1ig3zFG2f5CO+qL6aI4vYSQj04scrY/L7CUg6kdBbIs9jXOoVT+NeQFvg==","signatures":[{"sig":"MEUCIHKiPza8GWOnFZlwgudjkCzyD9odOwpjNc2OkL6we3lIAiEA10MBH/QRwTETvdgrOgDdB1hXG1oGJAmLivoH9y5nJeo=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":75765},"type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts"}},"gitHead":"8ce550b3f04640fab4c77e19703fe6edabf76213","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"10.1.0","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.9.0","_hasShrinkwrap":false,"devDependencies":{"bun-types":"^0.5.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/spooder_4.2.5_1700048634797_0.4826291561976348","host":"s3://npm-registry-packages"}},"4.2.6":{"name":"spooder","version":"4.2.6","_id":"spooder@4.2.6","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"5675d57fc566a532b7b42aece10ec8e31dea2bcb","tarball":"https://registry.npmjs.org/spooder/-/spooder-4.2.6.tgz","fileCount":16,"integrity":"sha512-pCU2kXzitXIcyNXWNRMlMvZIy5saNIPXKbFVoMEFuAUwhrYlEJpVMBqIPANctHevrn3jlI7OHK+vv7bkXTXmjg==","signatures":[{"sig":"MEUCIHJtsNcvViy37LzqcLzCcx9/vNd88HJfk0GDXbCtJj9DAiEArJTycS0JPcWfworyPCkSkme/qyHxmyGzlv2ua78SaBs=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":76826},"type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts"}},"gitHead":"a7e5b50d3a3eb8741c87b0757df61d32eb30cb95","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"10.1.0","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.9.0","_hasShrinkwrap":false,"devDependencies":{"bun-types":"^0.5.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/spooder_4.2.6_1700051027630_0.5479049879852547","host":"s3://npm-registry-packages"}},"4.2.7":{"name":"spooder","version":"4.2.7","_id":"spooder@4.2.7","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"e8cf41a4d5793f6a7f034ee7999205cf1562ac51","tarball":"https://registry.npmjs.org/spooder/-/spooder-4.2.7.tgz","fileCount":16,"integrity":"sha512-fTIIg5Lr1jDr60QAgiNV9r46m+0a2N6Wc8mHCr27aZ0ip1tRrOyH0Pu8zDTsKpdEIbaQiTbgcYo/2NBsTlfIsw==","signatures":[{"sig":"MEQCIHEHG6vmMsRTECmIr9HbNa1LVE3sVx8s4yKVR9qyT+/QAiBWNbKfBjpM6XB6xN3DibzL8MpNGnEZdlVg90Y6M0lFLg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":76749},"type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts"}},"gitHead":"0a793e5708eeea460e91380b5cd275d5442c4adf","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"10.1.0","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.9.0","_hasShrinkwrap":false,"devDependencies":{"bun-types":"^0.5.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/spooder_4.2.7_1700058016542_0.24981467515375244","host":"s3://npm-registry-packages"}},"4.2.8":{"name":"spooder","version":"4.2.8","_id":"spooder@4.2.8","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"54f39a9f55ecf099733343d58671ac14d68f2ae9","tarball":"https://registry.npmjs.org/spooder/-/spooder-4.2.8.tgz","fileCount":16,"integrity":"sha512-QXyMv3Hhb00Fz/FtGlTyqBxzTevmSV59SiW+hCBiiAnzuub4uJxmHKuBAqvxQQ3jnbAZqDA2jyFKJsfjaiqpBw==","signatures":[{"sig":"MEYCIQDHmUnczpeYtUk7Zz1TN0rmFa3E9X+ijzqqtU5b/RCY7AIhAN/PIpac/pcQ3pk/h4KyqgCf9Bwm7lEQ4PyLE9kKks7j","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":79292},"type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts"}},"gitHead":"8a0203a0d994d4ea487fa5e46060f94cbfd9aaeb","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"10.1.0","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.9.0","_hasShrinkwrap":false,"devDependencies":{"bun-types":"^0.5.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/spooder_4.2.8_1700671147796_0.2513429028100096","host":"s3://npm-registry-packages"}},"4.2.9":{"name":"spooder","version":"4.2.9","_id":"spooder@4.2.9","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"8d74458b7276cc5b28feeee2903d9ed1c481259f","tarball":"https://registry.npmjs.org/spooder/-/spooder-4.2.9.tgz","fileCount":16,"integrity":"sha512-btnlFe8a0tfvrmtiYp42p2AGxs917itpH7sym6YGRRy7ymxZvUidRX89063Qz2Y0xZfHQF8o2j7sBcYIgjmG+g==","signatures":[{"sig":"MEUCIQD+zy4WMYO0qSrlMQl9mhFfQxhmsDF+pcf3NMp6b17QGQIgMvhQL7PFpmymCz9dUU/vElq85uUYUHthGYZ/ibQWIU8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":80095},"type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts"}},"gitHead":"e4f98c0f5459fa6c2b7c19ceb743bcd68f494e75","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"10.1.0","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.9.0","_hasShrinkwrap":false,"devDependencies":{"bun-types":"^0.5.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/spooder_4.2.9_1701188971323_0.4060258137811563","host":"s3://npm-registry-packages"}},"4.2.10":{"name":"spooder","version":"4.2.10","_id":"spooder@4.2.10","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"b2cf2cbbbb113d23166fdbf6460a263a8ef758cb","tarball":"https://registry.npmjs.org/spooder/-/spooder-4.2.10.tgz","fileCount":16,"integrity":"sha512-nEoQe1TyOKRMQegLCevPLoiLcIj+wdNOr9SctvcA0xgECeRG3Cr0WfeZc1X+rZi+Xsv/2ij1Sa5N7E9el+oX3g==","signatures":[{"sig":"MEYCIQDA+r0o6Z+q3ewLAPGzyEk0En6q9En+LhQpqGkwzVo0DAIhAKn3z0BGq9xPJHf5OPmZsUq7xlX1VxrQ7nPE3YSWG7ra","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":80453},"type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts"}},"gitHead":"393ff4608dffb7eae0ed5926399da8a56ad2dc4d","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"10.2.4","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.11.0","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.0.5"},"_npmOperationalInternal":{"tmp":"tmp/spooder_4.2.10_1707751806609_0.6407286436988944","host":"s3://npm-registry-packages"}},"4.2.11":{"name":"spooder","version":"4.2.11","_id":"spooder@4.2.11","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"9048b30261529204b3c62bd931b7ef6c12482771","tarball":"https://registry.npmjs.org/spooder/-/spooder-4.2.11.tgz","fileCount":10,"integrity":"sha512-b9PEwarD+/qu0PF5rNqNyY5BmzbBMzxVV0O8XnHBGc7lqSOKKi114SDtoL2Hlw3MPxQVv3x0on/ssF144J7eZg==","signatures":[{"sig":"MEUCIGICaDSp+LS5dmhw5lTQXUiJMBh9n3KFxmjuLkdBWMTQAiEAgPHPKMdIPzx9BJ7BfNYfZX2fkx/t12kWkUXKURG3X8Y=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":84678},"type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts"}},"gitHead":"e8c62bc5039398be066061f92de97b0a9868cee8","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"10.2.4","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.11.1","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.0.5"},"_npmOperationalInternal":{"tmp":"tmp/spooder_4.2.11_1709634042593_0.44195450599881814","host":"s3://npm-registry-packages"}},"4.2.12":{"name":"spooder","version":"4.2.12","_id":"spooder@4.2.12","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"4e6fcbaa230ba0f7ae93680301e32f1505453a3d","tarball":"https://registry.npmjs.org/spooder/-/spooder-4.2.12.tgz","fileCount":10,"integrity":"sha512-7liwvB+ocYU8FJ9pnFENN+V1kUaAUL5rp7ZIABdtlZXYYykfE9kbF0bYRbdGwYy0iuXihE5GLkEC3LKoa9EbOg==","signatures":[{"sig":"MEYCIQD777Pq1Mer7D+/MlJI3aCuPjy1o+INtlhC3OfT6B44jgIhAKuQ/sVk9SratRAgy2NFbuKEgbxwo4ZL4hGTuHMH0Z38","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":86050},"type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts"}},"gitHead":"fdc3b1fe5f07bf63878ccb8af5323530ec620e5c","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"10.2.4","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.11.1","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.0.5"},"_npmOperationalInternal":{"tmp":"tmp/spooder_4.2.12_1709636235884_0.6542935528756233","host":"s3://npm-registry-packages"}},"4.2.13":{"name":"spooder","version":"4.2.13","_id":"spooder@4.2.13","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"731eb679d435ecbcd9d64c5e916f07251b1e3b36","tarball":"https://registry.npmjs.org/spooder/-/spooder-4.2.13.tgz","fileCount":10,"integrity":"sha512-GiFIfQzPn1+O4VFI/bF6zXMvxI2GVuDum1wUAznoFj5+RfMgOl7HejotZGba5adqpp4LI70jC9VZAMY4v5PgKA==","signatures":[{"sig":"MEUCIQDuhunsp0Pgdv0BNFbKMVp6stMzO9P5oqfgoXAol4PB4AIgUEsrHnmSbs+AcMrN4l6zCLVxb6eUPq0HYcB/0qgUG1k=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":86089},"type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts"}},"gitHead":"1a476e0c1de89ca64848e68f9889f54228cd8473","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"10.2.4","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.11.1","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.0.5"},"_npmOperationalInternal":{"tmp":"tmp/spooder_4.2.13_1709728850224_0.392008056022942","host":"s3://npm-registry-packages"}},"4.2.14":{"name":"spooder","version":"4.2.14","_id":"spooder@4.2.14","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"9dbad29d32ecc3919f3496c3575fc507fddbf582","tarball":"https://registry.npmjs.org/spooder/-/spooder-4.2.14.tgz","fileCount":10,"integrity":"sha512-qLcta2yfW3VwtiBfNSebasNWYuslzMgfFECXAO72XT4Dqxcc3wPsuV/YG1FTJx+vcGzz4PMYT0AjxK7Otf0ouw==","signatures":[{"sig":"MEQCICTPm8arBAWtZA7Yo7BrykJ1INNYQY1b8WsETQvCi7vOAiAhfEIvBh3GW8RWGecu7D9uhJ8fUWIoIuD1O/NODpVoXw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":86071},"type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts"}},"gitHead":"cd8f676638af9b2d9f59f62ec2dc552c399d5fd7","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"10.2.4","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.11.1","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.0.5"},"_npmOperationalInternal":{"tmp":"tmp/spooder_4.2.14_1709729132755_0.6861613032084559","host":"s3://npm-registry-packages"}},"4.2.15":{"name":"spooder","version":"4.2.15","_id":"spooder@4.2.15","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"e8e8b07eb0bd3e2d0745a3ae752dc33ca47b8785","tarball":"https://registry.npmjs.org/spooder/-/spooder-4.2.15.tgz","fileCount":10,"integrity":"sha512-xf3PZebkuPGRx6bZYCe4rcb2psewwDWsVtaHzd2HwhA2VK+6tNWLS7/lG+BsSADmA+q+cvjOLc6CtXkejJwRPA==","signatures":[{"sig":"MEUCIAPDDplr4+VrMkn8nEhdN9lMHY86gnRj/1e1b+0RCYOyAiEAoWTsf9+G6ZTfMlezHU/9J45YtHC1BKwaQl7r7zbLnsE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":86083},"type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts"}},"gitHead":"2a12c943aef748018a24ef19390646cdc1969702","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"10.2.4","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.11.1","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.0.5"},"_npmOperationalInternal":{"tmp":"tmp/spooder_4.2.15_1709739644321_0.6967247256242151","host":"s3://npm-registry-packages"}},"4.2.16":{"name":"spooder","version":"4.2.16","_id":"spooder@4.2.16","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"fcc5c3f67a35150a92386dfce64401e1c9032f1a","tarball":"https://registry.npmjs.org/spooder/-/spooder-4.2.16.tgz","fileCount":10,"integrity":"sha512-czPYw1fGCKVwnBc69HNXxgU4h6j3WXeEWCsoeSBrf2Co3ojoXcl4C+fGe4Ht7pnsdTUihcCWON/Qm70T4lkXxw==","signatures":[{"sig":"MEYCIQCW1QetBK6p+gOc745m/AeDJME68ul/mYWKLVAQWUFcKgIhAOzpFS+VTjcz7avhZrgQWk/F8rVcJILjaHtnA/0kdirv","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":86103},"type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts"}},"gitHead":"1e08cf6eacf629ab9786ae4e8328af91fb150c3a","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"10.2.4","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.11.1","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.0.5"},"_npmOperationalInternal":{"tmp":"tmp/spooder_4.2.16_1710239646696_0.8432620992748288","host":"s3://npm-registry-packages"}},"4.2.17":{"name":"spooder","version":"4.2.17","_id":"spooder@4.2.17","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"35cd5bfabe40964e5e38e55a31b514dcfef79c38","tarball":"https://registry.npmjs.org/spooder/-/spooder-4.2.17.tgz","fileCount":10,"integrity":"sha512-iccCu9KRqaqfVqzMLqwJNq97hkDjyKpStxds5jB1BUX3+8WH/PRj6ORH7g5xN0In6UFgyheBmrgNruQ3OormWA==","signatures":[{"sig":"MEUCIQCIrV6Rbqe8Bs9X0AwuFZZuYduCGyqmthEv+xXh9/7wpAIgbECCPRKG6h8KbLRaIL6hGd1xBDjiafXV8zxMkrRplCs=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":88132},"type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts"}},"gitHead":"e9ea18dda1d628c39af55e5fc99d07ae08e87c88","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"10.2.4","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.11.1","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.0.5"},"_npmOperationalInternal":{"tmp":"tmp/spooder_4.2.17_1711466807337_0.6923727597307723","host":"s3://npm-registry-packages"}},"4.2.18":{"name":"spooder","version":"4.2.18","_id":"spooder@4.2.18","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"c5f2e365ef7e15d2e70c65c572b7a8904988ff95","tarball":"https://registry.npmjs.org/spooder/-/spooder-4.2.18.tgz","fileCount":10,"integrity":"sha512-8Gp+SK00Pp66EBw0BiLaD9eMl8Vnlt2zLo9dgktAbpfTG0gHFAyrd/xJ53WyZcEevEqOV/W/nZtzHI/lsxCwTA==","signatures":[{"sig":"MEUCIA5EqeLpkc9QJ+eZsB0fB9m9Dee76YGx31N3u+0TVMEQAiEAyfUWmMUZFuH0nDqIhRQ1yo5r+3uL2ZGUw9XvWd8+LVM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":88731},"type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts"}},"gitHead":"973d5dfce6beb87acb1969fab266b14986e26c9e","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"10.2.4","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.11.1","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.0.5"},"_npmOperationalInternal":{"tmp":"tmp/spooder_4.2.18_1711467489966_0.05286300304358438","host":"s3://npm-registry-packages"}},"4.3.0":{"name":"spooder","version":"4.3.0","_id":"spooder@4.3.0","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"3fb2d3b16bea069fccf7ef46dabf3781afa4d450","tarball":"https://registry.npmjs.org/spooder/-/spooder-4.3.0.tgz","fileCount":10,"integrity":"sha512-WKvmyeNhQrB/M6AmHRDDpdn8v5DSPE3IJ3nb1kpFRbft3Q8mHa97lDlMtJFpH5e8aXspbt3ry0zDFCdT9bA7uQ==","signatures":[{"sig":"MEQCIHTHeLRvpqqQxMNdk4GfBBzjihGkZszpdFg0egB7XnEaAiAdOI7gU2GC00NEGVfhqJKQs4yZOvxJR1n4vvhK4IyUFA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":90742},"type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts"}},"gitHead":"3884622047cc153ccf5045b80e12a4d4308bb9f7","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"10.7.0","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.15.0","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.0.5"},"_npmOperationalInternal":{"tmp":"tmp/spooder_4.3.0_1721213230701_0.1509072577331041","host":"s3://npm-registry-packages"}},"4.3.1":{"name":"spooder","version":"4.3.1","_id":"spooder@4.3.1","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"8b2de002e3c70f934dc66703a1c4e6e6a57c4e98","tarball":"https://registry.npmjs.org/spooder/-/spooder-4.3.1.tgz","fileCount":10,"integrity":"sha512-mbsy9PzJtZiOqm4O/4qJATp6jDT7E5RuIV7cZItzuiwuuQQ+fWywGvGzZdmC0MWlO56Ceq9Hl+lzL1arRBj2LA==","signatures":[{"sig":"MEUCIQDE/ou+S9WBTRVhAiY+Uv7Jefr093oklTVKdxLV5X1fFAIgcXygkgXqXAuxUZZ1whBtbkkjhgn2taBl236RN1dg97k=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":88785},"type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts"}},"gitHead":"dc0bf625500aefff9a329dca1f6992b1940feaf2","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"10.7.0","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.15.0","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.0.5"},"_npmOperationalInternal":{"tmp":"tmp/spooder_4.3.1_1721213805440_0.031103233970527944","host":"s3://npm-registry-packages"}},"4.3.2":{"name":"spooder","version":"4.3.2","_id":"spooder@4.3.2","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"87c1dff8c07bc6dc6c53e609eff358d876834968","tarball":"https://registry.npmjs.org/spooder/-/spooder-4.3.2.tgz","fileCount":10,"integrity":"sha512-wrR8M9E5AAQcXsAbLv5E5zvr6iF/d4yEUkId9t6scWYb91lxw3ZTzEMjzAMzy9uBvhvkdusMa5Gh7zi1pu/2XQ==","signatures":[{"sig":"MEUCIQCrpsHisFWZRhWO52ESiepbLCAnfBtlwcUYj8MEfZVzSAIgG1+mmVBNNz2QHSKyOp06n7YHGAUX2hyinRz5FivIpGw=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":89099},"type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts"}},"gitHead":"4fcb7653ebde3db5600cc815d7288bf037445a19","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"10.7.0","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.15.1","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.0.5"},"_npmOperationalInternal":{"tmp":"tmp/spooder_4.3.2_1721396587212_0.9593487975753443","host":"s3://npm-registry-packages"}},"4.4.0":{"name":"spooder","version":"4.4.0","_id":"spooder@4.4.0","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"f5fdb095968d6b57d3d96f9f17a3e21771ccbf46","tarball":"https://registry.npmjs.org/spooder/-/spooder-4.4.0.tgz","fileCount":10,"integrity":"sha512-kY4r4yEtyBLEwgMhKrBCzecOtZQYvUoN+V31giW2PO9ytvW5AvpEkTn8QYBSL9QXawZDVdfnwptW8VKTUCLpMw==","signatures":[{"sig":"MEUCIFBaWihHF7kqhPy65WHi92S1sPBoZdQgG9sFXpspxYmAAiEApkL+HrGGqyNMR0W7gKxE35QhX8U+KcEs+/dXUtiJEUQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":92164},"type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts"}},"gitHead":"90ebdb66e1c23e5641b40ed16d837708a16750a3","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"10.7.0","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.15.1","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.0.5"},"optionalDependencies":{"mysql2":"^3.11.0"},"_npmOperationalInternal":{"tmp":"tmp/spooder_4.4.0_1722448674560_0.5746163939452413","host":"s3://npm-registry-packages"}},"4.4.1":{"name":"spooder","version":"4.4.1","_id":"spooder@4.4.1","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"aae82ddc71d9b14f969100541a6daa8942d1d65a","tarball":"https://registry.npmjs.org/spooder/-/spooder-4.4.1.tgz","fileCount":10,"integrity":"sha512-4ShwCvAOaITSN4TdBk4MO8fUl92NQHtts/cYIR5DrrkVpOpf2Wf75/NDUPH4AFHJBbppSs10LBnQTPh0bGQPBA==","signatures":[{"sig":"MEYCIQCySCR0cIHVphAMoMgS91AUkU8TAavLHvEuD2bmXWVMagIhAOOuC6W5I4UZ9j1QrYeJPkm18FPmN4ABdKjWS7cdfHFb","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":92165},"type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts"}},"gitHead":"66e6eb09edbe2696a2a47934750724ab994411e9","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"10.7.0","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.15.1","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.0.5"},"optionalDependencies":{"mysql2":"^3.11.0"},"_npmOperationalInternal":{"tmp":"tmp/spooder_4.4.1_1722453810499_0.20774907802225862","host":"s3://npm-registry-packages"}},"4.4.2":{"name":"spooder","version":"4.4.2","_id":"spooder@4.4.2","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"835856a686e5a73ecb741fa10feaa480b64ced91","tarball":"https://registry.npmjs.org/spooder/-/spooder-4.4.2.tgz","fileCount":10,"integrity":"sha512-2svHxtRZ5XXu5jVlP6Idnmwo/Pc2IXF14venliNY+URpu93bgolyf7v/PvnYpaYbiWNMI/58EcXMmxo0y7VQoA==","signatures":[{"sig":"MEUCIQDWh4oi6S8Wv/bblCnGLNjcDBNEu4nhiH+kcmYAHbOSfQIgei1DbF5qN+UjW1wcTFSUB2FgNk67z8UnDFzAIbFKkys=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":92385},"type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts"}},"gitHead":"75b8799b37bef2192fce2cbc5e54bff178366df4","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"10.7.0","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.15.1","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.0.5"},"optionalDependencies":{"mysql2":"^3.11.0"},"_npmOperationalInternal":{"tmp":"tmp/spooder_4.4.2_1722462383799_0.5886804957055243","host":"s3://npm-registry-packages"}},"4.4.3":{"name":"spooder","version":"4.4.3","_id":"spooder@4.4.3","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"4ea0a0b1f0a8ae2654924bd78526a246ed5001b7","tarball":"https://registry.npmjs.org/spooder/-/spooder-4.4.3.tgz","fileCount":10,"integrity":"sha512-LOL/kMpXkTApZm5l1Lp15tSAgb5kQ5rtHba6QlINxl/J1MT6s/+l78kCIpAOQ0gJc0JrkOGHeOZddBHYIJE8TQ==","signatures":[{"sig":"MEYCIQD5yRU1n9IkV2G7CzpdlTDptsfyefDdvpIN17Zs2dOSnwIhAMOJy/rEn0bxy5S/ct0HMqQuTqNdXrqgGqNe/oePx5X8","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":92406},"type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts"}},"gitHead":"f5f8532ccd5c10891eb39dee91bd27c9f070079d","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"10.8.1","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.16.0","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.0.5"},"optionalDependencies":{"mysql2":"^3.11.0"},"_npmOperationalInternal":{"tmp":"tmp/spooder_4.4.3_1723459161697_0.3019973128126916","host":"s3://npm-registry-packages"}},"4.4.4":{"name":"spooder","version":"4.4.4","_id":"spooder@4.4.4","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"3c3df309882872ce7f0df8db75439113b9bea1e1","tarball":"https://registry.npmjs.org/spooder/-/spooder-4.4.4.tgz","fileCount":10,"integrity":"sha512-PVLJnZqAi+emaQ5zskal4a44warkYs7lakvymx8E0PDnxwZLzqeUnKXGISoAfTtGMUaRvIj+yys9GIAa1pxrjw==","signatures":[{"sig":"MEQCIECY0XactNBd9hmHJPItE7Vzr0E8e9m0MkEadg9S5hirAiAI8K0LE5cbf4zGdQlWJixVcWdt2GtgNvb+BUTN4FlVnw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":93682},"type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts"}},"gitHead":"8ed35a180957552e92eac0a8c4a05bfdfcce5ef2","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"10.8.1","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.16.0","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.0.5"},"optionalDependencies":{"mysql2":"^3.11.0"},"_npmOperationalInternal":{"tmp":"tmp/spooder_4.4.4_1723735425449_0.7372434465611508","host":"s3://npm-registry-packages"}},"4.4.5":{"name":"spooder","version":"4.4.5","_id":"spooder@4.4.5","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"f786cf66b7e847402dd20ebd359c6ba032182e37","tarball":"https://registry.npmjs.org/spooder/-/spooder-4.4.5.tgz","fileCount":10,"integrity":"sha512-h1524QQbgS/0/E+veCMmMNZdBpYpXeBJTTxn1wEIm2qGahL6RMFurAbXNVOaNR2RnAwzEbX8z1VmubY6H0yYDw==","signatures":[{"sig":"MEUCIBi+z4EK6dr9W5FDzlox8nJhZ9k4r7UUy8gn7XJP6/x0AiEAp/Z6EOE/wlqQr960np0KjQur9WZej0VeSgkDkCQf2Sg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":93683},"type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts"}},"gitHead":"6bba9612f2ada934a35c7f916dbf06561f14b13a","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"10.8.1","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.16.0","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.0.5"},"optionalDependencies":{"mysql2":"^3.11.0"},"_npmOperationalInternal":{"tmp":"tmp/spooder_4.4.5_1723735625700_0.7556772872174067","host":"s3://npm-registry-packages"}},"4.4.6":{"name":"spooder","version":"4.4.6","_id":"spooder@4.4.6","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"c1e1e6d390b58d525178fd43ad9a63c531ca8655","tarball":"https://registry.npmjs.org/spooder/-/spooder-4.4.6.tgz","fileCount":10,"integrity":"sha512-Fi7ogu+gymwV89Ue67vFaascsT41KT3N2qIXBpemaQdvX/EeaFa8rggFfgGCB5vxEKJODdafVbsR4VAg3SF0DA==","signatures":[{"sig":"MEQCIBEooWyh3Ua3Rmyu3MiLvLfv8fnOIfK06Da29j8dpf7AAiB307/gsP9dSloQ02Q+vmSDwxRqal/laG0yfP+P3oWyiA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":94744},"type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts"}},"gitHead":"7554288fb3be52159bb0847d376dc954adf20ec8","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"10.8.1","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.16.0","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.0.5"},"optionalDependencies":{"mysql2":"^3.11.0"},"_npmOperationalInternal":{"tmp":"tmp/spooder_4.4.6_1724149139153_0.2777820886083797","host":"s3://npm-registry-packages"}},"4.4.7":{"name":"spooder","version":"4.4.7","_id":"spooder@4.4.7","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"00ff4216d75db1e50141cc4f6c534bc95d49a98f","tarball":"https://registry.npmjs.org/spooder/-/spooder-4.4.7.tgz","fileCount":10,"integrity":"sha512-Ubv5JKAjvkkrpfOC8mfn9XlnjLzWZSSMsQi7EMDBw0M89HbY8uMa2I3f3QQMJ4Kar6oqEjNZSZ0D6G1f8BmA4Q==","signatures":[{"sig":"MEUCIFk5RmAKJ0JedC3/kgiQHlttrGJUVRGSGrgQD4epXJ1yAiEAgeedZlL62r/TjPJEhHPMhkzVkdmfZzS42RYm3jNQWpU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":94739},"type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts"}},"gitHead":"cdec6bcc6b1e2f37051e183fc28b56aa097f4ea0","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"10.8.1","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.16.0","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.0.5"},"optionalDependencies":{"mysql2":"^3.11.0"},"_npmOperationalInternal":{"tmp":"tmp/spooder_4.4.7_1724755149330_0.9633025202958634","host":"s3://npm-registry-packages"}},"4.4.8":{"name":"spooder","version":"4.4.8","_id":"spooder@4.4.8","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"7e6618ab040269ed135ae1a7fb4de44389bc7076","tarball":"https://registry.npmjs.org/spooder/-/spooder-4.4.8.tgz","fileCount":10,"integrity":"sha512-1b5pA2wizrNUOPC43sPQPlWT4AhLreNznManZo51N37u+ow9/sZbvVAl2gVuM5MuaFbdiS0ieopoUd8x/W8h/A==","signatures":[{"sig":"MEUCIEAgMrUhB5fbjqDUh19oG0647/1SRXU0TQ8w9yZfaLaHAiEA647j3CMHy0d2aDJcwl+p/A9fDfbz7nPGVvvgRGZCdO8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":94860},"type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts"}},"gitHead":"26d80d9989f2808dfa990856d3468e078444a7b4","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"10.8.2","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.17.0","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.0.5"},"optionalDependencies":{"mysql2":"^3.11.0"},"_npmOperationalInternal":{"tmp":"tmp/spooder_4.4.8_1724839654213_0.3525782072116379","host":"s3://npm-registry-packages"}},"4.4.9":{"name":"spooder","version":"4.4.9","_id":"spooder@4.4.9","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"3939b4137b9bf28dd9ba78cc753e28d40760c1f5","tarball":"https://registry.npmjs.org/spooder/-/spooder-4.4.9.tgz","fileCount":10,"integrity":"sha512-Bg0Rz5PLE7bO6oCZCJZdJJXt8aJfejK3UmBXdXQvhDPO9L6xBdq/8/1H+OOH/bF+FNtgBRzV32B5Io3U0YfDTg==","signatures":[{"sig":"MEUCIQCZ034Kx6WgOtvj8xdlJOYJtCmwTTbHskQ7khF4VZRmaAIgGShdzFlDxw/Ggodb/iGwSwfEvBH5/PvvtF70HcrwfZs=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":95194},"type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts"}},"gitHead":"c6151591c752ad1dcbadfdbe477c532cd76ef86b","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"10.8.2","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.17.0","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.1.8"},"optionalDependencies":{"mysql2":"^3.11.0"},"_npmOperationalInternal":{"tmp":"tmp/spooder_4.4.9_1725633111690_0.8244962397924105","host":"s3://npm-registry-packages"}},"4.4.10":{"name":"spooder","version":"4.4.10","_id":"spooder@4.4.10","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"f2bca43bae10f3897caa95b79f37719b4cb12576","tarball":"https://registry.npmjs.org/spooder/-/spooder-4.4.10.tgz","fileCount":10,"integrity":"sha512-n3KYo/ujV0nf697Rww7ihAwRLB/7msXCCTo2ZSJalKC1shLGjZ5kubFNpBACWULLxBTYXRYuPDMr7gG7FcnNxg==","signatures":[{"sig":"MEUCIQD1am+VemFeN+6xpEL9FmshtT0xiGiowhK2aPBLWkTf/AIgWdmahtLi507hZr0JJqA9Qe38uirPOJ7RSdoiBVW0iWg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":95202},"type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts"}},"gitHead":"a8a575f1e85e26b64f7c590c1219b467c3b0bd5a","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"10.8.2","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.17.0","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.1.8"},"optionalDependencies":{"mysql2":"^3.11.0"},"_npmOperationalInternal":{"tmp":"tmp/spooder_4.4.10_1725911271504_0.6961189176904394","host":"s3://npm-registry-packages"}},"4.4.11":{"name":"spooder","version":"4.4.11","_id":"spooder@4.4.11","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"026e30a2c6e52104dd0e9c5b6ea1dfc705785c15","tarball":"https://registry.npmjs.org/spooder/-/spooder-4.4.11.tgz","fileCount":10,"integrity":"sha512-49BSYwTwSirrM+Ze7oTAosBGcfpNsy/WEzwsOXi8BYWy2ZTDaMTo5UH+A2GCDZDKYcazJMey1Tb8hukGjdluqQ==","signatures":[{"sig":"MEQCIBiwoE44nlbKXy0K1s9M0MZiD4Wkr4LAE9+aGZoGf8cLAiAJLukFkhZpl5DorveDO+cOfgjVkVwtlh5seBdi3n6llQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":95609},"type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts"}},"gitHead":"6bb418358653e060c5d7711fb3cd97e858b04abb","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"10.8.2","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.17.0","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.1.8"},"optionalDependencies":{"mysql2":"^3.11.0"},"_npmOperationalInternal":{"tmp":"tmp/spooder_4.4.11_1725914721319_0.33653366252798134","host":"s3://npm-registry-packages"}},"4.5.0":{"name":"spooder","version":"4.5.0","_id":"spooder@4.5.0","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"b49603f730873830ba809273ae2e402d313f57d4","tarball":"https://registry.npmjs.org/spooder/-/spooder-4.5.0.tgz","fileCount":12,"integrity":"sha512-vVae4l1x45D8eZf7UnzmldTI5UNa3/pwy8jeAo5SYBME3FPLXmSAFb7HJzGeMNMLSSNPzb2QDaq2lIYivKX86g==","signatures":[{"sig":"MEUCIQDqfkaLqxr4gpHw7EvWr0vQVUmqYkSV7ugbGddRosvfUgIgPX1TIhktz7g/+IrGCHC6TXKEkhJfqVEux7Puj13YAL4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":99590},"type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts"}},"gitHead":"b4b0fe9c1bd13d190c045e8e63f22a8b610fc110","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"10.8.2","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.17.0","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.1.8"},"optionalDependencies":{"mysql2":"^3.11.0"},"_npmOperationalInternal":{"tmp":"tmp/spooder_4.5.0_1726172414267_0.9104049416163966","host":"s3://npm-registry-packages"}},"4.5.1":{"name":"spooder","version":"4.5.1","_id":"spooder@4.5.1","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"9c8ddfa26fb0cfc69736f9956f136de9cb515e09","tarball":"https://registry.npmjs.org/spooder/-/spooder-4.5.1.tgz","fileCount":10,"integrity":"sha512-dYwKHcpWPCbDncbka6rzPvdp+HxOht5O0ciFVUWSAyOazoIf+YVF//qbSyTK6iGhLVhX7VQLb8YzFIPprtt2oQ==","signatures":[{"sig":"MEUCIFXCzvt6SjNupLCOD8UWr53Cg8fXdM/4IbAkds5rc2+7AiEA26+khU6GZ9BzBlF1JDGADYcIVCLhEWTwjTPCpSy/d20=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":99030},"type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts"}},"gitHead":"ad72c9c063e49365cffab797743af781affd04b7","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"10.8.2","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.17.0","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.1.8"},"optionalDependencies":{"mysql2":"^3.11.0"},"_npmOperationalInternal":{"tmp":"tmp/spooder_4.5.1_1726231339660_0.4577045210706854","host":"s3://npm-registry-packages"}},"4.5.2":{"name":"spooder","version":"4.5.2","_id":"spooder@4.5.2","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"b679c53e5a17e6503efa6bc3cbf1e6dae41991c5","tarball":"https://registry.npmjs.org/spooder/-/spooder-4.5.2.tgz","fileCount":10,"integrity":"sha512-SFf8KAJRJVHDF5xGlEmOE4ZsSb3AO1ic9WaPZVH8CCLtniDsvwhN4WQ3CDVaAED2C27erytBApc7imWZ+xFjyw==","signatures":[{"sig":"MEYCIQDPEZMrizLwlHPX56XCjHThz6DTQkxecQ3J73zsjG652wIhAMWN+3Z8uKWrkphRtoUnM8KbtttRhso45f4MAAh8EWcE","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":99316},"type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts"}},"gitHead":"3c21f7efdf8294e56d9a34bd393804f14926b11e","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"10.8.2","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.17.0","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.1.8"},"optionalDependencies":{"mysql2":"^3.11.0"},"_npmOperationalInternal":{"tmp":"tmp/spooder_4.5.2_1726233165424_0.6938315455364856","host":"s3://npm-registry-packages"}},"4.5.3":{"name":"spooder","version":"4.5.3","_id":"spooder@4.5.3","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"81a89a950e95091f430c646471bf930e9a0657e9","tarball":"https://registry.npmjs.org/spooder/-/spooder-4.5.3.tgz","fileCount":10,"integrity":"sha512-sz38ZB27wg3CTUj5HvbeItx21HrFesZbqO09v6r24obKR+sG83Xvebg0ldT43Cx8USK+VPoMpdY4l3sZZOoKZQ==","signatures":[{"sig":"MEQCIDhD65WzYYBIgXBIzttCIvIP9cjp/L0EMkMiuLHE1oFdAiAW7npH6Bifan6KzqvIzoyHfNvuJzwZrYpE+hSMkd/f1w==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":99391},"type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts"}},"gitHead":"a6bd157c2c502414dcecfb416c161134de376af3","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"10.8.2","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.17.0","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.1.8"},"optionalDependencies":{"mysql2":"^3.11.0"},"_npmOperationalInternal":{"tmp":"tmp/spooder_4.5.3_1726233487278_0.3563276309769954","host":"s3://npm-registry-packages"}},"4.5.4":{"name":"spooder","version":"4.5.4","_id":"spooder@4.5.4","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"d050883d0700cd16d23f930216bfd4f4d4a4172f","tarball":"https://registry.npmjs.org/spooder/-/spooder-4.5.4.tgz","fileCount":10,"integrity":"sha512-QPODT7MFyCteCWIaDtBFePGtHMUw7WOxUAhEsNZ6cLXJ1B+RV/kNjaWxBu8MbOWh8aGhDqgazyCPHScnW2PU5Q==","signatures":[{"sig":"MEYCIQDBeBU2dNtrp3TmIXHBD1P3YO9ZXNnnTZr32X3tCuxdoAIhAJ/dQlH7PTqzuYAvNif94/29OmYqkm15nlmmFZWjSG+F","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":99581},"type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts"}},"gitHead":"c51cadb0f7fe1b3571e9c447e5b5b2a0511d4810","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"10.8.2","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.18.0","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.1.8"},"optionalDependencies":{"mysql2":"^3.11.0"},"_npmOperationalInternal":{"tmp":"tmp/spooder_4.5.4_1731450304704_0.4967269347465362","host":"s3://npm-registry-packages"}},"4.5.5":{"name":"spooder","version":"4.5.5","_id":"spooder@4.5.5","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"bb92244311871b3dcbfdc50126b2ca2527fba453","tarball":"https://registry.npmjs.org/spooder/-/spooder-4.5.5.tgz","fileCount":10,"integrity":"sha512-PJoTRKipvWBxF4RCddMtK1Z0a7ucLEN0s6KLmVcaT3ugbj2lluKi+MD5TcRi4h9GKzU7Gef5vCDn+llOXZO6kA==","signatures":[{"sig":"MEQCIEbv4LYYPRqy0wzSqJzKLm7fUKREo85fh6FpgbMaD1ngAiBM4k1350138m+DV8w8MUyZZmFpEFrbkVa5CZNWTxAR2A==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":99597},"type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts"}},"gitHead":"431f45eadb31b5ab5063caeef436b84b00554eb5","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"10.8.2","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.18.0","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.1.8"},"optionalDependencies":{"mysql2":"^3.11.0"},"_npmOperationalInternal":{"tmp":"tmp/spooder_4.5.5_1731451016275_0.590295463869204","host":"s3://npm-registry-packages"}},"4.5.6":{"name":"spooder","version":"4.5.6","_id":"spooder@4.5.6","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"91813b0efaeb5e1e56614177bba1e8e107927442","tarball":"https://registry.npmjs.org/spooder/-/spooder-4.5.6.tgz","fileCount":10,"integrity":"sha512-5sODf4ZuI9rx9qfbUriKC+XcKJK8XiWuHxXgkwsMhwgMRDqWT5TMI1crmJWVra7OeT/sT8EvVtRrOp6jXTuaeA==","signatures":[{"sig":"MEQCIAfKsOByWxE6IjMiV1sLkOiY9xRN5wqK4BUO5iCO/7euAiAcxMDiwdud4famSbERdd9tjFk8n+Xgvr2zM0jEPLxl+A==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":100248},"type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts"}},"gitHead":"743071d61693e080a99f79f2af7ccb63ee30221a","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"10.8.2","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.18.1","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.1.8"},"optionalDependencies":{"mysql2":"^3.11.0"},"_npmOperationalInternal":{"tmp":"tmp/spooder_4.5.6_1732616788547_0.5243853278058639","host":"s3://npm-registry-packages"}},"4.5.7":{"name":"spooder","version":"4.5.7","_id":"spooder@4.5.7","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"dd99bd1c2180887ee3a1fc165565831a130638d3","tarball":"https://registry.npmjs.org/spooder/-/spooder-4.5.7.tgz","fileCount":10,"integrity":"sha512-Xx+nVGukVG90ysXB0m96Zyq44SLuvHnD1f3cMbUvO4bISwi9soFUTH2MPPikEfyyXU+UZFu+Mp46VxBe4A31XA==","signatures":[{"sig":"MEUCIDoRLyhuXf0xUXYg17iabzY4626e9LtvD3SQxOPG3NoYAiEAgy34Qru0ZxGQ3CEK3TkiJaj7WfKMiDL0dLAZr5lIK0E=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":100414},"type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts"}},"gitHead":"1c23b1ccfd3be6acc023d6f8c8b5b13874e0d83b","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"10.8.2","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.18.1","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.1.8"},"optionalDependencies":{"mysql2":"^3.11.0"},"_npmOperationalInternal":{"tmp":"tmp/spooder_4.5.7_1732718026008_0.0739851460416443","host":"s3://npm-registry-packages"}},"4.5.8":{"name":"spooder","version":"4.5.8","_id":"spooder@4.5.8","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"c67266dda78f896bc972fe80b182b6b67609d999","tarball":"https://registry.npmjs.org/spooder/-/spooder-4.5.8.tgz","fileCount":10,"integrity":"sha512-3uSmbHlZzsQR8Td1yPlvtHBCabvl3GILVsCcoL9zvfU4njOSLWklg8wPueM1kUMMRaPOTznVIrciPPbCS4dlLg==","signatures":[{"sig":"MEYCIQCYm6cJsEoVZtRQ3fGUOhsrOnBks+qu/v750qVs5VqpMQIhAL2Ejue8LHj+oE6Omk9j6eV62HHAwCleBRNV2UO8nNBa","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":101567},"type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts"}},"gitHead":"78bc9a1d456510413292c4bad9a4c120dfe91c7a","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"10.8.2","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.18.1","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.1.8"},"optionalDependencies":{"mysql2":"^3.11.0"},"_npmOperationalInternal":{"tmp":"tmp/spooder_4.5.8_1733842071764_0.21352472211530293","host":"s3://npm-registry-packages-npm-production"}},"4.5.9":{"name":"spooder","version":"4.5.9","_id":"spooder@4.5.9","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"91adcf7c0963eb24e64923394fd716adc9460f99","tarball":"https://registry.npmjs.org/spooder/-/spooder-4.5.9.tgz","fileCount":11,"integrity":"sha512-EKVhRgNPwKSFnXi2LYDyVgNhtQWrkhqRmH3ReBLV1+2rG42BKue7tguzqZA8x/xgkFHfbTdOF/Qsbo5Jm37Y0Q==","signatures":[{"sig":"MEUCIQCzgU6pqVHeShpFVjk3y3bBmqJsP3hoVRmHp4WIKbDLewIgBY1iEMW8OFYDpYDAiOMz+QSaofdwknDrqmEAdiq8t9Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":107978},"type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts"}},"gitHead":"e11d63abf2833c70f05087c84c33bf47cf2a9b8f","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"10.8.2","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.18.1","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.1.8"},"optionalDependencies":{"mysql2":"^3.11.0"},"_npmOperationalInternal":{"tmp":"tmp/spooder_4.5.9_1737651762819_0.30853884337876414","host":"s3://npm-registry-packages-npm-production"}},"4.5.10":{"name":"spooder","version":"4.5.10","_id":"spooder@4.5.10","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"eee8dd12607032a79d95552155f5a52ab5c206b4","tarball":"https://registry.npmjs.org/spooder/-/spooder-4.5.10.tgz","fileCount":11,"integrity":"sha512-XjFyMxbMLqWJ49thopgBxXISWwcYSLTqSymrAxu/pBfc1Q8u4zoDsuGQEgKt0enyEXTaKbnZskDLQyNJVqd+Rg==","signatures":[{"sig":"MEQCIE8zC/o+O7k354gcazjgJGKKlx83/cvn0ZmoqN+HHYG1AiA+N1wmFuBrsoeMAGFp4uiaHF2Ct2JR4puMX8Ejah0sHA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":107781},"type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts"}},"gitHead":"e07ae9206ed87c226d79ed6278ac0f66dc65ef35","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"10.8.2","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.19.0","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.1.8"},"optionalDependencies":{"mysql2":"^3.11.0"},"_npmOperationalInternal":{"tmp":"tmp/spooder_4.5.10_1746009403724_0.9774805319463615","host":"s3://npm-registry-packages-npm-production"}},"4.5.11":{"name":"spooder","version":"4.5.11","_id":"spooder@4.5.11","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"c2190f47c26552c20fd304e7fc4ba2224064bf82","tarball":"https://registry.npmjs.org/spooder/-/spooder-4.5.11.tgz","fileCount":11,"integrity":"sha512-T1jfUGlC0773b5uFRNPdQbFdAGJCriD0v3CjQkru7VA/tCnDTjDoHtsnIiqP7pQNi047L8E+5g+VpIyX4x7RVw==","signatures":[{"sig":"MEYCIQDq+9gB+fssLuzKwtBf0r6XfsaYr5MF2xuzTfIUOm1okwIhAP+6pKImZoAB2rfkkQu5QKOVI0PXT/S+PitWSEpj0TuP","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":107774},"type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts"}},"gitHead":"d714a08c6be8caf12392ce1bfeba6a18050bb66c","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"10.8.2","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.19.0","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.1.8"},"optionalDependencies":{"mysql2":"^3.11.0"},"_npmOperationalInternal":{"tmp":"tmp/spooder_4.5.11_1746010070854_0.8699559961854229","host":"s3://npm-registry-packages-npm-production"}},"4.5.12":{"name":"spooder","version":"4.5.12","_id":"spooder@4.5.12","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"66f7d2016904ce0f49c0bca14cd64e2b69831317","tarball":"https://registry.npmjs.org/spooder/-/spooder-4.5.12.tgz","fileCount":11,"integrity":"sha512-3dne8O9b3BJsV82v6NQ2a5EO7lRwzY22RZACLUn6Wk4jj3ELXq3XVBbSxcMDtPRtIRDFhE+qOCCy31HQY95g+w==","signatures":[{"sig":"MEQCIAxHDuVOoqr/seaPlN4Y3kN0mJMFE55e5wzpJzYz/HtZAiA+qLJOpwDseHu05BJ+5Z2FLK+khlabmuOELvGymSCv0A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":107785},"type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts"}},"gitHead":"bb5b87f131be0e5299579ddaba42ee8d354e24ae","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"10.8.2","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.19.0","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.1.8"},"optionalDependencies":{"mysql2":"^3.11.0"},"_npmOperationalInternal":{"tmp":"tmp/spooder_4.5.12_1746010353375_0.12665115102329905","host":"s3://npm-registry-packages-npm-production"}},"4.5.13":{"name":"spooder","version":"4.5.13","_id":"spooder@4.5.13","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"8d4db37aa3fa2ea42a623ad4cf467200278b16c8","tarball":"https://registry.npmjs.org/spooder/-/spooder-4.5.13.tgz","fileCount":11,"integrity":"sha512-NMDJ3bb1FkxUOhPZl7Eh0Qq/CRBsRSTNS8/+QvP26h4TTPqF8EHz/jJ5kKRGvSIz3PQC0oby5+WAioTGFXPx3Q==","signatures":[{"sig":"MEUCIQDReETJ4lxtu/xkH2+N6o2KEO2BWWQDKknrWv2mFgbP6AIgLhWLqhGO9AodGo8Os2YClLs8z0WeOY1lVmjrAoob8xQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":107768},"type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts"}},"gitHead":"f4fc84fbb47010cf8428c14194501907e5235e78","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"10.8.2","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.19.0","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.1.8"},"optionalDependencies":{"mysql2":"^3.11.0"},"_npmOperationalInternal":{"tmp":"tmp/spooder_4.5.13_1746010831639_0.3053899080556688","host":"s3://npm-registry-packages-npm-production"}},"4.6.0":{"name":"spooder","version":"4.6.0","_id":"spooder@4.6.0","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"fb449e8d4edb2916635d78f20c1fbad744f0e20e","tarball":"https://registry.npmjs.org/spooder/-/spooder-4.6.0.tgz","fileCount":11,"integrity":"sha512-bDu5OB7721/D0Lc7/gul4e1eqezI5db+STKtwoZn1oCvdM2+dsKNlEZbnBRdWefSOFh7UvjjfQFAmo+8ojaDCQ==","signatures":[{"sig":"MEUCIQDhapIfMqxj0RZy+Ws8WdXu38FIjlrObF547Cc9o46TvAIgEMlb+4e9fR6LgiNGmKzVUyo83jn8GXyYzd4e5To34K0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":107432},"type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts"}},"gitHead":"bb0b436563941c30dfc625222d639e41d33a97ed","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"10.8.2","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.19.1","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.1.8"},"optionalDependencies":{"mysql2":"^3.11.0"},"_npmOperationalInternal":{"tmp":"tmp/spooder_4.6.0_1746524781093_0.25987737121556576","host":"s3://npm-registry-packages-npm-production"}},"4.6.1":{"name":"spooder","version":"4.6.1","_id":"spooder@4.6.1","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"83d2e9455dab2b8509d889c0e7050549de82c902","tarball":"https://registry.npmjs.org/spooder/-/spooder-4.6.1.tgz","fileCount":11,"integrity":"sha512-2SDjijouUe5qWWkPvKXwjuN/oM1uwCWLkkvS2fzuLCxRFDkMgNDYWLoS+aM1DA65tUr83B/5dNBhH2BSFQMX5w==","signatures":[{"sig":"MEYCIQC8cnlMBh5OxR+MJ9N3HpkRNv9pu7l+4trOEyz/qY5kOAIhAOpfVheLxTqZ5GsHxVYmNQSCMP973pIWfjZsl37mNu2v","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":107444},"type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts"}},"gitHead":"67698200a175213838c3b1fded95437bf6fb1ca0","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"10.8.2","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.19.1","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.1.8"},"optionalDependencies":{"mysql2":"^3.11.0"},"_npmOperationalInternal":{"tmp":"tmp/spooder_4.6.1_1747905946368_0.7765412510375802","host":"s3://npm-registry-packages-npm-production"}},"4.6.2":{"name":"spooder","version":"4.6.2","_id":"spooder@4.6.2","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"1a469ac69c237b1cdf6800e237a194b79557ecaa","tarball":"https://registry.npmjs.org/spooder/-/spooder-4.6.2.tgz","fileCount":11,"integrity":"sha512-+8wxrH6ENf1Z2dHEgYnD1KxcwTTwlx9UxyvnJpAChhhhfLLijRoLRIYO1K4bZbB3tlHkPlQQdq37OFoGN3gf7A==","signatures":[{"sig":"MEUCIFjQi7bPUdByd7H5ZIFDKRo75aG16geSiIAH/WAmF6fWAiEAlHACWVN/dB15+3GQQCy2xGdgzfJ7VbrTm2Wq2Y2EcNo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":107636},"type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts"}},"gitHead":"ceef70aa8061358e42f0fe3e3c94eaf994756660","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"10.8.2","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.19.2","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.1.8"},"optionalDependencies":{"mysql2":"^3.11.0"},"_npmOperationalInternal":{"tmp":"tmp/spooder_4.6.2_1749733678074_0.6635682716816182","host":"s3://npm-registry-packages-npm-production"}},"5.0.0":{"name":"spooder","version":"5.0.0","_id":"spooder@5.0.0","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"f70aa31890e68e39358a63c98d5a804644086525","tarball":"https://registry.npmjs.org/spooder/-/spooder-5.0.0.tgz","fileCount":11,"integrity":"sha512-VxeRZjG+KcQrUjgsz+Db7wNYjHBLJcuSRXJUr3kdqPnQGwiQyiD2GBBZGhp+L/8s3xX8P5aACbtjOsK54A7Cnw==","signatures":[{"sig":"MEYCIQCKdXMllbj+xKhVIhY9GmEAK7C8F6q+IoKXlUYtNIDhfwIhAIF4yPAm4h+xGB8rKG45Tn7vGI/7NjkFYpcINRGnxg/Y","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":172760},"type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts"}},"gitHead":"c7be99cce8ba0ef41292a1ea21eff7dc37341337","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"10.8.2","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.19.3","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.2.16"},"optionalDependencies":{"mysql2":"^3.11.0"},"_npmOperationalInternal":{"tmp":"tmp/spooder_5.0.0_1752956697503_0.154288130608349","host":"s3://npm-registry-packages-npm-production"}},"5.0.1":{"name":"spooder","version":"5.0.1","_id":"spooder@5.0.1","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"f954776e4a45a7a2cbb4dc3f533c2038f6f71941","tarball":"https://registry.npmjs.org/spooder/-/spooder-5.0.1.tgz","fileCount":11,"integrity":"sha512-FWrCY/QHkssz8WCh20s6kINjuxnhbHxtR+T1Hj87PnW7p65UCnfO3/9ZQmBH8o8qWpiz8OImhhCxQRE20qgNMg==","signatures":[{"sig":"MEQCIEK2lsckepd0PfN+omilFLAWomk2/rZ/zgU1nH0OKK3zAiBhAXcZaffwNqj50iSJ0o6esqUtPaqGX712XZ2zUrML9w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":172760},"type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts"}},"gitHead":"774d544873d3dce8a8334d94f5ada6659191d39b","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"10.8.2","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.19.3","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.2.16"},"optionalDependencies":{"mysql2":"^3.11.0"},"_npmOperationalInternal":{"tmp":"tmp/spooder_5.0.1_1752964629782_0.04098670943156879","host":"s3://npm-registry-packages-npm-production"}},"5.0.2":{"name":"spooder","version":"5.0.2","_id":"spooder@5.0.2","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"84863f5957028e578483d3ab67ffcd9c9bac3e91","tarball":"https://registry.npmjs.org/spooder/-/spooder-5.0.2.tgz","fileCount":11,"integrity":"sha512-UESu03cPz9c4y+FhiLZ9ijplFrNW5iHBjQgTcy9OzewRkdpsnDXMRkYbt19uCoFLGjHkTaP4f7UVtUCE4ct9Ug==","signatures":[{"sig":"MEUCIQCok30u66jMqlsKsYn/A7YopOGKW9YVM0y/G3JUpIs4NAIgV5KEr0t+9Pr4dGnipTGn3G6BRdfVMvNCC5jpjS5sTfQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":177826},"type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts"}},"gitHead":"abbaa02cafa2456a3f18e4b7e49e0e7221d3aefa","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"10.8.2","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.19.3","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.2.16"},"optionalDependencies":{"mysql2":"^3.11.0"},"_npmOperationalInternal":{"tmp":"tmp/spooder_5.0.2_1752965077068_0.9324007276227886","host":"s3://npm-registry-packages-npm-production"}},"5.0.3":{"name":"spooder","version":"5.0.3","_id":"spooder@5.0.3","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"cca537a9a7f9d1849e9ab7fddf38d457d6d5fd81","tarball":"https://registry.npmjs.org/spooder/-/spooder-5.0.3.tgz","fileCount":11,"integrity":"sha512-L5LD4Ij7qix4+7bmHYOamH3WaUKkl+V4vf1P/fvm7Q45SPd4Ge58kkoJ4zo65BIE+Qeyybpz3GS+SDOoHM+96A==","signatures":[{"sig":"MEYCIQCSCk+UD2t0NIwxwojibXW2KIgjfV/ty9JGwApzyKrVCgIhAPaQiyUkJ+a9P2rHAXLIXM+s0d5HK/aa4/pjXAael4xt","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":178079},"type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts"}},"gitHead":"138c54002ee8a64a7ccb33080698d018eb0c0ad4","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"10.8.2","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.19.3","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.2.16"},"optionalDependencies":{"mysql2":"^3.11.0"},"_npmOperationalInternal":{"tmp":"tmp/spooder_5.0.3_1753002129879_0.5417382066123182","host":"s3://npm-registry-packages-npm-production"}},"5.1.0":{"name":"spooder","version":"5.1.0","_id":"spooder@5.1.0","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"c4917a7bd6625b2d7e8180551ab64520cdfb48bb","tarball":"https://registry.npmjs.org/spooder/-/spooder-5.1.0.tgz","fileCount":11,"integrity":"sha512-hSXjtox4yGvlvhL8EupK9SGvMlTSCU80VSoaK7+jPytNFAO05zROhp3Vf7zDNksbWti7Ol5O1HKpT9VEWqR7fQ==","signatures":[{"sig":"MEUCIF67QL35Hf4h2gZvo4e2hccKbjRu0EKM2vetGroC3J0yAiEAzerJq2FL22U/r2fQZKlW2IJpoyfiYicCLXfUx8s2OZY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":182866},"type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts"}},"gitHead":"61609de84d3f582291ebba175835aa8ed7d4f16c","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"10.8.2","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.19.3","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.2.16"},"optionalDependencies":{"mysql2":"^3.11.0"},"_npmOperationalInternal":{"tmp":"tmp/spooder_5.1.0_1753091876933_0.8879876894247376","host":"s3://npm-registry-packages-npm-production"}},"5.1.1":{"name":"spooder","version":"5.1.1","_id":"spooder@5.1.1","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"962f80864df0bf9c2c494e3f4e3f742c870213a0","tarball":"https://registry.npmjs.org/spooder/-/spooder-5.1.1.tgz","fileCount":11,"integrity":"sha512-ZljfzOd8jbWO4v84JWM/Vs+4HZwhOF1BRhV/gB+EmhOrDPten6edfDT4BAtu8567ht7wybejaU31hgisYTBXxQ==","signatures":[{"sig":"MEUCIQDysY88c4WId82+iR5BOg/wmwFm1kQnAAoJOWNzOuycugIgR5LIl3jQ0fQ34uaMRKp1GV0IMEfe5ZQuPGnNRzF41XE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":183496},"type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts"}},"gitHead":"b7356cea2ddaf9dad27f56fbdbca23ddf48cd4d0","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"10.8.2","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.19.3","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.2.16"},"optionalDependencies":{"mysql2":"^3.11.0"},"_npmOperationalInternal":{"tmp":"tmp/spooder_5.1.1_1753093168570_0.03126488865541943","host":"s3://npm-registry-packages-npm-production"}},"5.1.2":{"name":"spooder","version":"5.1.2","_id":"spooder@5.1.2","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"b905b7aecfbcb654f0d4144ac719b1526511d1b5","tarball":"https://registry.npmjs.org/spooder/-/spooder-5.1.2.tgz","fileCount":11,"integrity":"sha512-/RwYZaWDvUoOrpLZ59wb1fzvglioPzH+a7bwsa6KW4C3+o4I5O5+i6yQjyOOBHg8A8qZUzuiAlVtlV3/J0ZFPQ==","signatures":[{"sig":"MEUCIQCARZiR/GXNWeatpVww1bUPhykVlSmMQNJm8FFJOwNydQIgCLD4KwDEFupFbPXbinb0SlI7bOWZRh2+CS/iSCR8pqQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":183477},"type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts"}},"gitHead":"8f1fa8a0ec332b7d8062f077215be3d0fad76c2d","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"10.8.2","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.19.3","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.2.16"},"optionalDependencies":{"mysql2":"^3.11.0"},"_npmOperationalInternal":{"tmp":"tmp/spooder_5.1.2_1753096626157_0.1513958347510429","host":"s3://npm-registry-packages-npm-production"}},"5.1.3":{"name":"spooder","version":"5.1.3","_id":"spooder@5.1.3","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"c319754019859421f55c46d8e024b661013d7973","tarball":"https://registry.npmjs.org/spooder/-/spooder-5.1.3.tgz","fileCount":11,"integrity":"sha512-e3kASrECNRl5bW21yHhR7y2pYLhdnvZTKCsqrTiiRANoLFtCfScWwmHU5Qe8UzY7uwAYOXaCc/akyhQy9R7EOw==","signatures":[{"sig":"MEUCIQDj/dY6GGzmFL1MYyecfSadk/r4Ok7GMMxo9UB8Rtgp8AIgEp/Yjfc6vomqf/9LExajoq5NzNFAi6xxsnCaFSqb9wU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":183978},"type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts"}},"gitHead":"bd995c8ea13c530daebf554b839835a3f05e582a","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"10.8.2","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.19.3","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.2.16"},"optionalDependencies":{"mysql2":"^3.11.0"},"_npmOperationalInternal":{"tmp":"tmp/spooder_5.1.3_1753100235476_0.47662286068590176","host":"s3://npm-registry-packages-npm-production"}},"5.1.4":{"name":"spooder","version":"5.1.4","_id":"spooder@5.1.4","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"f117ce4ff3adec826ae731c495c3ed12f7b0eabc","tarball":"https://registry.npmjs.org/spooder/-/spooder-5.1.4.tgz","fileCount":11,"integrity":"sha512-DgLhoiMDFn9wmv6QOMz3ndVqqRXW57tzxGIv9E/BUf+6rcEW+/tzI1F3oeAjXyfmXQkOmNid0qzZ/tmyBi7H7w==","signatures":[{"sig":"MEUCIEHKjHrGwVYnbgHI8cl4S2Qv0mvaOfViSAac7WbbaNBjAiEA3Z9wuiNkkW/5pN9+f25c3EDPbdqG+A4yNsmyUPu1iAg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":184421},"type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts"}},"gitHead":"3c2fa8f73e84bdefedaa2b874b715f8584957965","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"10.8.2","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.19.3","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.2.16"},"optionalDependencies":{"mysql2":"^3.11.0"},"_npmOperationalInternal":{"tmp":"tmp/spooder_5.1.4_1753101006558_0.8570433931068167","host":"s3://npm-registry-packages-npm-production"}},"5.1.5":{"name":"spooder","version":"5.1.5","_id":"spooder@5.1.5","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"a7ea834c7bf5ac63a9f35d0e6fda9f784670b5d5","tarball":"https://registry.npmjs.org/spooder/-/spooder-5.1.5.tgz","fileCount":11,"integrity":"sha512-TVJnCdMBGKc4EM7QadzzyaJdcljV/V3dv6T0NUCoeyMzuFJskWskhn1ixQ5QE/VV4x/sBwS3V6vI8zgU9c43lw==","signatures":[{"sig":"MEYCIQCFRo7KzAzUPI62tcaQHBARkiVsf3Fb7c7/jAScOr0rAQIhAJ2jRVOBPsRPXpOnHdPjfnh3yf0WX21CeVwsUfbdXHV+","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":184475},"main":"./src/api.ts","type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts","default":"./src/api.ts"}},"gitHead":"15b068986321e45a54d677401e351b3bc62f2bad","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"10.8.2","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.19.4","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.2.16"},"optionalDependencies":{"mysql2":"^3.11.0"},"_npmOperationalInternal":{"tmp":"tmp/spooder_5.1.5_1753349268116_0.4811913918692232","host":"s3://npm-registry-packages-npm-production"}},"5.1.6":{"name":"spooder","version":"5.1.6","_id":"spooder@5.1.6","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"bb4e09ef2545dc72d680558cf0b67838550e7b3d","tarball":"https://registry.npmjs.org/spooder/-/spooder-5.1.6.tgz","fileCount":11,"integrity":"sha512-Um/6lvQRHutWF2LDKxmT0fkxqrjH33qVMqq+tyM5ap75CEwxatBtnyFkpmuzsNWC8y/RsMUEK3Y6g2w5sS8J6Q==","signatures":[{"sig":"MEUCICpeH3oMHiKpVO2ZBf9zXndOSkEyuHcr3HgTj6pbdG1SAiEAj1WTKAcYIR+Z6Trvy4uPH5R6eOwS4oNgUQyX7Nxljwo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":184577},"main":"./src/api.ts","type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts","default":"./src/api.ts"}},"gitHead":"14de8a62bea8882152421ce0137a72d04284655f","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"10.8.2","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.19.4","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.2.16"},"optionalDependencies":{"mysql2":"^3.11.0"},"_npmOperationalInternal":{"tmp":"tmp/spooder_5.1.6_1753455637961_0.399751317612687","host":"s3://npm-registry-packages-npm-production"}},"5.1.7":{"name":"spooder","version":"5.1.7","_id":"spooder@5.1.7","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"d15d9334de7cbbcb144de9d5b8bab3f6569052ce","tarball":"https://registry.npmjs.org/spooder/-/spooder-5.1.7.tgz","fileCount":11,"integrity":"sha512-g2Bx6YsFj/+YabuPCXBpjyPWaHcGlWvcUHIrXpqH/MZNzZEhef/MGUIwdNX0DkinpRnJGTtIno3l5NBtAb6HsQ==","signatures":[{"sig":"MEQCIGCLVn35RhfqJ5ZeXr2NR6qg6xsr/MpXJnUoan3RJQRgAiAp8xo8eB334Gk5BhY+lOlFoSGtT+lKNn3U2ywUjlGCpA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":185076},"main":"./src/api.ts","type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts","default":"./src/api.ts"}},"gitHead":"f06f948c51a05576cc58e70846e5be25b163ad1a","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"10.8.2","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.19.4","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.2.16"},"optionalDependencies":{"mysql2":"^3.11.0"},"_npmOperationalInternal":{"tmp":"tmp/spooder_5.1.7_1755344447517_0.07766343469784709","host":"s3://npm-registry-packages-npm-production"}},"5.1.8":{"name":"spooder","version":"5.1.8","_id":"spooder@5.1.8","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"43750bc56d05287b01096d2ed9c377ff8c89ef19","tarball":"https://registry.npmjs.org/spooder/-/spooder-5.1.8.tgz","fileCount":11,"integrity":"sha512-qFJ1TijNah+IFS+t93JU+xu+7DDIVCUv5qCJSopJ31gF50MwAAtDfU5aV/G7nRygVNvKEzDrPXFoMe6FOZhOsQ==","signatures":[{"sig":"MEUCIEvFTu9msN/kHF4v4I/M/u83JRa3sr6qOYYSUJKhR8OQAiEAsQ0pRgG76vP4Bd1MGXQTlUIwqKvt2Vc0lrIZtgjj5LM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":185153},"main":"./src/api.ts","type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts","default":"./src/api.ts"}},"gitHead":"42f7ef74275f07042580338ab17d826600d7a2bd","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"10.8.2","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.19.4","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.2.16"},"optionalDependencies":{"mysql2":"^3.11.0"},"_npmOperationalInternal":{"tmp":"tmp/spooder_5.1.8_1755367106990_0.6673198339597937","host":"s3://npm-registry-packages-npm-production"}},"5.1.9":{"name":"spooder","version":"5.1.9","_id":"spooder@5.1.9","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"8f4a62071d90710bc17f48a6eceb29c7057548dc","tarball":"https://registry.npmjs.org/spooder/-/spooder-5.1.9.tgz","fileCount":11,"integrity":"sha512-Gu6+Ov9BgsyJVRfXmJi1iuJRXnSC2tPlpX8XOSB5L1lhKvfMQxu2e461Wq79rgvHTWgFgjDz1vCrPI+op4hZOA==","signatures":[{"sig":"MEUCIACJCIIJCVH1bUL4GQQSvlBM4olpOQTNB4uMmf7JVdWxAiEA7PO7z+8X2iUFD+8SnBZphrwPrBxjeMktvRIU1s/Zu6M=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":185222},"main":"./src/api.ts","type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts","default":"./src/api.ts"}},"gitHead":"b39283f71d16bd111ee109426c2e79f15782e01c","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"10.8.2","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.19.4","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.2.20"},"optionalDependencies":{"mysql2":"^3.11.0"},"_npmOperationalInternal":{"tmp":"tmp/spooder_5.1.9_1756489543727_0.03197394031332412","host":"s3://npm-registry-packages-npm-production"}},"5.1.10":{"name":"spooder","version":"5.1.10","_id":"spooder@5.1.10","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"c0f45b3df5656b87bf4a1934e28895840c97012d","tarball":"https://registry.npmjs.org/spooder/-/spooder-5.1.10.tgz","fileCount":11,"integrity":"sha512-x0f4NHTqAkd6hkEmCM/n80NA882485N91XGoWgD1SBoen86iKYfA8cI+2kcFSFz5iPj3wl/8T0S2WkbyCpbDdQ==","signatures":[{"sig":"MEYCIQCKlJEJL9/Rq8KQk6tM9vQhAsJZJVoASSTyZyCJsGyagwIhAKWPrMFSgE12uiL/eGA/aer0Zo204O10yR7DXTuNX7UX","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":185240},"main":"./src/api.ts","type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts","default":"./src/api.ts"}},"gitHead":"0971b7b23d535277c6e990b37463879d871d65c6","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"10.8.2","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.19.4","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.2.20"},"optionalDependencies":{"mysql2":"^3.11.0"},"_npmOperationalInternal":{"tmp":"tmp/spooder_5.1.10_1756504170989_0.767987326783744","host":"s3://npm-registry-packages-npm-production"}},"5.1.11":{"name":"spooder","version":"5.1.11","_id":"spooder@5.1.11","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"d6baa45eb9111434061fe329f7a2120c78b3aad4","tarball":"https://registry.npmjs.org/spooder/-/spooder-5.1.11.tgz","fileCount":11,"integrity":"sha512-ql4y8KNQ8ebBPm0rhVO2gor+1Kh4Fd88wJF1ydrw/5jT0COeKbPkMsfgn9Jxw7sLttDP0+3fS1F5EwNv6c1uxQ==","signatures":[{"sig":"MEUCIQD4ZWGV7Kf0lUPUSmrbHAfccTNCBTXU9mTmpxHh/FzkOwIgJ51QxGDZqc7dA3Sp/5toS8z86/52kTY6P5jdxUepmsA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":188489},"main":"./src/api.ts","type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts","default":"./src/api.ts"}},"gitHead":"5aca917e5606d05c34f096656135dce4d1da6ed9","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"10.8.2","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.19.4","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.2.20"},"optionalDependencies":{"mysql2":"^3.11.0"},"_npmOperationalInternal":{"tmp":"tmp/spooder_5.1.11_1757411137209_0.7935812468350738","host":"s3://npm-registry-packages-npm-production"}},"5.1.12":{"name":"spooder","version":"5.1.12","_id":"spooder@5.1.12","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"851a7cd75a6d0ee38d86bb6d20dc2533dd5743cb","tarball":"https://registry.npmjs.org/spooder/-/spooder-5.1.12.tgz","fileCount":11,"integrity":"sha512-DebKZBcM0hz2dXmbzU9Sbrwz4JX/XISMuJBRO+/60TbZ2TvsD31wigaECfCRktNQR+I1VUZ1TPdOlNGUmdR/Ag==","signatures":[{"sig":"MEQCIEK/GRPg8E45D+8+uQak4qxVmggtak/oJT6zzakyIy2QAiAyaj5dy108KEy0QH0EXeIm08SLs6oVPSMYzKwQ6LXt4Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":188884},"main":"./src/api.ts","type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts","default":"./src/api.ts"}},"gitHead":"a7160dbb817119b4b05aa23c54d909c8ca2ae544","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"10.8.2","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.19.4","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.2.20"},"optionalDependencies":{"mysql2":"^3.11.0"},"_npmOperationalInternal":{"tmp":"tmp/spooder_5.1.12_1757420371937_0.3643254275371519","host":"s3://npm-registry-packages-npm-production"}},"6.0.0":{"name":"spooder","version":"6.0.0","_id":"spooder@6.0.0","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"1e4c767b1073a6f9173484994a877a1f7d6ec62b","tarball":"https://registry.npmjs.org/spooder/-/spooder-6.0.0.tgz","fileCount":11,"integrity":"sha512-ZdTkJ6xVwBwUdJr+aNaAX5U/6tSxJ0pbmc4Hr11RuUNR+QmNk9eAiH7dEH8AOh7e2bVdlFLSOlliTTtQ+IzsYg==","signatures":[{"sig":"MEYCIQDvg46VPFWC+fgHU2ofVDHVBc5Vmxuz6/Qnsc4ghD1vpAIhALEN53E8mmis2KrNP67tDhZDKQoZ33JXnCjlj6Q0lgXu","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":219333},"main":"./src/api.ts","type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts","default":"./src/api.ts"}},"gitHead":"b10e95db5f595773adb6bdf29d902344f71aca63","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"10.8.2","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.19.5","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.2.20"},"optionalDependencies":{"mysql2":"^3.11.0"},"_npmOperationalInternal":{"tmp":"tmp/spooder_6.0.0_1760371027018_0.8279312740870002","host":"s3://npm-registry-packages-npm-production"}},"6.1.0":{"name":"spooder","version":"6.1.0","author":{"name":"Kruithne","email":"kruithne@gmail.com"},"_id":"spooder@6.1.0","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"bd0ce399d98975929c08c85eaf959af0363bf4bf","tarball":"https://registry.npmjs.org/spooder/-/spooder-6.1.0.tgz","fileCount":11,"integrity":"sha512-PGiMzi3Bibg08Gikzd3P90oWS+vJ7/+EaRmPWaYXhvxCnFeKCCcZI/tLFP/xGTONqfSP7qeCOpmrzdetaLrDeQ==","signatures":[{"sig":"MEUCIGQxLdMOO2QT91hzZYV4ZS9chmQ0QX5dBt53zjZ8FqHJAiEA3Qvl38H4EWSQPjwfEAnYx/ATeDd/dqV908pRbZlHIdE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":182254},"main":"./src/api.ts","type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts","default":"./src/api.ts"}},"gitHead":"cb8a9da6a66434c5c93b9b1540bf506113d83d36","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"10.8.2","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.19.5","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.2.20"},"_npmOperationalInternal":{"tmp":"tmp/spooder_6.1.0_1761651469729_0.6314116777547429","host":"s3://npm-registry-packages-npm-production"}},"6.1.1":{"name":"spooder","version":"6.1.1","author":{"name":"Kruithne","email":"kruithne@gmail.com"},"_id":"spooder@6.1.1","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"0e3c1b3fa416c8922f4babc828c16e0ea1c4e836","tarball":"https://registry.npmjs.org/spooder/-/spooder-6.1.1.tgz","fileCount":11,"integrity":"sha512-WAFNasT7dTMnEdvpCJl/oPoYV5nXIf2ljnjeWRxx+fHahm1YwZHnikaodwGPY0Onwi/FvKMQzxIP36kUQ9w67A==","signatures":[{"sig":"MEUCIEyb0YqLDx95QnagEDHsp60En8YE1/u2bT1fGYHZEcxQAiEAm13gb5t5AVMeqSYYYwyn11JwlBeD8K2SrsubE2TGeHE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":182233},"main":"./src/api.ts","type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts","default":"./src/api.ts"}},"gitHead":"e27f98d810d0c4d36b7a1728e7eff5c70ab456fd","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"10.8.2","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.19.5","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.2.20"},"_npmOperationalInternal":{"tmp":"tmp/spooder_6.1.1_1761653356094_0.5534771460994548","host":"s3://npm-registry-packages-npm-production"}},"6.1.2":{"name":"spooder","version":"6.1.2","author":{"name":"Kruithne","email":"kruithne@gmail.com"},"_id":"spooder@6.1.2","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"4ac3059627cdcd491f631cce3c757632c4682b15","tarball":"https://registry.npmjs.org/spooder/-/spooder-6.1.2.tgz","fileCount":11,"integrity":"sha512-hPevb9IIZBNc6Xe3xK405IK3P2LwqKu5tRS8UZUgE9iPofgBoNS7TryvH0eIK7T/cO2UYNUB14dqbt/1O/lOQw==","signatures":[{"sig":"MEUCIB+qTHu9WJuIKGJfYlWOyQqCqB7QOevCyp46zleCIS9/AiEAs2rp9CQ5lmtdrsZONodnMe5V+Wb/ocfYBS4zVbkm5wg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":183788},"main":"./src/api.ts","type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts","default":"./src/api.ts"}},"gitHead":"0a07310de3ce1da4f21a94836563c655076447a2","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"10.8.2","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.19.5","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.2.20"},"_npmOperationalInternal":{"tmp":"tmp/spooder_6.1.2_1761740950176_0.3960477120755932","host":"s3://npm-registry-packages-npm-production"}},"6.1.3":{"name":"spooder","version":"6.1.3","author":{"name":"Kruithne","email":"kruithne@gmail.com"},"_id":"spooder@6.1.3","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"f04a5f10e822220cd6d167f64c9260bf23996eb8","tarball":"https://registry.npmjs.org/spooder/-/spooder-6.1.3.tgz","fileCount":10,"integrity":"sha512-lTnQc4KkdC7K9ZXSbJrjVFxaJT4McrXPULqZzgiuS3W/GzXisgg42Ofq0aAiQoyOs1kSsaHRz9CR+T3vbOaqVA==","signatures":[{"sig":"MEUCIQDABSN3thtblxy4YRrYaNN9hCPX4r6H1XfwrEjn7pjT/AIgKsIAWoK/h25iNjzvr8waBUF/9+RwWtIFon8OZ2+kLJY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":185118},"main":"./src/api.ts","type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts","default":"./src/api.ts"}},"gitHead":"601836bf9f5cf610ab07a5afaaa60931ee36b0f6","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"10.8.2","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.19.5","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.2.20"},"_npmOperationalInternal":{"tmp":"tmp/spooder_6.1.3_1761748393033_0.7526578778506845","host":"s3://npm-registry-packages-npm-production"}},"6.1.4":{"name":"spooder","version":"6.1.4","author":{"name":"Kruithne","email":"kruithne@gmail.com"},"_id":"spooder@6.1.4","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"f2497f5308044d560df99bec4296298fa7e5b068","tarball":"https://registry.npmjs.org/spooder/-/spooder-6.1.4.tgz","fileCount":10,"integrity":"sha512-WVFYS2I0v06HLE+KPPrMGP4IkJLnHMHxMJuRPesdPbb/Jp58zK42+4P/CsmWmk7bgD/RCui/9VXZHkSux9SpYg==","signatures":[{"sig":"MEUCIFB8ScZ0WtkoU0/zifrqRHohoE76BY08A3ry6NTxtVs9AiEAn0ILsO53cT+glWSbw4gMBLSxegf1xBDmatpPMcXUR58=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":185183},"main":"./src/api.ts","type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts","default":"./src/api.ts"}},"gitHead":"5420d06e79f16c3f25c23116716b0d248f32592f","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"10.8.2","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.19.5","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.2.20"},"_npmOperationalInternal":{"tmp":"tmp/spooder_6.1.4_1761749306556_0.5116507727516961","host":"s3://npm-registry-packages-npm-production"}},"6.1.5":{"name":"spooder","version":"6.1.5","author":{"name":"Kruithne","email":"kruithne@gmail.com"},"_id":"spooder@6.1.5","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"3dcbf1525df02ad5b00f6b6affb2bf7dc353c92d","tarball":"https://registry.npmjs.org/spooder/-/spooder-6.1.5.tgz","fileCount":10,"integrity":"sha512-lU0+vcvcyrerWeHzJEmp6sCBJKbEm8MeBYNXXuGS6Y/tHgC2J77Tb0fSkctaOHMowH/l7wH2OZl94yOFRAXIiw==","signatures":[{"sig":"MEUCIQCPdRUc4FedpRTv2f4Qux8SV2AVWligA0Z4hShBwlgxEwIgNzaSqdoJ90VVgKn4UXxAKJTApxrAPveZMiuPwwcRR0A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":185974},"main":"./src/api.ts","type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts","default":"./src/api.ts"}},"gitHead":"f1634e4d61922e8cd14e98c6749482cee240c3e8","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"10.8.2","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.19.5","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.2.20"},"_npmOperationalInternal":{"tmp":"tmp/spooder_6.1.5_1761831120171_0.5436811644574002","host":"s3://npm-registry-packages-npm-production"}},"6.1.6":{"name":"spooder","version":"6.1.6","author":{"name":"Kruithne","email":"kruithne@gmail.com"},"_id":"spooder@6.1.6","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"07765d1bf4c8daff8e3fd59ca56a3fdd02ba430f","tarball":"https://registry.npmjs.org/spooder/-/spooder-6.1.6.tgz","fileCount":10,"integrity":"sha512-uhOd+fobvC6vCZgk2HsPO5Vm22l2dpcIXxIg4ItLkKsSN65olxGgsr6k3ijef4+M2Y+W6FgT4tVX8KE+snLWkQ==","signatures":[{"sig":"MEYCIQD2d4udOQVTT4LautNJiOj5f5VKf+b24fhCekg922sUtgIhAJyTEcgQHQOHQBnz556JdDma7PvJ8DhxaBJusovsd1sG","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":186074},"main":"./src/api.ts","type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts","default":"./src/api.ts"}},"gitHead":"33f9f30b88445e389d2b1971e6cd08046ddab963","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"10.8.2","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.19.5","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.2.20"},"_npmOperationalInternal":{"tmp":"tmp/spooder_6.1.6_1764345866675_0.8721176393991328","host":"s3://npm-registry-packages-npm-production"}},"6.1.7":{"name":"spooder","version":"6.1.7","author":{"name":"Kruithne","email":"kruithne@gmail.com"},"_id":"spooder@6.1.7","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"2db4b8adbe02bea570fc0ff9dd391df5b28dc1ac","tarball":"https://registry.npmjs.org/spooder/-/spooder-6.1.7.tgz","fileCount":10,"integrity":"sha512-m9/FnQ5HDIjid88nLOlMMNinSesi0QTdvwB94zvfmMWyqDVNvFWUNDV0uDg4hisOn3gh3nbYnZXID54ANVLDVg==","signatures":[{"sig":"MEUCICaVm+v8X2i43M7Jb+5WZKZi+VjA1AzMbWyC5tP0ENMhAiEAifRsznHrqJAVk3sN1qrKKn8AVr6VA2Nk1SDBtAXBCS4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":186105},"main":"./src/api.ts","type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts","default":"./src/api.ts"}},"gitHead":"114557d5764bff2c0ad85013f292ca6d9b65840b","_npmUser":{"name":"kruithne","email":"kruithne@gmail.com"},"_npmVersion":"10.8.2","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"20.19.6","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.2.20"},"_npmOperationalInternal":{"tmp":"tmp/spooder_6.1.7_1764844742733_0.40246116823567424","host":"s3://npm-registry-packages-npm-production"}},"6.1.92":{"name":"spooder","version":"6.1.92","author":{"name":"Kruithne","email":"kruithne@gmail.com"},"_id":"spooder@6.1.92","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"homepage":"https://github.com/Kruithne/spooder#readme","bugs":{"url":"https://github.com/Kruithne/spooder/issues"},"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"c1e42da85a174e064c76734f0270d37220f3f218","tarball":"https://registry.npmjs.org/spooder/-/spooder-6.1.92.tgz","fileCount":10,"integrity":"sha512-c7QpJ1qAIs4ErQz9PnvK4dskBrQv4U4Em1vxhoWfbDRCN9j/VwXb8PlynayWrCYcdyF+WOrJlo/1jtKI+StCcQ==","signatures":[{"sig":"MEYCIQCggiAd73rcADTjkmH81JPi34jzWxuiZgj5rDrFJGeDWQIhAKtACsvwsOHvoXWHzY7KqWUvUloyjuDAtVQ3HlN7Jeyj","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/spooder@6.1.92","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":187686},"main":"./src/api.ts","type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts","default":"./src/api.ts"}},"gitHead":"d5f0d88b63a821f21477ce9022f6450df6673ab3","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ec89f256-1de5-412c-a5d6-c5c0ecd2447d"}},"repository":{"url":"git+https://github.com/Kruithne/spooder.git"},"_npmVersion":"11.6.2","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"24.12.0","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.2.20"},"_npmOperationalInternal":{"tmp":"tmp/spooder_6.1.92_1767190611461_0.5221977815116587","host":"s3://npm-registry-packages-npm-production"}},"6.1.93":{"name":"spooder","version":"6.1.93","author":{"name":"Kruithne","email":"kruithne@gmail.com"},"_id":"spooder@6.1.93","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"homepage":"https://github.com/Kruithne/spooder#readme","bugs":{"url":"https://github.com/Kruithne/spooder/issues"},"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"f9e7cbd64732c9a3c263d9cb997a3e00e730fe19","tarball":"https://registry.npmjs.org/spooder/-/spooder-6.1.93.tgz","fileCount":10,"integrity":"sha512-A+FpuqHemE/lFvKJ/3Vp96EPrANyYNcEjR7XW3Gmp4VlNu/iZrByZOI3PwgyVrEqRX1mJFcxauJZrwO5eS4HLw==","signatures":[{"sig":"MEQCIAFG0v2DtFwvnarZfSzrMO40LOGP9egRYnmMbus6ie9SAiB86UEA+EugHXnnYu+qdcSM2YdYKS+pxMrxsFpbXd/I9w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/spooder@6.1.93","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":187490},"main":"./src/api.ts","type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts","default":"./src/api.ts"}},"gitHead":"b3c7fc15acc50fae0b026f6fe348f522378426b2","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ec89f256-1de5-412c-a5d6-c5c0ecd2447d"}},"repository":{"url":"git+https://github.com/Kruithne/spooder.git"},"_npmVersion":"11.6.2","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"24.12.0","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.2.20"},"_npmOperationalInternal":{"tmp":"tmp/spooder_6.1.93_1768219847123_0.2808590900017822","host":"s3://npm-registry-packages-npm-production"}},"6.1.94":{"name":"spooder","version":"6.1.94","author":{"name":"Kruithne","email":"kruithne@gmail.com"},"_id":"spooder@6.1.94","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"homepage":"https://github.com/Kruithne/spooder#readme","bugs":{"url":"https://github.com/Kruithne/spooder/issues"},"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"f077a49a1b425f9083df585a6baff17fad39f2c8","tarball":"https://registry.npmjs.org/spooder/-/spooder-6.1.94.tgz","fileCount":10,"integrity":"sha512-kyPfZYY0JxVNMoNTEdf5l850s5/7qtGaKWmSA2KV2zrWVCI5gydr56YlmEclsbLucaS4ENGspzguFhfezu3Ljw==","signatures":[{"sig":"MEUCIHF0sSDPThhUKpDyEXbEmjv1vASNdLbIuaacS8rCn3qvAiEAvc/QivrdIqSs7Gp/iT2Yx4dPkXOue5t8xS5C5nQL0Yw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/spooder@6.1.94","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":188087},"main":"./src/api.ts","type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts","default":"./src/api.ts"}},"gitHead":"c6c6114dfe8b5a99d8f5d02b3bb2c9946b032bd5","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ec89f256-1de5-412c-a5d6-c5c0ecd2447d"}},"repository":{"url":"git+https://github.com/Kruithne/spooder.git"},"_npmVersion":"11.6.2","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"24.12.0","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.2.20"},"_npmOperationalInternal":{"tmp":"tmp/spooder_6.1.94_1768224732507_0.8652649933668735","host":"s3://npm-registry-packages-npm-production"}},"6.1.95":{"name":"spooder","version":"6.1.95","author":{"name":"Kruithne","email":"kruithne@gmail.com"},"_id":"spooder@6.1.95","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"homepage":"https://github.com/Kruithne/spooder#readme","bugs":{"url":"https://github.com/Kruithne/spooder/issues"},"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"43a189e96d9cef12ee939b14f82cf7650cbd1016","tarball":"https://registry.npmjs.org/spooder/-/spooder-6.1.95.tgz","fileCount":10,"integrity":"sha512-Mny3DfNVuKEAusi17RlBwPmbmVBzeOco/r/QaqXS7CrSesZpx/bViMNVc6tzJF72n0IX5XfBdGm6i/qr5Xt0Cg==","signatures":[{"sig":"MEYCIQDAxkA0Tb39p/bf8jCph6UlxOLso1h1a58vFH8HVWaBhAIhAIucCyU7MW+54qaiBIWh4/0vivZhqG9Vh18JVTh7f+xk","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/spooder@6.1.95","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":188297},"main":"./src/api.ts","type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts","default":"./src/api.ts"}},"gitHead":"b84fcb28c3cc26bedbf2dba17747e12f474e73b2","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ec89f256-1de5-412c-a5d6-c5c0ecd2447d"}},"repository":{"url":"git+https://github.com/Kruithne/spooder.git"},"_npmVersion":"11.6.2","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"24.12.0","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.2.20"},"_npmOperationalInternal":{"tmp":"tmp/spooder_6.1.95_1768231435718_0.0848767341084038","host":"s3://npm-registry-packages-npm-production"}},"6.2.0":{"name":"spooder","version":"6.2.0","author":{"name":"Kruithne","email":"kruithne@gmail.com"},"_id":"spooder@6.2.0","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"homepage":"https://github.com/Kruithne/spooder#readme","bugs":{"url":"https://github.com/Kruithne/spooder/issues"},"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"1d65576e776e347152afd48bd060a7e4955262ba","tarball":"https://registry.npmjs.org/spooder/-/spooder-6.2.0.tgz","fileCount":10,"integrity":"sha512-YEzrijKUHPxAAYdet+APQ0FxBrPaFVfKBkFHPEv5EibUs7QZFGOMc1vV0Ng8Um1zfwCWC976h/cR+cjnqXA9aQ==","signatures":[{"sig":"MEUCIDgMjncRFfInWAPFe/iB10I4c8RQf03qL9D0iwTiBoHsAiEAzRnUcfYuP41iqr6C38sT9S7H3TZse7ySMeiQOkDepvE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/spooder@6.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":188459},"main":"./src/api.ts","type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts","default":"./src/api.ts"}},"gitHead":"ab7dfee6b19ace2402fc745db29718e9faf1d76b","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ec89f256-1de5-412c-a5d6-c5c0ecd2447d"}},"repository":{"url":"git+https://github.com/Kruithne/spooder.git"},"_npmVersion":"11.6.2","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"24.12.0","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.2.20"},"_npmOperationalInternal":{"tmp":"tmp/spooder_6.2.0_1768302890648_0.7961339433588701","host":"s3://npm-registry-packages-npm-production"}},"6.2.1":{"name":"spooder","version":"6.2.1","author":{"name":"Kruithne","email":"kruithne@gmail.com"},"_id":"spooder@6.2.1","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"homepage":"https://github.com/Kruithne/spooder#readme","bugs":{"url":"https://github.com/Kruithne/spooder/issues"},"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"320fc8a8b55f3d07cdd3b04273ee40932adcb3eb","tarball":"https://registry.npmjs.org/spooder/-/spooder-6.2.1.tgz","fileCount":10,"integrity":"sha512-mBJttzt06hXsJudlZp54WHl/o1DhWEevyv2c4DKCBPDXatFUKaSjG54xy2NbzUGgSiwimlFBn7KxP3L4ExlRIw==","signatures":[{"sig":"MEYCIQCEsekbGTy0Cc/Irb3QKdKkVIAc6pRqtzLlr0+BHzQXTAIhAKS/k73R86EWTi2/E3mA9Lnm8qO+DLJoi3+FumbiohAQ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/spooder@6.2.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":189324},"main":"./src/api.ts","type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts","default":"./src/api.ts"}},"gitHead":"f212e9a3ee54e89b7e7401ab1a0c855c507078e3","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ec89f256-1de5-412c-a5d6-c5c0ecd2447d"}},"repository":{"url":"git+https://github.com/Kruithne/spooder.git"},"_npmVersion":"11.6.2","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"24.12.0","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.2.20"},"_npmOperationalInternal":{"tmp":"tmp/spooder_6.2.1_1768303831482_0.2640108034647701","host":"s3://npm-registry-packages-npm-production"}},"6.2.2":{"name":"spooder","version":"6.2.2","author":{"name":"Kruithne","email":"kruithne@gmail.com"},"_id":"spooder@6.2.2","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"homepage":"https://github.com/Kruithne/spooder#readme","bugs":{"url":"https://github.com/Kruithne/spooder/issues"},"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"703310139f94adb980474fd0a4123bab9297b17a","tarball":"https://registry.npmjs.org/spooder/-/spooder-6.2.2.tgz","fileCount":10,"integrity":"sha512-5oCwFwRov9QbrTC0NR6qJFMmzj7OQ1D3a0l0XTjbsEHH0LhL0gK76VqPWKR7BqsMhgZeAL6fE+isA9uoRpYsbg==","signatures":[{"sig":"MEQCIEsoFkza54K6LGkDiHFsbJ7xEuQOlNbQQY7oqh1C45phAiAksGvZTZ76gB8e+PQhbND5/1xqHlTHv7bwiZsAE1l3nQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/spooder@6.2.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":190230},"main":"./src/api.ts","type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts","default":"./src/api.ts"}},"gitHead":"887f2fe159003a5c306ca901aef873263ccd3cad","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ec89f256-1de5-412c-a5d6-c5c0ecd2447d"}},"repository":{"url":"git+https://github.com/Kruithne/spooder.git"},"_npmVersion":"11.6.2","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"24.12.0","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.2.20"},"_npmOperationalInternal":{"tmp":"tmp/spooder_6.2.2_1768313104563_0.4505157012463108","host":"s3://npm-registry-packages-npm-production"}},"6.2.3":{"name":"spooder","version":"6.2.3","author":{"name":"Kruithne","email":"kruithne@gmail.com"},"_id":"spooder@6.2.3","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"homepage":"https://github.com/Kruithne/spooder#readme","bugs":{"url":"https://github.com/Kruithne/spooder/issues"},"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"611c86c7424254ca4b822fa9a9a7429c7b20a782","tarball":"https://registry.npmjs.org/spooder/-/spooder-6.2.3.tgz","fileCount":10,"integrity":"sha512-RAEw+HCVxbKx6tuJiyq5ngq+9G1Ya92oukEkuehxqxSDxkHZd2XgDZzPdwW3TM/kSDLkH6FisBV4+nH4cZH/+g==","signatures":[{"sig":"MEUCIF/zVPE+eAjfSYKZhS8pgIRpr6xUdcsXCglduqEL3dRTAiEAtks/wu6IC+Im7PGerMzK/whWPyY6HRMjCeBLKV2dcbk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/spooder@6.2.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":190885},"main":"./src/api.ts","type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts","default":"./src/api.ts"}},"gitHead":"2cc6dedf05edae22735fc66f46a0537d74849227","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ec89f256-1de5-412c-a5d6-c5c0ecd2447d"}},"repository":{"url":"git+https://github.com/Kruithne/spooder.git"},"_npmVersion":"11.6.2","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"24.12.0","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.2.20"},"_npmOperationalInternal":{"tmp":"tmp/spooder_6.2.3_1768316168366_0.08776292642949346","host":"s3://npm-registry-packages-npm-production"}},"6.2.4":{"name":"spooder","version":"6.2.4","author":{"name":"Kruithne","email":"kruithne@gmail.com"},"_id":"spooder@6.2.4","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"homepage":"https://github.com/Kruithne/spooder#readme","bugs":{"url":"https://github.com/Kruithne/spooder/issues"},"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"c72357d2b87d6df1d51aeb37952bb3bda7bf372d","tarball":"https://registry.npmjs.org/spooder/-/spooder-6.2.4.tgz","fileCount":10,"integrity":"sha512-hntlslLImawvNNSODviEsazPQPUX+jfHCvACdtQuOe+oC9JN5iNWD9fawMOh2ZiVsU+tVd0WS+t06BiNsUe+0g==","signatures":[{"sig":"MEUCIQDvevg0EejBKxpgV5nJenWRF1r9VJj/EIPBB86HatmhHAIgCDIAERi79s1af7sdxKux3aS2wr6tpm6Raep08D8pcEk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/spooder@6.2.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":191576},"main":"./src/api.ts","type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts","default":"./src/api.ts"}},"gitHead":"aeab46ccb971e251f635c55b72472618e69f4e0b","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ec89f256-1de5-412c-a5d6-c5c0ecd2447d"}},"repository":{"url":"git+https://github.com/Kruithne/spooder.git"},"_npmVersion":"11.6.2","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"24.12.0","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.2.20"},"_npmOperationalInternal":{"tmp":"tmp/spooder_6.2.4_1768408013605_0.0491797103904259","host":"s3://npm-registry-packages-npm-production"}},"6.2.5":{"name":"spooder","version":"6.2.5","author":{"name":"Kruithne","email":"kruithne@gmail.com"},"_id":"spooder@6.2.5","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"homepage":"https://github.com/Kruithne/spooder#readme","bugs":{"url":"https://github.com/Kruithne/spooder/issues"},"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"2bcd2c818486e483df0cf2004de14d2635c953a2","tarball":"https://registry.npmjs.org/spooder/-/spooder-6.2.5.tgz","fileCount":10,"integrity":"sha512-cD1jQZBK1MsOW9RkXlrnyc3OH0etsthKwU87lklkurD4UJKMzJTkFyL888wWg3fPAfXNXKw3ykiqa9v1Jv5ZQQ==","signatures":[{"sig":"MEQCIEVa+yIMMUi3DX4cVwxeCcgWxvZlUYonGVFCSwxPCUQAAiBatnbFDP1OBuLjAhOUCnrgFbzFFlhPCHZyNpN5F64hmQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/spooder@6.2.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":191964},"main":"./src/api.ts","type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts","default":"./src/api.ts"}},"gitHead":"58269f2baa47aede098ff2c9071c854031e3a9b2","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ec89f256-1de5-412c-a5d6-c5c0ecd2447d"}},"repository":{"url":"git+https://github.com/Kruithne/spooder.git"},"_npmVersion":"11.6.2","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"24.13.0","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.2.20"},"_npmOperationalInternal":{"tmp":"tmp/spooder_6.2.5_1770114928031_0.5262728256645217","host":"s3://npm-registry-packages-npm-production"}},"6.2.6":{"name":"spooder","version":"6.2.6","author":{"name":"Kruithne","email":"kruithne@gmail.com"},"_id":"spooder@6.2.6","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"homepage":"https://github.com/Kruithne/spooder#readme","bugs":{"url":"https://github.com/Kruithne/spooder/issues"},"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"aa0f82406b7e4ba9733d9f2f14a43cf1d5a1bbe7","tarball":"https://registry.npmjs.org/spooder/-/spooder-6.2.6.tgz","fileCount":10,"integrity":"sha512-JZJTmVzn91J4vPuDOvXk2Dyb7xpm8IikHwP+opz9ZJMZzQrLDC1K7OjfUaLZp4zLDI+QOXOLqYVkOLvW/cHVng==","signatures":[{"sig":"MEYCIQCl650Lx48JYRNJ2dkyCyljAMQB0xTWeoav4c2o4wtIHgIhAKUt6i4AbNg2lLwfuBYBhM3lWq0sfnXgCm5XraH8vqLn","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/spooder@6.2.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":191973},"main":"./src/api.ts","type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts","default":"./src/api.ts"}},"gitHead":"2ac49dc487874f55faef3a3959fefea0a0ca2f87","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ec89f256-1de5-412c-a5d6-c5c0ecd2447d"}},"repository":{"url":"git+https://github.com/Kruithne/spooder.git"},"_npmVersion":"11.6.2","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"24.13.0","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.2.20"},"_npmOperationalInternal":{"tmp":"tmp/spooder_6.2.6_1770116302279_0.5682334657660846","host":"s3://npm-registry-packages-npm-production"}},"6.2.7":{"name":"spooder","version":"6.2.7","author":{"name":"Kruithne","email":"kruithne@gmail.com"},"_id":"spooder@6.2.7","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"homepage":"https://github.com/Kruithne/spooder#readme","bugs":{"url":"https://github.com/Kruithne/spooder/issues"},"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"2a4eb548a553eca33bd2123e4a6a429282266a5b","tarball":"https://registry.npmjs.org/spooder/-/spooder-6.2.7.tgz","fileCount":10,"integrity":"sha512-u/P+QacWXvHPipPwi1MjRvT/AJjOk3O2BEm4i+i21Z4W8G98UP2g8ksgfk9OZ0gSG1g8cnCA8jJHdQ7ecy2CqA==","signatures":[{"sig":"MEQCIA1M6ECOmsFW78i499tD+JMyZGI1AC84irRnlQqjETmsAiBP/NTXLxxkuvSsiY6YcHWhq6UV9SsJpwr048r61ydLBQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/spooder@6.2.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":192042},"main":"./src/api.ts","type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts","default":"./src/api.ts"}},"gitHead":"808e29185ef33904c4547c4e19aea109a2d6237d","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ec89f256-1de5-412c-a5d6-c5c0ecd2447d"}},"repository":{"url":"git+https://github.com/Kruithne/spooder.git"},"_npmVersion":"11.6.2","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"24.13.0","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.2.20"},"_npmOperationalInternal":{"tmp":"tmp/spooder_6.2.7_1770120039839_0.9185063283509338","host":"s3://npm-registry-packages-npm-production"}},"6.2.8":{"name":"spooder","version":"6.2.8","author":{"name":"Kruithne","email":"kruithne@gmail.com"},"_id":"spooder@6.2.8","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"homepage":"https://github.com/Kruithne/spooder#readme","bugs":{"url":"https://github.com/Kruithne/spooder/issues"},"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"59adbf67d35525e246ed9e9ed7e4f7d7b0159c2d","tarball":"https://registry.npmjs.org/spooder/-/spooder-6.2.8.tgz","fileCount":10,"integrity":"sha512-3kreEodoaZpdvW6v8hTygFjsBJ0Inf4qJu+9qcod+G+Envn7Qb5FQTB3GXNTlv+HdU8JT79gnS3di8vhygc3mg==","signatures":[{"sig":"MEUCIHJlVH0FgF/YalX4zOVRdGTOn7TTsZDxhhR8Jr8atxt0AiEA4IodK3Id6uJlChzX+ZlWqtjZ2pT0+y4Kq8zXs7RsZ7c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/spooder@6.2.8","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":195481},"main":"./src/api.ts","type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts","default":"./src/api.ts"}},"gitHead":"f261e9668e1c8a7609ba76597c875f3e6b1e958f","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ec89f256-1de5-412c-a5d6-c5c0ecd2447d"}},"repository":{"url":"git+https://github.com/Kruithne/spooder.git"},"_npmVersion":"11.8.0","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"24.13.1","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.2.20"},"_npmOperationalInternal":{"tmp":"tmp/spooder_6.2.8_1772545126775_0.5481027720425709","host":"s3://npm-registry-packages-npm-production"}},"6.2.9":{"name":"spooder","version":"6.2.9","author":{"name":"Kruithne","email":"kruithne@gmail.com"},"_id":"spooder@6.2.9","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"homepage":"https://github.com/Kruithne/spooder#readme","bugs":{"url":"https://github.com/Kruithne/spooder/issues"},"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"a4917b7add2035f0c5d5005b52e3e869b5f493a0","tarball":"https://registry.npmjs.org/spooder/-/spooder-6.2.9.tgz","fileCount":10,"integrity":"sha512-Eu7LE9RjMv29Q3QrSm2HFc7vD3Ybs+fvyPR+vcbCiuv+5kmzNBwTh9tzmiZ3SShfbWufYHZ9zbBru5i993nYfg==","signatures":[{"sig":"MEQCIG4XQHW5/kKDP+X4DToH54P3Sgtf7EtvBaBG+ZwcEu9iAiAex1yPrybnNTVuNq1LzAUmuwDGyv19zLyFG4Vwx/xWtQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/spooder@6.2.9","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":201574},"main":"./src/api.ts","type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts","default":"./src/api.ts"}},"gitHead":"0d454aa091785083b61c1a9701e29660e474041d","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ec89f256-1de5-412c-a5d6-c5c0ecd2447d"}},"repository":{"url":"git+https://github.com/Kruithne/spooder.git"},"_npmVersion":"11.12.1","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"24.15.0","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.2.20"},"_npmOperationalInternal":{"tmp":"tmp/spooder_6.2.9_1779789853424_0.8020454719121644","host":"s3://npm-registry-packages-npm-production"}},"6.2.10":{"name":"spooder","version":"6.2.10","author":{"name":"Kruithne","email":"kruithne@gmail.com"},"_id":"spooder@6.2.10","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"homepage":"https://github.com/Kruithne/spooder#readme","bugs":{"url":"https://github.com/Kruithne/spooder/issues"},"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"38e537dc1faa1c9cfaaa1d45f074a99a4c34637e","tarball":"https://registry.npmjs.org/spooder/-/spooder-6.2.10.tgz","fileCount":10,"integrity":"sha512-V+7VYW6LFcARqc/HR23THHSZ9VtIdA3+zCXlopoGaHB47pswLtguR0J8pW1KCcR4XweLzpkGwVycrwMOOGwYhA==","signatures":[{"sig":"MEUCIC8tTu5TviFSrsXnivJyKbC7VXniB24v4COoafOE1yU1AiEA+mRCNvDGXN5Wu4xFzL37KinVsRzEfPSHvzIVtfFx4k8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/spooder@6.2.10","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":201896},"main":"./src/api.ts","type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts","default":"./src/api.ts"}},"gitHead":"e8b43938a2fca7b514b706c3f0a1d782e076bc7b","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ec89f256-1de5-412c-a5d6-c5c0ecd2447d"}},"repository":{"url":"git+https://github.com/Kruithne/spooder.git"},"_npmVersion":"11.16.0","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"24.18.0","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.2.20"},"_npmOperationalInternal":{"tmp":"tmp/spooder_6.2.10_1786469783767_0.20016689000719579","host":"s3://npm-registry-packages-npm-production"}},"6.2.11":{"name":"spooder","version":"6.2.11","author":{"name":"Kruithne","email":"kruithne@gmail.com"},"_id":"spooder@6.2.11","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"homepage":"https://github.com/Kruithne/spooder#readme","bugs":{"url":"https://github.com/Kruithne/spooder/issues"},"bin":{"spooder":"src/cli.ts"},"dist":{"shasum":"ec8355d25a69c1696df5f870fb38559b9d2c326a","tarball":"https://registry.npmjs.org/spooder/-/spooder-6.2.11.tgz","fileCount":10,"integrity":"sha512-5VplJ6WpXBzRN61QcjdHI/lJqb4L+bzltYsQS+Ef7/1adFh+3WtNTGWmQoRlU7uilsFzaooV28/eku5sL42C+A==","signatures":[{"sig":"MEUCICT36bpFrparXjQpOB7sknPvnPibIfBvm7boWbSfUDMbAiEA2WP7OZrWBrGzVPhDabU9SZ5R3xIsM8Ktc9dZp0yqLE0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/spooder@6.2.11","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":202372},"main":"./src/api.ts","type":"module","module":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts","default":"./src/api.ts"}},"gitHead":"7904b4ef699f32e76b845834502d90624d02c2a3","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ec89f256-1de5-412c-a5d6-c5c0ecd2447d"}},"repository":{"url":"git+https://github.com/Kruithne/spooder.git"},"_npmVersion":"11.16.0","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","directories":{},"_nodeVersion":"24.18.0","_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.2.20"},"_npmOperationalInternal":{"tmp":"tmp/spooder_6.2.11_1786550188629_0.6293772853521955","host":"s3://npm-registry-packages-npm-production"}},"6.2.12":{"name":"spooder","author":{"name":"Kruithne","email":"kruithne@gmail.com"},"type":"module","version":"6.2.12","module":"./src/api.ts","repository":{"url":"git+https://github.com/Kruithne/spooder.git"},"bin":{"spooder":"src/cli.ts"},"main":"./src/api.ts","exports":{".":{"bun":"./src/api.ts","import":"./src/api.ts","default":"./src/api.ts"}},"devDependencies":{"@types/bun":"^1.2.20"},"gitHead":"f6303e0b85c44415dfe25109013a74fd3d1bd9a1","_id":"spooder@6.2.12","description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","bugs":{"url":"https://github.com/Kruithne/spooder/issues"},"homepage":"https://github.com/Kruithne/spooder#readme","_nodeVersion":"24.19.0","_npmVersion":"11.17.0","dist":{"integrity":"sha512-7NqXGIoUSaG0OZIXVTmQPUKK9jKBDhqfmX6wREcbNOqXw4FCG8zEOqpyaWokDKGTChKzTXMSAsVcYLJVbkeX4g==","shasum":"4675b5fae74030d9a4816389a80d7987d3caf76a","tarball":"https://registry.npmjs.org/spooder/-/spooder-6.2.12.tgz","fileCount":10,"unpackedSize":203155,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/spooder@6.2.12","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIFbzVpaEIiY0gdlJ6N/H0mUWBgxnWOxvDZTMLFudflKPAiEA08xvon7nhJtUKu6iWVhynmTNLwVbMNZeIBAXvEx0/OQ="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ec89f256-1de5-412c-a5d6-c5c0ecd2447d"}},"directories":{},"maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/spooder_6.2.12_1786713556964_0.117400074154135"},"_hasShrinkwrap":false}},"time":{"created":"2023-05-03T13:32:10.791Z","modified":"2026-08-14T13:19:17.507Z","2.0.1":"2023-05-03T13:32:11.017Z","2.0.2":"2023-05-03T13:35:30.367Z","2.0.3":"2023-05-04T13:31:54.924Z","2.0.4":"2023-05-04T13:56:06.430Z","2.0.5":"2023-05-05T17:00:07.856Z","2.0.6":"2023-05-05T17:04:47.051Z","2.0.7":"2023-05-05T17:59:27.417Z","2.0.8":"2023-05-05T18:03:25.057Z","2.0.9":"2023-05-31T09:26:35.361Z","3.0.0":"2023-05-31T09:39:55.828Z","3.0.1":"2023-05-31T09:44:05.627Z","3.0.2":"2023-05-31T13:01:31.084Z","3.0.3":"2023-05-31T13:20:25.230Z","3.0.4":"2023-05-31T13:32:18.600Z","3.0.5":"2023-05-31T13:35:42.927Z","3.0.6":"2023-05-31T14:02:19.991Z","3.0.7":"2023-05-31T14:09:35.390Z","3.0.8":"2023-05-31T15:55:18.472Z","3.1.0":"2023-06-08T11:29:02.067Z","3.2.0":"2023-07-06T08:42:24.677Z","3.2.1":"2023-07-06T09:57:43.614Z","3.2.2":"2023-07-06T18:01:49.650Z","3.2.3":"2023-07-12T08:06:22.694Z","3.2.4":"2023-07-12T09:19:36.003Z","3.2.5":"2023-07-12T16:47:11.726Z","3.2.6":"2023-07-18T09:01:55.642Z","3.2.7":"2023-08-08T17:53:17.948Z","3.2.8":"2023-09-07T14:39:01.800Z","4.0.0":"2023-11-07T23:24:24.471Z","4.0.1":"2023-11-09T11:18:13.247Z","4.0.2":"2023-11-09T12:56:18.606Z","4.1.0":"2023-11-09T18:04:33.680Z","4.1.1":"2023-11-10T12:21:54.978Z","4.2.0":"2023-11-14T14:21:02.957Z","4.2.1":"2023-11-14T16:40:41.725Z","4.2.2":"2023-11-15T10:44:03.545Z","4.2.3":"2023-11-15T11:02:49.576Z","4.2.4":"2023-11-15T11:20:32.690Z","4.2.5":"2023-11-15T11:43:55.045Z","4.2.6":"2023-11-15T12:23:47.837Z","4.2.7":"2023-11-15T14:20:16.826Z","4.2.8":"2023-11-22T16:39:07.999Z","4.2.9":"2023-11-28T16:29:31.516Z","4.2.10":"2024-02-12T15:30:06.878Z","4.2.11":"2024-03-05T10:20:42.735Z","4.2.12":"2024-03-05T10:57:16.030Z","4.2.13":"2024-03-06T12:40:50.377Z","4.2.14":"2024-03-06T12:45:32.949Z","4.2.15":"2024-03-06T15:40:44.476Z","4.2.16":"2024-03-12T10:34:06.859Z","4.2.17":"2024-03-26T15:26:47.505Z","4.2.18":"2024-03-26T15:38:10.235Z","4.3.0":"2024-07-17T10:47:10.862Z","4.3.1":"2024-07-17T10:56:45.617Z","4.3.2":"2024-07-19T13:43:07.496Z","4.4.0":"2024-07-31T17:57:54.707Z","4.4.1":"2024-07-31T19:23:30.694Z","4.4.2":"2024-07-31T21:46:23.992Z","4.4.3":"2024-08-12T10:39:21.851Z","4.4.4":"2024-08-15T15:23:45.745Z","4.4.5":"2024-08-15T15:27:05.972Z","4.4.6":"2024-08-20T10:18:59.332Z","4.4.7":"2024-08-27T10:39:09.490Z","4.4.8":"2024-08-28T10:07:34.431Z","4.4.9":"2024-09-06T14:31:51.889Z","4.4.10":"2024-09-09T19:47:51.678Z","4.4.11":"2024-09-09T20:45:21.551Z","4.5.0":"2024-09-12T20:20:14.504Z","4.5.1":"2024-09-13T12:42:19.850Z","4.5.2":"2024-09-13T13:12:45.640Z","4.5.3":"2024-09-13T13:18:07.496Z","4.5.4":"2024-11-12T22:25:04.974Z","4.5.5":"2024-11-12T22:36:56.603Z","4.5.6":"2024-11-26T10:26:28.717Z","4.5.7":"2024-11-27T14:33:46.268Z","4.5.8":"2024-12-10T14:47:51.986Z","4.5.9":"2025-01-23T17:02:43.019Z","4.5.10":"2025-04-30T10:36:43.968Z","4.5.11":"2025-04-30T10:47:51.069Z","4.5.12":"2025-04-30T10:52:33.572Z","4.5.13":"2025-04-30T11:00:31.823Z","4.6.0":"2025-05-06T09:46:21.273Z","4.6.1":"2025-05-22T09:25:46.554Z","4.6.2":"2025-06-12T13:07:58.278Z","5.0.0":"2025-07-19T20:24:57.713Z","5.0.1":"2025-07-19T22:37:09.992Z","5.0.2":"2025-07-19T22:44:37.235Z","5.0.3":"2025-07-20T09:02:10.053Z","5.1.0":"2025-07-21T09:57:57.129Z","5.1.1":"2025-07-21T10:19:28.770Z","5.1.2":"2025-07-21T11:17:06.342Z","5.1.3":"2025-07-21T12:17:15.640Z","5.1.4":"2025-07-21T12:30:06.780Z","5.1.5":"2025-07-24T09:27:48.292Z","5.1.6":"2025-07-25T15:00:38.223Z","5.1.7":"2025-08-16T11:40:47.725Z","5.1.8":"2025-08-16T17:58:27.177Z","5.1.9":"2025-08-29T17:45:43.983Z","5.1.10":"2025-08-29T21:49:31.171Z","5.1.11":"2025-09-09T09:45:37.392Z","5.1.12":"2025-09-09T12:19:32.124Z","6.0.0":"2025-10-13T15:57:07.206Z","6.1.0":"2025-10-28T11:37:49.997Z","6.1.1":"2025-10-28T12:09:16.281Z","6.1.2":"2025-10-29T12:29:10.377Z","6.1.3":"2025-10-29T14:33:13.224Z","6.1.4":"2025-10-29T14:48:26.754Z","6.1.5":"2025-10-30T13:32:00.378Z","6.1.6":"2025-11-28T16:04:26.861Z","6.1.7":"2025-12-04T10:39:02.897Z","6.1.92":"2025-12-31T14:16:51.625Z","6.1.93":"2026-01-12T12:10:47.289Z","6.1.94":"2026-01-12T13:32:12.660Z","6.1.95":"2026-01-12T15:23:55.886Z","6.2.0":"2026-01-13T11:14:50.781Z","6.2.1":"2026-01-13T11:30:31.614Z","6.2.2":"2026-01-13T14:05:04.711Z","6.2.3":"2026-01-13T14:56:08.514Z","6.2.4":"2026-01-14T16:26:53.791Z","6.2.5":"2026-02-03T10:35:28.185Z","6.2.6":"2026-02-03T10:58:22.429Z","6.2.7":"2026-02-03T12:00:39.994Z","6.2.8":"2026-03-03T13:38:46.924Z","6.2.9":"2026-05-26T10:04:13.561Z","6.2.10":"2026-08-11T17:36:23.989Z","6.2.11":"2026-08-12T15:56:28.784Z","6.2.12":"2026-08-14T13:19:17.166Z"},"bugs":{"url":"https://github.com/Kruithne/spooder/issues"},"author":{"name":"Kruithne","email":"kruithne@gmail.com"},"homepage":"https://github.com/Kruithne/spooder#readme","repository":{"url":"git+https://github.com/Kruithne/spooder.git"},"description":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>","maintainers":[{"name":"kruithne","email":"kruithne@gmail.com"}],"readme":"<p align=\"center\"><img src=\"docs/project-logo.png\"/></p>\n\n# spooder &middot; ![typescript](https://img.shields.io/badge/language-typescript-blue) [![license badge](https://img.shields.io/github/license/Kruithne/spooder?color=yellow)](LICENSE) ![npm version](https://img.shields.io/npm/v/spooder?color=c53635) ![bun](https://img.shields.io/badge/runtime-bun-f9f1e1)\n\n`spooder` is a purpose-built server solution that shifts away from the dependency hell of the Node.js ecosystem, with a focus on stability and performance, which is why:\n- It is built using the [Bun](https://bun.sh/) runtime and not designed to be compatible with Node.js or other runtimes.\n- It uses zero dependencies and only relies on code written explicitly for `spooder` or APIs provided by the Bun runtime, often implemented in native code.\n- It provides streamlined APIs for common server tasks in a minimalistic way, without the overhead of a full-featured web framework.\n- It is opinionated in its design to reduce complexity and overhead.\n\nThe design goal behind `spooder` is not to provide a full-featured web server, but to expand the Bun runtime with a set of APIs and utilities that make it easy to develop servers with minimal overhead.\n\n### spooderverse\nIn addition to the core API provided here, you can also find [spooderverse](https://github.com/Kruithne/spooderverse) which is a collection of drop-in modules designed for spooder with minimal overhead and zero dependencies.\n\n> [!NOTE]\n> If you think a is missing a feature, consider opening an issue with your use-case. The goal behind `spooder` is to provide APIs that are useful for a wide range of use-cases, not to provide bespoke features better suited for userland.\n\nIt consists of two components, the `CLI` and the `API`. \n- The `CLI` is responsible for keeping the server process running, applying updates in response to source control changes, and automatically raising issues on GitHub via the canary feature.\n- The `API` provides a minimal building-block style API for developing servers, with a focus on simplicity and performance.\n\n# Installation\n\n```bash\n# Installing globally for CLI runner usage.\nbun add spooder --global\n\n# Install into local package for API usage.\nbun add spooder\n```\n\n# Configuration\n\nBoth the `CLI` and the API are configured in the same way by providing a `spooder` object in your `package.json` file.\n\nBelow is a full map of the available configuration options in their default states. All configuration options are **optional**.\n\n```jsonc\n{\n\t\"spooder\": {\n\n\t\t// see CLI > Usage\n\t\t\"run\": \"\",\n\t\t\"run_dev\": \"\",\n\n\t\t// see CLI > Auto Restart\n\t\t\"auto_restart\": {\n\t\t\t\"enabled\": false,\n\t\t\t\"backoff_max\": 300000,\n\t\t\t\"backoff_grace\": 30000,\n\t\t\t\"max_attempts\": -1\n\t\t},\n\n\t\t// see CLI > Instancing > Rolling Restart\n\t\t\"rolling_restart_delay\": 0,\n\n\t\t// see CLI > Auto Update\n\t\t\"update\": [\n\t\t\t\"git pull\",\n\t\t\t\"bun install\"\n\t\t],\n\n\t\t// see CLI > Setup Scripts\n\t\t\"setup\": [\n\t\t\t\"scripts/seed_db.ts\",\n\t\t\t\"scripts/register_webhooks.ts\"\n\t\t],\n\n\t\t// see CLI > Canary\n\t\t\"canary\": {\n\t\t\t\"enabled\": false,\n\t\t\t\"account\": \"\",\n\t\t\t\"repository\": \"\",\n\t\t\t\"labels\": [],\n\t\t\t\"crash_console_history\": 64,\n\t\t\t\"throttle\": 86400,\n\t\t\t\"sanitize\": true\n\t\t},\n\n\t\t// see CLI > Logging\n\t\t\"logging\": {\n\t\t\t\"enabled\": false,\n\t\t\t\"directory\": \"logs\",\n\t\t\t\"max_size\": 10485760,\n\t\t\t\"max_files\": 3\n\t\t}\n\t}\n}\n```\n\nIf there are any issues with the provided configuration, a warning will be printed to the console but will not halt execution. `spooder` will always fall back to default values where invalid configuration is provided.\n\n> [!NOTE]\n> Configuration warnings **do not** raise `caution` events with the `spooder` canary functionality.\n\n# CLI\n\nThe `CLI` component of `spooder` is a global command-line tool for running server processes.\n\n- [CLI > Usage](#cli-usage)\n- [CLI > Dev Mode](#cli-dev-mode)\n- [CLI > Auto Restart](#cli-auto-restart)\n- [CLI > Auto Update](#cli-auto-update)\n- [CLI > Setup Scripts](#cli-setup-scripts)\n- [CLI > Instancing](#cli-instancing)\n- [CLI > Canary](#cli-canary)\n\t- [CLI > Canary > Crash](#cli-canary-crash)\n\t- [CLI > Canary > Sanitization](#cli-canary-sanitization)\n\t- [CLI > Canary > System Information](#cli-canary-system-information)\n- [CLI > Logging](#cli-logging)\n\n# API\n\n`spooder` exposes a simple yet powerful API for developing servers. The API is designed to be minimal to leave control in the hands of the developer and not add overhead for features you may not need.\n\n- [API > Cheatsheet](#api-cheatsheet)\n- [API > Logging](#api-logging)\n- [API > IPC](#api-ipc)\n- [API > HTTP](#api-http)\n\t- [API > HTTP > Directory Serving](#api-http-directory)\n\t- [API > HTTP > Server-Sent Events (SSE)](#api-http-sse)\n\t- [API > HTTP > Webhooks](#api-http-webhooks)\n\t- [API > HTTP > Websocket Server](#api-http-websockets)\n\t- [API > HTTP > Bootstrap](#api-http-bootstrap)\n\t- [API > HTTP > Cookies](#api-http-cookies)\n- [API > Error Handling](#api-error-handling)\n- [API > Workers](#api-workers)\n- [API > Caching](#api-caching)\n- [API > Templating](#api-templating)\n- [API > Cache Busting](#api-cache-busting)\n- [API > Git](#api-git)\n- [API > Database](#api-database)\n\t- [API > Database > Utilities](#api-database-utilities)\n\t- [API > Database > Schema](#api-database-schema)\n- [API > Utilities](#api-utilities)\n\n# CLI\n\n<a id=\"cli-usage\"></a>\n## CLI > Usage\n\nFor convenience, it is recommended that you run this in a `screen` session.\n\n```bash\nscreen -S my-website-about-fish.net\ncd /var/www/my-website-about-fish.net/\nspooder\n```\n\n`spooder` will launch your server either by executing the `run` command provided in the configuration. If this is not defined, an error will be thrown.\n\n```json\n{\n\t\"spooder\": {\n\t\t\"run\": \"bun run my_server.ts\"\n\t}\n}\n```\n\nWhile `spooder` uses a `bun run` command by default, it is possible to use any command string. For example if you wanted to launch a server using `node` instead of `bun`, you could do the following.\n\n```json\n{\n\t\"spooder\": {\n\t\t\"run\": \"node my_server.js\"\n\t}\n}\n```\n\n<a id=\"cli-dev-mode\"></a>\n## CLI > Dev Mode\n\n`spooder` can be started in development mode by providing the `--dev` flag when starting the server.\n\n```bash\nspooder --dev\n```\n\nThe following differences will be observed when running in development mode:\n\n- If `run_dev` is configured, it will be used instead of the default `run` command.\n- Update commands defined in `spooder.update` will not be executed when starting a server.\n- If the server crashes and `auto_restart` is configured, the server will not be restarted, and spooder will exit with the same exit code as the server.\n- Setup scripts defined in `spooder.setup` will still run in dev mode (unlike update commands), since provisioning is needed in all environments. The `.spooder` state file prevents re-runs regardless.\n- If canary is configured, reports will not be dispatched to GitHub and instead be printed to the console; this includes crash reports.\n\nIt is possible to detect in userland if a server is running in development mode by checking the `SPOODER_ENV` environment variable.\n\n```ts\nif (process.env.SPOODER_ENV === 'dev') {\n\t// Server is running in development mode.\n}\n```\n\n### Development Command Override\n\nYou can configure a different command to run when in development mode using the `run_dev` option:\n\n```json\n{\n\t\"spooder\": {\n\t\t\"run\": \"bun run server.ts\",\n\t\t\"run_dev\": \"bun run server.ts --inspect\"\n\t}\n}\n```\n\n> [!NOTE]\n> `SPOODER_ENV` should be either `dev` or `prod`. If the variable is not defined, the server was not started by the `spooder` CLI.\n\n<a id=\"cli-auto-restart\"></a>\n## CLI > Auto Restart\n\n> [!NOTE]\n> This feature is not enabled by default.\n\nIn the event that the server process exits, `spooder` can automatically restart it.\n\nIf the server exits with a non-zero exit code, this will be considered an **unexpected shutdown**. The process will be restarted using an [exponential backoff strategy](https://en.wikipedia.org/wiki/Exponential_backoff).\n\n```json\n{\n\t\"spooder\": {\n\t\t\"auto_restart\": {\n\t\t\t\"enabled\": true,\n\n\t\t\t// max restarts before giving up\n\t\t\t\"max_attempts\": -1, // default (unlimited)\n\n\t\t\t// max delay (ms) between restart attempts\n\t\t\t\"backoff_max\": 300000, // default 5 min\n\n\t\t\t// grace period after which the backoff protocol\n\t\t\t\"backoff_grace\": 30000 // default 30s\n\t\t}\n\t}\n}\n```\n\nIf the server exits with a `0` exit code, this will be considered an **intentional shutdown** and `spooder` will execute the update commands before restarting the server.\n\n> [!TIP]\n> An **intentional shutdown** can be useful for auto-updating in response to events, such as webhooks.\n\nIf the server exits with `42` (SPOODER_AUTO_RESTART), the update commands will **not** be executed before starting the server. [See Auto Update for information](#cli-auto-update).\n\n<a id=\"cli-auto-update\"></a>\n## CLI > Auto Update\n\n> [!NOTE]\n> This feature is not enabled by default.\n\nWhen starting or restarting a server process, `spooder` can automatically update the source code in the working directory. To enable this feature, the necessary update commands can be provided in the configuration as an array of strings.\n\n```json\n{\n\t\"spooder\": {\n\t\t\"update\": [\n\t\t\t\"git reset --hard\",\n\t\t\t\"git clean -fd\",\n\t\t\t\"git pull origin main\",\n\t\t\t\"bun install\"\n\t\t]\n\t}\n}\n```\n\nEach command should be a separate entry in the array and will be executed in sequence. The server process will be started once all commands have resolved.\n\n> [!IMPORTANT]\n> Chaining commands using `&&` or `||` operators does not work.\n\nIf a command in the sequence fails, the remaining commands will not be executed, however the server will still be started. This is preferred over entering a restart loop or failing to start the server at all.\n\nYou can combine this with [Auto Restart](#cli-auto-restart) to automatically update your server in response to a webhook by exiting the process.\n\n```ts\nserver.webhook(process.env.WEBHOOK_SECRET, '/webhook', payload => {\n\tsetImmediate(async () => {\n\t\tawait server.stop(false);\n\t\tprocess.exit(0);\n\t});\n\treturn HTTP_STATUS_CODE.OK_200;\n});\n```\n\n### Multi-Instance Auto Update\n\nSee [Instancing](#cli-instancing) for instructions on how to use [Auto Update](#cli-auto-update) with multiple instances.\n\n### Skip Updates\n\nIn addition to being skipped in [dev mode](#cli-dev-mode), updates can also be skipped in production mode by passing the `--no-update` flag.\n\n<a id=\"cli-setup-scripts\"></a>\n## CLI > Setup Scripts\n\n> [!NOTE]\n> This feature is not enabled by default.\n\nSetup scripts are one-off provisioning tasks (database seeding, webhook registration, directory creation) that need to run once when deploying to a new machine. They are executed sequentially via `bun run` in the project root.\n\n```json\n{\n\t\"spooder\": {\n\t\t\"setup\": [\n\t\t\t\"scripts/seed_db.ts\",\n\t\t\t\"scripts/register_webhooks.ts\"\n\t\t]\n\t}\n}\n```\n\nCompleted scripts are tracked in a `.spooder` file in the project root. Scripts that have already been completed are skipped on subsequent startups. You should add `.spooder` to your `.gitignore` since it is machine-specific state.\n\n> [!IMPORTANT]\n> If a setup script fails (non-zero exit code), the error will be logged and a canary report dispatched (if configured), but the server will still start. Failed scripts are **not** marked as completed and will be retried on the next startup.\n\n### Skip Setup Scripts\n\nSetup scripts can be skipped by passing the `--no-setup` flag.\n\n<a id=\"cli-instancing\"></a>\n## CLI > Instancing\n\n> [!NOTE]\n> This feature is not enabled by default.\n\nBy default, `spooder` will start and manage a single process as defined by the `run` and `run_dev` configuration properties. In some scenarios, you may want multiple processes for a single codebase, such as variant sub-domains.\n\nThis can be configured in `spooder` using the `instances` array, with each entry defining a unique instance.\n\n```json\n\"spooder\": {\n\t\"instances\": [\n\t\t{\n\t\t\t\"id\": \"dev01\",\n\t\t\t\"run\": \"bun run --env-file=.env.a index.ts\",\n\t\t\t\"run_dev\": \"bun run --env-file=.env.a.dev index.ts --inspect\"\n\t\t},\n\t\t{\n\t\t\t\"id\": \"dev02\",\n\t\t\t\"run\": \"bun run --env-file=.env.b index.ts\",\n\t\t\t\"run_dev\": \"bun run --env-file=.env.b.dev index.ts --inspect\"\n\t\t}\n\t]\n}\n```\n\nInstances will be managed individually in the same manner that a single process would be, including auto-restarting and other functionality.\n\n### Instance Environment\n\nEach instance can define custom environment variables using the `env` property. These variables are merged with the parent process environment and passed to the spawned instance.\n\n```json\n\"spooder\": {\n\t\"instances\": [\n\t\t{\n\t\t\t\"id\": \"foo\",\n\t\t\t\"run\": \"bun run server.ts\",\n\t\t\t\"env\": { \"ENVTEST\": \"foo\" }\n\t\t},\n\t\t{\n\t\t\t\"id\": \"bar\",\n\t\t\t\"run\": \"bun run server.ts\",\n\t\t\t\"env\": { \"ENVTEST\": \"bar\" }\n\t\t}\n\t]\n}\n```\n\nEnvironment variable precedence (highest to lowest):\n1. `SPOODER_ENV` - always set by spooder (`dev` or `prod`)\n2. Instance `env` - overrides parent environment\n3. Parent process environment - inherited from spooder\n\n### Instance Stagger\n\nBy default, instances are all launched instantly. This behavior can be configured with the `instance_stagger_interval` configuration property, which defines an interval between instance launches in milliseconds.\n\nThis interval effects both server start-up, auto-restarting and crash recovery. No two instances will be launched within that interval regardless of the reason.\n\n### Rolling Restart\n\nBy default, when an update is triggered via IPC (`CMSG_TRIGGER_UPDATE`), all instances are signaled to restart simultaneously. This can cause resource spikes on the server when all instances reinitialize at the same time.\n\nThe `rolling_restart_delay` configuration property (in milliseconds) enables rolling restarts, where instances are signaled one at a time with a delay between each.\n\n```json\n{\n\t\"spooder\": {\n\t\t\"rolling_restart_delay\": 120000\n\t}\n}\n```\n\nIn this example, each instance is signaled to restart with a 2-minute gap, ensuring only one instance is reinitializing at any given time.\n\nWhen `rolling_restart_delay` is set to `0` (default), all instances are signaled simultaneously as before.\n\n#### Overlapping Updates\n\nIf a new update is triggered while a rolling restart is already in progress, the update commands are not run immediately. Instead, the update is queued and a new rollout (including update commands) begins automatically after the current rollout completes. This ensures all instances converge to the latest version without conflicting update operations.\n\n### Canary\n\nThe [canary](#cli-canary) feature functions the same for multiple instances as it would for a single instance with the caveat that the `instance` object as defined in the configuration is included in the crash report for diagnostics.\n\nThis allows you to define custom properties on the instance which will be included as part of the crash report.\n\n```json\n{\n\t\"id\": \"dev01\",\n\t\"run\": \"bun run --env-file=.env.a index.ts\",\n\t\"sub_domain\": \"dev01.spooder.dev\" // custom, for diagnostics\n}\n```\n\n> ![IMPORTANT]\n> You should not include sensitive or confidential credentials in your instance configuration for this reason. This should always be handled using environment variables or credential storage.\n\n### Multi-instance Auto Restart\n\nCombining [Auto Restart](#cli-auto-restart) and [Auto Update](#cli-auto-update), when a server process exits with a zero exit code, the update commands will be run as the server restarts. This is suitable for a single-instance setup.\n\nIn the event of multiple instances, this does not work. One server instance would receive the webhook and exit, resulting in the update commands being run and that instance being restarted, leaving the other instances still running.\n\nA solution might be to send the web-hook to every instance, but now each instance is going to restart individually, running the update commands unnecessarily and, if at the same time, causing conflicts. In addition, the concept of multiple instances in spooder is that they operate from a single codebase, which makes sending multiple webhooks a challenge - so don't do this.\n\nThe solution is to the use the [IPC](#api-ipc) to instruct the host process to handle this.\n\n```ts\nserver.webhook(process.env.WEBHOOK_SECRET, '/webhook', payload => {\n\tsetImmediate(async () => {\n\t\tipc_send(IPC_TARGET.SPOODER, IPC_OP.CMSG_TRIGGER_UPDATE);\n\t});\n\treturn HTTP_STATUS_CODE.OK_200;\n});\n\nipc_register(IPC_OP.SMSG_UPDATE_READY, async () => {\n\tawait server.stop(false);\n\tprocess.exit(EXIT_CODE.SPOODER_AUTO_UPDATE);\n});\n```\n\nIn this scenario, we instruct the host process from one instance receiving the webhook to apply the updates. Once the update commands have been run, all instances are sent the `SMSG_UPDATE_READY` event, indicating they can restart.\n\nExiting with the `SPOODER_AUTO_UPDATE` exit code instructs spooder that we're exiting as part of this process, and prevents auto-update from running on restart.\n\n> [!TIP]\n> Combine this with [Rolling Restart](#rolling-restart) to stagger the restart signals across instances, reducing resource spikes during deployments.\n\n<a id=\"cli-canary\"></a>\n## CLI > Canary\n\n> [!NOTE]\n> This feature is not enabled by default.\n\n`canary` is a feature in `spooder` which allows server problems to be raised as issues in your repository on GitHub.\n\nTo enable this feature, you will need a GitHub app which has access to your repository and a corresponding private key. If you do not already have those, instructions can be found below.\n\n<details>\n<summary>GitHub App Setup</summary>\n\nCreate a new GitHub App either on your personal account or on an organization. The app will need the following permissions:\n\n- **Issues** - Read & Write\n- **Metadata** - Read-only\n\nOnce created, install the GitHub App to your account. The app will need to be given access to the repositories you want to use the canary feature with.\n\nIn addition to the **App ID** that is assigned automatically, you will also need to generate a **Private Key** for the app. This can be done by clicking the **Generate a private key** button on the app page.\n\n> [!NOTE]\n> The private keys provided by GitHub are in PKCS#1 format, but only PKCS#8 is supported. You can convert the key file with the following command.\n\n```bash\nopenssl pkcs8 -topk8 -inform PEM -outform PEM -nocrypt -in private-key.pem -out private-key-pkcs8.key\n```\n\nEach server that intends to use the canary feature will need to have the private key installed somewhere the server process can access it.\n</details>\n\n### Configure Canary\n\n```json\n\"spooder\": {\n\t\"canary\": {\n\t\t\"enabled\": true,\n\t\t\"account\": \"<GITHUB_ACCOUNT_NAME>\",\n\t\t\"repository\": \"<GITHUB_REPOSITORY>\",\n\t\t\"labels\": [\"some-label\"]\n\t}\n}\n```\n\nReplace `<GITHUB_ACCOUNT_NAME>` with the account name you have installed the GitHub App to, and `<GITHUB_REPOSITORY>` with the repository name you want to use for issues.\n\nThe repository name must in the full-name format `owner/repo` (e.g. `facebook/react`).\n\nThe `labels` property can be used to provide a list of labels to automatically add to the issue. This property is optional and can be omitted.\n\n### Setup Environment Variables\n\nThe following two environment variables must be defined on the server.\n\n```\nSPOODER_CANARY_APP_ID=1234\nSPOODER_CANARY_KEY=/home/bond/.ssh/id_007_pcks8.key\n```\n\n`SPOODER_CANARY_APP_ID` is the **App ID** as shown on the GitHub App page.\n\n`SPOODER_CANARY_KEY` is the path to the private key file in PKCS#8 format.\n\n> [!NOTE]\n> Since `spooder` uses the Bun runtime, you can use the `.env.local` file in the project root directory to set these environment variables per-project.\n\n### Using Canary\n\nOnce configured, `spooder` will automatically raise an issue when the server exits with a non-zero exit code. \n\nIn addition, you can manually raise issues using the `spooder` API by calling `caution()` or `panic()`. More information about these functions can be found in the `API` section.\n\nIf `canary` has not been configured correctly, `spooder` will only print warnings to the console when it attempts to raise an issue.\n\n> [!WARNING]\n> Consider testing the canary feature with the `caution()` function before relying on it for critical issues.\n\n<a id=\"cli-canary-crash\"></a>\n## CLI > Canary > Crash\n\nIt is recommended that you harden your server code against unexpected exceptions and use `panic()` and `caution()` to raise issues with selected diagnostic information.\n\nIn the event that the server does encounter an unexpected exception which causes it to exit with a non-zero exit code, `spooder` will provide some diagnostic information in the canary report.\n\nSince this issue has been caught externally, `spooder` has no context of the exception which was raised. Instead, the canary report will contain the output from both `stdout` and `stderr`.\n\n```json\n{\n\t\"proc_exit_code\": 1,\n\t\"console_output\": [\n\t\t\"[2.48ms] \\\".env.local\\\"\",\n\t\t\"Test output\",\n\t\t\"Test output\",\n\t\t\"4 | console.warn('Test output');\",\n\t\t\"5 | \",\n\t\t\"6 | // Create custom error class.\",\n\t\t\"7 | class TestError extends Error {\",\n\t\t\"8 | \tconstructor(message: string) {\",\n\t\t\"9 | \t\tsuper(message);\",\n\t\t\"     ^\",\n\t\t\"TestError: Home is [IPv4 address]\",\n\t\t\"      at new TestError (/mnt/i/spooder/test.ts:9:2)\",\n\t\t\"      at /mnt/i/spooder/test.ts:13:6\",\n\t\t\"\"\n\t]\n}\n```\n\nThe `proc_exit_code` property contains the exit code that the server exited with.\n\nThe `console_output` will contain the last `64` lines of output from `stdout` and `stderr` combined. This can be configured by setting the `spooder.canary.crash_console_history` property to a length of your choice.\n\n```json\n{\n\t\"spooder\": {\n\t\t\"canary\": {\n\t\t\t\"crash_console_history\": 128\n\t\t}\n\t}\n}\n```\n\nThis information is subject to sanitization, as described in the `CLI > Canary > Sanitization` section, however you should be aware that stack traces may contain sensitive information.\n\nSetting `spooder.canary.crash_console_history` to `0` will omit the `console_output` property from the report entirely, which may make it harder to diagnose the problem but will ensure that no sensitive information is leaked.\n\n<a id=\"cli-canary-sanitization\"></a>\n## CLI > Canary > Sanitization\n\nAll reports sent via the canary feature are sanitized to prevent sensitive information from being leaked. This includes:\n\n- Environment variables from `.env.local`\n- IPv4 / IPv6 addresses.\n- E-mail addresses.\n\n```bash\n# .env.local\nDB_PASSWORD=secret\n```\n\n```ts\nawait panic({\n\ta: 'foo',\n\tb: process.env.DB_PASSWORD,\n\tc: 'Hello person@place.net',\n\td: 'Client: 192.168.1.1'\n});\n```\n\n```json\n[\n\t{\n\t\t\"a\": \"foo\",\n\t\t\"b\": \"[redacted]\",\n\t\t\"c\": \"Hello [e-mail address]\",\n\t\t\"d\": \"Client: [IPv4 address]\"\n\t}\n]\n```\n\nThe sanitization behavior can be disabled by setting `spooder.canary.sanitize` to `false` in the configuration. This is not recommended as it may leak sensitive information.\n\n```json\n{\n\t\"spooder\": {\n\t\t\"canary\": {\n\t\t\t\"sanitize\": false\n\t\t}\n\t}\n}\n```\n\n> [!WARNING]\n> While this sanitization adds a layer of protection against information leaking, it does not catch everything. You should pay special attention to messages and objects provided to the canary to not unintentionally leak sensitive information.\n\n<a id=\"cli-canary-system-information\"></a>\n## CLI > Canary > System Information\n\nIn addition to the information provided by the developer, `spooder` also includes some system information in the canary reports.\n\n```json\n{\n\t\"loadavg\": [\n\t\t0,\n\t\t0,\n\t\t0\n\t],\n\t\"memory\": {\n\t\t\"free\": 7620907008,\n\t\t\"total\": 8261840896\n\t},\n\t\"platform\": \"linux\",\n\t\"uptime\": 7123,\n\t\"versions\": {\n\t\t\"node\": \"18.15.0\",\n\t\t\"bun\": \"0.6.5\",\n\t\t\"webkit\": \"60d11703a533fd694cd1d6ddda04813eecb5d69f\",\n\t\t\"boringssl\": \"b275c5ce1c88bc06f5a967026d3c0ce1df2be815\",\n\t\t\"libarchive\": \"dc321febde83dd0f31158e1be61a7aedda65e7a2\",\n\t\t\"mimalloc\": \"3c7079967a269027e438a2aac83197076d9fe09d\",\n\t\t\"picohttpparser\": \"066d2b1e9ab820703db0837a7255d92d30f0c9f5\",\n\t\t\"uwebsockets\": \"70b1b9fc1341e8b791b42c5447f90505c2abe156\",\n\t\t\"zig\": \"0.11.0-dev.2571+31738de28\",\n\t\t\"zlib\": \"885674026394870b7e7a05b7bf1ec5eb7bd8a9c0\",\n\t\t\"tinycc\": \"2d3ad9e0d32194ad7fd867b66ebe218dcc8cb5cd\",\n\t\t\"lolhtml\": \"2eed349dcdfa4ff5c19fe7c6e501cfd687601033\",\n\t\t\"ares\": \"0e7a5dee0fbb04080750cf6eabbe89d8bae87faa\",\n\t\t\"usockets\": \"fafc241e8664243fc0c51d69684d5d02b9805134\",\n\t\t\"v8\": \"10.8.168.20-node.8\",\n\t\t\"uv\": \"1.44.2\",\n\t\t\"napi\": \"8\",\n\t\t\"modules\": \"108\"\n\t},\n\t\"bun\": {\n\t\t\"version\": \"0.6.5\",\n\t\t\"rev\": \"f02561530fda1ee9396f51c8bc99b38716e38296\",\n\t\t\"memory_usage\": {\n\t\t\t\"rss\": 99672064,\n\t\t\t\"heapTotal\": 3039232,\n\t\t\t\"heapUsed\": 2332783,\n\t\t\t\"external\": 0,\n\t\t\t\"arrayBuffers\": 0\n\t\t},\n\t\t\"cpu_usage\": {\n\t\t\t\"user\": 50469,\n\t\t\t\"system\": 0\n\t\t}\n\t}\n}\n```\n\n<a id=\"cli-logging\"></a>\n## CLI > Logging\n\n> [!NOTE]\n> This feature is not enabled by default.\n\n`spooder` can capture `stdout` and `stderr` output from each instance and write it to log files on disk. Each instance gets its own log file named `{instance_id}.log` inside the configured directory.\n\n```json\n{\n\t\"spooder\": {\n\t\t\"logging\": {\n\t\t\t\"enabled\": true,\n\t\t\t\"directory\": \"logs\",\n\t\t\t\"max_size\": 10485760,\n\t\t\t\"max_files\": 3\n\t\t}\n\t}\n}\n```\n\n| Property | Default | Description |\n| --- | --- | --- |\n| `enabled` | `false` | Enable file logging |\n| `directory` | `\"logs\"` | Directory for log files (relative to project root) |\n| `max_size` | `10485760` (10MB) | Maximum size in bytes before rotating |\n| `max_files` | `3` | Number of rotated files to keep |\n\nWhen a log file exceeds `max_size`, it is rotated: `instance.log` becomes `instance.1.log`, `instance.1.log` becomes `instance.2.log`, and so on. Files beyond `max_files` are deleted.\n\nThe log directory is created automatically on startup if it does not exist. Output is still printed to the console as normal — file logging is additive.\n\n> [!TIP]\n> You should add the log directory to your `.gitignore` to prevent log files from being committed.\n\n> [!NOTE]\n> When logging is enabled, instance output is piped through the CLI process regardless of the `canary.crash_console_history` setting. Both features can operate independently or together.\n\n# API\n\n<a id=\"api-cheatsheet\"></a>\n## API > Cheatsheet\n\n```ts\n// logging\nlog(message: string, ...params: any[]);\nlog_error(message: string, ...params: any[]);\nlog_create_logger(prefix: string, color: ColorInput);\nlog_list(input: any[], delimiter = ', ');\n\n// http\nhttp_serve(port: number, hostname?: string): Server;\nserver.port: number;\nserver.stop(immediate: boolean): Promise<void>;\n\n// cookies\ncookies_get(req: Request): Bun.CookieMap\n\n// routing\nserver.route(path: string, handler: RequestHandler, method?: HTTP_METHODS);\nserver.json(path: string, handler: JSONRequestHandler, method?: HTTP_METHODS);\nserver.throttle(delta: number, handler: JSONRequestHandler|RequestHandler);\nserver.unroute(path: string);\n\n// fallback handlers\nserver.handle(status_code: number, handler: RequestHandler);\nserver.default(handler: DefaultHandler);\nserver.error(handler: ErrorHandler);\nserver.on_slow_request(callback: SlowRequestCallback, threshold?: number);\nserver.allow_slow_request(req: Request);\n\n// http generics\nhttp_apply_range(file: BunFile, request: Request): HandlerReturnType;\n\n// directory serving\nserver.dir(path: string, dir: string, options?: DirOptions | DirHandler, method?: HTTP_METHODS);\n\n// server-sent events\nserver.sse(path: string, handler: ServerSentEventHandler);\n\n// webhooks\nserver.webhook(secret: string, path: string, handler: WebhookHandler, branches?: string | string[]);\n\n// websockets\nserver.websocket(path: string, handlers: WebsocketHandlers);\n\n// bootstrap\nserver.bootstrap(options: BootstrapOptions): Promise<void>;\n\n// error handling\nErrorWithMetadata(message: string, metadata: object);\ncaution(err_message_or_obj: string | object, ...err: object[]): Promise<void>;\npanic(err_message_or_obj: string | object, ...err: object[]): Promise<void>;\nsafe(fn: Callable): Promise<void>;\n\n// worker (main thread)\nworker_pool(options: WorkerPoolOptions): Promise<WorkerPool>;\npool.id: string;\npool.send: (peer: string, id: string, data?: WorkerMessageData) => void;\npool.broadcast: (id: string, data?: WorkerMessageData) => void;\npool.on: (event: string, callback: (message: WorkerMessage) => Promise<void> | void) => void;\npool.once: (event: string, callback: (message: WorkerMessage) => Promise<void> | void) => void;\npool.off: (event: string) => void;\n\ntype WorkerPoolOptions = {\n\tid?: string;\n\tworker: string | string[];\n\tsize?: number;\n\tauto_restart?: boolean | AutoRestartConfig;\n\tonWorkerStart?: (pool: WorkerPool, worker_id: string) => void;\n\tonWorkerStop?: (pool: WorkerPool, worker_id: string, exit_code: number) => void;\n};\n\ntype AutoRestartConfig = {\n\tbackoff_max?: number; // default: 5 * 60 * 1000 (5 min)\n\tbackoff_grace?: number; // default: 30000 (30 seconds)\n\tmax_attempts?: number; // default: 5, -1 for unlimited\n};\n\n// worker (worker thread)\nworker_connect(peer_id?: string): WorkerPool;\n\n// templates\nReplacements = Record<string, string | Array<string> | object | object[]> | ReplacerFn | AsyncReplaceFn;\nparse_template(template: string, replacements: Replacements, drop_missing?: boolean): Promise<string>;\n\n// cache busting\ncache_bust(string|string[]: path, format: string): string|string[]\ncache_bust_set_hash_length(length: number): void;\ncache_bust_set_format(format: string): void;\ncache_bust_get_hash_table(): Record<string, string>;\n\n// git\ngit_get_hashes(length: number): Promise<Record<string, string>>;\ngit_get_hashes_sync(length: number): Record<string, string>;\n\n// database utilities\ndb_set_cast<T extends string>(set: string | null): Set<T>;\ndb_set_serialize<T extends string>(set: Iterable<T> | null): string;\ndb_exists(db: SQL, table_name: string, value: string|number, column_name = 'id'): Promise<boolean>;\n\n// database schema\ntype SchemaOptions = {\n\tschema_table?: string;\n\trecursive?: boolean;\n};\n\ndb_get_schema_revision(db: SQL): Promise<number|null>;\ndb_schema(db: SQL, schema_path: string, options?: SchemaOptions): Promise<boolean>;\n\n// caching\ncache_http(options?: CacheOptions);\ncache.file(file_path: string): RequestHandler;\ncache.request(req: Request, cache_key: string, content_generator: () => string | Promise<string>): Promise<Response>;\n\n// utilities\nfilesize(bytes: number): string;\nBiMap: class BiMap<K, V>;\n\n// ipc\nipc_register(op: number, callback: IPC_Callback);\nipc_send(target: string, op: number, data?: object);\n\n// constants\nHTTP_STATUS_TEXT: Record<number, string>;\nHTTP_STATUS_CODE: { OK_200: 200, NotFound_404: 404, ... };\nEXIT_CODE: Record<string, number>;\nEXIT_CODE_NAMES: Record<number, string>;\nIPC_TARGET: Record<string, string>;\nIPC_OP: Record<string, number>;\n```\n\n<a id=\"api-logging\"></a>\n## API > Logging\n\n### 🔧 `log(message: string, ...params: any[])`\nPrint a message to the console using the default logger. Wrapping text segments in curly braces will highlight those segments with colour.\n\n```ts\nlog('Hello, {world}!');\n// > [info] Hello, world!\n```\n\nTagged template literals are also supported and automatically highlights values without the brace syntax.\n\n```ts\nconst user = 'Fred';\nlog`Hello ${user}!`;\n```\n\nFormatting parameters are supported using standard console logging formatters.\n\n```ts\nlog('My object: %o', { foo: 'bar' });\n// > [info] My object: { foo: 'bar' }\n```\n\n| Specifier | Description |\n|-----------|-------------|\n| `%s` | String |\n| `%d` | Integer |\n| `%i` | Integer (same as %d) |\n| `%f` | Floating point |\n| `%o` | Object (pretty-printed) |\n| `%O` | Object (expanded/detailed) |\n| `%j` | JSON string |\n\n### 🔧 `log_error(message: string, ...params: any[])`\nPrint an error message to the console. Wrapping text segments in curly braces will highlight those segments. This works the same as `log()` except it's red, so you know it's bad.\n\n```ts\nlog_error('Something went {really} wrong');\n// > [error] Something went really wrong\n```\n\n### 🔧 `log_create_logger(prefix: string, color: ColorInput)`\nCreate a `log()` function with a custom prefix and highlight colour.\n\n```ts\nconst db_log = log_create_logger('db', 'pink');\ndb_log('Creating table {users}...');\n```\n\n> [!INFO]\n> For information about `ColorInput`, see the [Bun Color API](https://bun.sh/docs/api/color).\n\n\n### 🔧 `log_list(input: any[], delimiter = ', ')`\nUtility function that joins an array of items together with each element wrapped in highlighting syntax for logging.\n\n```ts\nconst fruit = ['apple', 'orange', 'peach'];\nlog(`Fruit must be one of ${fruit.map(e => `{${e}}`).join(', ')}`);\nlog(`Fruit must be one of ${log_list(fruit)}`);\n```\n\n<a id=\"api-ipc\"></a>\n## API > IPC\n\n`spooder` provides a way to send/receive messages between different instances via IPC. See [CLI > Instancing](#cli-instancing) for documentation on instances.\n\n```ts\n// listen for a message\nipc_register(0x1, msg => {\n\t// msg.peer, msg.op, msg.data\n\tconsole.log(msg.data.foo); // 42\n});\n\n// send a message to dev02\nipc_send('dev02', 0x1, { foo: 42 });\n\n// send a message to all other instances\nipc_send(IPC_TARGET.BROADCAST, 0x1, { foo: 42 });\n```\n\nThis can also be used to communicate with the host process for certain functionality, such as [auto-restarting](#cli-auto-restart).\n\n#### OpCodes\n\nWhen sending/receiving IPC messages, the message will include an opcode. When communicating with the host process, that will be one of the following:\n\n```ts\nIPC_OP.CMSG_TRIGGER_UPDATE = -1;\nIPC_OP.SMSG_UPDATE_READY = -2;\nIPC_OP.CMSG_REGISTER_LISTENER = -3; // used internally by ipc_register\n```\n\nWhen sending/receiving your own messages, you can define and use your own ID schema. To prevent conflict with internal opcodes, always use positive values; `spooder` internal opcodes will always be negative.\n\n### `ipc_register(op: number, callback: IPC_Callback)`\n\nRegister a listener for IPC events. The callback will receive an object with this structure:\n\n```ts\ntype IPC_Message = {\n\top: number; // opcode received\n\tpeer: string; // sender\n\tdata?: object // payload data (optional)\n};\n```\n\n### `ipc_send(peer: string, op: number, data?: object)`\n\nSend an IPC event. The target can either be the ID of another instance (such as the `peer` ID from an `IPC_Message`) or one of the following constants.\n\n```ts\nIPC_TARGET.SPOODER; // communicate with the host\nIPC_TARGET.BROADCAST; // broadcast to all other instances\n```\n\n<a id=\"api-http\"></a>\n## API > HTTP\n\n### `http_serve(port: number, hostname?: string): Server`\nBootstrap a server on the specified port (and optional hostname). Pass `0` for the port to assign a random available port, which can then be retrieved via `server.port`.\n\n```ts\nimport { serve } from 'spooder';\n\nconst server = http_serve(8080); // port only\nconst server = http_serve(3000, '0.0.0.0'); // optional hostname\nconst server = http_serve(0); // random port, retrieve via server.port\n```\n\nBy default, the server responds with:\n\n```http\nHTTP/1.1 404 Not Found\nContent-Length: 9\nContent-Type: text/plain;charset=utf-8\n\nNot Found\n```\n\n### 🔧 `server.stop(immediate: boolean)`\n\nStop the server process immediately, terminating all in-flight requests.\n\n```ts\nserver.stop(true);\n```\n\nStop the server process gracefully, waiting for all in-flight requests to complete.\n\n```ts\nserver.stop(false);\n```\n\n`server.stop()` returns a promise, which if awaited, resolves when all pending connections have been completed.\n```ts\nawait server.stop(false);\n// do something now all connections are done\n```\n\n### 📖 `server.port`\n\nReturns the port the server is listening on. Useful when `0` is passed to `http_serve()` for a random port assignment.\n\n```ts\nconst server = http_serve(0);\nconsole.log(`Server listening on port ${server.port}`);\n```\n\n### Routing\n\n### 🔧 `server.route(path: string, handler: RequestHandler)`\n\nRegister a handler for a specific path.\n\n```ts\nserver.route('/test/route', (req, url) => {\n\treturn new Response('Hello, world!', { status: 200 });\n});\n```\n\n### 🔧 `server.unroute(path: string)`\n\nUnregister a specific route.\n\n```ts\nserver.route('/test/route', () => {});\nserver.unroute('/test/route');\n```\n\n### 🔧 `server.throttle(delta: number, handler: JSONRequestHandler|RequestHandler)`\n\nThrottles requests going through the provided handler so that they take a **minimum** of `delta` milliseconds. Useful for preventing brute-force of sensitive endpoints.\n\n> [!IMPORTANT]\n> This is a rudimentary countermeasure for brute-force attacks, **not** a defence against timing-attacks. Always use constant-time/timing-safe comparison functions in sensitive endpoints.\n\n```ts\nserver.json('/api/login', server.throttle(1000, (req, url, json) => {\n\t// this endpoint will always take at least 1000ms to execute\n}));\n\n// works with regular routes\nserver.route('/reset-password', server.throttle(1000, (req, url) => {\n\t// this route will also take at least 1000ms to execute\n}));\n```\n\n### 🔧 `server.json(path: string, handler: JSONRequestHandler, method?: HTTP_METHODS)`\n\nRegister a JSON endpoint with automatic content validation. This method automatically validates that the request has the correct `Content-Type: application/json` header and that the request body contains a valid JSON object.\n\n```ts\nserver.json('/api/users', (req, url, json) => {\n\t// json is automatically parsed and validated as a plain object\n\tconst name = json.name;\n\tconst email = json.email;\n\t\n\t// Process the JSON data\n\treturn { success: true, id: 123 };\n});\n```\n\nBy default, JSON routes are registered as `POST` endpoints, but this can be customized:\n\n```ts\nserver.json('/api/data', (req, url, json) => {\n\treturn { received: json };\n}, 'PUT');\n```\n\nThe handler will automatically return `400 Bad Request` if:\n- The `Content-Type` header is not `application/json`\n- The request body is not valid JSON\n- The JSON is not a plain object (e.g., it's an array, null, or primitive value)\n\n### HTTP Methods\n\nBy default, `spooder` will register routes defined with `server.route()` and `server.dir()` as `GET` routes, while `server.json()` routes default to `POST`. Requests to these routes with other methods will return `405 Method Not Allowed`.\n\n> [!NOTE]\n> Routes that accept `GET` also accept `HEAD`. The `GET` handler runs and Bun removes the body from the response, keeping the status and headers. Handlers that must tell the two apart can read `req.method`.\n\nThis can be controlled by providing the `method` parameter with a string or array defining one or more of the following methods.\n\n```\nGET | HEAD | POST | PUT | DELETE | CONNECT | OPTIONS | TRACE | PATCH\n```\n\n```ts\nserver.route('/test/route', (req, url) => {\n\tif (req.method === 'GET')\n\t\t// Handle GET request.\n\telse if (req.method === 'POST')\n\t\t// Handle POST request.\n}, ['GET', 'POST']);\n```\n\n> [!NOTE]\n> Routes defined with .sse() or .webhook() are always registered as 'GET' and 'POST' respectively and cannot be configured.\n\n### Redirection Routes\n\n`spooder` does not provide a built-in redirection handler since it's trivial to implement one using [`Response.redirect`](https://developer.mozilla.org/en-US/docs/Web/API/Response/redirect_static), part of the standard Web API.\n\n```ts\nserver.route('/redirect', () => Response.redirect('/redirected', HTTP_STATUS_CODE.MovedPermanently_301));\n```\n\n### Status Code Text\n\n`spooder` exposes `HTTP_STATUS_TEXT` to conveniently access status code text, and `HTTP_STATUS_CODE` for named status code constants.\n\n```ts\nimport { HTTP_STATUS_TEXT, HTTP_STATUS_CODE } from 'spooder';\n\nserver.default((req, status_code) => {\n\t// status_code: 404\n\t// Body: Not Found\n\treturn new Response(HTTP_STATUS_TEXT[status_code], { status: status_code });\n});\n\n// Using named constants for better readability\nserver.route('/api/users', (req, url) => {\n\tif (!isValidUser(req))\n\t\treturn HTTP_STATUS_CODE.Unauthorized_401;\n\t\n\t// Process user request\n\treturn HTTP_STATUS_CODE.OK_200;\n});\n```\n\n### RequestHandler\n\n`RequestHandler` is a function that accepts a [`Request`](https://developer.mozilla.org/en-US/docs/Web/API/Request) object and a [`URL`](https://developer.mozilla.org/en-US/docs/Web/API/URL) object and returns a `HandlerReturnType`.\n\n`HandlerReturnType` must be one of the following.\n\n| Type | Description |\n| --- | --- |\n| `Response` | https://developer.mozilla.org/en-US/docs/Web/API/Response |\n| `Blob` | https://developer.mozilla.org/en-US/docs/Web/API/Blob |\n| `BunFile` | https://bun.sh/docs/api/file-io |\n| `object` | Will be serialized to JSON. |\n| `string` | Will be sent as `text/html``. |\n| `number` | Sets status code and sends status message as plain text. |\n\n> [!NOTE]\n> For custom JSON serialization on an object/class, implement the [`toJSON()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify) method.\n\n`HandleReturnType` can also be a promise resolving to any of the above types, which will be awaited before sending the response.\n\n> [!NOTE]\n> Returning `Bun.file()` directly is the most efficient way to serve static files as it uses system calls to stream the file directly to the client without loading into user-space.\n\n### Query Parameters\n\nQuery parameters can be accessed from the `searchParams` property on the `URL` object.\n\n```ts\nserver.route('/test', (req, url) => {\n\treturn new Response(url.searchParams.get('foo'), { status: 200 });\n});\n```\n\n```http\nGET /test?foo=bar HTTP/1.1\n\nHTTP/1.1 200 OK\nContent-Length: 3\n\nbar\n```\n\nNamed parameters can be used in paths by prefixing a path segment with a colon.\n\n> [!IMPORTANT]\n> Named parameters will overwrite existing query parameters with the same name.\n\n```ts\nserver.route('/test/:param', (req, url) => {\n\treturn new Response(url.searchParams.get('param'), { status: 200 });\n});\n```\n\n### Wildcards\n\nWildcards can be used to match any path that starts with a given path.\n\n> [!NOTE]\n> If you intend to use this for directory serving, you may be better suited looking at the `server.dir()` function.\n\n```ts\nserver.route('/test/*', (req, url) => {\n\treturn new Response('Hello, world!', { status: HTTP_STATUS_CODE.OK_200 });\n});\n```\n\n> [!IMPORTANT]\n> Routes are [FIFO](https://en.wikipedia.org/wiki/FIFO_(computing_and_electronics)) and wildcards are greedy. Wildcards should be registered last to ensure they do not consume more specific routes.\n\n```ts\nserver.route('/*', () => HTTP_STATUS_CODE.MovedPermanently_301);\nserver.route('/test', () => HTTP_STATUS_CODE.OK_200);\n\n// Accessing /test returns 301 here, because /* matches /test first.\n```\n\n### Fallback Handlers\n\n### 🔧 `server.handle(status_code: number, handler: RequestHandler)`\nRegister a custom handler for a specific status code.\n```ts\nserver.handle(HTTP_STATUS_CODE.InternalServerError_500, (req) => {\n\treturn new Response('Custom Internal Server Error Message', { status: HTTP_STATUS_CODE.InternalServerError_500 });\n});\n```\n\n### 🔧 `server.default(handler: DefaultHandler)`\nRegister a handler for all unhandled response codes.\n> [!NOTE]\n> If you return a `Response` object from here, you must explicitly set the status code.\n```ts\nserver.default((req, status_code) => {\n\treturn new Response(`Custom handler for: ${status_code}`, { status: status_code });\n});\n```\n\n### 🔧 `server.error(handler: ErrorHandler)`\nRegister a handler for uncaught errors.\n\n> [!NOTE]\n> Unlike other handlers, this should only return `Response` or `Promise<Response>`.\n```ts\nserver.error((err, req, url) => {\n\treturn new Response('Custom Internal Server Error Message', { status: HTTP_STATUS_CODE.InternalServerError_500 });\n});\n```\n\n> [!IMPORTANT]\n> It is highly recommended to use `caution()` or some form of reporting to notify you when this handler is called, as it means an error went entirely uncaught.\n\n```ts\nserver.error((err, req, url) => {\n\t// Notify yourself of the error.\n\tcaution({ err, url });\n\n\t// Return a response to the client.\n\treturn new Response('Custom Internal Server Error Message', { status: HTTP_STATUS_CODE.InternalServerError_500 });\n});\n```\n\n### Slow Requests\n\n### 🔧 `server.on_slow_request(callback: SlowRequestCallback, threshold: number)`\n\n`server.on_slow_request` can be used to register a callback for requests that take an undesirable amount of time to process.\n\nBy default requests that take longer than `1000ms` to process will trigger the callback, but this can be adjusted by providing a custom threshold.\n\n> [!IMPORTANT]\n> If your canary reports to a public repository, be cautious about directly including the `req` object in the callback. This can lead to sensitive information being leaked.\n\n```ts\nserver.on_slow_request(async (req, time, url) => {\n\t// avoid `time` in the title to avoid canary spam\n\t// see caution() API for information\n\tawait caution('Slow request warning', { req, time });\n}, 500);\n```\n\n> [!NOTE]\n> The callback is not awaited internally, so you can use `async/await` freely without blocking the server/request.\n\n### 🔧 `server.allow_slow_request(req: Request)`\n\nIn some scenarios, mitigation throttling or heavy workloads may cause slow requests intentionally. To prevent these triggering a caution, requests can be marked as slow.\n\n```ts\nserver.on_slow_request(async (req, time, url) => {\n\tawait caution('Slow request warning', { req, time });\n}, 500);\n\nserver.route('/test', async (req) => {\n\t// this request is marked as slow, therefore won't\n\t// trigger on_slow_request despite taking 5000ms+\n\tserver.allow_slow_request(req);\n\tawait new Promise(res => setTimeout(res, 5000));\n});\n```\n\n> [!NOTE]\n> This will have no effect if a handler hasn't been registered with `on_slow_request`.\n\n<a id=\"api-http-directory\"></a>\n## API > HTTP > Directory Serving\n\n### 🔧 `server.dir(path: string, dir: string, options?: DirOptions | DirHandler)`\nServe files from a directory.\n\n```ts\nserver.dir('/content', './public/content');\n```\n\n> [!IMPORTANT]\n> `server.dir` registers a wildcard route. Routes are [FIFO](https://en.wikipedia.org/wiki/FIFO_(computing_and_electronics)) and wildcards are greedy. Directories should be registered last to ensure they do not consume more specific routes.\n\n```ts\nserver.dir('/', '/files');\nserver.route('/test', () => 200);\n\n// Route / is equal to /* with server.dir()\n// Accessing /test returns 404 here because /files/test does not exist.\n```\n\n#### Directory Options\n\nYou can configure directory behavior using the `DirOptions` interface:\n\n```ts\ninterface DirOptions {\n\tignore_hidden?: boolean;      // default: true\n\tindex_directories?: boolean;  // default: false  \n\tsupport_ranges?: boolean;     // default: true\n}\n```\n\n**Options-based configuration:**\n```ts\n// Enable directory browsing with HTML listings\nserver.dir('/files', './public', { index_directories: true });\n\n// Serve hidden files and disable range requests\nserver.dir('/files', './public', { \n\tignore_hidden: false, \n\tsupport_ranges: false \n});\n\n// Full configuration\nserver.dir('/files', './public', { \n\tignore_hidden: true,\n\tindex_directories: true,\n\tsupport_ranges: true \n});\n```\n\nWhen `index_directories` is enabled, accessing a directory will return a styled HTML page listing the directory contents with file and folder icons.\n\n#### Custom Directory Handlers\n\nFor complete control, provide a custom handler function:\n\n```ts\nserver.dir('/static', '/static', (file_path, file, stat, request, url) => {\n\t// ignore hidden files by default, return 404 to prevent file sniffing\n\tif (path.basename(file_path).startsWith('.'))\n\t\treturn HTTP_STATUS_CODE.NotFound_404;\n\n\tif (stat.isDirectory())\n\t\treturn HTTP_STATUS_CODE.Unauthorized_401;\n\n\treturn http_apply_range(file, request);\n});\n```\n\n| Parameter | Type | Reference |\n| --- | --- | --- |\n| `file_path` | `string` | The path to the file on disk. |\n| `file` | `BunFile` | https://bun.sh/docs/api/file-io |\n| `stat` | `fs.Stats` | https://nodejs.org/api/fs.html#class-fsstats |\n| `request` | `Request` | https://developer.mozilla.org/en-US/docs/Web/API/Request |\n| `url` | `URL` | https://developer.mozilla.org/en-US/docs/Web/API/URL |\n\nAsynchronous directory handlers are supported and will be awaited.\n\n```ts\nserver.dir('/static', '/static', async (file_path, file) => {\n\tlet file_contents = await file.text();\n\t// do something with file_contents\n\treturn file_contents;\n});\n```\n\n> [!NOTE]\n> The directory handler function is only called for files that exist on disk - including directories.\n\n> [!NOTE]\n> Uncaught `ENOENT` errors thrown from the directory handler will return a `404` response, other errors will return a `500` response.\n\n### 🔧 `http_apply_range(file: BunFile, request: Request): HandlerReturnType`\n\n`http_apply_range` parses the `Range` header for a request and slices the file accordingly. This is used internally by `server.dir()` and exposed for convenience.\n\n```ts\nserver.route('/test', (req, url) => {\n\tconst file = Bun.file('./test.txt');\n\treturn http_apply_range(file, req);\n});\n```\n\n```http\nGET /test HTTP/1.1\nRange: bytes=0-5\n\nHTTP/1.1 206 Partial Content\nContent-Length: 6\nContent-Range: bytes 0-5/6\nContent-Type: text/plain;charset=utf-8\n\nHello,\n```\n\n<a id=\"api-http-sse\"></a>\n## API > HTTP > Server-Sent Events (SSE)\n\n### 🔧 `server.sse(path: string, handler: ServerSentEventHandler)`\n\nSetup a [server-sent event](https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events) stream.\n\n```ts\nserver.sse('/sse', (req, url, client) => {\n\tclient.message('Hello, client!'); // Unnamed event.\n\tclient.event('named_event', 'Hello, client!'); // Named event.\n\n\tclient.message(JSON.stringify({ foo: 'bar' })); // JSON message.\n});\n```\n\n`client.closed` is a promise that resolves when the client closes the connection.\n\n```ts\nconst clients = new Set();\n\nserver.sse('/sse', (req, url, client) => {\n\tclients.add(client);\n\tclient.closed.then(() => clients.delete(client));\n});\n```\n\nConnections can be manually closed with `client.close()`. This will also trigger the `client.closed` promise to resolve.\n\n```ts\nserver.sse('/sse', (req, url, client) => {\n\tclient.message('Hello, client!');\n\n\tsetTimeout(() => {\n\t\tclient.message('Goodbye, client!');\n\t\tclient.close();\n\t}, 5000);\n});\n```\n\n<a id=\"api-http-webhooks\"></a>\n## API > HTTP > Webhooks\n\n### 🔧 `server.webhook(secret: string, path: string, handler: WebhookHandler, branches?: string | string[])`\n\nSetup a webhook handler.\n\n```ts\nserver.webhook(process.env.WEBHOOK_SECRET, '/webhook', payload => {\n\t// React to the webhook.\n\treturn HTTP_STATUS_CODE.OK_200;\n});\n```\n\n#### Branch Filtering\n\nYou can optionally filter webhooks by branch name using the `branches` parameter:\n\n```ts\n// Only trigger for main branch\nserver.webhook(process.env.WEBHOOK_SECRET, '/webhook', payload => {\n\t// This will only fire for pushes to main branch\n\treturn HTTP_STATUS_CODE.OK_200;\n}, 'main');\n\n// Trigger for multiple branches\nserver.webhook(process.env.WEBHOOK_SECRET, '/webhook', payload => {\n\t// This will fire for pushes to main or staging branches\n\treturn HTTP_STATUS_CODE.OK_200;\n}, ['main', 'staging']);\n```\n\nWhen branch filtering is enabled, the webhook handler will only be called for pushes to the specified branches. The branch name is extracted from the payload's `ref` field (e.g., `refs/heads/main` becomes `main`).\n\nA webhook callback will only be called if the following critera is met by a request:\n- Request method is `POST` (returns `405` otherwise)\n- Header `X-Hub-Signature-256` is present (returns `400` otherwise)\n- Header `Content-Type` is `application/json` (returns `401` otherwise)\n- Request body is a valid JSON object (returns `500` otherwise)\n- HMAC signature of the request body matches the `X-Hub-Signature-256` header (returns `401` otherwise)\n- If branch filtering is enabled, the push must be to one of the specified branches (returns `200` but ignores otherwise)\n\n> [!NOTE]\n> Constant-time comparison is used to prevent timing attacks when comparing the HMAC signature.\n\n<a id=\"api-http-websockets\"></a>\n## API > HTTP > Websocket Server\n\n### 🔧 `server.websocket(path: string, handlers: WebSocketHandlers)`\n\nRegister a route which handles websocket connections.\n\n```ts\nserver.websocket('/path/to/websocket', {\n\t// all of these handlers are OPTIONAL\n\n\taccept: (req, url) => {\n\t\t// validates a request before it is upgraded\n\t\t// returns HTTP 401 if FALSE is returned\n\t\t// allows you to check headers/authentication\n\t\t// url parameter contains query parameters from route\n\n\t\t// if an OBJECT is returned, the object will\n\t\t// be accessible on the websocket as ws.data.*\n\n\t\treturn true;\n\t},\n\n\topen: (ws) => {\n\t\t// called when a websocket client connects\n\t},\n\n\tclose: (ws, code, reason) => {\n\t\t// called when a websocket client disconnects\n\t},\n\n\tmessage: (ws, message) => {\n\t\t// called when a websocket message is received\n\t\t// message is a string or buffer\n\t},\n\n\tmessage_json: (ws, data) => {\n\t\t// called when a websocket message is received\n\t\t// payload is parsed as JSON\n\n\t\t// if payload cannot be parsed, socket will be\n\t\t// closed with error 1003: Unsupported Data\n\n\t\t// messages are only internally parsed if this\n\t\t// handler is present\n\t},\n\n\tdrain: (ws) => {\n\t\t// called when a websocket with backpressure drains\n\t}\n});\n```\n\n> [!IMPORTANT]\n> While it is possible to register multiple routes for websockets, the only handler which is unique per route is `accept()`. The last handlers provided to any route (with the exception of `accept()`) will apply to ALL websocket routes. This is a limitation in Bun.\n\n<a id=\"api-http-bootstrap\"></a>\n## API > HTTP > Bootstrap\n\n`spooder` provides a building-block style API with the intention of giving you the blocks to construct a server your way, rather than being shoe-horned into one over-engineered mega-solution which you don't need.\n\nFor simpler projects, the scaffolding can often look the same, potentially something similar to below.\n\n```ts\nimport { http_serve, cache_http, parse_template, http_apply_range, git_get_hashes } from 'spooder';\nimport path from 'node:path';\n\nconst server = http_serve(80);\nconst cache = cache_http({\n\tttl: 5 * 60 * 60 * 1000, // 5 minutes\n\tmax_size: 5 * 1024 * 1024, // 5 MB\n\tuse_canary_reporting: true,\n\tuse_etags: true\n});\n\nconst base_file = await Bun.file('./html/base_template.html').text();\nconst git_hash_table = await git_get_hashes();\n\nasync function default_handler(status_code: number): Promise<Response> {\n\tconst error_text = HTTP_STATUS_CODE[status_code] as string;\n\tconst error_page = await Bun.file('./html/error.html').text();\n\n\tconst content = await parse_template(error_page, {\n\t\ttitle: error_text,\n\t\terror_code: status_code.toString(),\n\t\terror_text: error_text\n\t}, true);\n\n\treturn new Response(content, { status: status_code });\n}\n\nserver.error((err: Error) => {\n\tcaution(err?.message ?? err);\n\treturn default_handler(HTTP_STATUS_CODE.InternalServerError_500);\n});\n\nserver.default((req, status_code) => default_handler(status_code));\n\nserver.dir('/static', './static', async (file_path, file, stat, request) => {\n\t// ignore hidden files by default, return 404 to prevent file sniffing\n\tif (path.basename(file_path).startsWith('.'))\n\t\treturn HTTP_STATUS_CODE.NotFound_404;\n\t\n\tif (stat.isDirectory())\n\t\treturn HTTP_STATUS_CODE.Unauthorized_401;\n\n\t// serve css/js files directly\n\tconst ext = path.extname(file_path);\n\tif (ext === '.css' || ext === '.js') {\n\t\tconst content = await parse_template(await file.text(), {\n\t\t\tcache_bust: (file) => `${file}?v=${git_hash_table[file]}`\n\t\t}, true);\n\n\t\treturn new Response(content, {\n\t\t\theaders: {\n\t\t\t\t'Content-Type': file.type\n\t\t\t}\n\t\t});\n\t}\n\t\n\treturn http_apply_range(file, request);\n});\n\nfunction add_route(route: string, file: string, title: string) {\n\tserver.route(route, async (req) => {\n\t\treturn cache.request(req, route, async () => {\n\t\t\tconst file_content = await Bun.file(file).text();\n\t\t\tconst template = await parse_template(base_file, {\n\t\t\t\ttitle: title,\n\t\t\t\tcontent: file_content,\n\t\t\t\tasset: (file) => git_hash_table[file]\n\t\t\t}, true);\n\n\t\t\treturn template;\n\t\t});\n\t});\n}\n\nadd_route('/', './html/index.html', 'Homepage');\nadd_route('/about', './html/about.html', 'About Us');\nadd_route('/contact', './html/contact.html', 'Contact Us');\nadd_route('/privacy', './html/privacy.html', 'Privacy Policy');\nadd_route('/terms', './html/terms.html', 'Terms of Service');\n```\n\nFor a project where you are looking for fine control, this may be acceptable, but for bootstrapping simple servers this can be a lot of boilerplate. This is where `server.bootstrap` comes in.\n\n### 🔧 `server.bootstrap(options: BootstrapOptions): Promise<void>`\n\nBootstrap a server using `spooder` utilities with a straight-forward options API, cutting out the boilerplate.\n\n```ts\nconst server = http_serve(80);\n\nserver.bootstrap({\n\tbase: Bun.file('./html/base_template.html'),\n\tdrop_missing_subs: false,\n\n\tcache: {\n\t\tttl: 5 * 60 * 60 * 1000, // 5 minutes\n\t\tmax_size: 5 * 1024 * 1024, // 5 MB\n\t\tuse_canary_reporting: true,\n\t\tuse_etags: true\n\t},\n\n\terror: {\n\t\tuse_canary_reporting: true,\n\t\terror_page: Bun.file('./html/error.html')\n\t},\n\t\n\tcache_bust: { // true or options\n\t\tformat: '$file#$hash', // default: $file?v=$hash\n\t\thash_length: 20, // default: 7\n\t\tprefix: 'bust' // default: cache_bust\n\t},\n\n\tstatic: {\n\t\tdirectory: './static',\n\t\troute: '/static',\n\t\tsub_ext: ['.css']\n\t},\n\n\tglobal_subs: {\n\t\t'project_name': 'Some Project'\n\t},\n\n\troutes: {\n\t\t'/': {\n\t\t\tcontent: Bun.file('./html/index.html'),\n\t\t\tsubs: { 'title': 'Homepage' }\n\t\t},\n\n\t\t'/about': {\n\t\t\tcontent: Bun.file('./html/about.html'),\n\t\t\tsubs: { 'title': 'About Us' }\n\t\t},\n\n\t\t'/contact': {\n\t\t\tcontent: Bun.file('./html/contact.html'),\n\t\t\tsubs: { 'title': 'Contact Us' }\n\t\t},\n\n\t\t'/privacy': {\n\t\t\tcontent: Bun.file('./html/privacy.html'),\n\t\t\tsubs: { 'title': 'Privacy Policy' }\n\t\t},\n\n\t\t'/terms': {\n\t\t\tcontent: Bun.file('./html/terms.html'),\n\t\t\tsubs: { 'title': 'Terms of Service' }\n\t\t}\n\t}\n});\n```\n\n#### Bootstrap Options\n\nThe `BootstrapOptions` object accepts the following properties:\n\n##### `base?: string | BunFile`\nOptional base template that wraps all route content. The base template should include `{{content}}` where the route content will be inserted.\n\n```ts\n// Base template: base.html\n<html>\n<head><title>{{title}}</title></head>\n<body>{{content}}</body>\n</html>\n\n// Usage\nserver.bootstrap({\n\tbase: Bun.file('./templates/base.html'),\n\troutes: {\n\t\t'/': {\n\t\t\tcontent: '<h1>Welcome</h1>',\n\t\t\tsubs: { title: 'Home' }\n\t\t}\n\t}\n});\n```\n\n##### `drop_missing_subs: boolean`\n\n**Optional**. Defaults to true. If explicitly disabled, templating parsing will not drop unknown substitutions.\n\n> ![NOTE]\n> If you are using a client-side framework that uses the double-brace syntax ``{{foo}}`` such as Vue, you should set this to `false` to ensure compatibility.\n\n##### `routes: Record<string, BootstrapRoute>`\n**Required.** Defines the routes and their content. Each route can have:\n- `content`: The page content (string or BunFile)\n- `subs?`: Template substitutions specific to this route\n\n```ts\nroutes: {\n\t'/about': {\n\t\tcontent: Bun.file('./pages/about.html'),\n\t\tsubs: { \n\t\t\ttitle: 'About Us',\n\t\t\tdescription: 'Learn more about our company'\n\t\t}\n\t}\n}\n```\n\n##### `cache?: CacheOptions | ReturnType<typeof cache_http>`\nOptional HTTP caching configuration. Can be:\n- A `CacheOptions` object (creates new cache instance)\n- An existing cache instance from `cache_http()`\n- Omitted to disable caching\n\n```ts\ncache: {\n\tttl: 5 * 60 * 1000,     // 5 minutes\n\tmax_size: 10 * 1024 * 1024, // 10 MB\n\tuse_etags: true,\n\tuse_canary_reporting: true\n}\n```\n\n##### `cache_bust?: CacheBustOptions | boolean`\nEnables the use of the [`cache_bust()`](#api-cache-busting) API inside templates using the ``{{cache_bust=file}}`` directive.\n\n```html\n<link href=\"{{cache_bust=static/css/style.css}}\">\n<script src=\"{{cache_bust=static/js/app.js}}\"></script>\n<img src=\"{{cache_bust=static/images/logo.png}}\">\n```\n\nSince this uses the [`cache_bust()`](#api-cache-busting) API internally, it is effected by the `cache_bust_set_hash_length` and `cache_bust_set_format` global functions.\n\nSetting `cache_bust` to `true` assumes the normal defaults, however this can be customized by providing an options object.\n\n```ts\ncache_bust: { // true or options\n\tformat: '$file#$hash', // default: $file?v=$hash\n\thash_length: 20, // default: 7\n\tprefix: 'bust' // default: cache_bust\n},\n```\n\n> ![IMPORTANT]\n> `format` and `hash_length` internally call `cache_bust_set_format` and `cache_bust_set_hash_length` respectively, so these values will effect `cache_bust()` globally.\n\n##### `error?: object`\nOptional error page configuration:\n- `error_page`: Template for error pages (string or BunFile)\n- `use_canary_reporting?`: Whether to report errors via canary\n\nError templates receive `{{error_code}}` and `{{error_text}}` substitutions.\n\n```ts\nerror: {\n\terror_page: Bun.file('./templates/error.html'),\n\tuse_canary_reporting: true\n}\n```\n\n##### `static?: object`\nOptional static file serving configuration:\n- `route`: URL path prefix for static files\n- `directory`: Local directory containing static files\n- `sub_ext?`: Array of file extensions that should have template substitution applied\n\n```ts\nstatic: {\n\troute: '/assets',\n\tdirectory: './public',\n\tsub_ext: ['.css', '.js']  // These files get template processing\n}\n```\n\nFiles with extensions in `sub_ext` will have template substitutions applied before serving. This includes support for functions to generate dynamic content:\n\n```ts\n// Dynamic CSS with function-based substitutions\nstatic: {\n\troute: '/assets',\n\tdirectory: './public',\n\tsub_ext: ['.css']\n},\n\nglobal_subs: {\n\ttheme_color: () => {\n\t\tconst hour = new Date().getHours();\n\t\treturn hour < 6 || hour > 18 ? '#2d3748' : '#4a5568';\n\t}\n}\n```\n\nThis allows CSS files to use dynamic substitutions: `color: {{theme_color}};`\n\n##### `global_subs?: Record<string, BootstrapSub>`\nOptional global template substitutions available to all routes, error pages, and static files with `sub_ext`.\n\n```ts\nglobal_subs: {\n\tsite_name: 'My Website',\n\tversion: '1.0.0',\n\tapi_url: 'https://api.example.com',\n\t\n\t// Function-based substitutions for dynamic content\n\tcurrent_year: () => new Date().getFullYear().toString(),\n\t\n\tbuild_time: async () => {\n\t\t// Example: fetch build timestamp from git\n\t\tconst process = Bun.spawn(['git', 'log', '-1', '--format=%ct']);\n\t\tconst output = await new Response(process.stdout).text();\n\t\treturn new Date(parseInt(output.trim()) * 1000).toISOString();\n\t},\n\t\n\tuser_count: async () => {\n\t\t// Example: dynamic user count from database\n\t\tconst count = await db.count('SELECT COUNT(*) as count FROM users');\n\t\treturn count.toLocaleString();\n\t}\n}\n```\n\nFunctions in `global_subs` and route-specific `subs` are called during template processing, allowing for dynamic content generation. Both synchronous and asynchronous functions are supported.\n\n#### Template Processing Order\n\n1. Route content is loaded\n2. If `base` is defined, content is wrapped using `{{content}}` substitution\n3. Route-specific `subs` and `global_subs` are applied\n4. Hash substitutions (if enabled) are applied\n\n<a id=\"api-http-cookies\"></a>\n## API > HTTP > Cookies\n\n### 🔧 `cookies_get(req: Request): Bun.CookieMap`\n\nWhen called on a request, the `cookies_get` function will return a `Bun.CookieMap` contains all of the cookies parsed from the `Cookie` header on the request.\n\n```ts\nserver.route('/', (req, url) => {\n\tconst cookies = cookies_get(req);\n\treturn `Hello ${cookies.get('person') ?? 'unknown'}`;\n});\n```\n\nThe return `Bun.CookieMap` is an iterable map with a custom API for reading/setting cookies. The full API [can be seen here](https://bun.com/docs/runtime/cookies).\n\nAny changes made to the cookie map (adding, deletion, editing, etc) will be sent as `Set-Cookie` headers on the response automatically. Unchanged cookies are not sent.\n\n```ts\nserver.route('/', (req, url) => {\n\tconst cookies = cookies_get(req);\n\tcookies.set('test', 'foobar');\n\treturn 'Hello, world!';\n\n\t// the response automatically gets:\n\t// Set-Cookie test=foobar; Path=/; SameSite=Lax\n});\n```\n\n<a id=\"api-error-handling\"></a>\n## API > Error Handling\n\n### 🔧 `ErrorWithMetadata(message: string, metadata: object)`\n\nThe `ErrorWithMetadata` class allows you to attach metadata to errors, which can be used for debugging purposes when errors are dispatched to the canary.\n\n```ts\nthrow new ErrorWithMetadata('Something went wrong', { foo: 'bar' });\n```\n\nFunctions and promises contained in the metadata will be resolved and the return value will be used instead.\n\n```ts\nthrow new ErrorWithMetadata('Something went wrong', { foo: () => 'bar' });\n```\n\n### 🔧 `caution(err_message_or_obj: string | object, ...err: object[]): Promise<void>`\n\nRaise a warning issue on GitHub. This is useful for non-fatal issues which you want to be notified about.\n\n> [!NOTE]\n> This function is only available if the canary feature is enabled.\n\n```ts\ntry {\n\t// Perform a non-critical action, such as analytics.\n\t// ...\n} catch (e) {\n\t// `caution` is async, you can use it without awaiting.\n\tcaution(e);\n}\n```\n\nAdditional data can be provided as objects which will be serialized to JSON and included in the report.\n\n```ts\ncaution(e, { foo: 42 });\n```\n\nA custom error message can be provided as the first parameter\n\n> [!NOTE]\n> Avoid including dynamic information in the title that would prevent the issue from being unique.\n\n```ts\ncaution('Custom error', e, { foo: 42 });\n```\n\nIssues raised with `caution()` are rate-limited. By default, the rate limit is `86400` seconds (24 hours), however this can be configured in the `spooder.canary.throttle` property.\n\n```json\n{\n\t\"spooder\": {\n\t\t\"canary\": {\n\t\t\t\"throttle\": 86400\n\t\t}\n\t}\n}\n```\n\nIssues are considered unique by the `err_message` parameter, so avoid using dynamic information that would prevent this from being unique.\n\nIf you need to provide unique information, you can use the `err` parameter to provide an object which will be serialized to JSON and included in the issue body.\n\n```ts\nconst some_important_value = Math.random();\n\n// Bad: Do not use dynamic information in err_message.\nawait caution('Error with number ' + some_important_value);\n\n// Good: Use err parameter to provide dynamic information.\nawait caution('Error with number', { some_important_value });\n```\n\n### 🔧 `panic(er","readmeFilename":"README.md"}