{"_id":"@automatedtf/butler","_rev":"10-c79aa09842682738eb08ce8da4f4f125","name":"@automatedtf/butler","dist-tags":{"latest":"0.0.10"},"versions":{"0.0.1":{"name":"@automatedtf/butler","version":"0.0.1","description":"### 📖 Table of Contents - [👋 Introduction](#-introduction) - [🔌 Getting Started](#-getting-started) - [💡 Improvements to Make](#-improvements-to-make) - [📚 Helpful Resources](#-helpful-resources)","main":"index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"tsc","dev":"npm run build && node out/index.js","start":"node out/index.js"},"repository":{"type":"git","url":"git+https://github.com/automatedtf/butler.git"},"author":{"name":"Mengh."},"license":"MIT","bugs":{"url":"https://github.com/automatedtf/butler/issues"},"homepage":"https://github.com/automatedtf/butler#readme","devDependencies":{"typescript":"^4.3.2"},"dependencies":{"steam-tradeoffer-manager":"^2.10.3","steam-user":"^4.19.10","steamcommunity":"^3.42.0"},"gitHead":"5a59b571586890d8e2ac4475949b1cf1e73252f0","_id":"@automatedtf/butler@0.0.1","_nodeVersion":"15.0.1","_npmVersion":"7.0.3","dist":{"integrity":"sha512-qimYw+lRqZdb+wyJY6QQGm0P/xQeU9HnsAOHBA+3Kbhc1Krbyt+LCzU94B01/swhVgNX1Ux0YXxGcwXJClaxEw==","shasum":"7a2fbb0df28a5c127f2b0b2a275c2a3c4ce3f255","tarball":"https://registry.npmjs.org/@automatedtf/butler/-/butler-0.0.1.tgz","fileCount":49,"unpackedSize":64314,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg9XtrCRA9TVsSAnZWagAA3mYP/0hbWlU++pT4yVlcxXcF\ntM6Ex+8JBSgTx/nqBJSO/+bmgtMO43RyWd0nTCL6su4ApRNVipMTAmHkDpYE\n7Q6Ut/pL2N02AsZ1ZWrdJfY0NoDnJbpMBNpu22fl0OghGaamALTwREC06m8w\nNMrk40IUf5h1L3n5OjpnKD5PNMdXwDjjVTBW8Vxm2SU9PSwMt+LaC/h9WECr\nQUEcAVTF4lvq55BPL7y6dZSdJaiDMI6V+10ornDRm9WsvZcVEO3vYLc+c1f3\niUtzg/xe99xLF9eX5lihP6QNMbnl6HBIDEL+SVo2GB3Y6dJhO9X3vLVBMtB/\nb1UEx7SVehKLjtiXDQDOJBWqJ+mW5iWWiVBibRXDpYpkixQkMZSIh+66zxsD\n47Wbu4/Dc3sRetZJWJS/IikQF1+rPA3donhKoA8wxuwUCgjsoA8/M+xtpWaS\nK6HXrFVy27rvAMz0acb/lt8T9ewsWYSxCRT6yQxPSe24C/bPoXeRZaeBoTdf\n5JC4YOsTkdfUdIoWmoT6Ikf31KDWINjOG9hQgTPp72OrTW/jrcQWjm3aCNAL\nJT8Q/HN2i9zwZQccVKM5/2u32B06J8bo+3fMT+jegjP0R3WxAK9+qo7c/ENI\nW/iI9bvxZNINcyCCUuUqAepJSU9r5Cz32ONbsvuKjowyv+Z1N0N21uh6FqvN\nj3M0\r\n=H2pj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDECSLxdD6tyzzV5DZCd0R/8BQSq55qOH5O5+PRusKIYgIhAKuTC8Tl5QUvbVAH75FMfzT3slCzurVf23gUnYZXHHtv"}]},"_npmUser":{"name":"hilliamt","email":"hilliamtung@gmail.com"},"directories":{},"maintainers":[{"name":"hilliamt","email":"hilliamtung@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/butler_0.0.1_1626700651441_0.3243986370754435"},"_hasShrinkwrap":false},"0.0.2":{"name":"@automatedtf/butler","version":"0.0.2","description":"### 📖 Table of Contents - [👋 Introduction](#-introduction) - [🔌 Getting Started](#-getting-started) - [💡 Improvements to Make](#-improvements-to-make) - [📚 Helpful Resources](#-helpful-resources)","main":"index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"tsc","dev":"npm run build && node out/index.js","start":"node out/index.js"},"repository":{"type":"git","url":"git+https://github.com/automatedtf/butler.git"},"author":{"name":"Mengh."},"license":"MIT","bugs":{"url":"https://github.com/automatedtf/butler/issues"},"homepage":"https://github.com/automatedtf/butler#readme","devDependencies":{"typescript":"^4.3.2"},"dependencies":{"steam-tradeoffer-manager":"^2.10.3","steam-user":"^4.19.10","steamcommunity":"^3.42.0"},"gitHead":"bc37185a7a5b4dcba880464f178b037e204cb25e","_id":"@automatedtf/butler@0.0.2","_nodeVersion":"15.0.1","_npmVersion":"7.0.3","dist":{"integrity":"sha512-RAL9DiD8aeebq2iC+SNVx8BYyp7ohfOgm0E8o289QDkP610/QH/fPXArRntabOsr8os/VlHReAv4HJMN5v4fcQ==","shasum":"2c3a4fa972afd6bb7aff4cb57998085f1b4507f1","tarball":"https://registry.npmjs.org/@automatedtf/butler/-/butler-0.0.2.tgz","fileCount":41,"unpackedSize":57497,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg9XukCRA9TVsSAnZWagAAq/wQAKMwisWLqPeMKspR9gyQ\ni2IY8rVeq2o/y10yUBeEA+GdosJ3J+ZT8OY1mAjex2fjA9arFE+SgT/S1zXy\nUR5kFdH5KGh/cN706axN3f/7GO2WbNoqOabm4YfqDlG/wB2Iyi4abp9qiDw7\nty+6Zdn5xhVHaVIGCHxBmtUlAoXA/4UQ8FW7ZEC4+vyquhQO+F98jO653UkV\nnUM1Ig3/OCZ+8FzIVFG46+vlTGqzDSPFrpmZ5ZfJVJP6UgRzrltBdJ+HDH5q\nB6HxesnpBuIcTnn+vs11gwOUYG7LDmwtbA7VcjpX6gbDzGSWgEmnU3jBDrh7\nW1hzSWiec6021A6UZmCPVpUpks9Bu/XDhKqoxTwM189PQZjDYaRYU0PvAOgR\nmFLYgJpAwgtn+YhZzca3BCgu0LME3m3cCvU8U7zJuE3NwQh0sWOduIk4/FDK\n5yP4HmmETPDh40hVA52kkjKSj9vWSjB4zmVnve+48y4E/oqFwh44Wp1wHhH4\n2/j3+VYJSE4jVcJckHI6hzoCNzwo4vpIEz3llYza8IgVa95NKxGtt9HOzo8J\n7T+TVcz2x70CmRBJ0Yt0EhT7m4e4rufY2z86bc9G7nZuHW5qvdSWTuhQGeG8\n1mbviaQbDc5BUvibxT+pDseD2lve6DTkoU3hQv1lyua8QCb6OKcyrKTTmalZ\nVYvu\r\n=N5e1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGVsGtIwJCYf+woVn/rjPveCPU9puyipucf54nLR++KAAiAadma+8F8KiCxXUHSHiMtnOcHJq1OJFYwWkhoPqbnDHA=="}]},"_npmUser":{"name":"hilliamt","email":"hilliamtung@gmail.com"},"directories":{},"maintainers":[{"name":"hilliamt","email":"hilliamtung@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/butler_0.0.2_1626700708476_0.5929593006932488"},"_hasShrinkwrap":false},"0.0.3":{"name":"@automatedtf/butler","version":"0.0.3","description":"### 📖 Table of Contents - [👋 Introduction](#-introduction) - [🔌 Getting Started](#-getting-started) - [💡 Improvements to Make](#-improvements-to-make) - [📚 Helpful Resources](#-helpful-resources)","main":"out/index.js","types":"out/index.d.ts","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"tsc","dev":"npm run build && node out/index.js","start":"node out/index.js"},"repository":{"type":"git","url":"git+https://github.com/automatedtf/butler.git"},"author":{"name":"Mengh."},"license":"MIT","bugs":{"url":"https://github.com/automatedtf/butler/issues"},"homepage":"https://github.com/automatedtf/butler#readme","devDependencies":{"typescript":"^4.3.2"},"dependencies":{"steam-tradeoffer-manager":"^2.10.3","steam-user":"^4.19.10","steamcommunity":"^3.42.0"},"gitHead":"d87ef1c5040bcadee9718037cb13b52c2ab2640e","_id":"@automatedtf/butler@0.0.3","_nodeVersion":"15.0.1","_npmVersion":"7.0.3","dist":{"integrity":"sha512-XJhpOqf3GwnflHstTAeuN/uYf6ilPsS6IYODTLkznURjlqyJZHHPrcMizVOy6/bhZXUqU3PONNEHJgJZ87K5NQ==","shasum":"7b183f863cdc7e139cb32efa5b91ca81bb8accc2","tarball":"https://registry.npmjs.org/@automatedtf/butler/-/butler-0.0.3.tgz","fileCount":41,"unpackedSize":57530,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg/Lx1CRA9TVsSAnZWagAA+N8QAIk+nd4YXLtamXadEEl8\n998jhczBZdTBASridmdvRQ7hpLbG9wsWaPTYo4wAsJmRbI52MU3qsxWaPBR3\nmKhzjFpJDGdopy7kM8rFyTq75toqZtbeRI2iRjTZRTcw40myvXiXTM6f+LCN\naBblNmSR01gTRNphfxax8oJSHEAGOamzPL+zFEscLS4ewz/whI9qzSDo67wh\n9UR/3AiJCHcc0wGlCEWlMITiXippgyPX20mkcLGUXAckvhes0ihPsFPY/it+\ne3yHS09byZ6+dCQrtRbdIUe+vpshV3AbDiuGSp1DneunOWDEDNuRDu2tDH0M\nMs5QMKUiYCMUgzRQRetJAukQbYcZuHxvKtoHWBSqasFpJaZ/bmKSFguKiabQ\nfqtPwfbPIXkfJGQ6foDRbpjNc44O5huAofNdnX/QETHToI0brB3EyuDVG8AJ\nbP4Jv29mLO1Qx3lncH41d65chavbgUwaX+3i0q2Dxza1AO8y35ufN53Mj/xv\nxXEV3QSJ4YSqaBe2uv4GeM6Ti3K/44vkWmo9YuE9eYrfGXvRSpOBPs4ATH4+\nkby0enicagfB2bBZdrOCO3Jvraam+YdN+mBtlSxJ3DXyaK8dPCeqjuh7ASgX\n+bIvBbsNBrc4YfGmmiX72raRXFCIcdPXIeH++nHlMfTKD334SH9LtJiOFOB9\nS42/\r\n=6HQc\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDklMurIPQznWH93in7pkiDPnI8vCUwG0qKXGfPemOeeAiAZVK3THTpPY/MZwwcRScRT+LCHsl5NAE1QbdB467fSbw=="}]},"_npmUser":{"name":"hilliamt","email":"hilliamtung@gmail.com"},"directories":{},"maintainers":[{"name":"hilliamt","email":"hilliamtung@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/butler_0.0.3_1627176053229_0.8860387394975033"},"_hasShrinkwrap":false},"0.0.4":{"name":"@automatedtf/butler","version":"0.0.4","description":"### 📖 Table of Contents - [👋 Introduction](#-introduction) - [🔌 Getting Started](#-getting-started) - [💡 Improvements to Make](#-improvements-to-make) - [📚 Helpful Resources](#-helpful-resources)","main":"out/index.js","types":"out/index.d.ts","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"tsc","dev":"npm run build && node out/index.js","start":"node out/index.js"},"repository":{"type":"git","url":"git+https://github.com/automatedtf/butler.git"},"author":{"name":"Mengh."},"license":"MIT","bugs":{"url":"https://github.com/automatedtf/butler/issues"},"homepage":"https://github.com/automatedtf/butler#readme","devDependencies":{"typescript":"^4.3.2"},"dependencies":{"steam-tradeoffer-manager":"^2.10.3","steam-user":"^4.19.10","steamcommunity":"^3.42.0"},"gitHead":"c7825bc6674d8108bd961567d46976e578d608d5","_id":"@automatedtf/butler@0.0.4","_nodeVersion":"15.0.1","_npmVersion":"7.0.3","dist":{"integrity":"sha512-51eAcYs6PY9E96222YK/tZDa+0vhwFvcw2LCxxPJ9nagZSpWMN1tt+kBWXK8kL8Wu1VWuIIp6n0lB6eKy3x+yA==","shasum":"ac054f9c79405015487f6a874a873da35f3640c6","tarball":"https://registry.npmjs.org/@automatedtf/butler/-/butler-0.0.4.tgz","fileCount":41,"unpackedSize":57755,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg/YfsCRA9TVsSAnZWagAANZ8P/0/cLI3j/JRuT+YoyKsm\nHIj8k5vIO5dz+demcZ0fM6fryJTOnFNCU/mYBuy+ypqau1rRAhyrPiQqAggs\nIvqMjUQduL7swH0tbNKz1++s8rVJNZ3gPuj3sy5objamAuWzZDLx15qPzADm\nz0JTxa0uvzrhidkDrgKb9l/CUAmxpLSszdDd9lpTQbWXcGSwhT51xXoeSGC7\nMFXRhLOM4ThZHcFASOB+7VpKiAxrAsZcl2Gq6keJW4TeWwz//azhUaZBnK3a\nyHK+1BrORtKT2GJ7uS7GDK0r7oTquWhZp+A3uz+wsXCFUjr1Czue1FhVZnQM\nujX5dmq3VdQFsrf10WSWphHyd9h6FHfWsG3azMZ2WKVRCfV9m781xKs7iown\nU6gLBh4lGJzYgIxD7vtunsCN1PZUdTskhsvZULM6g9i6YCHdVAgxDeOxTm9F\nWv4gpb5XJpOB2xKDY3ivZzduMZqYW7579QOfKiIWMvx1dfn6vX07XXVGhMDK\n8pQRm1SOAINIIGGT/srPJ7CItBv56qJwUbf8N7eSHTxrS/kQ9HPF3ZoRoKSt\naXXPbqT/KzGWsULZwJd7F3JWOdLVEqWuv1azoiP1MFrVzwktJk76vCnjkCSB\nacKNKZIKXegcwURJxZPCSzYMdXQRytUQXRwgtAtWbljl9XpE5ARPvGP/APak\nPnR3\r\n=sMk1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCJZxFo6KH5X9Vl0jqPrcs6FBrx2CZFOG/+BOFI65HuiQIhAMbCgIBZqA8//kLDOxM1q/V45SsVz9MxEmi4b9HoLmIW"}]},"_npmUser":{"name":"hilliamt","email":"hilliamtung@gmail.com"},"directories":{},"maintainers":[{"name":"hilliamt","email":"hilliamtung@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/butler_0.0.4_1627228140085_0.012811800678853569"},"_hasShrinkwrap":false},"0.0.5":{"name":"@automatedtf/butler","version":"0.0.5","description":"### 📖 Table of Contents - [👋 Introduction](#-introduction) - [🔌 Getting Started](#-getting-started) - [💡 Improvements to Make](#-improvements-to-make) - [📚 Helpful Resources](#-helpful-resources)","main":"out/index.js","types":"out/index.d.ts","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"tsc","dev":"npm run build && node out/index.js","start":"node out/index.js"},"repository":{"type":"git","url":"git+https://github.com/automatedtf/butler.git"},"author":{"name":"Mengh."},"license":"MIT","bugs":{"url":"https://github.com/automatedtf/butler/issues"},"homepage":"https://github.com/automatedtf/butler#readme","devDependencies":{"typescript":"^4.3.2"},"dependencies":{"steam-totp":"^2.1.1","steam-tradeoffer-manager":"^2.10.3","steam-user":"^4.19.10","steamcommunity":"^3.42.0"},"gitHead":"2c1353e454db53bef662e5313bcf3776b39b8cf1","_id":"@automatedtf/butler@0.0.5","_nodeVersion":"15.0.1","_npmVersion":"7.0.3","dist":{"integrity":"sha512-NL+npgdL5gXNGMQHPZInGjE8+IEiaCWiErcbJ7MtgBcBqdn7sk4oSz9vzZwTQzzU+1aU3+2PUF8e06lTYmHoRQ==","shasum":"69bd7a3f149414b7b6df84e53036fa3afbfdb3bb","tarball":"https://registry.npmjs.org/@automatedtf/butler/-/butler-0.0.5.tgz","fileCount":41,"unpackedSize":61059,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg/bn4CRA9TVsSAnZWagAAb5QP+wfsIOuGj2ALynVmKH9M\n8hyVxbpnhJ4jpn06ozRiHHeNABjffLS3QGaslSCP6GrqF9RKf5EOi+IRT9GV\n4AV/IrMNbSZ5Ygy+1upQxLyUdBGvSMf3dRO6uB27AHatbxpEUxAhVzPSCdVf\n6XtPgGGO6T9tff3OEMbISZ8G6C65g14YDCQ2kWxSd+aP7rF4e6woqkmRqseS\nrdz/0SdGMeVmNr3x0CUUouV/hW4Skfn7kCMP5CmEtYALP62PmuxQ6oe5P/gf\nRDgC9mucSt8aqtK+k7CpfP9N79eElICsBndpWtV7Tyt016v1rH2G7EsHAaXL\n3vsWy2P7AR6rFCeuKsaaX/2isasjtIMEBQS+0yCbPy/WL1xrbmS3YHdYivcF\nXOkDBbQqRMyToY7LvmbmedtyYYqoprDOCtqXFCcCZlN89QEEuwQflmCKGZuu\nC+lZtqK/l6Othuw1qwA0+jLSxXLsKmHCh6mNiXNYs4HeEkD9dml9MFDf3oLD\nYF/2/X4rUWDCxQh6734nVN0baK5LUNzHeg3IV1IXRVVqWyQN/XfqGwfGJ+dq\nkNbsANfKLTinIkKjxDFsTTe0wwT2WlGQFrEDUtZ7B4Tj8tY5NbLjR3TxlJ1C\nA6b+LcaV1guOskln/rEvYPqIoQ12lk95PTx8oTQNSGICIuvU2tKtgl14HR4p\nlcef\r\n=Qd6/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAh3lHQE4tY4TV7IdC3oh4WHBhWZQdvXzQTk019PzpTXAiEA1bijF5SNbBtU7pOh6ywHsWWJJ5r+VACSMHgl+kRSuYE="}]},"_npmUser":{"name":"hilliamt","email":"hilliamtung@gmail.com"},"directories":{},"maintainers":[{"name":"hilliamt","email":"hilliamtung@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/butler_0.0.5_1627240952712_0.8162069458028229"},"_hasShrinkwrap":false},"0.0.6":{"name":"@automatedtf/butler","version":"0.0.6","description":"### 📖 Table of Contents - [👋 Introduction](#-introduction) - [🔌 Getting Started](#-getting-started)     - [Example Usages](#example-usages)         - [Creating a Trade Offer](#creating-a-trade-offer)         - [Getting a Trade Offer](#getting-a-trade-o","main":"out/index.js","types":"out/index.d.ts","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"tsc","dev":"npm run build && node out/index.js","start":"node out/index.js"},"repository":{"type":"git","url":"git+https://github.com/automatedtf/butler.git"},"author":{"name":"Mengh."},"license":"MIT","bugs":{"url":"https://github.com/automatedtf/butler/issues"},"homepage":"https://github.com/automatedtf/butler#readme","devDependencies":{"typescript":"^4.3.2"},"dependencies":{"steam-totp":"^2.1.1","steam-tradeoffer-manager":"^2.10.3","steam-user":"^4.19.10","steamcommunity":"^3.42.0"},"gitHead":"25cb272265a923d288730491d7a9fe03d635f3a3","_id":"@automatedtf/butler@0.0.6","_nodeVersion":"15.0.1","_npmVersion":"7.0.3","dist":{"integrity":"sha512-nGTipqVqo9NbLy5kQU+sJ1+9S2uBQkA/ARvvFxHZDW8vgNN4t1tTwO3YYeirYJ9wMDBDjSe6RLcJWk5AXwkjmQ==","shasum":"1c9d995d5656f5ef1752e37bd0bc3135b6b9c2c1","tarball":"https://registry.npmjs.org/@automatedtf/butler/-/butler-0.0.6.tgz","fileCount":41,"unpackedSize":72017,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhB8hyCRA9TVsSAnZWagAAqmIP/1YOirT3KjiLpiHjndlJ\nB8YTzyLqciQHLYcpj2Pr1fwLMonfgGGccROn/oWEZExKgWCDcyJzugJ36fdf\n5DnK4mAJYmtn472FdUxzIfmnaB5xcz5Xta+Ie6PzUUB8kC7oDjHC8nU7uO63\nYKJr4drRcGbP9Mz0XeliIHExzNNpezVPR4mCb9MvltcRPFnTE0HqEXWn1m3Y\nvJ1DlIV7sWjw1BQG8Q8yPhuL0YlCyyxetqqGXr2+78QaV6zsu8WXOMpToKTO\nNNWSS9PUYJayRlgpDVHoTmB4sUtIkb5A3gd1U7yAy74Y9sQf7D0MO6D5kDBX\nqO+9/t/AF+GpGLXoPO3UDqojndDOd5rmk4pysUvA9rR0/nvhN+8/uan/nGLe\nfPcH2vkN9Y0Jfy/SgXvyb0ViM3sJEp2Ac3paT+m+BtW+VK+l3DOl5cKLJU7z\nqWRUabJjvbXB43lVQgiAp7FKYl0RJ/a7GO+4LuKXH1uNGdAI7yjYsadWoNrW\nddtMyRSUAwV2V4Rd4D7L7SDi8jCpeKKz0l7fHM1E9P1AhFOIIuG28OpkKHwX\nzZkOmgLrw7Ht/amhXnqnu8OpE0xVoNhC/0CsXcWyN/77ya6D+hJvJ6lofzva\neER6FFBGolQjK9zdC5Ud9BRP9hFM7kHkvA/+PrCVPnKc4j7YSIGhbgV2kbY4\nQYgo\r\n=Q5SP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICu1mLcul/3mpUmCqA8KtlLyxi/07ig+ISTgJkrWLY2rAiAD2zEnj4SF/4gwscX+f4TeMTMk54qWzv24NHhBqsdOmw=="}]},"_npmUser":{"name":"hilliamt","email":"hilliamtung@gmail.com"},"directories":{},"maintainers":[{"name":"hilliamt","email":"hilliamtung@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/butler_0.0.6_1627900018663_0.7118303516482878"},"_hasShrinkwrap":false},"0.0.7":{"name":"@automatedtf/butler","version":"0.0.7","description":"### 📖 Table of Contents - [👋 Introduction](#-introduction) - [🔌 Getting Started](#-getting-started)     - [Example Usages](#example-usages)         - [Creating a Trade Offer](#creating-a-trade-offer)         - [Getting a Trade Offer](#getting-a-trade-o","main":"out/index.js","types":"out/index.d.ts","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"tsc","dev":"npm run build && node out/index.js","start":"node out/index.js"},"repository":{"type":"git","url":"git+https://github.com/automatedtf/butler.git"},"author":{"name":"Mengh."},"license":"MIT","bugs":{"url":"https://github.com/automatedtf/butler/issues"},"homepage":"https://github.com/automatedtf/butler#readme","devDependencies":{"typescript":"^4.3.2"},"dependencies":{"steam-totp":"^2.1.1","steam-tradeoffer-manager":"^2.10.3","steam-user":"^4.19.10","steamcommunity":"^3.42.0"},"gitHead":"168eefba1adf5757f61fe2520c9432044d2f047f","_id":"@automatedtf/butler@0.0.7","_nodeVersion":"15.0.1","_npmVersion":"7.0.3","dist":{"integrity":"sha512-m3TRK/cPluHRds9Bvjr+VR677w53jiJDdMulMznCEFoK98DEpK/siWH4RGOD6UTxhyiMaLkAGXbpPNb9TO6APQ==","shasum":"e80e424ae3591075489ae6ecc3ca67dced5a4f32","tarball":"https://registry.npmjs.org/@automatedtf/butler/-/butler-0.0.7.tgz","fileCount":41,"unpackedSize":72018,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhB8mVCRA9TVsSAnZWagAAOIQP/j9DDYzsbko6imeKaTLY\nTb/7IKLmWoGTdaW4V1UYnOEGzIxMpF+J/D7fcgiB1L9VY+SBCpDCdYSS1R5I\nv0TKqxwczrRf2Ls5c8iiRdUJjNlKxMSSzuFI3CpDzelwlVPOJ9yc7lpV7Wd7\nnaibPFTdI/FpaL3C1Qf1eiJRn8BXtSCvbBoVfNci35kcdMrLxBCUkHDdgQvB\nHFxv7URUi4jx1dHv9a8Z6n0qrLFbO9MANDi7JJBhyD3rHvz8gZLygVXfEb69\nJ6pDSxn8DHlKAfnWWCWoFXzo4EumjbQi9/++tzSC4WVLVs5ejQ7+dhLZ3rFk\nIcZJHlVSUjAURVxHzAr4Rtoi3ZdEiKJGAMTMNC9nnNpLgfMtysiWYKrrZJf9\nCqw61HlD4Kxb798lgNacb7rNhGb0pV5V+/tIIB9gW5jWvoORfJWvOsrnkwB3\nbmZ8kBlk+3qto7J7EHKpsxvJ9noFMIqGGzHuHUW7VO9UIpkeI7YW/2OAXrRU\nf4mKCwIVocjN3b9qE16Qbq4ATnVGurHcuGeCUW2qtd1yvJFFxr3Pv+H/m7dW\nDuplOorpbi9pNKpxQfXBLopdxDgiZ3HF2rlcCtybXmSKZCUmfKVah+94OqLT\n6JHwbw9CLAGYUxi6g0IBMZa25Z7P1lu5NwTMCcpOsZkQ8VMfGp82G7U837bM\nrdJm\r\n=rm+w\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCIbQExSSSD3Eu6JJFCJMPUdQ0a3C9/UD/dzR99LNHJ6QIgekYxSsHon+tPoQz0LdWi1HTwaxAYOPI8znGno1lHuxQ="}]},"_npmUser":{"name":"hilliamt","email":"hilliamtung@gmail.com"},"directories":{},"maintainers":[{"name":"hilliamt","email":"hilliamtung@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/butler_0.0.7_1627900309756_0.6320621028681874"},"_hasShrinkwrap":false},"0.0.8":{"name":"@automatedtf/butler","version":"0.0.8","description":"### 📖 Table of Contents - [👋 Introduction](#-introduction) - [🔌 Getting Started](#-getting-started)     - [Example Usages](#example-usages)         - [Creating a Trade Offer](#creating-a-trade-offer)         - [Getting a Trade Offer](#getting-a-trade-o","main":"out/index.js","types":"out/index.d.ts","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"tsc","dev":"npm run build && node out/index.js","start":"node out/index.js"},"repository":{"type":"git","url":"git+https://github.com/automatedtf/butler.git"},"author":{"name":"Mengh."},"license":"MIT","bugs":{"url":"https://github.com/automatedtf/butler/issues"},"homepage":"https://github.com/automatedtf/butler#readme","devDependencies":{"typescript":"^4.3.2"},"dependencies":{"steam-totp":"^2.1.1","steam-tradeoffer-manager":"^2.10.3","steam-user":"^4.19.10","steamcommunity":"^3.42.0"},"gitHead":"7c661f97cb56e130f863bb9395ad91734e456cca","_id":"@automatedtf/butler@0.0.8","_nodeVersion":"15.0.1","_npmVersion":"7.0.3","dist":{"integrity":"sha512-M4hjECzSkwKCaCIiLrnQaJofVaCHSnUxT3StoySvefPVD6GEb8cqcGWl0sDEk/jVRtBjDoBuBo2H9lgg/+9wWg==","shasum":"4393b44b54727df5ed0f4ec3f9343ff7bdb707e4","tarball":"https://registry.npmjs.org/@automatedtf/butler/-/butler-0.0.8.tgz","fileCount":41,"unpackedSize":76124,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhEbDgCRA9TVsSAnZWagAAH/kP/0Sp5dJmazJDSY23E/4P\n9r2UWQ8GSf823t4zwUV+RkGNqlv//DTjY5JSecWTfszakS/KiCmU44OsX3W4\n/jXs4CMI+9CbWIuFjFS9eofMMdsv7iDCIOM0Tl0RM8qU3fYn624nX7RsFOi4\nbztyoayU4ppMPUWqoj0SCO6VlTW6grM5jwKsMKKsdK5T38dTUl8mndrpLY+J\nha4ShI28HL0xdd3gmYv8VGyU9tU52LP1433pLiFILm2Mm6tOkYKQWZ/fwbBT\n+oxUcnzc+0a+zrjicvrAMU5i2PjH12l8zRAC5/rGgV6R+bU1o1frBkpIXvQs\no06A3kVwz85MjTjIrgZqYNNEWp4f7LfmaLIvPmILRCgJxV+xv0wz9JmziV7B\ncNQtRod9ZBmLob9AkzezJxyuQzYY9MEFsVtveIMl/caR4HifUkm4QGzZY/tl\necSgKklHwJAFn80jstWeGosi38Nv4ZPoWpOEno9jSJ5C2oflsECWmZH99KvD\nCdGYasGvCeaPh28GdgBIV36z66/7KcCakn4N07RBPVpUQL1jpuUAo+45z0bh\nzEGpTcZ0vgaoWUsYVhHOWqE4tWiXrxaoDaOQJ/1dcEAnUH9qRhkOtABB+0HY\nD7gchRnbrmQOGIcoII5V3lhQiWdEsSFnty1ccQU3iyjHRdjDoOSc7zx3I3UR\nWm2O\r\n=5PeH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDUIa06bSVl1ScQ0Pzloj3Dm3TdAoT6Klz/0rzDRPluewIhAI7JZjv0n7XIMATRUA/Kz+Anb5QpNiG2+qYr4QagGTiI"}]},"_npmUser":{"name":"hilliamt","email":"hilliamtung@gmail.com"},"directories":{},"maintainers":[{"name":"hilliamt","email":"hilliamtung@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/butler_0.0.8_1628549344374_0.7300606311490581"},"_hasShrinkwrap":false},"0.0.9":{"name":"@automatedtf/butler","version":"0.0.9","description":"### 📖 Table of Contents - [👋 Introduction](#-introduction) - [🔌 Getting Started](#-getting-started)     - [Example Usages](#example-usages)         - [Creating a Trade Offer](#creating-a-trade-offer)         - [Getting a Trade Offer](#getting-a-trade-o","main":"out/index.js","types":"out/index.d.ts","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"tsc","dev":"npm run build && node out/index.js","start":"node out/index.js"},"repository":{"type":"git","url":"git+https://github.com/automatedtf/butler.git"},"author":{"name":"Mengh."},"license":"MIT","bugs":{"url":"https://github.com/automatedtf/butler/issues"},"homepage":"https://github.com/automatedtf/butler#readme","devDependencies":{"typescript":"^4.3.2"},"dependencies":{"steam-totp":"^2.1.1","steam-tradeoffer-manager":"^2.10.3","steam-user":"^4.19.10","steamcommunity":"^3.42.0"},"gitHead":"1808eab4685895b7b3221d642e799d7da8d56533","_id":"@automatedtf/butler@0.0.9","_nodeVersion":"17.4.0","_npmVersion":"8.3.1","dist":{"integrity":"sha512-me+WTjXzOgC+4+TNeo7ZombPaFmvQ9Py+7gNcvEL78vK14lUfpESYeTFuVs69Aw1bGDyeSoC4hIT1zTdyDU5Ig==","shasum":"8cc401fb7e7bdcaaeb297c76427c783094969f60","tarball":"https://registry.npmjs.org/@automatedtf/butler/-/butler-0.0.9.tgz","fileCount":41,"unpackedSize":76542,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCqgnW80b9GehfC88WQg4iTtIaUBTtgUexo4DCeU16lEwIhAIG965ezfRUu6mrU3P5jx95ZqiJTpd4JvQoFh0CbIKFn"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiVGt2ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrljA/+M7i7HepV0JT4ZKdOpiEFdxsIshrTCIZnARQDTRTAOnF4vSp4\r\n72hbg6Pr5jx/9jcw4zzGA//bEzNJ03kjayBjH4uKLwgKLBCgG7JObUepSDei\r\n7gKqZRcMqF1okGRqh0831NJaeED+jj0iyDHYMVNVyzwaKGInENGHPS2aCJuK\r\n6yAWFggyN+ATR1tBD3V+9osn9iV3h8Tc6ZiMtrl+3xz5G0IjdFMgyo3GZcgM\r\nlZNgrHzJxeXfvlzY5tzbbRvJ+dv+qBHcA/4wZA5LStI7UWUYjJSdYtHHCrg2\r\nhJ3HiR6bJn/ME8Avgb0IaIAuUctDKKUZFoCyLPsM8E1ANnU580ocad5VBSDN\r\nfn0ZE57prZD2iQ7HlX9WWGRMhrdcR3f1MB5OxVffgZBhIpp4blXJvgCD6u5h\r\nIbS+2ehndHFNZgjkt3dtCumq8GePw6Wh+wuy+yddk+LBb7crmTDl0qhU8cIw\r\nNv7RCfcihv89yR1hU3ZROmfonYoqmhL1k80KzFHQgok7/1XyofbFGFoUCTzb\r\nFsXwQMXrgmzK19xteMTK2w6/yu7nivpUa5RtMaX8ZdL3d84YcqMhXC8hCUox\r\ndaTp6wLobngsVmiLDP6yhpckCBHEotRtGo51Ja54iynLU0s7nhQgHPNUCS5c\r\nLBrssYx9LdoOFuB3IkzHgPpeAiNH2rToMcs=\r\n=D6pS\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"hilliamt","email":"hilliamtung@gmail.com"},"directories":{},"maintainers":[{"name":"hilliamt","email":"hilliamtung@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/butler_0.0.9_1649699702263_0.8275941765744155"},"_hasShrinkwrap":false},"0.0.10":{"name":"@automatedtf/butler","version":"0.0.10","description":"### 📖 Table of Contents - [👋 Introduction](#-introduction) - [🔌 Getting Started](#-getting-started)     - [Example Usages](#example-usages)         - [Creating a Trade Offer](#creating-a-trade-offer)         - [Getting a Trade Offer](#getting-a-trade-o","main":"out/index.js","types":"out/index.d.ts","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"tsc","dev":"npm run build && node out/index.js","start":"node out/index.js"},"repository":{"type":"git","url":"git+https://github.com/automatedtf/butler.git"},"author":{"name":"Mengh."},"license":"MIT","bugs":{"url":"https://github.com/automatedtf/butler/issues"},"homepage":"https://github.com/automatedtf/butler#readme","devDependencies":{"typescript":"^4.3.2"},"dependencies":{"steam-totp":"^2.1.1","steam-tradeoffer-manager":"^2.10.3","steam-user":"^4.19.10","steamcommunity":"^3.42.0"},"gitHead":"1ca921e3c2ca8886a7093103fb76f9d8323623e5","_id":"@automatedtf/butler@0.0.10","_nodeVersion":"17.4.0","_npmVersion":"8.3.1","dist":{"integrity":"sha512-WnhUlPSbu+2f9BLKYhCPRMzZ6x4n6yt3kQRJjOrnZQy8I0hOUfBOYQi4GdG6vZdZ88QEnJ8451C3a6t1/ysjgg==","shasum":"800ebcff6a38f37ba1cb344a4a42eb7723e293b3","tarball":"https://registry.npmjs.org/@automatedtf/butler/-/butler-0.0.10.tgz","fileCount":32,"unpackedSize":53243,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFFLw1TfA9gM4B+siWy2RolVCCMhs8dp4QrVuV5v6ZGuAiBZ1GJ/iqgNjQiBzAVrgZEaX5q/PGPp2bU3wjRDmmx9SA=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiWewhACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpqmA/7Bwu42Celn0o+tkQOm/s7jaFl74++iyqAws7cy9MrHMuHTxul\r\nIjtSZzO9hifmTy08MBOyAA6FZ639l4MjhA6FR/D4W0jPXDag2ZpB/dJe+FU7\r\ny34R5IW3yxJ/sSxgfck/G4xs6R6wreT7egaVO6OG3x0apHbLdJh139Y/rce2\r\nr506UoRF3s9dUd081YGaacq1pqnfdEK9PhtBwT9G2oLd3IY2l/eMA7eaby2S\r\nmZQFuVdR/ZdIyXT4+BEDBVRfq6Ti4jBEQMKbrYFbgvgwHVC+a+2h1DAgMUh1\r\nrALKyEpmWGSDF+G49tdar5pLyCaXBSTdl6IbAaZUAbxs1ZR4z7PWMCSM3Kkm\r\nRJCvLatW+//9z8FY/vwiatyaFQyBneiBEbfLOQxVrIZRpD3q7JDz17Zsk40S\r\nV5J936SM8Bl81G2npi+nh84qBV4NJnVBnuw//cX+hZUYmV9BbZqdWYnBSlmc\r\n8svOrlXy/u5F9BYFHnjRfEc4MxofQsTaklDJ7sMmAW5Cy2AaYlpw6dz1iEky\r\nNzn0dBXDvFytbS8nTqv4S+0sdaA20m2MwsiSZyTi5e3969Drbz00JO8VwWpO\r\nzjW9TdCEQ3hhQJEbBMlWKAuMKFdjOE4kRFzNOtRvIFFg9enUTm38HfugxS1O\r\nC/I7JY5iKFVI6By7N02JlL5hGJONGgi5pPA=\r\n=03pu\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"hilliamt","email":"hilliamtung@gmail.com"},"directories":{},"maintainers":[{"name":"hilliamt","email":"hilliamtung@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/butler_0.0.10_1650060321564_0.462268153057918"},"_hasShrinkwrap":false}},"time":{"created":"2021-07-19T13:17:31.441Z","0.0.1":"2021-07-19T13:17:31.648Z","modified":"2022-04-15T22:05:21.851Z","0.0.2":"2021-07-19T13:18:28.633Z","0.0.3":"2021-07-25T01:20:53.429Z","0.0.4":"2021-07-25T15:49:00.249Z","0.0.5":"2021-07-25T19:22:32.834Z","0.0.6":"2021-08-02T10:26:58.844Z","0.0.7":"2021-08-02T10:31:49.894Z","0.0.8":"2021-08-09T22:49:04.546Z","0.0.9":"2022-04-11T17:55:02.433Z","0.0.10":"2022-04-15T22:05:21.751Z"},"maintainers":[{"name":"hilliamt","email":"hilliamtung@gmail.com"}],"description":"### 📖 Table of Contents - [👋 Introduction](#-introduction) - [🔌 Getting Started](#-getting-started)     - [Example Usages](#example-usages)         - [Creating a Trade Offer](#creating-a-trade-offer)         - [Getting a Trade Offer](#getting-a-trade-o","homepage":"https://github.com/automatedtf/butler#readme","repository":{"type":"git","url":"git+https://github.com/automatedtf/butler.git"},"author":{"name":"Mengh."},"bugs":{"url":"https://github.com/automatedtf/butler/issues"},"license":"MIT","readme":"# Butler 🤵\n\n### 📖 Table of Contents\n- [👋 Introduction](#-introduction)\n- [🔌 Getting Started](#-getting-started)\n    - [Example Usages](#example-usages)\n        - [Creating a Trade Offer](#creating-a-trade-offer)\n        - [Getting a Trade Offer](#getting-a-trade-offer)\n    - [Login Details](#login-details)\n        - [Minimal Login Details](#minimal-login-details)\n        - [Setting a LogonID](#setting-a-logonid)\n        - [BotInstance](#botinstance)\n    - [Processing an IncomingTradeOffer](#processing-an-incomingtradeoffer)\n        - [Accepting an IncomingTradeOffer](#accepting-an-incomingtradeoffer)\n        - [Declining an IncomingTradeOffer](#declining-an-incomingtradeoffer)\n        - [Countering an IncomingTradeOffer](#countering-an-incomingtradeoffer)\n    - [Creating an OutgoingTradeOffer](#creating-an-outgoingtradeoffer)\n        - [Adding Items to an OutgoingTradeOffer](#adding-items-to-an-outgoingtradeoffer)\n        - [Sending the OutgoingTradeOffer](#sending-the-outgoingtradeoffer)\n    - [Getting Trade Exchange Details](#getting-trade-exchange-details)\n        - [Exchange Details for an OutgoingTradeOffer](#exchange-details-for-an-outgoingtradeoffer)\n        - [Exchange Details for an IncomingTradeOffer](#exchange-details-for-an-incomingtradeoffer)\n    - [Changing Profile Details](#changing-profile-details)\n        - [Editing Public Profile](#editing-public-profile)\n        - [Updating Profile Picture](#updating-profile-picture)\n    - [Accessing other Steam Functionalities](#accessing-other-steam-functionalities)\n- [💡 Improvements to Make](#-improvements-to-make)\n    - [In-Memory Bot Instances](#in-memory-bot-instances)\n- [📚 Helpful Resources](#-helpful-resources)\n\n## 👋 Introduction\n\nButler is a library for actively interfacing with Steam APIs to perform actions on the platform in a simplified fashion.\n\nThe large majority of \"Steam bots\" currently couple together passive interfacing (i.e listening to API events on poll) and active interfacing (i.e actions such as making and sending a Steam trade offer) within a single application. This causes coupling, make testing long and difficult.\n\nBy separating the logic into a passive component [`@automatedtf/sentinel`](https://github.com/automatedtf/sentinel) and an active component `@automatedtf/butler`, it allows for cross-applicational systems to exist with newly-found opportunities for scalability, robustness and maintenance.\n\nThis library is designed to provide functions built for ephemeral execution, meaning that it is suitable for usage in stateful settings (i.e handler functions for a 24/7 bot instance) and stateless settings (i.e Cloud / Lambda functions).\n\n## 🔌 Getting Started\n\nTo use the library, you will need to install it via `npm`:\n```typescript\nnpm install @automatedtf/butler\n```\nThis will add the library to your `package.json` file.\n\n### Example Usages\nBelow are a few examples of how to use the library. There are more functionalities available, which are listed later on.\n##### Creating a Trade Offer\n```typescript\nimport { withLoginDetails } from '@automatedtf/butler';\n\nconst loginDetails: SteamLoginDetails = { ... };\nconst tradeURL: string = ...;\nconst draftOffer: OutgoingTradeOffer = await withLoginDetails(loginDetails).createOffer(tradeURL);\n\n// Trade offer construction\nconst myItemsToAdd: Item[] = [...];\nconst theirItemsToAdd: Item[] = [...];\nconst tradeMessage: string = \"Please accept!\";\n\nawait draftOffer\n    .addMyItems(myItemsToAdd) // Add my items\n    .addTheirItems(theirItemsToAdd) // Add their items\n    .setMessage(tradeMessage) // Set trade message\n    .send(); // Send the offer!\n\nconsole.log(draftOffer.offer.id); // The offer is given an ID after it is sent\n```\n\n##### Getting a Trade Offer\n```typescript\nimport { withLoginDetails } from '@automatedtf/butler';\n\nconst loginDetails: SteamLoginDetails = { ... };\nconst offerid: string = ...;\nconst incomingOffer: IncomingTradeOffer = await withLoginDetails(loginDetails).getOffer(offerid);\n\nconsole.log(incomingOffer.offer.id); // incomingOffer.offer.id === offerid\n```\n\n### Login Details\nThe interface `SteamLoginDetails` details the various login details that may be needed to login.\n\n```typescript\ninterface SteamLoginDetails {\n    accountName: string;\n    password: string;\n    steamguard?: string; // Steam Guard code for those logging in on Steam Guard Authorisation email\n    authCode?: string; // Steam Guard code on first email authentication\n    twoFactorCode?: string;\n    captcha?: string;\n    disableMobile?: boolean;\n    logonID?: number;\n}\n```\nThese login details are used for logging into the Steam platform programmatically, being handled by Dr. Mckay's [`steamcommunity`](https://github.com/DoctorMcKay/node-steamcommunity/wiki/SteamCommunity).\n\n[🔗 Read more about logging in with SteamCommunity](https://github.com/DoctorMcKay/node-steamcommunity/wiki/SteamCommunity#logindetails-callback)\n\n##### Minimal Login Details\n\nFor the bare minimum to login, you should set the required fields for the `SteamSecrets` interface.\n\n```typescript\nconst loginDetails: SteamSecrets = {\n    accountName: 'username',\n    password: 'password',\n    identitySecret: 'identitySecret',\n    sharedSecret: 'sharedSecret'\n};\n```\n\n[🔗 Definition of SteamSecrets interface](https://github.com/automatedtf/butler/blob/master/lib/types.ts#L21)\n\n##### Setting a LogonID\nThe usage of a `logonID` is optional.\n\nWhen logging into an instance of a bot from `@automatedtf/sentinel`, `@automatedtf/butler` or by any other modules, it will kick all other sessions of the bot with the same `logonID`.\n\nTo allow for multiple sessions of the bot to run, a unique `logonID` for that running bot instance. This can be set explicitly or randomly. The module will generate a deterministic `logonID` if not set, using the hash `Date.now() % 2 ** 16`.\n\n##### BotInstance\nLogging in with any suitable form of login details will return a `BotInstance`.\n\n```typescript\nimport { withLoginDetails, BotInstance } from '@automatedtf/butler';\n\nconst loginDetails: SteamLoginDetails = { ... };\nconst botInstance: BotInstance = await withLoginDetails(loginDetails);\n```\n\nThis class has its own set of methods that can be interfaced with to perform various additional actions on the Steam platform. Generally, this class will be used for accessing offers via `BotInstance.getOffer` and `BotInstance.createOffer`.\n\n[🔗 Accessing other Steam Functionalities](#accessing-other-steam-functionalities)\n\n##### Logging in with Cookies\nCookies are given when a `steam-user` client joins a `webSession`. These cookies can be used to log back into a previous session without having to login again. This is highly recommended when you are logging into multiple instances of a bot, as you may the receive the `AlreadyLoggedInElsewhere` error at times.\n\nTo login with cookies, you can use the `withCookies` function instead of `withLoginDetails`.\n\n```typescript\nimport { withCookies } from '@automatedtf/butler';\nconst loginDetails: SteamLoginDetails = { ... };\nconst cookies: string[] = [...];\n\nconst botInstance: BotInstance = withCookies(cookies);\n```\n\n[🔗 Read more about logging in with Cookies](https://dev.doctormckay.com/topic/365-cookies/)\n\n### Processing an IncomingTradeOffer\nWhen an incoming trade offer is received from a user (e.g from receiving the event from `@automatedtf/sentinel` or as part of an event handler), you can process it using the following methods attached to the `IncomingTradeOffer` object that is returned when you decide to get the offer from using `BotInstance.getOffer`.\n\n##### Accepting an IncomingTradeOffer\n```typescript\nimport { withLoginDetails } from '@automatedtf/butler';\n\nconst offerid = '...';\nconst loginDetails: SteamLoginDetails = { ... };\n\nconst incomingOffer: IncomingTradeOffer = await withLoginDetails(loginDetails).getOffer(offerid);\n\n// Accepting an incoming trade offer\nawait incomingOffer.accept();\n```\n\n##### Declining an IncomingTradeOffer\n```typescript\nimport { withLoginDetails } from '@automatedtf/butler';\n\nconst offerid = '...';\nconst loginDetails: SteamLoginDetails = { ... };\n\nconst incomingOffer: IncomingTradeOffer = await withLoginDetails(loginDetails).getOffer(offerid);\n\n// Decline an incoming trade offer\nawait incomingOffer.decline();\n```\n\n##### Countering an IncomingTradeOffer\n```typescript\nimport { withLoginDetails } from '@automatedtf/butler';\n\nconst offerid = '...';\nconst loginDetails: SteamLoginDetails = { ... };\n\nconst incomingOffer: IncomingTradeOffer = await withLoginDetails(loginDetails).getOffer(offerid);\n\n// Countering an incoming trade offer\nconst draftOutgoingOffer = await incomingOffer.counter();\n\n// Next: Add items, set message, etc.\n```\n\n### Creating an OutgoingTradeOffer\nYou can use the `BotInstance.createOffer` method or `IncomingTradeOffer.counter` method (as shown above) to create an outgoing trade offer.\n\n```typescript\nimport { withLoginDetails } from '@automatedtf/butler';\n\nconst tradeURL: string = ...;\nconst loginDetails: SteamLoginDetails = { ... };\n\nconst outgoingOffer: OutgoingTradeOffer = await withLoginDetails(loginDetails).createOffer(tradeURL);\n```\n\n##### Adding Items to an OutgoingTradeOffer\n```typescript\nconst outgoingOffer: OutgoingTradeOffer = ...; // get somehow\n\nconst myItemsToAdd: Item[] = [...];\nconst theirItemsToAdd: Item[] = [...];\nconst message: string = \"Please accept!\";\n\noutgoingOffer.addMyItems(myItemsToAdd); // Add my items\noutgoingOffer.addTheirItems(theirItemsToAdd); // Add their items\n```\n\nThe `Item` interface is defined as follows:\n```typescript\ninterface Item {\n    assetid: string;\n    appid: number;\n    contextid: string;\n    amount: number;\n}\n```\n\nYou can fetch instances of `Item` from a supported API or module, but generally, you can set this for yourself.\n\n```typescript\n// Creating an `Item` for Team Fortress 2 items\n\nimport { ItemInstance } from '@automatedtf/sherpa';\nconst item: ItemInstance = ...; // Get somehow  \n\nfunction toItem(itemInstance: ItemInstance): Item {\n    return {\n        assetid: itemInstance.assetid,\n        appid: itemInstance.appid, // 440 for TF2\n        contextid: '2', // ContextID for all TF2 items\n        amount: 1\n    } as Item;\n}\n```\n##### Sending the OutgoingTradeOffer\nWhen you are ready, you can then send the trade offer.\n```typescript\n// Set trade message (optional!)\noutgoingOffer.setMessage(message); \n\n// Send the offer!\nawait outgoingOffer.send();\n```\nConfirmation for the trade offer object is done automatically for convenience, meaning that you will not need to do anything else to ensure that the trade offer is sent to the other party.\n\n\n\n### Getting Trade Exchange Details\nYou can get the new `assetid`s for the items in the trade offer using the `TradeOffer.getExchangeDetails` method that is provided for any `OutgoingTradeOffer` or `IncomingTradeOffer` instance.\n\n[🔗 Further Details on getExchangeDetails Returned Data](https://github.com/DoctorMcKay/node-steam-tradeoffer-manager/wiki/TradeOffer#getexchangedetailsgetdetailsiffailed-callback)\n\n##### Exchange Details for an OutgoingTradeOffer\n```typescript\nimport { withLoginDetails } from '@automatedtf/butler';\n\nconst outgoingOffer: OutgoingTradeOffer = ...; // get somehow\n...\n// ASSERT: outgoingOffer has been sent previously\n...\nconst {\n    status,\n    tradeInitTime,\n    receivedItems,\n    sentItems\n} = outgoingOffer.getExchangeDetails();\n```\n\n##### Exchange Details for an IncomingTradeOffer\n```typescript\nimport { withLoginDetails } from '@automatedtf/butler';\n\nconst incomingOffer: IncomingTradeOffer = ...; // get somehow\n...\n// ASSERT: incomingOffer has been accepted previously\n...\nconst {\n    status,\n    tradeInitTime,\n    receivedItems,\n    sentItems\n} = incomingOffer.getExchangeDetails();\n```\n\n### Changing Profile Details\n\nFor ease, several methods are offered under the `BotInstance` class to facilitate changing profile details.\n\n##### Editing Public Profile\n```typescript\nimport { withLoginDetails } from '@automatedtf/butler';\n\nconst loginDetails: SteamLoginDetails = { ... };\nconst botInstance: BotInstance = await withLoginDetails(loginDetails);\n\nconst profileDetails: Partial<SteamProfileDetails> = {\n    name: \"New Name\",\n    realName: \"New Real Name\",\n    summary: \"New Summary\",\n    country: \"UK\",\n    state: \"FL\",\n    city: \"Orlando\",\n    customURL: \"myNewCustomURLToMyProfile\",\n}\nawait botInstance.editProfile(profileDetails);\n```\n\nThis can be used to change the public profile details of the account.\n\n##### Updating Profile Picture\n```typescript\nimport { withLoginDetails } from '@automatedtf/butler';\n\nconst loginDetails: SteamLoginDetails = { ... };\nconst botInstance: BotInstance = await withLoginDetails(loginDetails);\n\nconst photoURL: string = \"...\";\nawait botInstance.changeProfilePicture(photoURL);\n```\n\nFor now, support is only provided for a `https://` or `http://` url to a photo.\n\n### Accessing other Steam Functionalities\nYou can access other Steam functionalities by using the methods of the `BotInstance` class to access relevant clients. These will have already been instantiated for you, logged in, and ready to use.\n\n`BotInstance.accessTradeManager()` - Access the [trade manager client](https://github.com/DoctorMcKay/node-steam-tradeoffer-manager/wiki/TradeOfferManager).\n\n`BotInstance.accessCommunity()` - Access the [community client](https://github.com/DoctorMcKay/node-steamcommunity/wiki/SteamCommunity).\n\n## 💡 Improvements to Make\n\nAs said, the library is designed to be for ephemeral executions, but usage can be tailored for persistent bot instances by holding the running `BotInstance` object in memory.\n\n```typescript\nimport { withLoginDetails } from '@automatedtf/butler';\n\nconst loginDetails: SteamLoginDetails = { ... };\nconst botInstance = await withLoginDetails(loginDetails);\n\n// Do stuff with botInstance\n```\n\nAs such, there are potential opportunities of improvement to take advantage of to reduce the cold start time and improve the overall performance for using the library in a stateful setting.\n\n##### In-Memory Bot Instances\nHolding a bot instance in memory is a potential improvement when multiple (but centralised) accesses have to be made to the Steam account that is being operated programmatically as a bot.\n\nFor example, one may have a dedicated `Express` server for executing actions for the bot to perform using `@automatedtf/butler`. Rather than a new login being performed always every single time when using `withLoginDetails`, `withLoginDetails` can first access a cache of `BotInstance` objects that have been created previously and then return the cached instance if present.\n\n## 📚 Helpful Resources\n- [@automatedtf/sentinel](https://github.com/automatedtf/sentinel)\n- [node-steamcommunity](https://github.com/DoctorMcKay/node-steamcommunity/wiki/SteamCommunity)","readmeFilename":"README.md"}