{"_id":"@bitsocial/captcha-canvas-challenge","_rev":"6-425e7b39452320aaf0f0b6f3d48d65cf","name":"@bitsocial/captcha-canvas-challenge","dist-tags":{"latest":"0.1.5"},"versions":{"0.1.0":{"name":"@bitsocial/captcha-canvas-challenge","version":"0.1.0","keywords":["bitsocial","pkc","challenge","captcha","canvas"],"author":{"name":"Rinse"},"license":"GPL-3.0-only","_id":"@bitsocial/captcha-canvas-challenge@0.1.0","maintainers":[{"name":"rinse12","email":"rinse12@tutanota.com"},{"name":"tomcasaburi","email":"tom@plebbitlabs.com"}],"dist":{"shasum":"819d30710dc5c73026a0c7fa94c7024d6c063d44","tarball":"https://registry.npmjs.org/@bitsocial/captcha-canvas-challenge/-/captcha-canvas-challenge-0.1.0.tgz","fileCount":13,"integrity":"sha512-1M2t+nTcWjI4zuOMFBnw8xDDk4MwfAHh80h0Ewuq3hhUF7JrJY1FK39H6lnrLelBF+32Sua/RkfysEu7L1/fSQ==","signatures":[{"sig":"MEUCIGYqtdYtXXLnoW+RK8mg7fqhBmiqCzXCcCTidX5u2rYKAiEAmlj+0kqFW6rcLfS8x2quRv0KLhXF1RBdnM78oy7s+58=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":44392},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","config":{"commitizen":{"path":"cz-conventional-changelog"}},"engines":{"node":">=22.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"0e2d5f4eee80398a54cd8fa40041d78d72027376","scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json","clean":"rm -rf dist","prepare":"husky","release":"HUSKY=0 release-it --config config/.release-it.json","typecheck":"tsc -p tsconfig.json --noEmit","test:watch":"vitest"},"_npmUser":{"name":"rinse12","email":"rinse12@tutanota.com"},"_npmVersion":"10.9.4","description":"Standalone captcha canvas challenge for pkc-js","directories":{},"_nodeVersion":"22.22.0","dependencies":{"skia-canvas":"3.0.8","captcha-canvas":"3.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"husky":"9.1.7","vitest":"4.0.18","commitizen":"4.3.1","release-it":"19.2.4","typescript":"5.9.3","@types/node":"25.3.5","@commitlint/cli":"20.4.3","@pkcprotocol/pkc-js":"git+https://github.com/pkcprotocol/pkc-js.git#e63026e6cd33df5af3a3b5e6473b1e364d89fbdb","cz-conventional-changelog":"3.3.0","@commitlint/config-conventional":"20.4.3","@release-it/conventional-changelog":"10.0.5"},"_npmOperationalInternal":{"tmp":"tmp/captcha-canvas-challenge_0.1.0_1775809361772_0.9509282121601248","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@bitsocial/captcha-canvas-challenge","version":"0.1.3","keywords":["bitsocial","pkc","challenge","captcha","canvas"],"author":{"name":"Rinse"},"license":"GPL-3.0-only","_id":"@bitsocial/captcha-canvas-challenge@0.1.3","maintainers":[{"name":"rinse12","email":"rinse12@tutanota.com"},{"name":"tomcasaburi","email":"tom@plebbitlabs.com"}],"homepage":"https://github.com/bitsocialnet/captcha-canvas-challenge#readme","bugs":{"url":"https://github.com/bitsocialnet/captcha-canvas-challenge/issues"},"dist":{"shasum":"b79623ee4e747ef2d844be9e593840382f6f7ef7","tarball":"https://registry.npmjs.org/@bitsocial/captcha-canvas-challenge/-/captcha-canvas-challenge-0.1.3.tgz","fileCount":13,"integrity":"sha512-ETdhg3tIcWloOiZiEE4zPmtOKBtQUygILtWAc63mSBLndzxTkyNr/biGf+ldrAQHtl/BSt8lp0E4UmZz7QOzeQ==","signatures":[{"sig":"MEYCIQC/hprNyh2QfwPreFFv0b7TsSZTqkGxWJg06f9ZxyjhpQIhAIWac9DGlOMOchu+dvKM+HwW3jgc0zPX8PC6uuroZg4L","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bitsocial%2fcaptcha-canvas-challenge@0.1.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":46045},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","config":{"commitizen":{"path":"cz-conventional-changelog"}},"engines":{"node":">=22.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"e4a98beeba777161cc175b7e2803eed302147dfe","scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json","clean":"rm -rf dist","prepare":"husky","release":"HUSKY=0 release-it --config config/.release-it.json","typecheck":"tsc -p tsconfig.json --noEmit","test:watch":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c09ddff5-1efa-469e-a6fe-8884a5153b93"}},"repository":{"url":"git+https://github.com/bitsocialnet/captcha-canvas-challenge.git","type":"git"},"_npmVersion":"11.12.1","description":"Standalone captcha canvas challenge for pkc-js","directories":{},"_nodeVersion":"22.22.2","dependencies":{"skia-canvas":"3.0.8","captcha-canvas":"3.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"husky":"9.1.7","vitest":"4.0.18","commitizen":"4.3.1","release-it":"19.2.4","typescript":"5.9.3","@types/node":"25.3.5","@commitlint/cli":"20.4.3","@pkcprotocol/pkc-js":"git+https://github.com/pkcprotocol/pkc-js.git#e63026e6cd33df5af3a3b5e6473b1e364d89fbdb","cz-conventional-changelog":"3.3.0","@commitlint/config-conventional":"20.4.3","@release-it/conventional-changelog":"10.0.5"},"_npmOperationalInternal":{"tmp":"tmp/captcha-canvas-challenge_0.1.3_1775813406076_0.6467349707764765","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@bitsocial/captcha-canvas-challenge","version":"0.1.4","keywords":["bitsocial","pkc","challenge","captcha","canvas"],"author":{"name":"Rinse"},"license":"GPL-3.0-or-later","_id":"@bitsocial/captcha-canvas-challenge@0.1.4","maintainers":[{"name":"rinse12","email":"rinse12@tutanota.com"}],"homepage":"https://github.com/bitsocialnet/captcha-canvas-challenge#readme","bugs":{"url":"https://github.com/bitsocialnet/captcha-canvas-challenge/issues"},"dist":{"shasum":"9e97062fca260f0cab7061cc527be4a0e10c4365","tarball":"https://registry.npmjs.org/@bitsocial/captcha-canvas-challenge/-/captcha-canvas-challenge-0.1.4.tgz","fileCount":13,"integrity":"sha512-xchOAd0QaMSzQ0CtHzT+CxA20ltw7SIz6web6tb6NmXNKTECiraoD5edIsiestT+3CATQd4wP5aD5Pa+i8VvgQ==","signatures":[{"sig":"MEUCIBqfrwwrH5g8q6LviR/k1bB8C09Kz+tD1j2IPm3D2SDRAiEAopDLC202ulTFu7gVNouuyRxDIL+PnBczZfTFAXpky94=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bitsocial%2fcaptcha-canvas-challenge@0.1.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":46861},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","config":{"commitizen":{"path":"cz-conventional-changelog"}},"engines":{"node":">=22.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"a985b0becdecadad00668d302ce6f8d22aa68eba","scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json","clean":"rm -rf dist","prepare":"husky","release":"HUSKY=0 release-it --config config/.release-it.json","typecheck":"tsc -p tsconfig.json --noEmit","test:watch":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c09ddff5-1efa-469e-a6fe-8884a5153b93"}},"repository":{"url":"git+https://github.com/bitsocialnet/captcha-canvas-challenge.git","type":"git"},"_npmVersion":"11.12.1","description":"Standalone captcha canvas challenge for pkc-js","directories":{},"_nodeVersion":"22.22.2","dependencies":{"skia-canvas":"3.0.8","captcha-canvas":"3.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"husky":"9.1.7","vitest":"4.0.18","commitizen":"4.3.1","release-it":"19.2.4","typescript":"5.9.3","@types/node":"25.3.5","@commitlint/cli":"20.4.3","@pkcprotocol/pkc-js":"git+https://github.com/pkcprotocol/pkc-js.git#e63026e6cd33df5af3a3b5e6473b1e364d89fbdb","cz-conventional-changelog":"3.3.0","@commitlint/config-conventional":"20.4.3","@release-it/conventional-changelog":"10.0.5"},"_npmOperationalInternal":{"tmp":"tmp/captcha-canvas-challenge_0.1.4_1775896357530_0.974383169681359","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@bitsocial/captcha-canvas-challenge","version":"0.1.5","description":"Standalone captcha canvas challenge for pkc-js","type":"module","main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./package.json":"./package.json"},"publishConfig":{"access":"public"},"scripts":{"build":"tsc -p tsconfig.build.json","typecheck":"tsc -p tsconfig.json --noEmit","test":"vitest run","test:watch":"vitest","clean":"rm -rf dist","prepare":"husky","release":"HUSKY=0 release-it --config config/.release-it.json"},"keywords":["bitsocial","pkc","challenge","captcha","canvas"],"repository":{"type":"git","url":"git+https://github.com/bitsocialnet/captcha-canvas-challenge.git"},"author":{"name":"Rinse"},"license":"GPL-3.0-or-later","engines":{"node":">=22.0.0"},"dependencies":{"captcha-canvas":"3.4.0","skia-canvas":"3.0.8"},"devDependencies":{"@commitlint/cli":"20.4.3","@commitlint/config-conventional":"20.4.3","@pkcprotocol/pkc-js":"git+https://github.com/pkcprotocol/pkc-js.git#e63026e6cd33df5af3a3b5e6473b1e364d89fbdb","@release-it/conventional-changelog":"10.0.5","@types/node":"25.3.5","commitizen":"4.3.1","cz-conventional-changelog":"3.3.0","husky":"9.1.7","release-it":"19.2.4","typescript":"5.9.3","vitest":"4.0.18"},"config":{"commitizen":{"path":"cz-conventional-changelog"}},"gitHead":"1b8b38705ff0581134eb11221732e84d74755b3d","_id":"@bitsocial/captcha-canvas-challenge@0.1.5","bugs":{"url":"https://github.com/bitsocialnet/captcha-canvas-challenge/issues"},"homepage":"https://github.com/bitsocialnet/captcha-canvas-challenge#readme","_nodeVersion":"22.22.2","_npmVersion":"11.13.0","dist":{"integrity":"sha512-+xth1McJsdERMPMsaw57vr8eZS2lJJXygRcxg/wHPoyLg3fQEV8uDbFmRcQoBLet2wNET7AkR0StMSz7uVY+4g==","shasum":"49a77964444424cbda86f39c1e84a141cbb0763d","tarball":"https://registry.npmjs.org/@bitsocial/captcha-canvas-challenge/-/captcha-canvas-challenge-0.1.5.tgz","fileCount":13,"unpackedSize":47243,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bitsocial%2fcaptcha-canvas-challenge@0.1.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCkhImEIFQ+mVkv43J5ISX9IAKUTuxhXU7koURF+MelogIhANFX1qjXyy8mH2F72WzMbziup7oipATU0esTGSq33qDs"}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:c09ddff5-1efa-469e-a6fe-8884a5153b93"}},"directories":{},"maintainers":[{"name":"tomcasaburi","email":"tom@plebbitlabs.com"},{"name":"rinse12","email":"rinse12@tutanota.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/captcha-canvas-challenge_0.1.5_1777017460038_0.6668867081666263"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-10T08:22:41.675Z","modified":"2026-04-24T07:57:40.451Z","0.1.0":"2026-04-10T08:22:41.902Z","0.1.3":"2026-04-10T09:30:06.230Z","0.1.4":"2026-04-11T08:32:37.676Z","0.1.5":"2026-04-24T07:57:40.158Z"},"bugs":{"url":"https://github.com/bitsocialnet/captcha-canvas-challenge/issues"},"author":{"name":"Rinse"},"license":"GPL-3.0-or-later","homepage":"https://github.com/bitsocialnet/captcha-canvas-challenge#readme","keywords":["bitsocial","pkc","challenge","captcha","canvas"],"repository":{"type":"git","url":"git+https://github.com/bitsocialnet/captcha-canvas-challenge.git"},"description":"Standalone captcha canvas challenge for pkc-js","maintainers":[{"name":"tomcasaburi","email":"tom@plebbitlabs.com"},{"name":"rinse12","email":"rinse12@tutanota.com"}],"readme":"# @bitsocial/captcha-canvas-challenge\n\nStandalone captcha canvas challenge extracted from `pkc-js`, packaged with independent dependencies.\n\n## Security Warning\n\nThis captcha can be brute-forced easily and should not be used to protect a real community.\n\n## Status\n\n- `@pkcprotocol/pkc-js` is a dev dependency used only for TypeScript types. It is not required at runtime.\n\n## Requirements\n\n- Node.js `>=22`\n- ESM-only environment\n\n## Using captcha-canvas in your community\n\nCommunity owners add the captcha-canvas challenge to their community settings. When enabled, every publication (post, reply, vote) requires the author to solve a captcha. The challenge is published as [`@bitsocial/captcha-canvas-challenge`](https://www.npmjs.com/package/@bitsocial/captcha-canvas-challenge) on npm.\n\nThe challenge name is the npm package name, `@bitsocial/captcha-canvas-challenge`, on every install path — that's the key in `PKC.challenges` and the value passed as `community.settings.challenges[].name`. `bitsocial challenge install` registers it this way automatically; manual registration should match.\n\n### With pkc-js over RPC\n\nIf your RPC server is already running, first install the challenge on the server:\n\n```bash\nbitsocial challenge install @bitsocial/captcha-canvas-challenge\n```\n\nThen from your RPC client, connect and set the challenge on your community by name — no npm install or challenge registration needed on the client side:\n\n```ts\nimport PKC from \"@pkcprotocol/pkc-js\";\n\nconst pkc = await PKC({\n  pkcRpcClientsOptions: [\"ws://localhost:9138\"]\n});\n\nconst community = await pkc.createCommunity({ address: \"your-community-address.bso\" });\n\nawait community.edit({\n  settings: {\n    challenges: [\n      {\n        name: \"@bitsocial/captcha-canvas-challenge\",\n        options: {\n          characters: \"6\",\n          width: \"300\",\n          height: \"100\",\n          colors: \"#32cf7e\"\n        }\n      }\n    ]\n  }\n});\n```\n\n### With pkc-js (TypeScript)\n\nInstall the challenge package:\n\n```bash\nnpm install @bitsocial/captcha-canvas-challenge\n```\n\nRegister the challenge and configure your community:\n\n```typescript\nimport PKC from '@pkcprotocol/pkc-js'\nimport { captchaCanvasChallenge } from '@bitsocial/captcha-canvas-challenge'\n\n// Register the challenge so it can be referenced by name\nPKC.challenges['@bitsocial/captcha-canvas-challenge'] = captchaCanvasChallenge\n\nconst pkc = await PKC({ /* your pkc options */ })\nconst community = await pkc.createCommunity({ address: 'your-community.bso' })\n\nawait community.edit({\n  settings: {\n    challenges: [{\n      name: '@bitsocial/captcha-canvas-challenge',\n      options: {\n        characters: '6',\n        width: '300',\n        height: '100',\n        colors: '#32cf7e',\n      }\n    }]\n  }\n})\n```\n\n#### Challenge options\n\nAll option values must be strings (pkc-js challenge convention).\n\n| Option | Default | Description |\n|--------|---------|-------------|\n| `characters` | `\"6\"` | Amount of characters of the captcha |\n| `height` | `\"100\"` | Height of the captcha in pixels |\n| `width` | `\"300\"` | Width of the captcha in pixels |\n| `colors` | `\"#32cf7e\"` | Colors of the captcha text as hex comma separated values |\n\n### With bitsocial-cli\n\nInstall the challenge package:\n\n```bash\nbitsocial challenge install @bitsocial/captcha-canvas-challenge\n```\n\nEdit your community to use the challenge:\n\n```bash\nbitsocial community edit your-community.bso \\\n  '--settings.challenges[0].name' @bitsocial/captcha-canvas-challenge \\\n  '--settings.challenges[0].options.characters' '6' \\\n  '--settings.challenges[0].options.width' '300' \\\n  '--settings.challenges[0].options.height' '100' \\\n  '--settings.challenges[0].options.colors' '#32cf7e'\n```\n\nSee the [bitsocial-cli documentation](https://github.com/bitsocialnet/bitsocial-cli) for full CLI reference.\n\n## Scripts\n\n```bash\nnpm run typecheck\nnpm run build\nnpm test\n```\n","readmeFilename":"README.md"}