{"_id":"@blowfishxyz/blocklist","_rev":"13-9249da80778e8af2911c6c42b959818e","name":"@blowfishxyz/blocklist","dist-tags":{"latest":"0.0.11"},"versions":{"0.0.1":{"name":"@blowfishxyz/blocklist","version":"0.0.1","keywords":[],"author":{"name":"Blowfish team","email":"contact@blowfish.xyz"},"license":"ISC","_id":"@blowfishxyz/blocklist@0.0.1","maintainers":[{"name":"sevazhidkov-blowfish","email":"seva@blowfish.xyz"},{"name":"kimpers","email":"hi@kimpers.com"}],"dist":{"shasum":"c180fc587adcf4db1de5cd62c523726d082feb1b","tarball":"https://registry.npmjs.org/@blowfishxyz/blocklist/-/blocklist-0.0.1.tgz","fileCount":9,"integrity":"sha512-Wpe8BDObMtuNZWjsy7CwdlPH8Y7fmi2Lsqy5y7+BxEX17Z03RReUC/wJHLZM1xSE0tcyLYnPziBu9nxtLiDNPw==","signatures":[{"sig":"MEQCIGV1J6jQZnMFaE07cylrvK/wYdUFyqkYwyeovP21vChkAiAp1nwK2nTD+NA7tz0ybOpcTQL6amTUbmBZSc4lGyuCzA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":22181,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj5PkuACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoypQ/+P17PQBaUK+RtvGxj5s6SxL4nG5APvKOLBm/fktIAZo5Mp3R6\r\nLTuqdUvxh3cbeO5CzY/GPlSqmw2WVb947hxzhDmOgmU5IH4zCiJ53mR9KHJ9\r\ntY5HZKAAn18JwbF2d6P3xRZpIdgQ1cRVrvsbW19+2EWbisC72raXK09zItJ2\r\nkdUaNxyB1VEgefjEG1f9jSpp+uH4nVEsLNRcDFXVsRSWpqQczac534XXXg/N\r\nWNrrPWXGuR4uSLolZvPovz2SK/VuyPEDYmeVaRLAwmUO51R5apcfPSM9l7rg\r\nc45efIpWQKdadBJ7zDST1VhLGilbhUY8TeITij6QYpkE77eBhuwzCzxFhq3R\r\naIesLrILOZ7nozFfVlWVOr9P8/oIdhkWaBZjj2ibOScGkZosmMsGngcwS6sv\r\nr+JqIUJwyYNWKFF9eLTZ1oyfnQXxEv2/4bmKGTPB9zuWvw93R3yqz1Z7cabB\r\nfb33v607Z1aCV/FXfz/01p94kvH1RIRJedxHfQeanrneUCVkNMsIX58x8lyg\r\nMi+zaj8UZVWjcnEQ9MmyPpyYDkrRILSBcf8wmPqU7erz83q2ItISfZK7EWpd\r\n0KuDO/GzGxmVxXOfmsdb91bURmoDkJRtw0Cx8gB+xUzvWS0s02VsqWtx30yh\r\nCMJizPY1REnraV0Od5T4Lq1b3YciUNP+GRI=\r\n=mwLq\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"d55224c9e93ffba580c8dba0ca56e9272dc2978b","scripts":{"lint":"npm run lint:eslint && npm run lint:prettier:check","test":"jest","build":"tsup src/index.ts --format cjs,esm --dts --clean","watch":"npm run build -- --watch src","prepare":"npm run build","lint:eslint":"eslint \"{src,test}/**/*.{ts,tsx}\"","lint:prettier":"prettier --write \"{src,test}/**/*.{ts,tsx}\"","prepublishOnly":"npm run build","lint:prettier:check":"prettier --check \"{src,test}/**/*.{ts,tsx}\""},"_npmUser":{"name":"sevazhidkov-blowfish","email":"seva@blowfish.xyz"},"_npmVersion":"8.5.5","description":"Fetch and execute lookups on Blowfish blocklists","directories":{},"_nodeVersion":"16.15.0","browserslist":["defaults","not IE 11","maintained node versions"],"dependencies":{"sha1":"^1.1.1","whatwg-url":"^12.0.0","cross-fetch":"^3.1.5"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.3.1","tsup":"^6.5.0","eslint":"^8.32.0","ts-jest":"^29.0.5","prettier":"^2.8.3","typescript":"^4.9.4","@types/jest":"^29.2.5","@types/node":"^18.11.18","@types/sha1":"^1.1.3","@types/whatwg-url":"^11.0.0","@typescript-eslint/parser":"^5.48.1","@typescript-eslint/eslint-plugin":"^5.48.1"},"_npmOperationalInternal":{"tmp":"tmp/blocklist_0.0.1_1675950381994_0.17038580246630985","host":"s3://npm-registry-packages"}},"0.0.2":{"name":"@blowfishxyz/blocklist","version":"0.0.2","keywords":[],"author":{"name":"Blowfish team","email":"contact@blowfish.xyz"},"license":"ISC","_id":"@blowfishxyz/blocklist@0.0.2","maintainers":[{"name":"sevazhidkov-blowfish","email":"seva@blowfish.xyz"},{"name":"kimpers","email":"hi@kimpers.com"}],"dist":{"shasum":"d5955a48cc6bd796aa47e6663f8ed9040132c270","tarball":"https://registry.npmjs.org/@blowfishxyz/blocklist/-/blocklist-0.0.2.tgz","fileCount":9,"integrity":"sha512-XF0OUAKjV4ecWC4eKMNcz27m7qir7OEfNQWGAUu+wqc2YG3yjFb0dmgE0xBh3sosCkbnYlhUFFxaFOan8WriSg==","signatures":[{"sig":"MEYCIQCaxcN1U836in+uWj7KWQx+p49qqeZ9mWLP1cICsb/xHgIhAOuVx6J+DcTRRltn08SirfJqd1xhRWrLtkoQzBJmaK8/","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":22019,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj5lpUACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoqQQ//dfRcXjL1pkgohsL/GRUeuDRLdadgJ4gonniEs/VJHVw02xoa\r\nkTzvfIOFo2XWpJa3VFF6aNPU6gJMyleZN8K1Z0XCCYlelWDWc8XLM8h7dCAb\r\nd0MY2HaflqVI+N4IBYbbumpb7Mon7l10H0GapcoY8RgKf1tHfcyoqzOlRoZw\r\ngySf3bQabVSen2sQp+mVy6jjZDmUmIsfuZPqhr1BBQRupc6DEtbaLSCq2O5x\r\nO5Ckvhel2SXKxczMHqoD/g7hs7IOCH3qi9ncUkFwO0xvrxLf8qor5hLLXMPd\r\nkegwYNMDD0xPW0F82ZCgUP+2HBgU23XFPVihrSXXyo+FIPug5AaSMJO+nwhB\r\nnhaMeiaDkaTdYgdb1Te0EelUACubaZQGc0gWODN08lSbsNw9XJqFE8t/Dxsu\r\nhVJj4Kpn4ZiCBOszzEHko6Y7LZaXw71ATU4KWfFBPWc38zGMc+JQebtmmCzh\r\n7FHaCCVqYd4bZ4ettdUMpYmLxd89++blv3tlDR2SlzzgwESX2VT1rn+O3lKj\r\nx05izIlTrDEf/blfUujGHd3fzD74hty5H2o0GPqLivvie/WSD0VxVYF+iiVr\r\nnfrH/0qKThHiqFjUxO/i0iEQZ6fflLqUvYuocVguaIqPka4y5FqWHjlU+AmD\r\nVh8tOf0LqUc21TDEVdhOdtdwS/D9KvQaPho=\r\n=wdIt\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"b55abe64cb2fca4f61d68587660c5baa36dff299","scripts":{"lint":"npm run lint:eslint && npm run lint:prettier:check","test":"jest","build":"tsup src/index.ts --format cjs,esm --dts --clean","watch":"npm run build -- --watch src","prepare":"npm run build","lint:eslint":"eslint \"{src,test}/**/*.{ts,tsx}\"","lint:prettier":"prettier --write \"{src,test}/**/*.{ts,tsx}\"","prepublishOnly":"npm run build","lint:prettier:check":"prettier --check \"{src,test}/**/*.{ts,tsx}\""},"_npmUser":{"name":"sevazhidkov-blowfish","email":"seva@blowfish.xyz"},"_npmVersion":"8.5.5","description":"Fetch and execute lookups on Blowfish blocklists","directories":{},"_nodeVersion":"16.15.0","browserslist":["defaults","not IE 11","maintained node versions"],"dependencies":{"sha1":"^1.1.1","cross-fetch":"^3.1.5"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.3.1","tsup":"^6.5.0","eslint":"^8.32.0","ts-jest":"^29.0.5","prettier":"^2.8.3","typescript":"^4.9.4","@types/jest":"^29.2.5","@types/node":"^18.11.18","@types/sha1":"^1.1.3","@types/whatwg-url":"^11.0.0","@typescript-eslint/parser":"^5.48.1","@typescript-eslint/eslint-plugin":"^5.48.1"},"_npmOperationalInternal":{"tmp":"tmp/blocklist_0.0.2_1676040788502_0.4047561103644737","host":"s3://npm-registry-packages"}},"0.0.3":{"name":"@blowfishxyz/blocklist","version":"0.0.3","keywords":[],"author":{"name":"Blowfish team","email":"contact@blowfish.xyz"},"license":"ISC","_id":"@blowfishxyz/blocklist@0.0.3","maintainers":[{"name":"sevazhidkov-blowfish","email":"seva@blowfish.xyz"},{"name":"kimpers","email":"hi@kimpers.com"}],"dist":{"shasum":"9cdaf5c81fcec7b220a42bfa0de099fe7cb68e1a","tarball":"https://registry.npmjs.org/@blowfishxyz/blocklist/-/blocklist-0.0.3.tgz","fileCount":9,"integrity":"sha512-LRSRWgMuQ5rL7ZwuRzicd3gYJ95WeWtKx8B8dv+vWPnela1S6EVKXbmaGO2U+gwPZHLr0NQz1JECG5ky1mftgw==","signatures":[{"sig":"MEQCIGZ1rFbC58BBlFFARNBbBT3+GfIhW8M6mhkfAWvyyeG+AiBJxQWbZ7RnGChK9cTwFIjvTp6SusBC8mjF4hE4fQC4+g==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":22045,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj7BmfACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpLxg/9FYp6cs0yqcnFpyq4szU7kfOhKNeei8ZLZ+GVr0NnReEM2E57\r\nzhmnkz/NAxEEWVjPz2h+9iPAKHN6U1NTy33zEdKg5Ifmyn+zmMYVY81qvSL/\r\nZlxRMw/38m2cfrOe/f1sTW120ZpacPXhLlG0c0+RZjAvtteHPxZDBUfDPgp9\r\nxodeoYa0Ews72YxFkYV/R8T5AZ377TRKDirgOBBzfd1CtDugXhAR7R93V5Ac\r\n4WOBFlCuX9RLrEgPfwgdIsynIRIrIaBIN4i2AZzFsmOr8du9aQMVcprAgcNI\r\n8zXqC3paZL9EPfZVE3CLqmYAkQRXAxMdIOsDJOR51nriMEt8NPepX0AKLGqx\r\nfbXbQsKvVANcRKwXyJfu1IVthgJ+/JUluNpIrq7XOhqh7vY6oJlLjQjfdTAp\r\nbpmMa+F8DjtgTJwXx8lSyjBq91xlwfXlRtPg12rzu/ZcIcmWCS6cG/sSzHcb\r\nLl31frSOWjdRZAh1xL1ROKERsEApV/ysZe1iavGTARTUZDBSFg2pBwQenArv\r\ns2of8XB/7vxqxiF6TrvKU0a8jkkUiIZV8iI2M2d8UuAjVD4omx1dWnf1bL39\r\n/EvwxTZ1NSkLBLXCdhI92RmWhsbg+xkJJ0Yfz9FcLqsFwzXfG6s8MMd1SWBF\r\nLk7BvqxV9BknQLX4VkN5JauPXovAk18lFbI=\r\n=RrWy\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"2a2fbe349e7ec87be89f9ee2d294d72607718208","scripts":{"lint":"npm run lint:eslint && npm run lint:prettier:check","test":"jest","build":"tsup src/index.ts --format cjs,esm --dts --clean","watch":"npm run build -- --watch src","prepare":"npm run build","lint:eslint":"eslint \"{src,test}/**/*.{ts,tsx}\"","lint:prettier":"prettier --write \"{src,test}/**/*.{ts,tsx}\"","prepublishOnly":"npm run build","lint:prettier:check":"prettier --check \"{src,test}/**/*.{ts,tsx}\""},"_npmUser":{"name":"sevazhidkov-blowfish","email":"seva@blowfish.xyz"},"_npmVersion":"8.5.5","description":"Fetch and execute lookups on Blowfish blocklists","directories":{},"_nodeVersion":"16.15.0","browserslist":["defaults","not IE 11","maintained node versions"],"dependencies":{"sha1":"^1.1.1","cross-fetch":"^3.1.5"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.3.1","tsup":"^6.5.0","eslint":"^8.32.0","ts-jest":"^29.0.5","prettier":"^2.8.3","typescript":"^4.9.4","@types/jest":"^29.2.5","@types/node":"^18.11.18","@types/sha1":"^1.1.3","@types/whatwg-url":"^11.0.0","@typescript-eslint/parser":"^5.48.1","@typescript-eslint/eslint-plugin":"^5.48.1"},"_npmOperationalInternal":{"tmp":"tmp/blocklist_0.0.3_1676417438973_0.223724552180256","host":"s3://npm-registry-packages"}},"0.0.4":{"name":"@blowfishxyz/blocklist","version":"0.0.4","keywords":[],"author":{"name":"Blowfish team","email":"contact@blowfish.xyz"},"license":"ISC","_id":"@blowfishxyz/blocklist@0.0.4","maintainers":[{"name":"sevazhidkov-blowfish","email":"seva@blowfish.xyz"},{"name":"kimpers","email":"hi@kimpers.com"}],"dist":{"shasum":"f4281d0bf16f9df1fe83a196a9601d7e5a67d204","tarball":"https://registry.npmjs.org/@blowfishxyz/blocklist/-/blocklist-0.0.4.tgz","fileCount":10,"integrity":"sha512-ncPEk9JVPMaIvyVUm2Um2VeMLlKtPvnlwJ7ikgvrWU+4Vz5ZeAybvjwCNueXSlqbUrmdOOZOOlCoi8YqXM80FA==","signatures":[{"sig":"MEQCIB5QD35J/V1/slLLzJCElBl1d8IMY4kkFJhTg7Hkvt6BAiBvrswfAK38WEHFhPBZoa+5DqFrQpPv9jq+JjtQYnV2Ow==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":26524,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkQO3cACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmo2XQ//RZJpVPoWXimq6EHIvrXwSiZfPahnPLah9MwxBwutptVmRucp\r\n8tchjM1K3KxEoiTNNI1uZz/lx7jrClsh60iJzrAoyomfh84h8buN+M30nI9n\r\nUGk48+yrOWOZbkk5AXhomFkExidx7X1r+ZYFVPdBT9D88kefXnM7a8iTQXjP\r\nyTgraKAF1E9ZLdqwUry5PjFloVasG3TIH2ReniquC11v7D/JirJXznjr2E+H\r\nDYdXawcEgdKGWjm4ItgK0t7/RH2jeJJQlYowwOgaJiIIUE3dTZ6gDyJq0s/U\r\nXGoN0BFfjkHfeLk/Z6322EPwvS03pKb3AjOF/jWJJ6sdTNiMHlNVS9MiZK8H\r\no6g42uR5PNBW7VqCIowjkCCQwV99ObQ2ciZZuU+RGfdieLXAmBNgNay7JstR\r\nm29vrV1XnFFj7yJ9/W4hpYH/G/RJv2td1/QZ6keDZElutI2a81Xo7RRJTAJv\r\nxHF1mhhwtWW+nRxdsTf/1wdUHJzz5hv9fpnCDBPe+JSDgax4WfBKWSVBdvHD\r\n+mZgW6tNd5wTGSwKT5U35SYXAM0HWEFroe3+z3j+jByUt5e7J3AB8nzLvNIm\r\nd1BvQNdiuf5fJZ6zuWJyTA/bqlsOdN5xNHork6UxXYDPXxeLpCZ/ze2uiv4/\r\nzN3vb/Gk9MtpDBuHcsaXnG+l13qmLHFINSU=\r\n=KKQQ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/index.cjs","type":"module","_from":"file:blowfishxyz-blocklist-0.0.4.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"scripts":{"lint":"npm run lint:eslint && npm run lint:prettier:check","test":"jest","build":"tsup src/index.ts --format cjs,esm --dts --clean","watch":"npm run build -- --watch src","lint:eslint":"eslint \"{src,test}/**/*.{ts,tsx}\"","lint:prettier":"prettier --write \"{src,test}/**/*.{ts,tsx}\"","lint:prettier:check":"prettier --check \"{src,test}/**/*.{ts,tsx}\""},"_npmUser":{"name":"sevazhidkov-blowfish","email":"seva@blowfish.xyz"},"_resolved":"/private/var/folders/g6/lpjzb4lx6s7cb6b2y9p3k2lh0000gn/T/49874a0e6a8296a51a1868e7d5c002d6/blowfishxyz-blocklist-0.0.4.tgz","_integrity":"sha512-ncPEk9JVPMaIvyVUm2Um2VeMLlKtPvnlwJ7ikgvrWU+4Vz5ZeAybvjwCNueXSlqbUrmdOOZOOlCoi8YqXM80FA==","_npmVersion":"9.5.0","description":"Fetch and execute lookups on Blowfish blocklists","directories":{},"_nodeVersion":"18.14.2","browserslist":["defaults","not IE 11","maintained node versions"],"dependencies":{"sha1":"^1.1.1","cross-fetch":"^3.1.5"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.3.1","tsup":"^6.5.0","eslint":"^8.32.0","ts-jest":"^29.0.5","prettier":"^2.8.3","typescript":"^4.9.4","@types/jest":"^29.2.5","@types/node":"^18.11.18","@types/sha1":"^1.1.3","@types/whatwg-url":"^11.0.0","@typescript-eslint/parser":"^5.48.1","@typescript-eslint/eslint-plugin":"^5.48.1"},"_npmOperationalInternal":{"tmp":"tmp/blocklist_0.0.4_1681976795910_0.5217560628925351","host":"s3://npm-registry-packages"}},"0.0.5":{"name":"@blowfishxyz/blocklist","version":"0.0.5","keywords":[],"author":{"name":"Blowfish team","email":"contact@blowfish.xyz"},"license":"ISC","_id":"@blowfishxyz/blocklist@0.0.5","maintainers":[{"name":"sevazhidkov-blowfish","email":"seva@blowfish.xyz"},{"name":"kimpers","email":"hi@kimpers.com"}],"dist":{"shasum":"dc899ddec4e39260753cd8e565b1e73e366c60ad","tarball":"https://registry.npmjs.org/@blowfishxyz/blocklist/-/blocklist-0.0.5.tgz","fileCount":10,"integrity":"sha512-Y2tqkvaT9XpCtrAow8yYo3nMUZTy3Nlhz+PmbRaF9DQrNeSR1bH/DCOpvpCBKcRvtq3vq9Uv4KOPunptxiWqdw==","signatures":[{"sig":"MEQCIFtCDFvwLt+4ck0TOtqT/OoD+hImIDCOle04UtP/5HZcAiA4Ti6ju4zAzkiNnQE2InkcwIXn1l7pEd4yo0R1NOcd0g==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":27488,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkSBigACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmou4g//XtBIEhWs7hGX3BS3Sgm+FgHlOw6axgrzs9U5Ia1+P85jhUzt\r\njpj/cXPQ7M0X1jb68I2/6zwg28mBID2QO5VkMUMEGxcc+DmQScedHPvRIGJU\r\noNWLOk33bI5Z8nEfPB16XFp5TJHx7zdynEZlTE3dUdlyvVxaoBbW0y/JdKw9\r\nb+jhapW2KpyCb1fwRfHZ57PoKomMsTo9PfFankRBwY2Iq8UaV9T/4SA9FLPi\r\n1Oaq5C5KgHIR/zW7mBYi0E6SrUtjBrwz2EMPFF+y8/RZ/89KYyzAM8K702kk\r\nItDBTRWdeAt4uSN567ISD/Zumv4HTECHp0Que6qJyU+sHIQV117T1MDAdkQT\r\n7emUI2TPx4tq6G67VJfiU8Wn85qSw32ZD+FWvW0jNNb6qzqKfPL5kTvWx/4J\r\nnzQyPIyjy8oPN5oAls2tiFBcc/QnWSDW2bcn+uT38EKZOVrfCpI6fE9FbGVe\r\nleh+2xRjncF/Ho1NSbhKkN6lShIpyAblbV/QScij/BI9g4OWrcTEMMgWIYYl\r\nbcCVAmrqxnif6xxD048swV3FkfS1zJj+qwvRIQ9Pb9h6+jHYdH88l6pcPf0Q\r\ni2z7vD9pVNGtetzREee/D3uJsSyGKWS1TVTS1HrpwpZuGP7JZBhb3oIFjw2Q\r\nuUnZWsY3F/kwf5u2P7+WG7QxYMH8R/WSwTE=\r\n=j75k\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/index.cjs","type":"module","_from":"file:blowfishxyz-blocklist-0.0.5.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"scripts":{"lint":"npm run lint:eslint && npm run lint:prettier:check","test":"jest","build":"tsup src/index.ts --format cjs,esm --dts --clean","watch":"npm run build -- --watch src","lint:eslint":"eslint \"{src,test}/**/*.{ts,tsx}\"","lint:prettier":"prettier --write \"{src,test}/**/*.{ts,tsx}\"","lint:prettier:check":"prettier --check \"{src,test}/**/*.{ts,tsx}\""},"_npmUser":{"name":"sevazhidkov-blowfish","email":"seva@blowfish.xyz"},"_resolved":"/private/var/folders/g6/lpjzb4lx6s7cb6b2y9p3k2lh0000gn/T/5b4ea22e310275661e872b20273b910f/blowfishxyz-blocklist-0.0.5.tgz","_integrity":"sha512-Y2tqkvaT9XpCtrAow8yYo3nMUZTy3Nlhz+PmbRaF9DQrNeSR1bH/DCOpvpCBKcRvtq3vq9Uv4KOPunptxiWqdw==","_npmVersion":"9.5.0","description":"Fetch and execute lookups on Blowfish blocklists","directories":{},"_nodeVersion":"18.14.2","browserslist":["defaults","not IE 11","maintained node versions"],"dependencies":{"sha1":"^1.1.1","cross-fetch":"^3.1.5"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.3.1","tsup":"^6.5.0","eslint":"^8.32.0","ts-jest":"^29.0.5","prettier":"^2.8.3","typescript":"^4.9.4","@types/jest":"^29.2.5","@types/node":"^18.11.18","@types/sha1":"^1.1.3","@types/whatwg-url":"^11.0.0","@typescript-eslint/parser":"^5.48.1","@typescript-eslint/eslint-plugin":"^5.48.1"},"_npmOperationalInternal":{"tmp":"tmp/blocklist_0.0.5_1682446495923_0.6327536260056918","host":"s3://npm-registry-packages"}},"0.0.6":{"name":"@blowfishxyz/blocklist","version":"0.0.6","keywords":[],"author":{"name":"Blowfish team","email":"contact@blowfish.xyz"},"license":"ISC","_id":"@blowfishxyz/blocklist@0.0.6","maintainers":[{"name":"sevazhidkov-blowfish","email":"seva@blowfish.xyz"},{"name":"kimpers","email":"hi@kimpers.com"}],"dist":{"shasum":"d948b83108d814f8fbd86a3175d5d6a71dc06e9e","tarball":"https://registry.npmjs.org/@blowfishxyz/blocklist/-/blocklist-0.0.6.tgz","fileCount":10,"integrity":"sha512-HeeNp2t638F0mx59ImeZ0YpqENPQ9ba8QHq+mcaW4CzdUKWgFQG/LsaMIwg3YuAC0yundGNs0nlwKDboA9Kszg==","signatures":[{"sig":"MEQCIHGrG1estH3QQfWBWTIAX2hxNHvSsN468Q/ntdQV99EkAiAXjyY6r4cSHAxFpisUZ1McSZaOpRxdteM89uvBxD80yg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":27797},"main":"./dist/index.cjs","type":"module","_from":"file:blowfishxyz-blocklist-0.0.6.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"scripts":{"lint":"npm run lint:eslint && npm run lint:prettier:check","test":"jest","build":"tsup src/index.ts --format cjs,esm --dts --clean","watch":"npm run build -- --watch src","lint:eslint":"eslint \"{src,test}/**/*.{ts,tsx}\"","lint:prettier":"prettier --write \"{src,test}/**/*.{ts,tsx}\"","lint:prettier:check":"prettier --check \"{src,test}/**/*.{ts,tsx}\""},"_npmUser":{"name":"sevazhidkov-blowfish","email":"seva@blowfish.xyz"},"_resolved":"/private/var/folders/g6/lpjzb4lx6s7cb6b2y9p3k2lh0000gn/T/923537aee3321996d4cb68640f5b6852/blowfishxyz-blocklist-0.0.6.tgz","_integrity":"sha512-HeeNp2t638F0mx59ImeZ0YpqENPQ9ba8QHq+mcaW4CzdUKWgFQG/LsaMIwg3YuAC0yundGNs0nlwKDboA9Kszg==","_npmVersion":"9.5.0","description":"Fetch and execute lookups on Blowfish blocklists","directories":{},"_nodeVersion":"18.14.2","browserslist":["defaults","not IE 11","maintained node versions"],"dependencies":{"sha1":"^1.1.1","buffer":"^6.0.3","cross-fetch":"^3.1.5"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.3.1","tsup":"^6.5.0","eslint":"^8.32.0","ts-jest":"^29.0.5","prettier":"^2.8.3","typescript":"^4.9.4","@types/jest":"^29.2.5","@types/node":"^18.11.18","@types/sha1":"^1.1.3","@types/whatwg-url":"^11.0.0","@typescript-eslint/parser":"^5.48.1","@typescript-eslint/eslint-plugin":"^5.48.1"},"_npmOperationalInternal":{"tmp":"tmp/blocklist_0.0.6_1684150618195_0.1623430147889493","host":"s3://npm-registry-packages"}},"0.0.7":{"name":"@blowfishxyz/blocklist","version":"0.0.7","keywords":[],"author":{"name":"Blowfish team","email":"contact@blowfish.xyz"},"license":"ISC","_id":"@blowfishxyz/blocklist@0.0.7","maintainers":[{"name":"metreniuk","email":"metreniuk@gmail.com"},{"name":"sevazhidkov-blowfish","email":"seva@blowfish.xyz"},{"name":"kimpers","email":"hi@kimpers.com"}],"dist":{"shasum":"48eb0ad949c7bb0effad31612f8bd8ba62d39663","tarball":"https://registry.npmjs.org/@blowfishxyz/blocklist/-/blocklist-0.0.7.tgz","fileCount":12,"integrity":"sha512-5+MW3raPVYPoeLOJe/hUmT0GzSQMxIBhgWnC5yweD5zTz6uBqgcaQ4KegsIXjd4bhtzNUUWdNlwTBqcu7PDrUQ==","signatures":[{"sig":"MEYCIQC5rsu2DOT7nn56+G91wNc/DXjrI2t3Q+oa1g7dNnG3vQIhAKSrwW+TbMzSuHQcq98J0G4evJ7u8dHDFBgkRvcWEDAU","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":47669},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"1513939879e015487dfe0b8a6c6d5fa65bdf8172","scripts":{"lint":"npm run lint:eslint && npm run lint:prettier:check","test":"jest","build":"tsup src/index.ts --format cjs,esm --dts --clean --env.NODE_ENV production","watch":"npm run build -- --watch src --env.NODE_ENV development","prepare":"npm run build","lint:eslint":"eslint \"{src,test}/**/*.{ts,tsx}\"","lint:prettier":"prettier --write \"{src,test}/**/*.{ts,tsx}\"","prepublishOnly":"npm run build","lint:prettier:check":"prettier --check \"{src,test}/**/*.{ts,tsx}\""},"_npmUser":{"name":"metreniuk","email":"metreniuk@gmail.com"},"_npmVersion":"9.5.1","description":"Fetch and execute lookups on Blowfish blocklists","directories":{},"_nodeVersion":"18.16.0","browserslist":["defaults","not IE 11","maintained node versions"],"dependencies":{"sha1":"^1.1.1","buffer":"^6.0.3","cross-fetch":"^3.1.5","@blowfishxyz/api-client":"0.1.3"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.3.1","tsup":"^6.5.0","dotenv":"^16.3.1","eslint":"^8.32.0","ts-jest":"^29.0.5","prettier":"^2.8.3","typescript":"^4.9.4","@types/jest":"^29.2.5","@types/node":"^18.11.18","@types/sha1":"^1.1.3","@types/whatwg-url":"^11.0.0","@typescript-eslint/parser":"^5.48.1","@typescript-eslint/eslint-plugin":"^5.48.1"},"_npmOperationalInternal":{"tmp":"tmp/blocklist_0.0.7_1697617930500_0.8194045750881127","host":"s3://npm-registry-packages"}},"0.0.8":{"name":"@blowfishxyz/blocklist","version":"0.0.8","keywords":[],"author":{"name":"Blowfish team","email":"contact@blowfish.xyz"},"license":"ISC","_id":"@blowfishxyz/blocklist@0.0.8","maintainers":[{"name":"metreniuk","email":"metreniuk@gmail.com"},{"name":"sevazhidkov-blowfish","email":"seva@blowfish.xyz"},{"name":"kimpers","email":"hi@kimpers.com"}],"dist":{"shasum":"e4c684dac173a0cd54c5d98b7dde482b355b7ce5","tarball":"https://registry.npmjs.org/@blowfishxyz/blocklist/-/blocklist-0.0.8.tgz","fileCount":12,"integrity":"sha512-tjw21rzG+nNxyC/Vmm7zsKvKfwkT8qQBCAW3yyQRRpesC1RXAWKoCorwhphyFmaWWrC2+6EM1VwzNYIV+kBAnA==","signatures":[{"sig":"MEUCIA1DoKuu8r5KFZVtyaBuHXFHNd8uBbbCVdQ+pWXX9LKrAiEA4zOIyVeoJaHnW8Mm2R/RuFK4Ht4FpeSot+fcNQv7wmU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":47849},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"64cc3922a86f7f2767041d2e90c08aea67012f84","scripts":{"lint":"npm run lint:eslint && npm run lint:prettier:check","test":"jest","build":"tsup src/index.ts --format cjs,esm --dts --clean --env.NODE_ENV production","watch":"npm run build -- --watch src --env.NODE_ENV development","prepare":"npm run build","lint:eslint":"eslint \"{src,test}/**/*.{ts,tsx}\"","lint:prettier":"prettier --write \"{src,test}/**/*.{ts,tsx}\"","prepublishOnly":"npm run build","lint:prettier:check":"prettier --check \"{src,test}/**/*.{ts,tsx}\""},"_npmUser":{"name":"metreniuk","email":"metreniuk@gmail.com"},"_npmVersion":"10.2.3","description":"Fetch and execute lookups on Blowfish blocklists","directories":{},"_nodeVersion":"18.19.0","browserslist":["defaults","not IE 11","maintained node versions"],"dependencies":{"sha1":"^1.1.1","buffer":"^6.0.3","cross-fetch":"^3.1.5","@blowfishxyz/api-client":"0.1.3"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.3.1","tsup":"^6.5.0","dotenv":"^16.3.1","eslint":"^8.32.0","ts-jest":"^29.0.5","prettier":"^2.8.3","typescript":"^4.9.4","@types/jest":"^29.2.5","@types/node":"^18.11.18","@types/sha1":"^1.1.3","@types/whatwg-url":"^11.0.0","@typescript-eslint/parser":"^5.48.1","@typescript-eslint/eslint-plugin":"^5.48.1"},"_npmOperationalInternal":{"tmp":"tmp/blocklist_0.0.8_1713866832576_0.6964929186820039","host":"s3://npm-registry-packages"}},"0.0.9":{"name":"@blowfishxyz/blocklist","version":"0.0.9","keywords":[],"author":{"name":"Blowfish team","email":"contact@blowfish.xyz"},"license":"ISC","_id":"@blowfishxyz/blocklist@0.0.9","maintainers":[{"name":"kimpers","email":"hi@kimpers.com"},{"name":"metreniuk","email":"metreniuk@gmail.com"},{"name":"chriskvl","email":"covali.christian@gmail.com"}],"dist":{"shasum":"cf34f6e39575b7854b792046613e0ae776c23130","tarball":"https://registry.npmjs.org/@blowfishxyz/blocklist/-/blocklist-0.0.9.tgz","fileCount":12,"integrity":"sha512-f2Ikk7Pisu4PGPHej6YcQtWcUf4UQ5TJRgFy3krzHdZtsOYjUb9VoIDW7YTgx/fH23REygvtc9JcvEWpgVAYOA==","signatures":[{"sig":"MEUCIQD06H0wezDXpAtKau9FY0C0YZuORmsR888qTMf3pJ+tvwIgKHwfTSIPigxh+51737IzoGGcJi6l+ffts4VG77OllHg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":48293},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"6f62a747276ca2a3eadc7205584f845cd9c588d0","scripts":{"lint":"npm run lint:eslint && npm run lint:prettier:check","test":"jest","build":"tsup src/index.ts --format cjs,esm --dts --clean --env.NODE_ENV production","watch":"npm run build -- --watch src --env.NODE_ENV development","prepare":"npm run build","lint:eslint":"eslint \"{src,test}/**/*.{ts,tsx}\"","lint:prettier":"prettier --write \"{src,test}/**/*.{ts,tsx}\"","prepublishOnly":"npm run build","lint:prettier:check":"prettier --check \"{src,test}/**/*.{ts,tsx}\""},"_npmUser":{"name":"metreniuk","actor":{"name":"metreniuk","type":"user","email":"metreniuk@gmail.com"},"email":"metreniuk@gmail.com"},"_npmVersion":"10.9.2","description":"Fetch and execute lookups on Blowfish blocklists","directories":{},"_nodeVersion":"22.16.0","browserslist":["defaults","not IE 11","maintained node versions"],"dependencies":{"sha1":"^1.1.1","buffer":"^6.0.3","cross-fetch":"^3.1.5","@blowfishxyz/api-client":"0.1.3"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.3.1","tsup":"^6.5.0","dotenv":"^16.3.1","eslint":"^8.32.0","ts-jest":"^29.0.5","prettier":"^2.8.3","typescript":"^4.9.4","@types/jest":"^29.2.5","@types/node":"^18.11.18","@types/sha1":"^1.1.3","@types/whatwg-url":"^11.0.0","@typescript-eslint/parser":"^5.48.1","@typescript-eslint/eslint-plugin":"^5.48.1"},"_npmOperationalInternal":{"tmp":"tmp/blocklist_0.0.9_1751281157004_0.3051741423931591","host":"s3://npm-registry-packages-npm-production"}},"0.0.10":{"name":"@blowfishxyz/blocklist","version":"0.0.10","keywords":[],"author":{"name":"Blowfish team","email":"contact@blowfish.xyz"},"license":"ISC","_id":"@blowfishxyz/blocklist@0.0.10","maintainers":[{"name":"kimpers","email":"hi@kimpers.com"},{"name":"metreniuk","email":"metreniuk@gmail.com"},{"name":"chriskvl","email":"covali.christian@gmail.com"}],"dist":{"shasum":"1f343ddbc0cbabc57178171ad17c261df8837c21","tarball":"https://registry.npmjs.org/@blowfishxyz/blocklist/-/blocklist-0.0.10.tgz","fileCount":10,"integrity":"sha512-BUPMM4RKEnhebiIaLn17IM4NuxFVObO8UlC4egX4M5w64LZ9/+2Ovg51Wuxm1N0kCertpVyiqZ8IpOFx2y0gEQ==","signatures":[{"sig":"MEYCIQDL5G22iRbIteM3TU8g2wkmzxCGVfRUNKoEOzDfAJxA6gIhAPFS66E78qMZDpc60yVK3ZNRZk3SlFjHQIchgYHhXMip","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":30304},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"312ede8f608d01b67379165d86a5e983252e1167","scripts":{"lint":"npm run lint:eslint && npm run lint:prettier:check","test":"jest","build":"tsup src/index.ts --format cjs,esm --dts --clean --env.NODE_ENV production","watch":"npm run build -- --watch src --env.NODE_ENV development","prepare":"npm run build","lint:eslint":"eslint \"{src,test}/**/*.{ts,tsx}\"","lint:prettier":"prettier --write \"{src,test}/**/*.{ts,tsx}\"","prepublishOnly":"npm run build","lint:prettier:check":"prettier --check \"{src,test}/**/*.{ts,tsx}\""},"_npmUser":{"name":"metreniuk","actor":{"name":"metreniuk","type":"user","email":"metreniuk@gmail.com"},"email":"metreniuk@gmail.com"},"_npmVersion":"10.9.2","description":"Fetch and execute lookups on Blowfish blocklists","directories":{},"_nodeVersion":"22.16.0","browserslist":["defaults","not IE 11","maintained node versions"],"dependencies":{"sha1":"^1.1.1","buffer":"^6.0.3","cross-fetch":"^3.1.5"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.3.1","tsup":"^6.5.0","dotenv":"^16.3.1","eslint":"^8.32.0","ts-jest":"^29.0.5","prettier":"^2.8.3","typescript":"^4.9.4","@types/jest":"^29.2.5","@types/node":"^18.11.18","@types/sha1":"^1.1.3","@types/whatwg-url":"^11.0.0","@typescript-eslint/parser":"^5.48.1","@typescript-eslint/eslint-plugin":"^5.48.1"},"_npmOperationalInternal":{"tmp":"tmp/blocklist_0.0.10_1751302277631_0.8748320811152372","host":"s3://npm-registry-packages-npm-production"}},"0.0.11":{"type":"module","name":"@blowfishxyz/blocklist","version":"0.0.11","description":"Fetch and execute lookups on Blowfish blocklists","main":"./dist/index.cjs","module":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"require":"./dist/index.cjs","import":"./dist/index.js","types":"./dist/index.d.ts"}},"browserslist":["defaults","not IE 11","maintained node versions"],"scripts":{"build":"tsup src/index.ts --format cjs,esm --dts --clean --env.NODE_ENV production","watch":"npm run build -- --watch src --env.NODE_ENV development","prepublishOnly":"npm run build","prepare":"npm run build","lint:prettier":"prettier --write \"{src,test}/**/*.{ts,tsx}\"","lint:prettier:check":"prettier --check \"{src,test}/**/*.{ts,tsx}\"","lint:eslint":"eslint \"{src,test}/**/*.{ts,tsx}\"","lint":"npm run lint:eslint && npm run lint:prettier:check","test":"jest"},"keywords":[],"author":{"name":"Blowfish team","email":"contact@blowfish.xyz"},"license":"ISC","devDependencies":{"@types/jest":"^29.2.5","@types/node":"^18.11.18","@types/sha1":"^1.1.3","@types/whatwg-url":"^11.0.0","@typescript-eslint/eslint-plugin":"^5.48.1","@typescript-eslint/parser":"^5.48.1","dotenv":"^16.3.1","eslint":"^8.32.0","jest":"^29.3.1","prettier":"^2.8.3","ts-jest":"^29.0.5","tsup":"^6.5.0","typescript":"^4.9.4"},"dependencies":{"buffer":"^6.0.3","cross-fetch":"^3.1.5","sha1":"^1.1.1"},"_id":"@blowfishxyz/blocklist@0.0.11","gitHead":"9546273c839dfa57b543f986f6369682a1eccd45","_nodeVersion":"24.7.0","_npmVersion":"11.5.1","dist":{"integrity":"sha512-59ycr2ecZoEX1aDegYKAqM9280FEcbjgd+h+qVzxSgY27J3eU2CSYVA0U7xm24mbYC3Q1+a+qN64s00xzwdQXw==","shasum":"1856cfba5391ece8ddc9319a951378099436fafc","tarball":"https://registry.npmjs.org/@blowfishxyz/blocklist/-/blocklist-0.0.11.tgz","fileCount":10,"unpackedSize":32005,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIHQEKM53IUWDTtwm9JDMH1sP6MBTSdb2zmcogTaXBJuKAiAknJ0/88+cN1jc9ydI/PSNvs9SC5PbOG4Pgs34/uNbTQ=="}]},"_npmUser":{"name":"metreniuk","email":"metreniuk@gmail.com"},"directories":{},"maintainers":[{"name":"kimpers","email":"hi@kimpers.com"},{"name":"metreniuk","email":"metreniuk@gmail.com"},{"name":"chriskvl","email":"covali.christian@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/blocklist_0.0.11_1770020943815_0.7743048514233761"},"_hasShrinkwrap":false}},"time":{"created":"2023-02-09T13:46:21.866Z","modified":"2026-02-02T08:29:04.089Z","0.0.1":"2023-02-09T13:46:22.145Z","0.0.2":"2023-02-10T14:53:08.669Z","0.0.3":"2023-02-14T23:30:39.079Z","0.0.4":"2023-04-20T07:46:36.082Z","0.0.5":"2023-04-25T18:14:56.060Z","0.0.6":"2023-05-15T11:36:58.393Z","0.0.7":"2023-10-18T08:32:10.679Z","0.0.8":"2024-04-23T10:07:12.751Z","0.0.9":"2025-06-30T10:59:17.170Z","0.0.10":"2025-06-30T16:51:17.850Z","0.0.11":"2026-02-02T08:29:03.943Z"},"author":{"name":"Blowfish team","email":"contact@blowfish.xyz"},"license":"ISC","keywords":[],"description":"Fetch and execute lookups on Blowfish blocklists","maintainers":[{"name":"kimpers","email":"hi@kimpers.com"},{"name":"metreniuk","email":"metreniuk@gmail.com"},{"name":"chriskvl","email":"covali.christian@gmail.com"}],"readme":"# Blowfish Local Blocklists\n\nThis is a Javascript/Typescript library that makes it easy to access the Blowfish Local Blocklist API: for example, to fetch the blocklist object from API, scan a domain against the blocklist and saved bloom filter.\n\nIt's designed to support React Native, Chrome Extension and Node.js environments.\n\n## Install\n\n```bash\nnpm install @blowfishxyz/blocklist\n```\n\nIt's also recommended for React Native apps to install `react-native-url-polyfill`.\n\n## Usage\n\nIn order to execute lookups, you need to fetch a **blocklist object** and **bloom filter**.\nAfter the first fetch, you should keep these objects updated. You can save the objects in a local database\n(for example, using local storage in Chrome extension).\n\nWe recommend updating it every 5 minutes.\n\n### Basic usage\n\n```javascript\nimport {\n  BlowfishLocalBlocklist,\n  ApiConfig,\n  BLOWFISH_API_BASE_URL,\n} from \"@blowfishxyz/blocklist\";\n\nconst apiConfig: ApiConfig = {\n  basePath: BLOWFISH_API_BASE_URL,\n  // It's highly encouraged to use a proxy server to not expose your API key on the client (see: https://docs.blowfish.xyz/docs/wallet-integration-guide#optional-proxy-server).\n  // When using a proxy server, replace basePath with your endpoint and set apiKey to `undefined`.\n  apiKey: \"you-api-key\",\n};\nconst blocklist = new BlowfishLocalBlocklist(apiConfig);\n\n// 1. Fetch the blocklist and persist it in the storage\nblocklist.fetchBlocklist();\n\n// 2. Re-refetch the blocklist every 5 minutes\nsetInterval(() => blocklist.fetchBlocklist(), 1000 * 60 * 5);\n\n// 3. Once you have a blocklist object and a bloom filter saved, you can execute lookups\nconst action = blocklist.scanDomain(\"https://scam-website.io\");\n\nif (action === Action.BLOCK) {\n  // block the domain\n}\n```\n\nYou can skip `apiKey` and pass custom `basePath` to route the query to your backend app or a proxy.\n\n### Bloom filter\n\nBlocklist object links to a bloom filter. However, bloom filter is a 700 KB file, so your app should only\nre-download it when nessesary.\n\nTo do that, we are tracking bloom filter's hash and re-fetching it if necessary.\n\nThen, we save the bloom filter object itself and its hash to the `storage`.\n\nWe don't update blocklist hash more often than every 24 hours.\n\n### Error handling\n\nFunctions that depend on API an/or network can return `null` when I/O errors are encountered.\n\nIf you would like to track errors, you can pass optional `reportError` callback to `BlowfishLocalBlocklist` constructor.\n\nIt could be called with an `Error` or with a string.\n\n## Guides\n\n### Browser extension\n\n1. Install Necessary Dependencies:\n\n```bash\nnpm install @blowfishxyz/blocklist webextension-polyfill\n```\n\n2. Create Blocklist Module:\n\n```typescript\n// src/blocklist.ts\nimport {\n  BlowfishLocalBlocklist,\n  BlowfishBlocklistStorageKey,\n  BlowfishBlocklistStorage,\n  BLOWFISH_API_BASE_URL,\n} from \"@blowfishxyz/blocklist\";\n\nconst storage: BlowfishBlocklistStorage = {\n  async getItem<T>(key: BlowfishBlocklistStorageKey) {\n    const storage = chrome.storage.local.get([key]);\n    return storage[key] as T | undefined;\n  },\n  async setItem(key: BlowfishBlocklistStorageKey, data: unknown) {\n    return chrome.storage.local.set({\n      [key]: data,\n    });\n  },\n};\n\nexport const blocklist = new BlowfishLocalBlocklist(\n  { basePath: BLOWFISH_API_BASE_URL, apiKey: undefined },\n  undefined,\n  storage\n);\nexport { Action } from \"@blowfishxyz/blocklist\";\n```\n\n3. Schedule Blocklist Updates:\n\n```typescript\n// src/background.ts\nimport Browser from \"webextension-polyfill\";\nimport { blocklist } from \"./blocklist\";\n\nBrowser.alarms.onAlarm.addListener((alarm) => {\n  if (alarm.name === \"refetch-blocklist\") {\n    blocklist.fetchBlocklist();\n  }\n});\n\nBrowser.alarms.create(\"refetch-blocklist\", {\n  periodInMinutes: 5,\n  delayInMinutes: 0,\n});\n```\n\n4. Domain Scanning:\n\n```typescript\n// src/content-script.ts\nimport Browser from \"webextension-polyfill\";\nimport { blocklist, Action } from \"./blocklist\";\n\nblocklist.scanDomain(window.location.href).then((action) => {\n  if (action === Action.BLOCK) {\n    Browser.runtime.sendMessage({\n      type: \"block-domain\",\n      host: window.location.hostname,\n      href: encodeURI(window.location.href),\n    });\n  }\n});\n```\n\n5. Blocked Domain Screen:\n\n```typescript\n// src/block-screen.tsx\nimport { blocklist } from \"./blocklist\";\n\nfunction proceedToBlockedDomainButtonClickHandler() {\n  blocklist.allowDomainLocally(window.location.href);\n}\n```\n\n### React Native\n\n1. Install Necessary Dependencies:\n\n```bash\nnpm install @blowfishxyz/blocklist react-native-async-storage react-native-background-timer react-native-url-polyfill\n```\n\n2. Create Blocklist Module:\n\n```typescript\n// src/blocklist.ts\nimport {\n  BlowfishLocalBlocklist,\n  BlowfishBlocklistStorageKey,\n  BlowfishBlocklistStorage,\n  BLOWFISH_API_BASE_URL,\n} from \"@blowfishxyz/blocklist\";\nimport AsyncStorage from \"@react-native-async-storage/async-storage\";\n\nconst storage: BlowfishBlocklistStorage = {\n  async getItem<T>(key: BlowfishBlocklistStorageKey): Promise<T | undefined> {\n    const data = await AsyncStorage.getItem(key);\n    return data ? (JSON.parse(data) as T) : undefined;\n  },\n  async setItem(\n    key: BlowfishBlocklistStorageKey,\n    data: unknown\n  ): Promise<void> {\n    await AsyncStorage.setItem(key, JSON.stringify(data));\n  },\n};\n\nexport const blocklist = new BlowfishLocalBlocklist(\n  { basePath: BLOWFISH_API_BASE_URL, apiKey: undefined },\n  undefined,\n  storage\n);\nexport { Action } from \"@blowfishxyz/blocklist\";\n```\n\n3. Schedule Blocklist Updates:\n\n```typescript\n// src/background.ts\nimport { blocklist } from \"./blocklist\";\nimport BackgroundTimer from \"react-native-background-timer\";\n\nlet intervalId;\n\nconst refetchBlocklist = () => {\n  blocklist.fetchBlocklist();\n};\nexport const startBlocklistRefetch = () => {\n  intervalId = BackgroundTimer.setInterval(refetchBlocklist, 5 * 60 * 60);\n};\n\nexport const stopBlocklistRefetch = () => {\n  BackgroundTimer.clearInterval(intervalId);\n};\n```\n\n4. Domain Scanning:\n\n```typescript\n// src/domainScanner.ts\nimport { blocklist, Action } from \"./blocklist\";\n\nconst scanCurrentDomain = async (url: string) => {\n  const action = await blocklist.scanDomain(url);\n  if (action === Action.BLOCK) {\n    // Handle domain blocking logic\n    console.warn(\"Blocked domain:\", url);\n  }\n};\n\nexport default scanCurrentDomain;\n```\n\n5. Blocked Domain Screen:\n\n```typescript\n// src/BlockScreen.tsx\nimport React from \"react\";\nimport { TouchableOpacity, Text } from \"react-native\";\nimport { blocklist } from \"./blocklist\";\n\nfunction proceedToBlockedDomainHandler(url: string) {\n  blocklist.allowDomainLocally(url);\n}\n\nconst BlockScreen: React.FC<{ url: string }> = ({ url }) => {\n  return (\n    <TouchableOpacity onPress={() => proceedToBlockedDomainHandler(url)}>\n      <Text>Proceed to Blocked Domain</Text>\n    </TouchableOpacity>\n  );\n};\n\nexport default BlockScreen;\n```\n\n## API Reference\n\n### `BlowfishLocalBlocklist`\n\n### Constructor arguments\n\n- `apiConfig: ApiConfig`\n  - `basePath: string`: the URL for the domain blocklist. You can use it to pass API requests to a proxy that sits between your users and Blowfish API.\n  - `apiKey: string | undefined`: the API key for the Blowfish API. Can be `undefined` when using a proxy.\n- `blocklistConfig: BlocklistConfig`\n  - `priorityBlockLists: PriorityBlockListsEnum[] | undefined`: Always block domain if it present on one of these lists, even if it's allow-listed on one of regular allow lists (ex: `PHANTOM`, `BLOWFISH`, `BLOWFISH_AUTOMATED`, `SOLFARE`, `PHISHFORT`, `SCAMSNIFFER`, `METAMASK`)\n  - `priorityAllowLists: PriorityAllowListsEnum[] | undefined`: Override domain blocking if domain is present on one of these lists, even if it's block-listed on of regular block lists (ex: `BLOWFISH`, `METAMASK`, `DEFILLAMA`)\n  - `blockLists: BlockListsEnum[] | undefined`: Override domain blocking if domain is present on one of these lists, even if it's block-listed on of regular block lists (ex: `PHANTOM`, `BLOWFISH`, `BLOWFISH_AUTOMATED`, `SOLFARE`, `PHISHFORT`, `SCAMSNIFFER`, `METAMASK`)\n  - `allowLists: AllowListsEnum[] | undefined`: Override domain blocking if domain is present on one of these lists, even if it's block-listed on of regular block lists (ex: `BLOWFISH`, `METAMASK`, `DEFILLAMA`)\n  - `bloomFilterTtl?: number`: How long a bloom filter and corresponding `hash` should remain static. By default, 24 hours. Minimum 24 hours, maximum 14 days. During this time, new domains will be added to `recentlyAdded` and removed from `recentlyRemoved` fields.\n- `storage: BlowfishBlocklistStorage` If storage is not specified we use in-memory storage. It is highly encouraged to provide the proper storage for your environemnt ([see guides](#guides)).\n  - `getItem<T>(key: BlowfishBlocklistStorageKey): Promise<T | undefined>`: get item by key from the environment storage.\n  - `setItem(key: BlowfishBlocklistStorageKey, data: unknown)`: set item by key to the environment storage.\n- `reportError: (error: unknown) => void`: A callback function that library uses to track errors when result is `null`. (optional)\n\n### Methods\n\n### `fetchBlocklist(): Promise<LocalBlocklist | undefined>`\n\nFetches the blocklist metadata and saves it to the storage. If the fetched blocklist hash is different from one in the storage, it re-fetches the bloom filter and saves it to the storage.\n\nIf the blocklist fetch fails, the method returns `undefined` and reports the error to `reportError`.\n\n### `scanDomain(url: string): Promise<Action>`\n\nScans a domain against the stored domain blocklist and returns the action to be taken (either `BLOCK` or `NONE`).\n\nIf there is no stored blocklist it fetches the blocklist using `fetchBlocklist` method and returns the resulting action.\n\nIf the fetch fails, the method returns the action `NONE` and reports the error to `reportError`.\n\n### `allowDomainLocally(url: string): Promise<Action>`\n\nIf the user wants to proceed to the blocked domain with an explicit action, the domain is added in the user allow list (locally in the storage).\n\nThe `scanDomain` method will return `NONE` action for this domain even if it's in the blocklist.\n","readmeFilename":"README.md"}