{"_id":"@alch/alchemy-sdk","_rev":"48-07e69815ba608072cb7a85a0c5c85340","name":"@alch/alchemy-sdk","dist-tags":{"1.0.4-beta1":"1.0.4-beta","1.0.4-beta2":"1.0.4-beta2","1.0.4-beta3":"1.0.4-beta3","1.0.5-beta1":"1.0.5-beta1","canary":"1.1.1","latest":"1.2.0","beta":"2.0.0-beta.0"},"versions":{"1.0.0":{"name":"@alch/alchemy-sdk","version":"1.0.0","author":"","license":"MIT","_id":"@alch/alchemy-sdk@1.0.0","maintainers":[{"name":"ddgromit","email":"derekdahmer@gmail.com"},{"name":"chub","email":"npm@hbar.us"},{"name":"robalchemy","email":"rob.coleman@alchemy.com"},{"name":"kurushdubash","email":"kurush@alchemy.com"},{"name":"brian-alchemy","email":"brian@alchemy.com"},{"name":"dphilipson","email":"david.philipson@gmail.com"},{"name":"alchemy-team","email":"accounts@alchemy.com"},{"name":"omarsayha","email":"omar@alchemyapi.io"},{"name":"noam-alchemy","email":"noam@alchemyapi.io"},{"name":"stevenzyang","email":"steezyang@gmail.com"},{"name":"brg8","email":"bgodlove88+npmjs@gmail.com"}],"homepage":"https://github.com/alchemyplatform/alchemy-sdk-js#readme","bugs":{"url":"https://github.com/alchemyplatform/alchemy-sdk-js/issues"},"dist":{"shasum":"1bd5884f614e796063bb04076fe05d4fc8057f86","tarball":"https://registry.npmjs.org/@alch/alchemy-sdk/-/alchemy-sdk-1.0.0.tgz","fileCount":33,"integrity":"sha512-OFWpXbKaNE0FhRmBCMI3ExnY4vEfnl/SZ4c+167gD3szlZ/Nkn6YyJU67JNdNgEbSp9rApA2ACCf8YVcr1xe6Q==","signatures":[{"sig":"MEUCIAUQeVPFTEU8VwKx7URxJrXSrvNwdmA2bKwTQVH3JxNUAiEA9dBklhiCaWKpzgHm9kHH6wd53wxVHZDqnNl7SbAGRsU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":242250,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJinnhhACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmriGRAAoAZQBtO4W7NiEVJ/mTkebkIM2ltENN67qbP3KNemvmQxASCq\r\nGE1rkLJ3VMsBejy9rdRjaL1tF/DzZkgUYCds/cCm99F4/g/IfL5YCLsIyfi1\r\n0CLm9mfwkS2t68EMThyhf8Qd/peLn9g4LQJkI7WywOnUEeYTJsX8r+a/vAbc\r\nww52F95iDwO7hbHzvt41Wm6TJQv1kRIelIUXYcSjYMaQCnZ5kve2sY4YX6WO\r\naK+/qRVkk/5NN8WZ3f5rPEc5CDXVfH1j7VUI19jOuVsuL9bjsYxwkwu+b3ix\r\nuMPrV9ROEJscCaMTKUjEo6J/MQqWqj9MYtFtWncykDrqd6xAYE2cfWRDqX4h\r\nA5lefExJkdG5oSQbG8FBn2pDcnsg0heuqxHmnEiua5G/v7MGZXihhGoZzQpz\r\ntXuYY0AFyTb+A+fuDQmcVR/uoZ42cTuwlOTiUgCghkvKwDINUdiulvEokwGd\r\nnwbCL89g3W7jPl9uDjlvJHmCP6E6W26GvtHyG26KisNVc4YBLYafuycOFT0P\r\n7K2H0PU08XPlTA5u1gTKYmXqz3UgGP1mJRfrNXvwqWF5g7Lf1jC9Xr2uhPHB\r\n7x1dABS2cJt1HP9yiS3ae96tQKQx692sq3jb2S3Vt40roEmo5HOJgakiBK2U\r\nzkDLWtw2GIfD5vsUv0+ZKPvYlYpwIPfB0Oc=\r\n=bn9L\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.cjs.js","types":"./dist/src/index.d.ts","module":"dist/index.esm.js","exports":{"node":{"import":"./dist/index.esm.js","require":"./dist/index.cjs.js"},"default":"./dist/index.esm.js"},"gitHead":"7f582beb11f10ac585c1b49156d6d02479cd917d","scripts":{"api":"yarn build && api-extractor run","docs":"typedoc --plugin none --out docs src/index.ts","lint":"eslint -c .eslintrc.js '**/*.ts' --ignore-path '.gitignore'","test":"jest test/unit","build":"rollup -c","clean":"rm -rf dist","format":"prettier --write '**/*.{html,js,json,md,ts}'","docs-md":"typedoc --plugin typedoc-plugin-markdown --out docs-md src/index.ts","prepare":"husky install","prebuild":"yarn clean && tsc --emitDeclarationOnly --declaration -p tsconfig.json","lint-file":"eslint --fix","pre-commit":"lint-staged","format-file":"prettier --write"},"_npmUser":{"name":"brian-alchemy","email":"brian@alchemy.com"},"repository":{"url":"git+https://github.com/alchemyplatform/alchemy-sdk-js.git","type":"git"},"size-limit":[{"path":"dist/index.cjs.js","limit":"100 kB"}],"_npmVersion":"8.1.2","description":"Alchemy SDK helps developers use Alchemy's APIs and endpoints more efficiently. This is a lightweight, modular SDK that encapsulates common usage patterns and abstracts away the complexities of both our HTTP and JSON-RPC endpoints.","directories":{},"lint-staged":{"**/*.ts":["yarn lint-file --fix","yarn format-file"]},"_nodeVersion":"16.13.2","dependencies":{"ws":"^8.6.0","axios":"^0.26.1","ethers":"^5.6.8","sturdy-websocket":"^0.2.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.5.1","husky":"^7.0.0","tslib":"^2.3.1","eslint":"^8.11.0","rollup":"^2.70.1","ts-jest":"^27.1.4","typedoc":"^0.22.15","prettier":"2.6.0","size-limit":"^7.0.8","typescript":"^4.5.5","@types/jest":"^27.4.1","lint-staged":"^12.3.7","axios-mock-adapter":"^1.20.0","eslint-plugin-import":"^2.25.4","rollup-plugin-terser":"^7.0.2","prettier-plugin-jsdoc":"^0.3.38","typedoc-plugin-markdown":"^3.12.1","@microsoft/api-extractor":"^7.19.5","@microsoft/api-documenter":"^7.16.0","@typescript-eslint/parser":"^5.16.0","rollup-plugin-typescript2":"^0.31.2","@size-limit/preset-big-lib":"^7.0.8","eslint-plugin-unused-imports":"^2.0.0","@typescript-eslint/eslint-plugin":"^5.16.0"},"_npmOperationalInternal":{"tmp":"tmp/alchemy-sdk_1.0.0_1654552673644_0.7116646461674021","host":"s3://npm-registry-packages"}},"1.0.1":{"name":"@alch/alchemy-sdk","version":"1.0.1","author":"","license":"MIT","_id":"@alch/alchemy-sdk@1.0.1","maintainers":[{"name":"ddgromit","email":"derekdahmer@gmail.com"},{"name":"chub","email":"npm@hbar.us"},{"name":"robalchemy","email":"rob.coleman@alchemy.com"},{"name":"kurushdubash","email":"kurush@alchemy.com"},{"name":"brian-alchemy","email":"brian@alchemy.com"},{"name":"dphilipson","email":"david.philipson@gmail.com"},{"name":"alchemy-team","email":"accounts@alchemy.com"},{"name":"omarsayha","email":"omar@alchemyapi.io"},{"name":"noam-alchemy","email":"noam@alchemyapi.io"},{"name":"stevenzyang","email":"steezyang@gmail.com"},{"name":"brg8","email":"bgodlove88+npmjs@gmail.com"}],"homepage":"https://github.com/alchemyplatform/alchemy-sdk-js#readme","bugs":{"url":"https://github.com/alchemyplatform/alchemy-sdk-js/issues"},"dist":{"shasum":"d599dac08493db53d0d85ec26458aa6247771d2d","tarball":"https://registry.npmjs.org/@alch/alchemy-sdk/-/alchemy-sdk-1.0.1.tgz","fileCount":34,"integrity":"sha512-gRyC5mCvI9l0T2k4nnBM9K3MlBwoneiyGjURqGUolZG/e6sVut6zCISW9YS6e7DdyF53bbvuL5tDgFDt64wSlg==","signatures":[{"sig":"MEUCIFG17kiy2ix+SKitMPRg5uZ7K9clqrMzD7zvnqQE7RzXAiEA4B1Hp9En5QxvvpM8nyk6vTeUWSvOYDQArpshOZJ7rXQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":349395,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJin14BACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpY/g//T2Sot6BNSyV1bePhBaCQ49XEy1y7gwk5UwKf2xT+TRTI1snE\r\nGiN3mjloSP9OVPJlfKT0bGFty9hFraz7HKxtARl6+dCQs2emnSKjk6AqAfXF\r\niv7pYcmseMEsUi5fBYWwVvDLMz9KjcspF6noznWI/XLMfDabnSrN9+J/zMNp\r\nuJSQCyoXUk6EHFFauntoieU8xbVJNmNxICv5zs3uV5g/eQ2WVqYGTFp9M7ia\r\nq3vgFj5vuCFypAYEB+lU11VVX6Qj9Kbpr5gzgQfR1KMqZNSVJfaYgm717OZc\r\n5H9NQO7hxwmbGpZ1bCTb9jt3CCE0792T60+x7x8jWeGLnb8MLvCA/mMGqG8j\r\nkuvSXVJmezs6C+XtJMUhcHf/TcLkmvG7lpyqR/eCiHQWIxjGx1y75iJaLRCO\r\nUx8HeZR3ZYxOOzVVGFOKkiyiwUykfaNqDJKjQlR0goDSZsOL0B27OYtT7CWb\r\nnJU/H8mdjkOGlTw/EvMDTIucqamQlCU1AvG5Z6vbG45s7uINEDEfbza0h0/A\r\n9QgTEirIs2fri9m1QR5BUy+fVRD/0zwmoHs0BlcN9wZartYfwOH3fC9ubrWF\r\nsnanM3k/6DXoLALnT+0o5zeLEx0H7o+gFAj5hp8khL3r8CEa4ZCcMdEk10K/\r\nF+ABtIY/nj55UzVVf7ldXJYMXkIrpKk5An4=\r\n=JoMM\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.cjs.js","types":"./dist/src/index.d.ts","module":"dist/index.esm.js","exports":{"node":{"import":"./dist/index.esm.js","require":"./dist/index.cjs.js"},"default":"./dist/index.esm.js"},"gitHead":"0963e0030d3e50c48ba6c09491e0476fdf0a5eb6","scripts":{"api":"yarn build && api-extractor run","docs":"typedoc --plugin none --out docs src/index.ts","lint":"eslint -c .eslintrc.js '**/*.ts' --ignore-path '.gitignore'","test":"jest test/unit","build":"rollup -c","clean":"rm -rf dist","format":"prettier --write '**/*.{html,js,json,md,ts}'","docs-md":"typedoc --plugin typedoc-plugin-markdown --out docs-md src/index.ts","prepare":"husky install","prebuild":"yarn clean && tsc --emitDeclarationOnly --declaration -p tsconfig.json","lint-file":"eslint --fix","pre-commit":"lint-staged","format-file":"prettier --write"},"_npmUser":{"name":"brian-alchemy","email":"brian@alchemy.com"},"repository":{"url":"git+https://github.com/alchemyplatform/alchemy-sdk-js.git","type":"git"},"size-limit":[{"path":"dist/index.cjs.js","limit":"100 kB"}],"_npmVersion":"8.1.2","description":"Alchemy SDK helps developers use Alchemy's APIs and endpoints more efficiently. This is a lightweight, modular SDK that encapsulates common usage patterns and abstracts away the complexities of both our HTTP and JSON-RPC endpoints.","directories":{},"lint-staged":{"**/*.ts":["yarn lint-file --fix","yarn format-file"]},"_nodeVersion":"16.13.2","dependencies":{"ws":"^8.6.0","axios":"^0.26.1","ethers":"^5.6.8","sturdy-websocket":"^0.2.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.5.1","husky":"^7.0.0","tslib":"^2.3.1","eslint":"^8.11.0","rollup":"^2.70.1","ts-jest":"^27.1.4","typedoc":"^0.22.15","prettier":"2.6.0","size-limit":"^7.0.8","typescript":"^4.5.5","@types/jest":"^27.4.1","lint-staged":"^12.3.7","axios-mock-adapter":"^1.20.0","eslint-plugin-import":"^2.25.4","rollup-plugin-terser":"^7.0.2","prettier-plugin-jsdoc":"^0.3.38","typedoc-plugin-markdown":"^3.12.1","@microsoft/api-extractor":"^7.19.5","@microsoft/api-documenter":"^7.16.0","@typescript-eslint/parser":"^5.16.0","rollup-plugin-typescript2":"^0.31.2","@size-limit/preset-big-lib":"^7.0.8","eslint-plugin-unused-imports":"^2.0.0","@typescript-eslint/eslint-plugin":"^5.16.0"},"_npmOperationalInternal":{"tmp":"tmp/alchemy-sdk_1.0.1_1654611457577_0.016229675242442454","host":"s3://npm-registry-packages"}},"1.0.2":{"name":"@alch/alchemy-sdk","version":"1.0.2","author":{"name":"Alchemy"},"license":"MIT","_id":"@alch/alchemy-sdk@1.0.2","maintainers":[{"name":"ddgromit","email":"derekdahmer@gmail.com"},{"name":"chub","email":"npm@hbar.us"},{"name":"robalchemy","email":"rob.coleman@alchemy.com"},{"name":"kurushdubash","email":"kurush@alchemy.com"},{"name":"brian-alchemy","email":"brian@alchemy.com"},{"name":"dphilipson","email":"david.philipson@gmail.com"},{"name":"alchemy-team","email":"accounts@alchemy.com"},{"name":"omarsayha","email":"omar@alchemyapi.io"},{"name":"noam-alchemy","email":"noam@alchemyapi.io"},{"name":"stevenzyang","email":"steezyang@gmail.com"},{"name":"brg8","email":"bgodlove88+npmjs@gmail.com"}],"homepage":"https://github.com/alchemyplatform/alchemy-sdk-js#readme","bugs":{"url":"https://github.com/alchemyplatform/alchemy-sdk-js/issues"},"dist":{"shasum":"b5ffb1cb6c164e9ed48b656e54902c72805a266f","tarball":"https://registry.npmjs.org/@alch/alchemy-sdk/-/alchemy-sdk-1.0.2.tgz","fileCount":46,"integrity":"sha512-pr2u0DQYKrz0J5ltPK5eTSwsennPUWGYT0+SaW/Ftx2Wyrct+hyPxvXCwkMESRcFnEaYmicJa1p1MzlvJPFVLQ==","signatures":[{"sig":"MEUCIBWwxYYSAcDt+Z6FmROdDoY1CUqwypeifTl3DG592MaOAiEAgwJis4aUbsqUqVRuUzspvT7qTSsqO9gufeSmhS/S86A=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":361699,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJip6//ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpDqw//ePb2RdEglVzypuQ4aGFvp6ui2QK8KNqbGv7eoNJ/qrX81avc\r\n5nxGAYTN7rWdBpaNu8o8N895eN80qlb32FSqA4oTz6q0iyJKUk+vxZg7f5n/\r\nQlZ8OUYxXiOLorz+p6kNS+aUQK5KUHuSNo/z9XKAExw13QAr/JTxsb4IuNVF\r\nB2SJt4YMP69g7Sm1ni6zNsTu7Uk4zTBqyF4D2HqtBxkjzy9YC20ltZCkGGmi\r\nHXC9V7DP+s8Zm/7BS+9rtoOyjuUw3yKLADv3MvrkciuuYI0hHNU1QSthzgJH\r\nGbgRvuqhVCQJV0gASXNSKs6mdqKIkfdj5eNtK4oiF1b47rJAGiaGECsAQVA1\r\nf43jPsvA2AlmMIER6QMPr4QJuVzopzoZnlz+xM+DGBbJM6ndSRF4N6MFPqYJ\r\ndcl0DskGa77q5cKDVBr+lNHE7Im37Ze2eojG5WDUxcol0eCJWCpXWWa5JxBl\r\nuJvdTuvH8dFhMmSeWDEoy0SB0fzIgny9+fqWoKy46ncKd0c/NVZQz1VMZg6K\r\nZpRi7IpN+ZIEs/HGtKKkVcTJskzsBlbcoO3VFZ7AzA83+qjdGnqO8In5sIGV\r\nR8txey3eePA3GBaf34CI/mJIHXQsiEOYxOkR9Q5sdiybf+lZSr/2g71bBr6e\r\na0VN03W6nziXpcuTNxvaoBY6EhTP24l6E7Q=\r\n=8fS1\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.cjs.js","types":"./dist/src/index.d.ts","module":"dist/index.esm.js","exports":{"node":{"import":"./dist/index.esm.js","require":"./dist/index.cjs.js"},"default":"./dist/index.esm.js"},"scripts":{"api":"yarn build && api-extractor run","docs":"typedoc --plugin none --out docs src/index.ts","lint":"eslint -c .eslintrc.js '**/*.ts' --ignore-path '.gitignore'","test":"jest test/unit","build":"rollup -c","clean":"rm -rf dist","format":"prettier --write '**/*.{html,js,json,md,ts}'","docs-md":"typedoc --plugin typedoc-plugin-markdown --out docs-md src/index.ts","prepare":"husky install","prebuild":"yarn clean && tsc --emitDeclarationOnly --declaration -p tsconfig.json","lint-file":"eslint --fix","pre-commit":"lint-staged","format-file":"prettier --write"},"_npmUser":{"name":"brian-alchemy","email":"brian@alchemy.com"},"repository":{"url":"git+https://github.com/alchemyplatform/alchemy-sdk-js.git","type":"git"},"size-limit":[{"path":"dist/index.cjs.js","limit":"100 kB"}],"description":"Extended Ethers.js SDK for Alchemy APIs","directories":{},"licenseText":"MIT License\n\nCopyright (c) 2022 Alchemy\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","lint-staged":{"**/*.ts":["yarn lint-file --fix","yarn format-file"],"package.json":["node ./inject-version.js","git add src/version.ts"]},"dependencies":{"ws":"^8.6.0","axios":"^0.26.1","ethers":"^5.6.8","sturdy-websocket":"^0.2.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.5.1","husky":"^7.0.0","tslib":"^2.3.1","eslint":"^8.11.0","rollup":"^2.70.1","ts-jest":"^27.1.4","typedoc":"^0.22.15","prettier":"2.6.0","size-limit":"^7.0.8","typescript":"^4.5.5","@types/jest":"^27.4.1","lint-staged":"^12.3.7","mock-socket":"^9.1.4","axios-mock-adapter":"^1.20.0","eslint-plugin-import":"^2.25.4","rollup-plugin-terser":"^7.0.2","prettier-plugin-jsdoc":"^0.3.38","typedoc-plugin-markdown":"^3.12.1","@microsoft/api-extractor":"^7.19.5","@microsoft/api-documenter":"^7.16.0","@typescript-eslint/parser":"^5.16.0","rollup-plugin-typescript2":"^0.31.2","@size-limit/preset-big-lib":"^7.0.8","eslint-plugin-unused-imports":"^2.0.0","@typescript-eslint/eslint-plugin":"^5.16.0"},"_npmOperationalInternal":{"tmp":"tmp/alchemy-sdk_1.0.2_1655156734847_0.4956492322845585","host":"s3://npm-registry-packages"}},"1.0.3":{"name":"@alch/alchemy-sdk","version":"1.0.3","author":{"name":"Alchemy"},"license":"MIT","_id":"@alch/alchemy-sdk@1.0.3","maintainers":[{"name":"ddgromit","email":"derekdahmer@gmail.com"},{"name":"chub","email":"npm@hbar.us"},{"name":"robalchemy","email":"rob.coleman@alchemy.com"},{"name":"kurushdubash","email":"kurush@alchemy.com"},{"name":"brian-alchemy","email":"brian@alchemy.com"},{"name":"dphilipson","email":"david.philipson@gmail.com"},{"name":"alchemy-team","email":"accounts@alchemy.com"},{"name":"omarsayha","email":"omar@alchemyapi.io"},{"name":"noam-alchemy","email":"noam@alchemyapi.io"},{"name":"stevenzyang","email":"steezyang@gmail.com"},{"name":"brg8","email":"bgodlove88+npmjs@gmail.com"}],"homepage":"https://github.com/alchemyplatform/alchemy-sdk-js#readme","bugs":{"url":"https://github.com/alchemyplatform/alchemy-sdk-js/issues"},"dist":{"shasum":"6d03b42fe2d2392dd927933729ce05aa72462a79","tarball":"https://registry.npmjs.org/@alch/alchemy-sdk/-/alchemy-sdk-1.0.3.tgz","fileCount":48,"integrity":"sha512-QBbktk2aCO58dDzYcFGoh8hCAjxuY0Jb18kbH4z9JGOsA+mT25HCVF8dtflxJvkADEX7vmN0Q/rM2fgMiySWnA==","signatures":[{"sig":"MEUCIQDxmyIxTslNpVxDBbPl0UHVBooGqScgpuYjzwxi46duqQIgF8WrUCOGJXMiqFNCRM5QkVEKrQDibpQkYwY/mjCMwbU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":5770006,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiqOpiACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmplLw/9Fu+YGxHaI0r5lFJSF5Zsxy3DtJVW9nGeTNe5C8RweKw1LFPn\r\nc6Z8cnojueJfhJplYYjnHpkCY+FZxnA/ngjp1fHNr0mrnHHxk6RMTVy4mtyK\r\ncLugZt1YxczOuxk6uLJKfS4/odloDrBnmATZlT6cnkNoqmbtyRPM8XwQRv1v\r\noYcU7QSC4xXyHAI1VSOI90cyWvofF0wYglFQrhxekJUkjzMOpCRGv5hfxps7\r\n6QeRF4rvep1ZDMJ+hCG7ySpDvfdFjkY+CgR1Co19DU0JfHJcHBzARopaie8e\r\nzSgmZuBZ78MncVsGDQYdbCt3vQpF8lDL3XBkLEnz1BcnQ73lAFAHflcpP7If\r\nxJObRaMAXnubtMagXL6GuIt787Pdue/catIUbCadaUEQ00uMEyMTjdzmGRd9\r\nRb3HQ1OUN7yGLXesFbXUzTP8S7+/qM6dLv2PAFsYWh3ISeXJ93k2lfzcHv8E\r\nUlZu5MiMqsPuDYLrLExqfCJ1uoYbR0E1GP9bUujhdH7h34cEFzo1jCBBhYBf\r\njHr6esOxeYjwU8EkU0fcDYcMs1gSVmyIFVzlmZ6OJm6AgbpGb693+TB0uFUd\r\n0bCe9BV0l4EVy73kBqnOr3gGFGjNMUpjsT10P3s62HMFWaG8VKTAb0H/xCC9\r\n/adqkLOzskdZx5ZhPX7P2tsn0Mx88XFokWY=\r\n=pkzw\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.cjs.js","types":"./dist/src/index.d.ts","module":"dist/index.esm.js","exports":{"node":{"import":"./dist/index.mjs","require":"./dist/index.cjs.js"},"default":"./dist/index.esm.js","package.json":"./package.json"},"main-es":"dist/index.mjs","scripts":{"api":"yarn build && api-extractor run","docs":"typedoc --plugin none --out docs src/index.ts","lint":"eslint -c .eslintrc.js '**/*.ts' --ignore-path '.gitignore'","test":"jest test/unit","build":"rollup -c","clean":"rm -rf dist","format":"prettier --write '**/*.{html,js,json,md,ts}'","docs-md":"typedoc --plugin typedoc-plugin-markdown --out docs-md src/index.ts","prepare":"husky install","prebuild":"yarn clean && tsc --emitDeclarationOnly --declaration -p tsconfig.json","lint-file":"eslint --fix","pre-commit":"lint-staged","format-file":"prettier --write"},"_npmUser":{"name":"brian-alchemy","email":"brian@alchemy.com"},"repository":{"url":"git+https://github.com/alchemyplatform/alchemy-sdk-js.git","type":"git"},"size-limit":[{"path":"dist/index.cjs.js","limit":"100 kB"}],"description":"Extended Ethers.js SDK for Alchemy APIs","directories":{},"licenseText":"MIT License\n\nCopyright (c) 2022 Alchemy\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","lint-staged":{"**/*.ts":["yarn lint-file --fix","yarn format-file"],"package.json":["node ./inject-version.js","git add src/version.ts"]},"dependencies":{"ws":"^8.6.0","axios":"^0.26.1","ethers":"^5.6.8","sturdy-websocket":"^0.2.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.5.1","husky":"^7.0.0","tslib":"^2.3.1","eslint":"^8.11.0","rollup":"^2.70.1","ts-jest":"^27.1.4","typedoc":"^0.22.15","prettier":"2.6.0","size-limit":"^7.0.8","typescript":"^4.5.5","@types/jest":"^27.4.1","lint-staged":"^12.3.7","mock-socket":"^9.1.4","axios-mock-adapter":"^1.20.0","eslint-plugin-import":"^2.25.4","prettier-plugin-jsdoc":"^0.3.38","@rollup/plugin-commonjs":"^22.0.0","typedoc-plugin-markdown":"^3.12.1","@microsoft/api-extractor":"^7.19.5","@microsoft/api-documenter":"^7.16.0","@typescript-eslint/parser":"^5.16.0","rollup-plugin-typescript2":"^0.31.2","@size-limit/preset-big-lib":"^7.0.8","@rollup/plugin-node-resolve":"^13.3.0","eslint-plugin-unused-imports":"^2.0.0","@typescript-eslint/eslint-plugin":"^5.16.0"},"_npmOperationalInternal":{"tmp":"tmp/alchemy-sdk_1.0.3_1655237218197_0.3287822594222032","host":"s3://npm-registry-packages"}},"1.0.4":{"name":"@alch/alchemy-sdk","version":"1.0.4","author":{"name":"Alchemy"},"license":"MIT","_id":"@alch/alchemy-sdk@1.0.4","maintainers":[{"name":"ddgromit","email":"derekdahmer@gmail.com"},{"name":"chub","email":"npm@hbar.us"},{"name":"robalchemy","email":"rob.coleman@alchemy.com"},{"name":"kurushdubash","email":"kurush@alchemy.com"},{"name":"brian-alchemy","email":"brian@alchemy.com"},{"name":"dphilipson","email":"david.philipson@gmail.com"},{"name":"alchemy-team","email":"accounts@alchemy.com"},{"name":"omarsayha","email":"omar@alchemyapi.io"},{"name":"noam-alchemy","email":"noam@alchemyapi.io"},{"name":"stevenzyang","email":"steezyang@gmail.com"},{"name":"brg8","email":"bgodlove88+npmjs@gmail.com"}],"homepage":"https://github.com/alchemyplatform/alchemy-sdk-js#readme","bugs":{"url":"https://github.com/alchemyplatform/alchemy-sdk-js/issues"},"dist":{"shasum":"c9f870423be418e7efce6249a6ee356ff2ef8bcf","tarball":"https://registry.npmjs.org/@alch/alchemy-sdk/-/alchemy-sdk-1.0.4.tgz","fileCount":48,"integrity":"sha512-wTlY55zVJJCCfJ6euTrYYY+eiRCci+5ItjrF02VSO09kPtTYPkzbqfUqyZK+ibHSfWy72qB3wOMcdgITh0+pQg==","signatures":[{"sig":"MEUCIQDyVqH1f0ozhBClTeFpjUQx6bYawUx8UxCcv5XhpsK7nQIgb29ZJUHYLlwCCBiDa1f/OsMiMz2xnbYR4oGKEVp25EU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":5770744,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiq8Y6ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqQUA//dk6cwNqK2oNNLUrLLt3nYjdeNaXZyOgFyYDpyWA1m7aEjdH2\r\nLhxZ/ELtDOwGRHZ+8+5w483xISn0FADaft8iQC/QUSSo1Yx+sxKUeEH4jju1\r\nh1tMGhvq8M83LDX4j+mF0ffN3KDFHQFJrwyF6F7Fh0CsmSOpEStk2pjOXum3\r\nlM1OxsJtMEaU9PJHK7IKWaWw4al1sYLlYtOqXNoWNLGraqBg+uVh1IMwjH0g\r\nnLnaO/AmKI//N+5O5+W+zJiaCz0YYCuWroSnsoE6Dr8Xac6/v6Pkd2GhQWKU\r\nMeQnoRTLvH4ralwVQZwBqwJaO0Lk7Ead0tMf0eETfuVjXxh10wKbTtfxHwKZ\r\nx25Uf3Sx+oQNx7ucyIH7Apy1xZXoa/HPk2vltZg7Uh+ZxZWzCIQx5ni46/vt\r\ni0ekNDK0WnD0bCEZT+86jM8eCJyqqCh6TedJUgJgtty9C0dZjx+7yqivujCG\r\nuzcrdqnYT7H+9wbRFRiH2QNm2FwmR3QDvyfeEC7/tZg6Kg9pbh93QqtUD601\r\nHidUXmJI6CpLK1XHwJDh013YOWe5+2+m3m1Xyif0XqhNNLERAOdPTxVmjvnT\r\npzBU/TKk+sozARYSN3skCDpcmrn7FmNfB1MstqvRrDjYyBoe9ni+0IoU2krD\r\n1M8hwKjl3Obk1Z8Ac5rrrkE4j71sLrg7Kls=\r\n=vMen\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.cjs.js","types":"./dist/src/index.d.ts","module":"dist/index.esm.js","exports":{"node":{"import":"./dist/index.cjs.js","require":"./dist/index.cjs.js"},"default":"./dist/index.esm.js","package.json":"./package.json"},"main-es":"dist/index.mjs","scripts":{"api":"yarn build && api-extractor run","docs":"typedoc --plugin none --out docs src/index.ts","lint":"eslint -c .eslintrc.js '**/*.ts' --ignore-path '.gitignore'","test":"jest test/unit","build":"rollup -c","clean":"rm -rf dist","format":"prettier --write '**/*.{html,js,json,md,ts}'","docs-md":"typedoc --plugin typedoc-plugin-markdown --out docs-md src/index.ts","prepare":"husky install","prebuild":"yarn clean && tsc --emitDeclarationOnly --declaration -p tsconfig.json","lint-file":"eslint --fix","pre-commit":"lint-staged","format-file":"prettier --write"},"_npmUser":{"name":"brian-alchemy","email":"brian@alchemy.com"},"repository":{"url":"git+https://github.com/alchemyplatform/alchemy-sdk-js.git","type":"git"},"size-limit":[{"path":"dist/index.cjs.js","limit":"100 kB"}],"description":"Extended Ethers.js SDK for Alchemy APIs","directories":{},"licenseText":"MIT License\n\nCopyright (c) 2022 Alchemy\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","lint-staged":{"**/*.ts":["yarn lint-file --fix","yarn format-file"],"package.json":["node ./inject-version.js","git add src/version.ts"]},"dependencies":{"ws":"^8.6.0","axios":"^0.26.1","ethers":"^5.6.8","sturdy-websocket":"^0.2.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.5.1","husky":"^7.0.0","tslib":"^2.3.1","eslint":"^8.11.0","rollup":"^2.70.1","ts-jest":"^27.1.4","typedoc":"^0.22.15","prettier":"2.6.0","size-limit":"^7.0.8","typescript":"^4.5.5","@types/jest":"^27.4.1","lint-staged":"^12.3.7","mock-socket":"^9.1.4","axios-mock-adapter":"^1.20.0","eslint-plugin-import":"^2.25.4","prettier-plugin-jsdoc":"^0.3.38","@rollup/plugin-commonjs":"^22.0.0","typedoc-plugin-markdown":"^3.12.1","@microsoft/api-extractor":"^7.19.5","@microsoft/api-documenter":"^7.16.0","@typescript-eslint/parser":"^5.16.0","rollup-plugin-typescript2":"^0.31.2","@size-limit/preset-big-lib":"^7.0.8","@rollup/plugin-node-resolve":"^13.3.0","eslint-plugin-unused-imports":"^2.0.0","@typescript-eslint/eslint-plugin":"^5.16.0"},"_npmOperationalInternal":{"tmp":"tmp/alchemy-sdk_1.0.4_1655424569860_0.755175838666609","host":"s3://npm-registry-packages"}},"1.0.4-beta":{"name":"@alch/alchemy-sdk","version":"1.0.4-beta","author":{"name":"Alchemy"},"license":"MIT","_id":"@alch/alchemy-sdk@1.0.4-beta","maintainers":[{"name":"ddgromit","email":"derekdahmer@gmail.com"},{"name":"chub","email":"npm@hbar.us"},{"name":"robalchemy","email":"rob.coleman@alchemy.com"},{"name":"kurushdubash","email":"kurush@alchemy.com"},{"name":"brian-alchemy","email":"brian@alchemy.com"},{"name":"dphilipson","email":"david.philipson@gmail.com"},{"name":"alchemy-team","email":"accounts@alchemy.com"},{"name":"omarsayha","email":"omar@alchemyapi.io"},{"name":"noam-alchemy","email":"noam@alchemyapi.io"},{"name":"stevenzyang","email":"steezyang@gmail.com"},{"name":"brg8","email":"bgodlove88+npmjs@gmail.com"}],"homepage":"https://github.com/alchemyplatform/alchemy-sdk-js#readme","bugs":{"url":"https://github.com/alchemyplatform/alchemy-sdk-js/issues"},"dist":{"shasum":"76f910f78f2748f06e4d8f487e93fc60d72e9a78","tarball":"https://registry.npmjs.org/@alch/alchemy-sdk/-/alchemy-sdk-1.0.4-beta.tgz","fileCount":42,"integrity":"sha512-sfvYLw0WvmdZaMKFZjpqnumR3Kk979TvFnUoGtddA8iPRWWMSOLWWMjJ0KwBvBbmFXaWaIgCeAeGe+2bZzWAGw==","signatures":[{"sig":"MEUCIGfLT1mPzX6HgcH+1MCk3Vqzr+W7aNnSi2Qp1v1vmG0CAiEA1vz88VxHKh+PH2RBRLIVAS+Fg/XX7s2kUWfaq5GYdxo=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":53873,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJitejnACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpJ+hAAjBTVGTSm5lH6G6/wFMLpfFoG9pxQd1x9zfyM+xA/UfyoFl3q\r\nQKJhtd1+TlM9twZRW9j/R7Hd/XAnN0UxXBILOGQzrttPkVdeyMg9a0ed30B4\r\nda2GmEhKVVBu4hKgijDF5LXwEjdaenObBW3aSsrnq3yoh1jziT6Dr++3YKEY\r\ncGAJUY4IFTlxl7TLAFBWCJHIb+7X42LS7hUWfv4+G0DGbHET7CWcD17DmE5g\r\nvSSkYpOHttlNLZkfMPqxcrSwcVLg032yevdW6RM8nOc/KU9V5GDpYM+VX/Yr\r\n8i1kZLAg/95sf2ZggMgBuX8mnr4fSRH8ahdxiKkmAQcRtyMVhm/ZZvJDZCJ9\r\nqUMOPH2t/APijihp6uqI2QpgmVA6BQc27xM/mvgqdfmszARxNTi40kd0Inks\r\nXlMaRU5XmfUeB3gzh/9rlCUA2ugc0tPZh/UfPUZ9hJr6X/mpkvXc4rrn11xI\r\nHoANVQ8wgLIm1tlGzoup5hWGXxR1uae7RoPlMSirjoSZPCYqn1enHG88OWM4\r\npBXjt3uoEVJdb0bgQIooNRzAWklqI3A/DkAndBL2IkwyCPreFDfikNlhhMNb\r\nm7S1Ea8VnmlQ0dt3CFUopK7Pkaz7QmPVDKgwAFMlodJsTDseg29BnaUSe9Qw\r\nJ1Lw/EW9hSkqN6yy7OfcBNZ+MhnRsU6HHCc=\r\n=3fTC\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.cjs.js","types":"./dist/src/index.d.ts","module":"dist/index.esm.js","readme":"# Alchemy SDK for Javascript\n\nAlchemy SDK helps developers use Alchemy's APIs and endpoints more efficiently. This is a lightweight, modular SDK built\non top of Ethers.js that encapsulates common usage patterns and abstracts away the complexities of both our HTTP and\nJSON-RPC endpoints.\n\nNote that the SDK is still in public beta. Alchemy reserves the right to (and almost certainly will) make breaking\nAPI changes in subsequent releases (don't write production code around it just yet).\n\n## Getting started\n\n```\nnpm install @alch/alchemy-sdk\n```\n\nAfter installing the app, you can then import and use the SDK:\n\n```ts\nimport { Network, initializeAlchemy } from '@alch/alchemy-sdk';\n\n// Optional Config object, but defaults to demo api-key and eth-mainnet.\nconst settings = {\n  apiKey: 'demo', // Replace with your Alchemy API Key.\n  network: Network.ETH_MAINNET, // Replace with your network.\n  maxRetries: 10\n};\n\nconst alchemy = initializeAlchemy(settings);\n```\n\nThe SDK's modular approach exports all Alchemy functions at the top-level to reduce bundle size (only the functions you\nimport\nand use will be included). This means you access each method using the following pattern:\n\n```ts\n// Initializing the alchemy config object\nimport { initializeAlchemy, getNftsForOwner } from '@alch/alchemy-sdk';\n\nconst alchemy = initializeAlchemy(); // using default settings - pass in a settings object to specify your API key and network\n\ngetNftsForOwner(alchemy, '0xshah.eth').then(console.log);\n```\n\nHowever, this can make it harder to discover the full API surface. If you want your IDE to find all functions, you can\nalternatively import\nthe entire SDK (though this is not recommended, as it will increase the bundle size):\n\n```ts\nimport * as alchemySdk from '@alch/alchemy-sdk';\n\nconst alchemy = alchemySdk.initializeAlchemy();\nalchemySdk.getNftsForOwner(alchemy, '0xshah.eth').then(console.log);\n```\n\n## SDK Structure\n\nThe `Alchemy` object returned by `initializeAlchemy()` provides access to the Alchemy API. An optional config\nobject can be passed in when initializing to set your API key, change the network, or specify the max number of retries.\n\nThere are two different patterns for the Alchemy object to be used:\n\n1. It can be passed into top-level functions like `getNftsForOwner()` or `getAssetTransfers()`. The current supported\n   functions using this pattern are the Alchemy NFT API endpoints and Alchemy Enhanced APIs.\n\n2. It can be used to generate an Ethers.js provider that allows access to Alchemy Provider-specific\n   [Ethers.js methods](https://docs.ethers.io/v5/single-page/). These encompass most standard JSON-RPC requests to\n   the blockchain.\n\n## Ethers.js for standard JSON-RPC Calls\n\nTo access standard JSON-RPC calls not in the NFT API or Alchemy Enhanced APIs, the SDK includes Ethers.js.\nThe `Alchemy.getProvider()` function configures the\nEthers.js [AlchemyProvider](https://docs.ethers.io/v5/api/providers/api-providers/#AlchemyProvider) and returns it. This\nallows you to perform core JSON-RPC calls with an Alchemy provider, just as you normally would with Ethers. If you are\nalready using Ethers, you can simply use the provider from `alchemy-sdk` and the rest of your code should just work:\n\n```ts\nimport { initializeAlchemy } from '@alch/alchemy-sdk';\n\nconst alchemy = initializeAlchemy();\n\n// ETH JSON-RPC calls through ethers.js Provider\nconst ethersAlchemyProvider = alchemy.getProvider();\nethersAlchemyProvider\n  .getBalance('0x994b342dd87fc825f66e51ffa3ef71ad818b6893', 'latest')\n  .then(console.log);\n```\n\nConsult the [Ethers.js documentation](https://docs.ethers.io/v5/) for how to use it to call standard JSON-RPC methods.\n\n## Websockets and Subscription Listeners\n\nIn addition to the built-in Ethers.js listeners, the Alchemy SDK includes support for Alchemy's Subscription API. This\nallows you to subscribe to events and receive updates\nas they occur. The two supported subscriptions are\n[alchemy_newFullPendingTransactions](https://alchemy.com/alchemy/enhanced-apis/subscription-api-websockets#alchemy_newfullpendingtransactions)\nand\n[alchemy_filteredNewFullPendingTransactions](https://alchemy.com/alchemy/enhanced-apis/subscription-api-websockets#alchemy_filterednewfullpendingtransactions)\n.\n\nThe `Alchemy.getWebsocketProvider()` function configures the\nAlchemy [AlchemyWebSocketProvider](https://docs.ethers.io/v5/api/providers/api-providers/#AlchemyWebSocketProvider) and\nreturns it. This can be used like the standard Ethers.js Websocket provider to add listeners for Alchemy events:\n\n```ts\nimport { initializeAlchemy } from '@alch/alchemy-sdk';\n\nconst alchemy = initializeAlchemy();\n\nconst websocketProvider = alchemy.getWebsocketProvider();\n\n// Listen to all new pending transactions.\nwebsocketProvider.on(\n  {\n    method: 'alchemy_newFullPendingTransactions'\n  },\n  res => console.log(res)\n);\n\n// Listen to all transactions on the USDC contract.\nwebsocketProvider.on(\n  {\n    method: 'alchemy_filteredNewFullPendingTransactions',\n    address: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48'\n  },\n  res => console.log(res)\n);\n```\n\nThe SDK brings multiple improvements to ensure correct WebSocket behavior in cases of temporary network failure or\ndropped connections. As with any network connection, you should not assume that a WebSocket will remain open forever\nwithout interruption, but correctly handling dropped connections and reconnection by hand can be challenging to get\nright. `alchemy-sdk` automatically handles these failures with no configuration necessary. The main benefits are:\n\n- Resilient event delivery: Unlike standard Web3.js or Ethers.js, you will not permanently miss events which arrive\n  while the backing WebSocket is temporarily down. Instead, you will receive these events as soon as the connection\n  is reopened. Note that if the connection is down for more than 120 blocks (approximately 20 minutes), you may\n  still miss some events that were not part of the most recent 120 blocks.\n- Lowered rate of failure: Compared to standard Web3.js or Ethers.js, there are fewer failures when sending requests\n  over the WebSocket while the connection is down. Alchemy Web3 will attempt to send the requests once the connection\n  is reopened. Note that it is still possible, with a lower likelihood, for outgoing requests to be lost,\n  so you should still have error handling as with any network request.\n\n## NFT Module\n\nThe SDK currently supports the following [NFT API](https://docs.alchemy.com/alchemy/enhanced-apis/nft-api) endpoints:\n\n- `getNftMetadata()`: Get the NFT metadata for a contract address and tokenId.\n- `getNftsForOwner()`: Get NFTs for an owner address.\n- `getNftsForOwnerIterator()`: Get NFTs for an owner address as an async iterator (handles paging automatically).\n- `getNftsForCollection()`: Get all NFTs for a contract address.\n- `getNftForCollectionIterator()`: Get all NFTs for a contract address as an async iterator (handles paging\n  automatically).\n- `getOwnersForNft()`: Get all the owners for a given NFT contract address and a particular token ID.\n- `getOwnersForCollection()`: Get all the owners for a given NFT contract address.\n- `checkNftOwnership()`: Check that the provided owner address owns one or more of the provided NFT contract addresses.\n- `findContractDeployer()`: Find the contract deployer and block number for a given NFT contract address.\n- `refreshNftMetadata()`: Refresh the cached NFT metadata for a contract address and tokenId.\n\n### Comparing `BaseNft` and `Nft`\n\nThe SDK currently uses the `BaseNft` and `Nft` classes to represent NFTs returned by the Alchemy. The `BaseNft` object\ndoes\nnot hold any metadata information and only contains the NFT contract and token ID. The `Nft` object additionally\ncontains the NFT metadata, token URI information, and media.\n\nBy default, the SDK will return the `Nft` object. You can optionally choose to fetch the `BaseNft` object instead by\nsetting the `omitMetadata` parameter to `true`. The SDK documentation describes the different parameter and response\ninterfaces in more detail.\n\n### Pagination\n\nThe Alchemy NFT endpoints return 100 results per page. To get the next page, you can pass in the `pageKey` returned by\nthe\nprevious call. To simplify paginating through all results, the SDK provides the `getNftsIterator()`\nand `getNftsForCollectionIterator()` functions that automatically paginate through all NFTs and yields them via\nan `AsyncIterable`.\n\nHere's an example of how to paginate through all the NFTs in Vitalik's ENS address:\n\n```ts\nimport { initializeAlchemy, getNftsForOwnerIterator } from '@alch/alchemy-sdk';\nconst alchemy = initializeAlchemy();\n\nasync function main() {\n  const ownerAddress = 'vitalik.eth';\n  for await (const nft of getNftsForOwnerIterator(alchemy, ownerAddress)) {\n    console.log('ownedNft:', nft);\n  }\n}\n\nmain();\n```\n\n### SDK vs API Differences\n\nThe NFT API in the SDK standardizes response types to reduce developer friction, but note this results in some\ndifferences compared to the Alchemy REST endpoints:\n\n- Some methods have different naming that the REST API counterparts in order to provide a consistent API interface (\n  e.g. `getNftsForOwner()` is `alchemy_getNfts`, `getOwnersForNft()` is `alchemy_getOwnersForToken`).\n- SDK standardizes to `omitMetadata` parameter (vs. `withMetadata`).\n- Standardization to `pageKey` parameter for pagination (vs. `nextToken`/`startToken`)\n- Empty `TokenUri` fields are omitted.\n- Token ID is always normalized to an integer string on `BaseNft` and `Nft`.\n- Some fields omitted in the REST response are included in the SDK response in order to return an `Nft` object.\n- Some fields in the SDK's `Nft` object are named differently than the REST response.\n\n## Documentation\n\nThe SDK is documented via `tsdoc` comments in the source code. The generated types and documentation are included when\nusing an IDE. To browse the documentation separately, you can view the generated API interfaces\nin `etc/alchemy-sdk.api.md`. You can view generated Markdown files for each endpoint in the `docs-md` directory,\nor as a webpage by opening `docs/index.html` in your browser.\n\n## Future Work\n\nThere's a long list, but here are the main ones:\n\n- Retry count support for json-rpc calls (currently only for NFT API calls).\n- More config options for the base ethers.js AlchemyProvider.\n\n## Examples\n\nBelow are a few usage examples:\n\nGetting the NFTs owned by an address.\n\n```ts\nimport {\n  getNftsForOwner,\n  getNftsForOwnerIterator,\n  NftExcludeFilters,\n  initializeAlchemy\n} from '@alch/alchemy-sdk';\n\nconst alchemy = initializeAlchemy();\n\n// Get how many NFTs an address owns.\ngetNftsForOwner(alchemy, '0xshah.eth').then(nfts => {\n  console.log(nfts.totalCount);\n});\n\n// Get all the image urls for all the NFTs an address owns.\nasync function main() {\n  for await (const nft of getNftsForOwnerIterator(alchemy, '0xshah.eth')) {\n    console.log(nft.media);\n  }\n}\n\nmain();\n\n// Filter out spam NFTs.\ngetNftsForOwner(alchemy, '0xshah.eth', {\n  excludeFilters: [NftExcludeFilters.SPAM]\n}).then(console.log);\n```\n\nGetting all the owners of the BAYC NFT.\n\n```ts\nimport {\n  getOwnersForNft,\n  getNftsForCollectionIterator,\n  initializeAlchemy\n} from '@alch/alchemy-sdk';\n\nconst alchemy = initializeAlchemy();\n\n// Bored Ape Yacht Club contract address.\nconst baycAddress = '0xBC4CA0EdA7647A8aB7C2061c2E118A18a936f13D';\n\nasync function main() {\n  for await (const nft of getNftsForCollectionIterator(alchemy, baycAddress, {\n    // Omit the NFT metadata for smaller payloads.\n    omitMetadata: true\n  })) {\n    await getOwnersForNft(alchemy, nft).then(response =>\n      console.log('owners:', response.owners, 'tokenId:', nft.tokenId)\n    );\n  }\n}\n\nmain();\n```\n\nGet all outbound transfers for a provided address.\n\n```ts\nimport { getTokenBalances, initializeAlchemy } from '@alch/alchemy-sdk';\nconst alchemy = initializeAlchemy();\n\ngetTokenBalances(alchemy, '0x994b342dd87fc825f66e51ffa3ef71ad818b6893').then(\n  console.log\n);\n```\n\n## Questions and Feedback\n\nIf you have any questions, issues, or feedback, please file an issue\non [GitHub](https://github.com/alchemyplatform/alchemy-sdk-js/issues), or drop us a message on\nour [Discord](https://discord.com/channels/735965332958871634/983472322998575174) channel for the SDK.\n","exports":{"node":{"import":"./dist/index.cjs.js","require":"./dist/index.cjs.js"},"default":"./dist/index.esm.js","package.json":"./package.json"},"main-es":"dist/index.mjs","scripts":{"api":"yarn build && api-extractor run","docs":"typedoc --plugin none --out docs src/index.ts","lint":"eslint -c .eslintrc.js '**/*.ts' --ignore-path '.gitignore'","test":"jest test/unit","build":"rollup -c","clean":"rm -rf dist","format":"prettier --write '**/*.{html,js,json,md,ts}'","docs-md":"typedoc --plugin typedoc-plugin-markdown --out docs-md src/index.ts","prepare":"husky install","prebuild":"yarn clean && tsc --emitDeclarationOnly --declaration -p tsconfig.json","lint-file":"eslint --fix","pre-commit":"lint-staged","format-file":"prettier --write"},"_npmUser":{"name":"brian-alchemy","email":"brian@alchemy.com"},"repository":{"url":"git+https://github.com/alchemyplatform/alchemy-sdk-js.git","type":"git"},"size-limit":[{"path":"dist/index.cjs.js","limit":"100 kB"}],"description":"Extended Ethers.js SDK for Alchemy APIs","directories":{},"licenseText":"MIT License\n\nCopyright (c) 2022 Alchemy\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","lint-staged":{"**/*.ts":["yarn lint-file --fix","yarn format-file"],"package.json":["node ./inject-version.js","git add src/version.ts"]},"sideEffects":false,"dependencies":{"axios":"^0.26.1","ethers":"^5.6.8","websocket":"^1.0.34","sturdy-websocket":"^0.2.1"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.5.1","husky":"^7.0.0","tslib":"^2.3.1","eslint":"^8.11.0","rollup":"^2.70.1","ts-jest":"^27.1.4","typedoc":"^0.22.15","prettier":"2.6.0","size-limit":"^7.0.8","typescript":"^4.5.5","@types/jest":"^27.4.1","lint-staged":"^12.3.7","mock-socket":"^9.1.4","axios-mock-adapter":"^1.20.0","eslint-plugin-import":"^2.25.4","prettier-plugin-jsdoc":"^0.3.38","@rollup/plugin-commonjs":"^22.0.0","typedoc-plugin-markdown":"^3.12.1","@microsoft/api-extractor":"^7.19.5","@microsoft/api-documenter":"^7.16.0","@typescript-eslint/parser":"^5.16.0","rollup-plugin-typescript2":"^0.31.2","@size-limit/preset-big-lib":"^7.0.8","@rollup/plugin-node-resolve":"^13.3.0","eslint-plugin-unused-imports":"^2.0.0","@typescript-eslint/eslint-plugin":"^5.16.0"},"_npmOperationalInternal":{"tmp":"tmp/alchemy-sdk_1.0.4-beta_1656088807077_0.55484902207059","host":"s3://npm-registry-packages"}},"1.0.4-beta2":{"name":"@alch/alchemy-sdk","version":"1.0.4-beta2","author":{"name":"Alchemy"},"license":"MIT","_id":"@alch/alchemy-sdk@1.0.4-beta2","maintainers":[{"name":"ddgromit","email":"derekdahmer@gmail.com"},{"name":"chub","email":"npm@hbar.us"},{"name":"robalchemy","email":"rob.coleman@alchemy.com"},{"name":"kurushdubash","email":"kurush@alchemy.com"},{"name":"brian-alchemy","email":"brian@alchemy.com"},{"name":"dphilipson","email":"david.philipson@gmail.com"},{"name":"alchemy-team","email":"accounts@alchemy.com"},{"name":"omarsayha","email":"omar@alchemyapi.io"},{"name":"noam-alchemy","email":"noam@alchemyapi.io"},{"name":"stevenzyang","email":"steezyang@gmail.com"},{"name":"brg8","email":"bgodlove88+npmjs@gmail.com"}],"homepage":"https://github.com/alchemyplatform/alchemy-sdk-js#readme","bugs":{"url":"https://github.com/alchemyplatform/alchemy-sdk-js/issues"},"dist":{"shasum":"0ab9c091626b6eff1c5012245d5bb3b00c491257","tarball":"https://registry.npmjs.org/@alch/alchemy-sdk/-/alchemy-sdk-1.0.4-beta2.tgz","fileCount":48,"integrity":"sha512-4tz+lPTF+7dVf3iZ6bnd1B2OybwYSXzqikFBo5oH3RyV3X/mt7va6SMizkzuoYKZOEXihT+itNKQ3D5ggBHQYA==","signatures":[{"sig":"MEYCIQDALqKiBg1E5HQv31TwFmXeutohD0dZ/SoL7sqKdeGz0AIhAMT61XYz1kgAO4Mc+nY7Qn46a6Uce7HcdShgo8qLKu87","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":5771627,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJitexZACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmo+gA/+OhVn6ZbfPT/NjhRUDvMeNCwyCQ94GIVaIdCr9SGAxyXxqgMI\r\n9VVSnDk+xg2sbSbXHW9wtnZ+6Cnx7soV9AIIwakBRQV7JxTpStJLBMzXbACj\r\nqbTjrcbJj71or+LoGDaRYsdRHE48HjqIej+BLbVikmhgiBgZowPwMRpknuOB\r\ncnTbmwVHCA6qHXS3x2Pl2Kns8s64eyGrp8roGqaSJ5JWNgyX8xlMXQRjmR8D\r\nmogRFPOGKUrdBmCP7v3O9ahc57Yg+ZERjuYYdpRGrxwkWFiP9s0R2ZQzokWk\r\ntWces3GNaRexgptQXqowlOygF4pwQysI6t3SKGjNV3Fru1B2Vu750xYpkPof\r\nFpZkE1qP1YAq3lSLLBMCHCb/nxXTuLEMiKOCPUjxEv1eJVjuL27mtrfHE1SV\r\nR9CvuW6MlS1nsvH0ylJDM2UGLDsYkAAzBuCtMbLs+15KwZnQvre/625awvZp\r\nrQy3FdHTIAnv7cqBEwGREsaj3PzjZYOI5Yr3CGe2ZfsI8NbFHcbvVcN+Qajd\r\nqQgENu2lpR9o8r5CH+4hCtTNUAua5S2igTGsa3cfQh/95Btrz9uv/MMj3zc8\r\nZaZ6dnS11s9vzziU7DfkXfwe3ziH1qXA71BsuSF4RRxjZl19sup2imBc+W57\r\noadLsw0DLUPlaKtCm2NPuQ0P0aQWgVd+o1U=\r\n=fFjD\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.cjs.js","types":"./dist/src/index.d.ts","module":"dist/index.esm.js","readme":"# Alchemy SDK for Javascript\n\nAlchemy SDK helps developers use Alchemy's APIs and endpoints more efficiently. This is a lightweight, modular SDK built\non top of Ethers.js that encapsulates common usage patterns and abstracts away the complexities of both our HTTP and\nJSON-RPC endpoints.\n\nNote that the SDK is still in public beta. Alchemy reserves the right to (and almost certainly will) make breaking\nAPI changes in subsequent releases (don't write production code around it just yet).\n\n## Getting started\n\n```\nnpm install @alch/alchemy-sdk\n```\n\nAfter installing the app, you can then import and use the SDK:\n\n```ts\nimport { Network, initializeAlchemy } from '@alch/alchemy-sdk';\n\n// Optional Config object, but defaults to demo api-key and eth-mainnet.\nconst settings = {\n  apiKey: 'demo', // Replace with your Alchemy API Key.\n  network: Network.ETH_MAINNET, // Replace with your network.\n  maxRetries: 10\n};\n\nconst alchemy = initializeAlchemy(settings);\n```\n\nThe SDK's modular approach exports all Alchemy functions at the top-level to reduce bundle size (only the functions you\nimport\nand use will be included). This means you access each method using the following pattern:\n\n```ts\n// Initializing the alchemy config object\nimport { initializeAlchemy, getNftsForOwner } from '@alch/alchemy-sdk';\n\nconst alchemy = initializeAlchemy(); // using default settings - pass in a settings object to specify your API key and network\n\ngetNftsForOwner(alchemy, '0xshah.eth').then(console.log);\n```\n\nHowever, this can make it harder to discover the full API surface. If you want your IDE to find all functions, you can\nalternatively import\nthe entire SDK (though this is not recommended, as it will increase the bundle size):\n\n```ts\nimport * as alchemySdk from '@alch/alchemy-sdk';\n\nconst alchemy = alchemySdk.initializeAlchemy();\nalchemySdk.getNftsForOwner(alchemy, '0xshah.eth').then(console.log);\n```\n\n## SDK Structure\n\nThe `Alchemy` object returned by `initializeAlchemy()` provides access to the Alchemy API. An optional config\nobject can be passed in when initializing to set your API key, change the network, or specify the max number of retries.\n\nThere are two different patterns for the Alchemy object to be used:\n\n1. It can be passed into top-level functions like `getNftsForOwner()` or `getAssetTransfers()`. The current supported\n   functions using this pattern are the Alchemy NFT API endpoints and Alchemy Enhanced APIs.\n\n2. It can be used to generate an Ethers.js provider that allows access to Alchemy Provider-specific\n   [Ethers.js methods](https://docs.ethers.io/v5/single-page/). These encompass most standard JSON-RPC requests to\n   the blockchain.\n\n## Ethers.js for standard JSON-RPC Calls\n\nTo access standard JSON-RPC calls not in the NFT API or Alchemy Enhanced APIs, the SDK includes Ethers.js.\nThe `Alchemy.getProvider()` function configures the\nEthers.js [AlchemyProvider](https://docs.ethers.io/v5/api/providers/api-providers/#AlchemyProvider) and returns it. This\nallows you to perform core JSON-RPC calls with an Alchemy provider, just as you normally would with Ethers. If you are\nalready using Ethers, you can simply use the provider from `alchemy-sdk` and the rest of your code should just work:\n\n```ts\nimport { initializeAlchemy } from '@alch/alchemy-sdk';\n\nconst alchemy = initializeAlchemy();\n\n// ETH JSON-RPC calls through ethers.js Provider\nconst ethersAlchemyProvider = alchemy.getProvider();\nethersAlchemyProvider\n  .getBalance('0x994b342dd87fc825f66e51ffa3ef71ad818b6893', 'latest')\n  .then(console.log);\n```\n\nConsult the [Ethers.js documentation](https://docs.ethers.io/v5/) for how to use it to call standard JSON-RPC methods.\n\n## Websockets and Subscription Listeners\n\nIn addition to the built-in Ethers.js listeners, the Alchemy SDK includes support for Alchemy's Subscription API. This\nallows you to subscribe to events and receive updates\nas they occur. The two supported subscriptions are\n[alchemy_newFullPendingTransactions](https://alchemy.com/alchemy/enhanced-apis/subscription-api-websockets#alchemy_newfullpendingtransactions)\nand\n[alchemy_filteredNewFullPendingTransactions](https://alchemy.com/alchemy/enhanced-apis/subscription-api-websockets#alchemy_filterednewfullpendingtransactions)\n.\n\nThe `Alchemy.getWebsocketProvider()` function configures the\nAlchemy [AlchemyWebSocketProvider](https://docs.ethers.io/v5/api/providers/api-providers/#AlchemyWebSocketProvider) and\nreturns it. This can be used like the standard Ethers.js Websocket provider to add listeners for Alchemy events:\n\n```ts\nimport { initializeAlchemy } from '@alch/alchemy-sdk';\n\nconst alchemy = initializeAlchemy();\n\nconst websocketProvider = alchemy.getWebsocketProvider();\n\n// Listen to all new pending transactions.\nwebsocketProvider.on(\n  {\n    method: 'alchemy_newFullPendingTransactions'\n  },\n  res => console.log(res)\n);\n\n// Listen to all transactions on the USDC contract.\nwebsocketProvider.on(\n  {\n    method: 'alchemy_filteredNewFullPendingTransactions',\n    address: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48'\n  },\n  res => console.log(res)\n);\n```\n\nThe SDK brings multiple improvements to ensure correct WebSocket behavior in cases of temporary network failure or\ndropped connections. As with any network connection, you should not assume that a WebSocket will remain open forever\nwithout interruption, but correctly handling dropped connections and reconnection by hand can be challenging to get\nright. `alchemy-sdk` automatically handles these failures with no configuration necessary. The main benefits are:\n\n- Resilient event delivery: Unlike standard Web3.js or Ethers.js, you will not permanently miss events which arrive\n  while the backing WebSocket is temporarily down. Instead, you will receive these events as soon as the connection\n  is reopened. Note that if the connection is down for more than 120 blocks (approximately 20 minutes), you may\n  still miss some events that were not part of the most recent 120 blocks.\n- Lowered rate of failure: Compared to standard Web3.js or Ethers.js, there are fewer failures when sending requests\n  over the WebSocket while the connection is down. Alchemy Web3 will attempt to send the requests once the connection\n  is reopened. Note that it is still possible, with a lower likelihood, for outgoing requests to be lost,\n  so you should still have error handling as with any network request.\n\n## NFT Module\n\nThe SDK currently supports the following [NFT API](https://docs.alchemy.com/alchemy/enhanced-apis/nft-api) endpoints:\n\n- `getNftMetadata()`: Get the NFT metadata for a contract address and tokenId.\n- `getNftsForOwner()`: Get NFTs for an owner address.\n- `getNftsForOwnerIterator()`: Get NFTs for an owner address as an async iterator (handles paging automatically).\n- `getNftsForCollection()`: Get all NFTs for a contract address.\n- `getNftForCollectionIterator()`: Get all NFTs for a contract address as an async iterator (handles paging\n  automatically).\n- `getOwnersForNft()`: Get all the owners for a given NFT contract address and a particular token ID.\n- `getOwnersForCollection()`: Get all the owners for a given NFT contract address.\n- `checkNftOwnership()`: Check that the provided owner address owns one or more of the provided NFT contract addresses.\n- `findContractDeployer()`: Find the contract deployer and block number for a given NFT contract address.\n- `refreshNftMetadata()`: Refresh the cached NFT metadata for a contract address and tokenId.\n\n### Comparing `BaseNft` and `Nft`\n\nThe SDK currently uses the `BaseNft` and `Nft` classes to represent NFTs returned by the Alchemy. The `BaseNft` object\ndoes\nnot hold any metadata information and only contains the NFT contract and token ID. The `Nft` object additionally\ncontains the NFT metadata, token URI information, and media.\n\nBy default, the SDK will return the `Nft` object. You can optionally choose to fetch the `BaseNft` object instead by\nsetting the `omitMetadata` parameter to `true`. The SDK documentation describes the different parameter and response\ninterfaces in more detail.\n\n### Pagination\n\nThe Alchemy NFT endpoints return 100 results per page. To get the next page, you can pass in the `pageKey` returned by\nthe\nprevious call. To simplify paginating through all results, the SDK provides the `getNftsIterator()`\nand `getNftsForCollectionIterator()` functions that automatically paginate through all NFTs and yields them via\nan `AsyncIterable`.\n\nHere's an example of how to paginate through all the NFTs in Vitalik's ENS address:\n\n```ts\nimport { initializeAlchemy, getNftsForOwnerIterator } from '@alch/alchemy-sdk';\nconst alchemy = initializeAlchemy();\n\nasync function main() {\n  const ownerAddress = 'vitalik.eth';\n  for await (const nft of getNftsForOwnerIterator(alchemy, ownerAddress)) {\n    console.log('ownedNft:', nft);\n  }\n}\n\nmain();\n```\n\n### SDK vs API Differences\n\nThe NFT API in the SDK standardizes response types to reduce developer friction, but note this results in some\ndifferences compared to the Alchemy REST endpoints:\n\n- Some methods have different naming that the REST API counterparts in order to provide a consistent API interface (\n  e.g. `getNftsForOwner()` is `alchemy_getNfts`, `getOwnersForNft()` is `alchemy_getOwnersForToken`).\n- SDK standardizes to `omitMetadata` parameter (vs. `withMetadata`).\n- Standardization to `pageKey` parameter for pagination (vs. `nextToken`/`startToken`)\n- Empty `TokenUri` fields are omitted.\n- Token ID is always normalized to an integer string on `BaseNft` and `Nft`.\n- Some fields omitted in the REST response are included in the SDK response in order to return an `Nft` object.\n- Some fields in the SDK's `Nft` object are named differently than the REST response.\n\n## Documentation\n\nThe SDK is documented via `tsdoc` comments in the source code. The generated types and documentation are included when\nusing an IDE. To browse the documentation separately, you can view the generated API interfaces\nin `etc/alchemy-sdk.api.md`. You can view generated Markdown files for each endpoint in the `docs-md` directory,\nor as a webpage by opening `docs/index.html` in your browser.\n\n## Future Work\n\nThere's a long list, but here are the main ones:\n\n- Retry count support for json-rpc calls (currently only for NFT API calls).\n- More config options for the base ethers.js AlchemyProvider.\n\n## Examples\n\nBelow are a few usage examples:\n\nGetting the NFTs owned by an address.\n\n```ts\nimport {\n  getNftsForOwner,\n  getNftsForOwnerIterator,\n  NftExcludeFilters,\n  initializeAlchemy\n} from '@alch/alchemy-sdk';\n\nconst alchemy = initializeAlchemy();\n\n// Get how many NFTs an address owns.\ngetNftsForOwner(alchemy, '0xshah.eth').then(nfts => {\n  console.log(nfts.totalCount);\n});\n\n// Get all the image urls for all the NFTs an address owns.\nasync function main() {\n  for await (const nft of getNftsForOwnerIterator(alchemy, '0xshah.eth')) {\n    console.log(nft.media);\n  }\n}\n\nmain();\n\n// Filter out spam NFTs.\ngetNftsForOwner(alchemy, '0xshah.eth', {\n  excludeFilters: [NftExcludeFilters.SPAM]\n}).then(console.log);\n```\n\nGetting all the owners of the BAYC NFT.\n\n```ts\nimport {\n  getOwnersForNft,\n  getNftsForCollectionIterator,\n  initializeAlchemy\n} from '@alch/alchemy-sdk';\n\nconst alchemy = initializeAlchemy();\n\n// Bored Ape Yacht Club contract address.\nconst baycAddress = '0xBC4CA0EdA7647A8aB7C2061c2E118A18a936f13D';\n\nasync function main() {\n  for await (const nft of getNftsForCollectionIterator(alchemy, baycAddress, {\n    // Omit the NFT metadata for smaller payloads.\n    omitMetadata: true\n  })) {\n    await getOwnersForNft(alchemy, nft).then(response =>\n      console.log('owners:', response.owners, 'tokenId:', nft.tokenId)\n    );\n  }\n}\n\nmain();\n```\n\nGet all outbound transfers for a provided address.\n\n```ts\nimport { getTokenBalances, initializeAlchemy } from '@alch/alchemy-sdk';\nconst alchemy = initializeAlchemy();\n\ngetTokenBalances(alchemy, '0x994b342dd87fc825f66e51ffa3ef71ad818b6893').then(\n  console.log\n);\n```\n\n## Questions and Feedback\n\nIf you have any questions, issues, or feedback, please file an issue\non [GitHub](https://github.com/alchemyplatform/alchemy-sdk-js/issues), or drop us a message on\nour [Discord](https://discord.com/channels/735965332958871634/983472322998575174) channel for the SDK.\n","exports":{"node":{"import":"./dist/index.cjs.js","require":"./dist/index.cjs.js"},"default":"./dist/index.esm.js","package.json":"./package.json"},"main-es":"dist/index.mjs","scripts":{"api":"yarn build && api-extractor run","docs":"typedoc --plugin none --out docs src/index.ts","lint":"eslint -c .eslintrc.js '**/*.ts' --ignore-path '.gitignore'","test":"jest test/unit","build":"rollup -c","clean":"rm -rf dist","format":"prettier --write '**/*.{html,js,json,md,ts}'","docs-md":"typedoc --plugin typedoc-plugin-markdown --out docs-md src/index.ts","prepare":"husky install","prebuild":"yarn clean && tsc --emitDeclarationOnly --declaration -p tsconfig.json","lint-file":"eslint --fix","pre-commit":"lint-staged","format-file":"prettier --write"},"_npmUser":{"name":"brian-alchemy","email":"brian@alchemy.com"},"repository":{"url":"git+https://github.com/alchemyplatform/alchemy-sdk-js.git","type":"git"},"size-limit":[{"path":"dist/index.cjs.js","limit":"100 kB"}],"description":"Extended Ethers.js SDK for Alchemy APIs","directories":{},"licenseText":"MIT License\n\nCopyright (c) 2022 Alchemy\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","lint-staged":{"**/*.ts":["yarn lint-file --fix","yarn format-file"],"package.json":["node ./inject-version.js","git add src/version.ts"]},"sideEffects":false,"dependencies":{"axios":"^0.26.1","ethers":"^5.6.8","websocket":"^1.0.34","sturdy-websocket":"^0.2.1"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.5.1","husky":"^7.0.0","tslib":"^2.3.1","eslint":"^8.11.0","rollup":"^2.70.1","ts-jest":"^27.1.4","typedoc":"^0.22.15","prettier":"2.6.0","size-limit":"^7.0.8","typescript":"^4.5.5","@types/jest":"^27.4.1","lint-staged":"^12.3.7","mock-socket":"^9.1.4","axios-mock-adapter":"^1.20.0","eslint-plugin-import":"^2.25.4","prettier-plugin-jsdoc":"^0.3.38","@rollup/plugin-commonjs":"^22.0.0","typedoc-plugin-markdown":"^3.12.1","@microsoft/api-extractor":"^7.19.5","@microsoft/api-documenter":"^7.16.0","@typescript-eslint/parser":"^5.16.0","rollup-plugin-typescript2":"^0.31.2","@size-limit/preset-big-lib":"^7.0.8","@rollup/plugin-node-resolve":"^13.3.0","eslint-plugin-unused-imports":"^2.0.0","@typescript-eslint/eslint-plugin":"^5.16.0"},"_npmOperationalInternal":{"tmp":"tmp/alchemy-sdk_1.0.4-beta2_1656089689242_0.041915831239494716","host":"s3://npm-registry-packages"}},"1.0.4-beta3":{"name":"@alch/alchemy-sdk","version":"1.0.4-beta3","author":{"name":"Alchemy"},"license":"MIT","_id":"@alch/alchemy-sdk@1.0.4-beta3","maintainers":[{"name":"ddgromit","email":"derekdahmer@gmail.com"},{"name":"chub","email":"npm@hbar.us"},{"name":"robalchemy","email":"rob.coleman@alchemy.com"},{"name":"kurushdubash","email":"kurush@alchemy.com"},{"name":"brian-alchemy","email":"brian@alchemy.com"},{"name":"dphilipson","email":"david.philipson@gmail.com"},{"name":"alchemy-team","email":"accounts@alchemy.com"},{"name":"omarsayha","email":"omar@alchemyapi.io"},{"name":"noam-alchemy","email":"noam@alchemyapi.io"},{"name":"stevenzyang","email":"steezyang@gmail.com"},{"name":"brg8","email":"bgodlove88+npmjs@gmail.com"}],"homepage":"https://github.com/alchemyplatform/alchemy-sdk-js#readme","bugs":{"url":"https://github.com/alchemyplatform/alchemy-sdk-js/issues"},"dist":{"shasum":"0907ec4117c9e9638e663d1837a38acc254bd944","tarball":"https://registry.npmjs.org/@alch/alchemy-sdk/-/alchemy-sdk-1.0.4-beta3.tgz","fileCount":48,"integrity":"sha512-TN92m3s2iP6bebeaKQANXCGRIetHe0ekJq5WSjc7VvAERTIxLu36JbAr+ujkf1ALpP1DF6f75hxGL/EC/KW74Q==","signatures":[{"sig":"MEUCIQChH8LKtU2rpHHvKj0hI3Or4WMUq7P4a1b9wYM9PCHKDwIgMuyIB6CH2RPiQcj1X5CM9Hw/k5o3duFUcQ6Zq80SCTQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":7384647,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJitg49ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmp2ow//XLAmWQWpE4DnPfnWv0O9tUjpjWzyMHseomkf9qscX1F4nm+O\r\nsFt2keZFoW8FQ22kxvZJ/40oapFPNDqR07wqlTTiZiIXJyelt+gAKVKECTUN\r\nHnwuTv7Cyu+OTP62hFIDKE9tnGMVQTciJT6cMuZCGDLQk1ApBALuk1VqWZjt\r\ns2K23AJQ8jRH0FcH0tpXNmTzLUivtObvyrb5/4/Hoj75DjzEf2mAy0tGGH0q\r\nnKFkF8kdhEZpg6IxIvHWIQzOli2Xd+E5xAfqISKiOCfVgAsJo2CXm/sGbYBk\r\nym5gvqlra7ymQqE79JRmCtvFGL/dyb7xbaQDjFVqYtZ28a4eU9w1+woI/1O8\r\nKFfETg7suyuzUUKJINQkHBlL5U9yh8OY2l2yUFohvnqhYzwKGKfW+sub5Iov\r\nFX1H4unsadrDO/epa1J6T1miwNA8GtT7bVGmEfRuQIIhcSGJzOQFclcpIv9i\r\n94kU3SOX6qqCM5verAqVltibYwmeQqoWFh7wNRuiYhsWXtqrsnF8LbkzPh9l\r\nsP0NrrX2AKSG6rAsg8wN2bCuv92BD848RXT8+1DTU5mHfsjdMfl8L2sTb37C\r\nI5LZ1EcNQ8BoScnJR3WjMPf8zINXthDTa1YCGyTo/dkZRb6mSUgI9wUkgA7D\r\nPHFkpQ1GSKAuiDsSFW1ct9gN1GEQdqatJbQ=\r\n=V5v5\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.cjs.js","types":"./dist/src/index.d.ts","module":"dist/index.esm.js","readme":"# Alchemy SDK for Javascript\n\nAlchemy SDK helps developers use Alchemy's APIs and endpoints more efficiently. This is a lightweight, modular SDK built\non top of Ethers.js that encapsulates common usage patterns and abstracts away the complexities of both our HTTP and\nJSON-RPC endpoints.\n\nNote that the SDK is still in public beta. Alchemy reserves the right to (and almost certainly will) make breaking\nAPI changes in subsequent releases (don't write production code around it just yet).\n\n## Getting started\n\n```\nnpm install @alch/alchemy-sdk\n```\n\nAfter installing the app, you can then import and use the SDK:\n\n```ts\nimport { Network, initializeAlchemy } from '@alch/alchemy-sdk';\n\n// Optional Config object, but defaults to demo api-key and eth-mainnet.\nconst settings = {\n  apiKey: 'demo', // Replace with your Alchemy API Key.\n  network: Network.ETH_MAINNET, // Replace with your network.\n  maxRetries: 10\n};\n\nconst alchemy = initializeAlchemy(settings);\n```\n\nThe SDK's modular approach exports all Alchemy functions at the top-level to reduce bundle size (only the functions you\nimport\nand use will be included). This means you access each method using the following pattern:\n\n```ts\n// Initializing the alchemy config object\nimport { initializeAlchemy, getNftsForOwner } from '@alch/alchemy-sdk';\n\nconst alchemy = initializeAlchemy(); // using default settings - pass in a settings object to specify your API key and network\n\ngetNftsForOwner(alchemy, '0xshah.eth').then(console.log);\n```\n\nHowever, this can make it harder to discover the full API surface. If you want your IDE to find all functions, you can\nalternatively import\nthe entire SDK (though this is not recommended, as it will increase the bundle size):\n\n```ts\nimport * as alchemySdk from '@alch/alchemy-sdk';\n\nconst alchemy = alchemySdk.initializeAlchemy();\nalchemySdk.getNftsForOwner(alchemy, '0xshah.eth').then(console.log);\n```\n\n## SDK Structure\n\nThe `Alchemy` object returned by `initializeAlchemy()` provides access to the Alchemy API. An optional config\nobject can be passed in when initializing to set your API key, change the network, or specify the max number of retries.\n\nThere are two different patterns for the Alchemy object to be used:\n\n1. It can be passed into top-level functions like `getNftsForOwner()` or `getAssetTransfers()`. The current supported\n   functions using this pattern are the Alchemy NFT API endpoints and Alchemy Enhanced APIs.\n\n2. It can be used to generate an Ethers.js provider that allows access to Alchemy Provider-specific\n   [Ethers.js methods](https://docs.ethers.io/v5/single-page/). These encompass most standard JSON-RPC requests to\n   the blockchain.\n\n## Ethers.js for standard JSON-RPC Calls\n\nTo access standard JSON-RPC calls not in the NFT API or Alchemy Enhanced APIs, the SDK includes Ethers.js.\nThe `Alchemy.getProvider()` function configures the\nEthers.js [AlchemyProvider](https://docs.ethers.io/v5/api/providers/api-providers/#AlchemyProvider) and returns it. This\nallows you to perform core JSON-RPC calls with an Alchemy provider, just as you normally would with Ethers. If you are\nalready using Ethers, you can simply use the provider from `alchemy-sdk` and the rest of your code should just work:\n\n```ts\nimport { initializeAlchemy } from '@alch/alchemy-sdk';\n\nconst alchemy = initializeAlchemy();\n\n// ETH JSON-RPC calls through ethers.js Provider\nconst ethersAlchemyProvider = alchemy.getProvider();\nethersAlchemyProvider\n  .getBalance('0x994b342dd87fc825f66e51ffa3ef71ad818b6893', 'latest')\n  .then(console.log);\n```\n\nConsult the [Ethers.js documentation](https://docs.ethers.io/v5/) for how to use it to call standard JSON-RPC methods.\n\n## Websockets and Subscription Listeners\n\nIn addition to the built-in Ethers.js listeners, the Alchemy SDK includes support for Alchemy's Subscription API. This\nallows you to subscribe to events and receive updates\nas they occur. The two supported subscriptions are\n[alchemy_newFullPendingTransactions](https://alchemy.com/alchemy/enhanced-apis/subscription-api-websockets#alchemy_newfullpendingtransactions)\nand\n[alchemy_filteredNewFullPendingTransactions](https://alchemy.com/alchemy/enhanced-apis/subscription-api-websockets#alchemy_filterednewfullpendingtransactions)\n.\n\nThe `Alchemy.getWebsocketProvider()` function configures the\nAlchemy [AlchemyWebSocketProvider](https://docs.ethers.io/v5/api/providers/api-providers/#AlchemyWebSocketProvider) and\nreturns it. This can be used like the standard Ethers.js Websocket provider to add listeners for Alchemy events:\n\n```ts\nimport { initializeAlchemy } from '@alch/alchemy-sdk';\n\nconst alchemy = initializeAlchemy();\n\nconst websocketProvider = alchemy.getWebsocketProvider();\n\n// Listen to all new pending transactions.\nwebsocketProvider.on(\n  {\n    method: 'alchemy_newFullPendingTransactions'\n  },\n  res => console.log(res)\n);\n\n// Listen to all transactions on the USDC contract.\nwebsocketProvider.on(\n  {\n    method: 'alchemy_filteredNewFullPendingTransactions',\n    address: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48'\n  },\n  res => console.log(res)\n);\n```\n\nThe SDK brings multiple improvements to ensure correct WebSocket behavior in cases of temporary network failure or\ndropped connections. As with any network connection, you should not assume that a WebSocket will remain open forever\nwithout interruption, but correctly handling dropped connections and reconnection by hand can be challenging to get\nright. `alchemy-sdk` automatically handles these failures with no configuration necessary. The main benefits are:\n\n- Resilient event delivery: Unlike standard Web3.js or Ethers.js, you will not permanently miss events which arrive\n  while the backing WebSocket is temporarily down. Instead, you will receive these events as soon as the connection\n  is reopened. Note that if the connection is down for more than 120 blocks (approximately 20 minutes), you may\n  still miss some events that were not part of the most recent 120 blocks.\n- Lowered rate of failure: Compared to standard Web3.js or Ethers.js, there are fewer failures when sending requests\n  over the WebSocket while the connection is down. Alchemy Web3 will attempt to send the requests once the connection\n  is reopened. Note that it is still possible, with a lower likelihood, for outgoing requests to be lost,\n  so you should still have error handling as with any network request.\n\n## NFT Module\n\nThe SDK currently supports the following [NFT API](https://docs.alchemy.com/alchemy/enhanced-apis/nft-api) endpoints:\n\n- `getNftMetadata()`: Get the NFT metadata for a contract address and tokenId.\n- `getNftsForOwner()`: Get NFTs for an owner address.\n- `getNftsForOwnerIterator()`: Get NFTs for an owner address as an async iterator (handles paging automatically).\n- `getNftsForCollection()`: Get all NFTs for a contract address.\n- `getNftForCollectionIterator()`: Get all NFTs for a contract address as an async iterator (handles paging\n  automatically).\n- `getOwnersForNft()`: Get all the owners for a given NFT contract address and a particular token ID.\n- `getOwnersForCollection()`: Get all the owners for a given NFT contract address.\n- `checkNftOwnership()`: Check that the provided owner address owns one or more of the provided NFT contract addresses.\n- `findContractDeployer()`: Find the contract deployer and block number for a given NFT contract address.\n- `refreshNftMetadata()`: Refresh the cached NFT metadata for a contract address and tokenId.\n\n### Comparing `BaseNft` and `Nft`\n\nThe SDK currently uses the `BaseNft` and `Nft` classes to represent NFTs returned by the Alchemy. The `BaseNft` object\ndoes\nnot hold any metadata information and only contains the NFT contract and token ID. The `Nft` object additionally\ncontains the NFT metadata, token URI information, and media.\n\nBy default, the SDK will return the `Nft` object. You can optionally choose to fetch the `BaseNft` object instead by\nsetting the `omitMetadata` parameter to `true`. The SDK documentation describes the different parameter and response\ninterfaces in more detail.\n\n### Pagination\n\nThe Alchemy NFT endpoints return 100 results per page. To get the next page, you can pass in the `pageKey` returned by\nthe\nprevious call. To simplify paginating through all results, the SDK provides the `getNftsIterator()`\nand `getNftsForCollectionIterator()` functions that automatically paginate through all NFTs and yields them via\nan `AsyncIterable`.\n\nHere's an example of how to paginate through all the NFTs in Vitalik's ENS address:\n\n```ts\nimport { initializeAlchemy, getNftsForOwnerIterator } from '@alch/alchemy-sdk';\nconst alchemy = initializeAlchemy();\n\nasync function main() {\n  const ownerAddress = 'vitalik.eth';\n  for await (const nft of getNftsForOwnerIterator(alchemy, ownerAddress)) {\n    console.log('ownedNft:', nft);\n  }\n}\n\nmain();\n```\n\n### SDK vs API Differences\n\nThe NFT API in the SDK standardizes response types to reduce developer friction, but note this results in some\ndifferences compared to the Alchemy REST endpoints:\n\n- Some methods have different naming that the REST API counterparts in order to provide a consistent API interface (\n  e.g. `getNftsForOwner()` is `alchemy_getNfts`, `getOwnersForNft()` is `alchemy_getOwnersForToken`).\n- SDK standardizes to `omitMetadata` parameter (vs. `withMetadata`).\n- Standardization to `pageKey` parameter for pagination (vs. `nextToken`/`startToken`)\n- Empty `TokenUri` fields are omitted.\n- Token ID is always normalized to an integer string on `BaseNft` and `Nft`.\n- Some fields omitted in the REST response are included in the SDK response in order to return an `Nft` object.\n- Some fields in the SDK's `Nft` object are named differently than the REST response.\n\n## Documentation\n\nThe SDK is documented via `tsdoc` comments in the source code. The generated types and documentation are included when\nusing an IDE. To browse the documentation separately, you can view the generated API interfaces\nin `etc/alchemy-sdk.api.md`. You can view generated Markdown files for each endpoint in the `docs-md` directory,\nor as a webpage by opening `docs/index.html` in your browser.\n\n## Future Work\n\nThere's a long list, but here are the main ones:\n\n- Retry count support for json-rpc calls (currently only for NFT API calls).\n- More config options for the base ethers.js AlchemyProvider.\n\n## Examples\n\nBelow are a few usage examples:\n\nGetting the NFTs owned by an address.\n\n```ts\nimport {\n  getNftsForOwner,\n  getNftsForOwnerIterator,\n  NftExcludeFilters,\n  initializeAlchemy\n} from '@alch/alchemy-sdk';\n\nconst alchemy = initializeAlchemy();\n\n// Get how many NFTs an address owns.\ngetNftsForOwner(alchemy, '0xshah.eth').then(nfts => {\n  console.log(nfts.totalCount);\n});\n\n// Get all the image urls for all the NFTs an address owns.\nasync function main() {\n  for await (const nft of getNftsForOwnerIterator(alchemy, '0xshah.eth')) {\n    console.log(nft.media);\n  }\n}\n\nmain();\n\n// Filter out spam NFTs.\ngetNftsForOwner(alchemy, '0xshah.eth', {\n  excludeFilters: [NftExcludeFilters.SPAM]\n}).then(console.log);\n```\n\nGetting all the owners of the BAYC NFT.\n\n```ts\nimport {\n  getOwnersForNft,\n  getNftsForCollectionIterator,\n  initializeAlchemy\n} from '@alch/alchemy-sdk';\n\nconst alchemy = initializeAlchemy();\n\n// Bored Ape Yacht Club contract address.\nconst baycAddress = '0xBC4CA0EdA7647A8aB7C2061c2E118A18a936f13D';\n\nasync function main() {\n  for await (const nft of getNftsForCollectionIterator(alchemy, baycAddress, {\n    // Omit the NFT metadata for smaller payloads.\n    omitMetadata: true\n  })) {\n    await getOwnersForNft(alchemy, nft).then(response =>\n      console.log('owners:', response.owners, 'tokenId:', nft.tokenId)\n    );\n  }\n}\n\nmain();\n```\n\nGet all outbound transfers for a provided address.\n\n```ts\nimport { getTokenBalances, initializeAlchemy } from '@alch/alchemy-sdk';\nconst alchemy = initializeAlchemy();\n\ngetTokenBalances(alchemy, '0x994b342dd87fc825f66e51ffa3ef71ad818b6893').then(\n  console.log\n);\n```\n\n## Questions and Feedback\n\nIf you have any questions, issues, or feedback, please file an issue\non [GitHub](https://github.com/alchemyplatform/alchemy-sdk-js/issues), or drop us a message on\nour [Discord](https://discord.com/channels/735965332958871634/983472322998575174) channel for the SDK.\n","exports":{"node":{"import":"./dist/index.cjs.js","require":"./dist/index.cjs.js"},"default":"./dist/index.esm.js","package.json":"./package.json"},"main-es":"dist/index.mjs","scripts":{"api":"yarn build && api-extractor run","docs":"typedoc --plugin none --out docs src/index.ts","lint":"eslint -c .eslintrc.js '**/*.ts' --ignore-path '.gitignore'","test":"jest test/unit","build":"rollup -c","clean":"rm -rf dist","format":"prettier --write '**/*.{html,js,json,md,ts}'","docs-md":"typedoc --plugin typedoc-plugin-markdown --out docs-md src/index.ts","prepare":"husky install","prebuild":"yarn clean && tsc --emitDeclarationOnly --declaration -p tsconfig.json","lint-file":"eslint --fix","pre-commit":"lint-staged","format-file":"prettier --write"},"_npmUser":{"name":"brian-alchemy","email":"brian@alchemy.com"},"repository":{"url":"git+https://github.com/alchemyplatform/alchemy-sdk-js.git","type":"git"},"size-limit":[{"path":"dist/index.cjs.js","limit":"100 kB"}],"description":"Extended Ethers.js SDK for Alchemy APIs","directories":{},"licenseText":"MIT License\n\nCopyright (c) 2022 Alchemy\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","lint-staged":{"**/*.ts":["yarn lint-file --fix","yarn format-file"],"package.json":["node ./inject-version.js","git add src/version.ts"]},"sideEffects":false,"dependencies":{"axios":"^0.26.1","ethers":"^5.6.8","websocket":"^1.0.34","sturdy-websocket":"^0.2.1"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.5.1","husky":"^7.0.0","tslib":"^2.3.1","eslint":"^8.11.0","rollup":"^2.70.1","ts-jest":"^27.1.4","typedoc":"^0.22.15","prettier":"2.6.0","size-limit":"^7.0.8","typescript":"^4.5.5","@types/jest":"^27.4.1","lint-staged":"^12.3.7","mock-socket":"^9.1.4","axios-mock-adapter":"^1.20.0","eslint-plugin-import":"^2.25.4","prettier-plugin-jsdoc":"^0.3.38","@rollup/plugin-commonjs":"^22.0.0","typedoc-plugin-markdown":"^3.12.1","@microsoft/api-extractor":"^7.19.5","@microsoft/api-documenter":"^7.16.0","@typescript-eslint/parser":"^5.16.0","rollup-plugin-typescript2":"^0.31.2","@size-limit/preset-big-lib":"^7.0.8","@rollup/plugin-node-resolve":"^13.3.0","eslint-plugin-unused-imports":"^2.0.0","@typescript-eslint/eslint-plugin":"^5.16.0"},"_npmOperationalInternal":{"tmp":"tmp/alchemy-sdk_1.0.4-beta3_1656098365365_0.659694901484849","host":"s3://npm-registry-packages"}},"1.0.5-beta1":{"name":"@alch/alchemy-sdk","version":"1.0.5-beta1","author":{"name":"Alchemy"},"license":"MIT","_id":"@alch/alchemy-sdk@1.0.5-beta1","maintainers":[{"name":"ddgromit","email":"derekdahmer@gmail.com"},{"name":"chub","email":"npm@hbar.us"},{"name":"robalchemy","email":"rob.coleman@alchemy.com"},{"name":"kurushdubash","email":"kurush@alchemy.com"},{"name":"brian-alchemy","email":"brian@alchemy.com"},{"name":"dphilipson","email":"david.philipson@gmail.com"},{"name":"alchemy-team","email":"accounts@alchemy.com"},{"name":"omarsayha","email":"omar@alchemyapi.io"},{"name":"noam-alchemy","email":"noam@alchemyapi.io"},{"name":"stevenzyang","email":"steezyang@gmail.com"},{"name":"brg8","email":"bgodlove88+npmjs@gmail.com"}],"homepage":"https://github.com/alchemyplatform/alchemy-sdk-js#readme","bugs":{"url":"https://github.com/alchemyplatform/alchemy-sdk-js/issues"},"dist":{"shasum":"75a0374f5de674bafe2739658f6d53f660b938cb","tarball":"https://registry.npmjs.org/@alch/alchemy-sdk/-/alchemy-sdk-1.0.5-beta1.tgz","fileCount":48,"integrity":"sha512-7OIWd3GKVz2IMkAr4jOecrWmaHSQqm63XHyNSOXsXgUCCTCe+4c+CeYf/7F576RMR6CRQKbz6do6WVI5NS5NcA==","signatures":[{"sig":"MEQCIF8Dfo3Cnycq2qH+d7HuKwLYk0g0lKfdq5dz9Nvi7rcWAiAEZS6L4ntD1UROfaS0ygYD7aKoGx5HmPu+DkRdpJIQrA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":5773102,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJivhzmACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmp/GA//VOhfBCg+nYx6MkmJ1pJs5xWtgKcZ/FcGKgdVSThX/BSLMVoX\r\nONq3RBQ4gr0Sugj+DLa7loSw112SdscEmwHil6Uzwe1tZrqFUOWqWBRHuHO2\r\nT6jcPK82oTWeVxAsYohwqAd9RomF0aob6llAMXE5VrM8gsGyVlWC9Lpk15d9\r\nmEE1JANlPuFb6k3vG+apQl0UQA4+MFxuwJVSd1oH4S46SUEa7y3Ch9s+gSEv\r\nLwWwzOe4vs5XS+Xy5oV3+JqUUnOUZNJYOKCZKWjpwrz6i7B0niQTR3YtMwze\r\npGKWpU4y1HUIiJ4lxJerKqW69W4PO0DTwzjrDSB078O/MbpwltGQMk6kgf5c\r\nBfzOQxecmUmBgaTZcT66jB2FyxTcfTnN0pAo9PVFAsXsDzBpckHI2PBrsEg1\r\nCG0i62Z+8Zn3ni2VzWjpsCFm1FgTGjwPobnBGAxhBYWffGb82APA2ugv6/ON\r\nKfaHKCoByzGiNEc1XDDFabKIh4fresRPhbtMYYL87VgqftzgCPDlcWLpqcqI\r\neo9XhUthi1dyW/M5pf1i7laPODR/fvgHBwwBCBMdEwe4OfcSlgswpcxxv7GF\r\nT+NwKR4XjOCV+DE+zgOJgZD0cJwuQgvvx/7NCSoFwZR3qt4tWSD7detPizbb\r\nEqPwLJpKwejcCFESC/+vsJ0Tc0gbBy0sOtw=\r\n=qkte\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.cjs.js","types":"./dist/src/index.d.ts","module":"dist/index.esm.js","readme":"# Alchemy SDK for Javascript\n\nAlchemy SDK helps developers use Alchemy's APIs and endpoints more efficiently. This is a lightweight, modular SDK built\non top of Ethers.js that encapsulates common usage patterns and abstracts away the complexities of both our HTTP and\nJSON-RPC endpoints.\n\nNote that the SDK is still in public beta. Alchemy reserves the right to (and almost certainly will) make breaking\nAPI changes in subsequent releases (don't write production code around it just yet).\n\n## Getting started\n\n```\nnpm install @alch/alchemy-sdk\n```\n\nAfter installing the app, you can then import and use the SDK:\n\n```ts\nimport { Network, initializeAlchemy } from '@alch/alchemy-sdk';\n\n// Optional Config object, but defaults to demo api-key and eth-mainnet.\nconst settings = {\n  apiKey: 'demo', // Replace with your Alchemy API Key.\n  network: Network.ETH_MAINNET, // Replace with your network.\n  maxRetries: 10\n};\n\nconst alchemy = initializeAlchemy(settings);\n```\n\nThe SDK's modular approach exports all Alchemy functions at the top-level to reduce bundle size (only the functions you\nimport\nand use will be included). This means you access each method using the following pattern:\n\n```ts\n// Initializing the alchemy config object\nimport { initializeAlchemy, getNftsForOwner } from '@alch/alchemy-sdk';\n\nconst alchemy = initializeAlchemy(); // using default settings - pass in a settings object to specify your API key and network\n\ngetNftsForOwner(alchemy, '0xshah.eth').then(console.log);\n```\n\nHowever, this can make it harder to discover the full API surface. If you want your IDE to find all functions, you can\nalternatively import\nthe entire SDK (though this is not recommended, as it will increase the bundle size):\n\n```ts\nimport * as alchemySdk from '@alch/alchemy-sdk';\n\nconst alchemy = alchemySdk.initializeAlchemy();\nalchemySdk.getNftsForOwner(alchemy, '0xshah.eth').then(console.log);\n```\n\n### Preventing Breaking Changes\n\nThe SDK is currently in public beta, and will undergo breaking changes before its official release. To protect your\nproject from breaking changes, make sure to pin the version of the SDK you are using in your `package.json` file. Please\ncheck the release notes to see if any breaking changes have been made. While the SDK in the public beta, minor versions\nmay contain breaking changes, but patch versions under the same minor version should be safe to use interchangeably.\n\nFor example, to pin to a specific version of the SDK in your `package.json` file:\n\n```\n{\n  \"dependencies\": {\n    \"@alch/alchemy-sdk\": \"1.0.4\"\n  }\n}\n```\n\n## SDK Structure\n\nThe `Alchemy` object returned by `initializeAlchemy()` provides access to the Alchemy API. An optional config\nobject can be passed in when initializing to set your API key, change the network, or specify the max number of retries.\n\nThere are two different patterns for the Alchemy object to be used:\n\n1. It can be passed into top-level functions like `getNftsForOwner()` or `getAssetTransfers()`. The current supported\n   functions using this pattern are the Alchemy NFT API endpoints and Alchemy Enhanced APIs.\n\n2. It can be used to generate an Ethers.js provider that allows access to Alchemy Provider-specific\n   [Ethers.js methods](https://docs.ethers.io/v5/single-page/). These encompass most standard JSON-RPC requests to\n   the blockchain.\n\n## Ethers.js for standard JSON-RPC Calls\n\nTo access standard JSON-RPC calls not in the NFT API or Alchemy Enhanced APIs, the SDK includes Ethers.js.\nThe `Alchemy.getProvider()` function configures the\nEthers.js [AlchemyProvider](https://docs.ethers.io/v5/api/providers/api-providers/#AlchemyProvider) and returns it. This\nallows you to perform core JSON-RPC calls with an Alchemy provider, just as you normally would with Ethers. If you are\nalready using Ethers, you can simply use the provider from `alchemy-sdk` and the rest of your code should just work:\n\n```ts\nimport { initializeAlchemy } from '@alch/alchemy-sdk';\n\nconst alchemy = initializeAlchemy();\n\n// ETH JSON-RPC calls through ethers.js Provider\nconst ethersAlchemyProvider = alchemy.getProvider();\nethersAlchemyProvider\n  .getBalance('0x994b342dd87fc825f66e51ffa3ef71ad818b6893', 'latest')\n  .then(console.log);\n```\n\nConsult the [Ethers.js documentation](https://docs.ethers.io/v5/) for how to use it to call standard JSON-RPC methods.\n\n## Websockets and Subscription Listeners\n\nIn addition to the built-in Ethers.js listeners, the Alchemy SDK includes support for Alchemy's Subscription API. This\nallows you to subscribe to events and receive updates\nas they occur. The two supported subscriptions are\n[alchemy_newFullPendingTransactions](https://alchemy.com/alchemy/enhanced-apis/subscription-api-websockets#alchemy_newfullpendingtransactions)\nand\n[alchemy_filteredNewFullPendingTransactions](https://alchemy.com/alchemy/enhanced-apis/subscription-api-websockets#alchemy_filterednewfullpendingtransactions)\n.\n\nThe `Alchemy.getWebsocketProvider()` function configures the\nAlchemy [AlchemyWebSocketProvider](https://docs.ethers.io/v5/api/providers/api-providers/#AlchemyWebSocketProvider) and\nreturns it. This can be used like the standard Ethers.js Websocket provider to add listeners for Alchemy events:\n\n```ts\nimport { initializeAlchemy } from '@alch/alchemy-sdk';\n\nconst alchemy = initializeAlchemy();\n\nconst websocketProvider = alchemy.getWebsocketProvider();\n\n// Listen to all new pending transactions.\nwebsocketProvider.on(\n  {\n    method: 'alchemy_newFullPendingTransactions'\n  },\n  res => console.log(res)\n);\n\n// Listen to all transactions on the USDC contract.\nwebsocketProvider.on(\n  {\n    method: 'alchemy_filteredNewFullPendingTransactions',\n    address: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48'\n  },\n  res => console.log(res)\n);\n```\n\nThe SDK brings multiple improvements to ensure correct WebSocket behavior in cases of temporary network failure or\ndropped connections. As with any network connection, you should not assume that a WebSocket will remain open forever\nwithout interruption, but correctly handling dropped connections and reconnection by hand can be challenging to get\nright. `alchemy-sdk` automatically handles these failures with no configuration necessary. The main benefits are:\n\n- Resilient event delivery: Unlike standard Web3.js or Ethers.js, you will not permanently miss events which arrive\n  while the backing WebSocket is temporarily down. Instead, you will receive these events as soon as the connection\n  is reopened. Note that if the connection is down for more than 120 blocks (approximately 20 minutes), you may\n  still miss some events that were not part of the most recent 120 blocks.\n- Lowered rate of failure: Compared to standard Web3.js or Ethers.js, there are fewer failures when sending requests\n  over the WebSocket while the connection is down. Alchemy Web3 will attempt to send the requests once the connection\n  is reopened. Note that it is still possible, with a lower likelihood, for outgoing requests to be lost,\n  so you should still have error handling as with any network request.\n\n## NFT Module\n\nThe SDK currently supports the following [NFT API](https://docs.alchemy.com/alchemy/enhanced-apis/nft-api) endpoints:\n\n- `getNftMetadata()`: Get the NFT metadata for a contract address and tokenId.\n- `getNftContractMetadata()`: Get the metadata associated with an NFT contract\n- `getNftsForOwner()`: Get NFTs for an owner address.\n- `getNftsForOwnerIterator()`: Get NFTs for an owner address as an async iterator (handles paging automatically).\n- `getNftsForCollection()`: Get all NFTs for a contract address.\n- `getNftForCollectionIterator()`: Get all NFTs for a contract address as an async iterator (handles paging\n  automatically).\n- `getOwnersForNft()`: Get all the owners for a given NFT contract address and a particular token ID.\n- `getOwnersForCollection()`: Get all the owners for a given NFT contract address.\n- `checkNftOwnership()`: Check that the provided owner address owns one or more of the provided NFT contract addresses.\n- `isSpamContract()`: Check whether the given NFT contract address is a spam contract as defined by Alchemy (see the [NFT API FAQ](https://docs.alchemy.com/alchemy/enhanced-apis/nft-api/nft-api-faq#nft-spam-classification))\n- `findContractDeployer()`: Find the contract deployer and block number for a given NFT contract address.\n- `refreshNftMetadata()`: Refresh the cached NFT metadata for a contract address and tokenId.\n\n### Comparing `BaseNft` and `Nft`\n\nThe SDK currently uses the `BaseNft` and `Nft` classes to represent NFTs returned by the Alchemy. The `BaseNft` object\ndoes\nnot hold any metadata information and only contains the NFT contract and token ID. The `Nft` object additionally\ncontains the NFT metadata, token URI information, and media.\n\nBy default, the SDK will return the `Nft` object. You can optionally choose to fetch the `BaseNft` object instead by\nsetting the `omitMetadata` parameter to `true`. The SDK documentation describes the different parameter and response\ninterfaces in more detail.\n\n### Pagination\n\nThe Alchemy NFT endpoints return 100 results per page. To get the next page, you can pass in the `pageKey` returned by\nthe\nprevious call. To simplify paginating through all results, the SDK provides the `getNftsIterator()`\nand `getNftsForCollectionIterator()` functions that automatically paginate through all NFTs and yields them via\nan `AsyncIterable`.\n\nHere's an example of how to paginate through all the NFTs in Vitalik's ENS address:\n\n```ts\nimport { initializeAlchemy, getNftsForOwnerIterator } from '@alch/alchemy-sdk';\n\nconst alchemy = initializeAlchemy();\n\nasync function main() {\n  const ownerAddress = 'vitalik.eth';\n  for await (const nft of getNftsForOwnerIterator(alchemy, ownerAddress)) {\n    console.log('ownedNft:', nft);\n  }\n}\n\nmain();\n```\n\n### SDK vs API Differences\n\nThe NFT API in the SDK standardizes response types to reduce developer friction, but note this results in some\ndifferences compared to the Alchemy REST endpoints:\n\n- Some methods have different naming that the REST API counterparts in order to provide a consistent API interface (\n  e.g. `getNftsForOwner()` is `alchemy_getNfts`, `getOwnersForNft()` is `alchemy_getOwnersForToken`).\n- SDK standardizes to `omitMetadata` parameter (vs. `withMetadata`).\n- Standardization to `pageKey` parameter for pagination (vs. `nextToken`/`startToken`)\n- Empty `TokenUri` fields are omitted.\n- Token ID is always normalized to an integer string on `BaseNft` and `Nft`.\n- Some fields omitted in the REST response are included in the SDK response in order to return an `Nft` object.\n- Some fields in the SDK's `Nft` object are named differently than the REST response.\n\n## Documentation\n\nThe SDK is documented via `tsdoc` comments in the source code. The generated types and documentation are included when\nusing an IDE. To browse the documentation separately, you can view the generated API interfaces\nin `etc/alchemy-sdk.api.md`. You can view generated Markdown files for each endpoint in the `docs-md` directory,\nor as a webpage by opening `docs/index.html` in your browser.\n\n## Future Work\n\nThere's a long list, but here are the main ones:\n\n- Retry count support for json-rpc calls (currently only for NFT API calls).\n- More config options for the base ethers.js AlchemyProvider.\n\n## Examples\n\nBelow are a few usage examples:\n\nGetting the NFTs owned by an address.\n\n```ts\nimport {\n  getNftsForOwner,\n  getNftsForOwnerIterator,\n  NftExcludeFilters,\n  initializeAlchemy\n} from '@alch/alchemy-sdk';\n\nconst alchemy = initializeAlchemy();\n\n// Get how many NFTs an address owns.\ngetNftsForOwner(alchemy, '0xshah.eth').then(nfts => {\n  console.log(nfts.totalCount);\n});\n\n// Get all the image urls for all the NFTs an address owns.\nasync function main() {\n  for await (const nft of getNftsForOwnerIterator(alchemy, '0xshah.eth')) {\n    console.log(nft.media);\n  }\n}\n\nmain();\n\n// Filter out spam NFTs.\ngetNftsForOwner(alchemy, '0xshah.eth', {\n  excludeFilters: [NftExcludeFilters.SPAM]\n}).then(console.log);\n```\n\nGetting all the owners of the BAYC NFT.\n\n```ts\nimport {\n  getOwnersForNft,\n  getNftsForCollectionIterator,\n  initializeAlchemy\n} from '@alch/alchemy-sdk';\n\nconst alchemy = initializeAlchemy();\n\n// Bored Ape Yacht Club contract address.\nconst baycAddress = '0xBC4CA0EdA7647A8aB7C2061c2E118A18a936f13D';\n\nasync function main() {\n  for await (const nft of getNftsForCollectionIterator(alchemy, baycAddress, {\n    // Omit the NFT metadata for smaller payloads.\n    omitMetadata: true\n  })) {\n    await getOwnersForNft(alchemy, nft).then(response =>\n      console.log('owners:', response.owners, 'tokenId:', nft.tokenId)\n    );\n  }\n}\n\nmain();\n```\n\nGet all outbound transfers for a provided address.\n\n```ts\nimport { getTokenBalances, initializeAlchemy } from '@alch/alchemy-sdk';\n\nconst alchemy = initializeAlchemy();\n\ngetTokenBalances(alchemy, '0x994b342dd87fc825f66e51ffa3ef71ad818b6893').then(\n  console.log\n);\n```\n\n## Questions and Feedback\n\nIf you have any questions, issues, or feedback, please file an issue\non [GitHub](https://github.com/alchemyplatform/alchemy-sdk-js/issues), or drop us a message on\nour [Discord](https://discord.com/channels/735965332958871634/983472322998575174) channel for the SDK.\n","exports":{"node":{"import":"./dist/index.cjs.js","require":"./dist/index.cjs.js"},"default":"./dist/index.esm.js","package.json":"./package.json"},"main-es":"dist/index.mjs","scripts":{"api":"yarn build && api-extractor run","docs":"typedoc --plugin none --out docs src/index.ts","lint":"eslint -c .eslintrc.js '**/*.ts' --ignore-path '.gitignore'","test":"jest test/unit","build":"rollup -c","clean":"rm -rf dist","format":"prettier --write '**/*.{html,js,json,md,ts}'","docs-md":"typedoc --plugin typedoc-plugin-markdown --out docs-md src/index.ts","prepare":"husky install","prebuild":"yarn clean && tsc --emitDeclarationOnly --declaration -p tsconfig.json","lint-file":"eslint --fix","pre-commit":"lint-staged","format-file":"prettier --write"},"_npmUser":{"name":"brian-alchemy","email":"brian@alchemy.com"},"repository":{"url":"git+https://github.com/alchemyplatform/alchemy-sdk-js.git","type":"git"},"size-limit":[{"path":"dist/index.cjs.js","limit":"100 kB"}],"description":"Extended Ethers.js SDK for Alchemy APIs","directories":{},"licenseText":"MIT License\n\nCopyright (c) 2022 Alchemy\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","lint-staged":{"**/*.ts":["yarn lint-file --fix","yarn format-file"],"package.json":["node ./inject-version.js","git add src/version.ts"]},"sideEffects":false,"dependencies":{"axios":"^0.26.1","ethers":"^5.6.8","websocket":"^1.0.34","sturdy-websocket":"^0.2.1"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.5.1","husky":"^7.0.0","tslib":"^2.3.1","eslint":"^8.11.0","rollup":"^2.70.1","ts-jest":"^27.1.4","typedoc":"^0.22.15","prettier":"2.6.0","size-limit":"^7.0.8","typescript":"^4.5.5","@types/jest":"^27.4.1","lint-staged":"^12.3.7","mock-socket":"^9.1.4","axios-mock-adapter":"^1.20.0","eslint-plugin-import":"^2.25.4","prettier-plugin-jsdoc":"^0.3.38","@rollup/plugin-commonjs":"^22.0.0","typedoc-plugin-markdown":"^3.12.1","@microsoft/api-extractor":"^7.19.5","@microsoft/api-documenter":"^7.16.0","@typescript-eslint/parser":"^5.16.0","rollup-plugin-typescript2":"^0.31.2","@size-limit/preset-big-lib":"^7.0.8","@rollup/plugin-node-resolve":"^13.3.0","eslint-plugin-unused-imports":"^2.0.0","@typescript-eslint/eslint-plugin":"^5.16.0"},"_npmOperationalInternal":{"tmp":"tmp/alchemy-sdk_1.0.5-beta1_1656626406262_0.6170773148292492","host":"s3://npm-registry-packages"}},"1.0.5":{"name":"@alch/alchemy-sdk","version":"1.0.5","author":{"name":"Alchemy"},"license":"MIT","_id":"@alch/alchemy-sdk@1.0.5","maintainers":[{"name":"ddgromit","email":"derekdahmer@gmail.com"},{"name":"chub","email":"npm@hbar.us"},{"name":"robalchemy","email":"rob.coleman@alchemy.com"},{"name":"kurushdubash","email":"kurush@alchemy.com"},{"name":"brian-alchemy","email":"brian@alchemy.com"},{"name":"dphilipson","email":"david.philipson@gmail.com"},{"name":"alchemy-team","email":"accounts@alchemy.com"},{"name":"omarsayha","email":"omar@alchemyapi.io"},{"name":"noam-alchemy","email":"noam@alchemyapi.io"},{"name":"stevenzyang","email":"steezyang@gmail.com"},{"name":"brg8","email":"bgodlove88+npmjs@gmail.com"}],"homepage":"https://github.com/alchemyplatform/alchemy-sdk-js#readme","bugs":{"url":"https://github.com/alchemyplatform/alchemy-sdk-js/issues"},"dist":{"shasum":"d2497cec534575abded216336a0844d3fe9ad3f2","tarball":"https://registry.npmjs.org/@alch/alchemy-sdk/-/alchemy-sdk-1.0.5.tgz","fileCount":48,"integrity":"sha512-EydKioXDDyMSavWt0D7ScOB+QYiMuKWQHL3k8e+jBKcbbyYJo4+M3171qkBzTQRCTzFV0UCKl9cC/R89L7gt5A==","signatures":[{"sig":"MEUCIAaoE5EEHnQL3Ebk1N4QRp0vYOfviFzB34qcgtnZHCdYAiEAnlRamT6sxNTr0wFRXqlTyg5vTeY3f2hZcyHnZHlpdZs=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":5773096,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJivh3/ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoDhA/7B8WvdN+QbCWWuE+3Ok63HfsfLaBRB+YUccXVG0UjGY7lp/d6\r\nqQljn2jMCZIlXLmTd06JSIbZ5LSlbhv8MX75R+6FisYDX58IRZ1vYjI3rDtu\r\nTgDPRrp1ds/Mitg0HQqQk3xx5h50DPdG9PPD+8tF4qCYoNzPjwV/zW6GY3di\r\npAqRbR0Vwx/NtgFrcVRMwIs3WSM9fxAYe9pt4w01xJ9skA9bzyDIw5B/NJ6U\r\nF91e5eQEH3b2K5Cmyt/JXlTL7tAj7pvcVGI2Sk8cCdaX+iAmVcMSw5jYaqZA\r\nuDwEkrLQNsl3nG2glAK6WweEQvLN9q4787ni/dWFacC1l5seUbQU2OCUC7fP\r\n8tmXppd0Z6lOcJ1N1UB9SdbzrRnh85ccg4YmOQKfGzx8arabsqNbPAnqxJw9\r\npoZkPmlGV334kORvEiaLHzt86K+S5bpz+ceidulDbKDuiTIh2Q4Pu3DK2lXh\r\nKhxgRZki567NP5whqhGo+z3LvAt6gIGcsJZW6W36ygGvMa1IkK6reas78GtR\r\n3lQn0e+BHJrxgOIOnxaiCVtc+lUkpTr8vEre4cksYja42Fnc2tN7kgQvFl3J\r\nAcaIyeXE/FuGDFE4ky8iGdaAloAeLVMdBxcspZbtVJkSqAMmdUE4S2NwdYyY\r\nAEA2qP63YUs2NdLZC0qe2A2l0cQhtR0V7xY=\r\n=2+hl\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.cjs.js","types":"./dist/src/index.d.ts","module":"dist/index.esm.js","exports":{"node":{"import":"./dist/index.cjs.js","require":"./dist/index.cjs.js"},"default":"./dist/index.esm.js","package.json":"./package.json"},"main-es":"dist/index.mjs","scripts":{"api":"yarn build && api-extractor run","docs":"typedoc --plugin none --out docs src/index.ts","lint":"eslint -c .eslintrc.js '**/*.ts' --ignore-path '.gitignore'","test":"jest test/unit","build":"rollup -c","clean":"rm -rf dist","format":"prettier --write '**/*.{html,js,json,md,ts}'","docs-md":"typedoc --plugin typedoc-plugin-markdown --out docs-md src/index.ts","prepare":"husky install","prebuild":"yarn clean && tsc --emitDeclarationOnly --declaration -p tsconfig.json","lint-file":"eslint --fix","pre-commit":"lint-staged","format-file":"prettier --write"},"_npmUser":{"name":"brian-alchemy","email":"brian@alchemy.com"},"deprecated":"Incorrect publish","repository":{"url":"git+https://github.com/alchemyplatform/alchemy-sdk-js.git","type":"git"},"size-limit":[{"path":"dist/index.cjs.js","limit":"100 kB"}],"description":"Extended Ethers.js SDK for Alchemy APIs","directories":{},"licenseText":"MIT License\n\nCopyright (c) 2022 Alchemy\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","lint-staged":{"**/*.ts":["yarn lint-file --fix","yarn format-file"],"package.json":["node ./inject-version.js","git add src/version.ts"]},"sideEffects":false,"dependencies":{"axios":"^0.26.1","ethers":"^5.6.8","websocket":"^1.0.34","sturdy-websocket":"^0.2.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.5.1","husky":"^7.0.0","tslib":"^2.3.1","eslint":"^8.11.0","rollup":"^2.70.1","ts-jest":"^27.1.4","typedoc":"^0.22.15","prettier":"2.6.0","size-limit":"^7.0.8","typescript":"^4.5.5","@types/jest":"^27.4.1","lint-staged":"^12.3.7","mock-socket":"^9.1.4","axios-mock-adapter":"^1.20.0","eslint-plugin-import":"^2.25.4","prettier-plugin-jsdoc":"^0.3.38","@rollup/plugin-commonjs":"^22.0.0","typedoc-plugin-markdown":"^3.12.1","@microsoft/api-extractor":"^7.19.5","@microsoft/api-documenter":"^7.16.0","@typescript-eslint/parser":"^5.16.0","rollup-plugin-typescript2":"^0.31.2","@size-limit/preset-big-lib":"^7.0.8","@rollup/plugin-node-resolve":"^13.3.0","eslint-plugin-unused-imports":"^2.0.0","@typescript-eslint/eslint-plugin":"^5.16.0"},"_npmOperationalInternal":{"tmp":"tmp/alchemy-sdk_1.0.5_1656626686780_0.7778781285502998","host":"s3://npm-registry-packages"}},"1.0.6":{"name":"@alch/alchemy-sdk","version":"1.0.6","author":{"name":"Alchemy"},"license":"MIT","_id":"@alch/alchemy-sdk@1.0.6","maintainers":[{"name":"ddgromit","email":"derekdahmer@gmail.com"},{"name":"chub","email":"npm@hbar.us"},{"name":"robalchemy","email":"rob.coleman@alchemy.com"},{"name":"kurushdubash","email":"kurush@alchemy.com"},{"name":"brian-alchemy","email":"brian@alchemy.com"},{"name":"dphilipson","email":"david.philipson@gmail.com"},{"name":"alchemy-team","email":"accounts@alchemy.com"},{"name":"omarsayha","email":"omar@alchemyapi.io"},{"name":"noam-alchemy","email":"noam@alchemyapi.io"},{"name":"stevenzyang","email":"steezyang@gmail.com"},{"name":"brg8","email":"bgodlove88+npmjs@gmail.com"}],"homepage":"https://github.com/alchemyplatform/alchemy-sdk-js#readme","bugs":{"url":"https://github.com/alchemyplatform/alchemy-sdk-js/issues"},"dist":{"shasum":"b639afdd2263f52bdf9c4ab26298649a3bfcc8ac","tarball":"https://registry.npmjs.org/@alch/alchemy-sdk/-/alchemy-sdk-1.0.6.tgz","fileCount":48,"integrity":"sha512-8WB0jt1eRZApFDs5atIr/R1a47rr5FH1t1Plp4rxkbT2byhKaTom4EfjC52SdI4zx+fn5V8XRiPUxH3j6+WrBQ==","signatures":[{"sig":"MEUCIF/DnXS4p2LFvbMg2q8eEz1H8wIHH2dmP11TrIRzWTdAAiEAk/dJ1X+hQcZgtAVdWcyxXqKZer53l77kpLuMhAinutA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":5773265,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiviT1ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqZUw/9ERSsLiEBtbSUTFSFYVBbxWiWA6moDCqV+VpAUWsclp+2JWWS\r\nVS0nip/hHraBX4oiyNb39QvLUxh8okvv2hEd6crN93s8kLNIVsvhIt8tvrON\r\nr5KKTj5PQNwQKiOsMLVl91zqYcs0DvktKmDFBihiSfaj0IiojwgoK5JS+iJb\r\nSrnnhwHi0TG9NN4TaIWBvFvkfkJAw/mc+2WtOVSeY9n/0UyxkxljLXgxHIbS\r\nXR4M2Znynxxpf+yMtixe0N7OXd+awAIl05CpIww3E/l/l+BONV7/Fd0hStvK\r\nFrfYfSd7OGFaw5ixm1pbE+J2sjyfOKzu9LocPfaluBUWCWaU2cwb6jnHmBki\r\nM0Wzqa/buGAZ95UUWNylMtsqc7ECaIkAzkyR/wIrMwmLaiQawIHUfyro+0ud\r\nEEPvHvZgl8OZJVXtEnwkT2QzLAdkwpCsDmlQY9ldvyE9yu+1GigI/pGRC7uV\r\nWLagJVaXCwQkCMSufAplsyBcf38dKDVWedJJbgwa4gkuXttay3MeKRM4Z3a2\r\n2mKtCAtzDoMQ0olhlRfTikdqHb0hYViqrl9nHaUzixTijmTaIAdkFgT0jmbB\r\npowVpuAJf7sV5R9ZNoPwkdZ8roqaWbyE8vLiyjt8obeMEWdZDXh654Ry/S0W\r\nZ0Cm7Y92k+sfzYng5WyLjj7SjrVHxXblypY=\r\n=dHgO\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.cjs.js","types":"./dist/src/index.d.ts","module":"dist/index.esm.js","exports":{"node":{"import":"./dist/index.cjs.js","require":"./dist/index.cjs.js"},"default":"./dist/index.esm.js","package.json":"./package.json"},"main-es":"dist/index.mjs","scripts":{"api":"yarn build && api-extractor run","docs":"typedoc --plugin none --out docs src/index.ts","lint":"eslint -c .eslintrc.js '**/*.ts' --ignore-path '.gitignore'","test":"jest test/unit","build":"rollup -c","clean":"rm -rf dist","format":"prettier --write '**/*.{html,js,json,md,ts}'","docs-md":"typedoc --plugin typedoc-plugin-markdown --out docs-md src/index.ts","prepare":"husky install","prebuild":"yarn clean && tsc --emitDeclarationOnly --declaration -p tsconfig.json","lint-file":"eslint --fix","pre-commit":"lint-staged","format-file":"prettier --write"},"_npmUser":{"name":"brian-alchemy","email":"brian@alchemy.com"},"repository":{"url":"git+https://github.com/alchemyplatform/alchemy-sdk-js.git","type":"git"},"size-limit":[{"path":"dist/index.cjs.js","limit":"100 kB"}],"description":"Extended Ethers.js SDK for Alchemy APIs","directories":{},"licenseText":"MIT License\n\nCopyright (c) 2022 Alchemy\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","lint-staged":{"**/*.ts":["yarn lint-file --fix","yarn format-file"],"package.json":["node ./inject-version.js","git add src/version.ts"]},"sideEffects":false,"dependencies":{"axios":"^0.26.1","ethers":"^5.6.8","websocket":"^1.0.34","sturdy-websocket":"^0.2.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.5.1","husky":"^7.0.0","tslib":"^2.3.1","eslint":"^8.11.0","rollup":"^2.70.1","ts-jest":"^27.1.4","typedoc":"^0.22.15","prettier":"2.6.0","size-limit":"^7.0.8","typescript":"^4.5.5","@types/jest":"^27.4.1","lint-staged":"^12.3.7","mock-socket":"^9.1.4","axios-mock-adapter":"^1.20.0","eslint-plugin-import":"^2.25.4","prettier-plugin-jsdoc":"^0.3.38","@rollup/plugin-commonjs":"^22.0.0","typedoc-plugin-markdown":"^3.12.1","@microsoft/api-extractor":"^7.19.5","@microsoft/api-documenter":"^7.16.0","@typescript-eslint/parser":"^5.16.0","rollup-plugin-typescript2":"^0.31.2","@size-limit/preset-big-lib":"^7.0.8","@rollup/plugin-node-resolve":"^13.3.0","eslint-plugin-unused-imports":"^2.0.0","@typescript-eslint/eslint-plugin":"^5.16.0"},"_npmOperationalInternal":{"tmp":"tmp/alchemy-sdk_1.0.6_1656628469438_0.6843800710556178","host":"s3://npm-registry-packages"}},"1.0.7":{"name":"@alch/alchemy-sdk","version":"1.0.7","author":{"name":"Alchemy"},"license":"MIT","_id":"@alch/alchemy-sdk@1.0.7","maintainers":[{"name":"chub","email":"npm@hbar.us"},{"name":"kurushdubash","email":"kurush@alchemy.com"},{"name":"brian-alchemy","email":"brian@alchemy.com"},{"name":"dphilipson","email":"david.philipson@gmail.com"},{"name":"alchemy-team","email":"accounts@alchemy.com"},{"name":"omarsayha","email":"omar@alchemyapi.io"},{"name":"noam-alchemy","email":"noam@alchemyapi.io"},{"name":"stevenzyang","email":"steezyang@gmail.com"}],"homepage":"https://github.com/alchemyplatform/alchemy-sdk-js#readme","bugs":{"url":"https://github.com/alchemyplatform/alchemy-sdk-js/issues"},"dist":{"shasum":"7f8289c4d1328e025efe3827a5039e754e1f77cf","tarball":"https://registry.npmjs.org/@alch/alchemy-sdk/-/alchemy-sdk-1.0.7.tgz","fileCount":176,"integrity":"sha512-NvDFvQ7pBpMO3yn1h2nWTsPwRucnrs/wN/vTMYbxRtAvkCPvCzejC9MsyyZFnvc0dRXGfOsOf5xpDxIMyGVMxA==","signatures":[{"sig":"MEYCIQDvo8LqMdvKfNyzcuoeY5SmYY8IikF+3LivbyPlTBQPCwIhAIfZrE5CTVxiUA6MuQshG2CiRppEtSxGKa1X0GkZoc+k","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":981313,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiyfFjACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpVFw/7BYqe1i6T1UFXjjqJqjYhB8awfsXjl1lJHpPeXRzBsJe/7V5V\r\nxnqiJAGNkqNRn0/2w9ES2B1rqpEy1QfAN0q0uOsbAFqmLMr6vH/0W179yvfg\r\noU4V5Xe/+fmjXhTXiw/s3yba2IUVTEbu+UHztyJYz33Fyx3MNmRdbVk9Czyx\r\nmatK+rLZqvI1CZXVtYZCEg4JStHshFYS0WBXK02kL/S393U9XDn9lhNlATY4\r\nE6RTynE7In1sT3clNAoQQtf2to+OfHpRjVuzwq0lGj4RWKGJCKEonIYTAcOf\r\n6CVAFuBw/Ah0s3oE3yJEXTq+2s3oETuHqBrVIwFo5nhJoEunbEE8vqGzW8oL\r\nhRAhus1hW14LX55sYtfbH6rNZhKTzyXlbQR/uUDkrpldhgG2CBKwQdVIj1DH\r\nvD9FhEH8+TJ/gwg6HKO2cP40HvfOVLxDJ4qwrt4BfrYBmEFPi8iKCckPnWNP\r\nN3wzfBVHsmI59fUScxNukOu+S8V88yUPZw2clISnKFaSl52O1SRZwIjQaAsj\r\naZzPubi6lBtON0hNh31GWMzVOJ0IgiLmB7G0jxaJMwi95ws5sOcNGN5XQAc3\r\nsgThmys+SDil54Ur5q5rOo4picPia88TaKXFkhqVO0F6wQlfrVYXGj1h+2O1\r\n7DulgPRXmJqI+aYDN/qWlQwGJAlzhgB9nio=\r\n=23Lt\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.cjs.js","types":"./dist/src/index.d.ts","module":"dist/index.esm.js","exports":{"node":{"import":"./dist/index.cjs.js","require":"./dist/index.cjs.js"},"default":"./dist/index.esm.js","package.json":"./package.json"},"main-es":"dist/index.mjs","scripts":{"api":"yarn build && api-extractor run","docs":"typedoc --plugin none --out docs src/index.ts","lint":"eslint -c .eslintrc.js '**/*.ts' --ignore-path '.gitignore'","test":"jest test/unit","build":"rollup -c","clean":"rm -rf dist","format":"prettier --write '**/*.{html,js,json,md,ts}'","docs-md":"typedoc --plugin typedoc-plugin-markdown --out docs-md src/index.ts","prepare":"husky install","prebuild":"yarn clean && tsc --emitDeclarationOnly --declaration -p tsconfig.json","lint-file":"eslint --fix","pre-commit":"lint-staged","format-file":"prettier --write"},"_npmUser":{"name":"brian-alchemy","email":"brian@alchemy.com"},"deprecated":"Incorrect publish, broken build","repository":{"url":"git+https://github.com/alchemyplatform/alchemy-sdk-js.git","type":"git"},"size-limit":[{"path":"dist/index.cjs.js","limit":"100 kB"}],"description":"Extended Ethers.js SDK for Alchemy APIs","directories":{},"licenseText":"MIT License\n\nCopyright (c) 2022 Alchemy\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","lint-staged":{"**/*.ts":["yarn lint-file --fix","yarn format-file"],"package.json":["node ./inject-version.js","git add src/version.ts"]},"sideEffects":false,"dependencies":{"axios":"^0.26.1","websocket":"^1.0.34","sturdy-websocket":"^0.2.1","@ethersproject/web":"^5.6.1","@ethersproject/networks":"^5.6.4","@ethersproject/bignumber":"^5.6.2","@ethersproject/providers":"^5.6.8","@ethersproject/abstract-provider":"^5.6.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.5.1","husky":"^7.0.0","tslib":"^2.3.1","eslint":"^8.11.0","rollup":"^2.70.1","ts-jest":"^27.1.4","typedoc":"^0.22.15","prettier":"2.6.0","size-limit":"^7.0.8","typescript":"^4.5.5","@types/jest":"^27.4.1","lint-staged":"^12.3.7","mock-socket":"^9.1.4","axios-mock-adapter":"^1.20.0","eslint-plugin-import":"^2.25.4","prettier-plugin-jsdoc":"^0.3.38","@rollup/plugin-commonjs":"^22.0.0","typedoc-plugin-markdown":"^3.12.1","@microsoft/api-extractor":"^7.19.5","@microsoft/api-documenter":"^7.16.0","@typescript-eslint/parser":"^5.16.0","rollup-plugin-typescript2":"^0.31.2","@size-limit/preset-big-lib":"^7.0.8","@rollup/plugin-node-resolve":"^13.3.0","eslint-plugin-unused-imports":"^2.0.0","@typescript-eslint/eslint-plugin":"^5.16.0"},"_npmOperationalInternal":{"tmp":"tmp/alchemy-sdk_1.0.7_1657401698949_0.0726575096302351","host":"s3://npm-registry-packages"}},"1.0.8":{"name":"@alch/alchemy-sdk","version":"1.0.8","author":{"name":"Alchemy"},"license":"MIT","_id":"@alch/alchemy-sdk@1.0.8","maintainers":[{"name":"chub","email":"npm@hbar.us"},{"name":"kurushdubash","email":"kurush@alchemy.com"},{"name":"brian-alchemy","email":"brian@alchemy.com"},{"name":"dphilipson","email":"david.philipson@gmail.com"},{"name":"alchemy-team","email":"accounts@alchemy.com"},{"name":"omarsayha","email":"omar@alchemyapi.io"},{"name":"noam-alchemy","email":"noam@alchemyapi.io"},{"name":"stevenzyang","email":"steezyang@gmail.com"}],"homepage":"https://github.com/alchemyplatform/alchemy-sdk-js#readme","bugs":{"url":"https://github.com/alchemyplatform/alchemy-sdk-js/issues"},"dist":{"shasum":"5cb49c04795ad728155baf81615a629b908dc23f","tarball":"https://registry.npmjs.org/@alch/alchemy-sdk/-/alchemy-sdk-1.0.8.tgz","fileCount":48,"integrity":"sha512-rCFTzLarEVl51atLRA/OG1Nx99BVw7/xbbYUy2x3MKkeh6wOpHJMAuw6pRwgumqBDCV8r5NqyWuNM5NZLfdQ0A==","signatures":[{"sig":"MEYCIQC/J8gFRRX7NhhwgZvha7FnMR5rL9VxavYqe+3IGqsKRAIhALTOOYADZO4kDGjxVijFyxbcnP2MHVFsUXgeLWMC6yuk","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":796047,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiyfVAACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoIZQ/+P+58FLjrh95RlHoIiwXa/GEacRnshn4gKEUxvyJW8q4Gf2Zb\r\nBD/KIIc342p6FWul46HOQyf5cyVKzy0nn5U/JyQA+C7bjtc3J2Rr4eb9Rh4p\r\n5UUvvlP7PJ5P80x7heH0zrXba06Fl7N2nOF1Oh36EpIuT/E27cLHfwc5QGg3\r\nBXK3hMGVsph6nnbBmD832+/xYWROOU3M0IQCAxHBSZMfSkirnGDEnBjPUX+N\r\nZHwed8bByjjW5hnou62Fh1d1mPj4qEqFAgc+mga1Ht5HlostyCC+tjGLYYXU\r\neMNT2a0+Ha9XNk4wszsN2zhsMYy7HpqyQlkW+we4PkqLTcyvcwgcQYS3TR/x\r\nyUhoWwiV13V5BI2HI39XmV8BZF8d8TuFzi78aAwRMq3AqkrNhwK2j36l9Bl7\r\n6m3jYoTFtQE3sK9RXmVkIcaQigNkAhYzgHZYqBLvrODFHgPrXxbdBMzeGJaN\r\nDn73tlEHf5CoFzfOUkZkMXNvGt7mwHBymyVpcQUWWxzikDQe6nnZfwHAdVto\r\nDRjvzmTGbAvg2pWX5a2u2MvGZ0MVNgoCdK0g1C89WjCctmHAe3VUnhwYf8wl\r\n5b08oS6Id6isTG9TqOgaIin2gLwz+sIwtwJtDYAqZI04tIRgu0ultqfzLMIS\r\nTHmoYl5L7LqbNKN2s/a4d1axekWeEZHdj00=\r\n=sPcz\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.cjs.js","types":"./dist/src/index.d.ts","module":"dist/index.esm.js","exports":{"node":{"import":"./dist/index.cjs.js","require":"./dist/index.cjs.js"},"default":"./dist/index.esm.js","package.json":"./package.json"},"main-es":"dist/index.mjs","scripts":{"api":"yarn build && api-extractor run","docs":"typedoc --plugin none --out docs src/index.ts","lint":"eslint -c .eslintrc.js '**/*.ts' --ignore-path '.gitignore'","test":"jest test/unit","build":"rollup -c","clean":"rm -rf dist","format":"prettier --write '**/*.{html,js,json,md,ts}'","docs-md":"typedoc --plugin typedoc-plugin-markdown --out docs-md src/index.ts","prepare":"husky install","prebuild":"yarn clean && tsc --emitDeclarationOnly --declaration -p tsconfig.json","lint-file":"eslint --fix","pre-commit":"lint-staged","format-file":"prettier --write"},"_npmUser":{"name":"brian-alchemy","email":"brian@alchemy.com"},"repository":{"url":"git+https://github.com/alchemyplatform/alchemy-sdk-js.git","type":"git"},"size-limit":[{"path":"dist/index.cjs.js","limit":"100 kB"}],"description":"Extended Ethers.js SDK for Alchemy APIs","directories":{},"licenseText":"MIT License\n\nCopyright (c) 2022 Alchemy\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","lint-staged":{"**/*.ts":["yarn lint-file --fix","yarn format-file"],"package.json":["node ./inject-version.js","git add src/version.ts"]},"sideEffects":false,"dependencies":{"axios":"^0.26.1","websocket":"^1.0.34","sturdy-websocket":"^0.2.1","@ethersproject/web":"^5.6.1","@ethersproject/networks":"^5.6.4","@ethersproject/bignumber":"^5.6.2","@ethersproject/providers":"^5.6.8","@ethersproject/abstract-provider":"^5.6.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.5.1","husky":"^7.0.0","tslib":"^2.3.1","eslint":"^8.11.0","rollup":"^2.70.1","ts-jest":"^27.1.4","typedoc":"^0.22.15","prettier":"2.6.0","size-limit":"^7.0.8","typescript":"^4.5.5","@types/jest":"^27.4.1","lint-staged":"^12.3.7","mock-socket":"^9.1.4","axios-mock-adapter":"^1.20.0","eslint-plugin-import":"^2.25.4","prettier-plugin-jsdoc":"^0.3.38","@rollup/plugin-commonjs":"^22.0.0","typedoc-plugin-markdown":"^3.12.1","@microsoft/api-extractor":"^7.19.5","@microsoft/api-documenter":"^7.16.0","@typescript-eslint/parser":"^5.16.0","rollup-plugin-typescript2":"^0.31.2","@size-limit/preset-big-lib":"^7.0.8","@rollup/plugin-node-resolve":"^13.3.0","eslint-plugin-unused-imports":"^2.0.0","@typescript-eslint/eslint-plugin":"^5.16.0"},"_npmOperationalInternal":{"tmp":"tmp/alchemy-sdk_1.0.8_1657402688607_0.2723970053053828","host":"s3://npm-registry-packages"}},"1.1.0-beta":{"name":"@alch/alchemy-sdk","version":"1.1.0-beta","author":{"name":"Alchemy"},"license":"MIT","_id":"@alch/alchemy-sdk@1.1.0-beta","maintainers":[{"name":"chub","email":"npm@hbar.us"},{"name":"kurushdubash","email":"kurush@alchemy.com"},{"name":"brian-alchemy","email":"brian@alchemy.com"},{"name":"dphilipson","email":"david.philipson@gmail.com"},{"name":"alchemy-team","email":"accounts@alchemy.com"},{"name":"omarsayha","email":"omar@alchemyapi.io"},{"name":"noam-alchemy","email":"noam@alchemyapi.io"},{"name":"stevenzyang","email":"steezyang@gmail.com"}],"homepage":"https://github.com/alchemyplatform/alchemy-sdk-js#readme","bugs":{"url":"https://github.com/alchemyplatform/alchemy-sdk-js/issues"},"dist":{"shasum":"68dff69fd91fb4620fc2967eec35e23effb2f580","tarball":"https://registry.npmjs.org/@alch/alchemy-sdk/-/alchemy-sdk-1.1.0-beta.tgz","fileCount":176,"integrity":"sha512-FwhoKGlVFDAba+HTY9LrHJ8TCBySWtHfl+33ZnATiT5cYdlQgBJCnk4OF8irTdcTPE3rn5MjA5SKBnmw1WVUfg==","signatures":[{"sig":"MEQCIHe+oLsfOZyNPAhuYeFqGxLxEXz68M5mlyaSTxdJeV06AiArwb5hpQrCsFudznwtG3su2GbeS69v+paNCXMfe8y+2w==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1173728,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi0JZ3ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqleQ/+PuVMcn949+i98Vi26LvxlP1AVSu7Ayem8geG1QYJmx1Ea7V5\r\nIX2dRopgUeBoXqPMjmz1AYtw0yMxK/fqvNT+V2QQ0uUOo7z/c+j+yWyBz3QB\r\n55bk6zqR6OCJcm7bTyt01AzaS5KfLR+v4EJVyikYOcu/VkuhT2irkxCi+Yo/\r\nWSBCCYLH+x4CWpTkw+fYfo1wM2+26h6gFvNOGsLGRYngOGLrrTeVl2akUIEa\r\nO06eBCRvI/OMx3/YSUvYa1vWB/v6EJS9+CS4SWKeA3TaMVumU1djfy+FcPpt\r\nvSiXZZGTawv7U6tc8Ym/eAa085hJ8IKfBz36q+TaK9rG0Wu6jM+cxqq4xZdE\r\nV5kktAGCZXu1ARK4EewOb4vrwDpvz/d4uhL63QHTU2aYmOV9xoxMYCF55RG3\r\nClqvTLlTnplRl2kCNtD8X0lgiSEe9GZ6yq6iZIce1ZM8s7CEFeRbjEKS7QZY\r\n00Bg02EANtGWXCrLr1tx4h1LFxHWi74t9QvEv1cdYIXiLN/lNheAdS43Ojx7\r\ni6QoQhnmirULZRwnJxOAdKCJkNzyA42/Im7h+DGv3v6YXGUDmjUJPdgTnxf4\r\nzhWxEg2mcl5oJSa6/CM6wz602JhYN41RhX2qJD9LOM+K3xBf3tpqimYld9o8\r\nKVS08v6oDORIwmjj4TCjAEebTVBXJASE6q4=\r\n=Ss0V\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/cjs/index.js","types":"./dist/src/index.d.ts","module":"dist/esm/index.js","exports":{"node":{"import":"./dist/cjs/index.js","require":"./dist/cjs/index.js"},"default":"./dist/esm/index.js","package.json":"./package.json"},"main-es":"dist/es/index.js","scripts":{"api":"yarn build && api-extractor run","docs":"typedoc --plugin none --out docs src/index.ts","lint":"eslint -c .eslintrc.js '**/*.ts' --ignore-path '.gitignore'","test":"jest test/unit","build":"rollup -c","clean":"rm -rf dist","format":"prettier --write '**/*.{html,js,json,md,ts}'","docs-md":"typedoc --plugin typedoc-plugin-markdown --out docs-md src/index.ts","prepare":"husky install","prebuild":"yarn clean && tsc --emitDeclarationOnly --declaration -p tsconfig.json","lint-file":"eslint --fix","pre-commit":"lint-staged","format-file":"prettier --write"},"_npmUser":{"name":"brian-alchemy","email":"brian@alchemy.com"},"deprecated":"beta tag was missing, will republish","repository":{"url":"git+https://github.com/alchemyplatform/alchemy-sdk-js.git","type":"git"},"size-limit":[{"path":"dist/cjs/index.js","limit":"100 kB"}],"description":"Extended Ethers.js SDK for Alchemy APIs","directories":{},"licenseText":"MIT License\n\nCopyright (c) 2022 Alchemy\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","lint-staged":{"**/*.ts":["yarn lint-file --fix","yarn format-file"],"package.json":["node ./inject-version.js","git add src/version.ts"]},"sideEffects":false,"dependencies":{"axios":"^0.26.1","websocket":"^1.0.34","sturdy-websocket":"^0.2.1","@ethersproject/web":"^5.6.1","@ethersproject/networks":"^5.6.4","@ethersproject/bignumber":"^5.6.2","@ethersproject/providers":"^5.6.8","@ethersproject/abstract-provider":"^5.6.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.5.1","husky":"^7.0.0","tslib":"^2.3.1","eslint":"^8.11.0","rollup":"^2.70.1","ts-jest":"^27.1.4","typedoc":"^0.22.15","prettier":"2.6.0","size-limit":"^7.0.8","typescript":"^4.5.5","@types/jest":"^27.4.1","lint-staged":"^12.3.7","mock-socket":"^9.1.4","axios-mock-adapter":"^1.20.0","eslint-plugin-import":"^2.25.4","prettier-plugin-jsdoc":"^0.3.38","@rollup/plugin-commonjs":"^22.0.0","typedoc-plugin-markdown":"^3.12.1","@microsoft/api-extractor":"^7.19.5","@microsoft/api-documenter":"^7.16.0","@typescript-eslint/parser":"^5.16.0","rollup-plugin-typescript2":"^0.31.2","@size-limit/preset-big-lib":"^7.0.8","@rollup/plugin-node-resolve":"^13.3.0","eslint-plugin-unused-imports":"^2.0.0","@typescript-eslint/eslint-plugin":"^5.16.0"},"_npmOperationalInternal":{"tmp":"tmp/alchemy-sdk_1.1.0-beta_1657837175243_0.181072911504367","host":"s3://npm-registry-packages"}},"1.1.0":{"name":"@alch/alchemy-sdk","version":"1.1.0","author":{"name":"Alchemy"},"license":"MIT","_id":"@alch/alchemy-sdk@1.1.0","maintainers":[{"name":"chub","email":"npm@hbar.us"},{"name":"kurushdubash","email":"kurush@alchemy.com"},{"name":"brian-alchemy","email":"brian@alchemy.com"},{"name":"dphilipson","email":"david.philipson@gmail.com"},{"name":"alchemy-team","email":"accounts@alchemy.com"},{"name":"omarsayha","email":"omar@alchemyapi.io"},{"name":"noam-alchemy","email":"noam@alchemyapi.io"},{"name":"stevenzyang","email":"steezyang@gmail.com"}],"homepage":"https://github.com/alchemyplatform/alchemy-sdk-js#readme","bugs":{"url":"https://github.com/alchemyplatform/alchemy-sdk-js/issues"},"dist":{"shasum":"2faebd89bd70e30176139f597c057735c6104b45","tarball":"https://registry.npmjs.org/@alch/alchemy-sdk/-/alchemy-sdk-1.1.0.tgz","fileCount":176,"integrity":"sha512-PHilWz/84BpgrQH++KO5YonPb9Gd+c/h2mMAH4JMIkVqPAYG6WFJ1tExn2KmdXMHeo3FR9fnXrA9mzOspynGkQ==","signatures":[{"sig":"MEUCICCL/y9+XUcgtlzPJ9zjA32oaFMeSAs+9IMugjpF3/ucAiEAwVK2n2g3FlqAUUTxhA23szdOzyDY3bAvIptRlfTW0bk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1173723,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi0JepACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoSHxAAlnWRkpKKAnwXbRtN5HoX9b6F/XHqu1LqWuSK8xiTcjfnMPVl\r\nEcjD+TedQ5L8EuFYz/K0tVP1yi+y/RWkQUXGZGLGZtKBsJv2/K8AZrlzwGZz\r\nREuq9gWF0Hs/zynjnDW2kkf1l/1sW7RDq5BdQB9NRuwhXA/fzASE4jD+Pc+o\r\n430hXsefPjK+ckHVzv0Msja9i2dkRDxBvngyjVrrl4PqMeeYpPqk3BOh/5q6\r\nziu1hBl7YXApope3ekT47hLisV90HuoPHcnzSo3ffYqo/0i750JmkC5R8Htp\r\nZQddo8IHFEfSvphJ/9uaGlmrcrLVWkSNe9VKH5L3jAVuKp4caiCpOIHBiCP+\r\nQSNFvxCvj1AMCp9Db7DahVFGVTdBaj9u2csT2rgakGUr6VFZT32t45PFvNh0\r\n+YPxvqVTcy3ZoMppZz5dzKHf/Yqd4eWS5KStNNhgapxMCQuPJi2lls/hbqsH\r\n2hX/mQezZC+/hNW5l6RtExDgk5fH4AXVKOQYOkHLTiOmlIvAlptqoHAWxIiY\r\nHd7V/M/qOaS1dQ+45aEsPhGf8K+YsJv0F1Y6ig3vfUHzLKG2Hxe6MAXjqHv/\r\nth7KIi66gC6VsVC/6+Otya0Jxm7U8Uy5IV0TPTEXcxWd1y9A2KoX7uz3oG18\r\nlqF9EWaIsiW4zfrKBc3gcRpKn1tzZvJG3tg=\r\n=KfCY\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/cjs/index.js","types":"./dist/src/index.d.ts","module":"dist/esm/index.js","readme":"# Alchemy SDK for Javascript\n\nAlchemy SDK helps developers use Alchemy's APIs and endpoints more efficiently. This is a lightweight, modular SDK built as a drop-in replacement of Ethers.js that provides a superset of functionality - enabling access to the Alchemy NFT API, Websockets, and Enhanced API methods. \n\nIt also provides access to Alchemy's hardened node infrastructure, guaranteeing reliability, scalability, and quality-of-life improvements such as automatic exponential backoff retries.\n\nNote that the SDK is still in public beta. Alchemy reserves the right to (and almost certainly will) make breaking API changes in subsequent releases (don't write production code around it just yet).\n\n## Getting started\n\n```\nnpm install @alch/alchemy-sdk\n```\n\nAfter installing the app, you can then import and use the SDK:\n\n```ts\nimport { Network, Alchemy } from '@alch/alchemy-sdk';\n\n// Optional Config object, but defaults to demo api-key and eth-mainnet.\nconst settings = {\n  apiKey: 'demo', // Replace with your Alchemy API Key.\n  network: Network.ETH_MAINNET, // Replace with your network.\n  maxRetries: 10\n};\n\nconst alchemy = new Alchemy(settings);\n```\n\nYou can access each method using the following pattern. Methods supported include: \n- All commonly-used Ethers.js methods\n- Alchemy NFT API methods\n- Alchemy Enhanced API methods\n\nIf you are already using Ethers.js, you should be simply able to replace the Ethers.js object with the Alchemy object and it should just work.\n\n```ts\n// Initializing the alchemy config object\nimport { Alchemy } from '@alch/alchemy-sdk';\n\n// Using default settings - pass in a settings object to specify your API key and network\nconst alchemy = new Alchemy(); \n\n// Access standard Ethers.js JSON-RPC node requests\nalchemy.getBlockNumber().then(console.log);\n\n// Access Alchemy-specific NFT API or Enhanced API requests\nalchemy.getNftsForOwner('0xshah.eth').then(console.log);\n```\n\n### Preventing Breaking Changes\n\nThe SDK is currently in public beta, and will undergo breaking changes before its official release. To protect your\nproject from breaking changes, make sure to pin the version of the SDK you are using in your `package.json` file. Please\ncheck the release notes to see if any breaking changes have been made. While the SDK in the public beta, minor versions\nmay contain breaking changes, but patch versions under the same minor version should be safe to use interchangeably.\n\nFor example, to pin to a specific version of the SDK in your `package.json` file:\n\n```\n{\n  \"dependencies\": {\n    \"@alch/alchemy-sdk\": \"1.1.0\"\n  }\n}\n```\n\n## SDK Structure\n\nThe `Alchemy` object returned by `new Alchemy()` provides access to the Alchemy API. An optional config\nobject can be passed in when initializing to set your API key, change the network, or specify the max number of retries.\n\nThere are two different patterns for the Alchemy object to be used:\n\n1. The Alchemy object enables access to methods like `alchemy.getNftsForOwner()` or `alchemy.getBlockNumber()`. This pattern current supports nearly all Ethers.js methods with a 1:1 mapping, the Alchemy NFT API endpoints, and the Alchemy Enhanced APIs.\n\n2. In the case that an Ethers.js method is not supported on the top-level, the Alchemy object can be used to generate an Ethers.js provider that allows access to less-common [Ethers.js methods](https://docs.ethers.io/v5/single-page/).\n\n## Accessing the full Ethers.js provider\n\nTo keep the package clean, we don't support certain uncommonly-used Ethers.js methods as top-level methods the Alchemy object - for example, `provider.formatter`. If you'd like to access these methods, simply use the `alchemy.getProvider()` function to configure the\nEthers.js [AlchemyProvider](https://docs.ethers.io/v5/api/providers/api-providers/#AlchemyProvider) and return it.\n\n```ts\nimport { Alchemy } from '@alch/alchemy-sdk';\n\nconst alchemy = new Alchemy();\n\nasync function runAlchemy() {\n  const ethersProvider = await alchemy.getProvider();\n  console.log(ethersProvider.formatter);\n}\nrunAlchemy();\n```\n\n## Websockets and Subscription Listeners\n\nIn addition to the built-in Ethers.js listeners, the Alchemy SDK includes support for Alchemy's Subscription API. This\nallows you to subscribe to events and receive updates\nas they occur. The main subscription API is\n[alchemy_pendingTransactions](https://docs.alchemy.com/alchemy/enhanced-apis/subscription-api-websockets#alchemy_pendingtransactions).\n\nThe top level `Alchemy` instance can be used can be used like the standard Ethers.js [WebSocketProvider](https://docs.ethers.io/v5/api/providers/other/#WebSocketProvider) to add listeners for Alchemy events:\n\n```ts\nimport { Alchemy } from '@alch/alchemy-sdk';\n\nconst alchemy = new Alchemy();\n\n// Listen to all new pending transactions.\nalchemy.on(\n  {\n    method: 'alchemy_pendingTransactions'\n  },\n  res => console.log(res)\n);\n\n// Listen to only the next transaction on the USDC contract.\nalchemy.once(\n  {\n    method: 'alchemy_pendingTransactions',\n    toAddress: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48'\n  },\n  res => console.log(res)\n);\n\n// Remove all listeners.\nalchemy.removeAllListeners();\n```\n\nThe SDK brings multiple improvements to ensure correct WebSocket behavior in cases of temporary network failure or\ndropped connections. As with any network connection, you should not assume that a WebSocket will remain open forever\nwithout interruption, but correctly handling dropped connections and reconnection by hand can be challenging to get\nright. `alchemy-sdk` automatically handles these failures with no configuration necessary. The main benefits are:\n\n- Resilient event delivery: Unlike standard Web3.js or Ethers.js, you will not permanently miss events which arrive\n  while the backing WebSocket is temporarily down. Instead, you will receive these events as soon as the connection\n  is reopened. Note that if the connection is down for more than 120 blocks (approximately 20 minutes), you may\n  still miss some events that were not part of the most recent 120 blocks.\n- Lowered rate of failure: Compared to standard Web3.js or Ethers.js, there are fewer failures when sending requests\n  over the WebSocket while the connection is down. Alchemy Web3 will attempt to send the requests once the connection\n  is reopened. Note that it is still possible, with a lower likelihood, for outgoing requests to be lost,\n  so you should still have error handling as with any network request.\n\n## NFT Module\n\nThe SDK currently supports the following [NFT API](https://docs.alchemy.com/alchemy/enhanced-apis/nft-api) endpoints\nunder the `Alchemy` class:\n\n- `getNftMetadata()`: Get the NFT metadata for a contract address and tokenId.\n- `getNftContractMetadata()`: Get the metadata associated with an NFT contract\n- `getNftsForOwner()`: Get NFTs for an owner address.\n- `getNftsForOwnerIterator()`: Get NFTs for an owner address as an async iterator (handles paging automatically).\n- `getNftsForNftContract()`: Get all NFTs for a contract address.\n- `getNftForNftContractIterator()`: Get all NFTs for a contract address as an async iterator (handles paging\n  automatically).\n- `getOwnersForNft()`: Get all the owners for a given NFT contract address and a particular token ID.\n- `getOwnersForNftContract()`: Get all the owners for a given NFT contract address.\n- `checkNftOwnership()`: Check that the provided owner address owns one or more of the provided NFT contract addresses.\n- `isSpamNftContract()`: Check whether the given NFT contract address is a spam contract as defined by Alchemy (see the [NFT API FAQ](https://docs.alchemy.com/alchemy/enhanced-apis/nft-api/nft-api-faq#nft-spam-classification))\n- `getSpamNftContracts()`: Returns a list of all spam contracts marked by Alchemy.\n- `findContractDeployer()`: Find the contract deployer and block number for a given NFT contract address.\n- `refreshNftMetadata()`: Refresh the cached NFT metadata for a contract address and a single tokenId.\n- `refreshNftContract()`: Enqueues the specified contract address to have all token ids' metadata refreshed. \n- `getNftFloorPrice()`: Return the floor prices of a NFT contract by marketplace.\n\n### Comparing `BaseNft` and `Nft`\n\nThe SDK currently uses the `BaseNft` and `Nft` classes to represent NFTs returned by the Alchemy. The `BaseNft` object\ndoes\nnot hold any metadata information and only contains the NFT contract and token ID. The `Nft` object additionally\ncontains the NFT metadata, token URI information, and media.\n\nBy default, the SDK will return the `Nft` object. You can optionally choose to fetch the `BaseNft` object instead by\nsetting the `omitMetadata` parameter to `true`. The SDK documentation describes the different parameter and response\ninterfaces in more detail.\n\n### Pagination\n\nThe Alchemy NFT endpoints return 100 results per page. To get the next page, you can pass in the `pageKey` returned by\nthe\nprevious call. To simplify paginating through all results, the SDK provides the `getNftsIterator()`\nand `getNftsForNftContractIterator()` functions that automatically paginate through all NFTs and yields them via\nan `AsyncIterable`.\n\nHere's an example of how to paginate through all the NFTs in Vitalik's ENS address:\n\n```ts\nimport { Alchemy } from '@alch/alchemy-sdk';\n\nconst alchemy = new Alchemy();\n\nasync function main() {\n  const ownerAddress = 'vitalik.eth';\n  for await (const nft of alchemy.getNftsForOwnerIterator(ownerAddress)) {\n    console.log('ownedNft:', nft);\n  }\n}\n\nmain();\n```\n\n### SDK vs API Differences\n\nThe NFT API in the SDK standardizes response types to reduce developer friction, but note this results in some\ndifferences compared to the Alchemy REST endpoints:\n\n- Methods referencing `Collection` have been renamed to use the name `NftContract` for greater accuracy: e.g. `getNftsForNftContract`.\n- Some methods have different naming that the REST API counterparts in order to provide a consistent API interface (\n  e.g. `getNftsForOwner()` is `alchemy_getNfts`, `getOwnersForNft()` is `alchemy_getOwnersForToken`).\n- SDK standardizes to `omitMetadata` parameter (vs. `withMetadata`).\n- Standardization to `pageKey` parameter for pagination (vs. `nextToken`/`startToken`)\n- Empty `TokenUri` fields are omitted.\n- Token ID is always normalized to an integer string on `BaseNft` and `Nft`.\n- Some fields omitted in the REST response are included in the SDK response in order to return an `Nft` object.\n- Some fields in the SDK's `Nft` object are named differently than the REST response.\n\n## Documentation\n\nThe SDK is documented via `tsdoc` comments in the source code. The generated types and documentation are included when\nusing an IDE. To browse the documentation separately, you can view the generated API interfaces\nin `etc/alchemy-sdk.api.md`. You can view generated Markdown files for each endpoint in the `docs-md` directory,\nor as a webpage by opening `docs/index.html` in your browser.\n\n## Future Work\n\nThere's a long list, but here are the main ones:\n\n- Retry count support for json-rpc calls (currently only for NFT API calls).\n- More config options for the base ethers.js AlchemyProvider.\n\n## Examples\n\nBelow are a few usage examples:\n\nGetting the NFTs owned by an address.\n\n```ts\nimport {\n  NftExcludeFilters,\n  Alchemy\n} from '@alch/alchemy-sdk';\n\nconst alchemy = new Alchemy();\n\n// Get how many NFTs an address owns.\nalchemy.getNftsForOwner('0xshah.eth').then(nfts => {\n  console.log(nfts.totalCount);\n});\n\n// Get all the image urls for all the NFTs an address owns.\nasync function main() {\n  for await (const nft of alchemy.getNftsForOwnerIterator('0xshah.eth')) {\n    console.log(nft.media);\n  }\n}\n\nmain();\n\n// Filter out spam NFTs.\nalchemy.getNftsForOwner('0xshah.eth', {\n  excludeFilters: [NftExcludeFilters.SPAM]\n}).then(console.log);\n```\n\nGetting all the owners of the BAYC NFT.\n\n```ts\nimport {\n  Alchemy\n} from '@alch/alchemy-sdk';\n\nconst alchemy = new Alchemy();\n\n// Bored Ape Yacht Club contract address.\nconst baycAddress = '0xBC4CA0EdA7647A8aB7C2061c2E118A18a936f13D';\n\nasync function main() {\n  for await (const nft of alchemy.getNftsForNftContractIterator(baycAddress, {\n    // Omit the NFT metadata for smaller payloads.\n    omitMetadata: true\n  })) {\n    await alchemy.getOwnersForNft(nft).then(response =>\n      console.log('owners:', response.owners, 'tokenId:', nft.tokenId)\n    );\n  }\n}\n\nmain();\n```\n\nGet all outbound transfers for a provided address.\n\n```ts\nimport { Alchemy } from '@alch/alchemy-sdk';\n\nconst alchemy = new Alchemy();\n\nalchemy.getTokenBalances('0x994b342dd87fc825f66e51ffa3ef71ad818b6893').then(\n  console.log\n);\n```\n\n## Questions and Feedback\n\nIf you have any questions, issues, or feedback, please file an issue\non [GitHub](https://github.com/alchemyplatform/alchemy-sdk-js/issues), or drop us a message on\nour [Discord](https://discord.com/channels/735965332958871634/983472322998575174) channel for the SDK.\n","exports":{"node":{"import":"./dist/cjs/index.js","require":"./dist/cjs/index.js"},"default":"./dist/esm/index.js","package.json":"./package.json"},"main-es":"dist/es/index.js","scripts":{"api":"yarn build && api-extractor run","docs":"typedoc --plugin none --out docs src/index.ts","lint":"eslint -c .eslintrc.js '**/*.ts' --ignore-path '.gitignore'","test":"jest test/unit","build":"rollup -c","clean":"rm -rf dist","format":"prettier --write '**/*.{html,js,json,md,ts}'","docs-md":"typedoc --plugin typedoc-plugin-markdown --out docs-md src/index.ts","prepare":"husky install","prebuild":"yarn clean && tsc --emitDeclarationOnly --declaration -p tsconfig.json","lint-file":"eslint --fix","pre-commit":"lint-staged","format-file":"prettier --write"},"_npmUser":{"name":"brian-alchemy","email":"brian@alchemy.com"},"deprecated":"This build contained breaking changes that were not meant to be released. Please use v1.1.1 instead","repository":{"url":"git+https://github.com/alchemyplatform/alchemy-sdk-js.git","type":"git"},"size-limit":[{"path":"dist/cjs/index.js","limit":"100 kB"}],"description":"Extended Ethers.js SDK for Alchemy APIs","directories":{},"licenseText":"MIT License\n\nCopyright (c) 2022 Alchemy\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","lint-staged":{"**/*.ts":["yarn lint-file --fix","yarn format-file"],"package.json":["node ./inject-version.js","git add src/version.ts"]},"sideEffects":false,"dependencies":{"axios":"^0.26.1","websocket":"^1.0.34","sturdy-websocket":"^0.2.1","@ethersproject/web":"^5.6.1","@ethersproject/networks":"^5.6.4","@ethersproject/bignumber":"^5.6.2","@ethersproject/providers":"^5.6.8","@ethersproject/abstract-provider":"^5.6.1"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.5.1","husky":"^7.0.0","tslib":"^2.3.1","eslint":"^8.11.0","rollup":"^2.70.1","ts-jest":"^27.1.4","typedoc":"^0.22.15","prettier":"2.6.0","size-limit":"^7.0.8","typescript":"^4.5.5","@types/jest":"^27.4.1","lint-staged":"^12.3.7","mock-socket":"^9.1.4","axios-mock-adapter":"^1.20.0","eslint-plugin-import":"^2.25.4","prettier-plugin-jsdoc":"^0.3.38","@rollup/plugin-commonjs":"^22.0.0","typedoc-plugin-markdown":"^3.12.1","@microsoft/api-extractor":"^7.19.5","@microsoft/api-documenter":"^7.16.0","@typescript-eslint/parser":"^5.16.0","rollup-plugin-typescript2":"^0.31.2","@size-limit/preset-big-lib":"^7.0.8","@rollup/plugin-node-resolve":"^13.3.0","eslint-plugin-unused-imports":"^2.0.0","@typescript-eslint/eslint-plugin":"^5.16.0"},"_npmOperationalInternal":{"tmp":"tmp/alchemy-sdk_1.1.0_1657837481085_0.5491665737920259","host":"s3://npm-registry-packages"}},"1.1.1":{"name":"@alch/alchemy-sdk","version":"1.1.1","author":{"name":"Alchemy"},"license":"MIT","_id":"@alch/alchemy-sdk@1.1.1","maintainers":[{"name":"chub","email":"npm@hbar.us"},{"name":"kurushdubash","email":"kurush@alchemy.com"},{"name":"brian-alchemy","email":"brian@alchemy.com"},{"name":"dphilipson","email":"david.philipson@gmail.com"},{"name":"alchemy-team","email":"accounts@alchemy.com"},{"name":"omarsayha","email":"omar@alchemyapi.io"},{"name":"noam-alchemy","email":"noam@alchemyapi.io"},{"name":"stevenzyang","email":"steezyang@gmail.com"}],"homepage":"https://github.com/alchemyplatform/alchemy-sdk-js#readme","bugs":{"url":"https://github.com/alchemyplatform/alchemy-sdk-js/issues"},"dist":{"shasum":"aaa461fc62af69597161035a32b92812eb06cf6d","tarball":"https://registry.npmjs.org/@alch/alchemy-sdk/-/alchemy-sdk-1.1.1.tgz","fileCount":48,"integrity":"sha512-Nc6/F2PkvySq913/bgked4ZAO4ch2f7fT08feDSheP3vVPyC/kYf13zD7WH4c34O4HvIQnSN8//G4xjq/9xC0w==","signatures":[{"sig":"MEUCIFJVjbqKeRT6yWVkgbMr08zwSZG9ftrRg6jnXHGCyYpbAiEAik1w/6q4h9ZBEivAcI5N07A0r+7CbbliQycX7+fli74=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":796047,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi0JlPACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmr0AA/+PzQvAt3Yxd1d3CRMViHP6/XUOsN+nIkHax3QQTcU+BfDeQVT\r\n7+nevWdbT9O0ifwRx58Wmp4X8t/jCW4lE7G9OOUweMQA4dfD6iiafm9oodaN\r\nzho+ipe+tn+bG/CE28qL8Eo5OtSbgWI7LB30wbR+qPZ07IX7QTq4lEjYSa4G\r\npMW2q0jFVpAOGQcaxcFM+Sx1XCGkve4V4W10whT5RZsqdSmrdICJiznjwDYv\r\nwwF9I0mvrz/HBVzBs7OFm+X2w4F8aZEH8bB8gm7qfQmEhFZVhJ2zjU/uLLgg\r\nDED2qr5muxSzVuMYkm1N9vLsaFo7TbA7g1jroXWKcmCYQeIV6eXE23nQsahX\r\nMp5COjuPlBCfxsSyHoBX9FOGo1/En3oAh4Rw0N812ZnLJtwfcmBGnl0d0AyX\r\ncoue99rff8HJ8Dse3FYXxBSYl0tPxwIaE2J6P8dJ6K0zTx8Idz/dirorokqV\r\nwV6Bjy/XFaQ4e7M18USAXc5ZoUnGeJXv71LVtM23Nqv1YYqELUdnbT5aSFdP\r\n3iAWoDg7hunRPgsX50yfTnTtBKi8JJ8BqugXpfb2B5BjdnI0OFGnKda0p6aj\r\n/A3b0RJ2amgyhK3latKjZcdO0Har+XkgBVuaL/upVjpbCoLsGgJBcUlsO5UW\r\n9d5DNx+omgBph3b/TFbsmu4ExWgnZYSIiRk=\r\n=gns4\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.cjs.js","types":"./dist/src/index.d.ts","module":"dist/index.esm.js","exports":{"node":{"import":"./dist/index.cjs.js","require":"./dist/index.cjs.js"},"default":"./dist/index.esm.js","package.json":"./package.json"},"main-es":"dist/index.mjs","scripts":{"api":"yarn build && api-extractor run","docs":"typedoc --plugin none --out docs src/index.ts","lint":"eslint -c .eslintrc.js '**/*.ts' --ignore-path '.gitignore'","test":"jest test/unit","build":"rollup -c","clean":"rm -rf dist","format":"prettier --write '**/*.{html,js,json,md,ts}'","docs-md":"typedoc --plugin typedoc-plugin-markdown --out docs-md src/index.ts","prepare":"husky install","prebuild":"yarn clean && tsc --emitDeclarationOnly --declaration -p tsconfig.json","lint-file":"eslint --fix","pre-commit":"lint-staged","format-file":"prettier --write"},"_npmUser":{"name":"brian-alchemy","email":"brian@alchemy.com"},"repository":{"url":"git+https://github.com/alchemyplatform/alchemy-sdk-js.git","type":"git"},"size-limit":[{"path":"dist/index.cjs.js","limit":"100 kB"}],"description":"Extended Ethers.js SDK for Alchemy APIs","directories":{},"licenseText":"MIT License\n\nCopyright (c) 2022 Alchemy\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","lint-staged":{"**/*.ts":["yarn lint-file --fix","yarn format-file"],"package.json":["node ./inject-version.js","git add src/version.ts"]},"sideEffects":false,"dependencies":{"axios":"^0.26.1","websocket":"^1.0.34","sturdy-websocket":"^0.2.1","@ethersproject/web":"^5.6.1","@ethersproject/networks":"^5.6.4","@ethersproject/bignumber":"^5.6.2","@ethersproject/providers":"^5.6.8","@ethersproject/abstract-provider":"^5.6.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.5.1","husky":"^7.0.0","tslib":"^2.3.1","eslint":"^8.11.0","rollup":"^2.70.1","ts-jest":"^27.1.4","typedoc":"^0.22.15","prettier":"2.6.0","size-limit":"^7.0.8","typescript":"^4.5.5","@types/jest":"^27.4.1","lint-staged":"^12.3.7","mock-socket":"^9.1.4","axios-mock-adapter":"^1.20.0","eslint-plugin-import":"^2.25.4","prettier-plugin-jsdoc":"^0.3.38","@rollup/plugin-commonjs":"^22.0.0","typedoc-plugin-markdown":"^3.12.1","@microsoft/api-extractor":"^7.19.5","@microsoft/api-documenter":"^7.16.0","@typescript-eslint/parser":"^5.16.0","rollup-plugin-typescript2":"^0.31.2","@size-limit/preset-big-lib":"^7.0.8","@rollup/plugin-node-resolve":"^13.3.0","eslint-plugin-unused-imports":"^2.0.0","@typescript-eslint/eslint-plugin":"^5.16.0"},"_npmOperationalInternal":{"tmp":"tmp/alchemy-sdk_1.1.1_1657837902916_0.8364386913635671","host":"s3://npm-registry-packages"}},"1.2.0-beta.0":{"name":"@alch/alchemy-sdk","version":"1.2.0-beta.0","author":{"name":"Alchemy"},"license":"MIT","_id":"@alch/alchemy-sdk@1.2.0-beta.0","maintainers":[{"name":"chub","email":"npm@hbar.us"},{"name":"kurushdubash","email":"kurush@alchemy.com"},{"name":"brian-alchemy","email":"brian@alchemy.com"},{"name":"dphilipson","email":"david.philipson@gmail.com"},{"name":"alchemy-team","email":"accounts@alchemy.com"},{"name":"omarsayha","email":"omar@alchemyapi.io"},{"name":"noam-alchemy","email":"noam@alchemyapi.io"},{"name":"stevenzyang","email":"steezyang@gmail.com"}],"homepage":"https://github.com/alchemyplatform/alchemy-sdk-js#readme","bugs":{"url":"https://github.com/alchemyplatform/alchemy-sdk-js/issues"},"dist":{"shasum":"cd8f090ca54630bc280248663efafbbf17f4d4f7","tarball":"https://registry.npmjs.org/@alch/alchemy-sdk/-/alchemy-sdk-1.2.0-beta.0.tgz","fileCount":139,"integrity":"sha512-9i1/+ZVwqRXEu/GvfcJIcEx2k1vV0yBqH+y6xK9JEF7xkAgNru9xKDl5UQYSQtIDvjUL1vobGRs1WCK5hlB35w==","signatures":[{"sig":"MEYCIQDw32PuYG6a2IU6aTkMce5Rd2ku+bHpzRVJbQ+xoXavmQIhAOKD0ettbs7r0TAb4izLzN5z2cAUnw0iPUed5RKBEANi","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1247914,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi0JvdACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpEyw//ekI3F4AYwyT0Xg05wKU/xC4BMjMMUSIMvBDJQ+WlMMoR/qt3\r\npIX3oOjEYFiG+kx8wfUSy1IED33NE5YvHt9QaOtg//c63L//OxCZ2ajPfe7Q\r\n8za1W1x1sf9IiXYNTHrZ0CuPfjRj0L68FX5qbpuM5ulELttWNTZQ7RAMhVFI\r\nXsIRgnvok2mA0cHxMWktYNYrlV55uw9GQ2qUTsnUvEJY0NC4XpCpEqUJA81m\r\nTOKrSeMv4yAoiWh4FTEeGEjb3KnKDbDXdRwAzDopC1uMNNJSGqw5q+KQhX0c\r\nWAm66newn2w8Zi7LExQFqkexammBjWI5SeY9RmXwGLwLoKBNxl0bmpRP4ySL\r\nhJvFMTsxGsaCxI0etAnhbP0aJ9TRXqPyZCUgHBrG94Gmob8qoTCt6meOF781\r\nVlIkEQapbHtDVMRwBFaiAV/F0EzE8eb87R+KuHO28BS884GsAJsLy580OYhL\r\nZY6jl9Q9bbWPS3MAgHGt86peywrr/+0VCpFkEYN928eyDGpJsm0X3s4g73it\r\ncAHkYkhP6iNaoIpbWLujcY6ndAlEtgk+YDggzV0snA2puIrKZgmzMPmZ2Xw1\r\n8mqHPjPg3VHEMeTt425pECIRGzJx9nNwItsnoarGk9K311nM7r9yHrxXDcqP\r\neTNT0zsdKczl45jIRi92hRiDq/5qZxu3tdw=\r\n=pVcF\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/cjs/index.js","types":"./dist/src/index.d.ts","module":"dist/esm/index.js","exports":{"node":{"import":"./dist/cjs/index.js","require":"./dist/cjs/index.js"},"default":"./dist/esm/index.js","package.json":"./package.json"},"gitHead":"865aa2ba463a569932dd8808bd7b341b42c57ac6","main-es":"dist/es/index.js","scripts":{"api":"yarn build && api-extractor run","docs":"typedoc --plugin none --out docs src/index.ts","lint":"eslint -c .eslintrc.js '**/*.ts' --ignore-path '.gitignore'","test":"jest test/unit","build":"rollup -c","clean":"rm -rf dist","format":"prettier --write '**/*.{html,js,json,md,ts}'","docs-md":"typedoc --plugin typedoc-plugin-markdown --out docs-md src/index.ts","prepare":"husky install","prebuild":"yarn clean && tsc --emitDeclarationOnly --declaration -p tsconfig.json","lint-file":"eslint --fix","pre-commit":"lint-staged","format-file":"prettier --write"},"_npmUser":{"name":"brian-alchemy","email":"brian@alchemy.com"},"repository":{"url":"git+https://github.com/alchemyplatform/alchemy-sdk-js.git","type":"git"},"size-limit":[{"path":"dist/index.cjs.js","limit":"100 kB"}],"_npmVersion":"8.13.2","description":"Extended Ethers.js SDK for Alchemy APIs","directories":{},"lint-staged":{"**/*.ts":["yarn lint-file --fix","yarn format-file"],"package.json":["node ./inject-version.js","git add src/version.ts"]},"sideEffects":false,"_nodeVersion":"16.13.2","dependencies":{"axios":"^0.26.1","websocket":"^1.0.34","sturdy-websocket":"^0.2.1","@ethersproject/web":"^5.6.1","@ethersproject/networks":"^5.6.4","@ethersproject/bignumber":"^5.6.2","@ethersproject/providers":"^5.6.8","@ethersproject/abstract-provider":"^5.6.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.5.1","husky":"^7.0.0","tslib":"^2.3.1","eslint":"^8.11.0","rollup":"^2.70.1","ts-jest":"^27.1.4","typedoc":"^0.22.15","prettier":"2.6.0","size-limit":"^7.0.8","typescript":"^4.5.5","@types/jest":"^27.4.1","lint-staged":"^12.3.7","mock-socket":"^9.1.4","axios-mock-adapter":"^1.20.0","eslint-plugin-import":"^2.25.4","prettier-plugin-jsdoc":"^0.3.38","@rollup/plugin-commonjs":"^22.0.0","typedoc-plugin-markdown":"^3.12.1","@microsoft/api-extractor":"^7.19.5","@microsoft/api-documenter":"^7.16.0","@typescript-eslint/parser":"^5.16.0","rollup-plugin-typescript2":"^0.31.2","@size-limit/preset-big-lib":"^7.0.8","@rollup/plugin-node-resolve":"^13.3.0","eslint-plugin-unused-imports":"^2.0.0","@typescript-eslint/eslint-plugin":"^5.16.0"},"_npmOperationalInternal":{"tmp":"tmp/alchemy-sdk_1.2.0-beta.0_1657838556902_0.05203381274631491","host":"s3://npm-registry-packages"}},"1.2.0":{"name":"@alch/alchemy-sdk","version":"1.2.0","author":{"name":"Alchemy"},"license":"MIT","_id":"@alch/alchemy-sdk@1.2.0","maintainers":[{"name":"robalchemy","email":"rob.coleman@alchemy.com"},{"name":"chub","email":"npm@hbar.us"},{"name":"kurushdubash","email":"kurush@alchemy.com"},{"name":"brian-alchemy","email":"brian@alchemy.com"},{"name":"dphilipson","email":"david.philipson@gmail.com"},{"name":"alchemy-team","email":"accounts@alchemy.com"},{"name":"omarsayha","email":"omar@alchemyapi.io"},{"name":"noam-alchemy","email":"noam@alchemyapi.io"},{"name":"stevenzyang","email":"steezyang@gmail.com"}],"homepage":"https://github.com/alchemyplatform/alchemy-sdk-js#readme","bugs":{"url":"https://github.com/alchemyplatform/alchemy-sdk-js/issues"},"dist":{"shasum":"e185ec6ccfc1ba570f0dff75d040d7970f17371d","tarball":"https://registry.npmjs.org/@alch/alchemy-sdk/-/alchemy-sdk-1.2.0.tgz","fileCount":48,"integrity":"sha512-V7ajgkdIsTuKfJAzT/6+JQfG4+UodmGduaXcBiuEuTsDnw/sX6Q+ATiBuex0m6ZEPx0QpRe7NYHZNSpSJbtWpg==","signatures":[{"sig":"MEQCIBixtUKgPXibf5yaI8FvYm4DCBNRcWoz3TReSGb7+XxdAiAUArmegOOrXA9my2gjGtFJBhP+lzpLm6EbQVtL56z3vA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":798654,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi2t5+ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoolA//XdiwpBq3ZU1cyQBdZhrzbGQQYByDHARfTaSboN7Q8o6Z6LwD\r\nr8m73s7hDWdaJs7BJuXo+SIseS0zVpkTwhOnfuJFuDbCxA7VNXYT/SPXxQyu\r\n+AmRQfUMss1sLMPhC0mA8Dd1FzrO0pT2P0JbdWxMeazi1yQh/Q/QRFZ5lWex\r\n7kWRraN9WGWH+84w1qtPZExAf+ByvL7stGCv17V1EL4/k8SSl9bvZYvV1OlZ\r\n0NUBY14Q/QARyUzaSBhWN0HE56iB0iPafVp+42Cr0KIHivZ/rnxxIcz1YReK\r\n5JWW0zCeIZjsfHhGOvap1RGwgmVEUHlcwegf++8+CBIXNSIb5IxRfgUyLTIx\r\nS6OryVT+ULpl03PXvadOHkz8HDx9DP5xz3WrHUTSGp4aZcNL/Nubj/dDEOjU\r\ntq6DSCTWfeYH7zx03rtahHT6DZyXF8/r4mhk+7A+mYz6Nhkrpcds9t8+DR63\r\ntdALCo76dHefgG7ysOw54LFCa+sbaxR967gpcVV6dpn1ulpfgVUC7t8mySqN\r\n0ij5Q3CCDQD+omIx+dVlc7dLDG9j3Z9PZZC2nlVC++k3M4Z1sYydubfOmpdM\r\nXz6BgxyQ7k4cAfOie3h8JGXgyaG2/sc7M2qw6N1xUZnTrc+lyVEs7u6wD3Dm\r\ndnNyOidLbHz5wuu3YmaowGoIVVtRlv5uvFQ=\r\n=3eVW\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.cjs.js","types":"./dist/src/index.d.ts","module":"dist/index.esm.js","exports":{"node":{"import":"./dist/index.cjs.js","require":"./dist/index.cjs.js"},"default":"./dist/index.esm.js","package.json":"./package.json"},"main-es":"dist/index.mjs","scripts":{"api":"yarn build && api-extractor run","docs":"typedoc --plugin none --out docs src/index.ts","lint":"eslint -c .eslintrc.js '**/*.ts' --ignore-path '.gitignore'","test":"jest test/unit","build":"rollup -c","clean":"rm -rf dist","format":"prettier --write '**/*.{html,js,json,md,ts}'","docs-md":"typedoc --plugin typedoc-plugin-markdown --out docs-md src/index.ts","prepare":"husky install","prebuild":"yarn clean && tsc --emitDeclarationOnly --declaration -p tsconfig.json","lint-file":"eslint --fix","pre-commit":"lint-staged","format-file":"prettier --write"},"_npmUser":{"name":"brian-alchemy","email":"brian@alchemy.com"},"deprecated":"This package has moved to 'alchemy-sdk'. Please check https://github.com/alchemyplatform/alchemy-sdk-js for more details","repository":{"url":"git+https://github.com/alchemyplatform/alchemy-sdk-js.git","type":"git"},"size-limit":[{"path":"dist/index.cjs.js","limit":"100 kB"}],"description":"Extended Ethers.js SDK for Alchemy APIs","directories":{},"licenseText":"MIT License\n\nCopyright (c) 2022 Alchemy\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","lint-staged":{"**/*.ts":["yarn lint-file --fix","yarn format-file"],"package.json":["node ./inject-version.js","git add src/version.ts"]},"sideEffects":false,"dependencies":{"axios":"^0.26.1","websocket":"^1.0.34","sturdy-websocket":"^0.2.1","@ethersproject/web":"^5.6.1","@ethersproject/networks":"^5.6.4","@ethersproject/bignumber":"^5.6.2","@ethersproject/providers":"^5.6.8","@ethersproject/abstract-provider":"^5.6.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^27.5.1","husky":"^7.0.0","tslib":"^2.3.1","eslint":"^8.11.0","rollup":"^2.70.1","ts-jest":"^27.1.4","typedoc":"^0.22.15","prettier":"2.6.0","size-limit":"^7.0.8","typescript":"^4.5.5","@types/jest":"^27.4.1","lint-staged":"^12.3.7","mock-socket":"^9.1.4","axios-mock-adapter":"^1.20.0","eslint-plugin-import":"^2.25.4","prettier-plugin-jsdoc":"^0.3.38","@rollup/plugin-commonjs":"^22.0.0","typedoc-plugin-markdown":"^3.12.1","@microsoft/api-extractor":"^7.19.5","@microsoft/api-documenter":"^7.16.0","@typescript-eslint/parser":"^5.16.0","rollup-plugin-typescript2":"^0.31.2","@size-limit/preset-big-lib":"^7.0.8","@rollup/plugin-node-resolve":"^13.3.0","eslint-plugin-unused-imports":"^2.0.0","@typescript-eslint/eslint-plugin":"^5.16.0"},"_npmOperationalInternal":{"tmp":"tmp/alchemy-sdk_1.2.0_1658510974339_0.2685811407033356","host":"s3://npm-registry-packages"}},"2.0.0-beta.0":{"name":"@alch/alchemy-sdk","version":"2.0.0-beta.0","author":{"name":"Alchemy"},"license":"MIT","_id":"@alch/alchemy-sdk@2.0.0-beta.0","maintainers":[{"name":"robalchemy","email":"rob.coleman@alchemy.com"},{"name":"chub","email":"npm@hbar.us"},{"name":"kurushdubash","email":"kurush@alchemy.com"},{"name":"brian-alchemy","email":"brian@alchemy.com"},{"name":"dphilipson","email":"david.philipson@gmail.com"},{"name":"alchemy-team","email":"accounts@alchemy.com"},{"name":"omarsayha","email":"omar@alchemyapi.io"},{"name":"noam-alchemy","email":"noam@alchemyapi.io"},{"name":"stevenzyang","email":"steezyang@gmail.com"}],"homepage":"https://github.com/alchemyplatform/alchemy-sdk-js#readme","bugs":{"url":"https://github.com/alchemyplatform/alchemy-sdk-js/issues"},"dist":{"shasum":"7f5718ab3e2d2f82213bbfe9f4be39e03500c0b2","tarball":"https://registry.npmjs.org/@alch/alchemy-sdk/-/alchemy-sdk-2.0.0-beta.0.tgz","fileCount":151,"integrity":"sha512-wKVr1WZdjxjdHJLsgY9Zop784z9ca1JNYcpBE6xDWZ52TV+mMvs55EJztLsKvNoDJi2P7YmTihl3FA+bhv+IOw==","signatures":[{"sig":"MEYCIQCp9GalM5dFQ769aS82Gy6f047zBHr0w1mhAlXAuy8nYwIhANnmP80rm5tO/8RLmtomoLc8g3tdfT2BMGTSk9/iZsY7","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1220318,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi2u4CACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoOhRAAlfFPU8snjGKNkuwUqYf7ImSF1D9kGU1A16JQ1FiaV5iSuMi0\r\nSpxoqQaAx7w3FUQbSDK3Hc+9AJVhhwUYIKOgIX1e/njc4j7SQNxUk1cA92cs\r\nY6joWRRDDFty8XByj/tcQDdRhUdJ83AcP3G5o5C7pLGh0PefgGmtQ4p/f1NP\r\nNOdTdI5LQHm7rUl84lmKKBf44mDIhUVAqC53I2sadu6o+Npbiy8ne3cwC2tg\r\nEzumH8Kro3L8CBfTcgd1f4KVQkvBRtHpOdUe6x0IJePIDA+X4mnaYaNAxlWA\r\npXik8S9LwzajvSeA5kGjlnGPoasOSq8STXIOsYquE6+6RRbD1X9c8rwKlAJd\r\n1+LeBLGc0DjG1kkjDJw3JvnG4ggGuRUKVNCkqmJreLh9KnATBQVO3LSUI5Mn\r\nOGfopgkvsmmbkNUXnmLYn+qpS3iHEg26VWKREtBNArwNatpox8UabDP7CVZE\r\nfI7dRW/7ynw4pFKuu05wqdp4SrAL8S9iTJUZP9yaG85rGuQ9O2Fl+BKWAx0P\r\nIpf4tkFAG0m9+Bb2eFXjHWifVxBCAMLuY/8odX1sYjDI4AdzNbolwWwK9wGJ\r\n4rNeW4cMjE6eSOolvKOmDFCBa4U8LbQcCLiicw6Kbd++I+8XjmZYYC5JN+OO\r\nZ+PM+9zZ2YsWdcrJeLxhyvlcnPsnmVZyhYI=\r\n=92TH\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/cjs/index.js","types":"./dist/src/index.d.ts","module":"dist/esm/index.js","readme":"# Alchemy SDK for Javascript\n\nAlchemy SDK helps developers use Alchemy's APIs and endpoints more efficiently. This is a lightweight, modular SDK built as a drop-in replacement of Ethers.js that provides a superset of functionality - enabling access to the Alchemy NFT API, Websockets, and Enhanced API methods.\n\nIt also provides access to Alchemy's hardened node infrastructure, guaranteeing reliability, scalability, and quality-of-life improvements such as automatic exponential backoff retries.\n\nNote that the SDK is still in public beta. Alchemy reserves the right to (and almost certainly will) make breaking API changes in subsequent releases (don't write production code around it just yet).\n\n## Getting started\n\n```\nnpm install @alch/alchemy-sdk\n```\n\nAfter installing the app, you can then import and use the SDK:\n\n```ts\nimport { Network, Alchemy } from '@alch/alchemy-sdk';\n\n// Optional Config object, but defaults to demo api-key and eth-mainnet.\nconst settings = {\n  apiKey: 'demo', // Replace with your Alchemy API Key.\n  network: Network.ETH_MAINNET, // Replace with your network.\n};\n\nconst alchemy = new Alchemy(settings);\n```\n\nThe `Alchemy` object returned by `new Alchemy()` provides access to the Alchemy API. An optional config object can be passed in when initializing to set your API key, change the network, or specify the max number of retries.\n\n## Alchemy SDK Namespaces\n\nThe Alchemy SDK currently supports three different namespaces, including: \n- `core`: All commonly-used Ethers.js methods and Alchemy Enhanced API methods\n- `nft`: All Alchemy NFT API methods\n- `ws`: All WebSockets methods\n\nIf you are already using Ethers.js, you should be simply able to replace the Ethers.js object with `alchemy.core` and it should just work.\n\n```ts\nimport { Alchemy } from '@alch/alchemy-sdk';\n\n// Using default settings - pass in a settings object to specify your API key and network\nconst alchemy = new Alchemy();\n\n// Access standard Ethers.js JSON-RPC node request\nalchemy.core.getBlockNumber().then(console.log);\n\n// Access Alchemy Enhanced API requests\nalchemy.core.getTokenBalances(\"0x3f5CE5FBFe3E9af3971dD833D26bA9b5C936f0bE\").then(console.log);\n\n// Access the Alchemy NFT API\nalchemy.nft.getNftsForOwner('vitalik.eth').then(console.log);\n\n// Access WebSockets and Alchemy-specific WS methods\nalchemy.ws.on(\n  {\n    method: 'alchemy_pendingTransactions'\n  },\n  res => console.log(res)\n);\n```\n### Preventing Breaking Changes\n\nThe SDK is currently in public beta, and will undergo breaking changes before its official release. To protect your\nproject from breaking changes, make sure to pin the version of the SDK you are using in your `package.json` file. Please check the release notes to see if any breaking changes have been made. While the SDK in the public beta, minor versions may contain breaking changes, but patch versions under the same minor version should be safe to use interchangeably.\n\nFor example, to pin to a specific version of the SDK in your `package.json` file:\n\n```\n{\n  \"dependencies\": {\n    \"@alch/alchemy-sdk\": \"1.1.0\"\n  }\n}\n```\n\n\n## Alchemy Core\n\nThe core package contains all commonly-used [Ethers.js](https://docs.ethers.io/v5/api/providers/api-providers/#AlchemyProvider) methods. If you are already using Ethers.js, you should be simply able to replace the Ethers.js object with `alchemy.core` and it should just work.\n\nIt also includes the majority of Alchemy Enhanced APIs, including: \n\n- `getTokenMetadata()`: Get the metadata for a token contract address.\n- `getTokenBalances()`: Gets the token balances for an owner given a list of contracts.\n- `getAssetTransfers()`: Get transactions for specific addresses.\n- `getTransactionReceipts()`: Gets all transaction receipts for a given block.\n\n\n### Accessing the full Ethers.js provider\n\nTo keep the package clean, we don't support certain uncommonly-used Ethers.js methods as top-level methods the Alchemy object - for example, `provider.formatter`. If you'd like to access these methods, simply use the `alchemy.config.getProvider()` function to configure the\nEthers.js [AlchemyProvider](https://docs.ethers.io/v5/api/providers/api-providers/#AlchemyProvider) and return it.\n\n```ts\nimport { Alchemy } from '@alch/alchemy-sdk';\nconst alchemy = new Alchemy();\n\nasync function runAlchemy() {\n  const ethersProvider = await alchemy.config.getProvider();\n  console.log(ethersProvider.formatter);\n}\nrunAlchemy();\n```\n\n## Alchemy WebSockets\n\nIn addition to the built-in Ethers.js listeners, the Alchemy SDK includes support for [Alchemy's Subscription API](https://docs.alchemy.com/alchemy/enhanced-apis/subscription-api-websockets). This allows you to subscribe to events and receive updates as they occur. \n\nThe `alchemy.ws` instance can be used can be used like the standard Ethers.js [WebSocketProvider](https://docs.ethers.io/v5/api/providers/other/#WebSocketProvider) to add listeners for Alchemy events:\n\n```ts\nimport { Alchemy } from '@alch/alchemy-sdk';\n\nconst alchemy = new Alchemy();\n\n// Listen to all new pending transactions.\nalchemy.ws.on(\n  {\n    method: 'alchemy_pendingTransactions'\n  },\n  res => console.log(res)\n);\n\n// Listen to only the next transaction on the USDC contract.\nalchemy.ws.once(\n  {\n    method: 'alchemy_pendingTransactions',\n    toAddress: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48'\n  },\n  res => console.log(res)\n);\n\n// Remove all listeners.\nalchemy.ws.removeAllListeners();\n```\n\nThe SDK brings multiple improvements to ensure correct WebSocket behavior in cases of temporary network failure or\ndropped connections. As with any network connection, you should not assume that a WebSocket will remain open forever\nwithout interruption, but correctly handling dropped connections and reconnection by hand can be challenging to get\nright. `alchemy-sdk` automatically handles these failures with no configuration necessary. The main benefits are:\n\n- Resilient event delivery: Unlike standard Web3.js or Ethers.js, you will not permanently miss events which arrive\n  while the backing WebSocket is temporarily down. Instead, you will receive these events as soon as the connection\n  is reopened. Note that if the connection is down for more than 120 blocks (approximately 20 minutes), you may\n  still miss some events that were not part of the most recent 120 blocks.\n- Lowered rate of failure: Compared to standard Web3.js or Ethers.js, there are fewer failures when sending requests\n  over the WebSocket while the connection is down. Alchemy Web3 will attempt to send the requests once the connection\n  is reopened. Note that it is still possible, with a lower likelihood, for outgoing requests to be lost,\n  so you should still have error handling as with any network request.\n\n## Alchemy NFT API\n\nThe SDK currently supports the following [NFT API](https://docs.alchemy.com/alchemy/enhanced-apis/nft-api) endpoints\nunder the `alchemy.nft` namespace:\n\n- `getNftMetadata()`: Get the NFT metadata for a contract address and tokenId.\n- `getContractMetadata()`: Get the metadata associated with an NFT contract\n- `getNftsForOwner()`: Get NFTs for an owner address.\n- `getNftsForOwnerIterator()`: Get NFTs for an owner address as an async iterator (handles paging automatically).\n- `getNftsForContract()`: Get all NFTs for a contract address.\n- `getNftForContractIterator()`: Get all NFTs for a contract address as an async iterator (handles paging\n  automatically).\n- `getOwnersForNft()`: Get all the owners for a given NFT contract address and a particular token ID.\n- `getOwnersForContract()`: Get all the owners for a given NFT contract address.\n- `checkNftOwnership()`: Check that the provided owner address owns one or more of the provided NFT contract addresses.\n- `isSpamContract()`: Check whether the given NFT contract address is a spam contract as defined by Alchemy (see the [NFT API FAQ](https://docs.alchemy.com/alchemy/enhanced-apis/nft-api/nft-api-faq#nft-spam-classification))\n- `getSpamContracts()`: Returns a list of all spam contracts marked by Alchemy.\n- `findContractDeployer()`: Find the contract deployer and block number for a given NFT contract address.\n- `refreshNftMetadata()`: Refresh the cached NFT metadata for a contract address and a single tokenId.\n- `refreshContract()`: Enqueues the specified contract address to have all token ids' metadata refreshed. \n- `getFloorPrice()`: Return the floor prices of a NFT contract by marketplace.\n\n### Comparing `BaseNft` and `Nft`\n\nThe SDK currently uses the `BaseNft` and `Nft` classes to represent NFTs returned by the Alchemy. The `BaseNft` object\ndoes\nnot hold any metadata information and only contains the NFT contract and token ID. The `Nft` object additionally\ncontains the NFT metadata, token URI information, and media.\n\nBy default, the SDK will return the `Nft` object. You can optionally choose to fetch the `BaseNft` object instead by\nsetting the `omitMetadata` parameter to `true`. The SDK documentation describes the different parameter and response\ninterfaces in more detail.\n\n### Pagination\n\nThe Alchemy NFT endpoints return 100 results per page. To get the next page, you can pass in the `pageKey` returned by\nthe\nprevious call. To simplify paginating through all results, the SDK provides the `getNftsIterator()`\nand `getNftsForContractIterator()` functions that automatically paginate through all NFTs and yields them via\nan `AsyncIterable`.\n\nHere's an example of how to paginate through all the NFTs in Vitalik's ENS address:\n\n```ts\nimport { Alchemy } from '@alch/alchemy-sdk';\n\nconst alchemy = new Alchemy();\n\nasync function main() {\n  const ownerAddress = 'vitalik.eth';\n  for await (const nft of alchemy.nft.getNftsForOwnerIterator(ownerAddress)) {\n    console.log('ownedNft:', nft);\n  }\n}\n\nmain();\n```\n\n### SDK vs API Differences\n\nThe NFT API in the SDK standardizes response types to reduce developer friction, but note this results in some\ndifferences compared to the Alchemy REST endpoints:\n\n- Methods referencing `Collection` have been renamed to use the name `Contract` for greater accuracy: e.g. `getNftsForContract`.\n- Some methods have different naming that the REST API counterparts in order to provide a consistent API interface (\n  e.g. `getNftsForOwner()` is `alchemy_getNfts`, `getOwnersForNft()` is `alchemy_getOwnersForToken`).\n- SDK standardizes to `omitMetadata` parameter (vs. `withMetadata`).\n- Standardization to `pageKey` parameter for pagination (vs. `nextToken`/`startToken`)\n- Empty `TokenUri` fields are omitted.\n- Token ID is always normalized to an integer string on `BaseNft` and `Nft`.\n- Some fields omitted in the REST response are included in the SDK response in order to return an `Nft` object.\n- Some fields in the SDK's `Nft` object are named differently than the REST response.\n\n## Documentation\n\nThe SDK is documented via `tsdoc` comments in the source code. The generated types and documentation are included when\nusing an IDE. To browse the documentation separately, you can view the generated API interfaces\nin `etc/alchemy-sdk.api.md`. You can view generated Markdown files for each endpoint in the `docs-md` directory,\nor as a webpage by opening `docs/index.html` in your browser.\n\n## Future Work\n\nThere's a long list, but here are the main ones:\n\n- Retry count support for json-rpc calls (currently only for NFT API calls).\n- More config options for the base ethers.js AlchemyProvider.\n\n## Usage Examples\n\n### Getting the NFTs owned by an address \n\n```ts\nimport { NftExcludeFilters, Alchemy } from '@alch/alchemy-sdk';\n\nconst alchemy = new Alchemy();\n\n// Get how many NFTs an address owns.\nalchemy.nft.getNftsForOwner('vitalik.eth').then(nfts => {\n  console.log(nfts.totalCount);\n});\n\n// Get all the image urls for all the NFTs an address owns.\nasync function main() {\n  for await (const nft of alchemy.nft.getNftsForOwnerIterator('vitalik.eth')) {\n    console.log(nft.media);\n  }\n}\n\nmain();\n\n// Filter out spam NFTs.\nalchemy.nft.getNftsForOwner('vitalik.eth', {\n  excludeFilters: [NftExcludeFilters.SPAM]\n}).then(console.log);\n```\n\n### Getting all the owners of the BAYC NFT\n\n```ts\nimport { Alchemy } from '@alch/alchemy-sdk';\n\nconst alchemy = new Alchemy();\n\n// Bored Ape Yacht Club contract address.\nconst baycAddress = '0xBC4CA0EdA7647A8aB7C2061c2E118A18a936f13D';\n\nasync function main() {\n  for await (const nft of alchemy.nft.getNftsForContractIterator(baycAddress, {\n    // Omit the NFT metadata for smaller payloads.\n    omitMetadata: true,\n  })) {\n    await alchemy.nft\n      .getOwnersForNft(nft.contract.address, nft.tokenId)\n      .then((response) =>\n        console.log(\"owners:\", response.owners, \"tokenId:\", nft.tokenId)\n      );\n  }\n}\n\nmain();\n```\n\n### Get all outbound transfers for a provided address\n\n```ts\nimport { Alchemy } from '@alch/alchemy-sdk';\n\nconst alchemy = new Alchemy();\n\nalchemy.core.getTokenBalances('0x994b342dd87fc825f66e51ffa3ef71ad818b6893').then(\n  console.log\n);\n```\n\n## Questions and Feedback\n\nIf you have any questions, issues, or feedback, please file an issue\non [GitHub](https://github.com/alchemyplatform/alchemy-sdk-js/issues), or drop us a message on\nour [Discord](https://discord.com/channels/735965332958871634/983472322998575174) channel for the SDK.\n","exports":{"node":{"import":"./dist/cjs/index.js","require":"./dist/cjs/index.js"},"default":"./dist/esm/index.js","package.json":"./package.json"},"gitHead":"65e6db576cf80f01eb60131bbc846471d8e30ef9","main-es":"dist/es/index.js","scripts":{"api":"yarn build && api-extractor run","docs":"typedoc --plugin none --out docs src/index.ts","lint":"eslint -c .eslintrc.js '**/*.ts' --ignore-path '.gitignore'","test":"jest test/unit","build":"rollup -c","clean":"rm -rf dist","format":"prettier --write '**/*.{html,js,json,md,ts}'","docs-md":"typedoc --plugin typedoc-plugin-markdown --out docs-md src/index.ts","prepare":"husky install","prebuild":"yarn clean && tsc --emitDeclarationOnly --declaration -p tsconfig.json","lint-file":"eslint --fix","pre-commit":"lint-staged","format-file":"prettier --write"},"_npmUser":{"name":"brian-alchemy","email":"brian@alchemy.com"},"repository":{"url":"git+https://github.com/alchemyplatform/alchemy-sdk-js.git","type":"git"},"size-limit":[{"path":"dist/index.cjs.js","limit":"100 kB"}],"_npmVersion":"8.13.2","description":"Extended Ethers.js SDK for Alchemy APIs","directories":{},"lint-staged":{"**/*.ts":["yarn lint-file --fix","yarn format-file"],"package.json":["node ./inject-version.js","git add src/version.ts"]},"sideEffects":false,"_nodeVersion":"16.13.2","dependencies":{"axios":"^0.26.1","websocket":"^1.0.34","sturdy-websocket":"^0.2.1","@ethersproject/web":"^5.6.1","@ethersproject/networks":"^5.6.4","@ethersproject/bignumber":"^5.6.2","@ethersproject/providers":"^5.6.8","@ethersproject/abstract-provider":"^5.6.1"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^27.5.1","husky":"^7.0.0","tslib":"^2.3.1","eslint":"^8.11.0","rollup":"^2.70.1","ts-jest":"^27.1.4","typedoc":"^0.22.15","prettier":"2.6.0","size-limit":"^7.0.8","typescript":"^4.5.5","@types/jest":"^27.4.1","lint-staged":"^12.3.7","mock-socket":"^9.1.4","axios-mock-adapter":"^1.20.0","eslint-plugin-import":"^2.25.4","prettier-plugin-jsdoc":"^0.3.38","@rollup/plugin-commonjs":"^22.0.0","typedoc-plugin-markdown":"^3.12.1","@microsoft/api-extractor":"^7.19.5","@microsoft/api-documenter":"^7.16.0","@typescript-eslint/parser":"^5.16.0","rollup-plugin-typescript2":"^0.31.2","@size-limit/preset-big-lib":"^7.0.8","@rollup/plugin-node-resolve":"^13.3.0","eslint-plugin-unused-imports":"^2.0.0","@typescript-eslint/eslint-plugin":"^5.16.0"},"_npmOperationalInternal":{"tmp":"tmp/alchemy-sdk_2.0.0-beta.0_1658514946253_0.9955033787610801","host":"s3://npm-registry-packages"}}},"time":{"created":"2022-06-06T21:57:53.643Z","modified":"2026-06-03T01:44:06.565Z","1.0.0":"2022-06-06T21:57:53.902Z","1.0.1":"2022-06-07T14:17:37.768Z","1.0.2":"2022-06-13T21:45:34.974Z","1.0.3":"2022-06-14T20:06:58.467Z","1.0.4":"2022-06-17T00:09:30.166Z","1.0.4-beta":"2022-06-24T16:40:07.293Z","1.0.4-beta2":"2022-06-24T16:54:49.503Z","1.0.4-beta3":"2022-06-24T19:19:25.561Z","1.0.5-beta1":"2022-06-30T22:00:06.546Z","1.0.5":"2022-06-30T22:04:47.148Z","1.0.6":"2022-06-30T22:34:29.734Z","1.0.7":"2022-07-09T21:21:39.135Z","1.0.8":"2022-07-09T21:38:08.842Z","1.1.0-beta":"2022-07-14T22:19:35.629Z","1.1.0":"2022-07-14T22:24:41.404Z","1.1.1":"2022-07-14T22:31:43.166Z","1.2.0-beta.0":"2022-07-14T22:42:37.186Z","1.2.0":"2022-07-22T17:29:34.600Z","2.0.0-beta.0":"2022-07-22T18:35:46.528Z"},"bugs":{"url":"https://github.com/alchemyplatform/alchemy-sdk-js/issues"},"author":{"name":"Alchemy"},"license":"MIT","homepage":"https://github.com/alchemyplatform/alchemy-sdk-js#readme","repository":{"url":"git+https://github.com/alchemyplatform/alchemy-sdk-js.git","type":"git"},"description":"Extended Ethers.js SDK for Alchemy APIs","maintainers":[{"email":"accounts@alchemy.com","name":"alchemy-team"}],"readme":"","readmeFilename":""}