{"_id":"defender-admin-client","_rev":"80-62d45eea26cb2953c1b0f00073b2e747","name":"defender-admin-client","dist-tags":{"next":"1.44.0-rc.1","latest":"1.38.3-rc.0"},"versions":{"1.3.0-rc.0":{"name":"defender-admin-client","version":"1.3.0-rc.0","description":"","main":"./lib/index.js","types":"./lib/index.d.ts","scripts":{"build":"rm -rf lib && tsc","test":"yarn test:unit","test:unit":"jest --verbose --passWithNoTests","watch":"tsc -w","prepare":"yarn build"},"author":{"name":"Santiago Palladino","email":"santiago@openzeppelin.com"},"license":"MIT","dependencies":{"axios":"^0.19.2","defender-base-client":"^1.3.0-rc.0","lodash":"^4.17.19","node-fetch":"^2.6.0"},"gitHead":"2db46995aa3907a2f2acb28c293b37227c6cd705","_id":"defender-admin-client@1.3.0-rc.0","_nodeVersion":"12.18.3","_npmVersion":"lerna/3.22.1/node@v12.18.3+x64 (linux)","dist":{"integrity":"sha512-Bq7RrLyR3jd3IVOLlsr5++7zj75VocPhQGXp9FmWeFkL4x6in3bGsaQbQC3zGGCM2jWvYxOGg8/WLZ3yog0I8w==","shasum":"d9058f5e72935018d1a52238b74744e2ab637a0b","tarball":"https://registry.npmjs.org/defender-admin-client/-/defender-admin-client-1.3.0-rc.0.tgz","fileCount":14,"unpackedSize":92910,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf/diwCRA9TVsSAnZWagAAa/AP/j6TnPjCA21fMpabuDPp\nPCv8eWEOgC5Pxx7PaqdzWTqf91o2xKzYgqvUQQU4aKIYcNtBInGXHFQiDouo\n9f2v8tt4TEI00rlMyQPY8d65HswgzIUdbfM5TamJYkixP2xVykv97xFYXVbr\nWUt8BoVIEA07LbQuEfCOxL3YqF5Ou7yQekiZlLrIhzSEjP9glj3HIQk/eL4a\nSBwmHinZ3D3vFqZSf4QpOpEyllafxP1Ut1edg9lT90cIdQuztG9mv0/7amlC\n96LrutWpZvnKNq9eCGmkmNfRRZhZ6eCfgbre1xEiqOnIz6vBKWdhc2I8QIUN\n8IPH04yG4oUF8nlC2MchNyiNZnPcB8LZ0uxmi4vsBIHi0pl/h45jODxdzH6P\npYnMA9CoTvH+D2R5QQi023D1/WKn1sY/rOzDEVzbAiarfVvR/ODV+2nJxW94\no99jY+XIssY7Fa85bivS7Fl90rgiG4/t9Os6Yp7D1Hb2ZQIX58CA0mVlY1yZ\n5C0nQH+Ev9yyYi8rNNXyn8SpB3LDYl7e0tf/ew+a16O977dYo1gS0ae+CSmS\nXjTzOoGG0viygGxHpBZAjy38HWvAAs0gC//Um2vhDNBlWzN08pRrjBsUFPm6\nn1c9cfkLgujuqbEE0z3Ekz2w4xH4ARoiat5RZKjtAhF3f+fkSy+/PBo8NZj6\nt2pW\r\n=B5wl\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD9IA/9BFCxA4gV1NkwniFkm/rAu8wslCHqV2viVnE9kQIhAOemKJ8f5b+0AooUIpcKIIVeyBWl0ufeNpJ/ZC3FG6fe"}]},"_npmUser":{"name":"spalladino","email":"spalladino@gmail.com"},"directories":{},"maintainers":[{"name":"spalladino","email":"spalladino@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/defender-admin-client_1.3.0-rc.0_1610471599724_0.5298047705537785"},"_hasShrinkwrap":false,"deprecated":"defender-admin-client is deprecated, please install @openzeppelin/defender-admin-client"},"1.3.0-rc.2":{"name":"defender-admin-client","version":"1.3.0-rc.2","description":"","main":"./lib/index.js","types":"./lib/index.d.ts","scripts":{"build":"rm -rf lib && tsc","test":"yarn test:unit","test:unit":"jest --verbose --passWithNoTests","watch":"tsc -w","prepare":"yarn build"},"author":{"name":"Santiago Palladino","email":"santiago@openzeppelin.com"},"license":"MIT","dependencies":{"axios":"^0.19.2","defender-base-client":"^1.3.0-rc.2","lodash":"^4.17.19","node-fetch":"^2.6.0"},"gitHead":"bd5868be4f4f2f7ea7b4ec33a2ed5592c831fa7f","readme":"ERROR: No README data found!","_id":"defender-admin-client@1.3.0-rc.2","_nodeVersion":"12.18.3","_npmVersion":"lerna/3.22.1/node@v12.18.3+x64 (linux)","dist":{"integrity":"sha512-zgB16CmHr33fzMiQAl+GbHaFP9zaz8kONbhFhmX64pES1/OZLQbk6kNlC2KKRxlF9Dn+zn6e5PKOBKSV7lqG1g==","shasum":"4ec77c0fda0ebb60c5cffd735b7af24b745d4a5b","tarball":"https://registry.npmjs.org/defender-admin-client/-/defender-admin-client-1.3.0-rc.2.tgz","fileCount":14,"unpackedSize":92910,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf/dmbCRA9TVsSAnZWagAAMWgP/Askp5JYc7ZWq5h/z6Sh\nLiyDUCXDeSbidEm+XPlswjMqvjTb7Gb2iuZA7GStVAGrHz1YTuZRmvhtVihq\nENuoN3c5J1O8OWxOmGdRYqV9C8m39g0SPbsw5BbIdFtoPPulslFtvQUIc8pn\nV+2KvgiMLN45JFn2+pAW3ydneg6TtYbzBFMDcYMYtVAt0lcIz3xJHC5mverZ\nf/mrd1fa40zmHlNLYeKu0DpUX8RVI2BrS2Su8o1dmxBRj3RGyemtkAm+BkUn\nIwslamj7N+1ae79YuohWF3wqeScs8d82wen7nhHkGoo+zAzsyJI2D+nIxhDo\nq6OdNstvzm9/oPUXMeiyVrqTbsBoXg2nFMPV6PF12B4aT4YON4glno5Il3qK\nLBSep7z/9sQHANKHlM112y7ArKMOtdsukNCvd2JyA/nl17wZXsFOHQSt7/3z\nIL/OfEXFRKw1O+ECex3eGmODMg6731xKUsI6MHs5334q0vyVfEfPJwOgSZmG\nm0JIgk/pDu+Nn/g2gYAQmxAucQ8OhrCH5bbZ8l1vcQKk6od3LbrUmZ4oyqS8\nhiJaCxJfUwcBVuI1BOKw0fBMLZIoVkNFUXppcuBPlUyqphWWTTF4mElDCdnw\nj0mfMtCkIj3iQ6yj4Omh62BX2xZyACR4/Xb0kO/NioMz9AD4mv+gTNKzcOXI\n0Y4W\r\n=Zrzq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDleqniDNRx9DzkHdC4ylVP29HVmdOMggy+0XfrL65PtgIhANiFazl8KNvyeb7P7+xrcsWvEyFB3FyYUGjj6KKK9nKK"}]},"_npmUser":{"name":"spalladino","email":"spalladino@gmail.com"},"directories":{},"maintainers":[{"name":"spalladino","email":"spalladino@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/defender-admin-client_1.3.0-rc.2_1610471835038_0.2739586279986792"},"_hasShrinkwrap":false,"deprecated":"defender-admin-client is deprecated, please install @openzeppelin/defender-admin-client"},"1.3.0-rc.3":{"name":"defender-admin-client","version":"1.3.0-rc.3","description":"","main":"./lib/index.js","types":"./lib/index.d.ts","scripts":{"build":"rm -rf lib && tsc","test":"yarn test:unit","test:unit":"jest --verbose --passWithNoTests","watch":"tsc -w","prepare":"yarn build"},"author":{"name":"Santiago Palladino","email":"santiago@openzeppelin.com"},"license":"MIT","dependencies":{"axios":"^0.19.2","defender-base-client":"^1.3.0-rc.3","lodash":"^4.17.19","node-fetch":"^2.6.0"},"gitHead":"eee7ac991eb17434794f1ff902caffb582a61444","readme":"ERROR: No README data found!","_id":"defender-admin-client@1.3.0-rc.3","_nodeVersion":"12.18.3","_npmVersion":"lerna/3.22.1/node@v12.18.3+x64 (linux)","dist":{"integrity":"sha512-VHMLtLlmnr+80/i+Xekmocy4VB5DObEqmFHx1PpNh+0ls6Z+5yVzNuv+S7i23nHV+wBGWgyM/99svuhkcT1ZYA==","shasum":"e6556949613766a21cb8c5a51c24e7877503544f","tarball":"https://registry.npmjs.org/defender-admin-client/-/defender-admin-client-1.3.0-rc.3.tgz","fileCount":14,"unpackedSize":92956,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf/duhCRA9TVsSAnZWagAAuggP/2/zWADYc4TT+A6WZU4H\nWfKhd7B+jBa/xeh946EHIVN8SXUpNytaGJcEQKcRQzRBvZBTzYulGlTCDmfO\nWf37DqSvrWxXKpUnXVJVodLRzI4tVmzNsnub+NrWmXFDFfZ9zsgzDDct9bvK\nNSdtVlHp8lSXQ5YqoksLxrpG+EREc4VnzzR9QvZuQ4yNcSnYl9Mi+9IALuJ3\n/mBtMutykWLNcJSdSUrl1rkTLpIZ5bpzrSyLwkF9o/g4pFJ0axBaNMhUgmfT\n44ky1ULa089fw4XQILLljJYslnr8QuK5ipFqSynR/aHbnUU5QrKx36UChbE1\n7HASOO5IQywXQYztSGahjdXOE0n3h14wJuc3VArLWDmcfVtMxzNgqyw2ydWS\n+IrkWj9yPNTI0dtqhFes9Pq1PaCD6cc5ub1I9wGrqeIqgQg+HBqVl/JAqQWR\nMg5mI0cCsdqELAIxsndLSp1vvo4V8fKTRCUZPIS8NWFqhSWwpkW6zlw+mGMU\nTc9H+ot8y+dYa2xOiaCwsBn4L6ntflifm/8AkTHmZ7PPEBN96CSmywZOyVLQ\nkJxWaUQJD1Cdh0rQcaalwdJpv4pHWU/Ar7zUxFIHLOE5r2Uzee9jzsKlRCG8\nmDIVuX3LpmTkL6fiq9C4NQi+56MRKWsglCXYiNNbCnbpegSsHkqzOA/JJq4T\nn+fh\r\n=p+1e\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCskdOC6piHdgZw62vX5GZcypF2e7/6vdDel+BZt1PrLAIhAOk6qrokZtF+0iSo43MdDDf1NTj4s1P+I/Mx2YSkxaoR"}]},"_npmUser":{"name":"spalladino","email":"spalladino@gmail.com"},"directories":{},"maintainers":[{"name":"spalladino","email":"spalladino@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/defender-admin-client_1.3.0-rc.3_1610472352903_0.9393567915078249"},"_hasShrinkwrap":false,"deprecated":"defender-admin-client is deprecated, please install @openzeppelin/defender-admin-client"},"1.3.0-rc.4":{"name":"defender-admin-client","version":"1.3.0-rc.4","description":"","main":"./lib/index.js","types":"./lib/index.d.ts","scripts":{"build":"rm -rf lib && tsc","test":"yarn test:unit","test:unit":"jest --verbose --passWithNoTests","watch":"tsc -w","prepare":"yarn build"},"author":{"name":"Santiago Palladino","email":"santiago@openzeppelin.com"},"license":"MIT","dependencies":{"axios":"^0.19.2","defender-base-client":"1.3.0-rc.4","lodash":"^4.17.19","node-fetch":"^2.6.0"},"gitHead":"686d54584ffdd11c1bcaf3c26371e8118d811518","readme":"ERROR: No README data found!","_id":"defender-admin-client@1.3.0-rc.4","_nodeVersion":"12.18.3","_npmVersion":"lerna/3.22.1/node@v12.18.3+x64 (linux)","dist":{"integrity":"sha512-q9GGefT+/9J+6RRqbjsI1VITUVrj/cTS0biieOfr3JvWGEg6eS2Gbh/DhsgVzidg62/maDcKV+S+Yozp/6Cd/A==","shasum":"596886fe6a5fff0ed6ae8781e6d91cd369f2fafe","tarball":"https://registry.npmjs.org/defender-admin-client/-/defender-admin-client-1.3.0-rc.4.tgz","fileCount":14,"unpackedSize":92955,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf/eQeCRA9TVsSAnZWagAAlhYP+gLq64wOOU3t9jfEJZ+f\nkUoArBZanJe2AF9CGX0hTZ/l3vUwaNchMDxchRvgY+w4GaeYrU3SPpdPu60v\nEA8LXFS6/jGt6ku6+HeW/soCKiG0BEhh0Id3kauD0GL/qN1gXQK8yyNbx0er\njuucERPRE91OALlfdeTdde+fIqD/xoRoilIg8o+Ud1YMJwPCovXaWJE6Rqgh\nShg0MCWh2jNT57yh4Qe/AQl7yNuaQf3ewcn1lz6zlFhM3bp+u/eHWWgapJdg\neoaaylgDP8cMdkdOzvUDUVXjDQ6mhyfbvhS7fqeToYkpUWuusqf2Iulb9sM9\nGWR7q80o2ov4+w2D0CAr+BQVVfGGEESPUQj6A7V74Zpai7kS2RLO9v2IxmiN\nAkua1k5RgEqsIIeZuaxHNKCvqx3wlIaC9tCFvKqTNJQiqUSe+vHXD8x5ZQ3C\nBkyMT42RAiUqeG0voSqWXOV/3Rj2ImPBhtbuAmcqii12s/v6CZplITjEGNWh\nU5gHn96MFlD4tfntLem2WczIez0150jfc/m/d5dsjxLqCwNKlsRCxWRv+fUE\n9pKRV0m0N1cQpb5Qadxjxts2Eb1VUsNwTX2taQwMrGdJHhiKkhqvO5rNDk0u\nui255Be4uFC1/tD7T2KRAqDReF29q5nUEvgWA/jGYhJ/vZVWs2S5ONS13STk\nN3k/\r\n=HOxx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIF1EzPJCIlP9cSbkqnoEG0KpA0lf3xLtR5ivLpMy1ZPMAiEAy2gmYnGn7OeIOGS0xb80U+10xtmBxffpsgJnRqE2Yys="}]},"_npmUser":{"name":"spalladino","email":"spalladino@gmail.com"},"directories":{},"maintainers":[{"name":"spalladino","email":"spalladino@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/defender-admin-client_1.3.0-rc.4_1610474525564_0.3238885743682598"},"_hasShrinkwrap":false,"deprecated":"defender-admin-client is deprecated, please install @openzeppelin/defender-admin-client"},"1.3.0-rc.5":{"name":"defender-admin-client","version":"1.3.0-rc.5","description":"","main":"./lib/index.js","types":"./lib/index.d.ts","scripts":{"build":"rm -rf lib && tsc","test":"yarn test:unit","test:unit":"jest --verbose --passWithNoTests","watch":"tsc -w","prepare":"yarn build"},"author":{"name":"Santiago Palladino","email":"santiago@openzeppelin.com"},"license":"MIT","devDependencies":{},"dependencies":{"axios":"^0.19.2","defender-base-client":"1.3.0-rc.4","lodash":"^4.17.19","node-fetch":"^2.6.0"},"readme":"ERROR: No README data found!","_id":"defender-admin-client@1.3.0-rc.5","_nodeVersion":"12.18.2","_npmVersion":"6.14.5","dist":{"integrity":"sha512-ObF6w1PCcywLvtoeomLQSOjn1f/ZSLMGtGr7GRIEGzJKVeSVhKEBWXkkd7n4b1KrVf8aXj1Axd+Tg5Zv+EQjrg==","shasum":"2a77d70cdcb870d16fb577d97dfd5c52004e6b49","tarball":"https://registry.npmjs.org/defender-admin-client/-/defender-admin-client-1.3.0-rc.5.tgz","fileCount":14,"unpackedSize":93316,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf/2GBCRA9TVsSAnZWagAAzywP/1ZC+t7emF+ijJYpxITd\nCTT7Q7/NP2iZcQbyo9v3HoEa5Z761rHc/kZNTA5V9r9rfbMGLWoZRCM9Lr55\n50sMF/QVhfz/n/iG+j2tphHGDvA9JBq0WfONIAkE1Ji8XzcttAkOQ6xlQSU6\nI5ygGJiaJ+Qm9apH3SDqY/8zDRMbCZCMijkmeNKiMtH90h+ZgODuvhoTKLoC\n/wfxWHrO1yYL02iipW4jTr0y+9ZTyt+e4AGgRu7PVyE6Ba108RxiRnlX6a+Y\nqY5yC+ozEgm/XP2PVdd1QIgBJGfk6Jz0K1Y2VdnZl+7mxLt8yREEgnt+jY/x\nsep63qmYfBko9mlzw85SY/RQ/PPsORtYJH7w8zfudYrqLPElRkmD9x3e1K+k\ncHx/ptvjdlu2m8vOPT3yk4Iau6CgNhBU5xq0P3mBZw/auwBBIShCgWJ8Hw96\n9x5rLPtGoxB77QlguzsykUU26NqTXDndAeELEO69iAUf0QmpgioqfgjyAtHA\n6aqsq/5pAU095C2Ag9gmFp6p1zNYHYkvm0YrLiNH+QA2EyNo/4gyATS+lBlY\nmN28pWP3VAMitHs5m5OkgQOqVwhzkQM2AJVFLee+c5Td5EuSjYFe1LFzV+Ai\nNhFjBVKGz2ihSKjMrvMXAeXmRgKz3gXX3HvdRb2PjRFe0tOq3C5+K4sZMKwu\nENRs\r\n=Kn8I\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCegRTfp47tlVLJ59LUgT13voikJMvqouBgarW9XJhWkQIgIxZLwAKI74WzkJXlvd1kzXezNIigIqaLf/r+bwoVpJU="}]},"_npmUser":{"name":"ylv.io","email":"to@ylv.io"},"directories":{},"maintainers":[{"name":"frangio","email":"frangio.1@gmail.com"},{"name":"spalladino","email":"spalladino@gmail.com"},{"name":"ylv.io","email":"to@ylv.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/defender-admin-client_1.3.0-rc.5_1610572161504_0.27397768100756315"},"_hasShrinkwrap":false,"deprecated":"defender-admin-client is deprecated, please install @openzeppelin/defender-admin-client"},"1.3.0":{"name":"defender-admin-client","version":"1.3.0","description":"Defender Admin acts as an interface to manage your smart contract project through one or more secure multi-signature contracts. Defender Admin holds no control at all over your system, which is fully controlled by the keys of the signers.","main":"./lib/index.js","types":"./lib/index.d.ts","scripts":{"build":"rm -rf lib && tsc","test":"yarn test:unit","test:unit":"jest --verbose --passWithNoTests","watch":"tsc -w","prepare":"yarn build"},"author":{"name":"Santiago Palladino","email":"santiago@openzeppelin.com"},"license":"MIT","dependencies":{"axios":"^0.19.2","defender-base-client":"1.3.0","lodash":"^4.17.19","node-fetch":"^2.6.0"},"gitHead":"0c31abf0fa6662014a75dd1b8ed4072c3f7333cf","_id":"defender-admin-client@1.3.0","_nodeVersion":"12.18.3","_npmVersion":"lerna/3.22.1/node@v12.18.3+x64 (linux)","dist":{"integrity":"sha512-cNB0gUzw0NJoogQzKHzIBwsNHgNY9oyfGkloMLt/HK5NLCEJbIckRY0xDP1OILgngEbA7nXZpdZ1rjEN8WZDNg==","shasum":"d02ca55372149cbe984a8e3e7e3647519fdf74fd","tarball":"https://registry.npmjs.org/defender-admin-client/-/defender-admin-client-1.3.0.tgz","fileCount":15,"unpackedSize":95876,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgCFInCRA9TVsSAnZWagAA2aMP/2kf+kNPOZoofZS6QwYm\n6FCEBYXpCyHzNR0lx52OoFEliV4LbWKrHSQaWdco9sbhxZyx+UHeCii4ggv5\nhQaB4aGCmNi63g6GIPxmCPdFw3Gq7lJlbcqRgMqj//ilIJreqrVWpuhTyw+n\nl4EkT2ZKJ/5d2nPll8TS6+v6xhHvRxJhKwglLXBzztld08jies/dFD5NFCGF\nq5YJjIhHgQNAbSiSOAZu4Le++jleRFwvuYc5P+dHssiaQpmw4RoDYoNpAU2F\nZiaL7xNqMDOteIWHCSed6UgWcH8DdlYGT2amyHPmxCXszpeMjksJ8lL3xW7s\nR+04GP1KNnoUkXQ2Z9rI6u/FRqyXyl+3AnDy4L0aUU8Eg1OXr4S9eC5R08ux\nATIpzuQKwamWsyF5cMHpneHTFY42wI2l9ZQqZ3HeqInGEg4+ZS5ms7baFZ5e\nrGFau9puGs7n/K5VqbY+3wCuapxawCnoInjccRnFa/y3JfeWioRJmeypExPH\neV1FHyPyo7UlAUvtn1A39m+ntGVj4hciKavvkeDiW44pKRBn6rxIJ8rqUa23\nxlvXu7U88K6xNBDvqnUfRm1vH1LWJrON2Pq99xpXTmwQGdEcgH4Tujv5dH0F\nt3enzvU2TwzjLBdAsA5Cc1lrNdhFEdGNiD2uoPUoJhnl6dPKKBV0+DLTZIrV\nshQ6\r\n=H2gB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCXxHGAnvVEgQbEA6k1GTuZU3pKt8Qnt680Q86msT+AygIgLjclQHJe0sQP7Ii0TqcppIGqgtRBH17o3VPW+eqNAZc="}]},"_npmUser":{"name":"spalladino","email":"spalladino@gmail.com"},"directories":{},"maintainers":[{"name":"frangio","email":"frangio.1@gmail.com"},{"name":"spalladino","email":"spalladino@gmail.com"},{"name":"ylv.io","email":"to@ylv.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/defender-admin-client_1.3.0_1611158054625_0.014725443693614837"},"_hasShrinkwrap":false,"deprecated":"defender-admin-client is deprecated, please install @openzeppelin/defender-admin-client"},"1.3.1":{"name":"defender-admin-client","version":"1.3.1","description":"Defender Admin acts as an interface to manage your smart contract project through one or more secure multi-signature contracts. Defender Admin holds no control at all over your system, which is fully controlled by the keys of the signers.","main":"./lib/index.js","types":"./lib/index.d.ts","scripts":{"build":"rm -rf lib && tsc","test":"yarn test:unit","test:unit":"jest --verbose --passWithNoTests","watch":"tsc -w","prepare":"yarn build"},"author":{"name":"Santiago Palladino","email":"santiago@openzeppelin.com"},"license":"MIT","dependencies":{"axios":"^0.19.2","defender-base-client":"1.3.1","lodash":"^4.17.19","node-fetch":"^2.6.0"},"gitHead":"1c714c927a3dd79d822980418e2b7188bc8c58e3","_id":"defender-admin-client@1.3.1","_nodeVersion":"12.18.3","_npmVersion":"lerna/3.22.1/node@v12.18.3+x64 (linux)","dist":{"integrity":"sha512-c02Wo3f9czhLCmn+0gG/6QsTRp2JZpPwqIQQW6eWcLw4VO5LF/645QzZqBV35Knboguvpjw+jslkitRZtiUcew==","shasum":"1cfc29e7e2281861a3d1541077457900293f82fa","tarball":"https://registry.npmjs.org/defender-admin-client/-/defender-admin-client-1.3.1.tgz","fileCount":18,"unpackedSize":97715,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgD1H/CRA9TVsSAnZWagAACuIP/1mLYhHZU9XQv7nyl12i\n3r+S777r6UkRq+XW8ubB1h30MBI8s2cPU1ARMbS6xdDr+v/tI1iaYwXq0Lh+\n5Tlsq3xTq5uRsHm3U/VpfSaXMAY4MCS1YtTJbIz4tnA3CATdrD78kOzXjdTC\n/8S/S2ZGomQ0Oo3Q2T7QWO6aIzQ4WErCmQ8/bcYj5/MRb3u7iTGisH9JRMwZ\nsN0uRC8pUMHqJObTbYilYhat4bgYwN9cZrZVWJAuzo+7JczYD6KH/3r4avOH\nATXcVdFSWzCfRnVT+3xxb6qhjoYMge3vYcDBcqy94swdIWOXD9fc4K3/cuKA\nGd2soCa7ksAdiKmeH/lHjI9LZIdBV74BRXFXl6fyT2wX5EI+m3zDO90qGHD2\n2Q0/YHSlsn7vznnJI3+Jb76Q309kmxIkYrc5PrmcRWTmu8WHzhsoKp1SVZtk\nX3YxAcC44ja3RCV0X77pqq2j2JTl78ckEW+tanlF8pavfxPsq8FLr5i718C/\no/DJXG7TiXYqGTWZfjZtzr76uuIHA+s3rPdJZjvmAllwH9gWIuJg7PvoFQtl\nqro4tHwwaaE3t5VJswhKUP8+/zYenqBFAESABKyXwJ+zQsjhWZupaQBINsZ+\n9FkvRiDiNkJU5l7XqegMOMvegoO+vsax29Ch83yFqrLN+2LgicOTIp/hqW0G\nv2lB\r\n=n02q\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFUe2iWSsaqE6tS5zRC0zQKzaBxeIiH3ZfuX8ZVU5ApkAiEAv3xjFNtj3vibfWYQleJZ60S7aDe4yfdADvsRu74Lrno="}]},"_npmUser":{"name":"spalladino","email":"spalladino@gmail.com"},"directories":{},"maintainers":[{"name":"frangio","email":"frangio.1@gmail.com"},{"name":"spalladino","email":"spalladino@gmail.com"},{"name":"ylv.io","email":"to@ylv.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/defender-admin-client_1.3.1_1611616767112_0.37441604922696214"},"_hasShrinkwrap":false,"deprecated":"defender-admin-client is deprecated, please install @openzeppelin/defender-admin-client"},"1.3.2":{"name":"defender-admin-client","version":"1.3.2","description":"Defender Admin acts as an interface to manage your smart contract project through one or more secure multi-signature contracts. Defender Admin holds no control at all over your system, which is fully controlled by the keys of the signers.","main":"./lib/index.js","types":"./lib/index.d.ts","scripts":{"build":"rm -rf lib && tsc","test":"yarn test:unit","test:unit":"jest --verbose --passWithNoTests","watch":"tsc -w","prepare":"yarn build"},"author":{"name":"Santiago Palladino","email":"santiago@openzeppelin.com"},"license":"MIT","dependencies":{"axios":"^0.19.2","defender-base-client":"1.3.1","lodash":"^4.17.19","node-fetch":"^2.6.0"},"gitHead":"4a1f84d3228837aa920c0016dc9cc5741de79012","_id":"defender-admin-client@1.3.2","_nodeVersion":"12.18.3","_npmVersion":"lerna/3.22.1/node@v12.18.3+x64 (linux)","dist":{"integrity":"sha512-cGTB9Dsuf6B+tulcieOoVy1AWBJIkXd1iT+tVVKZR3UuwXpetG/iapmoLf+REHmD3Arq8h1wIKSm/Dt+Cn+/IQ==","shasum":"4e175286aa01bff83f1afef7c1876d4bb45470e9","tarball":"https://registry.npmjs.org/defender-admin-client/-/defender-admin-client-1.3.2.tgz","fileCount":18,"unpackedSize":97722,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgD1PQCRA9TVsSAnZWagAAtCIP/ReczJsxaIxLNVKNkfsS\nVgvpdBae0bN8NDxae6nyHc593JptL2NBcKwebyX8GenrUb3zTZVo1HBrFCAo\nUtTpeE3rNlerzUjiaEs3bHpSML/5j7B+zIx9jf3AoWGifRoPd/O2tb7dGvHM\nkpuo/WHn5kAkXRDN9jvNh5dyYgg3LN0MdCaMg9hW6Mn3iHZhx25oq9xLoORU\nhHB45W0sLLRogutKZkMBl+Uwe2eQO1Gwx6prUkpH6VyXsvs862rCyiwXLo0R\nzNZhXca/IbxP1k6tsU45UhjH2oi09eXqKBjwldzqRiRiZKfcjPvATe8fDNfV\npvo//GprnnYH+LNdaT52/8mZOW3o1OvZHCWJPXA9Y2MyZqMcDQlU96KsEOOi\nJDtZM0Nzb+dO3EyVqc5GWp1tiFu4+r1PfXEBSoyZ4BXZlMNOxWEOsaZAEr16\nXW0wl3QZ3gcoDbOFyiA/TqudbbUF4u8i6f9jTYAtqlu+1mXthweNU5BtudLL\naK2ZGEJktgkPfoIzjGmUDYCgfw4RUdbRIxgCJjlUp7VR4Q1rllTQOlM6Z0bN\nL7rQ1RJUqb+4wpzDr/cSoQ/a+ceGjF9ZOv/9+NhlmMQ6x9MvOWXp3Rs4tH9h\nwu7WWfltK54UenyU+X4mm8SyzD4Vq0v//MfjHe0FvkXpMleCgX4VqCUNiBSG\nEZH5\r\n=jsF1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAbHvbznkcBYjpEdn3SnyZI28fW08Xop8k1cWCRxvcDWAiEA2J+3N5P9vdiX+l7Z1m4RDQ9nsq+kX9dkYrf0HbGtJtE="}]},"_npmUser":{"name":"spalladino","email":"spalladino@gmail.com"},"directories":{},"maintainers":[{"name":"frangio","email":"frangio.1@gmail.com"},{"name":"spalladino","email":"spalladino@gmail.com"},{"name":"ylv.io","email":"to@ylv.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/defender-admin-client_1.3.2_1611617232256_0.16534591277800104"},"_hasShrinkwrap":false,"deprecated":"defender-admin-client is deprecated, please install @openzeppelin/defender-admin-client"},"1.4.0-rc.0":{"name":"defender-admin-client","version":"1.4.0-rc.0","description":"Defender Admin acts as an interface to manage your smart contract project through one or more secure multi-signature contracts. Defender Admin holds no control at all over your system, which is fully controlled by the keys of the signers.","main":"./lib/index.js","types":"./lib/index.d.ts","scripts":{"build":"rm -rf lib && tsc","test":"yarn test:unit","test:unit":"jest --verbose --passWithNoTests","watch":"tsc -w","prepare":"yarn build"},"author":{"name":"Santiago Palladino","email":"santiago@openzeppelin.com"},"license":"MIT","dependencies":{"axios":"^0.19.2","defender-base-client":"1.4.0-rc.0","lodash":"^4.17.19","node-fetch":"^2.6.0"},"gitHead":"66421ef9f71834e3ad1cf05b9bbe8a83048a61ea","readme":"# Defender Admin Client\n\nDefender Admin acts as an interface to manage your smart contract project through one or more secure multi-signature contracts. Defender Admin holds no control at all over your system, which is fully controlled by the keys of the signers.\n\nTo interact with your contracts, you create _proposals_ that need to be reviewed and approved by the other members of the multi-signature wallets. These proposals can be created directly in the Defender web application, or using this library.\n\n\n## Install\n\n```bash\nnpm install defender-admin-client\n```\n\n```bash\nyarn add defender-admin-client\n```\n\n## Usage\n\nStart by creating a new _Team API Key_ in Defender, and granting it the capability to create new proposals. Use the newly created API key to initialize an instance of the Admin client.\n\n```js\nconst { AdminClient } = require('defender-admin-client');\nconst client = new AdminClient({apiKey: API_KEY, apiSecret: API_SECRET});\n```\n\nTo create a `custom` action proposal, you need to provide the function interface (which you can extract from the contract's ABI), its inputs, and the multisig that will be used for approving it:\n\n```js\nawait client.createProposal({\n  contract: { address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E', network: 'rinkeby' }, // Target contract\n  title: 'Adjust fee to 10%', // Title of the proposal\n  description: 'Adjust the contract fee collected per action to 10%', // Description of the proposal\n  type: 'custom', // Use 'custom' for custom admin actions\n  functionInterface: { name: 'setFee', inputs: [{ type: 'uint256', name: 'fee' }] }, // Function ABI\n  functionInputs: ['10'], // Arguments to the function\n  via: '0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b', // Multisig address\n  viaType: 'Gnosis Safe', // Either Gnosis Safe or Gnosis Multisig\n});\n```\n\nTo create an `upgrade` action proposal, just provide the proxy contract network and address, along with the new implementation address, and Defender will automatically resolve the rest:\n\n```js\nconst newImplementation = '0x3E5e9111Ae8eB78Fe1CC3bb8915d5D461F3Ef9A9';\nconst contract = { network: 'rinkeby', address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E' }\nawait client.proposeUpgrade({ newImplementation }, contract);\n```\n\n## Adding Contracts\n\nIf you create a new proposal for a Contract that has not yet been added to Defender Admin, it will be automatically added with an autogenerated name and an empty ABI. You can optionally control these values by providing values for them in the `contract` object of the proposal:\n\n```js\nconst contract = { \n  network: 'rinkeby', \n  address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E',\n  name: 'My contract', // Name of the contract if it is created along with this proposal\n  abi: '[...]', // ABI to set for this contract if it is created\n};\nawait client.proposeUpgrade({ newImplementation }, contract);\n```\n\nNote that, if the contract already exists in Defender Admin, then `name` and `abi` will be ignored.\n","readmeFilename":"README.md","_id":"defender-admin-client@1.4.0-rc.0","_nodeVersion":"12.18.3","_npmVersion":"lerna/3.22.1/node@v12.18.3+x64 (linux)","dist":{"integrity":"sha512-9Yo2qlUqWXPT1YUHoa9hV7RI6C2oR37aFcqIo7Xr7nkVg2RP4R0t138qTwCToh7n9hr1lGK0IDKCgpqjwDkNUw==","shasum":"072886361c7cda2cb1cb0a1e9613c37eff3931b0","tarball":"https://registry.npmjs.org/defender-admin-client/-/defender-admin-client-1.4.0-rc.0.tgz","fileCount":21,"unpackedSize":99646,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgGdBvCRA9TVsSAnZWagAALcIP/RstivEQKkTAFcqvv8AX\nHMWy2Xg3OgIts2SVWpTxSmdeIwCvayU+sNuMyKvQaKGz0zhPi+Zb8k++OJHV\n40L8E13R4AUquAqShY1dHfgS3AjwnKOE3S9lRssBZG2av7OLtl8PC94QCR5z\n+mr/cnGk5ESRqiIUOcT9JaWKDpQJfem3Ps4FcvfhUpOUCBjV0ixMXKh7z506\nNW2hCr7wgWYjiWrxr8K4Jqevb5TKB/XXBbNYxGBWZMj8j69fzL7X0R2xf/1f\novO+5dr/YJLPcIfzzP+6Cwa7W6p2pTOShPI9+t8K+52XVI+YDCbgio5rCwRr\n6WduGBQdginHpCV90xpu1rxnGHEC6LrVEPK5cZneZtiGWbDvFLRxJNjnGWBL\nJCdsQtUyU9kL5wDD76X49x0Lu3nuB1iAGXHPYaS9dENimYCFjsxekUDeMdgW\niBu3kCNXmLYu/RFb0/TnJgvxd4YnM5Lec22+I6LHs4E9mt5dV7iZbPSfSBzq\nBIpdCXQsmCIw5YBxdjXq3Cmf4Tb7HoCD9LCwaUPnT+G7VhiapJd+HRKSbNLK\nVvQF7NE6dNkvLirCVg5500e6t3i3YlXzqZvQ6oZ7jH7hDbC6niSDPLidgxzV\nviobBPWVEjkyhI6c/1QcOPnYegtT8hKq/An5xWSsWhA1OQXZovKkT1BLJmiN\nTLJ1\r\n=cn0D\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCJQaxKpNJKdIwglRqZfWuHqhhxguLYkGAbbnH9SGrMWwIhAOqpQKSbgFEi/B9QpMBSsNU3D+LIpEeanHSues9JOT0a"}]},"_npmUser":{"name":"spalladino","email":"spalladino@gmail.com"},"directories":{},"maintainers":[{"name":"frangio","email":"frangio.1@gmail.com"},{"name":"spalladino","email":"spalladino@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/defender-admin-client_1.4.0-rc.0_1612304494772_0.08265751340368155"},"_hasShrinkwrap":false,"deprecated":"defender-admin-client is deprecated, please install @openzeppelin/defender-admin-client"},"1.4.0-rc.1":{"name":"defender-admin-client","version":"1.4.0-rc.1","description":"Defender Admin acts as an interface to manage your smart contract project through one or more secure multi-signature contracts. Defender Admin holds no control at all over your system, which is fully controlled by the keys of the signers.","main":"./lib/index.js","types":"./lib/index.d.ts","scripts":{"build":"rm -rf lib && tsc","test":"yarn test:unit","test:unit":"jest --verbose --passWithNoTests","watch":"tsc -w","prepare":"yarn build"},"author":{"name":"Santiago Palladino","email":"santiago@openzeppelin.com"},"license":"MIT","dependencies":{"axios":"^0.19.2","defender-base-client":"1.4.0-rc.1","lodash":"^4.17.19","node-fetch":"^2.6.0"},"gitHead":"4b866d3ff5cb111d86483019b9acdf5c29c5e986","readme":"# Defender Admin Client\n\nDefender Admin acts as an interface to manage your smart contract project through one or more secure multi-signature contracts. Defender Admin holds no control at all over your system, which is fully controlled by the keys of the signers.\n\nTo interact with your contracts, you create _proposals_ that need to be reviewed and approved by the other members of the multi-signature wallets. These proposals can be created directly in the Defender web application, or using this library.\n\n\n## Install\n\n```bash\nnpm install defender-admin-client\n```\n\n```bash\nyarn add defender-admin-client\n```\n\n## Usage\n\nStart by creating a new _Team API Key_ in Defender, and granting it the capability to create new proposals. Use the newly created API key to initialize an instance of the Admin client.\n\n```js\nconst { AdminClient } = require('defender-admin-client');\nconst client = new AdminClient({apiKey: API_KEY, apiSecret: API_SECRET});\n```\n\nTo create a `custom` action proposal, you need to provide the function interface (which you can extract from the contract's ABI), its inputs, and the multisig that will be used for approving it:\n\n```js\nawait client.createProposal({\n  contract: { address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E', network: 'rinkeby' }, // Target contract\n  title: 'Adjust fee to 10%', // Title of the proposal\n  description: 'Adjust the contract fee collected per action to 10%', // Description of the proposal\n  type: 'custom', // Use 'custom' for custom admin actions\n  functionInterface: { name: 'setFee', inputs: [{ type: 'uint256', name: 'fee' }] }, // Function ABI\n  functionInputs: ['10'], // Arguments to the function\n  via: '0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b', // Multisig address\n  viaType: 'Gnosis Safe', // Either Gnosis Safe or Gnosis Multisig\n});\n```\n\nTo create an `upgrade` action proposal, just provide the proxy contract network and address, along with the new implementation address, and Defender will automatically resolve the rest:\n\n```js\nconst newImplementation = '0x3E5e9111Ae8eB78Fe1CC3bb8915d5D461F3Ef9A9';\nconst contract = { network: 'rinkeby', address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E' }\nawait client.proposeUpgrade({ newImplementation }, contract);\n```\n\nTo create `pause` and `unpause` action proposals, you need to provide the contract network and address, as well as the multisig that will be used for approving it. Defender takes care of the rest:\n\n```js\nconst contract = { network: 'rinkeby', address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E' }\n\n// Create a pause proposal\nawait client.proposePause({ via: '0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b', viaType: 'Gnosis Safe' }, contract);\n\n// Create an unpause proposal\nawait client.proposeUnpause({ via: '0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b', viaType: 'Gnosis Safe' }, contract);\n```\n\nNote that for `pause` and `unpause` proposals to work, your contract ABI must include corresponding `pause()` and `unpause()` functions.\n\n## Adding Contracts\n\nIf you create a new proposal for a Contract that has not yet been added to Defender Admin, it will be automatically added with an autogenerated name and an empty ABI. You can optionally control these values by providing values for them in the `contract` object of the proposal:\n\n```js\nconst contract = { \n  network: 'rinkeby', \n  address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E',\n  name: 'My contract', // Name of the contract if it is created along with this proposal\n  abi: '[...]', // ABI to set for this contract if it is created\n};\nawait client.proposeUpgrade({ newImplementation }, contract);\n```\n\nNote that, if the contract already exists in Defender Admin, then `name` and `abi` will be ignored.\n","readmeFilename":"README.md","_id":"defender-admin-client@1.4.0-rc.1","_nodeVersion":"12.18.3","_npmVersion":"lerna/3.22.1/node@v12.18.3+x64 (linux)","dist":{"integrity":"sha512-Plwpm+4f7riRTsC0hhJusAfnJP2KEDs6VK5Gh5V/MYGS2T6xlKev/kjrHL78kdS1GC3+9Uk+QaMA+Y+UpB1s5A==","shasum":"bf48fd52fddffdee932e381c42a1c3c23a6ac7d8","tarball":"https://registry.npmjs.org/defender-admin-client/-/defender-admin-client-1.4.0-rc.1.tgz","fileCount":21,"unpackedSize":102309,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgGrTHCRA9TVsSAnZWagAAwsQP/0/MpIkd6g0YUSAuAfcd\nCnyxDM3f54lm68DLWLp0Lr/TRhYmDmcL6l4I1YGiYS3cduvRwA+8F9Nzyhzw\nS7ayQX21FHhYLTTz1q/HX0psWmxfrJUVfBbbrlP02pJ23ZBhWIMw9VOrfbud\nCc9uQ9NaGCheEkJiE+Vp27/jLGbs9K9/2aoFVsQjFxTX63JA2zJcZYUPAYHa\nSofq5Ny9QRweRZoQZ5fW4GgtwO87UiI1VZBsXjWY/6eCgWjAW5Ll7Phv4aXB\nbFtQoW5mlWQNZ0QG1nB1mWGRQKJx1adKf4EVvEwCPwEHX/bJuemf6/Bd+HHk\n2OrIAKXota1thmp6aEEBjoH0Y73zhnnb9i/D2t7hNW0NwjQKk2CcMpDRv3E7\n6iCzddbxE0qNc895+8OKV7taX2iDp7XJEltQ/XCHF5OVhEU+SPDd33lddtb4\n+XQnbBqzurQIV5KNBW4Xl1Cu4tN/453qRsbcgCj6386+4IzB1Jp/PTQ6wGNM\nhwohDhKdp0uCDlu0fpsq9AaX9kAQLv2Y63jZkzL6uVTXU+coKd+7BYh2WC9Z\nS06Sn+nPwMC70/1iFKp/zbrTYPQk6M5mgNo7eoD3ns58d0y/7NBgfOwRfrGx\nVthPpL94VGQoT/Xk9BJ3yD9ggTdLdDH3mnt/ErybnZ/bNHn+gbZo7Onpus69\nDXMK\r\n=N7yD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD2xH1eEKlh/LU5aKhIaVDVwMXHdWtcLskPjXn99f4aSQIhAOlvTmmaOWsqGuXq7ViAbFJ839Sk+1nGibf7/09wGmgo"}]},"_npmUser":{"name":"spalladino","email":"spalladino@gmail.com"},"directories":{},"maintainers":[{"name":"frangio","email":"frangio.1@gmail.com"},{"name":"spalladino","email":"spalladino@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/defender-admin-client_1.4.0-rc.1_1612362951159_0.20455075137292633"},"_hasShrinkwrap":false,"deprecated":"defender-admin-client is deprecated, please install @openzeppelin/defender-admin-client"},"1.4.0":{"name":"defender-admin-client","version":"1.4.0","description":"Defender Admin acts as an interface to manage your smart contract project through one or more secure multi-signature contracts. Defender Admin holds no control at all over your system, which is fully controlled by the keys of the signers.","main":"./lib/index.js","types":"./lib/index.d.ts","scripts":{"build":"rm -rf lib && tsc","test":"yarn test:unit","test:unit":"jest --verbose --passWithNoTests","watch":"tsc -w","prepare":"yarn build"},"author":{"name":"Santiago Palladino","email":"santiago@openzeppelin.com"},"license":"MIT","dependencies":{"axios":"^0.19.2","defender-base-client":"1.4.0-rc.1","lodash":"^4.17.19","node-fetch":"^2.6.0"},"gitHead":"d0a4e1b8ac239e28aad46062445022a088670493","_id":"defender-admin-client@1.4.0","_nodeVersion":"12.18.3","_npmVersion":"lerna/3.22.1/node@v12.18.3+x64 (linux)","dist":{"integrity":"sha512-chwNQG3llaHSpjX0UDEr2W67w2A4yUeWXWrkbnz0bOFhnHp6NgoIdvyG2V78zZhUcTe9/0PDfIzbvyuK/PiyqA==","shasum":"daae866f0720f70b948bb71a2b8ff01efdcd589c","tarball":"https://registry.npmjs.org/defender-admin-client/-/defender-admin-client-1.4.0.tgz","fileCount":21,"unpackedSize":102806,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgHDc3CRA9TVsSAnZWagAA500QAJB34OGL9S0DrpTxOIrY\nbhw/RTzFpZ71toZi9NZyYI8LIf5Kw89pny5urnMZXBDuU2+UI3Un4Rw37EOQ\n6nWIukWRTr3IyHScYcBPVz0BunA7FWCXusmrNUew5Ld/062LJxmLBN/isJC5\noW5U4pIVFz0QuKevUDQD4j2EXb1JjVfARq5/cBX+2k8Bgv3r/aCRnHIrQ7HW\niWUZKS37tvhePVBe2hsNos+WzV/8OHfzMgNrjDilukkKHDZotAdNU5Rp7J5x\n9scbPswjkVEpn8NC9zt4Fp4xQk+47I+WXtPkyp1YOIqj3nWaV+s4zxSNO0G6\nsJtw9Cz40UPLMALeF3Hn6ktyIpI21zeebiLEQQt18ZyMIG4Y5NRov//2AxOH\nyEMRbAaQHEmklRfnfM2uTp+yGqu4/piivnN5N6KIV3//k+e9/GEtBWmdCy2n\nGpAggXjHyK1Qxn6t3bEXW+5aYKx2zdwNmVfTFdPgovXR2sRKeoXuA6YlW5Hk\nmuEv2vcx1hv+FgjuMAt4X5ea5Jr2cRuCxMGT4u/9hzI8+ZUbjn1iV9WCmUEc\nc3Uu7D7vcdnH4h05PaHRnIxQIRCIite0e948SCp8nblfPKmswtDnI2Ni7vBf\nV8UMJlsBqeClfyI1jo3YRsRT81bSe7ktZGClhOShTGOcDdLUsHtGMtpz2l3E\n3Z4s\r\n=q7MU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDGUDIfrjcLLlHRTyMnoUbADUyPhuMMkzTCI4B/5xdQTAIhAIlHNxuRonvAQnKYLukXAKem6uU4dDrLkyjErWdmOrEs"}]},"_npmUser":{"name":"spalladino","email":"spalladino@gmail.com"},"directories":{},"maintainers":[{"name":"frangio","email":"frangio.1@gmail.com"},{"name":"spalladino","email":"spalladino@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/defender-admin-client_1.4.0_1612461879142_0.7360133326146934"},"_hasShrinkwrap":false,"deprecated":"defender-admin-client is deprecated, please install @openzeppelin/defender-admin-client"},"1.5.0":{"name":"defender-admin-client","version":"1.5.0","description":"Defender Admin acts as an interface to manage your smart contract project through one or more secure multi-signature contracts. Defender Admin holds no control at all over your system, which is fully controlled by the keys of the signers.","main":"./lib/index.js","types":"./lib/index.d.ts","scripts":{"build":"rm -rf lib && tsc","test":"yarn test:unit","test:unit":"jest --verbose --passWithNoTests","watch":"tsc -w","prepare":"yarn build"},"author":{"name":"Santiago Palladino","email":"santiago@openzeppelin.com"},"license":"MIT","dependencies":{"axios":"^0.19.2","defender-base-client":"1.5.0","lodash":"^4.17.19","node-fetch":"^2.6.0"},"gitHead":"88ad6167fbff20b27770af4083029e9b021ebde0","_id":"defender-admin-client@1.5.0","_nodeVersion":"12.18.3","_npmVersion":"lerna/3.22.1/node@v12.18.3+x64 (linux)","dist":{"integrity":"sha512-bePiPtFTGqclEvpo8yRw91C20rc0D7EjdFWQTeFbHTP9JMvaZ3oPO/HZ3BeecYEGZxUCip/skBVVEcz+ZPmxlQ==","shasum":"d22d0cc1beb29aad84af10538db5a759d5c481f0","tarball":"https://registry.npmjs.org/defender-admin-client/-/defender-admin-client-1.5.0.tgz","fileCount":21,"unpackedSize":104546,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgU750CRA9TVsSAnZWagAA8AcP/3HuodjGYCoa+iSIEMn9\n5sY9RZ8Y0trXZP8Shb5aYy/jgQCo6hxOjdMf78hL73hoHgBghXpviDzUl3G6\nfbwdOKDP164q32zYbks3rDH3Cp0en6I1+GzRYZ9Pd7KpcO6Jgu1S7eAEY3uS\nHYrWugRpYTlMDS35DwcCWrpWJTXaR3YlBAgkx3iibpKzbpuN8qASuJ76aA/i\nj73g8JUpX+EQsly2EcOa7SsdGDPuNdxHTIle63xd5dbMTvT+zKDhl5ZrdFwD\naegPR7CoNQOPjk3UIUoyCoX67kyeMLVlvJMzPJZcNjiQLMAO8UO4N0ze4TAM\nSQuUnBPVABHHTFzodmeJNb5eCKrpxKcgN839NEPv/uQRElwHSc8veFHTKxso\nHBBovlBZeRz2Yeic3EBGBme41BJp+Odu3JvnEk2Rqoo57rNFzxG0k55aP/it\nVwzQNe1FAvpW+azv4fgbp0rhzHTB8YKlvpmZndqKktDLvPE5WBgPZK1gsy0+\nM4j+bVyblljUDbWFVTfHRZrNaBXhI23rN2Pdk32bXCcvRnepgCD1ZF3AQaho\nYK/DzoKRvrRE0/vBwb9ANO+ymDccMiUCliMwOZjAVZb+JSGzgXwPF2bdRoda\n2xWOrjJmHYNupz3DJST5hmnK5oTZq5Rn07cqPdKHfnfITXvR7fmhnipLq+lJ\ntthr\r\n=iCju\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCF+mjUSFspGlPxylTwAg1bCPE5yYDa4Y5rA3DlG35XkgIhAKE3V+ddPpdTBxPvY1sB/T2lHDRevrH1ldNGDeZGl5S0"}]},"_npmUser":{"name":"spalladino","email":"spalladino@gmail.com"},"directories":{},"maintainers":[{"name":"frangio","email":"frangio.1@gmail.com"},{"name":"spalladino","email":"spalladino@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/defender-admin-client_1.5.0_1616100979826_0.08137357322521321"},"_hasShrinkwrap":false,"deprecated":"defender-admin-client is deprecated, please install @openzeppelin/defender-admin-client"},"1.5.1":{"name":"defender-admin-client","version":"1.5.1","description":"Defender Admin acts as an interface to manage your smart contract project through one or more secure multi-signature contracts. Defender Admin holds no control at all over your system, which is fully controlled by the keys of the signers.","main":"./lib/index.js","types":"./lib/index.d.ts","scripts":{"build":"rm -rf lib && tsc","test":"yarn test:unit","test:unit":"jest --verbose --passWithNoTests","watch":"tsc -w","prepare":"yarn build"},"author":{"name":"Santiago Palladino","email":"santiago@openzeppelin.com"},"license":"MIT","dependencies":{"axios":"^0.19.2","defender-base-client":"1.5.1","lodash":"^4.17.19","node-fetch":"^2.6.0"},"gitHead":"c48cda744d404e84c9ab4c0fdcbf036110f9ff70","_id":"defender-admin-client@1.5.1","_nodeVersion":"12.18.3","_npmVersion":"lerna/3.22.1/node@v12.18.3+x64 (linux)","dist":{"integrity":"sha512-xxY/nHcJidvOean6Vn0iAhavqHMVudugRl2R2uLNZXhU/OAHB30JlsZ+vUyEYh6NTOXcUS0iq6EnEMkEitmP8Q==","shasum":"3f277ddf0bc0a2a3762c56c564c9f571ef3af317","tarball":"https://registry.npmjs.org/defender-admin-client/-/defender-admin-client-1.5.1.tgz","fileCount":21,"unpackedSize":104546,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgbxN6CRA9TVsSAnZWagAArJ0QAJGsGi8ia9l6tywXO7t9\nzhNOeUBXNAXpqq89d7ROlAkM7fkmgRFBhfCAMlqx1/iHJu5Smiq6MRjo5VC6\nl0qoqlpVmV8/MOI5GybnZo7ODxjXzDjLDnuFM1pqktIbpbqFEwBYqid18NYG\ndXlwBwSZ68lH2x+SUv8Z6HtUOD6qqAEImqynqBYSks4JfPOQErF0RwcY6SAY\nYHZzqgoMpaj1fYhn69BzGBEfgo2nHVfRtPSMY1XAVpmzsqmjCdyRxagi8HKj\nDNI44eRYwpSEgsA+wK3FM37m8cbl7RmNU4GFu1lpONbSWbwZksfJvBQp6mIu\nbvYDlBdvpNzBjDt0IEzQG5RerV+UapvTncQUGkf51iEmauypznaCX/oDOnyQ\nlG0nufWLxYSnhjLqpjZVkREyZZKYD5T7QOeMkA4PGiJxjDYvCcWgeInRDxp/\nhxSHHThwLfutHtU1+Wi1gFZ68LEbzmksseaDbfCGp2fqrMLYOu6ayj9juDUd\nvtXkvdJ8vWyt6v028lhX8w7SpxZ4IX32MrJpHdRILJqxpeQ5tFEHTsqk/uNI\nJOn6+rG0ShKhzCeDDuWvIk5QhQxDZ/gURQnMY4G+4w2SbviZ27wRYGZV3Vcz\nDyTQqZ9/4bcmOLoA7wTKNEReoqr1X3HV3LM3AM8K3zmNyqMSkCknGY3Nz7dd\nffKn\r\n=TYLN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDHRLIWPC0Es8r+Dw02BeVIj0iCcqi0+UCzbRybAJo2BwIhAN0g9HKmkg8A5/SSeB7e2b1Dwh+mBApFPXZWt12oNRdy"}]},"_npmUser":{"name":"spalladino","email":"spalladino@gmail.com"},"directories":{},"maintainers":[{"name":"frangio","email":"frangio.1@gmail.com"},{"name":"spalladino","email":"spalladino@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/defender-admin-client_1.5.1_1617892217859_0.06804664467754429"},"_hasShrinkwrap":false,"deprecated":"defender-admin-client is deprecated, please install @openzeppelin/defender-admin-client"},"1.6.0-rc.0":{"name":"defender-admin-client","version":"1.6.0-rc.0","description":"Defender Admin acts as an interface to manage your smart contract project through one or more secure multi-signature contracts. Defender Admin holds no control at all over your system, which is fully controlled by the keys of the signers.","main":"./lib/index.js","types":"./lib/index.d.ts","scripts":{"build":"rm -rf lib && tsc","test":"yarn test:unit","test:unit":"jest --verbose --passWithNoTests","watch":"tsc -w","prepare":"yarn build"},"author":{"name":"Santiago Palladino","email":"santiago@openzeppelin.com"},"license":"MIT","dependencies":{"axios":"^0.19.2","defender-base-client":"1.5.1","lodash":"^4.17.19","node-fetch":"^2.6.0"},"gitHead":"70e6b1ee7eb255030bdd8f584c7debf5ee13545a","readme":"# Defender Admin Client\n\nDefender Admin acts as an interface to manage your smart contract project through one or more secure multi-signature contracts. Defender Admin holds no control at all over your system, which is fully controlled by the keys of the signers.\n\nTo interact with your contracts, you create _proposals_ that need to be reviewed and approved by the other members of the multi-signature wallets. These proposals can be created directly in the Defender web application, or using this library. You can also rely on this library to add your contracts to the Defender Admin dashboard.\n\n\n## Install\n\n```bash\nnpm install defender-admin-client\n```\n\n```bash\nyarn add defender-admin-client\n```\n\n## Usage\n\nStart by creating a new _Team API Key_ in Defender, and granting it the capability to create new proposals. Use the newly created API key to initialize an instance of the Admin client.\n\n```js\nconst { AdminClient } = require('defender-admin-client');\nconst client = new AdminClient({apiKey: API_KEY, apiSecret: API_SECRET});\n```\n\n### Action proposals\n\nTo create a `custom` action proposal, you need to provide the function interface (which you can extract from the contract's ABI), its inputs, and the multisig that will be used for approving it:\n\n```js\nawait client.createProposal({\n  contract: { address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E', network: 'rinkeby' }, // Target contract\n  title: 'Adjust fee to 10%', // Title of the proposal\n  description: 'Adjust the contract fee collected per action to 10%', // Description of the proposal\n  type: 'custom', // Use 'custom' for custom admin actions\n  functionInterface: { name: 'setFee', inputs: [{ type: 'uint256', name: 'fee' }] }, // Function ABI\n  functionInputs: ['10'], // Arguments to the function\n  via: '0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b', // Multisig address\n  viaType: 'Gnosis Safe', // Either Gnosis Safe or Gnosis Multisig\n});\n```\n\n### Upgrade proposals\n\nTo create an `upgrade` action proposal, just provide the proxy contract network and address, along with the new implementation address, and Defender will automatically resolve the rest:\n\n```js\nconst newImplementation = '0x3E5e9111Ae8eB78Fe1CC3bb8915d5D461F3Ef9A9';\nconst contract = { network: 'rinkeby', address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E' }\nawait client.proposeUpgrade({ newImplementation }, contract);\n```\n\nIf your proxies do not implement the [EIP1967 admin slot](https://eips.ethereum.org/EIPS/eip-1967#admin-address), you will need to provide either the [`ProxyAdmin` contract](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.0.0/contracts/proxy/transparent/ProxyAdmin.sol) or the Account with rights to execute the upgrade, as shown below.\n\n#### Explicit ProxyAdmin\n\n```js\nconst newImplementation = '0x3E5e9111Ae8eB78Fe1CC3bb8915d5D461F3Ef9A9';\nconst proxyAdmin = '0x2fC100f1BeA4ACCD5dA5e5ed725D763c90e8ca96';\nconst contract = { network: 'rinkeby', address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E' }\nawait client.proposeUpgrade({ newImplementation, proxyAdmin }, contract);\n```\n\n#### Explicit owner account\n\n```js\nconst newImplementation = '0x3E5e9111Ae8eB78Fe1CC3bb8915d5D461F3Ef9A9';\nconst via = '0xF608FA64c4fF8aDdbEd106E69f3459effb4bC3D1';\nconst viaType = 'Gnosis Safe'; // or 'Gnosis Multisig', or 'EOA'\nconst contract = { network: 'rinkeby', address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E' }\nawait client.proposeUpgrade({ newImplementation, via, viaType }, contract);\n```\n\n### Pause proposals\n\nTo create `pause` and `unpause` action proposals, you need to provide the contract network and address, as well as the multisig that will be used for approving it. Defender takes care of the rest:\n\n```js\nconst contract = { network: 'rinkeby', address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E' }\n\n// Create a pause proposal\nawait client.proposePause({ via: '0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b', viaType: 'Gnosis Safe' }, contract);\n\n// Create an unpause proposal\nawait client.proposeUnpause({ via: '0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b', viaType: 'Gnosis Safe' }, contract);\n```\n\nNote that for `pause` and `unpause` proposals to work, your contract ABI must include corresponding `pause()` and `unpause()` functions.\n\n## Adding Contracts\n\nIf you create a new proposal for a Contract that has not yet been added to Defender Admin, it will be automatically added with an autogenerated name and an empty ABI. You can optionally control these values by providing values for them in the `contract` object of the proposal:\n\n```js\nconst contract = { \n  network: 'rinkeby', \n  address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E',\n  name: 'My contract', // Name of the contract if it is created along with this proposal\n  abi: '[...]', // ABI to set for this contract if it is created\n};\nawait client.proposeUpgrade({ newImplementation }, contract);\n```\n\nAlternatively, you can add any contract explicitly by using the `addContract` method, and setting network, address, name, and ABI. The same method can be used to update the contract's name or ABI.\n\n```js\nawait client.addContract({ \n  network: 'rinkeby', \n  address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E',\n  name: 'My contract',\n  abi: '[...]',\n});\n```\n\n You can also list all contracts in your Defender Admin dashboard via `listContracts`.\n","readmeFilename":"README.md","_id":"defender-admin-client@1.6.0-rc.0","_nodeVersion":"12.18.3","_npmVersion":"lerna/3.22.1/node@v12.18.3+x64 (linux)","dist":{"integrity":"sha512-sH/1o4145ilBcUniq2UprfYtaeh7MovIMrqbtJHo7r5xAmGT+FT0KI0oCDq4HHFgmul5QOMtK75lR2lr191RuQ==","shasum":"94da3f3593786bb71f4b864e5b6682576a0da798","tarball":"https://registry.npmjs.org/defender-admin-client/-/defender-admin-client-1.6.0-rc.0.tgz","fileCount":21,"unpackedSize":105987,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJggf49CRA9TVsSAnZWagAA0w0P/1P8W5iLzM5wF4/7eYKI\n2PWjY8c10p1FnTrG6ACcRB3fCUQxZdyzds0TX5AKa1YmAbAm0OydO55kOaOm\ni36VwDT32W5zzXo57qYWpv3cX2jQL/RRAwtlGAco+nszwmKfAV5U5kN0A6N/\nPjOK7pRSFi/ZprZYvXR5asjMNVfXrUYxHzxI/jBGFsQXrG7VJ/Eqna2rF40E\nNMgmZyqwpZj11nMYUS8wxsvbNhdQadVZNHHG6TyhDins1mvqNVWA2y4dVvyS\nmJ62RYmenCAr220m7Ljy31nEwSN9uT/znU97wuyZHNrTEoON2MrPS85rZxJT\nPxcpaAJVYF7voawffSYcTINWk8FEyZ8yRffMtTwkGwOAi6YdeDC/6UMvBHfJ\nMN5kphTU8Rqv1DgUww88Z1B4jJAVXww/COgnPHCPGw1o/9GOxZbuqWbX0Fey\nbYYBnuGqZC7tIDH0CypgQU7634MiHD+jhcoeimJqxCJy0ocatjflqxsrsXC9\nyyPO1Q6hDKCUULl8QAeZEwcImBAO3Ag12cKUSNR4t1CzBIssEsq9N/CTxZLq\nVsMvq0Xe8WUzS+RYHvYSEaf7UlFlm3lymSZWWbCLpeDrx4QPwmixyg1G678Q\nFkdbeOHQtmD1SLgWQxaoFroQ14I8Fl19XOUfgPrqsa/0rLTCzJXmNqHiWQlP\ncm0/\r\n=qsol\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDpj43BqJMMleTj69VjMt+hvNBlkFWuWYlCe1OFe2p48AIhANrhgDi5ft1pHXE2YTB8SRK96GutnKcrmhQkcxH8U+5A"}]},"_npmUser":{"name":"spalladino","email":"spalladino@gmail.com"},"directories":{},"maintainers":[{"name":"frangio","email":"frangio.1@gmail.com"},{"name":"spalladino","email":"spalladino@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/defender-admin-client_1.6.0-rc.0_1619131965153_0.17449507661395058"},"_hasShrinkwrap":false,"deprecated":"defender-admin-client is deprecated, please install @openzeppelin/defender-admin-client"},"1.7.0-store.0":{"name":"defender-admin-client","version":"1.7.0-store.0","description":"Defender Admin acts as an interface to manage your smart contract project through one or more secure multi-signature contracts. Defender Admin holds no control at all over your system, which is fully controlled by the keys of the signers.","main":"./lib/index.js","types":"./lib/index.d.ts","scripts":{"build":"rm -rf lib && tsc","test":"yarn test:unit","test:unit":"jest --verbose --passWithNoTests","watch":"tsc -w","prepare":"yarn build"},"author":{"name":"Santiago Palladino","email":"santiago@openzeppelin.com"},"license":"MIT","dependencies":{"axios":"^0.19.2","defender-base-client":"1.7.0-store.0","lodash":"^4.17.19","node-fetch":"^2.6.0"},"gitHead":"dd7287dcee13c48f62e4b0219b445df70b36d8d3","readme":"# Defender Admin Client\n\nDefender Admin acts as an interface to manage your smart contract project through one or more secure multi-signature contracts. Defender Admin holds no control at all over your system, which is fully controlled by the keys of the signers.\n\nTo interact with your contracts, you create _proposals_ that need to be reviewed and approved by the other members of the multi-signature wallets. These proposals can be created directly in the Defender web application, or using this library. You can also rely on this library to add your contracts to the Defender Admin dashboard.\n\n\n## Install\n\n```bash\nnpm install defender-admin-client\n```\n\n```bash\nyarn add defender-admin-client\n```\n\n## Usage\n\nStart by creating a new _Team API Key_ in Defender, and granting it the capability to create new proposals. Use the newly created API key to initialize an instance of the Admin client.\n\n```js\nconst { AdminClient } = require('defender-admin-client');\nconst client = new AdminClient({apiKey: API_KEY, apiSecret: API_SECRET});\n```\n\n### Action proposals\n\nTo create a `custom` action proposal, you need to provide the function interface (which you can extract from the contract's ABI), its inputs, and the multisig that will be used for approving it:\n\n```js\nawait client.createProposal({\n  contract: { address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E', network: 'rinkeby' }, // Target contract\n  title: 'Adjust fee to 10%', // Title of the proposal\n  description: 'Adjust the contract fee collected per action to 10%', // Description of the proposal\n  type: 'custom', // Use 'custom' for custom admin actions\n  functionInterface: { name: 'setFee', inputs: [{ type: 'uint256', name: 'fee' }] }, // Function ABI\n  functionInputs: ['10'], // Arguments to the function\n  via: '0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b', // Multisig address\n  viaType: 'Gnosis Safe', // Either Gnosis Safe or Gnosis Multisig\n});\n```\n\n### Upgrade proposals\n\nTo create an `upgrade` action proposal, just provide the proxy contract network and address, along with the new implementation address, and Defender will automatically resolve the rest:\n\n```js\nconst newImplementation = '0x3E5e9111Ae8eB78Fe1CC3bb8915d5D461F3Ef9A9';\nconst contract = { network: 'rinkeby', address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E' }\nawait client.proposeUpgrade({ newImplementation }, contract);\n```\n\nIf your proxies do not implement the [EIP1967 admin slot](https://eips.ethereum.org/EIPS/eip-1967#admin-address), you will need to provide either the [`ProxyAdmin` contract](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.0.0/contracts/proxy/transparent/ProxyAdmin.sol) or the Account with rights to execute the upgrade, as shown below.\n\n#### Explicit ProxyAdmin\n\n```js\nconst newImplementation = '0x3E5e9111Ae8eB78Fe1CC3bb8915d5D461F3Ef9A9';\nconst proxyAdmin = '0x2fC100f1BeA4ACCD5dA5e5ed725D763c90e8ca96';\nconst contract = { network: 'rinkeby', address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E' }\nawait client.proposeUpgrade({ newImplementation, proxyAdmin }, contract);\n```\n\n#### Explicit owner account\n\n```js\nconst newImplementation = '0x3E5e9111Ae8eB78Fe1CC3bb8915d5D461F3Ef9A9';\nconst via = '0xF608FA64c4fF8aDdbEd106E69f3459effb4bC3D1';\nconst viaType = 'Gnosis Safe'; // or 'Gnosis Multisig', or 'EOA'\nconst contract = { network: 'rinkeby', address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E' }\nawait client.proposeUpgrade({ newImplementation, via, viaType }, contract);\n```\n\n### Pause proposals\n\nTo create `pause` and `unpause` action proposals, you need to provide the contract network and address, as well as the multisig that will be used for approving it. Defender takes care of the rest:\n\n```js\nconst contract = { network: 'rinkeby', address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E' }\n\n// Create a pause proposal\nawait client.proposePause({ via: '0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b', viaType: 'Gnosis Safe' }, contract);\n\n// Create an unpause proposal\nawait client.proposeUnpause({ via: '0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b', viaType: 'Gnosis Safe' }, contract);\n```\n\nNote that for `pause` and `unpause` proposals to work, your contract ABI must include corresponding `pause()` and `unpause()` functions.\n\n## Adding Contracts\n\nIf you create a new proposal for a Contract that has not yet been added to Defender Admin, it will be automatically added with an autogenerated name and an empty ABI. You can optionally control these values by providing values for them in the `contract` object of the proposal:\n\n```js\nconst contract = { \n  network: 'rinkeby', \n  address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E',\n  name: 'My contract', // Name of the contract if it is created along with this proposal\n  abi: '[...]', // ABI to set for this contract if it is created\n};\nawait client.proposeUpgrade({ newImplementation }, contract);\n```\n\nAlternatively, you can add any contract explicitly by using the `addContract` method, and setting network, address, name, and ABI. The same method can be used to update the contract's name or ABI.\n\n```js\nawait client.addContract({ \n  network: 'rinkeby', \n  address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E',\n  name: 'My contract',\n  abi: '[...]',\n});\n```\n\n You can also list all contracts in your Defender Admin dashboard via `listContracts`.\n","readmeFilename":"README.md","_id":"defender-admin-client@1.7.0-store.0","_nodeVersion":"12.18.3","_npmVersion":"lerna/3.22.1/node@v12.18.3+x64 (linux)","dist":{"integrity":"sha512-JjcFg1B0rsDin2wsvtIHkrevqVpBK5owZBP3EbnSZ9jL7UhVxFjD/pde2JMB949jQRdFCZuOa5DQO9deMt7ljw==","shasum":"2239fcee1a5de1ad69c62e38c47a0e5de80d64c1","tarball":"https://registry.npmjs.org/defender-admin-client/-/defender-admin-client-1.7.0-store.0.tgz","fileCount":21,"unpackedSize":107251,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgm+rvCRA9TVsSAnZWagAAiz0P/1Iy+fWfxVi6WA2Jrjrw\nFZuSzw44AxZXwjNucgEcEMR/325VA4955hvSXbzOx/0GXqHQxOYjiv97OfrA\n7tmaTMvI45twecLi8aGYnYtyXjtePOVdu6ffWnN8mqYfVuhVIo8f0sBmE7wU\nekUNH4jLmm/7H6/ouYTKHwKAq+UgehozLLzxJ7b1Rdsx1iNVhMKJei5ymm9D\nY8hs20DeMMfTHCpHNwoHhGmzmQHj12AWK25dMAzr/dKgmWRsS8COhWrq3z+0\nnXtCC7/+Xssd56zP1v9azLx2/2OI7ITrMgQFk614sLzLA45x299r40wLP0Cr\ngpoDU6A9tRcP7c0f63QAXRolbak9AsXMVbDcw6tlDlcOI+z12LFThsmqg/d+\nZJDcwSxglRM2+iHRKyMtnHpCUOy3g9ixMCPxRbIk2e0yKKZMBaHMAjK/ZQUo\nbJ9N2JkwstukL/5xzw2XgoUxf1wjl/adumqK5UoPlULYN4ru7SltcubMvRWI\nHRPOWjY/sS5+8WORT8e7t42V1aDcjqL5WQQ0m6AyfOSLbOtC/twYi6dlW4XY\nTZDdS9jhpbyjMh55egjXC4kM3Qe9aRqoH6cCvmZy0CQ3RkC7FJCfR2XJFfYt\nC2xlOHPuzGBF8SjglNwfly5CGL5vnsR5KueE8Er4+tEUDHPGKw7ECzNzdfia\nedjY\r\n=Qkj9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDakgVkzHfudbaz19AQc1zAStnDEZhB3b7TJ/yht+O/HQIhANlsobs89O/8Sjc54Fgl8Ugk1qMe13m8ElY/Zly5Pz7O"}]},"_npmUser":{"name":"spalladino","email":"spalladino@gmail.com"},"directories":{},"maintainers":[{"name":"frangio","email":"frangio.1@gmail.com"},{"name":"spalladino","email":"spalladino@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/defender-admin-client_1.7.0-store.0_1620830959158_0.5307347233762585"},"_hasShrinkwrap":false,"deprecated":"defender-admin-client is deprecated, please install @openzeppelin/defender-admin-client"},"1.7.0":{"name":"defender-admin-client","version":"1.7.0","description":"Defender Admin acts as an interface to manage your smart contract project through one or more secure multi-signature contracts. Defender Admin holds no control at all over your system, which is fully controlled by the keys of the signers.","main":"./lib/index.js","types":"./lib/index.d.ts","scripts":{"build":"rm -rf lib && tsc","test":"yarn test:unit","test:unit":"jest --verbose --passWithNoTests","watch":"tsc -w","prepare":"yarn build"},"author":{"name":"Santiago Palladino","email":"santiago@openzeppelin.com"},"license":"MIT","dependencies":{"axios":"^0.19.2","defender-base-client":"^1.7.0","lodash":"^4.17.19","node-fetch":"^2.6.0"},"gitHead":"0f307714b8ab375daa3ec43b232851c09084567d","_id":"defender-admin-client@1.7.0","_nodeVersion":"12.18.3","_npmVersion":"lerna/3.22.1/node@v12.18.3+x64 (linux)","dist":{"integrity":"sha512-hMlqECaNemBkYEI3Lzixa/C+x/KtBbyNeCMiGbW4sWv7p1HV5sqqvmVj9CacGU7dJR3KPPwwINaGwNwVPnthQg==","shasum":"e010a3ae0bb6257a773ea8879b7856f47ac56781","tarball":"https://registry.npmjs.org/defender-admin-client/-/defender-admin-client-1.7.0.tgz","fileCount":21,"unpackedSize":107236,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgnW5ICRA9TVsSAnZWagAA7woP/RXy7H/8BQy7nyl+hJPI\nQjkY4A5ntyiRsbqeeD4zDd92fVn7mnJqGOy3EReUk6tWa/JXuI3fWU6NEiYv\nusQGOi20KnZZRZpdM/quwQy1wBOn5ychV4W5BfpXeFabkdgnArkOq4jg/ZYt\nRuW18HWv3XVpgJMEo9h8T8nlxLoPTuNtCywWjdrdY6GfX5te5Tw13/svbyj0\nX9ZcsHE2s6FdsEuL+JsubPTaFQRy9YPWzmeYWtu5X6DmJmzV7cT7Vlbk160K\nGp9yhOGvyMV90vieh52QiWXw4XzhYGwgqSB77O6O6ZBsyZi+vBkfLNlWaz2v\n+eODW37UtrfwUVMVqnvWFABAsjMr9i99usC1MwFZ4TrzibWGpCK9TIBuSi1I\npDeqW5zALeS6IZZJvBrNsiUW02e/FWOASsBWnBi0o+TmDibK7XqmQWyZ3wel\nv1ssicUV0PDKM09AdWIPAh9i5Clp8jrNLGcLr2jgagYBDBzGwx1NHWZ2vUCw\nWcK7STczlwcqCDBA59TPBBOigBmOYPNeY5L8+wUiqaTQaZY5S2uVleSfwLLC\nz8mDPyTRfRvSkpAbVIXpf2tOjDfyj6vsaKP/1kqt380y1mxfXvYGBEQaCszK\nLDgptADgrkPPgoesB/ESHQzCiW7l/TArAqJBAc4D3jQIf33RiZz9ScexHKOE\nByoZ\r\n=rNMu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDBW5LE33frWfDpQOz0e9HNOFVqZPuYUBln0zC13BfGDQIgey/QemIS6USqTXCB0U4DZ7xyDLA/Ed6BGFtwpzmayj4="}]},"_npmUser":{"name":"spalladino","email":"spalladino@gmail.com"},"directories":{},"maintainers":[{"name":"frangio","email":"frangio.1@gmail.com"},{"name":"spalladino","email":"spalladino@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/defender-admin-client_1.7.0_1620930119938_0.13116668625008754"},"_hasShrinkwrap":false,"deprecated":"defender-admin-client is deprecated, please install @openzeppelin/defender-admin-client"},"1.10.0":{"name":"defender-admin-client","version":"1.10.0","description":"Defender Admin acts as an interface to manage your smart contract project through one or more secure multi-signature contracts. Defender Admin holds no control at all over your system, which is fully controlled by the keys of the signers.","main":"./lib/index.js","types":"./lib/index.d.ts","scripts":{"build":"rm -rf lib && tsc","test":"yarn test:unit","test:unit":"jest --verbose --passWithNoTests","watch":"tsc -w","prepare":"yarn build"},"author":{"name":"Santiago Palladino","email":"santiago@openzeppelin.com"},"license":"MIT","dependencies":{"axios":"^0.19.2","defender-base-client":"1.10.0","lodash":"^4.17.19","node-fetch":"^2.6.0"},"gitHead":"b79d7cf10661e36c1e28df1a0aaf2edfa223dc3d","_id":"defender-admin-client@1.10.0","_nodeVersion":"12.18.3","_npmVersion":"lerna/3.22.1/node@v12.18.3+x64 (linux)","dist":{"integrity":"sha512-frWypDy+mi5th1BHjc++qHotpmxscpe4MzIN5YEcv8OPQp2/yO1sx/37vo8VBBw+Iv6aLliP5rHSHXGP2kejig==","shasum":"19317b38ac442d810904d625de2bf3843847b46c","tarball":"https://registry.npmjs.org/defender-admin-client/-/defender-admin-client-1.10.0.tgz","fileCount":21,"unpackedSize":106677,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg5gc8CRA9TVsSAnZWagAAEYkQAIpxm9eA+Vgj+XxXCoDx\npaUiYVNcFPdVKbwPiLVgcXq1tFAHzQIbR9fty6HHU1R5BQGlflzFvMp7MzwJ\n52zhjID6gavV8INavhgvQw5tb5kqBJuidZwPJYPdGpkFAfXOrBmBBbw+1MdH\nFksbdnVRIVZN+2c1WR5typB3VE8thZwuMBSvnOT/+HYRqNrV/SvUM1gVQvP0\n7mjOm+uoV4wnEbtZFNalJcC6t8Vf7+x+P88N/97DiW+GAjGnTDwLBgebyxiB\nk2MOyQurqbrJNSo5lrQh9R8AxztUFa6B6ziPKRNIxJ7vbPBTJcqfX2iiWj90\n1cObRiyi8TvkyifOfkjPMXa0kiT8vrp0xkS46ZOSqZCJ0Lxj/bfF+ooIKK+J\nxEbvOOrKYP++L+w9fhMqmUl0MUzTDukL8ad6mF6iUmE+YMWaWbDXw6bqNJ6t\nobSGfEw7chPTFEIYX4lHz1kRWSRBM85Jseq8Wdo9eyCyZWoU+QPB5+5banxN\nEyeun1gN6P6lrq2rCmsdvKZIT+xkmdfYvU9Eg1ok7nfttLWGx2mD73w6yv2K\nAeuydrGCMQPvGBey9ByxZTOemgg1gDjedRpt3U1Y9iBbVFTl7txm9uxqGs9b\nR9XNdZA0ynbgPwlzEAfNDjrGVDS7Y9jzQPUEZHBwWg+nKa925Phiat/nTuVS\nMIfQ\r\n=AqW7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCwcesEQUJKzDq2CT4+M1gVn+RWS9xfM6qTvvL4Io8g+QIgaaSB09wrsVMH/jcZIz97aZBberPMu8NXsWnGrZezTZM="}]},"_npmUser":{"name":"spalladino","email":"spalladino@gmail.com"},"directories":{},"maintainers":[{"name":"frangio","email":"frangio.1@gmail.com"},{"name":"spalladino","email":"spalladino@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/defender-admin-client_1.10.0_1625687868058_0.8336685771916932"},"_hasShrinkwrap":false,"deprecated":"defender-admin-client is deprecated, please install @openzeppelin/defender-admin-client"},"1.11.0":{"name":"defender-admin-client","version":"1.11.0","description":"Defender Admin acts as an interface to manage your smart contract project through one or more secure multi-signature contracts. Defender Admin holds no control at all over your system, which is fully controlled by the keys of the signers.","main":"./lib/index.js","types":"./lib/index.d.ts","scripts":{"build":"rm -rf lib && tsc","test":"yarn test:unit","test:unit":"jest --verbose --passWithNoTests","watch":"tsc -w","prepare":"yarn build"},"author":{"name":"Santiago Palladino","email":"santiago@openzeppelin.com"},"license":"MIT","dependencies":{"axios":"^0.19.2","defender-base-client":"1.10.0","lodash":"^4.17.19","node-fetch":"^2.6.0"},"gitHead":"2a617eb551cc9d658e7e58752ee82d679bdae4af","readme":"# Defender Admin Client\n\nDefender Admin acts as an interface to manage your smart contract project through one or more secure multi-signature contracts. Defender Admin holds no control at all over your system, which is fully controlled by the keys of the signers.\n\nTo interact with your contracts, you create _proposals_ that need to be reviewed and approved by the other members of the multi-signature wallets. These proposals can be created directly in the Defender web application, or using this library. You can also rely on this library to add your contracts to the Defender Admin dashboard.\n\n\n## Install\n\n```bash\nnpm install defender-admin-client\n```\n\n```bash\nyarn add defender-admin-client\n```\n\n## Usage\n\nStart by creating a new _Team API Key_ in Defender, and granting it the capability to create new proposals. Use the newly created API key to initialize an instance of the Admin client.\n\n```js\nconst { AdminClient } = require('defender-admin-client');\nconst client = new AdminClient({apiKey: API_KEY, apiSecret: API_SECRET});\n```\n\n### Action proposals\n\nTo create a `custom` action proposal, you need to provide the function interface (which you can extract from the contract's ABI), its inputs, and the multisig that will be used for approving it:\n\n```js\nawait client.createProposal({\n  contract: { address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E', network: 'rinkeby' }, // Target contract\n  title: 'Adjust fee to 10%', // Title of the proposal\n  description: 'Adjust the contract fee collected per action to 10%', // Description of the proposal\n  type: 'custom', // Use 'custom' for custom admin actions\n  functionInterface: { name: 'setFee', inputs: [{ type: 'uint256', name: 'fee' }] }, // Function ABI\n  functionInputs: ['10'], // Arguments to the function\n  via: '0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b', // Multisig address\n  viaType: 'Gnosis Safe', // Either Gnosis Safe or Gnosis Multisig\n});\n```\n\n#### Issuing DELEGATECALLs\n\nWhen invoking a function via a Gnosis Safe, it's possible to call it via a `DELEGATECALL` instruction instead of a regular call. This has the effect of executing the code in the called contract _in the context of the multisig_, meaning any operations that affect storage will affect the multisig, and any calls to additional contracts will be executed as if the `msg.sender` were the multisig. To do this, add a `metadata` parameter with the value `{ operationType: 'delegateCall' }` to your `createProposal` call:\n\n```js\nawait client.createProposal({\n  // ... Include all parameters from the example above\n  via: '0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b', // Multisig address\n  viaType: 'Gnosis Safe', // Must be Gnosis Safe to handle delegate calls\n  metadata: { operationType: 'delegateCall' }, // Issue a delegatecall instead of a regular call\n});\n```\n\nNote that this can potentially brick your multisig, if the contract you delegatecall into accidentally modifies the multisig's storage, rendering it unusable. Make sure you understand the risks before issuing a delegatecall.\n\n### Upgrade proposals\n\nTo create an `upgrade` action proposal, just provide the proxy contract network and address, along with the new implementation address, and Defender will automatically resolve the rest:\n\n```js\nconst newImplementation = '0x3E5e9111Ae8eB78Fe1CC3bb8915d5D461F3Ef9A9';\nconst contract = { network: 'rinkeby', address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E' }\nawait client.proposeUpgrade({ newImplementation }, contract);\n```\n\nIf your proxies do not implement the [EIP1967 admin slot](https://eips.ethereum.org/EIPS/eip-1967#admin-address), you will need to provide either the [`ProxyAdmin` contract](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.0.0/contracts/proxy/transparent/ProxyAdmin.sol) or the Account with rights to execute the upgrade, as shown below.\n\n#### Explicit ProxyAdmin\n\n```js\nconst newImplementation = '0x3E5e9111Ae8eB78Fe1CC3bb8915d5D461F3Ef9A9';\nconst proxyAdmin = '0x2fC100f1BeA4ACCD5dA5e5ed725D763c90e8ca96';\nconst contract = { network: 'rinkeby', address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E' }\nawait client.proposeUpgrade({ newImplementation, proxyAdmin }, contract);\n```\n\n#### Explicit owner account\n\n```js\nconst newImplementation = '0x3E5e9111Ae8eB78Fe1CC3bb8915d5D461F3Ef9A9';\nconst via = '0xF608FA64c4fF8aDdbEd106E69f3459effb4bC3D1';\nconst viaType = 'Gnosis Safe'; // or 'Gnosis Multisig', or 'EOA'\nconst contract = { network: 'rinkeby', address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E' }\nawait client.proposeUpgrade({ newImplementation, via, viaType }, contract);\n```\n\n### Pause proposals\n\nTo create `pause` and `unpause` action proposals, you need to provide the contract network and address, as well as the multisig that will be used for approving it. Defender takes care of the rest:\n\n```js\nconst contract = { network: 'rinkeby', address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E' }\n\n// Create a pause proposal\nawait client.proposePause({ via: '0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b', viaType: 'Gnosis Safe' }, contract);\n\n// Create an unpause proposal\nawait client.proposeUnpause({ via: '0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b', viaType: 'Gnosis Safe' }, contract);\n```\n\nNote that for `pause` and `unpause` proposals to work, your contract ABI must include corresponding `pause()` and `unpause()` functions.\n\n## Adding Contracts\n\nIf you create a new proposal for a Contract that has not yet been added to Defender Admin, it will be automatically added with an autogenerated name and an empty ABI. You can optionally control these values by providing values for them in the `contract` object of the proposal:\n\n```js\nconst contract = { \n  network: 'rinkeby', \n  address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E',\n  name: 'My contract', // Name of the contract if it is created along with this proposal\n  abi: '[...]', // ABI to set for this contract if it is created\n};\nawait client.proposeUpgrade({ newImplementation }, contract);\n```\n\nAlternatively, you can add any contract explicitly by using the `addContract` method, and setting network, address, name, and ABI. The same method can be used to update the contract's name or ABI.\n\n```js\nawait client.addContract({ \n  network: 'rinkeby', \n  address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E',\n  name: 'My contract',\n  abi: '[...]',\n});\n```\n\n You can also list all contracts in your Defender Admin dashboard via `listContracts`.\n","readmeFilename":"README.md","_id":"defender-admin-client@1.11.0","_nodeVersion":"12.18.3","_npmVersion":"lerna/3.22.1/node@v12.18.3+x64 (linux)","dist":{"integrity":"sha512-ojKNkYvpBs9NPTxQC5F/KbkZ8BIgQv3px20Ev268gLupx2cQqWgl2SOlmo/sacvO3ffXCaAZWgkR8ZtTp+j++w==","shasum":"9d2684c597944e22c1d5a9136f71e68c832fa0c5","tarball":"https://registry.npmjs.org/defender-admin-client/-/defender-admin-client-1.11.0.tgz","fileCount":21,"unpackedSize":107809,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhFBnvCRA9TVsSAnZWagAAtyMQAKKgUIZCajOgxHH5kZ1x\ngddsQHmX/0z+PwB8+Lni299MtOtgmDUiH2m+jDbRyh1cirtreQ29YsvjNSzl\n54z7yxaOxC9nhwvgp6O0EBmTvDGZflrbvNgJ/rMMbhv3PuplQOkOsROfoV7J\nkPA1uinieFaL9D4LROC7iv9ydzEj3gZ7S9MC62F5pF9OClMr24YNpMqsS9Ak\naJOummaeBoNVqK/bEXpcLYzUGFiDAfXNhUu80mpSLOIxMT2nXVu50/30o6Z0\nJM7IOObYYL3uInPhdnyZkVe1+nEE0UBA0ccxBPIV+oSN0Zvr372ruk7CGv3x\n8fbEojoQowZOc3pYJ3peZHnInPbFj463GMIUdwuIOZ7/oyX2y2JbizMoYALl\nHCQPTA7I7Zmzk6qbJkN7UO55xbY1RwwUPUD/A0d4RigBiX2eV7CMtlsIX76T\nhb0UTwR9gi2qZbMQfm/up0tUCH/50T9bZZw649IpQo+jNL0BQt9lR7vSSgpm\nJFBSorX1DW5K7P9AgPrVHRF/7YOk5LMbVHscfbRrFSsAyTDqLCNlnbb7CoWb\n3pczRw2TbXmXRHurt2rgWo1vsyGT5kH1WboPmdTwOgavbHVVpDue7tImjUu7\nemMSFdrAWMucvdKAlDkOsQlTXDtZDeVsM/hQ2/Bn3qOj5CofqcX8ZCo9SNRm\nThFY\r\n=HxiS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBbRixr261jBMmvgFBajqiUBUHXUtg50jMo69pDiv/TIAiEAuKc5WPRor/j3FY2036uKNNlUAj7MImHiDtUwbrFZE44="}]},"_npmUser":{"name":"spalladino","email":"spalladino@gmail.com"},"directories":{},"maintainers":[{"name":"frangio","email":"frangio.1@gmail.com"},{"name":"spalladino","email":"spalladino@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/defender-admin-client_1.11.0_1628707311466_0.23155583203073205"},"_hasShrinkwrap":false,"deprecated":"defender-admin-client is deprecated, please install @openzeppelin/defender-admin-client"},"1.12.1":{"name":"defender-admin-client","version":"1.12.1","description":"Defender Admin acts as an interface to manage your smart contract project through one or more secure multi-signature contracts. Defender Admin holds no control at all over your system, which is fully controlled by the keys of the signers.","main":"./lib/index.js","types":"./lib/index.d.ts","scripts":{"build":"rm -rf lib && tsc","test":"yarn test:unit","test:unit":"jest --verbose --passWithNoTests","watch":"tsc -w","prepare":"yarn build"},"author":{"name":"Santiago Palladino","email":"santiago@openzeppelin.com"},"license":"MIT","dependencies":{"axios":"^0.19.2","defender-base-client":"^1.12.1","lodash":"^4.17.19","node-fetch":"^2.6.0"},"gitHead":"f3a6a34874e04e5fb2607981b0ce63c49e2957df","_id":"defender-admin-client@1.12.1","_nodeVersion":"16.2.0","_npmVersion":"lerna/3.22.1/node@v16.2.0+x64 (darwin)","dist":{"integrity":"sha512-Pn8h2opimPMqOWq7MsP3LcX9ffFxt1oXvC5RrMg6ws+woXvilsraz0QohMjDBZBCMVxffmaCZyTiC3mASIccTQ==","shasum":"8f201f4ef514b6615efad2f4c82a8016bb6b1c47","tarball":"https://registry.npmjs.org/defender-admin-client/-/defender-admin-client-1.12.1.tgz","fileCount":21,"unpackedSize":109407,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhn6qJCRA9TVsSAnZWagAAfCAP/iy184Eh+BSBimgy977l\n2XF7ZFYqhmQLVFp0gviB1PtRY3h2kTqpAxvaRRs/SwRr3iW5BV6JH3Bxutsa\nLXe6GakCxNBw69xcFEQ8oisuGnhlYACMIxsB8gz76fQzA9UyWdqf/vyWTjKw\nL4z40kyPOwAgAs6Oi6xzYN3z6tvb/i8/Ik2Es/iidU7F/S2cOm823oVY9N/j\nTelSjeORGaxMQivYIjpwyCI2iRnkhADx854lBfzcF7LfupYCWjpovtsroRBT\n0TYVrAQYJE0BRefEZ96/cUY18HWgPJKwDPPrvC391lSQjh7eRbc46QhsdFRa\nEoaRu1alFQ+qj0ePBsbWBDNZv1C3ZZ8v6Ml07QPKbc2X3p8RlhmGK0vFlkSc\ntsieVPsOvaQXb8Cf0RSI5wc0tEH4eCg0p344BYAupYsUJ5ezrd7yLRfVwPte\n6wi+wl2H+QP3X7dVzHcCZtK6UaPnhXNHWwtiMwtbdH76B08HN3LgdpomJgGC\nlJ5x7eSrNCHeslrRHwSNWNXKqswgjdWLE1KzfXhf63+YmCfTCp8wIgPsmDWy\n2bsjPecKsnBIDeItcNhpflLTDQDMwlvlFWEjYk+k8UdpUS6P+A47ktC09Gtt\nZeiYBgk3njMnY1Pcw4dGlyJ6MCfUhCEc3dk+q2RNZGXD+4rmhSmIa5MamFZX\n4+7A\r\n=YfRQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDsz3S2fkSEn6taWkKZNrGU5bphGlXr66g0vux1Dxi8MAiEApqhuKAQOUfi63b2wsefvNfbJQNEPX3WOFbUsE2CjyfY="}]},"_npmUser":{"name":"martinverzilli","email":"martin.verzilli@gmail.com"},"directories":{},"maintainers":[{"name":"frangio","email":"frangio.1@gmail.com"},{"name":"spalladino","email":"spalladino@gmail.com"},{"name":"martinverzilli","email":"martin.verzilli@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/defender-admin-client_1.12.1_1637853833616_0.5549412659765867"},"_hasShrinkwrap":false,"deprecated":"defender-admin-client is deprecated, please install @openzeppelin/defender-admin-client"},"1.13.0":{"name":"defender-admin-client","version":"1.13.0","description":"Defender Admin acts as an interface to manage your smart contract project through one or more secure multi-signature contracts. Defender Admin holds no control at all over your system, which is fully controlled by the keys of the signers.","main":"./lib/index.js","types":"./lib/index.d.ts","scripts":{"build":"rm -rf lib && tsc","test":"yarn test:unit","test:unit":"jest --verbose --passWithNoTests","watch":"tsc -w","prepare":"yarn build"},"author":{"name":"Santiago Palladino","email":"santiago@openzeppelin.com"},"license":"MIT","dependencies":{"axios":"^0.19.2","defender-base-client":"^1.12.1","lodash":"^4.17.19","node-fetch":"^2.6.0"},"gitHead":"8c5141d7900f61c1deaa34df04e3de158d03b7bc","_id":"defender-admin-client@1.13.0","_nodeVersion":"16.2.0","_npmVersion":"lerna/3.22.1/node@v16.2.0+x64 (darwin)","dist":{"integrity":"sha512-iJ1a7GxgZ9lK89mD5qWcR+fRPdP6RJqWdyePePa0jUezf27fUEaAT+cpuQWqA4BFo2tVqTRvcaJ2a9a6Eguz6w==","shasum":"57403d0db2b1c6f84fdc207a97bb0510c38bf9b2","tarball":"https://registry.npmjs.org/defender-admin-client/-/defender-admin-client-1.13.0.tgz","fileCount":21,"unpackedSize":109445,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh8VuKCRA9TVsSAnZWagAA5PAP/01NBrHLzaZEs5zfR2sr\n1jaPUzCXSzeXvI85jyMs4AAChlQQrcYZcQVt8IL9IToVLm/4wn/ZwkuFt3ll\ns5anNrbGDLD4J6UGTFLbWQinlnVhqMgbxDM3vRG3ue1+fXnwd2+EZ8vF1Ufw\nHKt+J1FQuZHRscfhQG121wYyFqUJ9snp5chAcwVj70qNDtJoJ9bMmtG3n9AP\nIkoVzpttMalvv6BbHkDIZBAmxBdMfFXYM+L2zY/gQkvYcqQMgR2bTzSYqli2\nq2HcpcqIEBiGEFnMLW+MWUDfF2nIKUz+pikmq5oiBYNTjt9G0/4C6kFAop/o\nboASoS3vdpPZpRkN0SgDijKUzqC6Tf+VGKWPgNAE4tI99tBwnXGI9TMd2t8n\nVaGwMImfzrbmjVkt0uB6THTKhD66uIH8ILRrcgLNYXwyF7gn3L5w+XUPSNlK\ngmZ+DUIAQ5wDiqgPdUTSjsUlHfreLaPCKas2PLu92mYkU3Qv1EoyqHZNER9n\nUuqEA7KsTlGIGuFpQk5g03gd66XDu4jXwor3u24yFE5Z19s4qFIvpQa+T0UL\niGbcJMvXEEzRAvEX6a/4PyjMz3S0huiqaH3UKraKPuHr3p5juWNyYA4N9jpN\nXWnNcjes+JNp3t8JiGkhZwS69ETGylEjhhJwyfMpxAYcvrAA3Je5QYS3jIib\nYkEL\r\n=iKWj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDI0rmljSdi0n4MyzCOzygduemJueGe78TXz2Psjzy9RwIgdnHm9KK1vQgsrjX+/CHuzrXUEB3+VAzYoyyIKJdIbvs="}]},"_npmUser":{"name":"martinverzilli","email":"martin.verzilli@gmail.com"},"directories":{},"maintainers":[{"name":"frangio","email":"frangio.1@gmail.com"},{"name":"spalladino","email":"spalladino@gmail.com"},{"name":"martinverzilli","email":"martin.verzilli@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/defender-admin-client_1.13.0_1643207562240_0.8595699684159923"},"_hasShrinkwrap":false,"deprecated":"defender-admin-client is deprecated, please install @openzeppelin/defender-admin-client"},"1.14.0":{"name":"defender-admin-client","version":"1.14.0","description":"Defender Admin acts as an interface to manage your smart contract project through one or more secure multi-signature contracts. Defender Admin holds no control at all over your system, which is fully controlled by the keys of the signers.","main":"./lib/index.js","types":"./lib/index.d.ts","scripts":{"build":"rm -rf lib && tsc","test":"yarn test:unit","test:unit":"jest --verbose --passWithNoTests","watch":"tsc -w","prepare":"yarn build"},"author":{"name":"Santiago Palladino","email":"santiago@openzeppelin.com"},"license":"MIT","dependencies":{"axios":"^0.19.2","defender-base-client":"^1.14.0","lodash":"^4.17.19","node-fetch":"^2.6.0"},"gitHead":"11c76154e21e4356d4020549444f76b9cf0b2da7","_id":"defender-admin-client@1.14.0","_nodeVersion":"12.22.1","_npmVersion":"lerna/3.22.1/node@v12.22.1+x64 (darwin)","dist":{"integrity":"sha512-fa5bTVccrqxiY2OnvawaWSEK0VpJQAsTPik55OAPIb6LwsVspqiw0492B8CehwVhd/SRnbCAxh1oKPx7rTDPEA==","shasum":"85b32c216ed579e1778c293587de29cc047b4e69","tarball":"https://registry.npmjs.org/defender-admin-client/-/defender-admin-client-1.14.0.tgz","fileCount":21,"unpackedSize":109445,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJiBPrUCRA9TVsSAnZWagAAWCoP/R/zI8YAiTmlHrXAdX5J\nCdq6EKuV6FCF0bWqOTjirNW9vJj1PMnR8iO1OLYeaid940bmOB0EZFsTJvDO\nS5JOc9DJBDpe8sj3qyaiOT2u3TgOQnWxiTKkD+Z/ByG0AQzyV26CDZmwdYX9\nwHJNDXZn5aNd+BJogtMYyGdMrRK0ilWYmiGE0anQ1Tz0h6psFrDLQ2bwYeuJ\nt9PEyk4zzdcAKKLeAj3/jnxWFEtt1AkWcyaRoYX+mk5AxaX6KIfYh80zWm9i\nOyTQblRh/oDfF7lY6+elHY9IiWG2GLj82dpLEMyXPBCck/CjMwQtTSqN1BtV\n7xWE/Htw/22ibD+JXQ1Y7ZTOIKk5ppzF0fMRlvBUxMK7qh6fLVKeDdhAF5js\nDeXvSc/y4fLYQj064c0Y34Fq5rC5mBKWVRXWt+E6Col2iOFk6U4BQhEeICJi\nDX07cCFnbH0TM66mhtNT9AMOthreaLALvv7WSe0HhE3IWrvrdgO03xMVtNH8\nWEy8IIYxtr+ckTMtSATBJa4pRsEKm+C32VNHPHa43hbqgD0YNdbN6ag1qLiq\nQHkskRttPI/0rxYXVW3w1WZw5qbwA83fAgd9OGHUQS9jbB5bnAN/TlodimCN\nsEzmUJEooksCbujWvqQKeXkkomgItKawn5/5/SbNxaG8xwgQNA+k3iRiBqdr\nxFHU\r\n=sEWE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD+HWhE1YIDHBQM+ug/whuzLgO5eCKLdwTvvKo6YA/BLAIhAP4RJYs9XKjEqaZglbiss/kmjSHIiulC8wX1OvBiitIi"}]},"_npmUser":{"name":"martinverzilli","email":"martin.verzilli@gmail.com"},"directories":{},"maintainers":[{"name":"frangio","email":"frangio.1@gmail.com"},{"name":"spalladino","email":"spalladino@gmail.com"},{"name":"martinverzilli","email":"martin.verzilli@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/defender-admin-client_1.14.0_1644493523867_0.9477069181885769"},"_hasShrinkwrap":false,"deprecated":"defender-admin-client is deprecated, please install @openzeppelin/defender-admin-client"},"1.16.0":{"name":"defender-admin-client","version":"1.16.0","description":"Defender Admin acts as an interface to manage your smart contract project through one or more secure multi-signature contracts. Defender Admin holds no control at all over your system, which is fully controlled by the keys of the signers.","main":"./lib/index.js","types":"./lib/index.d.ts","scripts":{"build":"rm -rf lib && tsc","test":"yarn test:unit","test:unit":"jest --verbose --passWithNoTests","watch":"tsc -w","prepare":"yarn build"},"author":{"name":"Santiago Palladino","email":"santiago@openzeppelin.com"},"license":"MIT","dependencies":{"axios":"^0.19.2","defender-base-client":"^1.16.0","lodash":"^4.17.19","node-fetch":"^2.6.0"},"gitHead":"8471085f5f94dafb25a87611ced018e66307bf9a","_id":"defender-admin-client@1.16.0","_nodeVersion":"12.22.1","_npmVersion":"lerna/3.22.1/node@v12.22.1+x64 (darwin)","dist":{"integrity":"sha512-1O4/jdILtnkzj9P6WHt/Qij2hDTbVnfhTncflIuLKrpH8M0hupVDneVXbhSxhvNB73Fe6JrK43y2M3WL+6Gqkg==","shasum":"c7ceeb64aa2162f299ed6a2b69a9855a7d6fd95d","tarball":"https://registry.npmjs.org/defender-admin-client/-/defender-admin-client-1.16.0.tgz","fileCount":21,"unpackedSize":109445,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiDhmiACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrYhxAApNO2vWUDiTcKpCfVkIFH6HiIaflAbnW5MBfWDLGr6jJ092vN\r\ntVcKVqwIUFYUVGW5Y/v4uVyXo9iJsmC6EA0I3dVypIl7gYYOoRuRJupnrhci\r\nX2rGR8b7AEzOdEfvlmu6S27SI6pK3Wddikj5Wa3oMML40g4C+5zjWR8X3ari\r\nwwxvWRS+R6H5V2xjJEBsLYqQr308b85OEflN5APLfOQOwLeXawpgAhzOXpOE\r\na8UC4DYewyG4fE62pzj++oTlm0ZKEZtNeiVPnPcFh1h7cgqfJxHp/2iHpgxx\r\n4hkkMdEFu0V/6z1hfEvYE/AFnm5UNu7+P4Z8qt98/2jeK0//yCX7l6SWR79J\r\n88IBbWTYqpLbFY7R0+hiEUCgJVlQrMqbBK1uM/8xkFIWQ5JX4xb5rXLTP4Zt\r\ntVrRbnUCBrOSnyMldVGlol4Qvl293it9QuR2tttMJFkSRIm3W1RrzmzvOogF\r\neCIGcJDpxdtROy9jA0r7gz25QzpWLMkZslyAtj+jNywRXh2vmjEQPRRU0s9w\r\nlj4+jypKZKtYfEn/AsO202SX42Y2VT7vBVuknO0ZeTlJPYzOm36U/a/X5O15\r\nnnbTH2jxGA8/7Rm9m8oJYo1JVDkcbg0zUb9teIBH1vt2quI7nc7Q2CroyrHY\r\nrIQeQFYWwitJvGbKLZo3dMX+p/b/86RxbXw=\r\n=aKFK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDfd4Anh3S/b1jxGCHWYap44pmMF7CVWHRPcxdijcmXBwIgdVhTIatXftW9uPiMlNMR7QSzGIkKvrqgFnE6bsb3GAs="}]},"_npmUser":{"name":"martinverzilli","email":"martin.verzilli@gmail.com"},"directories":{},"maintainers":[{"name":"frangio","email":"frangio.1@gmail.com"},{"name":"spalladino","email":"spalladino@gmail.com"},{"name":"martinverzilli","email":"martin.verzilli@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/defender-admin-client_1.16.0_1645091234758_0.09947941833981333"},"_hasShrinkwrap":false,"deprecated":"defender-admin-client is deprecated, please install @openzeppelin/defender-admin-client"},"1.18.0":{"name":"defender-admin-client","version":"1.18.0","description":"Defender Admin acts as an interface to manage your smart contract project through one or more secure multi-signature contracts. Defender Admin holds no control at all over your system, which is fully controlled by the keys of the signers.","main":"./lib/index.js","types":"./lib/index.d.ts","scripts":{"build":"rm -rf lib && tsc","test":"yarn test:unit","test:unit":"jest --verbose --passWithNoTests","watch":"tsc -w","prepare":"yarn build"},"author":{"name":"Santiago Palladino","email":"santiago@openzeppelin.com"},"license":"MIT","dependencies":{"axios":"^0.19.2","defender-base-client":"^1.18.0","lodash":"^4.17.19","node-fetch":"^2.6.0"},"gitHead":"8d0373f3fcfce313ce66d0ab21ed0b44608432ce","_id":"defender-admin-client@1.18.0","_nodeVersion":"12.22.1","_npmVersion":"lerna/3.22.1/node@v12.22.1+x64 (darwin)","dist":{"integrity":"sha512-BxZwM3ELh1DaZGO6+cmmvw2QcGNoEOz9SFMiv6+VTz6sOAFqhBLTwaA7HhDzFT+CfdVEx1M++m8g2sRdjXOmlw==","shasum":"a994c89fcbc4b94d309cb87dea80a2551715f962","tarball":"https://registry.npmjs.org/defender-admin-client/-/defender-admin-client-1.18.0.tgz","fileCount":21,"unpackedSize":109445,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiKjXiACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpRCA//Qjlxygbp/6cMRfBF4z5rDH6EsrAB6e8wMwH7jEC3V2dlFgEZ\r\npTkqME/7tpadsizmPuu878esrQ/EKswCu//rpbL2zxow9/Gu31NphoZqR9ZS\r\nIb4sZreQuayY9orOjWT8v6dSPFaOrkljPCSVjt/SkX3OM3j/oC93BUdlPp/Z\r\nHBCx3G66grpH0fxdbXxwSINV8eZn9hdO7jZ84gMQPMya2T0hT7ONW+GKJagu\r\niryLm4n5rLY09Niw5bcsq64ItX53kmNbvHPX+zr7OjNaXULv5BJMKBzZW/to\r\n/teTzWgT43/rKUgdd8+FkGRo88+5XmdOFA2bF78U2q3Yrb1UaSi8+8LET9KO\r\n52JccmFURQBRiJiRR5EHgneJR2tHyVdLGO1Eu/7dFUnjzoMXMDkDKbRjfZiB\r\ng4zCf5RZf9JWngzu8Qg2bH2IJBtd5TQ9kUkjVg3msw6zjEGTDeENGU6iJa+Y\r\nSCkbc/VBFztUA7MRx9gxW41JRUtU4SkZ4LrTFT6phZ6pPSXm1yfcUpWxk0V4\r\n9hp7YQGDdOZA0MSLtNO5yk45Y5nrUfN9Qy6uB9SIxzeVpl8hr7qzSjc+IhyM\r\nLQkYVwgneD2RN7vGvYFq4O+WTLrLHwBLB+WBk90Pg7S6WQrvN45eZNRJ34Ga\r\nzY80fvWxvcFlOHEyOV+Mdgwm5+PULleb/10=\r\n=cZ6i\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDXVbGZpGNfZX0JYvZi1Oqv/NiieUTvFevt78Jg0dVOywIhAO+y1P09Hl/OUEb8JD+elHQbFAvqyKxkdI4ySr36H7v/"}]},"_npmUser":{"name":"martinverzilli","email":"martin.verzilli@gmail.com"},"directories":{},"maintainers":[{"name":"frangio","email":"frangio.1@gmail.com"},{"name":"spalladino","email":"spalladino@gmail.com"},{"name":"martinverzilli","email":"martin.verzilli@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/defender-admin-client_1.18.0_1646933474523_0.34751689209225445"},"_hasShrinkwrap":false,"deprecated":"defender-admin-client is deprecated, please install @openzeppelin/defender-admin-client"},"1.20.1":{"name":"defender-admin-client","version":"1.20.1","description":"Defender Admin acts as an interface to manage your smart contract project through one or more secure multi-signature contracts. Defender Admin holds no control at all over your system, which is fully controlled by the keys of the signers.","main":"./lib/index.js","types":"./lib/index.d.ts","scripts":{"build":"rm -rf lib && tsc","test":"yarn test:unit","test:unit":"jest --verbose --passWithNoTests","watch":"tsc -w","prepare":"yarn build"},"author":{"name":"Santiago Palladino","email":"santiago@openzeppelin.com"},"license":"MIT","dependencies":{"axios":"^0.19.2","defender-base-client":"1.20.1","lodash":"^4.17.19","node-fetch":"^2.6.0"},"gitHead":"9816c46acec94730ccb357a4800cbe1b31c3d324","_id":"defender-admin-client@1.20.1","_nodeVersion":"12.22.9","_npmVersion":"lerna/3.22.1/node@v12.22.9+x64 (darwin)","_npmUser":{"name":"ernestognw","email":"ernesto@openzeppelin.com"},"dist":{"integrity":"sha512-5TB4G9fgKJpY7xI7Vbe4FfN17e+Hb0QqH522BSsGq54CrCgIh4o8MjGuDpgZcLWO96R6lCkzEZYCamhnNz0rOA==","shasum":"9a3514c39eb1b8370183fcdf98785e4cab7d0a29","tarball":"https://registry.npmjs.org/defender-admin-client/-/defender-admin-client-1.20.1.tgz","fileCount":21,"unpackedSize":107847,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAfdC3QB0JZMMS/HYB3zGQDN9urqSytP+SiNpKJnHXivAiEAu5sG8UPJSkckv8W4uAgm1A/oZeM3D64DBuHokgVXrYY="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiaCHAACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqL/Q//StvjutmKq1/S37FRsc5hfDIXfvZfSPNe4mRUebYDjp89iGra\r\nKFqm4QJPIOsKiuZ6aS4Yuvil95Tripkz5OZG80Lp7yfbuB9jgCqmQGwyFkAR\r\n4RHz88S00ScanzzO13I7F9NWmkiciCSG+5tmK56aLDsMBJdKlo9qpuWaWwid\r\ndUCkZzQWF1GR32wRlQ8lMz0IkEgZ0i/CuALVWzTu4iTgqpvGpxpRx9whjeRs\r\nwUK+kAVaXq/EKs1VeT5I6QipFjFcMrcbPavH+qJpNL56sylVS6Omjd1KQcn4\r\nF3oaz/GgM+xL110PVDJCZcLAES/aKzsUrtPUh0RtBMj8913yAug8gzd4GtTY\r\nwrpn1nefLvM4KpLTdLsS6mX23//Q707C0Cy9mf0y123UlK5YdDYXyHL4jdSf\r\ngmgD+Pcy8/nBCGEExxgVJP9XSU3srNKWeHfikTegh6gxVRWXG6bQ9ZC0KOnC\r\nA9rwbIfMEWZuwv01bKriXwwt9+625oV00TGjKNaE73JggFcbnGwRX2Cf0sxs\r\nWFyk9QnLLB7a7bs9Z9uKOKRMEMm2Csvqzl3pdNmO2sSiAvPiLqYt4OR8kRxM\r\nzQLlXYBQ5zKdzv9i88JM2Mo5KZaSX8wUQGOqKWAIdvB1L4TKfvE9RIyFe4x6\r\nLItEp4JFVWT7GwLqkVeFMTGaiXBdFpvSSAY=\r\n=e6pu\r\n-----END PGP SIGNATURE-----\r\n"},"directories":{},"maintainers":[{"name":"frangio","email":"frangio.1@gmail.com"},{"name":"spalladino","email":"spalladino@gmail.com"},{"name":"ernestognw","email":"ernesto@openzeppelin.com"},{"name":"martinverzilli","email":"martin.verzilli@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/defender-admin-client_1.20.1_1650991551979_0.3289741866570477"},"_hasShrinkwrap":false,"deprecated":"defender-admin-client is deprecated, please install @openzeppelin/defender-admin-client"},"1.21.0":{"name":"defender-admin-client","version":"1.21.0","description":"Defender Admin acts as an interface to manage your smart contract project through one or more secure multi-signature contracts. Defender Admin holds no control at all over your system, which is fully controlled by the keys of the signers.","main":"./lib/index.js","types":"./lib/index.d.ts","scripts":{"build":"rm -rf lib && tsc","test":"yarn test:unit","test:unit":"jest --verbose --passWithNoTests","watch":"tsc -w","prepare":"yarn build"},"author":{"name":"Santiago Palladino","email":"santiago@openzeppelin.com"},"license":"MIT","dependencies":{"axios":"^0.19.2","defender-base-client":"1.21.0","lodash":"^4.17.19","node-fetch":"^2.6.0"},"gitHead":"af627f8accdcdc176ac545e106a7e7aef1ea0e2b","_id":"defender-admin-client@1.21.0","_nodeVersion":"15.5.1","_npmVersion":"lerna/3.22.1/node@v15.5.1+x64 (darwin)","dist":{"integrity":"sha512-PQxKcKshJnoRn2Fqx1laphVIcE7JzgYhBj/mS95UctQMHT0Ioi51YIZKfhpdC3isfEpjPNjjSUQGau36pIns0g==","shasum":"588d33c133e3ae7b6b643ad02ede7b87e1e24ab1","tarball":"https://registry.npmjs.org/defender-admin-client/-/defender-admin-client-1.21.0.tgz","fileCount":21,"unpackedSize":107847,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEHveewb1YTrbogJz2RcDsxkVgBFza/gk+45czZsB4s+AiEAt5A7eR8Sq2fyw9tNPcow39Zr31/4M1IePd9/cb5/Q+g="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJicBBMACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpBug//ey9AyI7xAG6JX/9BPLzv5SfEm6QwtrXlpqWmM1oXK+FrVXzd\r\nF9IrVAV2SdY5uw3KZtiRkSl7ZBRZli0Eq0R1Z3tospsjdDRQJLV9PkiQuW8h\r\n3jNDYmjDrO35F4g30cGyenUBg0UxbDacPsalFWu26BCaewdQtqAW0LVRDYTq\r\ngnRV6WvQsEWp+e6qtGokxOk1ZYCqzc5yr6tQR6PtsKTZlmAZQhkpPNJqFMsZ\r\n87t1DghoGkWNym2WyLG+gvC/MHU7PTarBWVONoZfeHVmAxByhtTLSO89jDht\r\nZjE8GKOrjso7GsZMP+G1bW3nq3hqNTlPtNbSfx78+0zn3EXVobisBYCM5tFN\r\nJ4v4Rw65SJr/HLE880QDtS+BVl0dDe1s6B8EwLKZNKGnCD170wAqdCb9ZDZp\r\nkMgqlju8ZovevqT+1CIyj7ngeedn+WmltFdL4nNDJqYUjXjjaBo4MA3dpv+2\r\noNpkt9ZOLUoFRml1a6nTKPzkIB+64txjiBldJppI5lLKz/Hy00kIioGNaWNR\r\nv8FSwfaU8IlrD15fLRg5Z1sPHg4V7oCkLZltDe8VEu2EqKpgbvFSUncCvigS\r\n91T1rt+jgQUD54c1gDZZ9wBGf2Pv1YA6xbsM824qdWKafTSLGXzaUAbZDDix\r\nf0ruj2GUSEZuUiwJrwKm+ufUyyYG18fOr3k=\r\n=YtK/\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"dylkil","email":"dylankilkenny95@gmail.com"},"directories":{},"maintainers":[{"name":"frangio","email":"frangio.1@gmail.com"},{"name":"spalladino","email":"spalladino@gmail.com"},{"name":"ernestognw","email":"ernesto@openzeppelin.com"},{"name":"martinverzilli","email":"martin.verzilli@gmail.com"},{"name":"tirumerla","email":"tirumerla@gmail.com"},{"name":"dylkil","email":"dylankilkenny95@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/defender-admin-client_1.21.0_1651511372079_0.06647174893016139"},"_hasShrinkwrap":false,"deprecated":"defender-admin-client is deprecated, please install @openzeppelin/defender-admin-client"},"1.21.2":{"name":"defender-admin-client","version":"1.21.2","description":"Defender Admin acts as an interface to manage your smart contract project through one or more secure multi-signature contracts. Defender Admin holds no control at all over your system, which is fully controlled by the keys of the signers.","main":"./lib/index.js","types":"./lib/index.d.ts","scripts":{"build":"rm -rf lib && tsc","test":"yarn test:unit","test:unit":"jest --verbose --passWithNoTests","watch":"tsc -w","prepare":"yarn build"},"author":{"name":"Santiago Palladino","email":"santiago@openzeppelin.com"},"license":"MIT","dependencies":{"axios":"^0.19.2","defender-base-client":"1.21.0","lodash":"^4.17.19","node-fetch":"^2.6.0"},"gitHead":"648c076b68f2b37fcb8b34f6802d0d928b39739f","_id":"defender-admin-client@1.21.2","_nodeVersion":"12.22.8","_npmVersion":"lerna/3.22.1/node@v12.22.8+arm64 (darwin)","dist":{"integrity":"sha512-FrfPo7ZawYk20miSSgic79XH0NpsWCy4gawRdyIgtaavwxID8VYdF79OH4RqXRPNWXOxmggWUXQ38jZ0qFASxQ==","shasum":"2857cd2cf89e2d45fc4929f1abd63670e9989622","tarball":"https://registry.npmjs.org/defender-admin-client/-/defender-admin-client-1.21.2.tgz","fileCount":21,"unpackedSize":107863,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF4pNb65RTM29DdvTjnw7bRK9+Pr3bUjJeCfFcqUssRWAiBWZQyM/UczL5aMuPG9aFIwz+PWhr9WBcRHImEtmqxCJg=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJieWXiACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmo6nQ/7Bgd8++J2gDPWwjsxD9duuYsGzmeRYCBv3X4V0ih8J41Ld7XS\r\nQaoEF8Hl0cQZ+ztA3Ll+jzKPLfLrM4u7dUaKIXtaNWp1qc8L9csbM+nB1SYh\r\n2x95FfeMUcS1PnlMmGxNgS5pDg9aDwPrfQQNjKdVHl6q5VOp5GpElserZbsU\r\nH3PKtfkJfQ3s5pJTg/pSvx6EvTxXozmA8Le54oTgowKZ7QtlR6sOuujrqcFj\r\n7qRt87F0PmcReSJuzXh4eksjdUbUP3w15WvanbUHKaF4IpAkRN68ORUjOTWH\r\nDf0anDHJcTdpStmZA2muU6KWYccQaU0PH4GGgXrXEkWZYKfQSrAJ79BWtSMl\r\nF2H6nP4KfQ5+mdmen/ZSg9rLqRLbXav5onM66tb0d+0Rg6pQ5O763ED796SP\r\nLjYH/q/2ikLgYoznYh9SijKvaF+Zdu4oQNWcgyqYpmgisU4EBZDfT6moPaHA\r\nWk5kSguFD2eGiyMktkuZTRCzSUFranTD9bzzUumCsXckLH+h1O4UmUFtCfRk\r\nmZCl3r+QmdzO409WBCRCcs4iBEZ+ilkD4EvGE6bBiTQK1pLWrpyKb+BHJ34a\r\nUjDEUBwFo78tYBtDEckK0+bgTFhgmfT3V/F/qhKwlOTk/NUsm1RLT2yT05RD\r\nEzk6azvtgaXigihtNvBtiniDxhDbpKxO+ck=\r\n=c1dF\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"mok0230","email":"mok0230@protonmail.com"},"directories":{},"maintainers":[{"name":"frangio","email":"frangio.1@gmail.com"},{"name":"spalladino","email":"spalladino@gmail.com"},{"name":"ernestognw","email":"ernesto@openzeppelin.com"},{"name":"martinverzilli","email":"martin.verzilli@gmail.com"},{"name":"mok0230","email":"mok0230@protonmail.com"},{"name":"tirumerla","email":"tirumerla@gmail.com"},{"name":"dylkil","email":"dylankilkenny95@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/defender-admin-client_1.21.2_1652123106066_0.9002475624049184"},"_hasShrinkwrap":false,"deprecated":"defender-admin-client is deprecated, please install @openzeppelin/defender-admin-client"},"1.21.3":{"name":"defender-admin-client","version":"1.21.3","description":"Defender Admin acts as an interface to manage your smart contract project through one or more secure multi-signature contracts. Defender Admin holds no control at all over your system, which is fully controlled by the keys of the signers.","main":"./lib/index.js","types":"./lib/index.d.ts","scripts":{"build":"rm -rf lib && tsc","test":"yarn test:unit","test:unit":"jest --verbose --passWithNoTests","watch":"tsc -w","prepare":"yarn build"},"author":{"name":"Santiago Palladino","email":"santiago@openzeppelin.com"},"license":"MIT","dependencies":{"axios":"^0.21.2","defender-base-client":"1.21.3","lodash":"^4.17.19","node-fetch":"^2.6.0"},"gitHead":"68cfe771c487cac57fc9bcc742d92c2d4fd16904","_id":"defender-admin-client@1.21.3","_nodeVersion":"12.22.9","_npmVersion":"lerna/3.22.1/node@v12.22.9+x64 (darwin)","dist":{"integrity":"sha512-qj5BsDMiV92RPRXtH+MYoaIJYkQtnSTe6irao3DMQR/Gd0tpy2eKX6XLPLlYgw3Quujq4fQpgAS3Y1Ob8VDtew==","shasum":"ce2cd5053ab92c2e4f1e6087d2b46b81b8d895ea","tarball":"https://registry.npmjs.org/defender-admin-client/-/defender-admin-client-1.21.3.tgz","fileCount":21,"unpackedSize":107863,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCAg5XlAAas8gF6VYEkYd7jb8ywZ7uFBZmj51821ten/AIgDCZdL+Zgx8dNxtl54SCsx/H5dR6oPPIZ9iyJ8Iy76OM="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJietLrACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqfeA//WK70EgFPizSxgw6NZoQDOOuyISiGT3tSc85HnulCZ/MT8azS\r\nsT7ZuH0G5KESwwYva2RCvpJlB+MhNk9/Al4+UZKO0YHScO7ftvjbba6jqflr\r\nI3RcCM8/nsb2vFQwRcNoMLZ8tL5dbK3NSxQVIqCnAGXL+BGL2Ak6+N+lsUO0\r\nHnloWUZb244M/cXi4yRapT1KGuZWap21Oh1Wlaz1XMaO7DFBBKNqyxsQfviZ\r\ndoNSNcD5OPzuemX4TutEifxNbebmIpAqX/UNGI7EhmtcgC8x7hsohZy+2zEh\r\n52KMZQCxX+6M65XIyOrnqAv8A+7Mn/gjqDk439SNDFHlDeTDTH11RJWpRUCG\r\n0c1YBxDxBmIqDhNzRILfvnG3qGGfENyghcVHqZzGPmIMiuu1QGKPdDnwQHUR\r\nCx2usERi5R4BrX03Y7y7aHSl3fMkyLJWjtkxqW+AeKV0qz11d+LZmtyITryN\r\nM2YKnwFbymqfRIA4x5luLknv8rgbY+v2gnTo3yAynik8wLSv2+tuyFd69dvz\r\nO9LgAiJ4eZHH/stOGGIPdlzyaSJHNAbgSrtQZ+33jK7wgva2rI05QvlYqDH4\r\n4rHXcg6jH73EvIh8jQ+QUv0V7LFAMvjNWtTtc0hwHBGCXuOhGus/eQqForIl\r\n9hwrgDPtnYr580qZa7f8iTX+w6A1i53V7uw=\r\n=+gti\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"ernestognw","email":"ernesto@openzeppelin.com"},"directories":{},"maintainers":[{"name":"frangio","email":"frangio.1@gmail.com"},{"name":"spalladino","email":"spalladino@gmail.com"},{"name":"ernestognw","email":"ernesto@openzeppelin.com"},{"name":"martinverzilli","email":"martin.verzilli@gmail.com"},{"name":"mok0230","email":"mok0230@protonmail.com"},{"name":"tirumerla","email":"tirumerla@gmail.com"},{"name":"dylkil","email":"dylankilkenny95@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/defender-admin-client_1.21.3_1652216554843_0.25875038063455147"},"_hasShrinkwrap":false,"deprecated":"defender-admin-client is deprecated, please install @openzeppelin/defender-admin-client"},"1.23.0":{"name":"defender-admin-client","version":"1.23.0","description":"Defender Admin acts as an interface to manage your smart contract project through one or more secure multi-signature contracts. Defender Admin holds no control at all over your system, which is fully controlled by the keys of the signers.","main":"./lib/index.js","types":"./lib/index.d.ts","scripts":{"build":"rm -rf lib && tsc","test":"yarn test:unit","test:unit":"jest --verbose --passWithNoTests","watch":"tsc -w","prepare":"yarn build"},"author":{"name":"Santiago Palladino","email":"santiago@openzeppelin.com"},"license":"MIT","dependencies":{"axios":"^0.21.2","defender-base-client":"1.23.0","lodash":"^4.17.19","node-fetch":"^2.6.0"},"gitHead":"acba418b19bd605a696d3887800cfbefe7bf5a7b","_id":"defender-admin-client@1.23.0","_nodeVersion":"16.12.0","_npmVersion":"lerna/3.22.1/node@v16.12.0+x64 (darwin)","dist":{"integrity":"sha512-6yXdVNnPLbVMGEgxvpXE8xz6uxX/EXJdmHvFFaY+VhOFpQ5RTREgTeTBIWtjhGFypcoL6x7rZKNZCCFgHJQ/sg==","shasum":"8901c2190145948f57cbad0205ba10ad034eb699","tarball":"https://registry.npmjs.org/defender-admin-client/-/defender-admin-client-1.23.0.tgz","fileCount":21,"unpackedSize":108063,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGdUQfgGY6Skp5yiUbgdnetRdPxI4cOOP6a2Us7dJYNLAiEAgwHvjwBxaCb5aF0qsFOUjwLQonE6KiHnhJy5i21pmy4="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJimeEqACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqpWxAAoTMgvoKWCy+L10fOf5EaSu8ySrezBt6eqQ58y7H9lLhQz40U\r\n/LBlt8oAR6FR/TSXZ8GUVDhxfJmA0c8T86b0EkN4IaSvEtIa5m6BYSE6nQ6k\r\n1Kdx5vHT/EuPRHsYzgbSjdhhoiQ7CahXCWr0L6IAhafsLo1GMUVeBCMX0bJJ\r\n4RrxHq42RtcFQbNpDcinbieHes518kjCJ1Gfu047cIRbBulpCjq9Dx9RB2qg\r\n7nxvKWcA5fzdEz2DH7I/7GPs0/WEhNxcOQXlFLM8K4Dxc+ImZhGyVfwlBRr/\r\nghYVQOGFkY5woeAJkVGCjGGoJgXa9w9ya43ZmSIzEtzvNAtS1B1aEd6QIBU8\r\nYPZdfCJMwoXVAOl9FnNg71wVRnOLbOQkO5mXwxSrap1bsKaLZMjgAM/5+naC\r\njMYAe5sJ4a8dYOQNM/pz9BAGthWNxh/mBh/Ea7wHA/KcEC+/1YB9SSe9YLe5\r\nWmv5o378p0Zn8gFh/xlH7kklr2LhoqF+Ul+XFtZg/cDbRrmN88RXM/HrGoqQ\r\n6HETergmYaYdVC5e8uxo8C0pvAnQaiUom+JwmMhGDnIsm/ynTVZq19BjQqhI\r\npTkU68ApVB7OdP+3NPN2fVG8BKwa3CU+O7E//+uWv6o6Fzj6JoLPRBR9ww6X\r\nUtFaHj74VdIvXiDZAzn522gsPAB6jP9Swoc=\r\n=S5LR\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"dylkil","email":"dylankilkenny95@gmail.com"},"directories":{},"maintainers":[{"name":"frangio","email":"frangio.1@gmail.com"},{"name":"spalladino","email":"spalladino@gmail.com"},{"name":"ernestognw","email":"ernesto@openzeppelin.com"},{"name":"martinverzilli","email":"martin.verzilli@gmail.com"},{"name":"mok0230","email":"mok0230@protonmail.com"},{"name":"tirumerla","email":"tirumerla@gmail.com"},{"name":"dylkil","email":"dylankilkenny95@gmail.com"},{"name":"namis","email":"me@nami.sh"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/defender-admin-client_1.23.0_1654251818280_0.30489146294760716"},"_hasShrinkwrap":false,"deprecated":"defender-admin-client is deprecated, please install @openzeppelin/defender-admin-client"},"1.24.0":{"name":"defender-admin-client","version":"1.24.0","description":"Defender Admin acts as an interface to manage your smart contract project through one or more secure multi-signature contracts. Defender Admin holds no control at all over your system, which is fully controlled by the keys of the signers.","main":"./lib/index.js","types":"./lib/index.d.ts","scripts":{"build":"rm -rf lib && tsc","test":"yarn test:unit","test:unit":"jest --verbose --passWithNoTests","watch":"tsc -w","prepare":"yarn build"},"author":{"name":"Santiago Palladino","email":"santiago@openzeppelin.com"},"license":"MIT","dependencies":{"axios":"^0.21.2","defender-base-client":"1.24.0","lodash":"^4.17.19","node-fetch":"^2.6.0"},"gitHead":"6471d6bb3d265c9416aca1a5f88981821dff5ccb","_id":"defender-admin-client@1.24.0","_nodeVersion":"15.5.1","_npmVersion":"lerna/3.22.1/node@v15.5.1+x64 (darwin)","dist":{"integrity":"sha512-GPFj6h3usminVprHsDp/APVMcgpvct/ibDT6QsfSXtzv25FbTqb5CgseqlgT8sA4Pq/OibTmhLjp3GltowJ1lg==","shasum":"07efed3384754d0a61a6e1fd2c8615b9ad80162c","tarball":"https://registry.npmjs.org/defender-admin-client/-/defender-admin-client-1.24.0.tgz","fileCount":21,"unpackedSize":108125,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDRD1irmeiAtNLbxMBz6yFANf723hh3bDMrp3gj3CQH2AIgXcqVUqVHGEXWqtRKYShc79Ib+so8DaQyj6WLKS1VYJE="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiohiuACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrZ8RAAjfWVtSqGGDvdAUuhXFwE8YF7NOxfvV0v0T/iCM/QPkUA8nWk\r\nGCgK161WDXpv/tru/Yv8JToal9bUro+1Rq6g2g3arm8yQ94439wmyZR9FAC8\r\nZeVZXuniRpr2ynv7tiIfQ+VcYsLGLt9UU+drD7a2GO5Moc/a2PnNYZHqFbOR\r\nw79NkxVYkNoBnXZLG4xiWE/TofLNnjx9xe8MUefG5Dts2cFfVhxopuLfzLgo\r\nN34P6wkm5jnzKn5XqI2ptLAmEIg8eMI4F2OGlSEcZwq5up2YxW3l9sIY1hb2\r\nPZQ8SYwB23NNW4dpMLXtcIPT+xLtfQ78sj6t8cqSqlEMBbFS+9vK+P2xyj+V\r\ng0xgHMJixjPiYuBGAEhT3Bd0rIKKaWwx/pnRW2/gzMT0URQw7b9vilbHmwlc\r\n3ppbhttQ4AvNm2INZajO5FSPZF4Wd60lqVv1+7U5zWK7gtxrqqRkSKIvRiaS\r\nqlO4Ql6QSpVyuJ4Fd0o8yBUVWyFj3sy2TKGTYFwl8HCMdXsi2o+Wcbm95lSP\r\n4MnHR/1Ji/9VEyArFalLW1zWkGoRI+n+xFmEi4e3Uv35wWkcQ3nPOHNCjE31\r\nFYJq27mDdyCLDA3EGKExyPDV7QKKVheRXignMVyUldabOi9aKmf7g2Od8Ohm\r\nppQxFPTHZRhKhMKjtkGEXOEGNQr9vrR8ejs=\r\n=fl/b\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"dylkil","email":"dylankilkenny95@gmail.com"},"directories":{},"maintainers":[{"name":"frangio","email":"frangio.1@gmail.com"},{"name":"spalladino","email":"spalladino@gmail.com"},{"name":"ernestognw","email":"ernesto@openzeppelin.com"},{"name":"martinverzilli","email":"martin.verzilli@gmail.com"},{"name":"mok0230","email":"mok0230@protonmail.com"},{"name":"tirumerla","email":"tirumerla@gmail.com"},{"name":"dylkil","email":"dylankilkenny95@gmail.com"},{"name":"namis","email":"me@nami.sh"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/defender-admin-client_1.24.0_1654790318255_0.9530853904743151"},"_hasShrinkwrap":false,"deprecated":"defender-admin-client is deprecated, please install @openzeppelin/defender-admin-client"},"1.25.0":{"name":"defender-admin-client","version":"1.25.0","description":"Defender Admin acts as an interface to manage your smart contract project through one or more secure multi-signature contracts. Defender Admin holds no control at all over your system, which is fully controlled by the keys of the signers.","main":"./lib/index.js","types":"./lib/index.d.ts","scripts":{"build":"rm -rf lib && tsc","test":"yarn test:unit","test:unit":"jest --verbose --passWithNoTests","watch":"tsc -w","prepare":"yarn build"},"author":{"name":"Santiago Palladino","email":"santiago@openzeppelin.com"},"license":"MIT","dependencies":{"axios":"^0.21.2","defender-base-client":"1.25.0","lodash":"^4.17.19","node-fetch":"^2.6.0"},"gitHead":"032a1b9a4f0c0e143baaf96186b1c2b2069b9d2a","_id":"defender-admin-client@1.25.0","_nodeVersion":"12.22.12","_npmVersion":"lerna/3.22.1/node@v12.22.12+x64 (darwin)","dist":{"integrity":"sha512-XG8BJssvFmg0w53rXsqfQp2Pz+THPwN4J1oqUiNB8QvWXlTAL75A1xZxImm5DBKmwJ/5jwXEwkGOcaq4DFS2kA==","shasum":"bcc9841bebd24359adb0c999ecdf4d025f267962","tarball":"https://registry.npmjs.org/defender-admin-client/-/defender-admin-client-1.25.0.tgz","fileCount":21,"unpackedSize":108840,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBnnguXjlaYlxI6xN25jT3rv2PB6bkzlWroLNCpKEJdnAiBLxeMrMAdiHJ2aV/6N/hIUkj4jnV8mLttUYegcteMn7g=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJitM+xACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmoxuw/9EYEo59d9vGlwBeJEUu2NjUxh9nc+/dt8m/mNMJRyyF21PWOw\r\n4N95HyeHgOnf4F6UDvhO/WMH9DLqfKCmBBeNbIYTw5IJZBK3RJUUy4L1z66S\r\nYrZN6owtMK1JrUSt1JHCDq1VJJClQyga7LOeQ14dUhxZzbf8q5IgGnivXTaM\r\nbq35GGAMlXqYvOOs9t6BVXTYVgVB9jQgjgSDy95azQOvRyn9zwjA/I9qK/7p\r\nsCt4mTQRHrVUO2ACMPETUdasaFqhx+Qnwp6tvXFnTpkmcB4uKmbqMfeGldXC\r\nWdOSMFEVFSpky+yRmX7C04iV6BDjCTqNnM/yTVIln883gcYkh+NffGJTyqKL\r\n6WKF6VyVuhnSqwoXvuQLpoDuyof79OVRK1EwUjPHBlUPt6vIpPzwt8LKkJ50\r\ny9Gzn7IK/v67cusq4m418hGCYxUNTyXKHB0EnjpzQQVjNRNazErwc3Gp/WjH\r\nYqwMALOzM4oOklZVQK7dFBqP/ecFDHR6Cd3wdp2biAxfJ6nTq++BuA3ufGIx\r\nPqeaoEFlasrb0yOmDxWfMVk0VZtFzlDMruDpczvQuMuE7wIJl+eIfnHBjxR+\r\nzRphw087BiLknOnhooT0LvX8BAunb0avAsE2J0fs5wNbfYPTrLH32h9eRp2M\r\nxudR9/7eGhD99LMTw6Y1eNhxJHI1HDbaOa4=\r\n=Eznx\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"zeljkox","email":"zeljko89markovic@gmail.com"},"directories":{},"maintainers":[{"name":"zeljkox","email":"zeljko89markovic@gmail.com"},{"name":"frangio","email":"frangio.1@gmail.com"},{"name":"spalladino","email":"spalladino@gmail.com"},{"name":"ernestognw","email":"ernesto@openzeppelin.com"},{"name":"martinverzilli","email":"martin.verzilli@gmail.com"},{"name":"mok0230","email":"mok0230@protonmail.com"},{"name":"tirumerla","email":"tirumerla@gmail.com"},{"name":"dylkil","email":"dylankilkenny95@gmail.com"},{"name":"namis","email":"me@nami.sh"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/defender-admin-client_1.25.0_1656016816931_0.9330628448135247"},"_hasShrinkwrap":false,"deprecated":"defender-admin-client is deprecated, please install @openzeppelin/defender-admin-client"},"1.27.0":{"name":"defender-admin-client","version":"1.27.0","description":"Defender Admin acts as an interface to manage your smart contract project through one or more secure multi-signature contracts. Defender Admin holds no control at all over your system, which is fully controlled by the keys of the signers.","main":"./lib/index.js","types":"./lib/index.d.ts","scripts":{"build":"rm -rf lib && tsc","test":"yarn test:unit","test:unit":"jest --verbose --passWithNoTests","watch":"tsc -w","prepare":"yarn build"},"author":{"name":"Santiago Palladino","email":"santiago@openzeppelin.com"},"license":"MIT","dependencies":{"axios":"^0.21.2","defender-base-client":"^1.27.0","lodash":"^4.17.19","node-fetch":"^2.6.0"},"gitHead":"93d31e83399217cf90563afd09d8258f22c4c362","_id":"defender-admin-client@1.27.0","_nodeVersion":"16.2.0","_npmVersion":"lerna/3.22.1/node@v16.2.0+x64 (darwin)","dist":{"integrity":"sha512-vupA2rqFUvqfZByY1id0nHZEMKf/m82eTR/dqPPTBJN1QMcU3n/lQqjYp0zOpUTBPXCmfxnKei0S6aZPYDok7w==","shasum":"a084eebc34f48babd5bc388e6e124d4330b9d432","tarball":"https://registry.npmjs.org/defender-admin-client/-/defender-admin-client-1.27.0.tgz","fileCount":21,"unpackedSize":110746,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFwIfvKfJqXuT39goyUOz6G2b9c7OShBvvLStsBmdwHQAiAWfkc6nE+TIf4DngIHu56w+G1RUJndRa2Kz6VEoCmiZQ=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi6+71ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqRpg/9H4O2bHkYesGF+kSbEWrAZeXjEPhnfBAj7ct7zlkvesOR3BVV\r\nodOdy0rlgaXd5HNi+cjd2uuPlXc1O99ynkDYyu6P/2YjzpPMof0pSfO1+s9c\r\ns+7J4K5N6fsOY0wUjK37ZhHx+7uBE8YE+mHpcRSfCFMGgDfz/H7Yxpf06SoO\r\nj/QtBLod1ylULM6wm9AXoE9ad0zeIBKiI7aDaWecLAJDFJdNQpFoWUCZPs3Z\r\n5A8I+MoYpn0nU9snGfAdAihpvfH54js6XFHF41Y7kS3bhjWVvKvN0aKkIQlD\r\n4iX1cnspLqD7RW3jkrbcL0q/hQktQtM87hJkn15/tU2gvbmL/ZwT9QAQbTEX\r\nnC979gPHtaZS0v53sC59tIDnwv3rGxy3ovx06ISCswO/0DmyQL9gh6hF2djy\r\nSztJj1CAC1D8p20wcGHtnki/LVwIJoLApmogXFSjHu1TE6E5KVDzVpzet3Ek\r\n6uq4Vlb3fYeP2cR4GpoxmpJfoe4WiMrL+LS3NfKqUgPfoBQcmk82u/iSV7XM\r\ngMD/PlkBgdPvsBoA/vidlna62YoRI0Jwn18knJUldlG53f/gm/Q42hHUFnRU\r\n10hYchiyI6AzTa/GhKN2zrmqT/VjFhVQVkYrlQHAR6lKhOgq6W/FcxgQ3q++\r\nIek7i/Vc1JSxbuHdTcLsTdbaqUKmsu6J044=\r\n=/Q5l\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"martinverzilli","email":"martin.verzilli@gmail.com"},"directories":{},"maintainers":[{"name":"zeljkox","email":"zeljko89markovic@gmail.com"},{"name":"frangio","email":"frangio.1@gmail.com"},{"name":"spalladino","email":"spalladino@gmail.com"},{"name":"ernestognw","email":"ernesto@openzeppelin.com"},{"name":"bjmrq","email":"bmarquiscom@gmail.com"},{"name":"martinverzilli","email":"martin.verzilli@gmail.com"},{"name":"mok0230","email":"mok0230@protonmail.com"},{"name":"tirumerla","email":"tirumerla@gmail.com"},{"name":"dylkil","email":"dylankilkenny95@gmail.com"},{"name":"namis","email":"me@nami.sh"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/defender-admin-client_1.27.0_1659629301667_0.16270959925142714"},"_hasShrinkwrap":false,"deprecated":"defender-admin-client is deprecated, please install @openzeppelin/defender-admin-client"},"1.27.1":{"name":"defender-admin-client","version":"1.27.1","description":"Defender Admin acts as an interface to manage your smart contract project through one or more secure multi-signature contracts. Defender Admin holds no control at all over your system, which is fully controlled by the keys of the signers.","main":"./lib/index.js","types":"./lib/index.d.ts","scripts":{"build":"rm -rf lib && tsc","test":"yarn test:unit","test:unit":"jest --verbose --passWithNoTests","watch":"tsc -w","prepare":"yarn build"},"author":{"name":"Santiago Palladino","email":"santiago@openzeppelin.com"},"license":"MIT","dependencies":{"axios":"^0.21.2","defender-base-client":"1.27.1","lodash":"^4.17.19","node-fetch":"^2.6.0"},"gitHead":"7a0a162e52e04f6a635f7d862a34b95bfe591d9d","_id":"defender-admin-client@1.27.1","_nodeVersion":"12.22.9","_npmVersion":"lerna/3.22.1/node@v12.22.9+x64 (darwin)","_npmUser":{"name":"ernestognw","email":"ernesto@openzeppelin.com"},"dist":{"integrity":"sha512-uhZNu8XrY3L/vPgY6pET+AhfruuDnJcYxhJXCe9ByEFjllTOcSmp7ZZTwZp520hhQri8KamtySyHmeciaILygg==","shasum":"d6eec425b2272546d4826778ec6e0147bb5e9e2a","tarball":"https://registry.npmjs.org/defender-admin-client/-/defender-admin-client-1.27.1.tgz","fileCount":21,"unpackedSize":109148,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDw5mXU02VIazihnz7VLUl5IQQOOAInBcxXUJRuEIiFngIhAK0DFpn4EelMCYZ770WF+qAf8J/SiYao7LBBJWppy5Kd"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi7T9aACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpnLA//d9q9Lr65s5BmXXsfNVVCbFeUH1QcZolTlGT+J5GYljKnz0gH\r\nwSKWKGxxLgVa8JdEEjZoE7tz1qDwu2XN3qektn0w7/SsCkRcLa48X9mCmmEw\r\nEKenWxmXyLsU2HI5Vu+Lgtzq72j1V4rd9sdNn1ZyPaoCLOWQ4RRFzpyBPMNE\r\nDmQSg7u60FjvnEV6lIAKcURmKUcxQKRwaxBI7ccjTtRMhPhBe4Dreux6CPZ4\r\n88g1YYeDiz+4Wy+aqijejPCOwjTLwVk+IvVAhAjWKnuQfHayvWPLcsPuGGlA\r\n9EpZfH1izuI7YApa9exhxuIlN6eM4wIO6MpXigdWeF0FnaSWdC4ZLuxhG19A\r\nnLRi+2rF5y5aya9zyE8G0KB2uRWLw3ODfJB8eHoJZ5w8VWW1x94ykkaZz753\r\nM62W3mSs2o8LMwXPT7uv+097U4Y6OqpP3tJ+B3tppkW2qz4UrLoklEH2YDKZ\r\nTpqOgiYwvKhQtNftMFY9NpQu8qsqnsb5Rt+DdWIHmgjInw/CsSEiLs/6g3u0\r\nqn5RU/Bzzp7e92TbmIP7jzUmFRXdo2nfDFvw/k/93iNsrYz2XJyVKHUTq3z7\r\nk/rmVnTYO4usOWyop/d5Mx8QxVsbS+293qjg2GqU/UzJeWisz7AdLqH3DZG3\r\nEX/ovjYK6zYY/kIcCJXUafECTT3iJoKaKtM=\r\n=0Fna\r\n-----END PGP SIGNATURE-----\r\n"},"directories":{},"maintainers":[{"name":"zeljkox","email":"zeljko89markovic@gmail.com"},{"name":"frangio","email":"frangio.1@gmail.com"},{"name":"spalladino","email":"spalladino@gmail.com"},{"name":"ernestognw","email":"ernesto@openzeppelin.com"},{"name":"bjmrq","email":"bmarquiscom@gmail.com"},{"name":"martinverzilli","email":"martin.verzilli@gmail.com"},{"name":"mok0230","email":"mok0230@protonmail.com"},{"name":"tirumerla","email":"tirumerla@gmail.com"},{"name":"dylkil","email":"dylankilkenny95@gmail.com"},{"name":"namis","email":"me@nami.sh"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/defender-admin-client_1.27.1_1659715417943_0.9836372911893487"},"_hasShrinkwrap":false,"deprecated":"defender-admin-client is deprecated, please install @openzeppelin/defender-admin-client"},"1.28.0":{"name":"defender-admin-client","version":"1.28.0","description":"Defender Admin acts as an interface to manage your smart contract project through one or more secure multi-signature contracts. Defender Admin holds no control at all over your system, which is fully controlled by the keys of the signers.","main":"./lib/index.js","types":"./lib/index.d.ts","scripts":{"build":"rm -rf lib && tsc","test":"yarn test:unit","test:unit":"jest --verbose --passWithNoTests","watch":"tsc -w","prepare":"yarn build"},"author":{"name":"Santiago Palladino","email":"santiago@openzeppelin.com"},"license":"MIT","dependencies":{"axios":"^0.21.2","defender-base-client":"1.27.1","lodash":"^4.17.19","node-fetch":"^2.6.0"},"gitHead":"77fb5d796c3d19b06642f2d4626c25ca7054f749","_id":"defender-admin-client@1.28.0","_nodeVersion":"16.2.0","_npmVersion":"lerna/3.22.1/node@v16.2.0+x64 (darwin)","dist":{"integrity":"sha512-kzvuJhU4Q+F6kbhXRZ7zCCZd/uORonPQ6xaIC95wV7+l4d2EHfgjYKJ1xl521yXvpEpVxa1kr7jo4GHA2YBmhQ==","shasum":"9909f5dc392ed00995fd43b52a024db11d528858","tarball":"https://registry.npmjs.org/defender-admin-client/-/defender-admin-client-1.28.0.tgz","fileCount":21,"unpackedSize":113367,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICecsRHgkC+9EC1x37tZEeqdJKJCL0DEyPzPR1HMuaexAiEA0Ssz5briYho1X7Q1owrWAYfHeQpDx63lSrwIDagC2jU="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi+ieEACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrC1A/8DeahBTQiqjlaRT9tWQEvXIfUBQatR6ipVOHofj9aF7j7lfsM\r\nHMXPE3EfscUm1lKhl6w/XIRmlya38A0AyAuZIdBV6mVGfedG/FFsFZdvfPSe\r\nDyz+i1g+ssgk0ZIHSjuckjnL+Qq0SSUXoH4P4ZZMxeOWkMK77A56Ls5bAtVK\r\njjt67wFqB2I/xv6AbSzW0TxqnsDOiSyWuv6ifC40JX9MVfS3t4Q8uYbOe7Ve\r\nZWwc+RqhP3neJhgvMpAAcRg8xSCMdmf6u12cWmU08d8paPRN4DYmIWy8B3Lz\r\n255D7E8LJ67Xtf7ADGqQast0Qn0Yqktae1Ket/v8Wh7ogFNwAwXKpHQZ4aMT\r\nBUovNCCWT2PWZsUmzBrLbqP0VwB+H6+7rccO8/Tv3YvVwhw5OzGho7/OZeOy\r\nU7gzM12caFDlKH1pmcRJA43rm1zGyqlWSCQEGjVjrAzTmXFDRuPdNn377kOx\r\nRGhELcsgtuwlukVNilzaI4vJVd7oCShrD6KmZwC9VXsgSf74J7nRGn04hbcJ\r\nfSgFgus9fC5SjVQIYzT3l73Ynid9dPNCqzUpupNby/GZG4DhirDoxmrnpBX+\r\nY3X5aNLrJt1g55tu9GiRBYloV9sracwtDogIroI1PV3ADjilTHfSS4RGVgWx\r\ntVVD5yiWMdjlm07abxVzjhlga89c07V3e2c=\r\n=ivNP\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"martinverzilli","email":"martin.verzilli@gmail.com"},"directories":{},"maintainers":[{"name":"zeljkox","email":"zeljko89markovic@gmail.com"},{"name":"frangio","email":"frangio.1@gmail.com"},{"name":"spalladino","email":"spalladino@gmail.com"},{"name":"ernestognw","email":"ernesto@openzeppelin.com"},{"name":"bjmrq","email":"bmarquiscom@gmail.com"},{"name":"martinverzilli","email":"martin.verzilli@gmail.com"},{"name":"mok0230","email":"mok0230@protonmail.com"},{"name":"tirumerla","email":"tirumerla@gmail.com"},{"name":"dylkil","email":"dylankilkenny95@gmail.com"},{"name":"namis","email":"me@nami.sh"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/defender-admin-client_1.28.0_1660561283822_0.10318060661526385"},"_hasShrinkwrap":false,"deprecated":"defender-admin-client is deprecated, please install @openzeppelin/defender-admin-client"},"1.28.1":{"name":"defender-admin-client","version":"1.28.1","description":"Defender Admin acts as an interface to manage your smart contract project through one or more secure multi-signature contracts. Defender Admin holds no control at all over your system, which is fully controlled by the keys of the signers.","main":"./lib/index.js","types":"./lib/index.d.ts","scripts":{"build":"rm -rf lib && tsc","test":"yarn test:unit","test:unit":"jest --verbose --passWithNoTests","watch":"tsc -w","prepare":"yarn build"},"author":{"name":"Santiago Palladino","email":"santiago@openzeppelin.com"},"license":"MIT","dependencies":{"axios":"^0.21.2","defender-base-client":"1.28.1","lodash":"^4.17.19","node-fetch":"^2.6.0"},"gitHead":"7e6b07e0e69b9ca21ff55650002248a0f7b1aec4","_id":"defender-admin-client@1.28.1","_nodeVersion":"12.18.3","_npmVersion":"lerna/3.22.1/node@v12.18.3+x64 (linux)","dist":{"integrity":"sha512-Vkqiu520mNnvZom1qODIcJldgT0dw8gjgxBET7GmHztGIphMztuZaqG39/1eZcn0bzE/9vmgi36NzOijIxdpVQ==","shasum":"140934515da0004324146f40a5aeb935e7e8c727","tarball":"https://registry.npmjs.org/defender-admin-client/-/defender-admin-client-1.28.1.tgz","fileCount":21,"unpackedSize":112704,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEYBm2CnFbC90+1d2aRpYgR4DMWz4CC5y2lMCikAoB38AiBpJlNsetSMsYegMk2YGyCxhpNZ1ClwEkCPXn04sIs2iQ=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi/nUHACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmohfA/8CaVq37geqq/es5VedHsXv86HKMUx3a7V6azW1TlUgO/IKH/p\r\nBD0NCdkEBc2/Ed6jTTVBvg+Zvt8j/folj6QYnkiSL9f9BRnQEVCjy4ilRJL3\r\nPQ62HZr/aDEZU2NX1UAEHVdWgLkuU0lLvasM4rT+b2xas2rdbaEvWRuOw4XI\r\nhE0pyXUGeiwHgajZOoP2NIrayXuQsvVLlA/0LPoMRnaHRM7PEiYTGxuGMyOf\r\nL8PMm90iwCTFsbiH8P4WLn/nOsPPttQ1flIe3IXnZP+LqtFK7z+KkyRYPxmd\r\npFPjZgr+XaDtVldjiOMC3xq67VzM3UqyqvIvHIflhX+xVUdRKOlVC3KeN+jI\r\nM/vznFCxXPQZ/uVvw4fDgrEijHi2R0aK89gTWVqsCfy/xh0SRwG2UYgdu9vg\r\nJYzV94G7yvx9+nBHwMey3uT30x+GRt/txQRrA/GGMTtWPySbY3Tn4lmaOr47\r\nQuUKR8cAuxsGbMdOADwpjTgAWfeddubiZyLdA4YR9RAKXAXrYowdkFXfvcyn\r\nhJEjSN7yS6UuaaLkdQU69qT8/ijA1OlWKe3V6WYmhRlyDEL7rhwUNzaCNNHC\r\nZq1Geal9zLFXqOAfFRJccPYl9v8inH0V9Zc/nn3DLykUB7jjEddKRfRompaF\r\nW/cjXaVOEtSaUHZD+GnS7FuP87zRckBB9Lc=\r\n=e87d\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"spalladino","email":"spalladino@gmail.com"},"directories":{},"maintainers":[{"name":"zeljkox","email":"zeljko89markovic@gmail.com"},{"name":"frangio","email":"frangio.1@gmail.com"},{"name":"spalladino","email":"spalladino@gmail.com"},{"name":"ernestognw","email":"ernesto@openzeppelin.com"},{"name":"bjmrq","email":"bmarquiscom@gmail.com"},{"name":"martinverzilli","email":"martin.verzilli@gmail.com"},{"name":"mok0230","email":"mok0230@protonmail.com"},{"name":"tirumerla","email":"tirumerla@gmail.com"},{"name":"dylkil","email":"dylankilkenny95@gmail.com"},{"name":"namis","email":"me@nami.sh"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/defender-admin-client_1.28.1_1660843271011_0.5129050534952193"},"_hasShrinkwrap":false,"deprecated":"defender-admin-client is deprecated, please install @openzeppelin/defender-admin-client"},"1.29.0-rc.0":{"name":"defender-admin-client","version":"1.29.0-rc.0","description":"Defender Admin acts as an interface to manage your smart contract project through one or more secure multi-signature contracts. Defender Admin holds no control at all over your system, which is fully controlled by the keys of the signers.","main":"./lib/index.js","types":"./lib/index.d.ts","scripts":{"build":"rm -rf lib && tsc","test":"yarn test:unit","test:unit":"jest --verbose --passWithNoTests","watch":"tsc -w","prepare":"yarn build"},"author":{"name":"Santiago Palladino","email":"santiago@openzeppelin.com"},"license":"MIT","dependencies":{"axios":"^0.21.2","defender-base-client":"1.28.1","lodash":"^4.17.19","node-fetch":"^2.6.0"},"gitHead":"afe841f01ea914855a7e8a33ee1033c21114f381","readme":"# Defender Admin Client\n\nDefender Admin acts as an interface to manage your smart contract project through one or more secure multi-signature contracts. Defender Admin holds no control at all over your system, which is fully controlled by the keys of the signers.\n\nTo interact with your contracts, you create _proposals_ that need to be reviewed and approved by the other members of the multi-signature wallets. These proposals can be created directly in the Defender web application, or using this library. You can also rely on this library to add your contracts to the Defender Admin dashboard.\n\n## Install\n\n```bash\nnpm install defender-admin-client\n```\n\n```bash\nyarn add defender-admin-client\n```\n\n## Usage\n\nStart by creating a new _Team API Key_ in Defender, and granting it the capability to create new proposals. Use the newly created API key to initialize an instance of the Admin client.\n\n```js\nconst { AdminClient } = require('defender-admin-client');\nconst client = new AdminClient({ apiKey: API_KEY, apiSecret: API_SECRET });\n```\n\n### Action proposals\n\nTo create a `custom` action proposal, you need to provide the function interface (which you can extract from the contract's ABI), its inputs, and the multisig that will be used for approving it:\n\n```js\nawait client.createProposal({\n  contract: { address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E', network: 'rinkeby' }, // Target contract\n  title: 'Adjust fee to 10%', // Title of the proposal\n  description: 'Adjust the contract fee collected per action to 10%', // Description of the proposal\n  type: 'custom', // Use 'custom' for custom admin actions\n  functionInterface: { name: 'setFee', inputs: [{ type: 'uint256', name: 'fee' }] }, // Function ABI\n  functionInputs: ['10'], // Arguments to the function\n  via: '0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b', // Address to execute proposal\n  viaType: 'Gnosis Safe', // 'Gnosis Safe', 'Gnosis Multisig', or 'EOA'\n});\n```\n\n#### Issuing DELEGATECALLs\n\nWhen invoking a function via a Gnosis Safe, it's possible to call it via a `DELEGATECALL` instruction instead of a regular call. This has the effect of executing the code in the called contract _in the context of the multisig_, meaning any operations that affect storage will affect the multisig, and any calls to additional contracts will be executed as if the `msg.sender` were the multisig. To do this, add a `metadata` parameter with the value `{ operationType: 'delegateCall' }` to your `createProposal` call:\n\n```js\nawait client.createProposal({\n  // ... Include all parameters from the example above\n  via: '0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b', // Multisig address\n  viaType: 'Gnosis Safe', // Must be Gnosis Safe to handle delegate calls\n  metadata: { operationType: 'delegateCall' }, // Issue a delegatecall instead of a regular call\n});\n```\n\nNote that this can potentially brick your multisig, if the contract you delegatecall into accidentally modifies the multisig's storage, rendering it unusable. Make sure you understand the risks before issuing a delegatecall.\n\n### Upgrade proposals\n\nTo create an `upgrade` action proposal, just provide the proxy contract network and address, along with the new implementation address, and Defender will automatically resolve the rest:\n\n```js\nconst newImplementation = '0x3E5e9111Ae8eB78Fe1CC3bb8915d5D461F3Ef9A9';\nconst contract = { network: 'rinkeby', address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E' };\nawait client.proposeUpgrade({ newImplementation }, contract);\n```\n\nIf your proxies do not implement the [EIP1967 admin slot](https://eips.ethereum.org/EIPS/eip-1967#admin-address), you will need to provide either the [`ProxyAdmin` contract](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.0.0/contracts/proxy/transparent/ProxyAdmin.sol) or the Account with rights to execute the upgrade, as shown below.\n\n#### Explicit ProxyAdmin\n\n```js\nconst newImplementation = '0x3E5e9111Ae8eB78Fe1CC3bb8915d5D461F3Ef9A9';\nconst proxyAdmin = '0x2fC100f1BeA4ACCD5dA5e5ed725D763c90e8ca96';\nconst contract = { network: 'rinkeby', address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E' };\nawait client.proposeUpgrade({ newImplementation, proxyAdmin }, contract);\n```\n\n#### Explicit owner account\n\n```js\nconst newImplementation = '0x3E5e9111Ae8eB78Fe1CC3bb8915d5D461F3Ef9A9';\nconst via = '0xF608FA64c4fF8aDdbEd106E69f3459effb4bC3D1';\nconst viaType = 'Gnosis Safe'; // or 'Gnosis Multisig', or 'EOA'\nconst contract = { network: 'rinkeby', address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E' };\nawait client.proposeUpgrade({ newImplementation, via, viaType }, contract);\n```\n\n### Pause proposals\n\nTo create `pause` and `unpause` action proposals, you need to provide the contract network and address, as well as the multisig that will be used for approving it. Defender takes care of the rest:\n\n```js\nconst contract = { network: 'rinkeby', address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E' };\n\n// Create a pause proposal\nawait client.proposePause({ via: '0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b', viaType: 'Gnosis Safe' }, contract);\n\n// Create an unpause proposal\nawait client.proposeUnpause({ via: '0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b', viaType: 'Gnosis Safe' }, contract);\n```\n\nNote that for `pause` and `unpause` proposals to work, your contract ABI must include corresponding `pause()` and `unpause()` functions.\n\n### List proposals\n\nYou can list all proposals:\n\n```js\nconst proposals = await client.listProposals();\n```\n\nYou can filter your active proposals by `isActive` property present on each proposal in the list response.\n\n## Adding Contracts\n\nIf you create a new proposal for a Contract that has not yet been added to Defender Admin, it will be automatically added with an autogenerated name and an empty ABI. You can optionally control these values by providing values for them in the `contract` object of the proposal:\n\n```js\nconst contract = {\n  network: 'rinkeby',\n  address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E',\n  name: 'My contract', // Name of the contract if it is created along with this proposal\n  abi: '[...]', // ABI to set for this contract if it is created\n};\nawait client.proposeUpgrade({ newImplementation }, contract);\n```\n\nAlternatively, you can add any contract explicitly by using the `addContract` method, and setting network, address, name, natspec and ABI. The same method can be used to update the contract's name or ABI.\n\n```js\nawait client.addContract({\n  network: 'rinkeby',\n  address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E',\n  name: 'My contract',\n  abi: '[...]',\n  natSpec: '{devdoc:{...}, userdoc: {...}}'\n});\n```\n\nYou can also list all contracts in your Defender Admin dashboard via `listContracts`.\n\n## FAQ\n\n**Can I use this package in a browser?**\n\nThis package is not designed to be used in a browser environment. Using this package requires sensitive API KEYS that should not be exposed publicly.\n","readmeFilename":"README.md","_id":"defender-admin-client@1.29.0-rc.0","_nodeVersion":"12.18.3","_npmVersion":"lerna/3.22.1/node@v12.18.3+x64 (linux)","dist":{"integrity":"sha512-hkF2/+J8Nw9bdOiXxAb+4Pe4YOt/m4UTmUlvALOeY8H2T4wvYckC+eAweaw1SNzLhDhCMVYymJOFoi3hcIpzkA==","shasum":"1a28eb399adf9d66b8ffea620b20c8d8ba339e4d","tarball":"https://registry.npmjs.org/defender-admin-client/-/defender-admin-client-1.29.0-rc.0.tgz","fileCount":24,"unpackedSize":116043,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDduSeTGedn+oGW4z1F6PMb7FvxbrWYM8WbERey5qdudgIgTzVk6OEZrWMPIGC0Lp1yS2cahi5heGRQOhK2RtmftVE="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjCMeoACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoDDhAAj7tQUPYeeBtF+U1CvprkXm6FmHqlqI4klUuW1aVRFJNXqS/5\r\nQ9SvQgyOHt9O9m/6q7djIgrgJdJibC725YUoL/lq0heGd47/vLinBdBb4bbu\r\ni+8z/AnUcBgqQ7UnEx/ZONqZd8L8FE3BGks3+fSwwSdmBXJmVbkMALZglJUk\r\nFrCeucllndQ5GdA71nXXpOj5XIwFB7GPJ3MQxVfLhGPGRG8w++1poS7WOCSP\r\n80/OxHPiuPCTn2twaIt9rrFc9Y2mvtdJO0wQuEEjjTKa60BSUeEcoOzd7TMu\r\n4BEXoG3mZs/XSr0UyG2oRUiHVGELzcdIvWD7i4MsZZKdIksSYVaZKISR5qCE\r\nhiXiVTWXjO3srnP8BiMNJb9xxbUhOUrOjD5Y3XVo/AQ43AZiZzdih5ZVC9wv\r\nKGm3lMF2LtWSOwrvVn2Djixq1P8avx+en6cLDOC73WodMXp6psAOEqrAzOhl\r\nI8Teu2Ksgtm4j5lzUnavCbbIxsG+RVFUnu5aTsSXG3CmNVBQNnMVo/8PS0xA\r\nGZCNaFaMJ/GHCyCyuGm34GYM0xSaAzEh4KQ5+Zr+bKOCK6aJHYLiKt2hJULp\r\n8vj8OUfLfZtjUPzN3ckHb335TwTAjSbscnZQj/c2ehkNm0ORwDGuZiJnziKY\r\nDnc1PiEUtfOO6xTYzYcaXMw9w5Tf4jMoLh8=\r\n=IikG\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"spalladino","email":"spalladino@gmail.com"},"directories":{},"maintainers":[{"name":"zeljkox","email":"zeljko89markovic@gmail.com"},{"name":"frangio","email":"frangio.1@gmail.com"},{"name":"spalladino","email":"spalladino@gmail.com"},{"name":"ernestognw","email":"ernesto@openzeppelin.com"},{"name":"bjmrq","email":"bmarquiscom@gmail.com"},{"name":"martinverzilli","email":"martin.verzilli@gmail.com"},{"name":"mok0230","email":"mok0230@protonmail.com"},{"name":"tirumerla","email":"tirumerla@gmail.com"},{"name":"dylkil","email":"dylankilkenny95@gmail.com"},{"name":"namis","email":"me@nami.sh"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/defender-admin-client_1.29.0-rc.0_1661519784502_0.46373457148478336"},"_hasShrinkwrap":false,"deprecated":"defender-admin-client is deprecated, please install @openzeppelin/defender-admin-client"},"1.29.0-rc.1":{"name":"defender-admin-client","version":"1.29.0-rc.1","description":"Defender Admin acts as an interface to manage your smart contract project through one or more secure multi-signature contracts. Defender Admin holds no control at all over your system, which is fully controlled by the keys of the signers.","main":"./lib/index.js","types":"./lib/index.d.ts","scripts":{"build":"rm -rf lib && tsc","test":"yarn test:unit","test:unit":"jest --verbose --passWithNoTests","watch":"tsc -w","prepare":"yarn build"},"author":{"name":"Santiago Palladino","email":"santiago@openzeppelin.com"},"license":"MIT","dependencies":{"axios":"^0.21.2","defender-base-client":"1.28.1","lodash":"^4.17.19","node-fetch":"^2.6.0"},"gitHead":"01fab929c0e703a77c7f005d1bf12fab0e3d1d0a","readme":"# Defender Admin Client\n\nDefender Admin acts as an interface to manage your smart contract project through one or more secure multi-signature contracts. Defender Admin holds no control at all over your system, which is fully controlled by the keys of the signers.\n\nTo interact with your contracts, you create _proposals_ that need to be reviewed and approved by the other members of the multi-signature wallets. These proposals can be created directly in the Defender web application, or using this library. You can also rely on this library to add your contracts to the Defender Admin dashboard.\n\n## Install\n\n```bash\nnpm install defender-admin-client\n```\n\n```bash\nyarn add defender-admin-client\n```\n\n## Usage\n\nStart by creating a new _Team API Key_ in Defender, and granting it the capability to create new proposals. Use the newly created API key to initialize an instance of the Admin client.\n\n```js\nconst { AdminClient } = require('defender-admin-client');\nconst client = new AdminClient({ apiKey: API_KEY, apiSecret: API_SECRET });\n```\n\n### Action proposals\n\nTo create a `custom` action proposal, you need to provide the function interface (which you can extract from the contract's ABI), its inputs, and the multisig that will be used for approving it:\n\n```js\nawait client.createProposal({\n  contract: { address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E', network: 'rinkeby' }, // Target contract\n  title: 'Adjust fee to 10%', // Title of the proposal\n  description: 'Adjust the contract fee collected per action to 10%', // Description of the proposal\n  type: 'custom', // Use 'custom' for custom admin actions\n  functionInterface: { name: 'setFee', inputs: [{ type: 'uint256', name: 'fee' }] }, // Function ABI\n  functionInputs: ['10'], // Arguments to the function\n  via: '0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b', // Address to execute proposal\n  viaType: 'Gnosis Safe', // 'Gnosis Safe', 'Gnosis Multisig', or 'EOA'\n});\n```\n\n#### Issuing DELEGATECALLs\n\nWhen invoking a function via a Gnosis Safe, it's possible to call it via a `DELEGATECALL` instruction instead of a regular call. This has the effect of executing the code in the called contract _in the context of the multisig_, meaning any operations that affect storage will affect the multisig, and any calls to additional contracts will be executed as if the `msg.sender` were the multisig. To do this, add a `metadata` parameter with the value `{ operationType: 'delegateCall' }` to your `createProposal` call:\n\n```js\nawait client.createProposal({\n  // ... Include all parameters from the example above\n  via: '0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b', // Multisig address\n  viaType: 'Gnosis Safe', // Must be Gnosis Safe to handle delegate calls\n  metadata: { operationType: 'delegateCall' }, // Issue a delegatecall instead of a regular call\n});\n```\n\nNote that this can potentially brick your multisig, if the contract you delegatecall into accidentally modifies the multisig's storage, rendering it unusable. Make sure you understand the risks before issuing a delegatecall.\n\n### Upgrade proposals\n\nTo create an `upgrade` action proposal, just provide the proxy contract network and address, along with the new implementation address, and Defender will automatically resolve the rest:\n\n```js\nconst newImplementation = '0x3E5e9111Ae8eB78Fe1CC3bb8915d5D461F3Ef9A9';\nconst contract = { network: 'rinkeby', address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E' };\nawait client.proposeUpgrade({ newImplementation }, contract);\n```\n\nIf your proxies do not implement the [EIP1967 admin slot](https://eips.ethereum.org/EIPS/eip-1967#admin-address), you will need to provide either the [`ProxyAdmin` contract](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.0.0/contracts/proxy/transparent/ProxyAdmin.sol) or the Account with rights to execute the upgrade, as shown below.\n\n#### Explicit ProxyAdmin\n\n```js\nconst newImplementation = '0x3E5e9111Ae8eB78Fe1CC3bb8915d5D461F3Ef9A9';\nconst proxyAdmin = '0x2fC100f1BeA4ACCD5dA5e5ed725D763c90e8ca96';\nconst contract = { network: 'rinkeby', address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E' };\nawait client.proposeUpgrade({ newImplementation, proxyAdmin }, contract);\n```\n\n#### Explicit owner account\n\n```js\nconst newImplementation = '0x3E5e9111Ae8eB78Fe1CC3bb8915d5D461F3Ef9A9';\nconst via = '0xF608FA64c4fF8aDdbEd106E69f3459effb4bC3D1';\nconst viaType = 'Gnosis Safe'; // or 'Gnosis Multisig', or 'EOA'\nconst contract = { network: 'rinkeby', address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E' };\nawait client.proposeUpgrade({ newImplementation, via, viaType }, contract);\n```\n\n### Pause proposals\n\nTo create `pause` and `unpause` action proposals, you need to provide the contract network and address, as well as the multisig that will be used for approving it. Defender takes care of the rest:\n\n```js\nconst contract = { network: 'rinkeby', address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E' };\n\n// Create a pause proposal\nawait client.proposePause({ via: '0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b', viaType: 'Gnosis Safe' }, contract);\n\n// Create an unpause proposal\nawait client.proposeUnpause({ via: '0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b', viaType: 'Gnosis Safe' }, contract);\n```\n\nNote that for `pause` and `unpause` proposals to work, your contract ABI must include corresponding `pause()` and `unpause()` functions.\n\n### List proposals\n\nYou can list all proposals:\n\n```js\nconst proposals = await client.listProposals();\n```\n\nYou can filter your active proposals by `isActive` property present on each proposal in the list response.\n\n## Adding Contracts\n\nIf you create a new proposal for a Contract that has not yet been added to Defender Admin, it will be automatically added with an autogenerated name and an empty ABI. You can optionally control these values by providing values for them in the `contract` object of the proposal:\n\n```js\nconst contract = {\n  network: 'rinkeby',\n  address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E',\n  name: 'My contract', // Name of the contract if it is created along with this proposal\n  abi: '[...]', // ABI to set for this contract if it is created\n};\nawait client.proposeUpgrade({ newImplementation }, contract);\n```\n\nAlternatively, you can add any contract explicitly by using the `addContract` method, and setting network, address, name, natspec and ABI. The same method can be used to update the contract's name or ABI.\n\n```js\nawait client.addContract({\n  network: 'rinkeby',\n  address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E',\n  name: 'My contract',\n  abi: '[...]',\n  natSpec: '{devdoc:{...}, userdoc: {...}}'\n});\n```\n\nYou can also list all contracts in your Defender Admin dashboard via `listContracts`.\n\n## FAQ\n\n**Can I use this package in a browser?**\n\nThis package is not designed to be used in a browser environment. Using this package requires sensitive API KEYS that should not be exposed publicly.\n","readmeFilename":"README.md","_id":"defender-admin-client@1.29.0-rc.1","_nodeVersion":"12.22.12","_npmVersion":"lerna/3.22.1/node@v12.22.12+x64 (linux)","dist":{"integrity":"sha512-yHZ6GgKnM+zDBmVhFVe+c7m57z4LBpCvtkNxf98qfaFDfTp0mSZOB9LZeKVzh6gSr/ZhwVDODNXwt5ud3PVuyw==","shasum":"3ef47652ff224d5dae740d101b777c6cbbebfa10","tarball":"https://registry.npmjs.org/defender-admin-client/-/defender-admin-client-1.29.0-rc.1.tgz","fileCount":24,"unpackedSize":116498,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEhCx5DtqWdOoLd8DctpnCMmktlFVW51U3ZeEnXYo/DrAiBUq5W8gZSnLViXtJ5TTDEQbFx3XCtNgkyf/d5n26GVLA=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjCPwoACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqguA//VrEv481lqVXbwLGN+dJMW8ttLY55qrnEPLhptnj3qiSUSU/P\r\nnnRPcxaNuJg/Dd1/ywvRdToU/CwgVuRHiVmWDYBAx/oT6GzwEehkSHKQ8Bfn\r\nZKnftQyju0B67jGE/8eY9wE74YOgnmMTpz0ImCT3w5n72yWECMuvLKdK7wYk\r\n2ItuSSAwmOw7lPUxvtz62QcSQf6wwC1oZokMlKTktQD/c3kpS6cHlnuCGPw0\r\nrW0RFOCbQuCQq/bOHy55Xp7DKKNwUHVfsrzaCbgyi8VFtNQWVTKy0ON8pVoD\r\noIT6PmfRTbqrN4LYQsuTKk5NQUqOtM65JexKwvGiUqb1F+ikZoGXoo7tVTs6\r\nHvkNDY2rBAXJCe7u83jWpUdf/saQPB6cQ2f/FD7lwRmuz6HyPQETM6GRrI5n\r\nBwlfkV+5b+AEPdhxpLTbTiSn+eCvUXLxUZ9ioi4nY2qWg6Oj8ZSXySaRQNBa\r\n1Lvh5WJ0d7zZcDCHLHRq3XZN1xypUEUG9D+ucYc/EF49lMDR4ZCOaoS3S8nf\r\n+BnkjkeIUY1Pdqg6AjZ2+/d2i56/zZBMFoQrFVdbJJLy1uJGvbknFz5w/hi7\r\n8+RKww8820Lk6r1qCfDwpXqlcE+ebd6AoQ0YrYn80tpTg/Z/xZucz452iwFg\r\nxyZitu1VA+/N7Ez9p0ImqOHUdlP6SuD2O7o=\r\n=DCxa\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"spalladino","email":"spalladino@gmail.com"},"directories":{},"maintainers":[{"name":"zeljkox","email":"zeljko89markovic@gmail.com"},{"name":"frangio","email":"frangio.1@gmail.com"},{"name":"spalladino","email":"spalladino@gmail.com"},{"name":"ernestognw","email":"ernesto@openzeppelin.com"},{"name":"bjmrq","email":"bmarquiscom@gmail.com"},{"name":"martinverzilli","email":"martin.verzilli@gmail.com"},{"name":"mok0230","email":"mok0230@protonmail.com"},{"name":"tirumerla","email":"tirumerla@gmail.com"},{"name":"dylkil","email":"dylankilkenny95@gmail.com"},{"name":"namis","email":"me@nami.sh"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/defender-admin-client_1.29.0-rc.1_1661533223886_0.32897455241999385"},"_hasShrinkwrap":false,"deprecated":"defender-admin-client is deprecated, please install @openzeppelin/defender-admin-client"},"1.29.1":{"name":"defender-admin-client","version":"1.29.1","description":"Defender Admin acts as an interface to manage your smart contract project through one or more secure multi-signature contracts. Defender Admin holds no control at all over your system, which is fully controlled by the keys of the signers.","main":"./lib/index.js","types":"./lib/index.d.ts","scripts":{"build":"rm -rf lib && tsc","test":"yarn test:unit","test:unit":"jest --verbose --passWithNoTests","watch":"tsc -w","prepare":"yarn build"},"author":{"name":"Santiago Palladino","email":"santiago@openzeppelin.com"},"license":"MIT","dependencies":{"axios":"^0.21.2","defender-base-client":"1.28.1","lodash":"^4.17.19","node-fetch":"^2.6.0"},"gitHead":"fd26cc5f2c11f4076a7ae66a0abc889ae3c2091a","_id":"defender-admin-client@1.29.1","_nodeVersion":"12.22.12","_npmVersion":"lerna/3.22.1/node@v12.22.12+x64 (linux)","dist":{"integrity":"sha512-6VXo6gaNu6Bk/LOzUENICtTLAqFoiKT/zGVsAFyEzMqMp3m0HqRDiAdloswDXRlpJMOViHEnwKIoZxkHsKqN+Q==","shasum":"41625d829f765d706393c1477df19f820219a04c","tarball":"https://registry.npmjs.org/defender-admin-client/-/defender-admin-client-1.29.1.tgz","fileCount":24,"unpackedSize":116493,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCGESrvc9C42yHtutnbeo7LWgNdIyZ+wYcHYb6xfhPP4QIgO0o6TVTvGK2l1Sg50j2/wBnNeT8Jsg/Otkq9NbMrSrw="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjDRgjACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmr3lA//Uhc+TiwLr3Y4Bq83mPRtAO++VASR5+drDd1TzgFN2nErutys\r\nwVm0Gke/6D0F81Au6Qqdx0uj86RErpTPLa9+Wo2vZFkzxS0zDVSx63gr+qlu\r\nNL1/pe8+YRpLFRee7ZsyWa/CV0wJM07nd0DO99LNa+NO19wuXXMuxhwAYqNZ\r\nZ8nM7kHwnaKS9MZ5BXACkf0RYMH5/B/mZyCM9cZBtDxeBOFo+8WdbSD35N5j\r\nrctu9pZKwPMhk5h+k8x5OWzti6gVAca9rSBpyT9s6v1w/JgR9A9MzdrLmBU3\r\ncrFfwXhjoGm4PJTrK1DIuDPW0Jh7Z0PeDTWugwdlGOgdmY16egGHCNDwU4cD\r\nnEl4kchJJ0qopP6Zl+7ctaUJm2HLrzQP+dk5osslqR/Evz+p3l9CMLH8stsG\r\nePKfYUwqzozxB6/QqaNDt7KogQVCX2SbFNyW3oOmY03GhkzPV2ualNhH+LKF\r\n7+epQmkC3jO+ZQR5gnIW4io3STj/9ici4ZvF4M0bkR+67vcTvRMNVE0JvjPQ\r\nScGfWEZg2i5Tm5NntlnXaxff9WDKDrkRh07OxBmpz34ap6r0A3nUzUELa+eL\r\npFgfTpyHIMxfzNqQwBw4dGAhDBSH2IlFRjfCqoYhLeh6nBVRK2AJpS7NbokW\r\nCU7ELmKawwohiF68IgwSysix9y1Eo1jIUjA=\r\n=VE1K\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"spalladino","email":"spalladino@gmail.com"},"directories":{},"maintainers":[{"name":"zeljkox","email":"zeljko89markovic@gmail.com"},{"name":"frangio","email":"frangio.1@gmail.com"},{"name":"spalladino","email":"spalladino@gmail.com"},{"name":"ernestognw","email":"ernesto@openzeppelin.com"},{"name":"bjmrq","email":"bmarquiscom@gmail.com"},{"name":"martinverzilli","email":"martin.verzilli@gmail.com"},{"name":"mok0230","email":"mok0230@protonmail.com"},{"name":"tirumerla","email":"tirumerla@gmail.com"},{"name":"dylkil","email":"dylankilkenny95@gmail.com"},{"name":"namis","email":"me@nami.sh"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/defender-admin-client_1.29.1_1661802531446_0.03036812904732966"},"_hasShrinkwrap":false,"deprecated":"defender-admin-client is deprecated, please install @openzeppelin/defender-admin-client"},"1.30.0":{"name":"defender-admin-client","version":"1.30.0","description":"Defender Admin acts as an interface to manage your smart contract project through one or more secure multi-signature contracts. Defender Admin holds no control at all over your system, which is fully controlled by the keys of the signers.","main":"./lib/index.js","types":"./lib/index.d.ts","scripts":{"build":"rm -rf lib && tsc","test":"yarn test:unit","test:unit":"jest --verbose --passWithNoTests","watch":"tsc -w","prepare":"yarn build"},"author":{"name":"Santiago Palladino","email":"santiago@openzeppelin.com"},"license":"MIT","dependencies":{"axios":"^0.21.2","defender-base-client":"1.30.0","lodash":"^4.17.19","node-fetch":"^2.6.0"},"gitHead":"49099c0b756e028cc92af56bd068b23be6f49e66","_id":"defender-admin-client@1.30.0","_nodeVersion":"12.22.12","_npmVersion":"lerna/3.22.1/node@v12.22.12+x64 (darwin)","dist":{"integrity":"sha512-fLlxblOVN+ODyvTdlSeFagTNGlqblMVWziEaDoeGLwWS35e+T7ttC7Lc8hmqzSDLfh2/st2Bvfy3n0euZq1+RA==","shasum":"3e82af7258dfb626dda984fa87accb00b0a42085","tarball":"https://registry.npmjs.org/defender-admin-client/-/defender-admin-client-1.30.0.tgz","fileCount":24,"unpackedSize":116493,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDztubl83TyIYpgRNpWPpekSNeWD6T3BcXBINzRLcYeqQIgfpNxAt2j0T2ReBp5QriTu4l73leGGAN14tMBt/eerAg="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjF6ylACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqOTBAAnXeMUNS41Je/GoM5e8R6SR2fVbvsI2EwT+9hNMOzucB+EVTE\r\nROEohTIDQVjiQ7izV3OkKcx1wO+rvWeiTBNtRUoGZ1NulyKwEn6oQzkaOaS/\r\n486rsLBtPQR9FrpTZVFmR72TPlF0xkwhFc8dL5995dtIsvHfZH66WIWxZrT5\r\n+jjQKlwyGqGS8GSp9oiuFACcZSeAq5N/sLUZ/lubfpkVw0IoKcUO1q82iztz\r\nlPWXmoKKYTDKKUN+crfvJoHZ9PJDIBZZ9zvGZq5mdapTkr1wF0Uon9Whzx3z\r\nCK5Ww5RfgzCAs8Tdv8gA1vTdBDJB8DDUYjMkjPDYVdm+wzr9xUasiPYpJc6l\r\nTPatPJnysTQPv3jF4X50h7ukBBkRm9Ym2Rb97MNsQGB85AJOor5zRUiK8cg5\r\n8pMCqpPYmce/2eqm8lq/9ztKd87lI4Ktfb02UGYyJB7idACCvLShBSie3vDX\r\npoN+PgFYErVn69mUy5JgTSlaxqzrONDx78joo3VwTnEzrzQAWXIWrT0OWwA0\r\nEXRHgtcjk5InM+dqyLht3o+m79DT08xqCs/smkNEul+nSBwMMGlx6NUTkgKB\r\nrSijJFYTcjk76slvuG8k1EucAMUGIKxN1Avv0acR+Tx5QpnxfQ0RVADHD4Zs\r\nJci+ruxjqOwLFawo7S2W36jgofHSAGSucFQ=\r\n=HiGt\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"mok0230","email":"mok0230@protonmail.com"},"directories":{},"maintainers":[{"name":"zeljkox","email":"zeljko89markovic@gmail.com"},{"name":"frangio","email":"frangio.1@gmail.com"},{"name":"spalladino","email":"spalladino@gmail.com"},{"name":"ernestognw","email":"ernesto@openzeppelin.com"},{"name":"bjmrq","email":"bmarquiscom@gmail.com"},{"name":"martinverzilli","email":"martin.verzilli@gmail.com"},{"name":"mok0230","email":"mok0230@protonmail.com"},{"name":"tirumerla","email":"tirumerla@gmail.com"},{"name":"dylkil","email":"dylankilkenny95@gmail.com"},{"name":"namis","email":"me@nami.sh"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/defender-admin-client_1.30.0_1662495909038_0.4825396679150675"},"_hasShrinkwrap":false,"deprecated":"defender-admin-client is deprecated, please install @openzeppelin/defender-admin-client"},"1.31.0-rc.1":{"name":"defender-admin-client","version":"1.31.0-rc.1","description":"Defender Admin acts as an interface to manage your smart contract project through one or more secure multi-signature contracts. Defender Admin holds no control at all over your system, which is fully controlled by the keys of the signers.","main":"./lib/index.js","types":"./lib/index.d.ts","scripts":{"build":"rm -rf lib && tsc","test":"yarn test:unit","test:unit":"jest --verbose --passWithNoTests","watch":"tsc -w","prepare":"yarn build"},"author":{"name":"Santiago Palladino","email":"santiago@openzeppelin.com"},"license":"MIT","dependencies":{"axios":"^0.21.2","defender-base-client":"1.30.0","lodash":"^4.17.19","node-fetch":"^2.6.0"},"gitHead":"85602d264fd5e26e4638ee82a3f35ee14d1d86ba","readme":"# Defender Admin Client\n\nDefender Admin acts as an interface to manage your smart contract project through one or more secure multi-signature contracts. Defender Admin holds no control at all over your system, which is fully controlled by the keys of the signers.\n\nTo interact with your contracts, you create _proposals_ that need to be reviewed and approved by the other members of the multi-signature wallets. These proposals can be created directly in the Defender web application, or using this library. You can also rely on this library to add your contracts to the Defender Admin dashboard.\n\n## Install\n\n```bash\nnpm install defender-admin-client\n```\n\n```bash\nyarn add defender-admin-client\n```\n\n## Usage\n\nStart by creating a new _Team API Key_ in Defender, and granting it the capability to create new proposals. Use the newly created API key to initialize an instance of the Admin client.\n\n```js\nconst { AdminClient } = require('defender-admin-client');\nconst client = new AdminClient({ apiKey: API_KEY, apiSecret: API_SECRET });\n```\n\n### Action proposals\n\nTo create a `custom` action proposal, you need to provide the function interface (which you can extract from the contract's ABI), its inputs, and the multisig that will be used for approving it:\n\n```js\nawait client.createProposal({\n  contract: { address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E', network: 'rinkeby' }, // Target contract\n  title: 'Adjust fee to 10%', // Title of the proposal\n  description: 'Adjust the contract fee collected per action to 10%', // Description of the proposal\n  type: 'custom', // Use 'custom' for custom admin actions\n  functionInterface: { name: 'setFee', inputs: [{ type: 'uint256', name: 'fee' }] }, // Function ABI\n  functionInputs: ['10'], // Arguments to the function\n  via: '0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b', // Address to execute proposal\n  viaType: 'Gnosis Safe', // 'Gnosis Safe', 'Gnosis Multisig', or 'EOA'\n});\n```\n\n#### Issuing DELEGATECALLs\n\nWhen invoking a function via a Gnosis Safe, it's possible to call it via a `DELEGATECALL` instruction instead of a regular call. This has the effect of executing the code in the called contract _in the context of the multisig_, meaning any operations that affect storage will affect the multisig, and any calls to additional contracts will be executed as if the `msg.sender` were the multisig. To do this, add a `metadata` parameter with the value `{ operationType: 'delegateCall' }` to your `createProposal` call:\n\n```js\nawait client.createProposal({\n  // ... Include all parameters from the example above\n  via: '0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b', // Multisig address\n  viaType: 'Gnosis Safe', // Must be Gnosis Safe to handle delegate calls\n  metadata: { operationType: 'delegateCall' }, // Issue a delegatecall instead of a regular call\n});\n```\n\nNote that this can potentially brick your multisig, if the contract you delegatecall into accidentally modifies the multisig's storage, rendering it unusable. Make sure you understand the risks before issuing a delegatecall.\n\n### Upgrade proposals\n\nTo create an `upgrade` action proposal, just provide the proxy contract network and address, along with the new implementation address, and Defender will automatically resolve the rest:\n\n```js\nconst newImplementation = '0x3E5e9111Ae8eB78Fe1CC3bb8915d5D461F3Ef9A9';\nconst contract = { network: 'rinkeby', address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E' };\nawait client.proposeUpgrade({ newImplementation }, contract);\n```\n\nIf your proxies do not implement the [EIP1967 admin slot](https://eips.ethereum.org/EIPS/eip-1967#admin-address), you will need to provide either the [`ProxyAdmin` contract](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.0.0/contracts/proxy/transparent/ProxyAdmin.sol) or the Account with rights to execute the upgrade, as shown below.\n\n#### Explicit ProxyAdmin\n\n```js\nconst newImplementation = '0x3E5e9111Ae8eB78Fe1CC3bb8915d5D461F3Ef9A9';\nconst proxyAdmin = '0x2fC100f1BeA4ACCD5dA5e5ed725D763c90e8ca96';\nconst contract = { network: 'rinkeby', address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E' };\nawait client.proposeUpgrade({ newImplementation, proxyAdmin }, contract);\n```\n\n#### Explicit owner account\n\n```js\nconst newImplementation = '0x3E5e9111Ae8eB78Fe1CC3bb8915d5D461F3Ef9A9';\nconst via = '0xF608FA64c4fF8aDdbEd106E69f3459effb4bC3D1';\nconst viaType = 'Gnosis Safe'; // or 'Gnosis Multisig', or 'EOA'\nconst contract = { network: 'rinkeby', address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E' };\nawait client.proposeUpgrade({ newImplementation, via, viaType }, contract);\n```\n\n### Pause proposals\n\nTo create `pause` and `unpause` action proposals, you need to provide the contract network and address, as well as the multisig that will be used for approving it. Defender takes care of the rest:\n\n```js\nconst contract = { network: 'rinkeby', address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E' };\n\n// Create a pause proposal\nawait client.proposePause({ via: '0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b', viaType: 'Gnosis Safe' }, contract);\n\n// Create an unpause proposal\nawait client.proposeUnpause({ via: '0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b', viaType: 'Gnosis Safe' }, contract);\n```\n\nNote that for `pause` and `unpause` proposals to work, your contract ABI must include corresponding `pause()` and `unpause()` functions.\n\n### List proposals\n\nYou can list all proposals:\n\n```js\nconst proposals = await client.listProposals();\n```\n\nYou can filter your active proposals by `isActive` property present on each proposal in the list response.\n\n## Adding Contracts\n\nIf you create a new proposal for a Contract that has not yet been added to Defender Admin, it will be automatically added with an autogenerated name and an empty ABI. You can optionally control these values by providing values for them in the `contract` object of the proposal:\n\n```js\nconst contract = {\n  network: 'rinkeby',\n  address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E',\n  name: 'My contract', // Name of the contract if it is created along with this proposal\n  abi: '[...]', // ABI to set for this contract if it is created\n};\nawait client.proposeUpgrade({ newImplementation }, contract);\n```\n\nAlternatively, you can add any contract explicitly by using the `addContract` method, and setting network, address, name, natspec and ABI. The same method can be used to update the contract's name or ABI.\n\n```js\nawait client.addContract({\n  network: 'rinkeby',\n  address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E',\n  name: 'My contract',\n  abi: '[...]',\n  natSpec: '{devdoc:{...}, userdoc: {...}}'\n});\n```\n\nYou can also list all contracts in your Defender Admin dashboard via `listContracts`.\n\n## FAQ\n\n**Can I use this package in a browser?**\n\nThis package is not designed to be used in a browser environment. Using this package requires sensitive API KEYS that should not be exposed publicly.\n","readmeFilename":"README.md","_id":"defender-admin-client@1.31.0-rc.1","_nodeVersion":"12.22.12","_npmVersion":"lerna/3.22.1/node@v12.22.12+x64 (darwin)","dist":{"integrity":"sha512-c0f/GFuhA7fNHDvkj5FWzSBC9rFztz60Z1kti3CfRb5o4yJKHNWrd3uteTSTP/EysuIATIgPb50pOJnBdoHm2w==","shasum":"bf9ecac31aac2b519e86c6e8c239d2a908191476","tarball":"https://registry.npmjs.org/defender-admin-client/-/defender-admin-client-1.31.0-rc.1.tgz","fileCount":24,"unpackedSize":116780,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCGhE3rCJmESv8VefOLnQ0SmEY+hw//c8uibyQBO26EngIhAMPxde/oj+Q7ZqUQaU+A1OaWwoYMvvE0qcqisQA5TtKl"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjGRXOACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmorRxAAgDYXtBQnbZt95RbDH4vLFn9dQ3FoCn/XcztMeRMfqCT0J7Ot\r\nd4Q7sJKDeFszq13hXEa7GVOVSba2qUweWaGvYT+nv4cDW0mX89+Y3P97bv4o\r\ngtcChk9Iox0KW20lt5+vXkow0oR3Jixx2pNyRtWPCG3YL4ywHqM/11+3aT9T\r\nGIPMBgmqsODk/RJdVGmbjFoKuu4fYNbbuP3cMrTXsxKBQ24R80lH8ey1Fdv8\r\nutuMMT6Q87qs4XuoXEJGZWT8koRyubSd+AxQPwKr7s+O1d8O3uet10VPQqkJ\r\nl2Qpbie86pbMWM4fVNe+XE7a/1eYtKWWpB/9ZY//1DbxTdF9AaXcX1kkDxbk\r\nLxRF8Ib3W8FsEDxNrRSr4ezZLo5/NzX3W6j7vSEnuipsKOZZ+899w4HncHOJ\r\nAofuKNW2/FhlQHci6ontUIngRf4VynIdb2fFiMLnrHwiPKzUo70ZrdueZtA/\r\nmwm1YGPYgmKM1jq96tPv0876z4Gxlxj/beut2a7rUhb8VhYBNqYDAXf0v+zB\r\nvZmaWIYSZ4j67SXgMnbvStq36+dKVQ7i4cwfJpUYr9UhvqSDsykKvwxfuPMy\r\n+Jxcnr63/iFTOk5GnLcMSuqK2PlIYyFjXSJWQ08aUTuDdngoEiiNzd2AOvLv\r\nco7lpmvHYmntbuaef2AlDEHKaZkz9c6Ea8M=\r\n=ddqz\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"mok0230","email":"mok0230@protonmail.com"},"directories":{},"maintainers":[{"name":"zeljkox","email":"zeljko89markovic@gmail.com"},{"name":"frangio","email":"frangio.1@gmail.com"},{"name":"spalladino","email":"spalladino@gmail.com"},{"name":"ernestognw","email":"ernesto@openzeppelin.com"},{"name":"bjmrq","email":"bmarquiscom@gmail.com"},{"name":"martinverzilli","email":"martin.verzilli@gmail.com"},{"name":"mok0230","email":"mok0230@protonmail.com"},{"name":"tirumerla","email":"tirumerla@gmail.com"},{"name":"dylkil","email":"dylankilkenny95@gmail.com"},{"name":"namis","email":"me@nami.sh"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/defender-admin-client_1.31.0-rc.1_1662588366474_0.9454920117482786"},"_hasShrinkwrap":false,"deprecated":"defender-admin-client is deprecated, please install @openzeppelin/defender-admin-client"},"1.31.0-rc.2":{"name":"defender-admin-client","version":"1.31.0-rc.2","description":"Defender Admin acts as an interface to manage your smart contract project through one or more secure multi-signature contracts. Defender Admin holds no control at all over your system, which is fully controlled by the keys of the signers.","main":"./lib/index.js","types":"./lib/index.d.ts","scripts":{"build":"rm -rf lib && tsc","test":"yarn test:unit","test:unit":"jest --verbose --passWithNoTests","watch":"tsc -w","prepare":"yarn build"},"author":{"name":"Santiago Palladino","email":"santiago@openzeppelin.com"},"license":"MIT","dependencies":{"axios":"^0.21.2","defender-base-client":"1.30.0","lodash":"^4.17.19","node-fetch":"^2.6.0"},"gitHead":"e244687a0b14906e390075ac62e670226b837405","readme":"# Defender Admin Client\n\nDefender Admin acts as an interface to manage your smart contract project through one or more secure multi-signature contracts. Defender Admin holds no control at all over your system, which is fully controlled by the keys of the signers.\n\nTo interact with your contracts, you create _proposals_ that need to be reviewed and approved by the other members of the multi-signature wallets. These proposals can be created directly in the Defender web application, or using this library. You can also rely on this library to add your contracts to the Defender Admin dashboard.\n\n## Install\n\n```bash\nnpm install defender-admin-client\n```\n\n```bash\nyarn add defender-admin-client\n```\n\n## Usage\n\nStart by creating a new _Team API Key_ in Defender, and granting it the capability to create new proposals. Use the newly created API key to initialize an instance of the Admin client.\n\n```js\nconst { AdminClient } = require('defender-admin-client');\nconst client = new AdminClient({ apiKey: API_KEY, apiSecret: API_SECRET });\n```\n\n### Action proposals\n\nTo create a `custom` action proposal, you need to provide the function interface (which you can extract from the contract's ABI), its inputs, and the multisig that will be used for approving it:\n\n```js\nawait client.createProposal({\n  contract: { address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E', network: 'rinkeby' }, // Target contract\n  title: 'Adjust fee to 10%', // Title of the proposal\n  description: 'Adjust the contract fee collected per action to 10%', // Description of the proposal\n  type: 'custom', // Use 'custom' for custom admin actions\n  functionInterface: { name: 'setFee', inputs: [{ type: 'uint256', name: 'fee' }] }, // Function ABI\n  functionInputs: ['10'], // Arguments to the function\n  via: '0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b', // Address to execute proposal\n  viaType: 'Gnosis Safe', // 'Gnosis Safe', 'Gnosis Multisig', or 'EOA'\n});\n```\n\n#### Issuing DELEGATECALLs\n\nWhen invoking a function via a Gnosis Safe, it's possible to call it via a `DELEGATECALL` instruction instead of a regular call. This has the effect of executing the code in the called contract _in the context of the multisig_, meaning any operations that affect storage will affect the multisig, and any calls to additional contracts will be executed as if the `msg.sender` were the multisig. To do this, add a `metadata` parameter with the value `{ operationType: 'delegateCall' }` to your `createProposal` call:\n\n```js\nawait client.createProposal({\n  // ... Include all parameters from the example above\n  via: '0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b', // Multisig address\n  viaType: 'Gnosis Safe', // Must be Gnosis Safe to handle delegate calls\n  metadata: { operationType: 'delegateCall' }, // Issue a delegatecall instead of a regular call\n});\n```\n\nNote that this can potentially brick your multisig, if the contract you delegatecall into accidentally modifies the multisig's storage, rendering it unusable. Make sure you understand the risks before issuing a delegatecall.\n\n### Upgrade proposals\n\nTo create an `upgrade` action proposal, just provide the proxy contract network and address, along with the new implementation address, and Defender will automatically resolve the rest:\n\n```js\nconst newImplementation = '0x3E5e9111Ae8eB78Fe1CC3bb8915d5D461F3Ef9A9';\nconst contract = { network: 'rinkeby', address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E' };\nawait client.proposeUpgrade({ newImplementation }, contract);\n```\n\nIf your proxies do not implement the [EIP1967 admin slot](https://eips.ethereum.org/EIPS/eip-1967#admin-address), you will need to provide either the [`ProxyAdmin` contract](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.0.0/contracts/proxy/transparent/ProxyAdmin.sol) or the Account with rights to execute the upgrade, as shown below.\n\n#### Explicit ProxyAdmin\n\n```js\nconst newImplementation = '0x3E5e9111Ae8eB78Fe1CC3bb8915d5D461F3Ef9A9';\nconst proxyAdmin = '0x2fC100f1BeA4ACCD5dA5e5ed725D763c90e8ca96';\nconst contract = { network: 'rinkeby', address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E' };\nawait client.proposeUpgrade({ newImplementation, proxyAdmin }, contract);\n```\n\n#### Explicit owner account\n\n```js\nconst newImplementation = '0x3E5e9111Ae8eB78Fe1CC3bb8915d5D461F3Ef9A9';\nconst via = '0xF608FA64c4fF8aDdbEd106E69f3459effb4bC3D1';\nconst viaType = 'Gnosis Safe'; // or 'Gnosis Multisig', or 'EOA'\nconst contract = { network: 'rinkeby', address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E' };\nawait client.proposeUpgrade({ newImplementation, via, viaType }, contract);\n```\n\n### Pause proposals\n\nTo create `pause` and `unpause` action proposals, you need to provide the contract network and address, as well as the multisig that will be used for approving it. Defender takes care of the rest:\n\n```js\nconst contract = { network: 'rinkeby', address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E' };\n\n// Create a pause proposal\nawait client.proposePause({ via: '0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b', viaType: 'Gnosis Safe' }, contract);\n\n// Create an unpause proposal\nawait client.proposeUnpause({ via: '0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b', viaType: 'Gnosis Safe' }, contract);\n```\n\nNote that for `pause` and `unpause` proposals to work, your contract ABI must include corresponding `pause()` and `unpause()` functions.\n\n### List proposals\n\nYou can list all proposals:\n\n```js\nconst proposals = await client.listProposals();\n```\n\nYou can filter your active proposals by `isActive` property present on each proposal in the list response.\n\n## Adding Contracts\n\nIf you create a new proposal for a Contract that has not yet been added to Defender Admin, it will be automatically added with an autogenerated name and an empty ABI. You can optionally control these values by providing values for them in the `contract` object of the proposal:\n\n```js\nconst contract = {\n  network: 'rinkeby',\n  address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E',\n  name: 'My contract', // Name of the contract if it is created along with this proposal\n  abi: '[...]', // ABI to set for this contract if it is created\n};\nawait client.proposeUpgrade({ newImplementation }, contract);\n```\n\nAlternatively, you can add any contract explicitly by using the `addContract` method, and setting network, address, name, natspec and ABI. The same method can be used to update the contract's name or ABI.\n\n```js\nawait client.addContract({\n  network: 'rinkeby',\n  address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E',\n  name: 'My contract',\n  abi: '[...]',\n  natSpec: '{devdoc:{...}, userdoc: {...}}'\n});\n```\n\nYou can also list all contracts in your Defender Admin dashboard via `listContracts`.\n\n## FAQ\n\n**Can I use this package in a browser?**\n\nThis package is not designed to be used in a browser environment. Using this package requires sensitive API KEYS that should not be exposed publicly.\n","readmeFilename":"README.md","_id":"defender-admin-client@1.31.0-rc.2","_nodeVersion":"12.22.7","_npmVersion":"lerna/3.22.1/node@v12.22.7+x64 (darwin)","dist":{"integrity":"sha512-CPk8LQLuu9GH4WnqOwZvU76V1et1ZN9hO1xQj7NE5op5OE+TC/0KDkqqTgAie0idKNsksqp6iY44oJNFNu576A==","shasum":"71315fd9c4925e0839c21db8fc7eccc7779193e6","tarball":"https://registry.npmjs.org/defender-admin-client/-/defender-admin-client-1.31.0-rc.2.tgz","fileCount":24,"unpackedSize":116780,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD2UtInckBsZqNfDUy+SLqghDN1YDSsK2OzGHhFdC0KHAIhAIzdFtzJP1tbsi18T82pS69HoiR37nHnNVk5sBRXsy5N"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjGxp1ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmogJw//fdHwZYO63rJEuhh+53WH+NpDQHi6lVAQP6Q4fYoKfAdWnIIR\r\nmFrbEfTVRwBNkqRGVOm8GKO47p2WT2DDIfb9xLxEifhJ1VswsQIyT5rjXshY\r\n940Wwp8MPLi3CzHJzV3hEqsqx/xjahgBplWF1j6mxPGZmFeuzTQruaI4xw+E\r\n27m8PPRMZAcFitsXHvRez8cdtX53f9z4J4fprYSm4qESY8ZBKuy7rTB0Vfap\r\notmfoOOjYWHetFw1b1R23AEJdCu5R1BKxz2LU6BooZATT+QN/m/nl3e0h67v\r\noXnjNnImktH5eeaQrnh1K/nOTOlX+AUylBBK6uqrhcWZGAmiqvAwociOKmLS\r\njozCd0AqKSY3cFhgOCUaVI6fXLN54c2lC+u2hI9kv/4RhTXSPL2tf3oP91xE\r\nmUIK+L3heXMUWRt+1QjWOh9x/lV5TcxCGKvN5rU8YYyiNeZJaqVng+owVaul\r\nzbx5coISDXM4e+ZAEPm84A3BXzYgjfFufxr1/tcBZKojgpqnSkznfI1kU7WJ\r\nWKDQwL54MKQwm70KImuQDWC2F+g3CL8p3r8s3rCAXlCLsqtpuuyRicnW2t3y\r\nixP2660RUOT8MErcB++cQouxmXrPgqU8HK5BZz1NZsr5y6lDulBmPi4CEe+S\r\nAe3uIKfJWALPE5PsIYZBYZ+zoHDhUJOTevQ=\r\n=+Ujo\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"namis","email":"me@nami.sh"},"directories":{},"maintainers":[{"name":"zeljkox","email":"zeljko89markovic@gmail.com"},{"name":"frangio","email":"frangio.1@gmail.com"},{"name":"spalladino","email":"spalladino@gmail.com"},{"name":"ernestognw","email":"ernesto@openzeppelin.com"},{"name":"bjmrq","email":"bmarquiscom@gmail.com"},{"name":"martinverzilli","email":"martin.verzilli@gmail.com"},{"name":"mok0230","email":"mok0230@protonmail.com"},{"name":"tirumerla","email":"tirumerla@gmail.com"},{"name":"dylkil","email":"dylankilkenny95@gmail.com"},{"name":"namis","email":"me@nami.sh"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/defender-admin-client_1.31.0-rc.2_1662720629295_0.49443937861047593"},"_hasShrinkwrap":false,"deprecated":"defender-admin-client is deprecated, please install @openzeppelin/defender-admin-client"},"1.31.0-rc.3":{"name":"defender-admin-client","version":"1.31.0-rc.3","description":"Defender Admin acts as an interface to manage your smart contract project through one or more secure multi-signature contracts. Defender Admin holds no control at all over your system, which is fully controlled by the keys of the signers.","main":"./lib/index.js","types":"./lib/index.d.ts","scripts":{"build":"rm -rf lib && tsc","test":"yarn test:unit","test:unit":"jest --verbose --passWithNoTests","watch":"tsc -w","prepare":"yarn build"},"author":{"name":"Santiago Palladino","email":"santiago@openzeppelin.com"},"license":"MIT","dependencies":{"axios":"^0.21.2","defender-base-client":"1.30.0","lodash":"^4.17.19","node-fetch":"^2.6.0"},"gitHead":"05e49c07cfdec351d68150ad02196a5cdc7158ea","readme":"# Defender Admin Client\n\nDefender Admin acts as an interface to manage your smart contract project through one or more secure multi-signature contracts. Defender Admin holds no control at all over your system, which is fully controlled by the keys of the signers.\n\nTo interact with your contracts, you create _proposals_ that need to be reviewed and approved by the other members of the multi-signature wallets. These proposals can be created directly in the Defender web application, or using this library. You can also rely on this library to add your contracts to the Defender Admin dashboard.\n\n## Install\n\n```bash\nnpm install defender-admin-client\n```\n\n```bash\nyarn add defender-admin-client\n```\n\n## Usage\n\nStart by creating a new _Team API Key_ in Defender, and granting it the capability to create new proposals. Use the newly created API key to initialize an instance of the Admin client.\n\n```js\nconst { AdminClient } = require('defender-admin-client');\nconst client = new AdminClient({ apiKey: API_KEY, apiSecret: API_SECRET });\n```\n\n### Action proposals\n\nTo create a `custom` action proposal, you need to provide the function interface (which you can extract from the contract's ABI), its inputs, and the multisig that will be used for approving it:\n\n```js\nawait client.createProposal({\n  contract: { address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E', network: 'rinkeby' }, // Target contract\n  title: 'Adjust fee to 10%', // Title of the proposal\n  description: 'Adjust the contract fee collected per action to 10%', // Description of the proposal\n  type: 'custom', // Use 'custom' for custom admin actions\n  functionInterface: { name: 'setFee', inputs: [{ type: 'uint256', name: 'fee' }] }, // Function ABI\n  functionInputs: ['10'], // Arguments to the function\n  via: '0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b', // Address to execute proposal\n  viaType: 'Gnosis Safe', // 'Gnosis Safe', 'Gnosis Multisig', or 'EOA'\n});\n```\n\n#### Issuing DELEGATECALLs\n\nWhen invoking a function via a Gnosis Safe, it's possible to call it via a `DELEGATECALL` instruction instead of a regular call. This has the effect of executing the code in the called contract _in the context of the multisig_, meaning any operations that affect storage will affect the multisig, and any calls to additional contracts will be executed as if the `msg.sender` were the multisig. To do this, add a `metadata` parameter with the value `{ operationType: 'delegateCall' }` to your `createProposal` call:\n\n```js\nawait client.createProposal({\n  // ... Include all parameters from the example above\n  via: '0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b', // Multisig address\n  viaType: 'Gnosis Safe', // Must be Gnosis Safe to handle delegate calls\n  metadata: { operationType: 'delegateCall' }, // Issue a delegatecall instead of a regular call\n});\n```\n\nNote that this can potentially brick your multisig, if the contract you delegatecall into accidentally modifies the multisig's storage, rendering it unusable. Make sure you understand the risks before issuing a delegatecall.\n\n### Upgrade proposals\n\nTo create an `upgrade` action proposal, just provide the proxy contract network and address, along with the new implementation address, and Defender will automatically resolve the rest:\n\n```js\nconst newImplementation = '0x3E5e9111Ae8eB78Fe1CC3bb8915d5D461F3Ef9A9';\nconst contract = { network: 'rinkeby', address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E' };\nawait client.proposeUpgrade({ newImplementation }, contract);\n```\n\nIf your proxies do not implement the [EIP1967 admin slot](https://eips.ethereum.org/EIPS/eip-1967#admin-address), you will need to provide either the [`ProxyAdmin` contract](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.0.0/contracts/proxy/transparent/ProxyAdmin.sol) or the Account with rights to execute the upgrade, as shown below.\n\n#### Explicit ProxyAdmin\n\n```js\nconst newImplementation = '0x3E5e9111Ae8eB78Fe1CC3bb8915d5D461F3Ef9A9';\nconst proxyAdmin = '0x2fC100f1BeA4ACCD5dA5e5ed725D763c90e8ca96';\nconst contract = { network: 'rinkeby', address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E' };\nawait client.proposeUpgrade({ newImplementation, proxyAdmin }, contract);\n```\n\n#### Explicit owner account\n\n```js\nconst newImplementation = '0x3E5e9111Ae8eB78Fe1CC3bb8915d5D461F3Ef9A9';\nconst via = '0xF608FA64c4fF8aDdbEd106E69f3459effb4bC3D1';\nconst viaType = 'Gnosis Safe'; // or 'Gnosis Multisig', or 'EOA'\nconst contract = { network: 'rinkeby', address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E' };\nawait client.proposeUpgrade({ newImplementation, via, viaType }, contract);\n```\n\n### Pause proposals\n\nTo create `pause` and `unpause` action proposals, you need to provide the contract network and address, as well as the multisig that will be used for approving it. Defender takes care of the rest:\n\n```js\nconst contract = { network: 'rinkeby', address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E' };\n\n// Create a pause proposal\nawait client.proposePause({ via: '0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b', viaType: 'Gnosis Safe' }, contract);\n\n// Create an unpause proposal\nawait client.proposeUnpause({ via: '0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b', viaType: 'Gnosis Safe' }, contract);\n```\n\nNote that for `pause` and `unpause` proposals to work, your contract ABI must include corresponding `pause()` and `unpause()` functions.\n\n### List proposals\n\nYou can list all proposals:\n\n```js\nconst proposals = await client.listProposals();\n```\n\nYou can filter your active proposals by `isActive` property present on each proposal in the list response. By default, only unarchived proposals are returned, but you can override this by adding an `includeArchived: true` option in the call.\n\n### Archiving proposals\n\nYou can archive or unarchive a proposal given its contract and proposal ids:\n\n```js\nawait client.archiveProposal(contractId, proposalId);\nawait client.unarchiveProposal(contractId, proposalId);\n```\n\n## Adding Contracts\n\nIf you create a new proposal for a Contract that has not yet been added to Defender Admin, it will be automatically added with an autogenerated name and an empty ABI. You can optionally control these values by providing values for them in the `contract` object of the proposal:\n\n```js\nconst contract = {\n  network: 'rinkeby',\n  address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E',\n  name: 'My contract', // Name of the contract if it is created along with this proposal\n  abi: '[...]', // ABI to set for this contract if it is created\n};\nawait client.proposeUpgrade({ newImplementation }, contract);\n```\n\nAlternatively, you can add any contract explicitly by using the `addContract` method, and setting network, address, name, natspec and ABI. The same method can be used to update the contract's name or ABI.\n\n```js\nawait client.addContract({\n  network: 'rinkeby',\n  address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E',\n  name: 'My contract',\n  abi: '[...]',\n  natSpec: '{devdoc:{...}, userdoc: {...}}'\n});\n```\n\nYou can also list all contracts in your Defender Admin dashboard via `listContracts`.\n\n## FAQ\n\n**Can I use this package in a browser?**\n\nThis package is not designed to be used in a browser environment. Using this package requires sensitive API KEYS that should not be exposed publicly.\n","readmeFilename":"README.md","_id":"defender-admin-client@1.31.0-rc.3","_nodeVersion":"12.22.12","_npmVersion":"lerna/3.22.1/node@v12.22.12+x64 (linux)","_npmUser":{"name":"bjmrq","email":"bmarquiscom@gmail.com"},"dist":{"integrity":"sha512-GoKpr+QK7XyO+57bX12Pim5Y/2tQnrgQob00mR/szrErK23ndckda8b7CQ+ODLrJdqNm7RBRUsDsNg44fTx1Eg==","shasum":"1237f47237ca4c221ad60d98003cd76a276cd6cf","tarball":"https://registry.npmjs.org/defender-admin-client/-/defender-admin-client-1.31.0-rc.3.tgz","fileCount":24,"unpackedSize":118361,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGweq7aMP1Vd5SHJ20EXwpNvDoVcCHc+uQaKRZsWEeJ/AiBsJ8UEGiyneENWWq99T1M6sjjjh2FCAiRWn2dmNwd9SA=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjHyOSACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpN7w/9GBJVlZpO0X6BvOU1NFgQgMunhjruc78eP1d9T1aBVHMrRE3z\r\nOg0oCVhwy8kSXYQokjFndZgjl3ULukta2w3jVCMloVMFqKhurFbnBaOexFgf\r\nOUSUxPgwg3yjesDm6mTZyT5z8K/+1Wr1bORdimyfbP8Laf1e+4N4RU8qpqOP\r\ncypIuqugfRtCFjfs8itz1mtJo1Ww+geQ14UsAiJv/nHQH+n+VKR5et+trv7A\r\n4YzoKyGSc+0SIrJynTqk4MfvelzQqLpCNdqtGa037oOx4oByOoml6MdsaiBr\r\nmOuAL3rBnG0PIecwut5kDDONt7MjUZsnprmpJK6uwpQI9rLo3znu8T0XbLWf\r\nC/mZswFU/hX79Zv164vIcVsZS/6wpGxOiPtiHYbpCE84WlhrrpHCeyW2vZGp\r\nyuP3Snn/YNgsBwe6WEfmorgQp2m8NqwAYsiEGy6wgrfhQF/PPnBpQtykIX//\r\n1w8oxknDgPQmYa7kZGmVTHODaj5eXGSTWJDpH8Ar9Cfi4E6SWzi5YIm82ZMB\r\noJRLVbbNCoOnoNXDsSjJwUTUD/U7Mz8UkyLUCXek6kR8ks2T4ic00NacU0TP\r\ndenp7eQvkunV3HNMu6wjomjxO6EoOug+rkRtVWKBEQUokeX56YigRaihG8ac\r\nnsenNc0cruhDhHmRJd0bzwirTKN3o/QtiEQ=\r\n=Y52W\r\n-----END PGP SIGNATURE-----\r\n"},"directories":{},"maintainers":[{"name":"zeljkox","email":"zeljko89markovic@gmail.com"},{"name":"frangio","email":"frangio.1@gmail.com"},{"name":"spalladino","email":"spalladino@gmail.com"},{"name":"ernestognw","email":"ernesto@openzeppelin.com"},{"name":"bjmrq","email":"bmarquiscom@gmail.com"},{"name":"martinverzilli","email":"martin.verzilli@gmail.com"},{"name":"mok0230","email":"mok0230@protonmail.com"},{"name":"tirumerla","email":"tirumerla@gmail.com"},{"name":"dylkil","email":"dylankilkenny95@gmail.com"},{"name":"namis","email":"me@nami.sh"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/defender-admin-client_1.31.0-rc.3_1662985106520_0.23213098889807382"},"_hasShrinkwrap":false,"deprecated":"defender-admin-client is deprecated, please install @openzeppelin/defender-admin-client"},"1.31.0":{"name":"defender-admin-client","version":"1.31.0","description":"Defender Admin acts as an interface to manage your smart contract project through one or more secure multi-signature contracts. Defender Admin holds no control at all over your system, which is fully controlled by the keys of the signers.","main":"./lib/index.js","types":"./lib/index.d.ts","scripts":{"build":"rm -rf lib && tsc","test":"yarn test:unit","test:unit":"jest --verbose --passWithNoTests","watch":"tsc -w","prepare":"yarn build"},"author":{"name":"Santiago Palladino","email":"santiago@openzeppelin.com"},"license":"MIT","dependencies":{"axios":"^0.21.2","defender-base-client":"1.30.0","lodash":"^4.17.19","node-fetch":"^2.6.0"},"gitHead":"d1db4d4ec706ced25e54009938b049be0f38bc8e","_id":"defender-admin-client@1.31.0","_nodeVersion":"12.22.12","_npmVersion":"lerna/3.22.1/node@v12.22.12+x64 (darwin)","dist":{"integrity":"sha512-aUszSpGJakt0r1JGsxp5YwDOtbRl5UJ0C48dwF+1lmWKBKKmdj2aflBuOEC11ZqqdlwPh9BCt2MkRRjK7Iwgww==","shasum":"f77143d6c2ffd7acea2f40992c0695e2ff69b9ef","tarball":"https://registry.npmjs.org/defender-admin-client/-/defender-admin-client-1.31.0.tgz","fileCount":24,"unpackedSize":118644,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEWWL8OnGMGQnYL5Lj56MaSmy7ZBWD64kPkXlX6kQQCqAiEAtANyVg3gbH453Fzril64kxUSAy1taYJE1O9wn7+Pk3A="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjH3c1ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmo8pA/+Kgxi9xSI6r4zYYP55bT9VTRWltdcqJxH50lfFVOgjnYplKO0\r\nf3No9MPIwA8mgfUJKinXY2eIodgzx+r8Xg3sipQ4LCA4B3/y6d9u/jwo4lmq\r\nxp26GKtGQ7o3jC7Q/rQIAgKXs9rRgbTIu3PvtzKGrGHT6RoXlNbEzp/E10m6\r\nco1PokQEZ1zH2a1VgSMk4YX9M5CACuSL7ofYC2oLF68ChwrH0Wk0+xAv8+qw\r\nlw28G408D98L+szuub3cZcL1UU1TJGH2Rzr054XGSgzxFJ7LTQi+JtUZehJs\r\nzMTRLQACeqFIMZbQ+IMDYKo12QnrQHtkM3TFxe4ZIQnEsM8JG9BBiRoEdaFD\r\ne6cSXCEFIyObWYzDC8eHBqF448zhszNhfpezu9MvDm03pyoHPzHEBLIt97+E\r\nyWnpx2IrlUvhDuck2B5sY6GU34OzHGwNSGPSrlzI1xTFYLZ4vrlOdpqZUHXi\r\n36wdtQJ1MmeAxRjE9dZAkSmP08FB32xVGBeyMXwnCc3c7z5tUICnEbKyU1Vg\r\nv7nSMY+1BKnRvUssNMk9sJy4B91iyNtkUIiTRZDSjhO2ghgtoOmweH7utfxo\r\n5HMLBpoh6XnjQGouOxyMpY/1nRWlPQYkRNtiFFk2nwKU89Ip1pjmj2vVnzLW\r\nN+GDCg7lF81rJjzxNz67d1c78FYFjualVO4=\r\n=RQu7\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"mok0230","email":"mok0230@protonmail.com"},"directories":{},"maintainers":[{"name":"zeljkox","email":"zeljko89markovic@gmail.com"},{"name":"frangio","email":"frangio.1@gmail.com"},{"name":"spalladino","email":"spalladino@gmail.com"},{"name":"ernestognw","email":"ernesto@openzeppelin.com"},{"name":"bjmrq","email":"bmarquiscom@gmail.com"},{"name":"martinverzilli","email":"martin.verzilli@gmail.com"},{"name":"mok0230","email":"mok0230@protonmail.com"},{"name":"tirumerla","email":"tirumerla@gmail.com"},{"name":"dylkil","email":"dylankilkenny95@gmail.com"},{"name":"namis","email":"me@nami.sh"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/defender-admin-client_1.31.0_1663006517590_0.2618651680610131"},"_hasShrinkwrap":false,"deprecated":"defender-admin-client is deprecated, please install @openzeppelin/defender-admin-client"},"1.31.1":{"name":"defender-admin-client","version":"1.31.1","description":"Defender Admin acts as an interface to manage your smart contract project through one or more secure multi-signature contracts. Defender Admin holds no control at all over your system, which is fully controlled by the keys of the signers.","main":"./lib/index.js","types":"./lib/index.d.ts","scripts":{"build":"rm -rf lib && tsc","test":"yarn test:unit","test:unit":"jest --verbose --passWithNoTests","watch":"tsc -w","prepare":"yarn build"},"author":{"name":"Santiago Palladino","email":"santiago@openzeppelin.com"},"license":"MIT","dependencies":{"axios":"^0.21.2","defender-base-client":"1.31.1","lodash":"^4.17.19","node-fetch":"^2.6.0"},"gitHead":"ec5acfd641599669e861dcb015c802310160c451","_id":"defender-admin-client@1.31.1","_nodeVersion":"12.22.12","_npmVersion":"lerna/3.22.1/node@v12.22.12+x64 (darwin)","dist":{"integrity":"sha512-JnN89C2FbpbKHGnjCKYnns6J+QyTvUchE1HnARoDQLlFqOQroNWXORFPz9W+szE8DYH+XKAQhm9ENgk1k86vvg==","shasum":"469c294ae7dabd3337d68083c4a1d6538c71282e","tarball":"https://registry.npmjs.org/defender-admin-client/-/defender-admin-client-1.31.1.tgz","fileCount":24,"unpackedSize":118644,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDzZTYBWPLDV7b9imzwVcbzR5CpoQbv1pwGu2vdFnBO4QIhAJ4tx6OVlF0JWtHj5SvLbLccQ+vswRThX76dZBHr3Y0B"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjH3frACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoPtw/+LRl/Wlhj9zyQE3rOwK3fKbCct2eK4x6uQt2uy0GE5LDm9Hnn\r\n8EuTPcMcEWRjhMwTWK9J+FXhs82hD4rycXT0vLiQxTu7sQVvKrVmPZnWuCA8\r\nTS7rof3+SB/2oEizHjZOU04RvZtYeHeU53PeNrgV1QOdDxaA5vs+G9grTp+7\r\nrv9eZKZc/0c78QyPyewGaeneja76VrlDYaFlGY6dP1ffQKrkqRxdyinppSUj\r\nFWjTc0P7oZXpxAOSyCVQQgHbEMbxegexBRB0vBGztEkjuIBJ1VcZ98GxWVvb\r\nkNehLte6/zVFCkHQ5e/qt7+tCkonxeFltvClVoIwN0Ew0jqf5QJjJlw1xoru\r\npjBJmRwQZDTrzKUQtXoKD+AHnSOHVmkyCSg7jNcHIOAZB4ttxSw2Yl4pZTPj\r\nRs6d/iAinYA+YE7XcZ/VDJe8ZXDQWu5DY9fiBfNRvl+53tG0e60aSs6kCLsw\r\nxKXeYUuZCkJ69XwrxQ4kYwh5nACdw6yMNEylThydzZQIs/ZsQu+FTjREvq5U\r\nVdRaUCHIltlZbutzePWkFPCekKEEr9gOFRZ80nZ4kK6u81Xw9RkVe+qJfSDj\r\nPweYyDH0FeT886XRLgyAotSK5PzoTC7/sewpxXVKrRD2ypu4IfXpjmj6C/NG\r\nckMW23FwH/qrcSddCyI1Tqf/eXEc8qqdAds=\r\n=w0nB\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"mok0230","email":"mok0230@protonmail.com"},"directories":{},"maintainers":[{"name":"zeljkox","email":"zeljko89markovic@gmail.com"},{"name":"frangio","email":"frangio.1@gmail.com"},{"name":"spalladino","email":"spalladino@gmail.com"},{"name":"ernestognw","email":"ernesto@openzeppelin.com"},{"name":"bjmrq","email":"bmarquiscom@gmail.com"},{"name":"martinverzilli","email":"martin.verzilli@gmail.com"},{"name":"mok0230","email":"mok0230@protonmail.com"},{"name":"tirumerla","email":"tirumerla@gmail.com"},{"name":"dylkil","email":"dylankilkenny95@gmail.com"},{"name":"namis","email":"me@nami.sh"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/defender-admin-client_1.31.1_1663006698913_0.5677150884315747"},"_hasShrinkwrap":false,"deprecated":"defender-admin-client is deprecated, please install @openzeppelin/defender-admin-client"},"1.33.0":{"name":"defender-admin-client","version":"1.33.0","description":"Defender Admin acts as an interface to manage your smart contract project through one or more secure multi-signature contracts. Defender Admin holds no control at all over your system, which is fully controlled by the keys of the signers.","main":"./lib/index.js","types":"./lib/index.d.ts","scripts":{"build":"rm -rf lib && tsc","test":"yarn test:unit","test:unit":"jest --verbose --passWithNoTests","watch":"tsc -w","prepare":"yarn build"},"author":{"name":"Santiago Palladino","email":"santiago@openzeppelin.com"},"license":"MIT","dependencies":{"axios":"^0.21.2","defender-base-client":"1.31.1","lodash":"^4.17.19","node-fetch":"^2.6.0"},"gitHead":"dc33b39aae6ea328fccb8dd39301f6d41e609b5c","_id":"defender-admin-client@1.33.0","_nodeVersion":"16.13.2","_npmVersion":"lerna/3.22.1/node@v16.13.2+arm64 (darwin)","_npmUser":{"name":"ernestognw","email":"ernesto@openzeppelin.com"},"dist":{"integrity":"sha512-q3x5Xuw01lvGQ/DMM9nm3Aa6XxTdAUQ70qA/irc7zhFjQ+HtPQTfVDnPgHYbBjG2xlOncc9YRtF9CO+TOQQwIg==","shasum":"2ebc3357898431be3272367cad7b4e253df820b3","tarball":"https://registry.npmjs.org/defender-admin-client/-/defender-admin-client-1.33.0.tgz","fileCount":24,"unpackedSize":163785,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC5zjXPrR2kFE3LpRlyj4dJkbyBcqUWsN/nX7PumGa9mQIhANmfAkDEVy8t9tjs3lCQFynQ92ISdKRlWXbVR3IBVa4s"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjPdoBACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmr4zQ/+LpKyVN4eEeUqt36AIvnsK6EoecAYPwRH5HxS55zTqEjsPgVv\r\nGX4s0pMVHivMiHyMQTvTFbtulAgW9u/vavnTaj3kmdmjuUnFMDjpYnBMioEN\r\nnnsfX0nbhWE/pRLxSCauYA3E6n3Orr9ew0Uu/7IdlgHFEnTVr5myaecU++Ff\r\nNyPu+NGVI6fonT/kJC9nZCV0A/lyQ/vcDkNOec6lo36KO6YpwFpSnbsf0/u+\r\n/oshKEBivUvcsuJObfT7NwDzMrBPu8b+dV8TCi7OZEyqYJCVmmmXUFpjAPT2\r\nVWrTq1DHGOkZZJmxgxSQoAFfKtTfH4KTjZT7HNqBzd+YJMTwK+mOLeLi4Hti\r\nIRMpsMSSIoLVRlwkrml/UGxF13E6rWK0X8g4yOcumOZpBDRNTJCO89lNa9Rk\r\np2mPjpQmwP4OPfzNYvz0ijsGU83T783m0M3iazWWNrtK00PGp2EEgDTCZhWe\r\n/qNubJwlfmnoKEif71nGsGElQSuKwCZGeVEMjYHiJg1X6pPt/r18h60In6fd\r\nNNT+aKp69Y1IG580reJClvyt6xBgRLBR6obVPKGX5C3r+/6sbqxou8uRxoUS\r\ne5NRMkxtu8nSBdClBcqOZYK4HIYUvWgLmz+Zfq12kh/W9A9p5j2a3YYENyjJ\r\nwH1fAUc6O5MUOpz1pQNWPrpHXWThFjFOZKg=\r\n=Fnvu\r\n-----END PGP SIGNATURE-----\r\n"},"directories":{},"maintainers":[{"name":"zeljkox","email":"zeljko89markovic@gmail.com"},{"name":"frangio","email":"frangio.1@gmail.com"},{"name":"spalladino","email":"spalladino@gmail.com"},{"name":"ernestognw","email":"ernesto@openzeppelin.com"},{"name":"bjmrq","email":"bmarquiscom@gmail.com"},{"name":"martinverzilli","email":"martin.verzilli@gmail.com"},{"name":"mok0230","email":"mok0230@protonmail.com"},{"name":"tirumerla","email":"tirumerla@gmail.com"},{"name":"dylkil","email":"dylankilkenny95@gmail.com"},{"name":"namis","email":"me@nami.sh"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/defender-admin-client_1.33.0_1664997889599_0.03745684351566725"},"_hasShrinkwrap":false,"deprecated":"defender-admin-client is deprecated, please install @openzeppelin/defender-admin-client"},"1.34.0-rc.2":{"name":"defender-admin-client","version":"1.34.0-rc.2","description":"Defender Admin acts as an interface to manage your smart contract project through one or more secure multi-signature contracts. Defender Admin holds no control at all over your system, which is fully controlled by the keys of the signers.","main":"./lib/index.js","types":"./lib/index.d.ts","scripts":{"build":"rm -rf lib && tsc","test":"yarn test:unit","test:unit":"jest --verbose --passWithNoTests","watch":"tsc -w","prepare":"yarn build"},"author":{"name":"Santiago Palladino","email":"santiago@openzeppelin.com"},"license":"MIT","dependencies":{"axios":"^0.21.2","defender-base-client":"1.31.1","lodash":"^4.17.19","node-fetch":"^2.6.0"},"gitHead":"f2f5ef4e7554eefbb51220bbea910a400c51030e","readme":"# Defender Admin Client\n\nDefender Admin acts as an interface to manage your smart contract project through one or more secure multi-signature contracts. Defender Admin holds no control at all over your system, which is fully controlled by the keys of the signers.\n\nTo interact with your contracts, you create _proposals_ that need to be reviewed and approved by the other members of the multi-signature wallets. These proposals can be created directly in the Defender web application, or using this library. You can also rely on this library to add your contracts to the Defender Admin dashboard.\n\n## Install\n\n```bash\nnpm install defender-admin-client\n```\n\n```bash\nyarn add defender-admin-client\n```\n\n## Usage\n\nStart by creating a new _Team API Key_ in Defender, and granting it the capability to create new proposals. Use the newly created API key to initialize an instance of the Admin client.\n\n```js\nconst { AdminClient } = require('defender-admin-client');\nconst client = new AdminClient({ apiKey: API_KEY, apiSecret: API_SECRET });\n```\n\n### Action proposals\n\nTo create a `custom` action proposal, you need to provide the function interface (which you can extract from the contract's ABI), its inputs, and the multisig that will be used for approving it:\n\n```js\nawait client.createProposal({\n  contract: { address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E', network: 'rinkeby' }, // Target contract\n  title: 'Adjust fee to 10%', // Title of the proposal\n  description: 'Adjust the contract fee collected per action to 10%', // Description of the proposal\n  type: 'custom', // Use 'custom' for custom admin actions\n  functionInterface: { name: 'setFee', inputs: [{ type: 'uint256', name: 'fee' }] }, // Function ABI\n  functionInputs: ['10'], // Arguments to the function\n  via: '0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b', // Address to execute proposal\n  viaType: 'Gnosis Safe', // 'Gnosis Safe', 'Gnosis Multisig', or 'EOA'\n});\n```\n\n#### Issuing DELEGATECALLs\n\nWhen invoking a function via a Gnosis Safe, it's possible to call it via a `DELEGATECALL` instruction instead of a regular call. This has the effect of executing the code in the called contract _in the context of the multisig_, meaning any operations that affect storage will affect the multisig, and any calls to additional contracts will be executed as if the `msg.sender` were the multisig. To do this, add a `metadata` parameter with the value `{ operationType: 'delegateCall' }` to your `createProposal` call:\n\n```js\nawait client.createProposal({\n  // ... Include all parameters from the example above\n  via: '0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b', // Multisig address\n  viaType: 'Gnosis Safe', // Must be Gnosis Safe to handle delegate calls\n  metadata: { operationType: 'delegateCall' }, // Issue a delegatecall instead of a regular call\n});\n```\n\nNote that this can potentially brick your multisig, if the contract you delegatecall into accidentally modifies the multisig's storage, rendering it unusable. Make sure you understand the risks before issuing a delegatecall.\n\n### Upgrade proposals\n\nTo create an `upgrade` action proposal, provide the proxy contract network and address, along with the new implementation address, and Defender will automatically resolve the rest (note that if no newImplementationAbi is provided the previous implementation ABI will be assumed for the proposal):\n\n```js\nconst newImplementation = '0x3E5e9111Ae8eB78Fe1CC3bb8915d5D461F3Ef9A9';\nconst newImplementationAbi = '[...]';\nconst contract = { network: 'rinkeby', address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E' };\nawait client.proposeUpgrade({ newImplementation, newImplementationAbi }, contract);\n```\n\nIf your proxies do not implement the [EIP1967 admin slot](https://eips.ethereum.org/EIPS/eip-1967#admin-address), you will need to provide either the [`ProxyAdmin` contract](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.0.0/contracts/proxy/transparent/ProxyAdmin.sol) or the Account with rights to execute the upgrade, as shown below.\n\n#### Explicit ProxyAdmin\n\n```js\nconst newImplementation = '0x3E5e9111Ae8eB78Fe1CC3bb8915d5D461F3Ef9A9';\nconst proxyAdmin = '0x2fC100f1BeA4ACCD5dA5e5ed725D763c90e8ca96';\nconst newImplementationAbi = '[...]';\nconst contract = { network: 'rinkeby', address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E' };\nawait client.proposeUpgrade({ newImplementation, newImplementationAbi, proxyAdmin }, contract);\n```\n\n#### Explicit owner account\n\n```js\nconst newImplementation = '0x3E5e9111Ae8eB78Fe1CC3bb8915d5D461F3Ef9A9';\nconst via = '0xF608FA64c4fF8aDdbEd106E69f3459effb4bC3D1';\nconst viaType = 'Gnosis Safe'; // or 'Gnosis Multisig', or 'EOA'\nconst contract = { network: 'rinkeby', address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E' };\nconst newImplementationAbi = '[...]';\nawait client.proposeUpgrade({ newImplementation, newImplementationAbi, via, viaType }, contract);\n```\n\n### Pause proposals\n\nTo create `pause` and `unpause` action proposals, you need to provide the contract network and address, as well as the multisig that will be used for approving it. Defender takes care of the rest:\n\n```js\nconst contract = { network: 'rinkeby', address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E' };\n\n// Create a pause proposal\nawait client.proposePause({ via: '0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b', viaType: 'Gnosis Safe' }, contract);\n\n// Create an unpause proposal\nawait client.proposeUnpause({ via: '0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b', viaType: 'Gnosis Safe' }, contract);\n```\n\nNote that for `pause` and `unpause` proposals to work, your contract ABI must include corresponding `pause()` and `unpause()` functions.\n\n### List proposals\n\nYou can list all proposals:\n\n```js\nconst proposals = await client.listProposals();\n```\n\nYou can filter your active proposals by `isActive` property present on each proposal in the list response. By default, only unarchived proposals are returned, but you can override this by adding an `includeArchived: true` option in the call.\n\n### Retrieve a proposal\n\nYou can retrieve a proposal given its contract and proposal ids:\n\n```js\nawait client.getProposal(contractId, proposalId);\n```\n\n### Archiving proposals\n\nYou can archive or unarchive a proposal given its contract and proposal ids:\n\n```js\nawait client.archiveProposal(contractId, proposalId);\nawait client.unarchiveProposal(contractId, proposalId);\n```\n\n## Adding Contracts\n\nIf you create a new proposal for a Contract that has not yet been added to Defender Admin, it will be automatically added with an autogenerated name and an empty ABI. You can optionally control these values by providing values for them in the `contract` object of the proposal:\n\n```js\nconst contract = {\n  network: 'rinkeby',\n  address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E',\n  name: 'My contract', // Name of the contract if it is created along with this proposal\n  abi: '[...]', // ABI to set for this contract if it is created\n};\nawait client.proposeUpgrade({ newImplementation }, contract);\n```\n\nAlternatively, you can add any contract explicitly by using the `addContract` method, and setting network, address, name, natspec and ABI. The same method can be used to update the contract's name or ABI.\n\n```js\nawait client.addContract({\n  network: 'rinkeby',\n  address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E',\n  name: 'My contract',\n  abi: '[...]',\n  natSpec: '{devdoc:{...}, userdoc: {...}}',\n});\n```\n\nYou can also list all contracts in your Defender Admin dashboard via `listContracts`.\n\n## FAQ\n\n**Can I use this package in a browser?**\n\nThis package is not designed to be used in a browser environment. Using this package requires sensitive API KEYS that should not be exposed publicly.\n","readmeFilename":"README.md","_id":"defender-admin-client@1.34.0-rc.2","_nodeVersion":"16.18.0","_npmVersion":"lerna/3.22.1/node@v16.18.0+arm64 (darwin)","dist":{"integrity":"sha512-SDjDeA8DrT9Tz8ctOEr0EniyVQ1NQ3UPYn2XByFZFzbKaSXxUdU9ZOmnbLe1+gmSJAYD0HusJfMa9X/lO8HI1Q==","shasum":"9b39b2090e22f167ed6df040fa04db47b48b7748","tarball":"https://registry.npmjs.org/defender-admin-client/-/defender-admin-client-1.34.0-rc.2.tgz","fileCount":24,"unpackedSize":120953,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIH7Uxy98hhaxtBG0S4QVaM+FPPY/wBK/MRbntMmceqptAiEAr9kWhhS0qDdjaTZbhkCERLRwpj+y6aouz7A0ZML9tWM="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjV/8NACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpWwA//bQJa1gmo5H6t6Awi+DILg76WOh2FF2Bln/b/DR1U2dQeg5dL\r\nL4wfXIqMZg4pzfH/y95JMfhmuWTAGoq4TUQ/4n4ahPqCTjYL30+lff3oaPb0\r\nYbLA6c/4kE2UUDfBxjv7FYk93Mc2GtYw+AQcSK5TpVIcymIfaGgje5YvigAC\r\n8IaZtrle3pmhqMvJBPYAMtbH/siRVee6YoR2sAMYIaZdRNmuawA4HITJeYzV\r\nDUeWJ8IP5kZBWWqChZZGBLYGFPoq1Zd/zKjBR2UWC9212H6+9NottmLnTPUW\r\nUUeFN98Ft9pPGahL9HWYwhdIYBUUixEu+0HsdTZr7ok3vW+cJ/6IDDByyRks\r\noE/IHcG9LU6TIFa4wcRyCfMOqkcp6dWK/uZo3WTPryRSCM395RhHoOvWmyBQ\r\nBRRgpCl06AD83bfB7TuXNeeOdan8Arcp1DyMSUy3C8wSmhFIFe7PkSAiw+gr\r\nL66VAuhWGIg1uuUAWod0DjOn1mUuLSgaE2K3fy1vBU/Kzd9+NHMI8aPInJkF\r\nm1ySMfco5riODaQVV1D919rogSz5oysSb4l0fzQ3aBHt+us9gMTnStIS2P31\r\n+S5jd0GTfjnNRIZIkZcdP/FefB7i7QnY0APQRyKrlgdptHTr/tL2O9mN4053\r\nhA9M3bDNUPAXmCEp7SHkBSi+yuoSVpHnU2c=\r\n=mk9P\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"bjmrq","email":"bmarquiscom@gmail.com"},"directories":{},"maintainers":[{"name":"zeljkox","email":"zeljko89markovic@gmail.com"},{"name":"frangio","email":"frangio.1@gmail.com"},{"name":"ernestognw","email":"ernesto@openzeppelin.com"},{"name":"bjmrq","email":"bmarquiscom@gmail.com"},{"name":"mok0230","email":"mok0230@protonmail.com"},{"name":"tirumerla","email":"tirumerla@gmail.com"},{"name":"dylkil","email":"dylankilkenny95@gmail.com"},{"name":"namis","email":"me@nami.sh"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/defender-admin-client_1.34.0-rc.2_1666711309368_0.7893139994295739"},"_hasShrinkwrap":false,"deprecated":"defender-admin-client is deprecated, please install @openzeppelin/defender-admin-client"},"1.34.0-rc.3":{"name":"defender-admin-client","version":"1.34.0-rc.3","description":"Defender Admin acts as an interface to manage your smart contract project through one or more secure multi-signature contracts. Defender Admin holds no control at all over your system, which is fully controlled by the keys of the signers.","main":"./lib/index.js","types":"./lib/index.d.ts","scripts":{"build":"rm -rf lib && tsc","test":"yarn test:unit","test:unit":"jest --verbose --passWithNoTests","watch":"tsc -w","prepare":"yarn build"},"author":{"name":"Santiago Palladino","email":"santiago@openzeppelin.com"},"license":"MIT","dependencies":{"axios":"^0.21.2","defender-base-client":"1.34.0-rc.3","lodash":"^4.17.19","node-fetch":"^2.6.0"},"gitHead":"ddbaa93494713b30570340fe47c3e09e281f7994","readme":"# Defender Admin Client\n\nDefender Admin acts as an interface to manage your smart contract project through one or more secure multi-signature contracts. Defender Admin holds no control at all over your system, which is fully controlled by the keys of the signers.\n\nTo interact with your contracts, you create _proposals_ that need to be reviewed and approved by the other members of the multi-signature wallets. These proposals can be created directly in the Defender web application, or using this library. You can also rely on this library to add your contracts to the Defender Admin dashboard.\n\n## Install\n\n```bash\nnpm install defender-admin-client\n```\n\n```bash\nyarn add defender-admin-client\n```\n\n## Usage\n\nStart by creating a new _Team API Key_ in Defender, and granting it the capability to create new proposals. Use the newly created API key to initialize an instance of the Admin client.\n\n```js\nconst { AdminClient } = require('defender-admin-client');\nconst client = new AdminClient({ apiKey: API_KEY, apiSecret: API_SECRET });\n```\n\n### Action proposals\n\nTo create a `custom` action proposal, you need to provide the function interface (which you can extract from the contract's ABI), its inputs, and the multisig that will be used for approving it:\n\n```js\nawait client.createProposal({\n  contract: { address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E', network: 'rinkeby' }, // Target contract\n  title: 'Adjust fee to 10%', // Title of the proposal\n  description: 'Adjust the contract fee collected per action to 10%', // Description of the proposal\n  type: 'custom', // Use 'custom' for custom admin actions\n  functionInterface: { name: 'setFee', inputs: [{ type: 'uint256', name: 'fee' }] }, // Function ABI\n  functionInputs: ['10'], // Arguments to the function\n  via: '0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b', // Address to execute proposal\n  viaType: 'Gnosis Safe', // 'Gnosis Safe', 'Gnosis Multisig', or 'EOA'\n});\n```\n\n#### Issuing DELEGATECALLs\n\nWhen invoking a function via a Gnosis Safe, it's possible to call it via a `DELEGATECALL` instruction instead of a regular call. This has the effect of executing the code in the called contract _in the context of the multisig_, meaning any operations that affect storage will affect the multisig, and any calls to additional contracts will be executed as if the `msg.sender` were the multisig. To do this, add a `metadata` parameter with the value `{ operationType: 'delegateCall' }` to your `createProposal` call:\n\n```js\nawait client.createProposal({\n  // ... Include all parameters from the example above\n  via: '0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b', // Multisig address\n  viaType: 'Gnosis Safe', // Must be Gnosis Safe to handle delegate calls\n  metadata: { operationType: 'delegateCall' }, // Issue a delegatecall instead of a regular call\n});\n```\n\nNote that this can potentially brick your multisig, if the contract you delegatecall into accidentally modifies the multisig's storage, rendering it unusable. Make sure you understand the risks before issuing a delegatecall.\n\n### Upgrade proposals\n\nTo create an `upgrade` action proposal, provide the proxy contract network and address, along with the new implementation address, and Defender will automatically resolve the rest (note that if no newImplementationAbi is provided the previous implementation ABI will be assumed for the proposal):\n\n```js\nconst newImplementation = '0x3E5e9111Ae8eB78Fe1CC3bb8915d5D461F3Ef9A9';\nconst newImplementationAbi = '[...]';\nconst contract = { network: 'rinkeby', address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E' };\nawait client.proposeUpgrade({ newImplementation, newImplementationAbi }, contract);\n```\n\nIf your proxies do not implement the [EIP1967 admin slot](https://eips.ethereum.org/EIPS/eip-1967#admin-address), you will need to provide either the [`ProxyAdmin` contract](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.0.0/contracts/proxy/transparent/ProxyAdmin.sol) or the Account with rights to execute the upgrade, as shown below.\n\n#### Explicit ProxyAdmin\n\n```js\nconst newImplementation = '0x3E5e9111Ae8eB78Fe1CC3bb8915d5D461F3Ef9A9';\nconst proxyAdmin = '0x2fC100f1BeA4ACCD5dA5e5ed725D763c90e8ca96';\nconst newImplementationAbi = '[...]';\nconst contract = { network: 'rinkeby', address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E' };\nawait client.proposeUpgrade({ newImplementation, newImplementationAbi, proxyAdmin }, contract);\n```\n\n#### Explicit owner account\n\n```js\nconst newImplementation = '0x3E5e9111Ae8eB78Fe1CC3bb8915d5D461F3Ef9A9';\nconst via = '0xF608FA64c4fF8aDdbEd106E69f3459effb4bC3D1';\nconst viaType = 'Gnosis Safe'; // or 'Gnosis Multisig', or 'EOA'\nconst contract = { network: 'rinkeby', address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E' };\nconst newImplementationAbi = '[...]';\nawait client.proposeUpgrade({ newImplementation, newImplementationAbi, via, viaType }, contract);\n```\n\n### Pause proposals\n\nTo create `pause` and `unpause` action proposals, you need to provide the contract network and address, as well as the multisig that will be used for approving it. Defender takes care of the rest:\n\n```js\nconst contract = { network: 'rinkeby', address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E' };\n\n// Create a pause proposal\nawait client.proposePause({ via: '0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b', viaType: 'Gnosis Safe' }, contract);\n\n// Create an unpause proposal\nawait client.proposeUnpause({ via: '0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b', viaType: 'Gnosis Safe' }, contract);\n```\n\nNote that for `pause` and `unpause` proposals to work, your contract ABI must include corresponding `pause()` and `unpause()` functions.\n\n### List proposals\n\nYou can list all proposals:\n\n```js\nconst proposals = await client.listProposals();\n```\n\nYou can filter your active proposals by `isActive` property present on each proposal in the list response. By default, only unarchived proposals are returned, but you can override this by adding an `includeArchived: true` option in the call.\n\n### Retrieve a proposal\n\nYou can retrieve a proposal given its contract and proposal ids:\n\n```js\nawait client.getProposal(contractId, proposalId);\n```\n\n### Archiving proposals\n\nYou can archive or unarchive a proposal given its contract and proposal ids:\n\n```js\nawait client.archiveProposal(contractId, proposalId);\nawait client.unarchiveProposal(contractId, proposalId);\n```\n\n## Adding Contracts\n\nIf you create a new proposal for a Contract that has not yet been added to Defender Admin, it will be automatically added with an autogenerated name and an empty ABI. You can optionally control these values by providing values for them in the `contract` object of the proposal:\n\n```js\nconst contract = {\n  network: 'rinkeby',\n  address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E',\n  name: 'My contract', // Name of the contract if it is created along with this proposal\n  abi: '[...]', // ABI to set for this contract if it is created\n};\nawait client.proposeUpgrade({ newImplementation }, contract);\n```\n\nAlternatively, you can add any contract explicitly by using the `addContract` method, and setting network, address, name, natspec and ABI. The same method can be used to update the contract's name or ABI.\n\n```js\nawait client.addContract({\n  network: 'rinkeby',\n  address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E',\n  name: 'My contract',\n  abi: '[...]',\n  natSpec: '{devdoc:{...}, userdoc: {...}}',\n});\n```\n\nYou can also list all contracts in your Defender Admin dashboard via `listContracts`.\n\n## FAQ\n\n**Can I use this package in a browser?**\n\nThis package is not designed to be used in a browser environment. Using this package requires sensitive API KEYS that should not be exposed publicly.\n","readmeFilename":"README.md","_id":"defender-admin-client@1.34.0-rc.3","_nodeVersion":"16.18.0","_npmVersion":"lerna/3.22.1/node@v16.18.0+arm64 (darwin)","dist":{"integrity":"sha512-+rNHX6mAwPQRoFgw8CHQP2he49uTc6a+VZaY4osUrE4GhNl90UOAiOSm04UIG6jtPhdK8NyTz2R/bEPMp7YA4A==","shasum":"835dea4d7068d28557d32bcd3e80c13699ff989e","tarball":"https://registry.npmjs.org/defender-admin-client/-/defender-admin-client-1.34.0-rc.3.tgz","fileCount":24,"unpackedSize":120958,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHoad6QSztUtfIAjZzKabe6cd+fuJ+12kJy3dPF94JeyAiBWllWPLTY8DvGBNFyIj6/Iugcy6tsERKfyP+SbnqZomA=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjV/+5ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpyOA//R5tMgaLHuqGZenA5Cz0KGgPBn3LlTQ4pY24skXtINn7DbYfi\r\nws26qjQlbGbInKl80Gwc+ixZ5WZIHk04dvdX9k7z4wofB+QGLICNZCfaLs6x\r\n/AkY/5Czz0y6o8Z3zNYrEYAlYoY2vxJGsgLRA5rBbEePJvoTuCHYOQR5fqtj\r\nTHGWPPgkZQeIXGEANiMYHIK4molU4cZ2dDVGURK76PpCVG7IzRv2V5u+HdYX\r\nTPU5UHEcQ5Jh463+efj9ibOZd1NDaKTOevKcB2ek1EmhmG+D7orqLP+0M1w3\r\nNOb+SrJ16a4m/o/SbdGQuHbffbaPpsIZcsa+aDoHyHLEZieil5gRQ9rJwuRs\r\nC3+rha+/gd/K4gDt0lRqvUZFXosYNkr/IPV97Kts+kqbZOIrOhfGVkGpI32V\r\nT3G65dCyh8DCYDX5i5qDXw+WiYmNNi5QuLf40Q7+eq8g+qHYR0h9htVC5gZe\r\n9hlPtsRo5zWf6jUK8KtDiKkLendTaNG+hNWXOe5Fr6RbsW/EJ00+M3FL6xfS\r\nz2jsMxHcMogO7mqerBFBGnzbvgK85JrWM0CBDsP/oraapNXosarQBUhpiSyg\r\ndffH7qydbGvGq8SwohJQiNImA4nbaTiH05Dm6Um+VWYYTB4uBWNMRmAQaJ3T\r\nSFb43I8nJIX64IM0cUCoN74wK9tr9Oic5uE=\r\n=OjAj\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"bjmrq","email":"bmarquiscom@gmail.com"},"directories":{},"maintainers":[{"name":"zeljkox","email":"zeljko89markovic@gmail.com"},{"name":"frangio","email":"frangio.1@gmail.com"},{"name":"ernestognw","email":"ernesto@openzeppelin.com"},{"name":"bjmrq","email":"bmarquiscom@gmail.com"},{"name":"mok0230","email":"mok0230@protonmail.com"},{"name":"tirumerla","email":"tirumerla@gmail.com"},{"name":"dylkil","email":"dylankilkenny95@gmail.com"},{"name":"namis","email":"me@nami.sh"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/defender-admin-client_1.34.0-rc.3_1666711481105_0.48746890304521395"},"_hasShrinkwrap":false,"deprecated":"defender-admin-client is deprecated, please install @openzeppelin/defender-admin-client"},"1.34.0":{"name":"defender-admin-client","version":"1.34.0","description":"Defender Admin acts as an interface to manage your smart contract project through one or more secure multi-signature contracts. Defender Admin holds no control at all over your system, which is fully controlled by the keys of the signers.","main":"./lib/index.js","types":"./lib/index.d.ts","scripts":{"build":"rm -rf lib && tsc","test":"yarn test:unit","test:unit":"jest --verbose --passWithNoTests","watch":"tsc -w","prepare":"yarn build"},"author":{"name":"Santiago Palladino","email":"santiago@openzeppelin.com"},"license":"MIT","dependencies":{"axios":"^0.21.2","defender-base-client":"1.34.0","lodash":"^4.17.19","node-fetch":"^2.6.0"},"gitHead":"47cf06c2db2ff19d9711a542bd70620d2b558ab2","_id":"defender-admin-client@1.34.0","_nodeVersion":"16.18.0","_npmVersion":"lerna/3.22.1/node@v16.18.0+arm64 (darwin)","dist":{"integrity":"sha512-UpYgj3DMXSmwG0eVSBmFSFYyCdYQJcQ/AAsL0SXep8F7F6phpecOTS2gMEYzp8VkFu+8MsHyKHs2evZ3qhiuVw==","shasum":"15bafe10877a58e8db872a39bc68b71cb5edde35","tarball":"https://registry.npmjs.org/defender-admin-client/-/defender-admin-client-1.34.0.tgz","fileCount":24,"unpackedSize":120948,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFnVUS6fGh5d9QhSAZz1iHl7TOxrCXoj3BhuL1yDmTE8AiEAk/QA2RL7YCLjt+njhF9IVyTjYB9jH50hn5aktuSytN8="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjWAUEACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqU5hAAiUN/kwvlFgOVQzJUEG0FFxbmwPNQ62aeSrfBoqO4xb3u4c2m\r\nIpG2bv09HvNYU+3s1ymhel2s/gr4aIdx5FJjsZKEIYgwja8XUXW2syQUup68\r\neBdO0nU4oUvq0ahzHmjAIGVvSzYlf8awPPtj+FnJ/GiKxC2BphxNlPjBMz6T\r\nZ9LqcNgO5aY+z0CGMJ/ejCQ5+WFstAeDAKGDYrEy9YsHUn8ovAOpe4gPsrTr\r\n/LEYqOCDIXgihHFPMZqs+KYjM0PHbHTAvkgP5enllzCI3Cvpd4tQAa62vWuv\r\ncTpp/QUH8V/9Cr8/bdWx9dh5Z9o+/5/2wr+W6E7gG/FUMprnulI0xt91GQW7\r\nbuCHewjiMJIDucAdDPcRFSmtflAWewJpNQsXn6tWHtBo/tKWPStzZWABEuq8\r\n/kwoU/Oe8n+Wn3AIqEMsysEij7/Vb7pHQREti/J7d4xdjx85FC/PNE+G6MMI\r\nQrUC29MCEfy3mKnn+lNMBamdXi7jVr6CyKpdIS5tsFNaARr0amrpTpm2EdcF\r\nAHVBeowTCAonyMJuZKCbOET0kLkzJh4g6qTlXlDMOMuTq+bkWYfpFAeP2xmy\r\nHaqdmF20qGk8+sSSewIv1VFy/mP2ZbaZmNc/hjbuoYCH54l2wd8XgzgB3Jxm\r\nnthBNXGeNm5qkBJE8DGOcbxEnXImSAhG2Ak=\r\n=vJz3\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"bjmrq","email":"bmarquiscom@gmail.com"},"directories":{},"maintainers":[{"name":"zeljkox","email":"zeljko89markovic@gmail.com"},{"name":"frangio","email":"frangio.1@gmail.com"},{"name":"ernestognw","email":"ernesto@openzeppelin.com"},{"name":"bjmrq","email":"bmarquiscom@gmail.com"},{"name":"mok0230","email":"mok0230@protonmail.com"},{"name":"tirumerla","email":"tirumerla@gmail.com"},{"name":"dylkil","email":"dylankilkenny95@gmail.com"},{"name":"namis","email":"me@nami.sh"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/defender-admin-client_1.34.0_1666712835827_0.7905338134529434"},"_hasShrinkwrap":false,"deprecated":"defender-admin-client is deprecated, please install @openzeppelin/defender-admin-client"},"1.35.0-rc.1":{"name":"defender-admin-client","version":"1.35.0-rc.1","description":"Defender Admin acts as an interface to manage your smart contract project through one or more secure multi-signature contracts. Defender Admin holds no control at all over your system, which is fully controlled by the keys of the signers.","main":"./lib/index.js","types":"./lib/index.d.ts","scripts":{"build":"rm -rf lib && tsc","test":"yarn test:unit","test:unit":"jest --verbose --passWithNoTests","watch":"tsc -w","prepare":"yarn build"},"author":{"name":"Santiago Palladino","email":"santiago@openzeppelin.com"},"license":"MIT","dependencies":{"axios":"^0.21.2","defender-base-client":"1.34.0","lodash":"^4.17.19","node-fetch":"^2.6.0"},"gitHead":"9f0db28f0be434fc209dffe668d03d5fafeae741","readme":"# Defender Admin Client\n\nDefender Admin acts as an interface to manage your smart contract project through one or more secure multi-signature contracts. Defender Admin holds no control at all over your system, which is fully controlled by the keys of the signers.\n\nTo interact with your contracts, you create _proposals_ that need to be reviewed and approved by the other members of the multi-signature wallets. These proposals can be created directly in the Defender web application, or using this library. You can also rely on this library to add your contracts to the Defender Admin dashboard.\n\n## Install\n\n```bash\nnpm install defender-admin-client\n```\n\n```bash\nyarn add defender-admin-client\n```\n\n## Usage\n\nStart by creating a new _Team API Key_ in Defender, and granting it the capability to create new proposals. Use the newly created API key to initialize an instance of the Admin client.\n\n```js\nconst { AdminClient } = require('defender-admin-client');\nconst client = new AdminClient({ apiKey: API_KEY, apiSecret: API_SECRET });\n```\n\n### Action proposals\n\nTo create a `custom` action proposal, you need to provide the function interface (which you can extract from the contract's ABI), its inputs, and the multisig that will be used for approving it:\n\n```js\nawait client.createProposal({\n  contract: { address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E', network: 'rinkeby' }, // Target contract\n  title: 'Adjust fee to 10%', // Title of the proposal\n  description: 'Adjust the contract fee collected per action to 10%', // Description of the proposal\n  type: 'custom', // Use 'custom' for custom admin actions\n  functionInterface: { name: 'setFee', inputs: [{ type: 'uint256', name: 'fee' }] }, // Function ABI\n  functionInputs: ['10'], // Arguments to the function\n  via: '0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b', // Address to execute proposal\n  viaType: 'Gnosis Safe', // 'Gnosis Safe', 'Gnosis Multisig', or 'EOA'\n});\n```\n\n#### Issuing DELEGATECALLs\n\nWhen invoking a function via a Gnosis Safe, it's possible to call it via a `DELEGATECALL` instruction instead of a regular call. This has the effect of executing the code in the called contract _in the context of the multisig_, meaning any operations that affect storage will affect the multisig, and any calls to additional contracts will be executed as if the `msg.sender` were the multisig. To do this, add a `metadata` parameter with the value `{ operationType: 'delegateCall' }` to your `createProposal` call:\n\n```js\nawait client.createProposal({\n  // ... Include all parameters from the example above\n  via: '0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b', // Multisig address\n  viaType: 'Gnosis Safe', // Must be Gnosis Safe to handle delegate calls\n  metadata: { operationType: 'delegateCall' }, // Issue a delegatecall instead of a regular call\n});\n```\n\nNote that this can potentially brick your multisig, if the contract you delegatecall into accidentally modifies the multisig's storage, rendering it unusable. Make sure you understand the risks before issuing a delegatecall.\n\n### Upgrade proposals\n\nTo create an `upgrade` action proposal, provide the proxy contract network and address, along with the new implementation address, and Defender will automatically resolve the rest (note that if no newImplementationAbi is provided the previous implementation ABI will be assumed for the proposal):\n\n```js\nconst newImplementation = '0x3E5e9111Ae8eB78Fe1CC3bb8915d5D461F3Ef9A9';\nconst newImplementationAbi = '[...]';\nconst contract = { network: 'rinkeby', address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E' };\nawait client.proposeUpgrade({ newImplementation, newImplementationAbi }, contract);\n```\n\nIf your proxies do not implement the [EIP1967 admin slot](https://eips.ethereum.org/EIPS/eip-1967#admin-address), you will need to provide either the [`ProxyAdmin` contract](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.0.0/contracts/proxy/transparent/ProxyAdmin.sol) or the Account with rights to execute the upgrade, as shown below.\n\n#### Explicit ProxyAdmin\n\n```js\nconst newImplementation = '0x3E5e9111Ae8eB78Fe1CC3bb8915d5D461F3Ef9A9';\nconst proxyAdmin = '0x2fC100f1BeA4ACCD5dA5e5ed725D763c90e8ca96';\nconst newImplementationAbi = '[...]';\nconst contract = { network: 'rinkeby', address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E' };\nawait client.proposeUpgrade({ newImplementation, newImplementationAbi, proxyAdmin }, contract);\n```\n\n#### Explicit owner account\n\n```js\nconst newImplementation = '0x3E5e9111Ae8eB78Fe1CC3bb8915d5D461F3Ef9A9';\nconst via = '0xF608FA64c4fF8aDdbEd106E69f3459effb4bC3D1';\nconst viaType = 'Gnosis Safe'; // or 'Gnosis Multisig', or 'EOA'\nconst contract = { network: 'rinkeby', address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E' };\nconst newImplementationAbi = '[...]';\nawait client.proposeUpgrade({ newImplementation, newImplementationAbi, via, viaType }, contract);\n```\n\n### Pause proposals\n\nTo create `pause` and `unpause` action proposals, you need to provide the contract network and address, as well as the multisig that will be used for approving it. Defender takes care of the rest:\n\n```js\nconst contract = { network: 'rinkeby', address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E' };\n\n// Create a pause proposal\nawait client.proposePause({ via: '0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b', viaType: 'Gnosis Safe' }, contract);\n\n// Create an unpause proposal\nawait client.proposeUnpause({ via: '0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b', viaType: 'Gnosis Safe' }, contract);\n```\n\nNote that for `pause` and `unpause` proposals to work, your contract ABI must include corresponding `pause()` and `unpause()` functions.\n\n### Batch proposals\n\nTo create a `batch` proposal, you'll need to provide the contracts to use as an array in the `contract` param, and specify a list of `steps` to execute, in which you provide the information of execution for each function you'll call.\n\n```js\nconst ERC20Token = '0x24B5C627cF54582F93eDbcF6186989227400Ac75';\nconst RolesContract = '0xa50d145697530e8fef3F59a9643c6E9992d0f30D';\n\nconst contracts = [\n  {\n    address: ERC20Token,\n    name: 'ERC20 Token',\n    network: 'goerli',\n    abi: '[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]',\n  },\n  {\n    address: RolesContract,\n    network: 'goerli',\n    name: 'Roles Contract',\n    abi: '[{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]',\n  },\n];\n\nconst safeAddress = '0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b';\n\nconst steps = [\n  {\n    contractId: `goerli-${ERC20Token}`,\n    targetFunction: {\n      name: 'mint',\n      inputs: [{ type: 'uint256', name: 'amount' }],\n    },\n    functionInputs: ['999'],\n    type: 'custom',\n  },\n  {\n    contractId: `goerli-${ERC20Token}`,\n    targetFunction: {\n      name: 'transfer',\n      inputs: [\n        { type: 'address', name: 'to' },\n        { type: 'uint256', name: 'amount' },\n      ],\n    },\n    functionInputs: [safeAddress, '999'],\n    type: 'custom',\n  },\n  {\n    contractId: `goerli-${RolesContract}`,\n    metadata: {\n      action: 'grantRole',\n      role: '0x0000000000000000000000000000000000000000000000000000000000000000',\n      account: safeAddress,\n    },\n    type: 'access-control',\n  },\n];\n\nawait client.createProposal({\n  contract: contracts,\n  title: 'Batch test',\n  description: 'Mint, transfer and modify access control',\n  type: 'batch',\n  via: safeAddress,\n  viaType: 'Gnosis Safe',\n  metadata: {}, // Required field but empty\n  steps,\n});\n```\n\n### List proposals\n\nYou can list all proposals:\n\n```js\nconst proposals = await client.listProposals();\n```\n\nYou can filter your active proposals by `isActive` property present on each proposal in the list response. By default, only unarchived proposals are returned, but you can override this by adding an `includeArchived: true` option in the call.\n\n### Retrieve a proposal\n\nYou can retrieve a proposal given its contract and proposal ids:\n\n```js\nawait client.getProposal(contractId, proposalId);\n```\n\n### Archiving proposals\n\nYou can archive or unarchive a proposal given its contract and proposal ids:\n\n```js\nawait client.archiveProposal(contractId, proposalId);\nawait client.unarchiveProposal(contractId, proposalId);\n```\n\n## Adding Contracts\n\nIf you create a new proposal for a Contract that has not yet been added to Defender Admin, it will be automatically added with an autogenerated name and an empty ABI. You can optionally control these values by providing values for them in the `contract` object of the proposal:\n\n```js\nconst contract = {\n  network: 'rinkeby',\n  address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E',\n  name: 'My contract', // Name of the contract if it is created along with this proposal\n  abi: '[...]', // ABI to set for this contract if it is created\n};\nawait client.proposeUpgrade({ newImplementation }, contract);\n```\n\nAlternatively, you can add any contract explicitly by using the `addContract` method, and setting network, address, name, natspec and ABI. The same method can be used to update the contract's name or ABI.\n\n```js\nawait client.addContract({\n  network: 'rinkeby',\n  address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E',\n  name: 'My contract',\n  abi: '[...]',\n  natSpec: '{devdoc:{...}, userdoc: {...}}',\n});\n```\n\nYou can also list all contracts in your Defender Admin dashboard via `listContracts`.\n\n## FAQ\n\n**Can I use this package in a browser?**\n\nThis package is not designed to be used in a browser environment. Using this package requires sensitive API KEYS that should not be exposed publicly.\n","readmeFilename":"README.md","_id":"defender-admin-client@1.35.0-rc.1","_nodeVersion":"16.18.0","_npmVersion":"lerna/3.22.1/node@v16.18.0+arm64 (darwin)","dist":{"integrity":"sha512-WLII14sKHELAKk/UAiBYGSsDttiBWRQQeEea9esqtnEFH1SyD52Gfcr0+hKT8YiYNCZa4vwhRMR1rlYQBOincw==","shasum":"11993ef79451473f71144e5390ede0b4c59bd9ce","tarball":"https://registry.npmjs.org/defender-admin-client/-/defender-admin-client-1.35.0-rc.1.tgz","fileCount":24,"unpackedSize":123252,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDCe/lP+bzhBhX7KWShMizfo0iDsZgeY/e2MuD01ZSR2wIhAP5AdJV12DdtQd/yHv7q7VNzaPhl1Ibb62hYe1UHttr4"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjYAJjACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmroeg//aQ0fiKIwC3tlATV4nGMDZtBe7dpAJsL/F58aUQ8EtOKd2wMj\r\nJjepzgrnsBoRtaHirpWibStc66T9aJBc2zepPhVpMUsIEeoc4o8Y5ZplCWA3\r\nN6GUce/Q3zvjNfldG6r25oNIwl75Idq3/t7ZMgonvpJm+5puGcfygrnDSy6m\r\nGUTrdEIhn+s6VvG/fQuXuXGxSlqLBlzo3YqhaK8k2LeCPVF0hbpaUtwfUhJQ\r\n+hqUI+D27FMw7JJHaYZ8TbTEUPrBrA+UlFtjUxureCp13cqO9Er0h+sR+GGt\r\nX97L8oD3XVrrtxAZVDQOHofRNcUNDl2q3swsxTQxgr288rpvO0YNMDAz2gWE\r\nGKrVMZIcTtS8lO1YoiXJRXaFnsSzoqSDy5i5Eil8TYDpXXyZ4d2QrxLUWYo3\r\n3OnmK19ORZ02e7AnxLMnMgvRvF7WJpZuAXxbzc04kHuhUazWjXvKSlOwB6Ut\r\n2LlzITXjD5GzmV8sPovsRCAlCFPrVnhQNot9k/wm9NOciL1d72/6FTVzzSHe\r\nmVJsM2pC4245yIBJamcb4GQnO9VyMxvTvOK2irPD7FvPgGAC75Fn+eYtGJZt\r\ne1SgkCK3MSbLm5c3VnoUQ0YRLwMfXWU6kAvFDM8X34bOlFw7zZxYEvctZtrX\r\n3aQahTQ+Q3nPoGSehvdpyxxbGQ9+e5h/LQI=\r\n=Cy6+\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"bjmrq","email":"bmarquiscom@gmail.com"},"directories":{},"maintainers":[{"name":"zeljkox","email":"zeljko89markovic@gmail.com"},{"name":"frangio","email":"frangio.1@gmail.com"},{"name":"ernestognw","email":"ernesto@openzeppelin.com"},{"name":"bjmrq","email":"bmarquiscom@gmail.com"},{"name":"mok0230","email":"mok0230@protonmail.com"},{"name":"tirumerla","email":"tirumerla@gmail.com"},{"name":"dylkil","email":"dylankilkenny95@gmail.com"},{"name":"namis","email":"me@nami.sh"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/defender-admin-client_1.35.0-rc.1_1667236450876_0.17606147869278543"},"_hasShrinkwrap":false,"deprecated":"defender-admin-client is deprecated, please install @openzeppelin/defender-admin-client"},"1.35.0-rc.2":{"name":"defender-admin-client","version":"1.35.0-rc.2","description":"Defender Admin acts as an interface to manage your smart contract project through one or more secure multi-signature contracts. Defender Admin holds no control at all over your system, which is fully controlled by the keys of the signers.","main":"./lib/index.js","types":"./lib/index.d.ts","scripts":{"build":"rm -rf lib && tsc","test":"yarn test:unit","test:unit":"jest --verbose --passWithNoTests","watch":"tsc -w","prepare":"yarn build"},"author":{"name":"Santiago Palladino","email":"santiago@openzeppelin.com"},"license":"MIT","dependencies":{"axios":"^0.21.2","defender-base-client":"1.34.0","lodash":"^4.17.19","node-fetch":"^2.6.0"},"gitHead":"4335f854ef83501fd8b5791f2b71ba4f888f973d","readme":"# Defender Admin Client\n\nDefender Admin acts as an interface to manage your smart contract project through one or more secure multi-signature contracts. Defender Admin holds no control at all over your system, which is fully controlled by the keys of the signers.\n\nTo interact with your contracts, you create _proposals_ that need to be reviewed and approved by the other members of the multi-signature wallets. These proposals can be created directly in the Defender web application, or using this library. You can also rely on this library to add your contracts to the Defender Admin dashboard.\n\n## Install\n\n```bash\nnpm install defender-admin-client\n```\n\n```bash\nyarn add defender-admin-client\n```\n\n## Usage\n\nStart by creating a new _Team API Key_ in Defender, and granting it the capability to create new proposals. Use the newly created API key to initialize an instance of the Admin client.\n\n```js\nconst { AdminClient } = require('defender-admin-client');\nconst client = new AdminClient({ apiKey: API_KEY, apiSecret: API_SECRET });\n```\n\n### Action proposals\n\nTo create a `custom` action proposal, you need to provide the function interface (which you can extract from the contract's ABI), its inputs, and the multisig that will be used for approving it:\n\n```js\nawait client.createProposal({\n  contract: { address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E', network: 'rinkeby' }, // Target contract\n  title: 'Adjust fee to 10%', // Title of the proposal\n  description: 'Adjust the contract fee collected per action to 10%', // Description of the proposal\n  type: 'custom', // Use 'custom' for custom admin actions\n  functionInterface: { name: 'setFee', inputs: [{ type: 'uint256', name: 'fee' }] }, // Function ABI\n  functionInputs: ['10'], // Arguments to the function\n  via: '0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b', // Address to execute proposal\n  viaType: 'Gnosis Safe', // 'Gnosis Safe', 'Gnosis Multisig', or 'EOA'\n});\n```\n\n#### Issuing DELEGATECALLs\n\nWhen invoking a function via a Gnosis Safe, it's possible to call it via a `DELEGATECALL` instruction instead of a regular call. This has the effect of executing the code in the called contract _in the context of the multisig_, meaning any operations that affect storage will affect the multisig, and any calls to additional contracts will be executed as if the `msg.sender` were the multisig. To do this, add a `metadata` parameter with the value `{ operationType: 'delegateCall' }` to your `createProposal` call:\n\n```js\nawait client.createProposal({\n  // ... Include all parameters from the example above\n  via: '0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b', // Multisig address\n  viaType: 'Gnosis Safe', // Must be Gnosis Safe to handle delegate calls\n  metadata: { operationType: 'delegateCall' }, // Issue a delegatecall instead of a regular call\n});\n```\n\nNote that this can potentially brick your multisig, if the contract you delegatecall into accidentally modifies the multisig's storage, rendering it unusable. Make sure you understand the risks before issuing a delegatecall.\n\n### Upgrade proposals\n\nTo create an `upgrade` action proposal, provide the proxy contract network and address, along with the new implementation address, and Defender will automatically resolve the rest (note that if no newImplementationAbi is provided the previous implementation ABI will be assumed for the proposal):\n\n```js\nconst newImplementation = '0x3E5e9111Ae8eB78Fe1CC3bb8915d5D461F3Ef9A9';\nconst newImplementationAbi = '[...]';\nconst contract = { network: 'rinkeby', address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E' };\nawait client.proposeUpgrade({ newImplementation, newImplementationAbi }, contract);\n```\n\nIf your proxies do not implement the [EIP1967 admin slot](https://eips.ethereum.org/EIPS/eip-1967#admin-address), you will need to provide either the [`ProxyAdmin` contract](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.0.0/contracts/proxy/transparent/ProxyAdmin.sol) or the Account with rights to execute the upgrade, as shown below.\n\n#### Explicit ProxyAdmin\n\n```js\nconst newImplementation = '0x3E5e9111Ae8eB78Fe1CC3bb8915d5D461F3Ef9A9';\nconst proxyAdmin = '0x2fC100f1BeA4ACCD5dA5e5ed725D763c90e8ca96';\nconst newImplementationAbi = '[...]';\nconst contract = { network: 'rinkeby', address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E' };\nawait client.proposeUpgrade({ newImplementation, newImplementationAbi, proxyAdmin }, contract);\n```\n\n#### Explicit owner account\n\n```js\nconst newImplementation = '0x3E5e9111Ae8eB78Fe1CC3bb8915d5D461F3Ef9A9';\nconst via = '0xF608FA64c4fF8aDdbEd106E69f3459effb4bC3D1';\nconst viaType = 'Gnosis Safe'; // or 'Gnosis Multisig', or 'EOA'\nconst contract = { network: 'rinkeby', address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E' };\nconst newImplementationAbi = '[...]';\nawait client.proposeUpgrade({ newImplementation, newImplementationAbi, via, viaType }, contract);\n```\n\n### Pause proposals\n\nTo create `pause` and `unpause` action proposals, you need to provide the contract network and address, as well as the multisig that will be used for approving it. Defender takes care of the rest:\n\n```js\nconst contract = { network: 'rinkeby', address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E' };\n\n// Create a pause proposal\nawait client.proposePause({ via: '0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b', viaType: 'Gnosis Safe' }, contract);\n\n// Create an unpause proposal\nawait client.proposeUnpause({ via: '0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b', viaType: 'Gnosis Safe' }, contract);\n```\n\nNote that for `pause` and `unpause` proposals to work, your contract ABI must include corresponding `pause()` and `unpause()` functions.\n\n### Batch proposals\n\nTo create a `batch` proposal, you'll need to provide the contracts to use as an array in the `contract` param, and specify a list of `steps` to execute, in which you provide the information of execution for each function you'll call.\n\n```js\nconst ERC20Token = '0x24B5C627cF54582F93eDbcF6186989227400Ac75';\nconst RolesContract = '0xa50d145697530e8fef3F59a9643c6E9992d0f30D';\n\nconst contracts = [\n  {\n    address: ERC20Token,\n    name: 'ERC20 Token',\n    network: 'goerli',\n    abi: '[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]',\n  },\n  {\n    address: RolesContract,\n    network: 'goerli',\n    name: 'Roles Contract',\n    abi: '[{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]',\n  },\n];\n\nconst safeAddress = '0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b';\n\nconst steps = [\n  {\n    contractId: `goerli-${ERC20Token}`,\n    targetFunction: {\n      name: 'mint',\n      inputs: [{ type: 'uint256', name: 'amount' }],\n    },\n    functionInputs: ['999'],\n    type: 'custom',\n  },\n  {\n    contractId: `goerli-${ERC20Token}`,\n    targetFunction: {\n      name: 'transfer',\n      inputs: [\n        { type: 'address', name: 'to' },\n        { type: 'uint256', name: 'amount' },\n      ],\n    },\n    functionInputs: [safeAddress, '999'],\n    type: 'custom',\n  },\n  {\n    contractId: `goerli-${RolesContract}`,\n    metadata: {\n      action: 'grantRole',\n      role: '0x0000000000000000000000000000000000000000000000000000000000000000',\n      account: safeAddress,\n    },\n    type: 'access-control',\n  },\n];\n\nawait client.createProposal({\n  contract: contracts,\n  title: 'Batch test',\n  description: 'Mint, transfer and modify access control',\n  type: 'batch',\n  via: safeAddress,\n  viaType: 'Gnosis Safe',\n  metadata: {}, // Required field but empty\n  steps,\n});\n```\n\n### List proposals\n\nYou can list all proposals:\n\n```js\nconst proposals = await client.listProposals();\n```\n\nYou can filter your active proposals by `isActive` property present on each proposal in the list response. By default, only unarchived proposals are returned, but you can override this by adding an `includeArchived: true` option in the call.\n\n### Retrieve a proposal\n\nYou can retrieve a proposal given its contract and proposal ids:\n\n```js\nawait client.getProposal(contractId, proposalId);\n```\n\n### Archiving proposals\n\nYou can archive or unarchive a proposal given its contract and proposal ids:\n\n```js\nawait client.archiveProposal(contractId, proposalId);\nawait client.unarchiveProposal(contractId, proposalId);\n```\n\n## Adding Contracts\n\nIf you create a new proposal for a Contract that has not yet been added to Defender Admin, it will be automatically added with an autogenerated name and an empty ABI. You can optionally control these values by providing values for them in the `contract` object of the proposal:\n\n```js\nconst contract = {\n  network: 'rinkeby',\n  address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E',\n  name: 'My contract', // Name of the contract if it is created along with this proposal\n  abi: '[...]', // ABI to set for this contract if it is created\n};\nawait client.proposeUpgrade({ newImplementation }, contract);\n```\n\nAlternatively, you can add any contract explicitly by using the `addContract` method, and setting network, address, name, natspec and ABI. The same method can be used to update the contract's name or ABI.\n\n```js\nawait client.addContract({\n  network: 'rinkeby',\n  address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E',\n  name: 'My contract',\n  abi: '[...]',\n  natSpec: '{devdoc:{...}, userdoc: {...}}',\n});\n```\n\nYou can also list all contracts in your Defender Admin dashboard via `listContracts`.\n\n## FAQ\n\n**Can I use this package in a browser?**\n\nThis package is not designed to be used in a browser environment. Using this package requires sensitive API KEYS that should not be exposed publicly.\n","readmeFilename":"README.md","_id":"defender-admin-client@1.35.0-rc.2","_nodeVersion":"16.18.0","_npmVersion":"lerna/3.22.1/node@v16.18.0+arm64 (darwin)","dist":{"integrity":"sha512-klVwmZHnwM4sxUVJe+uDCXQb31+j7UPTshBQJMVbCjygVMz8nzmHMku38ilCd6IZvqiBejk+7huLv1sTA3Yrpw==","shasum":"1af4665da18dcb88cbb989151bac8cc5332c45d4","tarball":"https://registry.npmjs.org/defender-admin-client/-/defender-admin-client-1.35.0-rc.2.tgz","fileCount":24,"unpackedSize":123252,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCRUUV6T2iw63V7jDAYwr+7gyApnRQL6LrnKz7JGrn4AAIhAI582WVZ+M/c1D5/siBZlQewsY3STFhigMbG4kSP9oaI"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjYAOBACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmovARAAiFAmKXeXb/UPxk/a3jZCNEmW2NJUNQp97Fcbg/B51hUiEgNp\r\nmwLV1pJ5O+sR6qRvJUnexOE6G05KWYqCGfT51Z5rYjl0YO1qtt5ycaf3+3Dm\r\nas8/79oPR+cum1XF3Gqjvf2JKhyawNO9ftwB/U67PYuZXPfT6V2115w1wnx6\r\nfg0xcUDSqkpd4lZZSLdyIVni4CogUNvMq0AzYrHTBBHxTeDtP5sCXFkJQxSm\r\nVfSKj97e8l2GWwl37eGNHUxsdqQzTw2yn12Exa4ZLSwvugkzmNPy3G9U4cqO\r\nFrJAQxVQW4xD5mxDrVZ3ifOiAGdmrq0+n2UF6NUNUNbZMOsEJCvrHLNOTEwH\r\n3e4a3vEuxLkhrwhCNFOgwSWxWgtKT/B0Gi+X5dTT7in64/d/JnDi7sMqQ1GQ\r\nkVsTVbleQpZ/ByqFcVi4id7GHroXX2ZC7jpJTwVuQkLaGlwD15a1mPbIfrNm\r\nW9GvRSfCP4QzF30NNxqcY2Lq5LMt1SEjpIRYn4mTSNleA+6Z567Vl0moPHbp\r\nB6XZT8LAatVknfJYywNg3hljY0gVpVPj2tkLFymm2F/aROvKDysTYJ2IA9cU\r\ndtRK9n3vb8gZxaeauaNC+dsuSLo6xP1WM2F8CPOT1TeXxO65rIBXxMLc9v1X\r\nWmB7ugRkSNBqojxAWxmHRGIid4sB0XDgzXM=\r\n=jBht\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"bjmrq","email":"bmarquiscom@gmail.com"},"directories":{},"maintainers":[{"name":"zeljkox","email":"zeljko89markovic@gmail.com"},{"name":"frangio","email":"frangio.1@gmail.com"},{"name":"ernestognw","email":"ernesto@openzeppelin.com"},{"name":"bjmrq","email":"bmarquiscom@gmail.com"},{"name":"mok0230","email":"mok0230@protonmail.com"},{"name":"tirumerla","email":"tirumerla@gmail.com"},{"name":"dylkil","email":"dylankilkenny95@gmail.com"},{"name":"namis","email":"me@nami.sh"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/defender-admin-client_1.35.0-rc.2_1667236737376_0.11586953371784015"},"_hasShrinkwrap":false,"deprecated":"defender-admin-client is deprecated, please install @openzeppelin/defender-admin-client"},"1.36.0-rc.1":{"name":"defender-admin-client","version":"1.36.0-rc.1","description":"Defender Admin acts as an interface to manage your smart contract project through one or more secure multi-signature contracts. Defender Admin holds no control at all over your system, which is fully controlled by the keys of the signers.","main":"./lib/index.js","types":"./lib/index.d.ts","scripts":{"build":"rm -rf lib && tsc","test":"yarn test:unit","test:unit":"jest --verbose --passWithNoTests","watch":"tsc -w","prepare":"yarn build"},"author":{"name":"Santiago Palladino","email":"santiago@openzeppelin.com"},"license":"MIT","dependencies":{"axios":"^0.21.2","defender-base-client":"1.36.0-rc.1","lodash":"^4.17.19","node-fetch":"^2.6.0"},"gitHead":"b98cfa3f7afa424e6e514701452a1920576bd726","readme":"# Defender Admin Client\n\nDefender Admin acts as an interface to manage your smart contract project through one or more secure multi-signature contracts. Defender Admin holds no control at all over your system, which is fully controlled by the keys of the signers.\n\nTo interact with your contracts, you create _proposals_ that need to be reviewed and approved by the other members of the multi-signature wallets. These proposals can be created directly in the Defender web application, or using this library. You can also rely on this library to add your contracts to the Defender Admin dashboard.\n\n## Install\n\n```bash\nnpm install defender-admin-client\n```\n\n```bash\nyarn add defender-admin-client\n```\n\n## Usage\n\nStart by creating a new _Team API Key_ in Defender, and granting it the capability to create new proposals. Use the newly created API key to initialize an instance of the Admin client.\n\n```js\nconst { AdminClient } = require('defender-admin-client');\nconst client = new AdminClient({ apiKey: API_KEY, apiSecret: API_SECRET });\n```\n\n### Action proposals\n\nTo create a `custom` action proposal, you need to provide the function interface (which you can extract from the contract's ABI), its inputs, and the multisig that will be used for approving it:\n\n```js\nawait client.createProposal({\n  contract: { address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E', network: 'rinkeby' }, // Target contract\n  title: 'Adjust fee to 10%', // Title of the proposal\n  description: 'Adjust the contract fee collected per action to 10%', // Description of the proposal\n  type: 'custom', // Use 'custom' for custom admin actions\n  functionInterface: { name: 'setFee', inputs: [{ type: 'uint256', name: 'fee' }] }, // Function ABI\n  functionInputs: ['10'], // Arguments to the function\n  via: '0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b', // Address to execute proposal\n  viaType: 'Gnosis Safe', // 'Gnosis Safe', 'Gnosis Multisig', or 'EOA'\n});\n```\n\n#### Issuing DELEGATECALLs\n\nWhen invoking a function via a Gnosis Safe, it's possible to call it via a `DELEGATECALL` instruction instead of a regular call. This has the effect of executing the code in the called contract _in the context of the multisig_, meaning any operations that affect storage will affect the multisig, and any calls to additional contracts will be executed as if the `msg.sender` were the multisig. To do this, add a `metadata` parameter with the value `{ operationType: 'delegateCall' }` to your `createProposal` call:\n\n```js\nawait client.createProposal({\n  // ... Include all parameters from the example above\n  via: '0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b', // Multisig address\n  viaType: 'Gnosis Safe', // Must be Gnosis Safe to handle delegate calls\n  metadata: { operationType: 'delegateCall' }, // Issue a delegatecall instead of a regular call\n});\n```\n\nNote that this can potentially brick your multisig, if the contract you delegatecall into accidentally modifies the multisig's storage, rendering it unusable. Make sure you understand the risks before issuing a delegatecall.\n\n### Upgrade proposals\n\nTo create an `upgrade` action proposal, provide the proxy contract network and address, along with the new implementation address, and Defender will automatically resolve the rest (note that if no newImplementationAbi is provided the previous implementation ABI will be assumed for the proposal):\n\n```js\nconst newImplementation = '0x3E5e9111Ae8eB78Fe1CC3bb8915d5D461F3Ef9A9';\nconst newImplementationAbi = '[...]';\nconst contract = { network: 'rinkeby', address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E' };\nawait client.proposeUpgrade({ newImplementation, newImplementationAbi }, contract);\n```\n\nIf your proxies do not implement the [EIP1967 admin slot](https://eips.ethereum.org/EIPS/eip-1967#admin-address), you will need to provide either the [`ProxyAdmin` contract](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.0.0/contracts/proxy/transparent/ProxyAdmin.sol) or the Account with rights to execute the upgrade, as shown below.\n\n#### Explicit ProxyAdmin\n\n```js\nconst newImplementation = '0x3E5e9111Ae8eB78Fe1CC3bb8915d5D461F3Ef9A9';\nconst proxyAdmin = '0x2fC100f1BeA4ACCD5dA5e5ed725D763c90e8ca96';\nconst newImplementationAbi = '[...]';\nconst contract = { network: 'rinkeby', address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E' };\nawait client.proposeUpgrade({ newImplementation, newImplementationAbi, proxyAdmin }, contract);\n```\n\n#### Explicit owner account\n\n```js\nconst newImplementation = '0x3E5e9111Ae8eB78Fe1CC3bb8915d5D461F3Ef9A9';\nconst via = '0xF608FA64c4fF8aDdbEd106E69f3459effb4bC3D1';\nconst viaType = 'Gnosis Safe'; // or 'Gnosis Multisig', or 'EOA'\nconst contract = { network: 'rinkeby', address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E' };\nconst newImplementationAbi = '[...]';\nawait client.proposeUpgrade({ newImplementation, newImplementationAbi, via, viaType }, contract);\n```\n\n### Pause proposals\n\nTo create `pause` and `unpause` action proposals, you need to provide the contract network and address, as well as the multisig that will be used for approving it. Defender takes care of the rest:\n\n```js\nconst contract = { network: 'rinkeby', address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E' };\n\n// Create a pause proposal\nawait client.proposePause({ via: '0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b', viaType: 'Gnosis Safe' }, contract);\n\n// Create an unpause proposal\nawait client.proposeUnpause({ via: '0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b', viaType: 'Gnosis Safe' }, contract);\n```\n\nNote that for `pause` and `unpause` proposals to work, your contract ABI must include corresponding `pause()` and `unpause()` functions.\n\n### Batch proposals\n\nTo create a `batch` proposal, you'll need to provide the contracts to use as an array in the `contract` param, and specify a list of `steps` to execute, in which you provide the information of execution for each function you'll call.\n\n```js\nconst ERC20Token = '0x24B5C627cF54582F93eDbcF6186989227400Ac75';\nconst RolesContract = '0xa50d145697530e8fef3F59a9643c6E9992d0f30D';\n\nconst contracts = [\n  {\n    address: ERC20Token,\n    name: 'ERC20 Token',\n    network: 'goerli',\n    abi: '[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]',\n  },\n  {\n    address: RolesContract,\n    network: 'goerli',\n    name: 'Roles Contract',\n    abi: '[{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]',\n  },\n];\n\nconst safeAddress = '0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b';\n\nconst steps = [\n  {\n    contractId: `goerli-${ERC20Token}`,\n    targetFunction: {\n      name: 'mint',\n      inputs: [{ type: 'uint256', name: 'amount' }],\n    },\n    functionInputs: ['999'],\n    type: 'custom',\n  },\n  {\n    contractId: `goerli-${ERC20Token}`,\n    targetFunction: {\n      name: 'transfer',\n      inputs: [\n        { type: 'address', name: 'to' },\n        { type: 'uint256', name: 'amount' },\n      ],\n    },\n    functionInputs: [safeAddress, '999'],\n    type: 'custom',\n  },\n  {\n    contractId: `goerli-${RolesContract}`,\n    metadata: {\n      action: 'grantRole',\n      role: '0x0000000000000000000000000000000000000000000000000000000000000000',\n      account: safeAddress,\n    },\n    type: 'access-control',\n  },\n];\n\nawait client.createProposal({\n  contract: contracts,\n  title: 'Batch test',\n  description: 'Mint, transfer and modify access control',\n  type: 'batch',\n  via: safeAddress,\n  viaType: 'Gnosis Safe',\n  metadata: {}, // Required field but empty\n  steps,\n});\n```\n\n### List proposals\n\nYou can list all proposals:\n\n```js\nconst proposals = await client.listProposals();\n```\n\nYou can filter your active proposals by `isActive` property present on each proposal in the list response. By default, only unarchived proposals are returned, but you can override this by adding an `includeArchived: true` option in the call.\n\n### Retrieve a proposal\n\nYou can retrieve a proposal given its contract and proposal ids:\n\n```js\nawait client.getProposal(contractId, proposalId);\n```\n\n### Archiving proposals\n\nYou can archive or unarchive a proposal given its contract and proposal ids:\n\n```js\nawait client.archiveProposal(contractId, proposalId);\nawait client.unarchiveProposal(contractId, proposalId);\n```\n\n## Adding Contracts\n\nIf you create a new proposal for a Contract that has not yet been added to Defender Admin, it will be automatically added with an autogenerated name and an empty ABI. You can optionally control these values by providing values for them in the `contract` object of the proposal:\n\n```js\nconst contract = {\n  network: 'rinkeby',\n  address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E',\n  name: 'My contract', // Name of the contract if it is created along with this proposal\n  abi: '[...]', // ABI to set for this contract if it is created\n};\nawait client.proposeUpgrade({ newImplementation }, contract);\n```\n\nAlternatively, you can add any contract explicitly by using the `addContract` method, and setting network, address, name, natspec and ABI. The same method can be used to update the contract's name or ABI.\n\n```js\nawait client.addContract({\n  network: 'rinkeby',\n  address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E',\n  name: 'My contract',\n  abi: '[...]',\n  natSpec: '{devdoc:{...}, userdoc: {...}}',\n});\n```\n\nYou can also list all contracts in your Defender Admin dashboard via `listContracts`.\n\n## FAQ\n\n**Can I use this package in a browser?**\n\nThis package is not designed to be used in a browser environment. Using this package requires sensitive API KEYS that should not be exposed publicly.\n","readmeFilename":"README.md","_id":"defender-admin-client@1.36.0-rc.1","_nodeVersion":"16.18.0","_npmVersion":"lerna/3.22.1/node@v16.18.0+arm64 (darwin)","dist":{"integrity":"sha512-0tIWB+P7ou+yM7FDu3D9OSWeaqXYXULvua7rqsgagKIz6PndvlPwEkHbniRrYJZVyzEM2V2KqPzrLqG7Ja4ihw==","shasum":"d788974cfc6cbbaeaf5e4c3f89bc746797c3a5f2","tarball":"https://registry.npmjs.org/defender-admin-client/-/defender-admin-client-1.36.0-rc.1.tgz","fileCount":24,"unpackedSize":123257,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHGBMruhKCtCQZVGozK0/uLNgRqAIqZcadTFEWjznGAxAiEA9mi6sJ9xbpwtRb9c5PpRsdSo3NAg24g9QwIuY0yynp0="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjYsbxACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoLlA/+PcRMsuwX+8k4JKprqsSekHglQ0M4p1fjRK62ZH7GuTUa93fR\r\naN9ixeuVRCLsyomJtuM0HAuphLuc67CWqkbvHiFvGpu4CJatA3QeHjuB21Gw\r\nSmi9CGqVCsHuCtj0RFH81AYDs7eVI3jjR70bn91Gk4nHhJouKpFkVTHFIFwu\r\nVi7KKFxVlHIDc7GfbcRTf8vO2F+oF3riV9ljerWg1PdF4aKZZBBlIQ6Ufu/F\r\nkppgw5n80BpQEk1Y4pOmLafUBOyfLuFKz4+eCr6cGCSNws2S9RH8RAfNrt7t\r\nnjmNqkVvfYIdYFF5wLT+TVRnvo6+RrUTDyZ3JYjdPKQwjNzw9LCk9TF4IcHN\r\njUjBwGZgyDMBMhRlOp/QFjUv1UkUW5Jq9ut6Uryyxds2sHodzbuW0pHGvek5\r\nVZqtfxKvNdNnTRS1vRBDCWF0YS2xw9d+YjmE2V54jaryzulV0oSeXAtWC0yd\r\nNwqUJnU+wSOy2gHIP3zqWNrD1Qp1s0wfnHUc9Vpq8U2d6L5j3KLc7PNZjodk\r\nsyseDgeThpFq76q0ccoCzKTsg1pNgH3KMXncepTqRVfjquRuZg/PzwZvSdM9\r\nXQc7An3faWHpaFVhGXtTSkS1UVpYqUcl6US/LacZhKhPeIFhRCN0adXQd3IG\r\nZTCQzD9U8Zrx8U8LG5RNp+yRyyel3tId1Vs=\r\n=oEqE\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"bjmrq","email":"bmarquiscom@gmail.com"},"directories":{},"maintainers":[{"name":"zeljkox","email":"zeljko89markovic@gmail.com"},{"name":"frangio","email":"frangio.1@gmail.com"},{"name":"ernestognw","email":"ernesto@openzeppelin.com"},{"name":"bjmrq","email":"bmarquiscom@gmail.com"},{"name":"mok0230","email":"mok0230@protonmail.com"},{"name":"tirumerla","email":"tirumerla@gmail.com"},{"name":"dylkil","email":"dylankilkenny95@gmail.com"},{"name":"namis","email":"me@nami.sh"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/defender-admin-client_1.36.0-rc.1_1667417841298_0.7716083132476648"},"_hasShrinkwrap":false,"deprecated":"defender-admin-client is deprecated, please install @openzeppelin/defender-admin-client"},"1.37.0-rc.1":{"name":"defender-admin-client","version":"1.37.0-rc.1","description":"Defender Admin acts as an interface to manage your smart contract project through one or more secure multi-signature contracts. Defender Admin holds no control at all over your system, which is fully controlled by the keys of the signers.","main":"./lib/index.js","types":"./lib/index.d.ts","scripts":{"build":"rm -rf lib && tsc","test":"yarn test:unit","test:unit":"jest --verbose --passWithNoTests","watch":"tsc -w","prepare":"yarn build"},"author":{"name":"Santiago Palladino","email":"santiago@openzeppelin.com"},"license":"MIT","dependencies":{"axios":"^0.21.2","defender-base-client":"1.37.0-rc.1","lodash":"^4.17.19","node-fetch":"^2.6.0"},"gitHead":"0be8290c259711eb0a176725309d7fcf2c50189f","readme":"# Defender Admin Client\n\nDefender Admin acts as an interface to manage your smart contract project through one or more secure multi-signature contracts. Defender Admin holds no control at all over your system, which is fully controlled by the keys of the signers.\n\nTo interact with your contracts, you create _proposals_ that need to be reviewed and approved by the other members of the multi-signature wallets. These proposals can be created directly in the Defender web application, or using this library. You can also rely on this library to add your contracts to the Defender Admin dashboard.\n\n## Install\n\n```bash\nnpm install defender-admin-client\n```\n\n```bash\nyarn add defender-admin-client\n```\n\n## Usage\n\nStart by creating a new _Team API Key_ in Defender, and granting it the capability to create new proposals. Use the newly created API key to initialize an instance of the Admin client.\n\n```js\nconst { AdminClient } = require('defender-admin-client');\nconst client = new AdminClient({ apiKey: API_KEY, apiSecret: API_SECRET });\n```\n\n### Action proposals\n\nTo create a `custom` action proposal, you need to provide the function interface (which you can extract from the contract's ABI), its inputs, and the multisig that will be used for approving it:\n\n```js\nawait client.createProposal({\n  contract: { address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E', network: 'rinkeby' }, // Target contract\n  title: 'Adjust fee to 10%', // Title of the proposal\n  description: 'Adjust the contract fee collected per action to 10%', // Description of the proposal\n  type: 'custom', // Use 'custom' for custom admin actions\n  functionInterface: { name: 'setFee', inputs: [{ type: 'uint256', name: 'fee' }] }, // Function ABI\n  functionInputs: ['10'], // Arguments to the function\n  via: '0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b', // Address to execute proposal\n  viaType: 'Gnosis Safe', // 'Gnosis Safe', 'Gnosis Multisig', or 'EOA'\n});\n```\n\n#### Issuing DELEGATECALLs\n\nWhen invoking a function via a Gnosis Safe, it's possible to call it via a `DELEGATECALL` instruction instead of a regular call. This has the effect of executing the code in the called contract _in the context of the multisig_, meaning any operations that affect storage will affect the multisig, and any calls to additional contracts will be executed as if the `msg.sender` were the multisig. To do this, add a `metadata` parameter with the value `{ operationType: 'delegateCall' }` to your `createProposal` call:\n\n```js\nawait client.createProposal({\n  // ... Include all parameters from the example above\n  via: '0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b', // Multisig address\n  viaType: 'Gnosis Safe', // Must be Gnosis Safe to handle delegate calls\n  metadata: { operationType: 'delegateCall' }, // Issue a delegatecall instead of a regular call\n});\n```\n\nNote that this can potentially brick your multisig, if the contract you delegatecall into accidentally modifies the multisig's storage, rendering it unusable. Make sure you understand the risks before issuing a delegatecall.\n\n### Upgrade proposals\n\nTo create an `upgrade` action proposal, provide the proxy contract network and address, along with the new implementation address, and Defender will automatically resolve the rest (note that if no newImplementationAbi is provided the previous implementation ABI will be assumed for the proposal):\n\n```js\nconst newImplementation = '0x3E5e9111Ae8eB78Fe1CC3bb8915d5D461F3Ef9A9';\nconst newImplementationAbi = '[...]';\nconst contract = { network: 'rinkeby', address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E' };\nawait client.proposeUpgrade({ newImplementation, newImplementationAbi }, contract);\n```\n\nIf your proxies do not implement the [EIP1967 admin slot](https://eips.ethereum.org/EIPS/eip-1967#admin-address), you will need to provide either the [`ProxyAdmin` contract](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.0.0/contracts/proxy/transparent/ProxyAdmin.sol) or the Account with rights to execute the upgrade, as shown below.\n\n#### Explicit ProxyAdmin\n\n```js\nconst newImplementation = '0x3E5e9111Ae8eB78Fe1CC3bb8915d5D461F3Ef9A9';\nconst proxyAdmin = '0x2fC100f1BeA4ACCD5dA5e5ed725D763c90e8ca96';\nconst newImplementationAbi = '[...]';\nconst contract = { network: 'rinkeby', address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E' };\nawait client.proposeUpgrade({ newImplementation, newImplementationAbi, proxyAdmin }, contract);\n```\n\n#### Explicit owner account\n\n```js\nconst newImplementation = '0x3E5e9111Ae8eB78Fe1CC3bb8915d5D461F3Ef9A9';\nconst via = '0xF608FA64c4fF8aDdbEd106E69f3459effb4bC3D1';\nconst viaType = 'Gnosis Safe'; // or 'Gnosis Multisig', or 'EOA'\nconst contract = { network: 'rinkeby', address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E' };\nconst newImplementationAbi = '[...]';\nawait client.proposeUpgrade({ newImplementation, newImplementationAbi, via, viaType }, contract);\n```\n\n### Pause proposals\n\nTo create `pause` and `unpause` action proposals, you need to provide the contract network and address, as well as the multisig that will be used for approving it. Defender takes care of the rest:\n\n```js\nconst contract = { network: 'rinkeby', address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E' };\n\n// Create a pause proposal\nawait client.proposePause({ via: '0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b', viaType: 'Gnosis Safe' }, contract);\n\n// Create an unpause proposal\nawait client.proposeUnpause({ via: '0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b', viaType: 'Gnosis Safe' }, contract);\n```\n\nNote that for `pause` and `unpause` proposals to work, your contract ABI must include corresponding `pause()` and `unpause()` functions.\n\n### Batch proposals\n\nTo create a `batch` proposal, you'll need to provide the contracts to use as an array in the `contract` param, and specify a list of `steps` to execute, in which you provide the information of execution for each function you'll call.\n\n```js\nconst ERC20Token = '0x24B5C627cF54582F93eDbcF6186989227400Ac75';\nconst RolesContract = '0xa50d145697530e8fef3F59a9643c6E9992d0f30D';\n\nconst contracts = [\n  {\n    address: ERC20Token,\n    name: 'ERC20 Token',\n    network: 'goerli',\n    abi: '[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]',\n  },\n  {\n    address: RolesContract,\n    network: 'goerli',\n    name: 'Roles Contract',\n    abi: '[{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]',\n  },\n];\n\nconst safeAddress = '0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b';\n\nconst steps = [\n  {\n    contractId: `goerli-${ERC20Token}`,\n    targetFunction: {\n      name: 'mint',\n      inputs: [{ type: 'uint256', name: 'amount' }],\n    },\n    functionInputs: ['999'],\n    type: 'custom',\n  },\n  {\n    contractId: `goerli-${ERC20Token}`,\n    targetFunction: {\n      name: 'transfer',\n      inputs: [\n        { type: 'address', name: 'to' },\n        { type: 'uint256', name: 'amount' },\n      ],\n    },\n    functionInputs: [safeAddress, '999'],\n    type: 'custom',\n  },\n  {\n    contractId: `goerli-${RolesContract}`,\n    metadata: {\n      action: 'grantRole',\n      role: '0x0000000000000000000000000000000000000000000000000000000000000000',\n      account: safeAddress,\n    },\n    type: 'access-control',\n  },\n];\n\nawait client.createProposal({\n  contract: contracts,\n  title: 'Batch test',\n  description: 'Mint, transfer and modify access control',\n  type: 'batch',\n  via: safeAddress,\n  viaType: 'Gnosis Safe',\n  metadata: {}, // Required field but empty\n  steps,\n});\n```\n\n### List proposals\n\nYou can list all proposals:\n\n```js\nconst proposals = await client.listProposals();\n```\n\nYou can filter your active proposals by `isActive` property present on each proposal in the list response. By default, only unarchived proposals are returned, but you can override this by adding an `includeArchived: true` option in the call.\n\n### Retrieve a proposal\n\nYou can retrieve a proposal given its contract and proposal ids:\n\n```js\nawait client.getProposal(contractId, proposalId);\n```\n\n### Archiving proposals\n\nYou can archive or unarchive a proposal given its contract and proposal ids:\n\n```js\nawait client.archiveProposal(contractId, proposalId);\nawait client.unarchiveProposal(contractId, proposalId);\n```\n\n## Adding Contracts\n\nIf you create a new proposal for a Contract that has not yet been added to Defender Admin, it will be automatically added with an autogenerated name and an empty ABI. You can optionally control these values by providing values for them in the `contract` object of the proposal:\n\n```js\nconst contract = {\n  network: 'rinkeby',\n  address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E',\n  name: 'My contract', // Name of the contract if it is created along with this proposal\n  abi: '[...]', // ABI to set for this contract if it is created\n};\nawait client.proposeUpgrade({ newImplementation }, contract);\n```\n\nAlternatively, you can add any contract explicitly by using the `addContract` method, and setting network, address, name, natspec and ABI. The same method can be used to update the contract's name or ABI.\n\n```js\nawait client.addContract({\n  network: 'rinkeby',\n  address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E',\n  name: 'My contract',\n  abi: '[...]',\n  natSpec: '{devdoc:{...}, userdoc: {...}}',\n});\n```\n\nYou can also list all contracts in your Defender Admin dashboard via `listContracts`.\n\n## FAQ\n\n**Can I use this package in a browser?**\n\nThis package is not designed to be used in a browser environment. Using this package requires sensitive API KEYS that should not be exposed publicly.\n","readmeFilename":"README.md","_id":"defender-admin-client@1.37.0-rc.1","_nodeVersion":"16.18.0","_npmVersion":"lerna/3.22.1/node@v16.18.0+arm64 (darwin)","dist":{"integrity":"sha512-L0GTjQ89r3adxUy87Zk07W70LUD2rK+UkNHeChXWp4SSJXBN/Asu7CXnd/utjRrRdvsy14K2I0BhYw7PZn62Xg==","shasum":"ba9daddd247f42838978123ca1d2f948977fd481","tarball":"https://registry.npmjs.org/defender-admin-client/-/defender-admin-client-1.37.0-rc.1.tgz","fileCount":24,"unpackedSize":123257,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIE9YUvlfLxj1ksql/xVdXkFolMUfMoTE8Xwc7Zt9T/zdAiEAqQzvDLOy853bUAUsz6PCBdHRDBFoPnUX7FETXxbglsw="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjZdF/ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrJuBAAml+F25xS3WpkpFkW4IELvk1VDpF+Qw/lU+whVpl3td+CsiIn\r\nK6/7/+sr5P1t1cyq7E2TdmetTZSGYCxr56EOAelTyVTn+kUgMsB69sJEsca0\r\nt1I58/7omFWUKbpHkKF9xhz5oTj07acXSYbLBNPcxldVZXAEnsdkydxi2BeR\r\n7RCIQKzntFZTNquy8PoJ9G556+gI6AMBKTVR+nUec/RHplWG3gBX4gTiZ91L\r\nrzXFUljwE9rzkAZgky14Cs4TduqHbkLQklNQk3AQ2O68/8V2J2PbH9M8P6wt\r\n2/E9iKUUywko+TublESPM7kRhqqvwlA/N/qIZT5b9pN2YfKd1e+5vQiJyu93\r\nJXxZ8kQf7t6cS+AJekl3lZ4SDSLsA6ZKoVy5AXpdie2vb59gJxXflSEzIl/v\r\nzaEXL6lnxdI4kc/jD9kFx2mlPWqYv4ebxDSMqi1AY7aFIQHcAZFKisVFgwSN\r\nBNkR2Mqg/cAQ+6s+kU4fXIlRnBLuC201rgxuD8vfM/ACNSLA+Q7EcL8lpWyt\r\nsiPshc7WIAaKc4Qr8F7ledB9ZZk/NDzZ9B8Tu1zPxlcCFojWQ28W9MNgjWHw\r\n7SoImDOaxCw7mrMg3aLVNETN6oPzDpASnhREz7sFzhiQx9qh89GkYNef+9H0\r\n+r9mZsoIcNNQZuUkIUl1Dej1lSBDhYPwlLQ=\r\n=RXLO\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"bjmrq","email":"bmarquiscom@gmail.com"},"directories":{},"maintainers":[{"name":"zeljkox","email":"zeljko89markovic@gmail.com"},{"name":"frangio","email":"frangio.1@gmail.com"},{"name":"ernestognw","email":"ernesto@openzeppelin.com"},{"name":"bjmrq","email":"bmarquiscom@gmail.com"},{"name":"mok0230","email":"mok0230@protonmail.com"},{"name":"tirumerla","email":"tirumerla@gmail.com"},{"name":"dylkil","email":"dylankilkenny95@gmail.com"},{"name":"namis","email":"me@nami.sh"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/defender-admin-client_1.37.0-rc.1_1667617151708_0.4089731139378552"},"_hasShrinkwrap":false,"deprecated":"defender-admin-client is deprecated, please install @openzeppelin/defender-admin-client"},"1.37.0-rc.2":{"name":"defender-admin-client","version":"1.37.0-rc.2","description":"Defender Admin acts as an interface to manage your smart contract project through one or more secure multi-signature contracts. Defender Admin holds no control at all over your system, which is fully controlled by the keys of the signers.","main":"./lib/index.js","types":"./lib/index.d.ts","scripts":{"build":"rm -rf lib && tsc","test":"yarn test:unit","test:unit":"jest --verbose --passWithNoTests","watch":"tsc -w","prepare":"yarn build"},"author":{"name":"Santiago Palladino","email":"santiago@openzeppelin.com"},"license":"MIT","dependencies":{"axios":"^0.21.2","defender-base-client":"1.37.0-rc.2","lodash":"^4.17.19","node-fetch":"^2.6.0"},"gitHead":"68296ab5d6380db617b7ec76a0916a607ba47d3a","readme":"# Defender Admin Client\n\nDefender Admin acts as an interface to manage your smart contract project through one or more secure multi-signature contracts. Defender Admin holds no control at all over your system, which is fully controlled by the keys of the signers.\n\nTo interact with your contracts, you create _proposals_ that need to be reviewed and approved by the other members of the multi-signature wallets. These proposals can be created directly in the Defender web application, or using this library. You can also rely on this library to add your contracts to the Defender Admin dashboard.\n\n## Install\n\n```bash\nnpm install defender-admin-client\n```\n\n```bash\nyarn add defender-admin-client\n```\n\n## Usage\n\nStart by creating a new _Team API Key_ in Defender, and granting it the capability to create new proposals. Use the newly created API key to initialize an instance of the Admin client.\n\n```js\nconst { AdminClient } = require('defender-admin-client');\nconst client = new AdminClient({ apiKey: API_KEY, apiSecret: API_SECRET });\n```\n\n### Action proposals\n\nTo create a `custom` action proposal, you need to provide the function interface (which you can extract from the contract's ABI), its inputs, and the multisig that will be used for approving it:\n\n```js\nawait client.createProposal({\n  contract: { address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E', network: 'rinkeby' }, // Target contract\n  title: 'Adjust fee to 10%', // Title of the proposal\n  description: 'Adjust the contract fee collected per action to 10%', // Description of the proposal\n  type: 'custom', // Use 'custom' for custom admin actions\n  functionInterface: { name: 'setFee', inputs: [{ type: 'uint256', name: 'fee' }] }, // Function ABI\n  functionInputs: ['10'], // Arguments to the function\n  via: '0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b', // Address to execute proposal\n  viaType: 'Gnosis Safe', // 'Gnosis Safe', 'Gnosis Multisig', or 'EOA'\n});\n```\n\n#### Issuing DELEGATECALLs\n\nWhen invoking a function via a Gnosis Safe, it's possible to call it via a `DELEGATECALL` instruction instead of a regular call. This has the effect of executing the code in the called contract _in the context of the multisig_, meaning any operations that affect storage will affect the multisig, and any calls to additional contracts will be executed as if the `msg.sender` were the multisig. To do this, add a `metadata` parameter with the value `{ operationType: 'delegateCall' }` to your `createProposal` call:\n\n```js\nawait client.createProposal({\n  // ... Include all parameters from the example above\n  via: '0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b', // Multisig address\n  viaType: 'Gnosis Safe', // Must be Gnosis Safe to handle delegate calls\n  metadata: { operationType: 'delegateCall' }, // Issue a delegatecall instead of a regular call\n});\n```\n\nNote that this can potentially brick your multisig, if the contract you delegatecall into accidentally modifies the multisig's storage, rendering it unusable. Make sure you understand the risks before issuing a delegatecall.\n\n### Upgrade proposals\n\nTo create an `upgrade` action proposal, provide the proxy contract network and address, along with the new implementation address, and Defender will automatically resolve the rest (note that if no newImplementationAbi is provided the previous implementation ABI will be assumed for the proposal):\n\n```js\nconst newImplementation = '0x3E5e9111Ae8eB78Fe1CC3bb8915d5D461F3Ef9A9';\nconst newImplementationAbi = '[...]';\nconst contract = { network: 'rinkeby', address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E' };\nawait client.proposeUpgrade({ newImplementation, newImplementationAbi }, contract);\n```\n\nIf your proxies do not implement the [EIP1967 admin slot](https://eips.ethereum.org/EIPS/eip-1967#admin-address), you will need to provide either the [`ProxyAdmin` contract](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.0.0/contracts/proxy/transparent/ProxyAdmin.sol) or the Account with rights to execute the upgrade, as shown below.\n\n#### Explicit ProxyAdmin\n\n```js\nconst newImplementation = '0x3E5e9111Ae8eB78Fe1CC3bb8915d5D461F3Ef9A9';\nconst proxyAdmin = '0x2fC100f1BeA4ACCD5dA5e5ed725D763c90e8ca96';\nconst newImplementationAbi = '[...]';\nconst contract = { network: 'rinkeby', address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E' };\nawait client.proposeUpgrade({ newImplementation, newImplementationAbi, proxyAdmin }, contract);\n```\n\n#### Explicit owner account\n\n```js\nconst newImplementation = '0x3E5e9111Ae8eB78Fe1CC3bb8915d5D461F3Ef9A9';\nconst via = '0xF608FA64c4fF8aDdbEd106E69f3459effb4bC3D1';\nconst viaType = 'Gnosis Safe'; // or 'Gnosis Multisig', or 'EOA'\nconst contract = { network: 'rinkeby', address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E' };\nconst newImplementationAbi = '[...]';\nawait client.proposeUpgrade({ newImplementation, newImplementationAbi, via, viaType }, contract);\n```\n\n### Pause proposals\n\nTo create `pause` and `unpause` action proposals, you need to provide the contract network and address, as well as the multisig that will be used for approving it. Defender takes care of the rest:\n\n```js\nconst contract = { network: 'rinkeby', address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E' };\n\n// Create a pause proposal\nawait client.proposePause({ via: '0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b', viaType: 'Gnosis Safe' }, contract);\n\n// Create an unpause proposal\nawait client.proposeUnpause({ via: '0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b', viaType: 'Gnosis Safe' }, contract);\n```\n\nNote that for `pause` and `unpause` proposals to work, your contract ABI must include corresponding `pause()` and `unpause()` functions.\n\n### Batch proposals\n\nTo create a `batch` proposal, you'll need to provide the contracts to use as an array in the `contract` param, and specify a list of `steps` to execute, in which you provide the information of execution for each function you'll call.\n\n```js\nconst ERC20Token = '0x24B5C627cF54582F93eDbcF6186989227400Ac75';\nconst RolesContract = '0xa50d145697530e8fef3F59a9643c6E9992d0f30D';\n\nconst contracts = [\n  {\n    address: ERC20Token,\n    name: 'ERC20 Token',\n    network: 'goerli',\n    abi: '[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]',\n  },\n  {\n    address: RolesContract,\n    network: 'goerli',\n    name: 'Roles Contract',\n    abi: '[{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]',\n  },\n];\n\nconst safeAddress = '0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b';\n\nconst steps = [\n  {\n    contractId: `goerli-${ERC20Token}`,\n    targetFunction: {\n      name: 'mint',\n      inputs: [{ type: 'uint256', name: 'amount' }],\n    },\n    functionInputs: ['999'],\n    type: 'custom',\n  },\n  {\n    contractId: `goerli-${ERC20Token}`,\n    targetFunction: {\n      name: 'transfer',\n      inputs: [\n        { type: 'address', name: 'to' },\n        { type: 'uint256', name: 'amount' },\n      ],\n    },\n    functionInputs: [safeAddress, '999'],\n    type: 'custom',\n  },\n  {\n    contractId: `goerli-${RolesContract}`,\n    metadata: {\n      action: 'grantRole',\n      role: '0x0000000000000000000000000000000000000000000000000000000000000000',\n      account: safeAddress,\n    },\n    type: 'access-control',\n  },\n];\n\nawait client.createProposal({\n  contract: contracts,\n  title: 'Batch test',\n  description: 'Mint, transfer and modify access control',\n  type: 'batch',\n  via: safeAddress,\n  viaType: 'Gnosis Safe',\n  metadata: {}, // Required field but empty\n  steps,\n});\n```\n\n### List proposals\n\nYou can list all proposals:\n\n```js\nconst proposals = await client.listProposals();\n```\n\nYou can filter your active proposals by `isActive` property present on each proposal in the list response. By default, only unarchived proposals are returned, but you can override this by adding an `includeArchived: true` option in the call.\n\n### Retrieve a proposal\n\nYou can retrieve a proposal given its contract and proposal ids:\n\n```js\nawait client.getProposal(contractId, proposalId);\n```\n\n### Archiving proposals\n\nYou can archive or unarchive a proposal given its contract and proposal ids:\n\n```js\nawait client.archiveProposal(contractId, proposalId);\nawait client.unarchiveProposal(contractId, proposalId);\n```\n\n## Adding Contracts\n\nIf you create a new proposal for a Contract that has not yet been added to Defender Admin, it will be automatically added with an autogenerated name and an empty ABI. You can optionally control these values by providing values for them in the `contract` object of the proposal:\n\n```js\nconst contract = {\n  network: 'rinkeby',\n  address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E',\n  name: 'My contract', // Name of the contract if it is created along with this proposal\n  abi: '[...]', // ABI to set for this contract if it is created\n};\nawait client.proposeUpgrade({ newImplementation }, contract);\n```\n\nAlternatively, you can add any contract explicitly by using the `addContract` method, and setting network, address, name, natspec and ABI. The same method can be used to update the contract's name or ABI.\n\n```js\nawait client.addContract({\n  network: 'rinkeby',\n  address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E',\n  name: 'My contract',\n  abi: '[...]',\n  natSpec: '{devdoc:{...}, userdoc: {...}}',\n});\n```\n\nYou can also list all contracts in your Defender Admin dashboard via `listContracts`.\n\n## FAQ\n\n**Can I use this package in a browser?**\n\nThis package is not designed to be used in a browser environment. Using this package requires sensitive API KEYS that should not be exposed publicly.\n","readmeFilename":"README.md","_id":"defender-admin-client@1.37.0-rc.2","_nodeVersion":"16.18.0","_npmVersion":"lerna/3.22.1/node@v16.18.0+arm64 (darwin)","dist":{"integrity":"sha512-zQr0FxPKGqV/+zcszUJNzhoQRGZ8RxN3vcUYW+U75WCbPz9wGBJuD1F6HdS7bJ+SGI+HzMYzCjw3gsoyTq7Jag==","shasum":"77af078c7a48f534f54a4ebc749d9ed0f3050c2f","tarball":"https://registry.npmjs.org/defender-admin-client/-/defender-admin-client-1.37.0-rc.2.tgz","fileCount":24,"unpackedSize":123257,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIETZdTyE8psIdGdTymWf2AzHc+jEBK+Ie30nZVmBHIOAAiB5RCRkf1B1o3yeaQ82ZAS9XPS7GjiMOUvR1T3RXGyqJA=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjZd35ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrswA/5AXKSLP702gzXGaIXgEgP/dqtBnzfIWk/1goLq7wYVYixGCep\r\nIh4rZeW/vEs15OsXmJHGFX/0RAwqTKHVcobRR9WUc1ec5puI3EDCwJ13gmJA\r\nAv4iQZblWTcbgiNvOlyE0IJ3jz1xlR2+topBXsfCU13ngwUhPwSqAdQNI64U\r\nRsjX+3/x8zi9xf8N2jTy1TKMav/N2i4w3eT4JQGr4P/xFcUWRzkXyP13IKk5\r\noC3OAFq+S43vqMuuT8N7jFbHVADgsTdGtQ6oJqihwFqc1Tft87tsxhJLycxl\r\n44W6ecyyK4K7YMOBbLU6YVB0VtOwSaDVMW0wt+/Vq2b6iPz6A9owxOO62fxW\r\ntI16WDoJBkk4uwPxnSZn6oHu6ws+fuIyF11i6B1tP9dDyiVRP0KAAn4IaxEP\r\nEUp4Wyo7EdDx8rJ94zvoHbiZ1T43NcRO96wfI44pTmgYwnwYYIk4sENkHcXY\r\n4rPnhbpNLwL2N2sNP5Mf/33xnw58tMpDuYj1Y9/htg0VCFP8rUDkp7HPGaKl\r\nyZl3Gz3UWKyCQPUywn/uuT1wdp/q583avCunM/WBAj69UfZWLxvZZoB0nAFn\r\ng83XdPZKcGujk9MsuEcy5LVYexoQCA2h7owmcTCoY7TQTNLPO04NWb56oMag\r\n4W2M3Y1NhviyzUAUI4VusdLICV7r9p4O4pM=\r\n=thxP\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"bjmrq","email":"bmarquiscom@gmail.com"},"directories":{},"maintainers":[{"name":"zeljkox","email":"zeljko89markovic@gmail.com"},{"name":"frangio","email":"frangio.1@gmail.com"},{"name":"ernestognw","email":"ernesto@openzeppelin.com"},{"name":"bjmrq","email":"bmarquiscom@gmail.com"},{"name":"mok0230","email":"mok0230@protonmail.com"},{"name":"tirumerla","email":"tirumerla@gmail.com"},{"name":"dylkil","email":"dylankilkenny95@gmail.com"},{"name":"namis","email":"me@nami.sh"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/defender-admin-client_1.37.0-rc.2_1667620345298_0.7955916457749883"},"_hasShrinkwrap":false,"deprecated":"defender-admin-client is deprecated, please install @openzeppelin/defender-admin-client"},"1.37.0":{"name":"defender-admin-client","version":"1.37.0","description":"Defender Admin acts as an interface to manage your smart contract project through one or more secure multi-signature contracts. Defender Admin holds no control at all over your system, which is fully controlled by the keys of the signers.","main":"./lib/index.js","types":"./lib/index.d.ts","scripts":{"build":"rm -rf lib && tsc","test":"yarn test:unit","test:unit":"jest --verbose --passWithNoTests","watch":"tsc -w","prepare":"yarn build"},"author":{"name":"Santiago Palladino","email":"santiago@openzeppelin.com"},"license":"MIT","dependencies":{"axios":"^0.21.2","defender-base-client":"1.37.0","lodash":"^4.17.19","node-fetch":"^2.6.0"},"gitHead":"4b153fb8b16facd6713921faa4499af0b55c9e6e","_id":"defender-admin-client@1.37.0","_nodeVersion":"16.17.0","_npmVersion":"lerna/3.22.1/node@v16.17.0+arm64 (darwin)","dist":{"integrity":"sha512-0I0n+LUo4X75uiy/Sd5V5Qv1HwhmIvC++uswxx8xnQ0VUK+y0ic0uMk/8ACrItH/9EGH2YrURNm8ZGg9AY1K5A==","shasum":"d4b6cc6c7ebaa9aab138f39b10572018c25dc9a1","tarball":"https://registry.npmjs.org/defender-admin-client/-/defender-admin-client-1.37.0.tgz","fileCount":24,"unpackedSize":123247,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEvmvp+cythsnB+uxilLh9kKBR6aooGGaSgkYy3fkid7AiEAnOdrbR76aH4djCmDseTaDHROQv+fR+tBs2NzxK+SlFI="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJja47WACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmquqg/7Bt2H7M18g+R6wFQWQumxN3Cq4U3I8lknEE3MqOQ3ozRWIoe+\r\nV2uv0f8V+1JX60CD+P0W/VWege8+wcb3yiDq6Rg5fxY38oDQJWuk4iQ6dGnI\r\n1rLrAWe4BFfA2S7WP0M121IUmEOAxNebjbCFbrtZkaDTGwlAqUVMQmwR1pa7\r\nJzOCLqpJPrbUnVQvieVFuKj6FRpyb/SIuDAsRIb+d1OjAt1bcivJL7z8O/Ke\r\neHW4o2dcZ7tfZzBQoGT8bT2u+AMHJoCJXaENfUeZ+akO2YOc8ckQGNu8U6D3\r\nbcK8Ryu8j5579BfwyKLqEQv/wl7/4O2IG0EtviSz/ITMPxPU3KCFdZmYs1xH\r\nSvVmMs0aDb+qulySEBPL0WJXfnT5ndueaVUh3qnEffHQUxuOhjCAa7SN3Omv\r\ndrVzQ2DXal6WVu2rkKWOMRtaqXxRB5aTBpuaqkdjpkx+OCviexUmhsFjbwud\r\n13uVkB+2vsCdvC+4RLGlsWA4xFP9OGb/etemdEkdaCMd+RRcknxK7K3l5GUF\r\nIub+EDAmWaPj3WK9QlFrlil3mWr5spmVA4Z0JJnHooKgIDYEDPBH55WBdAvl\r\nMGydE4O+lkAbQkzO/I5tJ/ZV/x3vjV0cL/vaKZSdc20gQOSJhI9z2t9PHQi0\r\n32XlCDS57/rwnQURwKETFJhPQ/co/yAzHg8=\r\n=Tqis\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"zeljkox","email":"zeljko89markovic@gmail.com"},"directories":{},"maintainers":[{"name":"zeljkox","email":"zeljko89markovic@gmail.com"},{"name":"frangio","email":"frangio.1@gmail.com"},{"name":"ernestognw","email":"ernesto@openzeppelin.com"},{"name":"bjmrq","email":"bmarquiscom@gmail.com"},{"name":"mok0230","email":"mok0230@protonmail.com"},{"name":"tirumerla","email":"tirumerla@gmail.com"},{"name":"dylkil","email":"dylankilkenny95@gmail.com"},{"name":"namis","email":"me@nami.sh"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/defender-admin-client_1.37.0_1667993302379_0.9600443811683397"},"_hasShrinkwrap":false,"deprecated":"defender-admin-client is deprecated, please install @openzeppelin/defender-admin-client"},"1.38.0-rc.1":{"name":"defender-admin-client","version":"1.38.0-rc.1","description":"Defender Admin acts as an interface to manage your smart contract project through one or more secure multi-signature contracts. Defender Admin holds no control at all over your system, which is fully controlled by the keys of the signers.","main":"./lib/index.js","types":"./lib/index.d.ts","scripts":{"build":"rm -rf lib && tsc","test":"yarn test:unit","test:unit":"jest --verbose --passWithNoTests","watch":"tsc -w","prepare":"yarn build"},"author":{"name":"Santiago Palladino","email":"santiago@openzeppelin.com"},"license":"MIT","dependencies":{"axios":"^0.21.2","defender-base-client":"1.38.0-rc.1","lodash":"^4.17.19","node-fetch":"^2.6.0"},"gitHead":"6c2082ed372e93ccad04347786cf233d3186c8d8","readme":"# Defender Admin Client\n\nDefender Admin acts as an interface to manage your smart contract project through one or more secure multi-signature contracts. Defender Admin holds no control at all over your system, which is fully controlled by the keys of the signers.\n\nTo interact with your contracts, you create _proposals_ that need to be reviewed and approved by the other members of the multi-signature wallets. These proposals can be created directly in the Defender web application, or using this library. You can also rely on this library to add your contracts to the Defender Admin dashboard.\n\n## Install\n\n```bash\nnpm install defender-admin-client\n```\n\n```bash\nyarn add defender-admin-client\n```\n\n## Usage\n\nStart by creating a new _Team API Key_ in Defender, and granting it the capability to create new proposals. Use the newly created API key to initialize an instance of the Admin client.\n\n```js\nconst { AdminClient } = require('defender-admin-client');\nconst client = new AdminClient({ apiKey: API_KEY, apiSecret: API_SECRET });\n```\n\n### Action proposals\n\nTo create a `custom` action proposal, you need to provide the function interface (which you can extract from the contract's ABI), its inputs, and the multisig that will be used for approving it:\n\n```js\nawait client.createProposal({\n  contract: { address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E', network: 'rinkeby' }, // Target contract\n  title: 'Adjust fee to 10%', // Title of the proposal\n  description: 'Adjust the contract fee collected per action to 10%', // Description of the proposal\n  type: 'custom', // Use 'custom' for custom admin actions\n  functionInterface: { name: 'setFee', inputs: [{ type: 'uint256', name: 'fee' }] }, // Function ABI\n  functionInputs: ['10'], // Arguments to the function\n  via: '0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b', // Address to execute proposal\n  viaType: 'Gnosis Safe', // 'Gnosis Safe', 'Gnosis Multisig', or 'EOA'\n});\n```\n\n#### Issuing DELEGATECALLs\n\nWhen invoking a function via a Gnosis Safe, it's possible to call it via a `DELEGATECALL` instruction instead of a regular call. This has the effect of executing the code in the called contract _in the context of the multisig_, meaning any operations that affect storage will affect the multisig, and any calls to additional contracts will be executed as if the `msg.sender` were the multisig. To do this, add a `metadata` parameter with the value `{ operationType: 'delegateCall' }` to your `createProposal` call:\n\n```js\nawait client.createProposal({\n  // ... Include all parameters from the example above\n  via: '0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b', // Multisig address\n  viaType: 'Gnosis Safe', // Must be Gnosis Safe to handle delegate calls\n  metadata: { operationType: 'delegateCall' }, // Issue a delegatecall instead of a regular call\n});\n```\n\nNote that this can potentially brick your multisig, if the contract you delegatecall into accidentally modifies the multisig's storage, rendering it unusable. Make sure you understand the risks before issuing a delegatecall.\n\n### Upgrade proposals\n\nTo create an `upgrade` action proposal, provide the proxy contract network and address, along with the new implementation address, and Defender will automatically resolve the rest (note that if no newImplementationAbi is provided the previous implementation ABI will be assumed for the proposal):\n\n```js\nconst newImplementation = '0x3E5e9111Ae8eB78Fe1CC3bb8915d5D461F3Ef9A9';\nconst newImplementationAbi = '[...]';\nconst contract = { network: 'rinkeby', address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E' };\nawait client.proposeUpgrade({ newImplementation, newImplementationAbi }, contract);\n```\n\nIf your proxies do not implement the [EIP1967 admin slot](https://eips.ethereum.org/EIPS/eip-1967#admin-address), you will need to provide either the [`ProxyAdmin` contract](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.0.0/contracts/proxy/transparent/ProxyAdmin.sol) or the Account with rights to execute the upgrade, as shown below.\n\n#### Explicit ProxyAdmin\n\n```js\nconst newImplementation = '0x3E5e9111Ae8eB78Fe1CC3bb8915d5D461F3Ef9A9';\nconst proxyAdmin = '0x2fC100f1BeA4ACCD5dA5e5ed725D763c90e8ca96';\nconst newImplementationAbi = '[...]';\nconst contract = { network: 'rinkeby', address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E' };\nawait client.proposeUpgrade({ newImplementation, newImplementationAbi, proxyAdmin }, contract);\n```\n\n#### Explicit owner account\n\n```js\nconst newImplementation = '0x3E5e9111Ae8eB78Fe1CC3bb8915d5D461F3Ef9A9';\nconst via = '0xF608FA64c4fF8aDdbEd106E69f3459effb4bC3D1';\nconst viaType = 'Gnosis Safe'; // or 'Gnosis Multisig', or 'EOA'\nconst contract = { network: 'rinkeby', address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E' };\nconst newImplementationAbi = '[...]';\nawait client.proposeUpgrade({ newImplementation, newImplementationAbi, via, viaType }, contract);\n```\n\n### Pause proposals\n\nTo create `pause` and `unpause` action proposals, you need to provide the contract network and address, as well as the multisig that will be used for approving it. Defender takes care of the rest:\n\n```js\nconst contract = { network: 'rinkeby', address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E' };\n\n// Create a pause proposal\nawait client.proposePause({ via: '0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b', viaType: 'Gnosis Safe' }, contract);\n\n// Create an unpause proposal\nawait client.proposeUnpause({ via: '0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b', viaType: 'Gnosis Safe' }, contract);\n```\n\nNote that for `pause` and `unpause` proposals to work, your contract ABI must include corresponding `pause()` and `unpause()` functions.\n\n### Batch proposals\n\nTo create a `batch` proposal, you'll need to provide the contracts to use as an array in the `contract` param, and specify a list of `steps` to execute, in which you provide the information of execution for each function you'll call.\n\n```js\nconst ERC20Token = '0x24B5C627cF54582F93eDbcF6186989227400Ac75';\nconst RolesContract = '0xa50d145697530e8fef3F59a9643c6E9992d0f30D';\n\nconst contracts = [\n  {\n    address: ERC20Token,\n    name: 'ERC20 Token',\n    network: 'goerli',\n    abi: '[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]',\n  },\n  {\n    address: RolesContract,\n    network: 'goerli',\n    name: 'Roles Contract',\n    abi: '[{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]',\n  },\n];\n\nconst safeAddress = '0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b';\n\nconst steps = [\n  {\n    contractId: `goerli-${ERC20Token}`,\n    targetFunction: {\n      name: 'mint',\n      inputs: [{ type: 'uint256', name: 'amount' }],\n    },\n    functionInputs: ['999'],\n    type: 'custom',\n  },\n  {\n    contractId: `goerli-${ERC20Token}`,\n    targetFunction: {\n      name: 'transfer',\n      inputs: [\n        { type: 'address', name: 'to' },\n        { type: 'uint256', name: 'amount' },\n      ],\n    },\n    functionInputs: [safeAddress, '999'],\n    type: 'custom',\n  },\n  {\n    contractId: `goerli-${RolesContract}`,\n    metadata: {\n      action: 'grantRole',\n      role: '0x0000000000000000000000000000000000000000000000000000000000000000',\n      account: safeAddress,\n    },\n    type: 'access-control',\n  },\n];\n\nawait client.createProposal({\n  contract: contracts,\n  title: 'Batch test',\n  description: 'Mint, transfer and modify access control',\n  type: 'batch',\n  via: safeAddress,\n  viaType: 'Gnosis Safe',\n  metadata: {}, // Required field but empty\n  steps,\n});\n```\n\n### List proposals\n\nYou can list all proposals:\n\n```js\nconst proposals = await client.listProposals();\n```\n\nYou can filter your active proposals by `isActive` property present on each proposal in the list response. By default, only unarchived proposals are returned, but you can override this by adding an `includeArchived: true` option in the call.\n\n### Retrieve a proposal\n\nYou can retrieve a proposal given its contract and proposal ids:\n\n```js\nawait client.getProposal(contractId, proposalId);\n```\n\n### Archiving proposals\n\nYou can archive or unarchive a proposal given its contract and proposal ids:\n\n```js\nawait client.archiveProposal(contractId, proposalId);\nawait client.unarchiveProposal(contractId, proposalId);\n```\n\n### Simulate proposals\n\nYou can simulate an existing proposal. The results of a simulation (`SimulationResponse`) will be stored and can be retrieved with the getProposalSimulation endpoint:\n\n```js\nconst proposal = await client.getProposal(contractId, proposalId);\n\n// import the ABI and create an ethers interface\nconst contractInterface = new utils.Interface(contractABI);\n\n// encode function data\nconst data = contractInterface.encodeFunctionData(proposal.functionInterface.name, proposal.functionInputs);\n\nconst simulation = await client.simulateProposal(\n  proposal.contractId, // contractId\n  proposal.proposalId, // proposalId\n  {\n    transactionData: {\n      // this is the default hardhat address\n      from: '0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266', // change this to impersonate the `from` address\n      type: 'function-call', // or 'send-funds'\n      data,\n      to: proposal.contract.address,\n      value: proposal.metadata.sendValue,\n    },\n    // default to latest finalized block,\n    // can be up to 100 blocks ahead of current block,\n    // does not support previous blocks\n    blockNumber: undefined,\n  },\n);\n```\n\n> Note that a simulation may fail due to a number of reasons, such as network congestion, unstable providers or hitting a quota limitation. We would advise you to track the response code to assure a successful response was returned. If a transaction was reverted with a reason string, this can be obtained from the response object under `response.meta.returnString`. A transaction revert can be tracked from `response.meta.reverted`.\n\n### Retrieve a proposal simulation\n\nYou can also retrieve existing simulations for a proposal:\n\n```js\nconst proposal = await client.getProposal(contractId, proposalId);\n\nconst simulation = await client.getProposalSimulation(\n  proposal.contractId, // contractId\n  proposal.proposalId, // proposalId\n);\n```\n\n## Adding Contracts\n\nIf you create a new proposal for a Contract that has not yet been added to Defender Admin, it will be automatically added with an autogenerated name and an empty ABI. You can optionally control these values by providing values for them in the `contract` object of the proposal:\n\n```js\nconst contract = {\n  network: 'rinkeby',\n  address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E',\n  name: 'My contract', // Name of the contract if it is created along with this proposal\n  abi: '[...]', // ABI to set for this contract if it is created\n};\nawait client.proposeUpgrade({ newImplementation }, contract);\n```\n\nAlternatively, you can add any contract explicitly by using the `addContract` method, and setting network, address, name, natspec and ABI. The same method can be used to update the contract's name or ABI.\n\n```js\nawait client.addContract({\n  network: 'rinkeby',\n  address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E',\n  name: 'My contract',\n  abi: '[...]',\n  natSpec: '{devdoc:{...}, userdoc: {...}}',\n});\n```\n\nYou can also list all contracts in your Defender Admin dashboard via `listContracts`.\n\n## FAQ\n\n**Can I use this package in a browser?**\n\nThis package is not designed to be used in a browser environment. Using this package requires sensitive API KEYS that should not be exposed publicly.\n","readmeFilename":"README.md","_id":"defender-admin-client@1.38.0-rc.1","_nodeVersion":"18.12.1","_npmVersion":"lerna/3.22.1/node@v18.12.1+arm64 (darwin)","dist":{"integrity":"sha512-WVmRD+CCu2Ltt2uSwiGq88p0lHpbrVqXBN+aXjwUM3FM5MtyjCX723EM/K2XkiVQOlhbp92xP30RwwvlGZpcQw==","shasum":"515ce057a7e5142c9271b250b98297ac62af61bd","tarball":"https://registry.npmjs.org/defender-admin-client/-/defender-admin-client-1.38.0-rc.1.tgz","fileCount":27,"unpackedSize":131637,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHTnptv1sekE34JmvjN3RXg4vxVYi5pY8r/1Xm4uKI7wAiA9eS8J35sz8GfP4WM+KIHP04JXeXCpn3XnOyFYIvFV6w=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjibkzACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpxqBAAmSxWfqGjzFn7TuH0nLOZ5wqIEmcnhBtDNz6Ti5RI/i4ThskL\r\nsz7oVjewmicbwkhEfu+VKTX5WcEnxBFFbloMUeGohVEnsQxCZUgi697ugffG\r\nc1DPlqfPkzzj3C1iW2tzaGunNpgzGE1a/06DQW68PW9hQ2PLHvRYT47uTgKf\r\npOF5d2rAbdGgtfR2CLHLw0V4oi/GN5CRAZwHw8rf7fMY8FoLOT414SE0mzTv\r\nNa5zV1FB4G1ms1ZWlvhoAYMoTEj6zSoAHpe2PB4/AKf9EVJcIjM4r6yh/RdC\r\n2ojPgnwkgk66lBw5Ocm1pcQcmZ/wo0viDKcuVIHnMvza11UCPMjReo+2rRLo\r\nh/na4Gvyg+n97LEM1CdJE/ueNECCYfXLxvfgC73+DV5c+lI5KreuLO5JANkU\r\n3b54l6VQ5cFei4HSwlso+JsvT8RPoxSyy8lMYYihYbu7/2imq6jjinjO8mvn\r\necTKzuqaLxzGWyvwJhd+9DzCKQ56i7jpkNKqw55LAyeQnL/4UcSfL9U+XXEb\r\nyvtxtC/DhJPbqlBK+JoK+fyLPJ/K2JecHDWydWvDrzvU0PSvQA0WFBHSlcya\r\nDWN9P2Z4oYgwnu8f4l7z25hpHDgcjPlsiGD9da8wgNVzX/Ry3pJWvDNX5qbs\r\n4Pzzx07iOTujiR+0wDZBMA+O0Memi9Hi6fI=\r\n=QDJ6\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"zeljkox","email":"zeljko89markovic@gmail.com"},"directories":{},"maintainers":[{"name":"zeljkox","email":"zeljko89markovic@gmail.com"},{"name":"frangio","email":"frangio.1@gmail.com"},{"name":"ernestognw","email":"ernesto@openzeppelin.com"},{"name":"bjmrq","email":"bmarquiscom@gmail.com"},{"name":"mok0230","email":"mok0230@protonmail.com"},{"name":"tirumerla","email":"tirumerla@gmail.com"},{"name":"dylkil","email":"dylankilkenny95@gmail.com"},{"name":"namis","email":"me@nami.sh"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/defender-admin-client_1.38.0-rc.1_1669970227697_0.8474756744185381"},"_hasShrinkwrap":false,"deprecated":"defender-admin-client is deprecated, please install @openzeppelin/defender-admin-client"},"1.38.0-rc.2":{"name":"defender-admin-client","version":"1.38.0-rc.2","description":"Defender Admin acts as an interface to manage your smart contract project through one or more secure multi-signature contracts. Defender Admin holds no control at all over your system, which is fully controlled by the keys of the signers.","main":"./lib/index.js","types":"./lib/index.d.ts","scripts":{"build":"rm -rf lib && tsc","test":"yarn test:unit","test:unit":"jest --verbose --passWithNoTests","watch":"tsc -w","prepare":"yarn build"},"author":{"name":"Santiago Palladino","email":"santiago@openzeppelin.com"},"license":"MIT","dependencies":{"axios":"^0.21.2","defender-base-client":"1.38.0-rc.2","ethers":"^5.7.2","lodash":"^4.17.19","node-fetch":"^2.6.0"},"gitHead":"57592d10541364aaba9385c889414b077e73f853","readme":"# Defender Admin Client\n\nDefender Admin acts as an interface to manage your smart contract project through one or more secure multi-signature contracts. Defender Admin holds no control at all over your system, which is fully controlled by the keys of the signers.\n\nTo interact with your contracts, you create _proposals_ that need to be reviewed and approved by the other members of the multi-signature wallets. These proposals can be created directly in the Defender web application, or using this library. You can also rely on this library to add your contracts to the Defender Admin dashboard.\n\n## Install\n\n```bash\nnpm install defender-admin-client\n```\n\n```bash\nyarn add defender-admin-client\n```\n\n## Usage\n\nStart by creating a new _Team API Key_ in Defender, and granting it the capability to create new proposals. Use the newly created API key to initialize an instance of the Admin client.\n\n```js\nconst { AdminClient } = require('defender-admin-client');\nconst client = new AdminClient({ apiKey: API_KEY, apiSecret: API_SECRET });\n```\n\n### Action proposals\n\nTo create a `custom` action proposal, you need to provide the function interface (which you can extract from the contract's ABI), its inputs, and the multisig that will be used for approving it:\n\n```js\nawait client.createProposal({\n  contract: { address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E', network: 'rinkeby' }, // Target contract\n  title: 'Adjust fee to 10%', // Title of the proposal\n  description: 'Adjust the contract fee collected per action to 10%', // Description of the proposal\n  type: 'custom', // Use 'custom' for custom admin actions\n  functionInterface: { name: 'setFee', inputs: [{ type: 'uint256', name: 'fee' }] }, // Function ABI\n  functionInputs: ['10'], // Arguments to the function\n  via: '0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b', // Address to execute proposal\n  viaType: 'Gnosis Safe', // 'Gnosis Safe', 'Gnosis Multisig', or 'EOA'\n});\n```\n\nYou can also optionally set the `simulate` flag as part of the `createProposal` request (as long as this is not a batch proposal) to simulate the proposal within the same request. You can override simulation parameters by setting the `overrideSimulationOpts` property, which is a `SimulationRequest` object.\n\n```js\nconst proposalWithSimulation = await client.createProposal({\n  contract: {\n    address: '0xA91382E82fB676d4c935E601305E5253b3829dCD',\n    network: 'mainnet',\n    // provide abi OR overrideSimulationOpts.transactionData.data\n    abi: JSON.stringify(contractABI),\n  },\n  title: 'Flash',\n  description: 'Call the Flash() function',\n  type: 'custom',\n  metadata: {\n    sendTo: '0xA91382E82fB676d4c935E601305E5253b3829dCD',\n    sendValue: '10000000000000000',\n    sendCurrency: {\n      name: 'Ethereum',\n      symbol: 'ETH',\n      decimals: 18,\n      type: 'native',\n    },\n  },\n  functionInterface: { name: 'flash', inputs: [] },\n  functionInputs: [],\n  via: '0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266',\n  viaType: 'EOA',\n  // set simulate to true\n  simulate: true,\n  // optional\n  overrideSimulationOpts: {\n    transactionData: {\n      // or instead of ABI, you can provide data\n      data: '0xd336c82d',\n    },\n  },\n});\n```\n\n#### Issuing DELEGATECALLs\n\nWhen invoking a function via a Gnosis Safe, it's possible to call it via a `DELEGATECALL` instruction instead of a regular call. This has the effect of executing the code in the called contract _in the context of the multisig_, meaning any operations that affect storage will affect the multisig, and any calls to additional contracts will be executed as if the `msg.sender` were the multisig. To do this, add a `metadata` parameter with the value `{ operationType: 'delegateCall' }` to your `createProposal` call:\n\n```js\nawait client.createProposal({\n  // ... Include all parameters from the example above\n  via: '0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b', // Multisig address\n  viaType: 'Gnosis Safe', // Must be Gnosis Safe to handle delegate calls\n  metadata: { operationType: 'delegateCall' }, // Issue a delegatecall instead of a regular call\n});\n```\n\nNote that this can potentially brick your multisig, if the contract you delegatecall into accidentally modifies the multisig's storage, rendering it unusable. Make sure you understand the risks before issuing a delegatecall.\n\n### Upgrade proposals\n\nTo create an `upgrade` action proposal, provide the proxy contract network and address, along with the new implementation address, and Defender will automatically resolve the rest (note that if no newImplementationAbi is provided the previous implementation ABI will be assumed for the proposal):\n\n```js\nconst newImplementation = '0x3E5e9111Ae8eB78Fe1CC3bb8915d5D461F3Ef9A9';\nconst newImplementationAbi = '[...]';\nconst contract = { network: 'rinkeby', address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E' };\nawait client.proposeUpgrade({ newImplementation, newImplementationAbi }, contract);\n```\n\nIf your proxies do not implement the [EIP1967 admin slot](https://eips.ethereum.org/EIPS/eip-1967#admin-address), you will need to provide either the [`ProxyAdmin` contract](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.0.0/contracts/proxy/transparent/ProxyAdmin.sol) or the Account with rights to execute the upgrade, as shown below.\n\n#### Explicit ProxyAdmin\n\n```js\nconst newImplementation = '0x3E5e9111Ae8eB78Fe1CC3bb8915d5D461F3Ef9A9';\nconst proxyAdmin = '0x2fC100f1BeA4ACCD5dA5e5ed725D763c90e8ca96';\nconst newImplementationAbi = '[...]';\nconst contract = { network: 'rinkeby', address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E' };\nawait client.proposeUpgrade({ newImplementation, newImplementationAbi, proxyAdmin }, contract);\n```\n\n#### Explicit owner account\n\n```js\nconst newImplementation = '0x3E5e9111Ae8eB78Fe1CC3bb8915d5D461F3Ef9A9';\nconst via = '0xF608FA64c4fF8aDdbEd106E69f3459effb4bC3D1';\nconst viaType = 'Gnosis Safe'; // or 'Gnosis Multisig', or 'EOA'\nconst contract = { network: 'rinkeby', address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E' };\nconst newImplementationAbi = '[...]';\nawait client.proposeUpgrade({ newImplementation, newImplementationAbi, via, viaType }, contract);\n```\n\n### Pause proposals\n\nTo create `pause` and `unpause` action proposals, you need to provide the contract network and address, as well as the multisig that will be used for approving it. Defender takes care of the rest:\n\n```js\nconst contract = { network: 'rinkeby', address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E' };\n\n// Create a pause proposal\nawait client.proposePause({ via: '0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b', viaType: 'Gnosis Safe' }, contract);\n\n// Create an unpause proposal\nawait client.proposeUnpause({ via: '0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b', viaType: 'Gnosis Safe' }, contract);\n```\n\nNote that for `pause` and `unpause` proposals to work, your contract ABI must include corresponding `pause()` and `unpause()` functions.\n\n### Batch proposals\n\nTo create a `batch` proposal, you'll need to provide the contracts to use as an array in the `contract` param, and specify a list of `steps` to execute, in which you provide the information of execution for each function you'll call.\n\n```js\nconst ERC20Token = '0x24B5C627cF54582F93eDbcF6186989227400Ac75';\nconst RolesContract = '0xa50d145697530e8fef3F59a9643c6E9992d0f30D';\n\nconst contracts = [\n  {\n    address: ERC20Token,\n    name: 'ERC20 Token',\n    network: 'goerli',\n    abi: '[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]',\n  },\n  {\n    address: RolesContract,\n    network: 'goerli',\n    name: 'Roles Contract',\n    abi: '[{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]',\n  },\n];\n\nconst safeAddress = '0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b';\n\nconst steps = [\n  {\n    contractId: `goerli-${ERC20Token}`,\n    targetFunction: {\n      name: 'mint',\n      inputs: [{ type: 'uint256', name: 'amount' }],\n    },\n    functionInputs: ['999'],\n    type: 'custom',\n  },\n  {\n    contractId: `goerli-${ERC20Token}`,\n    targetFunction: {\n      name: 'transfer',\n      inputs: [\n        { type: 'address', name: 'to' },\n        { type: 'uint256', name: 'amount' },\n      ],\n    },\n    functionInputs: [safeAddress, '999'],\n    type: 'custom',\n  },\n  {\n    contractId: `goerli-${RolesContract}`,\n    metadata: {\n      action: 'grantRole',\n      role: '0x0000000000000000000000000000000000000000000000000000000000000000',\n      account: safeAddress,\n    },\n    type: 'access-control',\n  },\n];\n\nawait client.createProposal({\n  contract: contracts,\n  title: 'Batch test',\n  description: 'Mint, transfer and modify access control',\n  type: 'batch',\n  via: safeAddress,\n  viaType: 'Gnosis Safe',\n  metadata: {}, // Required field but empty\n  steps,\n});\n```\n\n### List proposals\n\nYou can list all proposals:\n\n```js\nconst proposals = await client.listProposals();\n```\n\nYou can filter your active proposals by `isActive` property present on each proposal in the list response. By default, only unarchived proposals are returned, but you can override this by adding an `includeArchived: true` option in the call.\n\n### Retrieve a proposal\n\nYou can retrieve a proposal given its contract and proposal ids:\n\n```js\nawait client.getProposal(contractId, proposalId);\n```\n\n### Archiving proposals\n\nYou can archive or unarchive a proposal given its contract and proposal ids:\n\n```js\nawait client.archiveProposal(contractId, proposalId);\nawait client.unarchiveProposal(contractId, proposalId);\n```\n\n### Simulate proposals\n\nYou can simulate an existing proposal. The results of a simulation (`SimulationResponse`) will be stored and can be retrieved with the getProposalSimulation endpoint:\n\n```js\nconst proposal = await client.getProposal(contractId, proposalId);\n\n// import the ABI and create an ethers interface\nconst contractInterface = new utils.Interface(contractABI);\n\n// encode function data\nconst data = contractInterface.encodeFunctionData(proposal.functionInterface.name, proposal.functionInputs);\n\nconst simulation = await client.simulateProposal(\n  proposal.contractId, // contractId\n  proposal.proposalId, // proposalId\n  {\n    transactionData: {\n      // this is the default hardhat address\n      from: '0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266', // change this to impersonate the `from` address\n      type: 'function-call', // or 'send-funds'\n      data,\n      to: proposal.contract.address,\n      value: proposal.metadata.sendValue,\n    },\n    // default to latest finalized block,\n    // can be up to 100 blocks ahead of current block,\n    // does not support previous blocks\n    blockNumber: undefined,\n  },\n);\n```\n\n> Note that a simulation may fail due to a number of reasons, such as network congestion, unstable providers or hitting a quota limitation. We would advise you to track the response code to assure a successful response was returned. If a transaction was reverted with a reason string, this can be obtained from the response object under `response.meta.returnString`. A transaction revert can be tracked from `response.meta.reverted`.\n\n### Retrieve a proposal simulation\n\nYou can also retrieve existing simulations for a proposal:\n\n```js\nconst proposal = await client.getProposal(contractId, proposalId);\n\nconst simulation = await client.getProposalSimulation(\n  proposal.contractId, // contractId\n  proposal.proposalId, // proposalId\n);\n```\n\n## Adding Contracts\n\nIf you create a new proposal for a Contract that has not yet been added to Defender Admin, it will be automatically added with an autogenerated name and an empty ABI. You can optionally control these values by providing values for them in the `contract` object of the proposal:\n\n```js\nconst contract = {\n  network: 'rinkeby',\n  address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E',\n  name: 'My contract', // Name of the contract if it is created along with this proposal\n  abi: '[...]', // ABI to set for this contract if it is created\n};\nawait client.proposeUpgrade({ newImplementation }, contract);\n```\n\nAlternatively, you can add any contract explicitly by using the `addContract` method, and setting network, address, name, natspec and ABI. The same method can be used to update the contract's name or ABI.\n\n```js\nawait client.addContract({\n  network: 'rinkeby',\n  address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E',\n  name: 'My contract',\n  abi: '[...]',\n  natSpec: '{devdoc:{...}, userdoc: {...}}',\n});\n```\n\nYou can also list all contracts in your Defender Admin dashboard via `listContracts`.\n\n## FAQ\n\n**Can I use this package in a browser?**\n\nThis package is not designed to be used in a browser environment. Using this package requires sensitive API KEYS that should not be exposed publicly.\n","readmeFilename":"README.md","_id":"defender-admin-client@1.38.0-rc.2","_nodeVersion":"18.12.1","_npmVersion":"lerna/3.22.1/node@v18.12.1+arm64 (darwin)","dist":{"integrity":"sha512-jJHQE9z36ZTemyCEyRBCNt1SqOR+0Wz7DIfXI1hgoMbSFNfwCLzlL9vBSqXhHYJtaJL6mgXH4nX3u7RnFeV6wA==","shasum":"2579717bb7765cb23ffb6349802c88b5f9947980","tarball":"https://registry.npmjs.org/defender-admin-client/-/defender-admin-client-1.38.0-rc.2.tgz","fileCount":27,"unpackedSize":174813,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCID4TLY+znGXEj7w0w8R5aB8sQ25dVMg0mzNg8xaXy4u4AiAHHXawzhbNx4X3FezTXHPIlcNqPvJ1ffPAw5lMILfCGg=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjkceiACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoEsQ/+Iur9EchCdPhqdpI+6RWnrwMyBTTDqbDr0lepZ9SjURdWh8hw\r\nubBeDwtaf25BhS3b6sq7tPfzYEpw0m7UPkGZTdXuIIK5WfekAbiNTel1Cf3K\r\njn+Bz4702NB86OXczIGHj1ipiAvLqf0hcgikGQqZSOAtyFzpqt6V32dJlqnC\r\n1L9INLWyTYcuDxBvIR2lR92wXTJf93pcOekq6sgRLLLuaTbIctXLoafiSQOC\r\nNbwJlrE10a5sseK/A/HKf8eaRBOkNEeBA8ZjVQwJEDIR9mxQhPUQiXU+bmW+\r\nP+/9b7DZlcdXxxFdUscPJSe2O8IYoAgsCJid3aVQ9HrtK7C9y+/LJ4JvatOk\r\nWT5Cow18GzC3EBt1ExRd9t6uXHqig8+WKz+VWMRKHcDCNQamDiIrgffA9AT3\r\nb0OWhMeo3R/d5ZOVlVxonXVlq0kHY3UX/jPUd05FLYSewza4wBePJbI0t0wa\r\nP8y8MC+X6i31wQ0kdbm41hxOAqawGTfhDHh0KqirZ876t1sG8BQtvyEbLtoL\r\nzqpIjWDgd3/gyBDxjngYyAW4aBjNw3FXKr3jY0nnpJ4Lhw4x6GLGZZf/bJn9\r\nQIydMwftq3SmXD/KbD0B0TNrdSttr++jRuzGQbP4CQvfxylIkyQP0HpMzwUA\r\n+T+gklJQaOI3sCs/ZjTHOW6rlIG8zmcWTFU=\r\n=fPzv\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"zeljkox","email":"zeljko89markovic@gmail.com"},"directories":{},"maintainers":[{"name":"zeljkox","email":"zeljko89markovic@gmail.com"},{"name":"frangio","email":"frangio.1@gmail.com"},{"name":"ernestognw","email":"ernesto@openzeppelin.com"},{"name":"bjmrq","email":"bmarquiscom@gmail.com"},{"name":"mok0230","email":"mok0230@protonmail.com"},{"name":"tirumerla","email":"tirumerla@gmail.com"},{"name":"dylkil","email":"dylankilkenny95@gmail.com"},{"name":"namis","email":"me@nami.sh"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/defender-admin-client_1.38.0-rc.2_1670498210680_0.14597285508638325"},"_hasShrinkwrap":false,"deprecated":"defender-admin-client is deprecated, please install @openzeppelin/defender-admin-client"},"1.38.0":{"name":"defender-admin-client","version":"1.38.0","description":"Defender Admin acts as an interface to manage your smart contract project through one or more secure multi-signature contracts. Defender Admin holds no control at all over your system, which is fully controlled by the keys of the signers.","main":"./lib/index.js","types":"./lib/index.d.ts","scripts":{"build":"rm -rf lib && tsc","test":"yarn test:unit","test:unit":"jest --verbose --passWithNoTests","watch":"tsc -w","prepare":"yarn build"},"author":{"name":"Santiago Palladino","email":"santiago@openzeppelin.com"},"license":"MIT","dependencies":{"axios":"^0.21.2","defender-base-client":"1.38.0","ethers":"^5.7.2","lodash":"^4.17.19","node-fetch":"^2.6.0"},"gitHead":"b0af2e95b86c888501e3bd6d3acaeebd9a3de99f","_id":"defender-admin-client@1.38.0","_nodeVersion":"16.15.0","_npmVersion":"lerna/3.22.1/node@v16.15.0+arm64 (darwin)","dist":{"integrity":"sha512-uXrZNSIqMs81CY/9MMrAtN6IrPf+BzwHFgs2yOCYX56zQJISeg/Lzc+jYuJMna+zzzHTx35PM+f51Ozp4yqyRg==","shasum":"f8f85f975663f527b51cba1ffe318b20e70a1669","tarball":"https://registry.npmjs.org/defender-admin-client/-/defender-admin-client-1.38.0.tgz","fileCount":27,"unpackedSize":174796,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBJ7+qyUHlLHvmhtlNoTKQtCyI7fBhz9yeeBciAj6qlZAiB24ApAPogDCIQDJymwhAN+PdCAknAMIx5uKjMbxaw+Pw=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjxpr9ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmrf9A/9H5T2yozqtW4nQjHrEDVP8F49CxFPpbBqpmRYlCv3l74nCyo4\r\nGeY2c2QjsT8ISEZu5w9uon0ukOAMOBewAgNP83LqTB2QVAlvxBnWNbjoEj5M\r\nulIouBebPr1XjnwC13TCz3GV8JTV6l6Fddz38CbXChNHtlR7LihiQciDfxi9\r\nrRgQkQ9WEVoZhZf+qpoSYqMVFHS5YqlCQTpqDtUPaXPP9+Uyh5SneKp75B4y\r\n3y6GkN9VWr1xa2C7qthJsz6I+zFvu+8dwp0Mbx3h7B2UmRJRrVAlrYcWYfdJ\r\nqvsltSqIU5nMBoZG13/H9A91ZFBndJIg2r7uOocrACvmrPwWQfn6Ag0YcAUa\r\nDECLF3zLLGScCY8I7PvkbpDAlJ0ShoFZ383CC5f54zz/ocp5+AiKgVN/HaLG\r\nYTm+DsnZgDipa/iy7p2NWLQ0gLa50wLVEhsdUFbLupwebWQd+UGO75l59j8e\r\nLKUArJmIWhZAdj/XM5T5HFPTzmMkMPy0CrGmNnlwiB6iuueOUEGQ4ykaVudq\r\nVgxcYU4T3t68m3PacEkHQY6BFS9l77aJEu0/Rio3jUZWCenhKIDmkUUKjk68\r\n2X4XQDmI4CnJdWu9UWN0VvadGiLv/vxb+9tjN4I5dG0mhxASTHszOwBrWVwV\r\nlFOXNWbf9DIDQ+7EbzSvBhrNiqefC7m4EXI=\r\n=uYI6\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"mok0230","email":"mok0230@protonmail.com"},"directories":{},"maintainers":[{"name":"zeljkox","email":"zeljko89markovic@gmail.com"},{"name":"frangio","email":"frangio.1@gmail.com"},{"name":"ernestognw","email":"ernesto@openzeppelin.com"},{"name":"bjmrq","email":"bmarquiscom@gmail.com"},{"name":"mok0230","email":"mok0230@protonmail.com"},{"name":"tirumerla","email":"tirumerla@gmail.com"},{"name":"dylkil","email":"dylankilkenny95@gmail.com"},{"name":"namis","email":"me@nami.sh"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/defender-admin-client_1.38.0_1673960189447_0.6780265312425324"},"_hasShrinkwrap":false,"deprecated":"defender-admin-client is deprecated, please install @openzeppelin/defender-admin-client"},"1.39.0":{"name":"defender-admin-client","version":"1.39.0","description":"Defender Admin acts as an interface to manage your smart contract project through one or more secure multi-signature contracts. Defender Admin holds no control at all over your system, which is fully controlled by the keys of the signers.","main":"./lib/index.js","types":"./lib/index.d.ts","scripts":{"build":"rm -rf lib && tsc","test":"yarn test:unit","test:unit":"jest --verbose --passWithNoTests","watch":"tsc -w","prepare":"yarn build"},"author":{"name":"Santiago Palladino","email":"santiago@openzeppelin.com"},"license":"MIT","dependencies":{"axios":"^0.21.2","defender-base-client":"1.39.0","ethers":"^5.7.2","lodash":"^4.17.19","node-fetch":"^2.6.0"},"gitHead":"0c5b30c308fb0d898654f5069ef06bf91ea5a9d2","_id":"defender-admin-client@1.39.0","_nodeVersion":"16.15.0","_npmVersion":"lerna/3.22.1/node@v16.15.0+arm64 (darwin)","dist":{"integrity":"sha512-z+HXz7WQmaE8vivusfmMXEehKBXLMsr0GalKKeCTQnod3UTz0JSbPIU4Sw2RPuQQPtCv4oRePGyOy429q64KAw==","shasum":"6874af116ba69e640cef0ae6e5d74b17f2f1e307","tarball":"https://registry.npmjs.org/defender-admin-client/-/defender-admin-client-1.39.0.tgz","fileCount":27,"unpackedSize":174796,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCkatKwG1kOJ9SqBrnfiz+Am7+N9O5HcIwhwTlKStffeAIget2aBAfSiapZZa10YAmxwOcKN9EpyUr9xzTFjj8XC6g="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj68Z3ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmq+NxAApIu8TXNbzZvF2NEGuxzVkGVo/J+5rpiRxpe/l4swBDP1twlN\r\nsaqf3TP5/Oc/Gp4EemIxW0rQQbM6/6vMFS4H3oGLt1cKqdHCY0/hJu+e58iQ\r\npSaE/ZqDgfY8t+/WeaMsp9dYxT8Jw+8V5+qOK8svy+q41Ccih6UW2zOY9LHT\r\nZmJQzRyogEULY95V2j7h1eryZGAY8xrONZ9oZYsjCQMFTB1t7aWRXnfQINq9\r\nF6RCivYweVaaITc6grb8aD44nx7xm9qWoGVGB1SHCkGqT4VBaIT54zwaW7uo\r\nlvOT/wZuiNdbBQNWz4pk7e1/SYNM/yHY928Rd0l+8SUVMlHh2uL33GnXxUuM\r\nJB19S6N+mDWgLQghn2rJ8eea90Wrz0wl9tbz5ciPgCJpUJfkZDBtLOmkE+Jj\r\nW3Sp5lbt5wyLmgEFpoAaVOL3c1qXZ5/sHFqrH+Wa5Rp/Ne9KacsJ7yxNUBF/\r\nMYX/7St0cR7NZb2dFMwAr2MwVmY/jIeqvn0mDVy9L4YK1Kzq0CRwwmeFOjUz\r\nITsauWj9cDcZpUQL9ivAHu7Ta8E6Fe5k85U7QkmhQb2oVZUzRnIfZm5/xZgU\r\n8ouGaigvg2yVEnlGMARKSVddx0QBS2My9tsEySn/Ho+oGcllX1KgX4HghcW2\r\n/Cj8vBYl63GfaG5u2oXqoj+PCtM1dxm6gfI=\r\n=TkMT\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"mok0230","email":"mok0230@protonmail.com"},"directories":{},"maintainers":[{"name":"zeljkox","email":"zeljko89markovic@gmail.com"},{"name":"frangio","email":"frangio.1@gmail.com"},{"name":"ernestognw","email":"ernesto@openzeppelin.com"},{"name":"bjmrq","email":"bmarquiscom@gmail.com"},{"name":"mok0230","email":"mok0230@protonmail.com"},{"name":"tirumerla","email":"tirumerla@gmail.com"},{"name":"dylkil","email":"dylankilkenny95@gmail.com"},{"name":"namis","email":"me@nami.sh"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/defender-admin-client_1.39.0_1676396151244_0.7186820546226389"},"_hasShrinkwrap":false,"deprecated":"defender-admin-client is deprecated, please install @openzeppelin/defender-admin-client"},"1.40.0":{"name":"defender-admin-client","version":"1.40.0","description":"Defender Admin acts as an interface to manage your smart contract project through one or more secure multi-signature contracts. Defender Admin holds no control at all over your system, which is fully controlled by the keys of the signers.","main":"./lib/index.js","types":"./lib/index.d.ts","scripts":{"build":"rm -rf lib && tsc","test":"yarn test:unit","test:unit":"jest --verbose --passWithNoTests","watch":"tsc -w","prepare":"yarn build"},"author":{"name":"Santiago Palladino","email":"santiago@openzeppelin.com"},"license":"MIT","dependencies":{"axios":"^0.21.2","defender-base-client":"1.40.0","ethers":"^5.7.2","lodash":"^4.17.19","node-fetch":"^2.6.0"},"gitHead":"a94c80803241f95fbacab0c242e1e1879eeacf6a","_id":"defender-admin-client@1.40.0","_nodeVersion":"16.15.0","_npmVersion":"lerna/3.22.1/node@v16.15.0+arm64 (darwin)","dist":{"integrity":"sha512-9rk59t8YMP0K7i5ANkE7H4/O3m8XPap0zVt9bCVEsyipfq7nlZlo5WrypQ6d4Wg//5uTvXs+taPsvZyQTS777Q==","shasum":"a1aaabb869ce9dd386b75122cad3e354a69f2b92","tarball":"https://registry.npmjs.org/defender-admin-client/-/defender-admin-client-1.40.0.tgz","fileCount":27,"unpackedSize":176344,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDS9x6HrQ65ngHQ6gybJFgHUA6UwJWqiZAlSxjwz6IA3gIgFtipX0vAoR5IvWZT4MhpJAGRgaVWnoGMPIjUtyB10pg="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkJzE9ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmonZg//bugQa/3FJXQwCtM292JiB75FW7xmjuyCkUWDeZQP18TwHI2h\r\nDhqCvCIe5G0QSdff5P0AtdZONvdzcRImkbwugZlJ7eS/4kH3MkApoC3xX2PT\r\nHPOVil8jzyKvpmArfnVm2yjMIxdAtwx2Iu9rG+Qp8TLPdTZoQXkONqf33Zna\r\nutOeBKkF1BZsoykCDIDjTkwneRJCMv3F9bVzbzOyFI34jTYHhr63wPHgsX8J\r\nx9qA5K2ZpUDoATk8Na8B1sUkI49hjoQSXhj5BMDe1KncvFqYfBPS+bTtXWAG\r\nUBJIHpqgA6BOVLuppSMKXLbJwRyJQ5e3COhokgCBh65pMiuIrl4VoxWN3OFR\r\nzsXRTAr/NCc1ns2aUhg/R84nPq+GfJFQiMezSV6GCdBmgBvGp+spcA+v5KAe\r\nnw7u0qfxOAe4VBKnUNGWU0k8OOIlGgtAXXNUsCZFnFA7mYl4DzIFeUOM7Lg9\r\nJYDacaEKph/ioNFcgDiyy/+5MBO5vYTEApHYEdlFoVNOAwsQ7SIUlkNIh5HK\r\nos7fDAfwAQz91Lf9sqjCYJz+y575If2h9506IOViHrw3m4NlDVsdrTH8QMMi\r\nnKrIR+u0z7+0P6mPoFk6DaKLfKg34xQuLjakcpk+eyAO5c+ySIfULq8n8+DI\r\nRZ7+XKZRf9A6XXHuI5m8VG91GEtUVtzj5tI=\r\n=8GjR\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"mok0230","email":"mok0230@protonmail.com"},"directories":{},"maintainers":[{"name":"zeljkox","email":"zeljko89markovic@gmail.com"},{"name":"frangio","email":"frangio.1@gmail.com"},{"name":"ernestognw","email":"ernesto@openzeppelin.com"},{"name":"bjmrq","email":"bmarquiscom@gmail.com"},{"name":"mok0230","email":"mok0230@protonmail.com"},{"name":"tirumerla","email":"tirumerla@gmail.com"},{"name":"dylkil","email":"dylankilkenny95@gmail.com"},{"name":"namis","email":"me@nami.sh"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/defender-admin-client_1.40.0_1680290109015_0.7913125233854947"},"_hasShrinkwrap":false,"deprecated":"defender-admin-client is deprecated, please install @openzeppelin/defender-admin-client"},"1.41.0":{"name":"defender-admin-client","version":"1.41.0","description":"Defender Admin acts as an interface to manage your smart contract project through one or more secure multi-signature contracts. Defender Admin holds no control at all over your system, which is fully controlled by the keys of the signers.","main":"./lib/index.js","types":"./lib/index.d.ts","scripts":{"build":"rm -rf lib && tsc","test":"yarn test:unit","test:unit":"jest --verbose --passWithNoTests","watch":"tsc -w","prepare":"yarn build"},"author":{"name":"Santiago Palladino","email":"santiago@openzeppelin.com"},"license":"MIT","dependencies":{"axios":"^0.21.2","defender-base-client":"1.41.0","ethers":"^5.7.2","lodash":"^4.17.19","node-fetch":"^2.6.0"},"gitHead":"62ce93cc6cb316df7c44941c683ba59fbb0ae575","_id":"defender-admin-client@1.41.0","_nodeVersion":"16.15.0","_npmVersion":"lerna/3.22.1/node@v16.15.0+arm64 (darwin)","dist":{"integrity":"sha512-vNz2Ut2bNYsgJEvoBaA03fFotVkXf9dx3zgJr6JzcGrfvJVgjuzFEu/tTt62mxc0KxQOP3hvJVv3JqgfE5R1QA==","shasum":"35d6ab51187f322e83dd129a6f9bb35d001188c2","tarball":"https://registry.npmjs.org/defender-admin-client/-/defender-admin-client-1.41.0.tgz","fileCount":27,"unpackedSize":176344,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIB3+8svp1MZ4uigIMDcorWQnzpXebkyrjpPDSR5RJgMVAiArOsy/M8ryY3NIp1klViLkWva67aqUjhKrVLEahjIPdw=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkLJ6aACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpgcQ/+PKBxCA0xjHKxgUPeHvE+PsziRnb2+H/BJNI40nBWAe1hq+if\r\ndj+mj/4mBM06QuwVuPVFmyvhMeIRh8HbWIaYBL2Cmnxtt4ShTKT5TPkmSkEI\r\nrfLNESHXbBpKR+DWJWKK3FSCqNbj4pX8e+9JL/hLagX2uAITwQKtqSbmLsrn\r\nlq8dS3z8+rvASCLyGUy+CDUO/lNbifnDAPQ3XTfeNODXSw48RdCErjSC9sfx\r\nkT57AaS9a3Q6Sj7FdHuY/lo814NJDTQLo3cJW5if9RhrWIlUfd4FFru/ohAS\r\nCuhF0ZhNEe8J7KI4jO2lyCoKj64EttA7c8YiAkQXf1qeWe1wj4YF/8T7Dd2V\r\nRxK9gY4/YK0X72mB9YkuUFIp4+d4fLWoG7deSBlxXVk6qf8BMD4LOsRpBKNU\r\nCxm/cffiHu0xiodycqlHE6qlBek0uD9pJ8WiVAM9TXSHDqbHRIcz2unBzNvd\r\nFq8d4J+LdzqvysM5ONEFNICQ9oDj7QMYi5kfLAqjOaeAtstuzPI070AvZfrB\r\nrjTse2ZnVbKv+O2OE90+C5rFITI1z1VKy0dsGRehtBJRRceNI5baeAnPkiUx\r\nHmx6ZwNVLnpn/HXB1XxTYPUoDVHmWRRouObInwlqJ2UUP6498TVHa1UB8xBG\r\nXi7IOz8aDVGefNGyte8b56ZSQejINP2PDtw=\r\n=NEGf\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"mok0230","email":"dpmckeon@gmail.com"},"directories":{},"maintainers":[{"name":"zeljkox","email":"zeljko89markovic@gmail.com"},{"name":"frangio","email":"frangio.1@gmail.com"},{"name":"ernestognw","email":"ernesto@openzeppelin.com"},{"name":"bjmrq","email":"bmarquiscom@gmail.com"},{"name":"mok0230","email":"dpmckeon@gmail.com"},{"name":"tirumerla","email":"tirumerla@gmail.com"},{"name":"dylkil","email":"dylankilkenny95@gmail.com"},{"name":"namis","email":"me@nami.sh"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/defender-admin-client_1.41.0_1680645786745_0.9252001069517155"},"_hasShrinkwrap":false,"deprecated":"defender-admin-client is deprecated, please install @openzeppelin/defender-admin-client"},"1.42.0":{"name":"defender-admin-client","version":"1.42.0","description":"Defender Admin acts as an interface to manage your smart contract project through one or more secure multi-signature contracts. Defender Admin holds no control at all over your system, which is fully controlled by the keys of the signers.","main":"./lib/index.js","types":"./lib/index.d.ts","scripts":{"build":"rm -rf lib && tsc","test":"yarn test:unit","test:unit":"jest --verbose --passWithNoTests","watch":"tsc -w","prepare":"yarn build"},"author":{"name":"Santiago Palladino","email":"santiago@openzeppelin.com"},"license":"MIT","dependencies":{"axios":"^0.21.2","defender-base-client":"1.42.0","ethers":"^5.7.2","lodash":"^4.17.19","node-fetch":"^2.6.0"},"gitHead":"2ff4838a820afab095431d369b1fbfb2d4384b00","_id":"defender-admin-client@1.42.0","_nodeVersion":"16.15.0","_npmVersion":"lerna/3.22.1/node@v16.15.0+arm64 (darwin)","dist":{"integrity":"sha512-utcYDskZqvB51vQbMXZt12OY3coUSvJluBy/VX2IWWQPdNM7UbudxI2xvP5UEcDFe7dLK1ZlWvFD+2fB/c32kQ==","shasum":"4e78bb3f302b757f09c0491f4163f63eb4adfa5d","tarball":"https://registry.npmjs.org/defender-admin-client/-/defender-admin-client-1.42.0.tgz","fileCount":27,"unpackedSize":176344,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDxKzm+IkqGkkNaU6yCb7uu+1NPyU8c/N3Y6q0DHRjz4AiAU2iGXCUuZYgGuLN2/bqiofQ3VducHx/4JSK985kYSrg=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkODluACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpJrRAAhSwYNVPjjXku2meWFcnSlxV4GB+ZgtPrP7vQy/3TAIAOr0ju\r\nG7bqQU4jAPBg8+d2enxB1jsV4pbvyNQmiejdWomHTRhbnYsYuP48ilE1mryk\r\nUtSpS7mRq9/+i0Qweb0aCufbbk4kBL0tHCnR4uXlJQZBxVpL1Nx97sdjKylr\r\nTdutC/HEI61gVpNTjJUFp2HOOIuyczYpMm+TjXtEuF8REQOckRdZ3DIv3LeB\r\n0xhoW7ZrncolIDhTmBWnctjVGycFtZlS/ZBpn/N6Xp+VOrYo78XusCmrKx10\r\nRCKTd/+nVmGIs2kuieIi6R9rcO2bkScsonvIXW0YMvPhVHeMK9H9i2V0CNnw\r\nqjOj/qAXeAKGfQG1Oq4DTPOYCJAt4uk6bCCHF9y4I1dYZ16XW+shwt+O66vB\r\nGKKI7TyppxRqPJZe/m+pGub4RzBvxTDXlDgRtfkDAFqrLeESopZ0TkMiBbie\r\nbZa4YZllQokX/6M+hgJTFW3EF9+vY5ZmeeLQ/IkEayF3/e+Nw7KrXAkBgXJV\r\nWj7Euae8rs8br3mmYke24yXBgTcIVCggc2afLVnkSsgAWQ5ekQX43ho0hqCj\r\nEKoGr/ENuC69FmJnLLwUI8WkdI2yvyFLlMXWq+LwyWQ8pIFihpNFJ60Ac/a3\r\nf0oHslAxEWmM8ux991b1zP8kPFp1J70NJJQ=\r\n=xL/x\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"mok0230","email":"dpmckeon@gmail.com"},"directories":{},"maintainers":[{"name":"zeljkox","email":"zeljko89markovic@gmail.com"},{"name":"frangio","email":"frangio.1@gmail.com"},{"name":"ernestognw","email":"ernesto@openzeppelin.com"},{"name":"bjmrq","email":"bmarquiscom@gmail.com"},{"name":"mok0230","email":"dpmckeon@gmail.com"},{"name":"tirumerla","email":"tirumerla@gmail.com"},{"name":"dylkil","email":"dylankilkenny95@gmail.com"},{"name":"namis","email":"me@nami.sh"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/defender-admin-client_1.42.0_1681406318705_0.3141177300225484"},"_hasShrinkwrap":false,"deprecated":"defender-admin-client is deprecated, please install @openzeppelin/defender-admin-client"},"1.43.0":{"name":"defender-admin-client","version":"1.43.0","description":"Defender Admin acts as an interface to manage your smart contract project through one or more secure multi-signature contracts. Defender Admin holds no control at all over your system, which is fully controlled by the keys of the signers.","main":"./lib/index.js","types":"./lib/index.d.ts","scripts":{"build":"rm -rf lib && tsc","test":"yarn test:unit","test:unit":"jest --verbose --passWithNoTests","watch":"tsc -w","prepare":"yarn build"},"author":{"name":"Santiago Palladino","email":"santiago@openzeppelin.com"},"license":"MIT","dependencies":{"axios":"^0.21.2","defender-base-client":"1.43.0","ethers":"^5.7.2","lodash":"^4.17.19","node-fetch":"^2.6.0"},"gitHead":"96af273d61e364103bde3b264595b9b835ef2f28","_id":"defender-admin-client@1.43.0","_nodeVersion":"16.15.0","_npmVersion":"lerna/6.6.1/node@v16.15.0+arm64 (darwin)","dist":{"integrity":"sha512-EAB4dUkpcKjbLSHSTTw9KVmTrs8A36x+eVNt85Qr47ypilILtyNgjdqgvroda8syRicQBy28VBdUUWPJtVYAPA==","shasum":"a04dd2c01c57599175efc754d0ff315564d6f7fd","tarball":"https://registry.npmjs.org/defender-admin-client/-/defender-admin-client-1.43.0.tgz","fileCount":28,"unpackedSize":180823,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIG6aVAhFPg9CvoUkVbHPMRqE3H0f49d/HH/MKDgk1SZvAiBLv1EaV8715noBrGQ2pCf00tB6VkOGdkePEAjHd0ylOQ=="}]},"_npmUser":{"name":"mok0230","email":"dpmckeon@gmail.com"},"directories":{},"maintainers":[{"name":"zeljkox","email":"zeljko89markovic@gmail.com"},{"name":"frangio","email":"frangio.1@gmail.com"},{"name":"ernestognw","email":"ernesto@openzeppelin.com"},{"name":"bjmrq","email":"bmarquiscom@gmail.com"},{"name":"mok0230","email":"dpmckeon@gmail.com"},{"name":"tirumerla","email":"tirumerla@gmail.com"},{"name":"dylkil","email":"dylankilkenny95@gmail.com"},{"name":"namis","email":"me@nami.sh"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/defender-admin-client_1.43.0_1683318523733_0.8193487329450906"},"_hasShrinkwrap":false,"deprecated":"defender-admin-client is deprecated, please install @openzeppelin/defender-admin-client"},"1.44.0-rc.1":{"name":"defender-admin-client","version":"1.44.0-rc.1","description":"Defender Admin acts as an interface to manage your smart contract project through one or more secure multi-signature contracts. Defender Admin holds no control at all over your system, which is fully controlled by the keys of the signers.","main":"./lib/index.js","types":"./lib/index.d.ts","scripts":{"build":"rm -rf lib && tsc","test":"yarn test:unit","test:unit":"jest --verbose --passWithNoTests","watch":"tsc -w","prepare":"yarn build"},"author":{"name":"Santiago Palladino","email":"santiago@openzeppelin.com"},"license":"MIT","dependencies":{"axios":"^0.21.2","defender-base-client":"1.44.0-rc.1","ethers":"^5.7.2","lodash":"^4.17.19","node-fetch":"^2.6.0"},"gitHead":"33ea2a4b9f0193a31557c0bd6ca1e0c3d9b3d54e","readme":"# Defender Admin Client\n\nDefender Admin acts as an interface to manage your smart contract project through one or more secure multi-signature contracts. Defender Admin holds no control at all over your system, which is fully controlled by the keys of the signers.\n\nTo interact with your contracts, you create _proposals_ that need to be reviewed and approved by the other members of the multi-signature wallets. These proposals can be created directly in the Defender web application, or using this library. You can also rely on this library to add your contracts to the Defender Admin dashboard.\n\n## Install\n\n```bash\nnpm install defender-admin-client\n```\n\n```bash\nyarn add defender-admin-client\n```\n\n## Usage\n\nStart by creating a new _Team API Key_ in Defender, and granting it the capability to create new proposals. Use the newly created API key to initialize an instance of the Admin client.\n\n```js\nconst { AdminClient } = require('defender-admin-client');\nconst client = new AdminClient({ apiKey: API_KEY, apiSecret: API_SECRET });\n```\n\n### Action proposals\n\nTo create a `custom` action proposal, you need to provide the function interface (which you can extract from the contract's ABI), its inputs, and the multisig that will be used for approving it:\n\n```js\nawait client.createProposal({\n  contract: { address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E', network: 'goerli' }, // Target contract\n  title: 'Adjust fee to 10%', // Title of the proposal\n  description: 'Adjust the contract fee collected per action to 10%', // Description of the proposal\n  type: 'custom', // Use 'custom' for custom admin actions\n  functionInterface: { name: 'setFee', inputs: [{ type: 'uint256', name: 'fee' }] }, // Function ABI\n  functionInputs: ['10'], // Arguments to the function\n  via: '0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b', // Address to execute proposal\n  viaType: 'Gnosis Safe', // 'Gnosis Safe', 'Gnosis Multisig', or 'EOA'\n});\n```\n\nYou can also optionally set the `simulate` flag as part of the `createProposal` request (as long as this is not a batch proposal) to simulate the proposal within the same request. You can override simulation parameters by setting the `overrideSimulationOpts` property, which is a `SimulationRequest` object.\n\n```js\nconst proposalWithSimulation = await client.createProposal({\n  contract: {\n    address: '0xA91382E82fB676d4c935E601305E5253b3829dCD',\n    network: 'mainnet',\n    // provide abi OR overrideSimulationOpts.transactionData.data\n    abi: JSON.stringify(contractABI),\n  },\n  title: 'Flash',\n  description: 'Call the Flash() function',\n  type: 'custom',\n  metadata: {\n    sendTo: '0xA91382E82fB676d4c935E601305E5253b3829dCD',\n    sendValue: '10000000000000000',\n    sendCurrency: {\n      name: 'Ethereum',\n      symbol: 'ETH',\n      decimals: 18,\n      type: 'native',\n    },\n  },\n  functionInterface: { name: 'flash', inputs: [] },\n  functionInputs: [],\n  via: '0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266',\n  viaType: 'EOA',\n  // set simulate to true\n  simulate: true,\n  // optional\n  overrideSimulationOpts: {\n    transactionData: {\n      // or instead of ABI, you can provide data\n      data: '0xd336c82d',\n    },\n  },\n});\n```\n\n#### Issuing DELEGATECALLs\n\nWhen invoking a function via a Gnosis Safe, it's possible to call it via a `DELEGATECALL` instruction instead of a regular call. This has the effect of executing the code in the called contract _in the context of the multisig_, meaning any operations that affect storage will affect the multisig, and any calls to additional contracts will be executed as if the `msg.sender` were the multisig. To do this, add a `metadata` parameter with the value `{ operationType: 'delegateCall' }` to your `createProposal` call:\n\n```js\nawait client.createProposal({\n  // ... Include all parameters from the example above\n  via: '0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b', // Multisig address\n  viaType: 'Gnosis Safe', // Must be Gnosis Safe to handle delegate calls\n  metadata: { operationType: 'delegateCall' }, // Issue a delegatecall instead of a regular call\n});\n```\n\nNote that this can potentially brick your multisig, if the contract you delegatecall into accidentally modifies the multisig's storage, rendering it unusable. Make sure you understand the risks before issuing a delegatecall.\n\n### Upgrade proposals\n\nTo create an `upgrade` action proposal, provide the proxy contract network and address, along with the new implementation address, and Defender will automatically resolve the rest (note that if no newImplementationAbi is provided the previous implementation ABI will be assumed for the proposal):\n\n```js\nconst newImplementation = '0x3E5e9111Ae8eB78Fe1CC3bb8915d5D461F3Ef9A9';\nconst newImplementationAbi = '[...]';\nconst contract = { network: 'goerli', address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E' };\nawait client.proposeUpgrade({ newImplementation, newImplementationAbi }, contract);\n```\n\nIf your proxies do not implement the [EIP1967 admin slot](https://eips.ethereum.org/EIPS/eip-1967#admin-address), you will need to provide either the [`ProxyAdmin` contract](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.0.0/contracts/proxy/transparent/ProxyAdmin.sol) or the Account with rights to execute the upgrade, as shown below.\n\n#### Explicit ProxyAdmin\n\n```js\nconst newImplementation = '0x3E5e9111Ae8eB78Fe1CC3bb8915d5D461F3Ef9A9';\nconst proxyAdmin = '0x2fC100f1BeA4ACCD5dA5e5ed725D763c90e8ca96';\nconst newImplementationAbi = '[...]';\nconst contract = { network: 'goerli', address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E' };\nawait client.proposeUpgrade({ newImplementation, newImplementationAbi, proxyAdmin }, contract);\n```\n\n#### Explicit owner account\n\n```js\nconst newImplementation = '0x3E5e9111Ae8eB78Fe1CC3bb8915d5D461F3Ef9A9';\nconst via = '0xF608FA64c4fF8aDdbEd106E69f3459effb4bC3D1';\nconst viaType = 'Gnosis Safe'; // or 'Gnosis Multisig', or 'EOA'\nconst contract = { network: 'goerli', address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E' };\nconst newImplementationAbi = '[...]';\nawait client.proposeUpgrade({ newImplementation, newImplementationAbi, via, viaType }, contract);\n```\n\n### Pause proposals\n\nTo create `pause` and `unpause` action proposals, you need to provide the contract network and address, as well as the multisig that will be used for approving it. Defender takes care of the rest:\n\n```js\nconst contract = { network: 'goerli', address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E' };\n\n// Create a pause proposal\nawait client.proposePause({ via: '0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b', viaType: 'Gnosis Safe' }, contract);\n\n// Create an unpause proposal\nawait client.proposeUnpause({ via: '0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b', viaType: 'Gnosis Safe' }, contract);\n```\n\nNote that for `pause` and `unpause` proposals to work, your contract ABI must include corresponding `pause()` and `unpause()` functions.\n\n### Batch proposals\n\nTo create a `batch` proposal, you'll need to provide the contracts to use as an array in the `contract` param, and specify a list of `steps` to execute, in which you provide the information of execution for each function you'll call.\n\n```js\nconst ERC20Token = '0x24B5C627cF54582F93eDbcF6186989227400Ac75';\nconst RolesContract = '0xa50d145697530e8fef3F59a9643c6E9992d0f30D';\n\nconst contracts = [\n  {\n    address: ERC20Token,\n    name: 'ERC20 Token',\n    network: 'goerli',\n    abi: '[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]',\n  },\n  {\n    address: RolesContract,\n    network: 'goerli',\n    name: 'Roles Contract',\n    abi: '[{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]',\n  },\n];\n\nconst safeAddress = '0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b';\n\nconst steps = [\n  {\n    contractId: `goerli-${ERC20Token}`,\n    targetFunction: {\n      name: 'mint',\n      inputs: [{ type: 'uint256', name: 'amount' }],\n    },\n    functionInputs: ['999'],\n    type: 'custom',\n  },\n  {\n    contractId: `goerli-${ERC20Token}`,\n    targetFunction: {\n      name: 'transfer',\n      inputs: [\n        { type: 'address', name: 'to' },\n        { type: 'uint256', name: 'amount' },\n      ],\n    },\n    functionInputs: [safeAddress, '999'],\n    type: 'custom',\n  },\n  {\n    contractId: `goerli-${RolesContract}`,\n    metadata: {\n      action: 'grantRole',\n      role: '0x0000000000000000000000000000000000000000000000000000000000000000',\n      account: safeAddress,\n    },\n    type: 'access-control',\n  },\n];\n\nawait client.createProposal({\n  contract: contracts,\n  title: 'Batch test',\n  description: 'Mint, transfer and modify access control',\n  type: 'batch',\n  via: safeAddress,\n  viaType: 'Gnosis Safe',\n  metadata: {}, // Required field but empty\n  steps,\n});\n```\n\n### Relayer Execution Strategy\n\nTo use a relayer as an execution strategy you need to provide the `relayerId` as well as setting `via` to the relayer address and `viaType: 'Relayer'`\n\n```js\nconst contract = { network: 'goerli', address: '0xC73dAd1D9a356Ab2F3c6bC0049034aFe4B59DbB5' };\n\nconst proposal = await client.proposePause(\n  {\n    title: 'Pause contract',\n    via: '0x6b74fa33f198a65fe374c8146387f1653d190c7a',\n    viaType: 'Relayer',\n    relayerId: 'dfa8b9a9-0f88-4d38-892a-93e1f5a8d2a7',\n  },\n  contract,\n);\n```\n\n### List proposals\n\nYou can list all proposals:\n\n```js\nconst proposals = await client.listProposals();\n```\n\nYou can filter your active proposals by `isActive` property present on each proposal in the list response. By default, only unarchived proposals are returned, but you can override this by adding an `includeArchived: true` option in the call.\n\n### Retrieve a proposal\n\nYou can retrieve a proposal given its contract and proposal ids:\n\n```js\nawait client.getProposal(contractId, proposalId);\n```\n\n### Archiving proposals\n\nYou can archive or unarchive a proposal given its contract and proposal ids:\n\n```js\nawait client.archiveProposal(contractId, proposalId);\nawait client.unarchiveProposal(contractId, proposalId);\n```\n\n### Simulate proposals\n\nYou can simulate an existing proposal. The results of a simulation (`SimulationResponse`) will be stored and can be retrieved with the getProposalSimulation endpoint:\n\n```js\nconst proposal = await client.getProposal(contractId, proposalId);\n\n// import the ABI and create an ethers interface\nconst contractInterface = new utils.Interface(contractABI);\n\n// encode function data\nconst data = contractInterface.encodeFunctionData(proposal.functionInterface.name, proposal.functionInputs);\n\nconst simulation = await client.simulateProposal(\n  proposal.contractId, // contractId\n  proposal.proposalId, // proposalId\n  {\n    transactionData: {\n      // this is the default hardhat address\n      from: '0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266', // change this to impersonate the `from` address\n      type: 'function-call', // or 'send-funds'\n      data,\n      to: proposal.contract.address,\n      value: proposal.metadata.sendValue,\n    },\n    // default to latest finalized block,\n    // can be up to 100 blocks ahead of current block,\n    // does not support previous blocks\n    blockNumber: undefined,\n  },\n);\n```\n\n> Note that a simulation may fail due to a number of reasons, such as network congestion, unstable providers or hitting a quota limitation. We would advise you to track the response code to assure a successful response was returned. If a transaction was reverted with a reason string, this can be obtained from the response object under `response.meta.returnString`. A transaction revert can be tracked from `response.meta.reverted`.\n\n### Retrieve a proposal simulation\n\nYou can also retrieve existing simulations for a proposal:\n\n```js\nconst proposal = await client.getProposal(contractId, proposalId);\n\nconst simulation = await client.getProposalSimulation(\n  proposal.contractId, // contractId\n  proposal.proposalId, // proposalId\n);\n```\n\n## Adding Contracts\n\nIf you create a new proposal for a Contract that has not yet been added to Defender Admin, it will be automatically added with an autogenerated name and an empty ABI. You can optionally control these values by providing values for them in the `contract` object of the proposal:\n\n```js\nconst contract = {\n  network: 'goerli',\n  address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E',\n  name: 'My contract', // Name of the contract if it is created along with this proposal\n  abi: '[...]', // ABI to set for this contract if it is created\n};\nawait client.proposeUpgrade({ newImplementation }, contract);\n```\n\nAlternatively, you can add any contract explicitly by using the `addContract` method, and setting network, address, name, natspec and ABI. The same method can be used to update the contract's name or ABI.\n\n```js\nawait client.addContract({\n  network: 'goerli',\n  address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E',\n  name: 'My contract',\n  abi: '[...]',\n  natSpec: '{devdoc:{...}, userdoc: {...}}',\n});\n```\n\nYou can also list all contracts in your Defender Admin dashboard via `listContracts`.\n\n## FAQ\n\n**Can I use this package in a browser?**\n\nThis package is not designed to be used in a browser environment. Using this package requires sensitive API KEYS that should not be exposed publicly.\n","readmeFilename":"README.md","_id":"defender-admin-client@1.44.0-rc.1","_nodeVersion":"16.15.0","_npmVersion":"lerna/6.6.1/node@v16.15.0+arm64 (darwin)","dist":{"integrity":"sha512-sANuWiMpxjEDuLNbtj7tI17iXnHFXqAfsxJFM40GhUzIKwK6wTfXEBhb/mJniYWOWbftaoDTlU6qQwolXmN25Q==","shasum":"8c98a581e89943471dcd1e2b80aaa637a0b9f346","tarball":"https://registry.npmjs.org/defender-admin-client/-/defender-admin-client-1.44.0-rc.1.tgz","fileCount":28,"unpackedSize":180833,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBEDNDc0sBRKOQjcr/pqICEgOtZjF9d9IhA7o6X4kPFFAiEAuYGmK6c3QxdjHuiYVxXHZSs79P6wDCAlAgb/VEH+E/8="}]},"_npmUser":{"name":"mok0230","email":"dpmckeon@gmail.com"},"directories":{},"maintainers":[{"name":"zeljkox","email":"zeljko89markovic@gmail.com"},{"name":"frangio","email":"frangio.1@gmail.com"},{"name":"ernestognw","email":"ernesto@openzeppelin.com"},{"name":"bjmrq","email":"bmarquiscom@gmail.com"},{"name":"mok0230","email":"dpmckeon@gmail.com"},{"name":"tirumerla","email":"tirumerla@gmail.com"},{"name":"dylkil","email":"dylankilkenny95@gmail.com"},{"name":"namis","email":"me@nami.sh"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/defender-admin-client_1.44.0-rc.1_1683746847811_0.4839232259960953"},"_hasShrinkwrap":false,"deprecated":"defender-admin-client is deprecated, please install @openzeppelin/defender-admin-client"},"1.44.0":{"name":"defender-admin-client","version":"1.44.0","description":"Defender Admin acts as an interface to manage your smart contract project through one or more secure multi-signature contracts. Defender Admin holds no control at all over your system, which is fully controlled by the keys of the signers.","main":"./lib/index.js","types":"./lib/index.d.ts","scripts":{"build":"rm -rf lib && tsc","test":"yarn test:unit","test:unit":"jest --verbose --passWithNoTests","watch":"tsc -w","prepare":"yarn build"},"author":{"name":"Santiago Palladino","email":"santiago@openzeppelin.com"},"license":"MIT","dependencies":{"axios":"^0.21.2","defender-base-client":"1.44.0","ethers":"^5.7.2","lodash":"^4.17.19","node-fetch":"^2.6.0"},"gitHead":"bb8525ac2852496666cbe662f61805f6ccee5849","_id":"defender-admin-client@1.44.0","_nodeVersion":"16.14.0","_npmVersion":"lerna/6.6.1/node@v16.14.0+arm64 (darwin)","dist":{"integrity":"sha512-Uxt6Ca4/spH1KS5pCHJPc0X2TNVpXsah97mShu4E+WaV4Vhy2yaTjQ9ZpdoTBay0gADKZCBtIuVJ9YwBxiIOqA==","shasum":"74a6019d064460487148952f3a5d92d432b63f8c","tarball":"https://registry.npmjs.org/defender-admin-client/-/defender-admin-client-1.44.0.tgz","fileCount":28,"unpackedSize":180823,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHtOK/9kli4t1OIryrP2BzE8CIzSBh1WNPCqEPTkMpP0AiEA7ArkK4paxCiDa8TUXt94GwYjgMm2Miac6QwQ2xpntnA="}]},"_npmUser":{"name":"collins-oz","email":"collins.wekesa@openzeppelin.com"},"directories":{},"maintainers":[{"name":"zeljkox","email":"zeljko89markovic@gmail.com"},{"name":"frangio","email":"frangio.1@gmail.com"},{"name":"ernestognw","email":"ernesto@openzeppelin.com"},{"name":"bjmrq","email":"bmarquiscom@gmail.com"},{"name":"mok0230","email":"dpmckeon@gmail.com"},{"name":"tirumerla","email":"tirumerla@gmail.com"},{"name":"dylkil","email":"dylankilkenny95@gmail.com"},{"name":"namis","email":"me@nami.sh"},{"name":"collins-oz","email":"collins.wekesa@openzeppelin.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/defender-admin-client_1.44.0_1684154982008_0.9468289487421739"},"_hasShrinkwrap":false,"deprecated":"defender-admin-client is deprecated, please install @openzeppelin/defender-admin-client"},"1.38.1-rc.0":{"name":"defender-admin-client","version":"1.38.1-rc.0","description":"Defender Admin acts as an interface to manage your smart contract project through one or more secure multi-signature contracts. Defender Admin holds no control at all over your system, which is fully controlled by the keys of the signers.","main":"./lib/index.js","types":"./lib/index.d.ts","scripts":{"build":"rm -rf lib && tsc","test":"yarn test:unit","test:unit":"jest --verbose --passWithNoTests","watch":"tsc -w","prepare":"yarn build"},"author":{"name":"Santiago Palladino","email":"santiago@openzeppelin.com"},"license":"MIT","dependencies":{"axios":"^0.21.2","defender-base-client":"1.38.1-rc.0","lodash":"^4.17.19","node-fetch":"^2.6.0"},"gitHead":"e828861fdd32bcc19811d307b245986240e6c494","_id":"defender-admin-client@1.38.1-rc.0","_nodeVersion":"16.20.1","_npmVersion":"lerna/3.22.1/node@v16.20.1+arm64 (darwin)","dist":{"integrity":"sha512-uEy8a0B6cfgvnXF9aTYFyNyVy8tKmgXvMbemHma72Ks7dqeYp82kIC6kluRYeDS10khe+NejI8djX82z9T+onw==","shasum":"a22d4b2644c64f454e563cf11635cd5f6118b44e","tarball":"https://registry.npmjs.org/defender-admin-client/-/defender-admin-client-1.38.1-rc.0.tgz","fileCount":27,"unpackedSize":147231,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICOaL5bPEH3GOn9rOWemA8OMEk/V6iAfuluA5rwMrw9XAiAKLofESd7hfAhJISDigOO6ZVKmXSCvta6FQkIQFlJ4FQ=="}]},"_npmUser":{"name":"tirumerla","email":"tirumerla@gmail.com"},"directories":{},"maintainers":[{"name":"zeljkox","email":"zeljko89markovic@gmail.com"},{"name":"frangio","email":"frangio.1@gmail.com"},{"name":"ernestognw","email":"ernesto@openzeppelin.com"},{"name":"bjmrq","email":"bmarquiscom@gmail.com"},{"name":"mok0230","email":"dpmckeon@gmail.com"},{"name":"tirumerla","email":"tirumerla@gmail.com"},{"name":"dylkil","email":"dylankilkenny95@gmail.com"},{"name":"namis","email":"me@nami.sh"},{"name":"collins-oz","email":"collins.wekesa@openzeppelin.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/defender-admin-client_1.38.1-rc.0_1712863186831_0.283609061047841"},"_hasShrinkwrap":false},"1.38.2-rc.0":{"name":"defender-admin-client","version":"1.38.2-rc.0","description":"Defender Admin acts as an interface to manage your smart contract project through one or more secure multi-signature contracts. Defender Admin holds no control at all over your system, which is fully controlled by the keys of the signers.","main":"./lib/index.js","types":"./lib/index.d.ts","scripts":{"build":"rm -rf lib && tsc","test":"yarn test:unit","test:unit":"jest --verbose --passWithNoTests","watch":"tsc -w","prepare":"yarn build"},"author":{"name":"Santiago Palladino","email":"santiago@openzeppelin.com"},"license":"MIT","dependencies":{"axios":"^0.21.2","defender-base-client":"1.38.2-rc.0","lodash":"^4.17.19","node-fetch":"^2.6.0"},"gitHead":"8588fbc0bfa0bf406cadf3cfe98861112b5c3acf","_id":"defender-admin-client@1.38.2-rc.0","_nodeVersion":"16.20.1","_npmVersion":"lerna/3.22.1/node@v16.20.1+arm64 (darwin)","dist":{"integrity":"sha512-ld4BNvjK55AgL3fWbhE/PdjcbrToXyuaU4sbu9kESI/L6NV+rciLEMOkwVGw28CzYE0KBZYjv9YhFGNnnycRlQ==","shasum":"f4e2c5371fa32adefeef3017daf916c396665936","tarball":"https://registry.npmjs.org/defender-admin-client/-/defender-admin-client-1.38.2-rc.0.tgz","fileCount":27,"unpackedSize":148227,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGqyDwx920ad4h87RqQ5hfAjoXwzVfI98A/sOYfGV5gcAiEAge8nFex5pmovh53Wjwaikgr5fkW3ULu3LQcwcJ1mQd4="}]},"_npmUser":{"name":"tirumerla","email":"tirumerla@gmail.com"},"directories":{},"maintainers":[{"name":"zeljkox","email":"zeljko89markovic@gmail.com"},{"name":"frangio","email":"frangio.1@gmail.com"},{"name":"ernestognw","email":"ernesto@openzeppelin.com"},{"name":"bjmrq","email":"bmarquiscom@gmail.com"},{"name":"mok0230","email":"dpmckeon@gmail.com"},{"name":"tirumerla","email":"tirumerla@gmail.com"},{"name":"dylkil","email":"dylankilkenny95@gmail.com"},{"name":"namis","email":"me@nami.sh"},{"name":"collins-oz","email":"collins.wekesa@openzeppelin.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/defender-admin-client_1.38.2-rc.0_1716414601469_0.5080798980547192"},"_hasShrinkwrap":false},"1.38.3-rc.0":{"name":"defender-admin-client","version":"1.38.3-rc.0","description":"Defender Admin acts as an interface to manage your smart contract project through one or more secure multi-signature contracts. Defender Admin holds no control at all over your system, which is fully controlled by the keys of the signers.","main":"./lib/index.js","types":"./lib/index.d.ts","scripts":{"build":"rm -rf lib && tsc","test":"yarn test:unit","test:unit":"jest --verbose --passWithNoTests","watch":"tsc -w","prepare":"yarn build"},"author":{"name":"Santiago Palladino","email":"santiago@openzeppelin.com"},"license":"MIT","dependencies":{"axios":"^0.21.2","defender-base-client":"1.38.3-rc.0","lodash":"^4.17.19","node-fetch":"^2.6.0"},"gitHead":"7fd90342e764cbeb794ec62e6a05ffa33a5432a1","_id":"defender-admin-client@1.38.3-rc.0","_nodeVersion":"16.20.1","_npmVersion":"lerna/3.22.1/node@v16.20.1+arm64 (darwin)","dist":{"integrity":"sha512-FHXF0ortXXQP4FNXNq5oshPkgS0RoBQTYeL4FxUOY0HjSC2MB1lipNPaGGQfky/9ZoVxQ4EahBbp34R1RtU7mg==","shasum":"9796c3a5912998a6775771ae4e5cc68e076830d6","tarball":"https://registry.npmjs.org/defender-admin-client/-/defender-admin-client-1.38.3-rc.0.tgz","fileCount":27,"unpackedSize":148227,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHNs2/IpEgtlsSJ/IvwRpfm0/yv+bRSn794Xgm5YjibKAiEAyRZXQg5S5orNqLmRzb3iEqsMZkQykVdPIc9wXJRPdpk="}]},"_npmUser":{"name":"tirumerla","email":"tirumerla@gmail.com"},"directories":{},"maintainers":[{"name":"zeljkox","email":"zeljko89markovic@gmail.com"},{"name":"frangio","email":"frangio.1@gmail.com"},{"name":"ernestognw","email":"ernesto@openzeppelin.com"},{"name":"bjmrq","email":"bmarquiscom@gmail.com"},{"name":"mok0230","email":"dpmckeon@gmail.com"},{"name":"tirumerla","email":"tirumerla@gmail.com"},{"name":"dylkil","email":"dylankilkenny95@gmail.com"},{"name":"namis","email":"me@nami.sh"},{"name":"collins-oz","email":"collins.wekesa@openzeppelin.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/defender-admin-client_1.38.3-rc.0_1716452280215_0.4402779035996265"},"_hasShrinkwrap":false}},"time":{"created":"2021-01-12T17:13:19.724Z","1.3.0-rc.0":"2021-01-12T17:13:19.859Z","modified":"2024-05-23T08:18:00.558Z","1.3.0-rc.2":"2021-01-12T17:17:15.201Z","1.3.0-rc.3":"2021-01-12T17:25:53.034Z","1.3.0-rc.4":"2021-01-12T18:02:05.722Z","1.3.0-rc.5":"2021-01-13T21:09:21.633Z","1.3.0":"2021-01-20T15:54:14.802Z","1.3.1":"2021-01-25T23:19:27.247Z","1.3.2":"2021-01-25T23:27:12.415Z","1.4.0-rc.0":"2021-02-02T22:21:34.871Z","1.4.0-rc.1":"2021-02-03T14:35:51.300Z","1.4.0":"2021-02-04T18:04:39.329Z","1.5.0":"2021-03-18T20:56:20.029Z","1.5.1":"2021-04-08T14:30:18.003Z","1.6.0-rc.0":"2021-04-22T22:52:45.340Z","1.7.0-store.0":"2021-05-12T14:49:19.513Z","1.7.0":"2021-05-13T18:22:00.111Z","1.10.0":"2021-07-07T19:57:48.179Z","1.11.0":"2021-08-11T18:41:51.636Z","1.12.1":"2021-11-25T15:23:53.792Z","1.13.0":"2022-01-26T14:32:42.350Z","1.14.0":"2022-02-10T11:45:24.024Z","1.16.0":"2022-02-17T09:47:14.934Z","1.18.0":"2022-03-10T17:31:14.675Z","1.20.1":"2022-04-26T16:45:52.182Z","1.21.0":"2022-05-02T17:09:32.252Z","1.21.2":"2022-05-09T19:05:06.250Z","1.21.3":"2022-05-10T21:02:35.075Z","1.23.0":"2022-06-03T10:23:38.461Z","1.24.0":"2022-06-09T15:58:38.642Z","1.25.0":"2022-06-23T20:40:17.100Z","1.27.0":"2022-08-04T16:08:21.824Z","1.27.1":"2022-08-05T16:03:38.087Z","1.28.0":"2022-08-15T11:01:24.056Z","1.28.1":"2022-08-18T17:21:11.298Z","1.29.0-rc.0":"2022-08-26T13:16:24.697Z","1.29.0-rc.1":"2022-08-26T17:00:24.045Z","1.29.1":"2022-08-29T19:48:51.665Z","1.30.0":"2022-09-06T20:25:09.195Z","1.31.0-rc.1":"2022-09-07T22:06:06.729Z","1.31.0-rc.2":"2022-09-09T10:50:29.426Z","1.31.0-rc.3":"2022-09-12T12:18:26.699Z","1.31.0":"2022-09-12T18:15:17.799Z","1.31.1":"2022-09-12T18:18:19.104Z","1.33.0":"2022-10-05T19:24:49.822Z","1.34.0-rc.2":"2022-10-25T15:21:49.576Z","1.34.0-rc.3":"2022-10-25T15:24:41.338Z","1.34.0":"2022-10-25T15:47:16.150Z","1.35.0-rc.1":"2022-10-31T17:14:11.088Z","1.35.0-rc.2":"2022-10-31T17:18:57.645Z","1.36.0-rc.1":"2022-11-02T19:37:21.501Z","1.37.0-rc.1":"2022-11-05T02:59:11.934Z","1.37.0-rc.2":"2022-11-05T03:52:25.550Z","1.37.0":"2022-11-09T11:28:22.562Z","1.38.0-rc.1":"2022-12-02T08:37:07.900Z","1.38.0-rc.2":"2022-12-08T11:16:50.882Z","1.38.0":"2023-01-17T12:56:29.619Z","1.39.0":"2023-02-14T17:35:51.376Z","1.40.0":"2023-03-31T19:15:09.222Z","1.41.0":"2023-04-04T22:03:06.943Z","1.42.0":"2023-04-13T17:18:38.878Z","1.43.0":"2023-05-05T20:28:44.012Z","1.44.0-rc.1":"2023-05-10T19:27:27.979Z","1.44.0":"2023-05-15T12:49:42.214Z","1.38.1-rc.0":"2024-04-11T19:19:46.986Z","1.38.2-rc.0":"2024-05-22T21:50:01.680Z","1.38.3-rc.0":"2024-05-23T08:18:00.379Z"},"maintainers":[{"name":"zeljkox","email":"zeljko89markovic@gmail.com"},{"name":"frangio","email":"frangio.1@gmail.com"},{"name":"ernestognw","email":"ernesto@openzeppelin.com"},{"name":"bjmrq","email":"bmarquiscom@gmail.com"},{"name":"mok0230","email":"dpmckeon@gmail.com"},{"name":"tirumerla","email":"tirumerla@gmail.com"},{"name":"dylkil","email":"dylankilkenny95@gmail.com"},{"name":"namis","email":"me@nami.sh"},{"name":"collins-oz","email":"collins.wekesa@openzeppelin.com"}],"author":{"name":"Santiago Palladino","email":"santiago@openzeppelin.com"},"license":"MIT","readme":"# Defender Admin Client\n\nDefender Admin acts as an interface to manage your smart contract project through one or more secure multi-signature contracts. Defender Admin holds no control at all over your system, which is fully controlled by the keys of the signers.\n\nTo interact with your contracts, you create _proposals_ that need to be reviewed and approved by the other members of the multi-signature wallets. These proposals can be created directly in the Defender web application, or using this library. You can also rely on this library to add your contracts to the Defender Admin dashboard.\n\n## Install\n\n```bash\nnpm install defender-admin-client\n```\n\n```bash\nyarn add defender-admin-client\n```\n\n## Usage\n\nStart by creating a new _Team API Key_ in Defender, and granting it the capability to create new proposals. Use the newly created API key to initialize an instance of the Admin client.\n\n```js\nconst { AdminClient } = require('defender-admin-client');\nconst client = new AdminClient({ apiKey: API_KEY, apiSecret: API_SECRET });\n```\n\n### Action proposals\n\nTo create a `custom` action proposal, you need to provide the function interface (which you can extract from the contract's ABI), its inputs, and the multisig that will be used for approving it:\n\n```js\nawait client.createProposal({\n  contract: { address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E', network: 'rinkeby' }, // Target contract\n  title: 'Adjust fee to 10%', // Title of the proposal\n  description: 'Adjust the contract fee collected per action to 10%', // Description of the proposal\n  type: 'custom', // Use 'custom' for custom admin actions\n  functionInterface: { name: 'setFee', inputs: [{ type: 'uint256', name: 'fee' }] }, // Function ABI\n  functionInputs: ['10'], // Arguments to the function\n  via: '0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b', // Address to execute proposal\n  viaType: 'Gnosis Safe', // 'Gnosis Safe', 'Gnosis Multisig', or 'EOA'\n});\n```\n\n#### Issuing DELEGATECALLs\n\nWhen invoking a function via a Gnosis Safe, it's possible to call it via a `DELEGATECALL` instruction instead of a regular call. This has the effect of executing the code in the called contract _in the context of the multisig_, meaning any operations that affect storage will affect the multisig, and any calls to additional contracts will be executed as if the `msg.sender` were the multisig. To do this, add a `metadata` parameter with the value `{ operationType: 'delegateCall' }` to your `createProposal` call:\n\n```js\nawait client.createProposal({\n  // ... Include all parameters from the example above\n  via: '0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b', // Multisig address\n  viaType: 'Gnosis Safe', // Must be Gnosis Safe to handle delegate calls\n  metadata: { operationType: 'delegateCall' }, // Issue a delegatecall instead of a regular call\n});\n```\n\nNote that this can potentially brick your multisig, if the contract you delegatecall into accidentally modifies the multisig's storage, rendering it unusable. Make sure you understand the risks before issuing a delegatecall.\n\n### Upgrade proposals\n\nTo create an `upgrade` action proposal, provide the proxy contract network and address, along with the new implementation address, and Defender will automatically resolve the rest (note that if no newImplementationAbi is provided the previous implementation ABI will be assumed for the proposal):\n\n```js\nconst newImplementation = '0x3E5e9111Ae8eB78Fe1CC3bb8915d5D461F3Ef9A9';\nconst newImplementationAbi = '[...]';\nconst contract = { network: 'rinkeby', address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E' };\nawait client.proposeUpgrade({ newImplementation, newImplementationAbi }, contract);\n```\n\nIf your proxies do not implement the [EIP1967 admin slot](https://eips.ethereum.org/EIPS/eip-1967#admin-address), you will need to provide either the [`ProxyAdmin` contract](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.0.0/contracts/proxy/transparent/ProxyAdmin.sol) or the Account with rights to execute the upgrade, as shown below.\n\n#### Explicit ProxyAdmin\n\n```js\nconst newImplementation = '0x3E5e9111Ae8eB78Fe1CC3bb8915d5D461F3Ef9A9';\nconst proxyAdmin = '0x2fC100f1BeA4ACCD5dA5e5ed725D763c90e8ca96';\nconst newImplementationAbi = '[...]';\nconst contract = { network: 'rinkeby', address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E' };\nawait client.proposeUpgrade({ newImplementation, newImplementationAbi, proxyAdmin }, contract);\n```\n\n#### Explicit owner account\n\n```js\nconst newImplementation = '0x3E5e9111Ae8eB78Fe1CC3bb8915d5D461F3Ef9A9';\nconst via = '0xF608FA64c4fF8aDdbEd106E69f3459effb4bC3D1';\nconst viaType = 'Gnosis Safe'; // or 'Gnosis Multisig', or 'EOA'\nconst contract = { network: 'rinkeby', address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E' };\nconst newImplementationAbi = '[...]';\nawait client.proposeUpgrade({ newImplementation, newImplementationAbi, via, viaType }, contract);\n```\n\n### Pause proposals\n\nTo create `pause` and `unpause` action proposals, you need to provide the contract network and address, as well as the multisig that will be used for approving it. Defender takes care of the rest:\n\n```js\nconst contract = { network: 'rinkeby', address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E' };\n\n// Create a pause proposal\nawait client.proposePause({ via: '0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b', viaType: 'Gnosis Safe' }, contract);\n\n// Create an unpause proposal\nawait client.proposeUnpause({ via: '0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b', viaType: 'Gnosis Safe' }, contract);\n```\n\nNote that for `pause` and `unpause` proposals to work, your contract ABI must include corresponding `pause()` and `unpause()` functions.\n\n### Batch proposals\n\nTo create a `batch` proposal, you'll need to provide the contracts to use as an array in the `contract` param, and specify a list of `steps` to execute, in which you provide the information of execution for each function you'll call.\n\n```js\nconst ERC20Token = '0x24B5C627cF54582F93eDbcF6186989227400Ac75';\nconst RolesContract = '0xa50d145697530e8fef3F59a9643c6E9992d0f30D';\n\nconst contracts = [\n  {\n    address: ERC20Token,\n    name: 'ERC20 Token',\n    network: 'goerli',\n    abi: '[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]',\n  },\n  {\n    address: RolesContract,\n    network: 'goerli',\n    name: 'Roles Contract',\n    abi: '[{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]',\n  },\n];\n\nconst safeAddress = '0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b';\n\nconst steps = [\n  {\n    contractId: `goerli-${ERC20Token}`,\n    targetFunction: {\n      name: 'mint',\n      inputs: [{ type: 'uint256', name: 'amount' }],\n    },\n    functionInputs: ['999'],\n    type: 'custom',\n  },\n  {\n    contractId: `goerli-${ERC20Token}`,\n    targetFunction: {\n      name: 'transfer',\n      inputs: [\n        { type: 'address', name: 'to' },\n        { type: 'uint256', name: 'amount' },\n      ],\n    },\n    functionInputs: [safeAddress, '999'],\n    type: 'custom',\n  },\n  {\n    contractId: `goerli-${RolesContract}`,\n    metadata: {\n      action: 'grantRole',\n      role: '0x0000000000000000000000000000000000000000000000000000000000000000',\n      account: safeAddress,\n    },\n    type: 'access-control',\n  },\n];\n\nawait client.createProposal({\n  contract: contracts,\n  title: 'Batch test',\n  description: 'Mint, transfer and modify access control',\n  type: 'batch',\n  via: safeAddress,\n  viaType: 'Gnosis Safe',\n  metadata: {}, // Required field but empty\n  steps,\n});\n```\n\n### List proposals\n\nYou can list all proposals:\n\n```js\nconst proposals = await client.listProposals();\n```\n\nYou can filter your active proposals by `isActive` property present on each proposal in the list response. By default, only unarchived proposals are returned, but you can override this by adding an `includeArchived: true` option in the call.\n\n### Retrieve a proposal\n\nYou can retrieve a proposal given its contract and proposal ids:\n\n```js\nawait client.getProposal(contractId, proposalId);\n```\n\n### Archiving proposals\n\nYou can archive or unarchive a proposal given its contract and proposal ids:\n\n```js\nawait client.archiveProposal(contractId, proposalId);\nawait client.unarchiveProposal(contractId, proposalId);\n```\n\n### Simulate proposals\n\nYou can simulate an existing proposal. The results of a simulation (`SimulationResponse`) will be stored and can be retrieved with the getProposalSimulation endpoint:\n\n```js\nconst proposal = await client.getProposal(contractId, proposalId);\n\n// import the ABI and create an ethers interface\nconst contractInterface = new utils.Interface(contractABI);\n\n// encode function data\nconst data = contractInterface.encodeFunctionData(proposal.functionInterface.name, proposal.functionInputs);\n\nconst simulation = await client.simulateProposal(\n  proposal.contractId, // contractId\n  proposal.proposalId, // proposalId\n  {\n    transactionData: {\n      // this is the default hardhat address\n      from: '0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266', // change this to impersonate the `from` address\n      type: 'function-call', // or 'send-funds'\n      data,\n      to: proposal.contract.address,\n      value: proposal.metadata.sendValue,\n    },\n    // default to latest finalized block,\n    // can be up to 100 blocks ahead of current block,\n    // does not support previous blocks\n    blockNumber: undefined,\n  },\n);\n```\n\n> Note that a simulation may fail due to a number of reasons, such as network congestion, unstable providers or hitting a quota limitation. We would advise you to track the response code to assure a successful response was returned. If a transaction was reverted with a reason string, this can be obtained from the response object under `response.meta.returnString`. A transaction revert can be tracked from `response.meta.reverted`.\n\n### Retrieve a proposal simulation\n\nYou can also retrieve existing simulations for a proposal:\n\n```js\nconst proposal = await client.getProposal(contractId, proposalId);\n\nconst simulation = await client.getProposalSimulation(\n  proposal.contractId, // contractId\n  proposal.proposalId, // proposalId\n);\n```\n\n## Adding Contracts\n\nIf you create a new proposal for a Contract that has not yet been added to Defender Admin, it will be automatically added with an autogenerated name and an empty ABI. You can optionally control these values by providing values for them in the `contract` object of the proposal:\n\n```js\nconst contract = {\n  network: 'rinkeby',\n  address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E',\n  name: 'My contract', // Name of the contract if it is created along with this proposal\n  abi: '[...]', // ABI to set for this contract if it is created\n};\nawait client.proposeUpgrade({ newImplementation }, contract);\n```\n\nAlternatively, you can add any contract explicitly by using the `addContract` method, and setting network, address, name, natspec and ABI. The same method can be used to update the contract's name or ABI.\n\n```js\nawait client.addContract({\n  network: 'rinkeby',\n  address: '0x28a8746e75304c0780E011BEd21C72cD78cd535E',\n  name: 'My contract',\n  abi: '[...]',\n  natSpec: '{devdoc:{...}, userdoc: {...}}',\n});\n```\n\nYou can also list all contracts in your Defender Admin dashboard via `listContracts`.\n\n## FAQ\n\n**Can I use this package in a browser?**\n\nThis package is not designed to be used in a browser environment. Using this package requires sensitive API KEYS that should not be exposed publicly.\n","readmeFilename":"README.md","description":"Defender Admin acts as an interface to manage your smart contract project through one or more secure multi-signature contracts. Defender Admin holds no control at all over your system, which is fully controlled by the keys of the signers."}