{"_id":"@bitsocial/spam-blocker-challenge","_rev":"7-8b70e86165f20fd435e143fb988104a2","name":"@bitsocial/spam-blocker-challenge","dist-tags":{"latest":"0.1.6"},"versions":{"0.0.0":{"name":"@bitsocial/spam-blocker-challenge","version":"0.0.0","keywords":["bitsocial","pkc","challenge","spam","moderation"],"author":{"name":"Bitsocial Labs"},"license":"GPL-3.0-or-later","_id":"@bitsocial/spam-blocker-challenge@0.0.0","maintainers":[{"name":"tomcasaburi","email":"tom@plebbitlabs.com"},{"name":"rinse12","email":"rinse12@tutanota.com"}],"homepage":"https://github.com/bitsocialnet/spam-blocker#readme","bugs":{"url":"https://github.com/bitsocialnet/spam-blocker/issues"},"dist":{"shasum":"0cabf7ebcc5918351208fd805f5be7031ffb8ec3","tarball":"https://registry.npmjs.org/@bitsocial/spam-blocker-challenge/-/spam-blocker-challenge-0.0.0.tgz","fileCount":13,"integrity":"sha512-zYGDX5Uj+TxpgVrelFGbQ6SrwQynEUx5vl9VDVg6BGGwcSB1OKVSg9qnD00BqyItpCGzAfCuLVGPDyp4leExGg==","signatures":[{"sig":"MEYCIQDM37a6wPb4UXkc2/8QFQXq88hf+5MXhTkN3fYNnJKVygIhAL9xEYsRwWKIaGXEeibKcbGnUiYYQehwCQthFO6OQkoI","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":94039},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"00e80f521eec2f1bddf2ed6630ad5f566751994c","scripts":{"test":"vitest run","build":"yarn workspace @bitsocial/spam-blocker-shared build && node esbuild.config.js && tsc -p tsconfig.json --emitDeclarationOnly","clean":"rm -rf dist","type-check":"yarn workspace @bitsocial/spam-blocker-shared build && tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"tomcasaburi","email":"tom@plebbitlabs.com"},"repository":{"url":"git+https://github.com/bitsocialnet/spam-blocker.git","type":"git","directory":"packages/challenge"},"_npmVersion":"11.8.0","description":"Bitsocial Spam Blocker challenge implementation for PKC","directories":{},"_nodeVersion":"22.12.0","dependencies":{"zod":"4.3.5","cborg":"4.3.2","uint8arrays":"5.1.0","multiformats":"9.9.0","@noble/ed25519":"1.7.5","@pkc/pkc-logger":"git+https://github.com/pkcprotocol/pkc-logger.git#cb494fbaf332ed5b2cfd9d9d0f90ca7fd0058b4a","i18n-iso-countries":"7.14.0","@pkcprotocol/pkc-js":"git+https://github.com/pkcprotocol/pkc-js.git#e63026e6cd33df5af3a3b5e6473b1e364d89fbdb"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"yarn@4.13.0","devDependencies":{"vitest":"4.0.16","esbuild":"0.27.2","typescript":"6.0.2"},"_npmOperationalInternal":{"tmp":"tmp/spam-blocker-challenge_0.0.0_1776589583649_0.46665100619051714","host":"s3://npm-registry-packages-npm-production"}},"0.1.0":{"name":"@bitsocial/spam-blocker-challenge","version":"0.1.0","keywords":["bitsocial","pkc","challenge","spam","moderation"],"author":{"name":"Bitsocial Labs"},"license":"GPL-3.0-or-later","_id":"@bitsocial/spam-blocker-challenge@0.1.0","maintainers":[{"name":"tomcasaburi","email":"tom@plebbitlabs.com"},{"name":"rinse12","email":"rinse12@tutanota.com"}],"homepage":"https://github.com/bitsocialnet/spam-blocker#readme","bugs":{"url":"https://github.com/bitsocialnet/spam-blocker/issues"},"dist":{"shasum":"89388d3fe8f7a8d4464da65f5a47a3c64f38c8a6","tarball":"https://registry.npmjs.org/@bitsocial/spam-blocker-challenge/-/spam-blocker-challenge-0.1.0.tgz","fileCount":11,"integrity":"sha512-BRkd/w3QFowRMRtmZSBc1PfQqYtCH2vA8yTc9GKMSu8olwuHlsQ7CRLfrPiujaE/L5DF8wkFu1g3wwi7NhKncA==","signatures":[{"sig":"MEYCIQCoUMCyWqFXb1MFwSQz1bvJcK7b419RCmXGMn1hiscvkAIhALTdMNtET6mbZOyoWcUtdoy6x8g8kS0BNDG/C8mh9A6s","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bitsocial%2fspam-blocker-challenge@0.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":93372},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"75c349eb8064b2c533d2f2ccad78993790521078","scripts":{"test":"vitest run","build":"yarn workspace @bitsocial/spam-blocker-shared build && node esbuild.config.js && tsc -p tsconfig.json --emitDeclarationOnly","clean":"rm -rf dist","type-check":"yarn workspace @bitsocial/spam-blocker-shared build && tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:db77467b-8740-4082-9fc9-032a271ffd11"}},"repository":{"url":"git+https://github.com/bitsocialnet/spam-blocker.git","type":"git","directory":"packages/challenge"},"_npmVersion":"11.12.1","description":"Bitsocial Spam Blocker challenge implementation for PKC","directories":{},"_nodeVersion":"22.14.0","dependencies":{"zod":"4.3.5","cborg":"4.3.2","uint8arrays":"5.1.0","multiformats":"9.9.0","@noble/ed25519":"1.7.5","i18n-iso-countries":"7.14.0","@pkcprotocol/pkc-js":"0.0.18","@pkcprotocol/pkc-logger":"0.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"yarn@4.13.0","devDependencies":{"vitest":"4.0.16","esbuild":"0.27.2","typescript":"6.0.2"},"_npmOperationalInternal":{"tmp":"tmp/spam-blocker-challenge_0.1.0_1776590256826_0.3080062130277159","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@bitsocial/spam-blocker-challenge","version":"0.1.2","keywords":["bitsocial","pkc","challenge","spam","moderation"],"author":{"name":"Bitsocial Labs"},"license":"GPL-3.0-or-later","_id":"@bitsocial/spam-blocker-challenge@0.1.2","maintainers":[{"name":"tomcasaburi","email":"tom@plebbitlabs.com"},{"name":"rinse12","email":"rinse12@tutanota.com"}],"homepage":"https://github.com/bitsocialnet/spam-blocker#readme","bugs":{"url":"https://github.com/bitsocialnet/spam-blocker/issues"},"dist":{"shasum":"0f32d0a3fb46fa7bfb7026c6573d8d42e877d02f","tarball":"https://registry.npmjs.org/@bitsocial/spam-blocker-challenge/-/spam-blocker-challenge-0.1.2.tgz","fileCount":11,"integrity":"sha512-xODcXcXyInBM/V0sQVR6Iug5QUYZvi9J51+lZ6VBAmbx02p1GL7OK5OsEYVZJpER5cKi4n1ALFKbhEdJVgqulw==","signatures":[{"sig":"MEYCIQCH/swdGu6pn2bzfi9OO/NMapDE6a4vD9zzs5cUVaRi1wIhAPCSvkW1wBcyFxRVHSLfGRZUb3RhW+BBo1bpo4kyfrM8","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bitsocial%2fspam-blocker-challenge@0.1.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":95913},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"8ff2672da71afd8550f7f6a7654bc9062bc4c6b8","scripts":{"test":"vitest run","build":"yarn workspace @bitsocial/spam-blocker-shared build && node esbuild.config.js && tsc -p tsconfig.json --emitDeclarationOnly","clean":"rm -rf dist","type-check":"yarn workspace @bitsocial/spam-blocker-shared build && tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:db77467b-8740-4082-9fc9-032a271ffd11"}},"repository":{"url":"git+https://github.com/bitsocialnet/spam-blocker.git","type":"git","directory":"packages/challenge"},"_npmVersion":"11.13.0","description":"Bitsocial Spam Blocker challenge implementation for PKC","directories":{},"_nodeVersion":"22.14.0","dependencies":{"zod":"4.3.5","cborg":"4.3.2","uint8arrays":"5.1.0","multiformats":"9.9.0","@noble/ed25519":"1.7.5","i18n-iso-countries":"7.14.0","@pkcprotocol/pkc-js":"0.0.18","@pkcprotocol/pkc-logger":"0.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"yarn@4.13.0","devDependencies":{"vitest":"4.0.16","esbuild":"0.27.2","typescript":"6.0.2"},"_npmOperationalInternal":{"tmp":"tmp/spam-blocker-challenge_0.1.2_1777452512040_0.6037011850324299","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@bitsocial/spam-blocker-challenge","version":"0.1.3","keywords":["bitsocial","pkc","challenge","spam","moderation"],"author":{"name":"Bitsocial Labs"},"license":"GPL-3.0-or-later","_id":"@bitsocial/spam-blocker-challenge@0.1.3","maintainers":[{"name":"tomcasaburi","email":"tom@plebbitlabs.com"},{"name":"rinse12","email":"rinse12@tutanota.com"}],"homepage":"https://github.com/bitsocialnet/spam-blocker#readme","bugs":{"url":"https://github.com/bitsocialnet/spam-blocker/issues"},"dist":{"shasum":"963a1cb195f39b8839143af578464f42c0e594da","tarball":"https://registry.npmjs.org/@bitsocial/spam-blocker-challenge/-/spam-blocker-challenge-0.1.3.tgz","fileCount":11,"integrity":"sha512-mhkbadW+SC3Ixq4EABX063FbwhQZdVVna2wmSZEQ2jIxm/ru3ZaB1r40AmabVVHvVM/G9QWbxOMhnygDPoglCQ==","signatures":[{"sig":"MEYCIQCNLVQXz13XR55fAVfVTP7d0+8P+ZzHuOxS3ziLpmzdyQIhAOukO6g2ifBAY+YklX9IAdfKKSI6kDNNT+KPQERErkE5","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bitsocial%2fspam-blocker-challenge@0.1.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":95073},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"e39af73d6672c0160e2a956e65b0fb9d26fba85e","scripts":{"test":"vitest run","build":"yarn workspace @bitsocial/spam-blocker-shared build && node esbuild.config.js && tsc -p tsconfig.json --emitDeclarationOnly","clean":"rm -rf dist","type-check":"yarn workspace @bitsocial/spam-blocker-shared build && tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:db77467b-8740-4082-9fc9-032a271ffd11"}},"repository":{"url":"git+https://github.com/bitsocialnet/spam-blocker.git","type":"git","directory":"packages/challenge"},"_npmVersion":"11.14.0","description":"Bitsocial Spam Blocker challenge implementation for PKC","directories":{},"_nodeVersion":"22.14.0","dependencies":{"zod":"4.3.5","cborg":"4.3.2","uint8arrays":"5.1.0","@noble/ed25519":"1.7.5","i18n-iso-countries":"7.14.0","@pkcprotocol/pkc-logger":"0.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"yarn@4.13.0","devDependencies":{"vitest":"4.0.16","esbuild":"0.27.2","typescript":"6.0.2","@pkcprotocol/pkc-js":"0.0.30"},"_npmOperationalInternal":{"tmp":"tmp/spam-blocker-challenge_0.1.3_1778234032804_0.7791693338882049","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@bitsocial/spam-blocker-challenge","version":"0.1.4","keywords":["bitsocial","pkc","challenge","spam","moderation"],"author":{"name":"Bitsocial Labs"},"license":"GPL-3.0-or-later","_id":"@bitsocial/spam-blocker-challenge@0.1.4","maintainers":[{"name":"tomcasaburi","email":"tom@plebbitlabs.com"},{"name":"rinse12","email":"rinse12@tutanota.com"}],"homepage":"https://github.com/bitsocialnet/spam-blocker#readme","bugs":{"url":"https://github.com/bitsocialnet/spam-blocker/issues"},"dist":{"shasum":"69d9474d8985c3ec0d283069f5d156930470f4d2","tarball":"https://registry.npmjs.org/@bitsocial/spam-blocker-challenge/-/spam-blocker-challenge-0.1.4.tgz","fileCount":11,"integrity":"sha512-rAxpghkRz75heL+NGEOPISoweLS9G6+nzsJUnkMmvIjbiXJS6uN2MkWuHN0oD/9CrO98Csg/6ywpB9m3rYL27w==","signatures":[{"sig":"MEYCIQDDH0E4WE4DDu8EBgbVuDZOvdbhQ+L6qKrshD1XXlNfkQIhAJ3foKP0OFkhB9kdlbYPmwwJQhgM1KJXte52Bbx8HuqJ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bitsocial%2fspam-blocker-challenge@0.1.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":94762},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"8623ed80543b4b6a29a0c320128ab978e55b4484","scripts":{"test":"vitest run","build":"yarn workspace @bitsocial/spam-blocker-shared build && node esbuild.config.js && tsc -p tsconfig.json --emitDeclarationOnly","clean":"rm -rf dist","type-check":"yarn workspace @bitsocial/spam-blocker-shared build && tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:db77467b-8740-4082-9fc9-032a271ffd11"}},"repository":{"url":"git+https://github.com/bitsocialnet/spam-blocker.git","type":"git","directory":"packages/challenge"},"_npmVersion":"11.15.0","description":"Bitsocial Spam Blocker challenge implementation for PKC","directories":{},"_nodeVersion":"22.14.0","dependencies":{"zod":"4.3.5","cborg":"4.3.2","uint8arrays":"5.1.0","@noble/ed25519":"1.7.5","i18n-iso-countries":"7.14.0","@pkcprotocol/pkc-logger":"0.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"yarn@4.13.0","devDependencies":{"vitest":"4.0.16","esbuild":"0.27.2","typescript":"6.0.2","@pkcprotocol/pkc-js":"0.0.30"},"_npmOperationalInternal":{"tmp":"tmp/spam-blocker-challenge_0.1.4_1779539371187_0.54699224085651","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@bitsocial/spam-blocker-challenge","version":"0.1.5","keywords":["bitsocial","pkc","challenge","spam","moderation"],"author":{"name":"Bitsocial Labs"},"license":"GPL-3.0-or-later","_id":"@bitsocial/spam-blocker-challenge@0.1.5","maintainers":[{"name":"tomcasaburi","email":"tom@bitsocial.net"},{"name":"rinse12","email":"rinse12@tutanota.com"}],"homepage":"https://github.com/bitsocialnet/spam-blocker#readme","bugs":{"url":"https://github.com/bitsocialnet/spam-blocker/issues"},"dist":{"shasum":"1bbbf28b7b240216786d58ceab305b6528855c09","tarball":"https://registry.npmjs.org/@bitsocial/spam-blocker-challenge/-/spam-blocker-challenge-0.1.5.tgz","fileCount":11,"integrity":"sha512-h2jKSGCZlGjzbqB9mVUH0w8EdrgJ0JFp4cgy9bq4YAXgMV2e0pge0skSpDihuCGRVwXwdNDPS06pNtd2aCAC0Q==","signatures":[{"sig":"MEYCIQD1kYlioNXRPb0hc+AEUMwrv0m7xUEuK/g/Chut2DpBpQIhAO++WXI6of6jFoHxvPSmEhJE1ylDA3ww++c0Bt7qPffa","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bitsocial%2fspam-blocker-challenge@0.1.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":94736},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"e1f18399f40b6de434c1b552a314ad9922d45ef9","scripts":{"test":"vitest run","build":"yarn workspace @bitsocial/spam-blocker-shared build && node esbuild.config.js && tsc -p tsconfig.json --emitDeclarationOnly","clean":"rm -rf dist","type-check":"yarn workspace @bitsocial/spam-blocker-shared build && tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:db77467b-8740-4082-9fc9-032a271ffd11"}},"repository":{"url":"git+https://github.com/bitsocialnet/spam-blocker.git","type":"git","directory":"packages/challenge"},"_npmVersion":"11.18.0","description":"Bitsocial Spam Blocker challenge implementation for PKC","directories":{},"_nodeVersion":"22.14.0","dependencies":{"zod":"4.3.5","cborg":"4.3.2","uint8arrays":"5.1.0","@noble/ed25519":"1.7.5","i18n-iso-countries":"7.14.0","@pkcprotocol/pkc-logger":"0.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"yarn@4.17.1","devDependencies":{"vitest":"4.1.10","esbuild":"0.27.2","typescript":"7.0.2","@pkcprotocol/pkc-js":"0.0.30"},"_npmOperationalInternal":{"tmp":"tmp/spam-blocker-challenge_0.1.5_1785225248364_0.6332609200551051","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"@bitsocial/spam-blocker-challenge","version":"0.1.6","description":"Bitsocial Spam Blocker challenge implementation for PKC","keywords":["bitsocial","pkc","challenge","spam","moderation"],"author":{"name":"Bitsocial Labs"},"license":"GPL-3.0-or-later","type":"module","engines":{"node":">=22"},"main":"dist/index.js","types":"dist/index.d.ts","publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/bitsocialnet/spam-blocker.git","directory":"packages/challenge"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./package.json":"./package.json"},"scripts":{"build":"yarn workspace @bitsocial/spam-blocker-shared build && node esbuild.config.js && tsc -p tsconfig.json --emitDeclarationOnly","clean":"rm -rf dist","test":"vitest run","type-check":"yarn workspace @bitsocial/spam-blocker-shared build && tsc -p tsconfig.json --noEmit"},"dependencies":{"@noble/ed25519":"1.7.5","@pkcprotocol/pkc-logger":"0.1.0","cborg":"4.3.2","i18n-iso-countries":"7.14.0","uint8arrays":"5.1.0","zod":"4.3.5"},"devDependencies":{"@pkcprotocol/pkc-js":"0.0.30","esbuild":"0.27.2","typescript":"7.0.2","vitest":"4.1.10"},"packageManager":"yarn@4.17.1","gitHead":"3d706f2dbb84cf0e03caecd959ca60a1ba164b8d","_id":"@bitsocial/spam-blocker-challenge@0.1.6","bugs":{"url":"https://github.com/bitsocialnet/spam-blocker/issues"},"homepage":"https://github.com/bitsocialnet/spam-blocker#readme","_nodeVersion":"22.14.0","_npmVersion":"11.19.0","dist":{"integrity":"sha512-p0GkJCLaeY/CSQCcS1h56TvW5XWRgTZFCTYdRHEgcEjITxinvHgDhj+JRIy8BMDWCh9G51yuJ++7OEKLWiqA2w==","shasum":"f9ea2c9f4d3d8a35666f23432019b5a2d7205331","tarball":"https://registry.npmjs.org/@bitsocial/spam-blocker-challenge/-/spam-blocker-challenge-0.1.6.tgz","fileCount":11,"unpackedSize":95440,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bitsocial%2fspam-blocker-challenge@0.1.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCKQskzyTvgkTFmLCXY7ynyjLAfip3oFDltXrjnear7WQIgVmwn5esvbtACeN0dC0dURJT9Qi58auBT4o3+L1sL0dw="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:db77467b-8740-4082-9fc9-032a271ffd11"}},"directories":{},"maintainers":[{"name":"tomcasaburi","email":"tom@bitsocial.net"},{"name":"rinse12","email":"rinse12@tutanota.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/spam-blocker-challenge_0.1.6_1786549237705_0.1084441977405255"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-19T09:06:23.556Z","modified":"2026-08-12T15:40:38.206Z","0.0.0":"2026-04-19T09:06:23.772Z","0.1.0":"2026-04-19T09:17:36.975Z","0.1.2":"2026-04-29T08:48:32.171Z","0.1.3":"2026-05-08T09:53:52.997Z","0.1.4":"2026-05-23T12:29:31.345Z","0.1.5":"2026-07-28T07:54:08.540Z","0.1.6":"2026-08-12T15:40:37.843Z"},"bugs":{"url":"https://github.com/bitsocialnet/spam-blocker/issues"},"author":{"name":"Bitsocial Labs"},"license":"GPL-3.0-or-later","homepage":"https://github.com/bitsocialnet/spam-blocker#readme","keywords":["bitsocial","pkc","challenge","spam","moderation"],"repository":{"type":"git","url":"git+https://github.com/bitsocialnet/spam-blocker.git","directory":"packages/challenge"},"description":"Bitsocial Spam Blocker challenge implementation for PKC","maintainers":[{"name":"tomcasaburi","email":"tom@bitsocial.net"},{"name":"rinse12","email":"rinse12@tutanota.com"}],"readme":"# @bitsocial/spam-blocker-challenge\n\nA Bitsocial challenge plugin that protects communities from spam by evaluating publication risk scores and optionally presenting an interactive challenge to users.\n\n## Using Spam Blocker In Your Community\n\nCommunity owners add the spam blocker challenge to their community settings. When enabled, user-generated publications return a consent-gated iframe URL. The Bitsocial Spam Blocker server evaluates the publication only after the user opens that iframe. Low-risk publications complete immediately after evaluation, high-risk publications are rejected, and medium-risk publications continue into an interactive iframe challenge. Community-level actions (`commentEdit`, `commentModeration`, and `communityEdit`) are accepted locally because they do not require spam detection.\n\nFirst install the challenge on the Bitsocial server:\n\n```bash\nbitsocial challenge install @bitsocial/spam-blocker-challenge\n```\n\nThen set it on your community with one command:\n\n```bash\nbitsocial community edit your-community.bso '--settings.challenges[0].name' @bitsocial/spam-blocker-challenge\n```\n\nThat uses the hosted Bitsocial Spam Blocker server and the default thresholds. This is the strongly recommended configuration because the centralized service can correlate cross-community abuse and signer clusters over time.\n\nThe hosted service normally allows up to three signer public keys on a confirmed user-origin IP during its rolling window, accommodating users who cannot yet sync a Bitsocial signer across devices. Excessive account switching, rapid signer churn, ban evasion, or interactions between linked signers can trigger stronger verification or a temporary IP-level rejection. This policy is enforced by the hosted server, not by the public challenge package itself.\n\nTo customize thresholds or IP-based rejection rules, pass options in the same command:\n\n```bash\nbitsocial community edit your-community.bso \\\n  '--settings.challenges[0].name' @bitsocial/spam-blocker-challenge \\\n  '--settings.challenges[0].options.autoAcceptThreshold' '0.2' \\\n  '--settings.challenges[0].options.autoRejectThreshold' '0.8' \\\n  '--settings.challenges[0].options.countryBlacklist' 'RU,CN,KP' \\\n  '--settings.challenges[0].options.blockVpn' 'true' \\\n  '--settings.challenges[0].options.blockTor' 'true'\n```\n\nAll option values should be strings.\n\n## Configuration\n\nYou can also open your community settings interactively:\n\n```bash\nbitsocial community edit\n```\n\nThen add or edit the `challenges` array in your community settings to include the spam blocker challenge with your desired options.\n\n## Options\n\n| Option                | Default                                    | Description                                                                          |\n| --------------------- | ------------------------------------------ | ------------------------------------------------------------------------------------ |\n| `serverUrl`           | `https://spamblocker.bitsocial.net/api/v1` | URL of a compatible spam blocker service; the official hosted service is recommended |\n| `autoAcceptThreshold` | `0.2`                                      | Complete verification after iframe evaluation when risk is below this value          |\n| `autoRejectThreshold` | `0.8`                                      | Reject after iframe evaluation when risk is above this value                         |\n| `countryBlacklist`    | _(empty)_                                  | Comma-separated ISO 3166-1 alpha-2 country codes to block (e.g. `RU,CN,KP`)          |\n| `maxIpRisk`           | `1.0`                                      | Reject if IP risk score exceeds this threshold (estimation only)                     |\n| `blockVpn`            | `false`                                    | Reject publications from VPN IPs (estimation only)                                   |\n| `blockProxy`          | `false`                                    | Reject publications from proxy IPs (estimation only)                                 |\n| `blockTor`            | `false`                                    | Reject publications from Tor exit nodes (estimation only)                            |\n| `blockDatacenter`     | `false`                                    | Reject publications from datacenter IPs (estimation only)                            |\n\n## How It Works\n\n1. When a user publishes a post, reply, or vote to a community, the challenge signs the publication locally and returns a lazy iframe URL. `getChallenge()` does not call `/evaluate`.\n2. The Bitsocial client asks the user before opening the spam blocker iframe.\n3. After the user opens the iframe, the iframe sends the signed payload to `/evaluate`. This is the first spam blocker server evaluation request for the publication.\n4. The server returns a **risk score** between 0 and 1:\n    - **Below `autoAcceptThreshold`**: Verification completes immediately.\n    - **Above `autoRejectThreshold`**: Verification fails immediately.\n    - **Between thresholds**: The iframe presents OAuth and/or CAPTCHA verification.\n5. After challenge verification, the server's `/challenge/verify` endpoint confirms whether the user passed. Additional IP-based policies (country, VPN, proxy, Tor, datacenter blocking) are applied if configured.\n6. Community-level actions (`commentEdit`, `commentModeration`, and `communityEdit`) are accepted without calling `/evaluate`.\n\n## License\n\n`@bitsocial/spam-blocker-challenge` is licensed under `GPL-3.0-or-later`. See [`LICENSE`](./LICENSE).\n","readmeFilename":"README.md"}