{"_id":"@afazzdev/slider-captcha-core","_rev":"1-b411cf1ffd87814909fb7b9cba05765e","name":"@afazzdev/slider-captcha-core","dist-tags":{"latest":"1.0.1"},"versions":{"1.0.0":{"name":"@afazzdev/slider-captcha-core","version":"1.0.0","description":"User-friendly puzzle slider captcha for React and Express","main":"index.js","scripts":{"test":"jest","lint":"eslint ./","fix":"eslint --fix ./","babel":"babel src -d ./lib --ignore '**/*.test.js'","build":"npm run lint && npm run babel"},"repository":{"type":"git","url":"git+https://github.com/adrsch/slider-captcha.git"},"keywords":["react","slider","captcha","component","puzzle","slide","express"],"author":{"name":"adrsch"},"license":"MIT","bugs":{"url":"https://github.com/adrsch/slider-captcha/issues"},"homepage":"https://github.com/adrsch/slider-captcha#readme","dependencies":{"prop-types":"^15.7.2","sharp":"^0.25.4","uid-safe":"^2.1.5"},"devDependencies":{"@babel/cli":"^7.10.5","@babel/core":"^7.11.1","@babel/preset-env":"^7.11.0","@babel/preset-react":"^7.10.4","eslint":"^7.2.0","eslint-config-airbnb":"^18.2.0","eslint-plugin-import":"^2.22.0","eslint-plugin-jsx-a11y":"^6.3.1","eslint-plugin-react":"^7.20.6","eslint-plugin-react-hooks":"^4.0.0","jest":"^26.4.2"},"gitHead":"3066f9edc1900738fd44e9fba2fffcfd7355f322","_id":"@afazzdev/slider-captcha-core@1.0.0","_nodeVersion":"16.16.0","_npmVersion":"8.11.0","dist":{"integrity":"sha512-tH+9t5nVLZCAK2TBicxZwfJo9JBXJ3d9LVI02LE9VVU8ckRyW+HiQD4+AxOuVlUJSy4XxJBbwrhH5iVR6SikFg==","shasum":"43c50e5b4cfd7a0f03b1235be694693b21cfb4d6","tarball":"https://registry.npmjs.org/@afazzdev/slider-captcha-core/-/slider-captcha-core-1.0.0.tgz","fileCount":3,"unpackedSize":4613,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBwovQpjSqXLQBnkU7qx0TnHYDXL1rB4kL9RjvnLzC7TAiEAkyS3C5pFpfIc5Equa7njhJI37jvJuvU0wmbmqIX5Cmg="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi6jx4ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpIIA/9EnBGjQTTjB5ZKDfMHtx9EEz5JHFaSlcasGxL4sAGSCJFXujN\r\neMgW324z5bZI5bil016Axj3+/TvuM1lyActXwr9OLizMGJMVWl1m1Jf2Nwxp\r\nI0Ujs2vRYm9M0Gs4JLQOWZaR4t1ijnBpyduJ634HW1dWE/4JdYzNWyL2lyZu\r\nyYKqsUvs5Ae3s8ZaL8tkQ3Ro1vcZwKDoCALJIqrA1IM/9uFdly0RVokUjmWu\r\nG2veKZw5WiZMtIYZ8pZfJpmyEY9OpsIr/qTFh3hhB4uZbyHNwgZxAKu/FbPH\r\nZj4ukqrkqjkUjQGFyFvlD95CyK8X1+ItSUUiYVKf6Xj0F6RBsR2LtFP6fQPV\r\nER5XctoyVSm3S1fTgl8ZU0rLBpenB5zFQcstNrPUPz1gAlWW1TFf8u963rqi\r\nF30ZwDJv+qwugHqOjRJUsjWNueqmb4L2r11q6FBS16uXm+dnGIjXGWhy/JbS\r\n5ga232uNXDUCxGQjXQNeWLhhhs8lDTfy790CN8y9fQ12etPDp6tyOKGXpt8A\r\nVbGstjcdsVYTpNlmVmCxNYPebCQ+QfktYEbLTDldlomNrtEO4MiDodKA0KRP\r\nR4ZlJOOI+NVJsn1w5Teh3HwJh994AoUVhs0b9zUBVJG0DZzIdlNvKCrZr5CY\r\nBM9SSJjCh/3+CdndImiCVzFp6J1b36cfmWI=\r\n=SXcq\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"afazzdev","email":"afaizi1999@gmail.com"},"directories":{},"maintainers":[{"name":"afazzdev","email":"afaizi1999@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/slider-captcha-core_1.0.0_1659518072644_0.7260838094579618"},"_hasShrinkwrap":false},"1.0.1":{"name":"@afazzdev/slider-captcha-core","version":"1.0.1","description":"User-friendly puzzle slider captcha for React and Express","main":"index.js","scripts":{"test":"jest","lint":"eslint ./","fix":"eslint --fix ./","babel":"babel src -d ./lib --ignore '**/*.test.js'","build":"npm run lint && npm run babel"},"repository":{"type":"git","url":"git+https://github.com/adrsch/slider-captcha.git"},"keywords":["react","slider","captcha","component","puzzle","slide","express"],"author":{"name":"adrsch"},"license":"MIT","bugs":{"url":"https://github.com/adrsch/slider-captcha/issues"},"homepage":"https://github.com/adrsch/slider-captcha#readme","dependencies":{"prop-types":"^15.7.2","sharp":"^0.25.4","uid-safe":"^2.1.5"},"devDependencies":{"@babel/cli":"^7.10.5","@babel/core":"^7.11.1","@babel/preset-env":"^7.11.0","@babel/preset-react":"^7.10.4","eslint":"^7.2.0","eslint-config-airbnb":"^18.2.0","eslint-plugin-import":"^2.22.0","eslint-plugin-jsx-a11y":"^6.3.1","eslint-plugin-react":"^7.20.6","eslint-plugin-react-hooks":"^4.0.0","jest":"^26.4.2"},"gitHead":"3066f9edc1900738fd44e9fba2fffcfd7355f322","_id":"@afazzdev/slider-captcha-core@1.0.1","_nodeVersion":"16.16.0","_npmVersion":"8.11.0","dist":{"integrity":"sha512-r4jrkAvOtpJETgGi3OfKfYtnEvLKYPdHD8BQI3VySDFf67lO33VAZu9lg1EjiEbsBr5XImeHNJwApeg6g8RWJA==","shasum":"0802f7999381677b9a8f28de56bc326397b0821a","tarball":"https://registry.npmjs.org/@afazzdev/slider-captcha-core/-/slider-captcha-core-1.0.1.tgz","fileCount":9,"unpackedSize":32242,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDivAZ+VicP143dPkCCvIfDE5D2QUa67wzxKWb8OvEM7wIgaiyKIxyA/K0hjwetOHX2G8Skih1kiyVBE0G9lOMxx3c="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi6j7GACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmr/Gg//fJq4nI7OGDWAh3nPfwvSjLM4mZDJ+ddpTLKlSpYCBrk2QL5z\r\nJ2lawaiGQJ0wwrccBWtCIBSm6uKQ3lNlQ8nFrquofLHztRJ2WqWhmRoqYSWw\r\nbianETvWH5gPvDlQicmM1KmcvOtOYBu9UP6iCm0kkoL7t8gYMeLq0mED1NEA\r\nfGp8vZCt8hHfG4boiJ24DyTIU5W9hv8mLMVHiL6G6EUnzIiS/ytcREg45GSf\r\nJD+6fj/dmy34WabcqJwArXqiE2ra79Sfgou5c9mY7BvjxR87aPcD2eTSDsMg\r\nFkQke5pUEVep1DP/EpRNfmO/dogRoyoQ5+6/apDJs04xriuBo+nd0tzt3yxF\r\nYPQ/EIVaSzMoM9otfB6SJasRyulegE5OAbXTs76dYlZrP9/hU4nFpuYXKBJ7\r\nSOJPNUVl97FynnsUZyO7FISdSG01BEpSfF4f9/1/NRwt7NxDWyFnabqVfB/E\r\nie5QXZIhV9G2gdHBlzDLNPxvOHjLcJ8w8Wxsbrkbm77kaKVX2nqEKi8OOOzS\r\nCPspbhll+Tpo71T8qbg0Rw9en8LOtheoggT4Rhdpia21QC+EnaRXrNFW6p1G\r\nx2kVMP00tcMVItXLyE94W7D2ZFwmZRuzkoykleG6KXHPmK8F7OKwSNKuCXoK\r\nbm+2ZRL1UkveGZauYsAN51fHaVzv2DLhSug=\r\n=8sAx\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"afazzdev","email":"afaizi1999@gmail.com"},"directories":{},"maintainers":[{"name":"afazzdev","email":"afaizi1999@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/slider-captcha-core_1.0.1_1659518662413_0.6739005338032489"},"_hasShrinkwrap":false}},"time":{"created":"2022-08-03T09:14:32.568Z","1.0.0":"2022-08-03T09:14:32.937Z","modified":"2022-08-03T09:24:22.706Z","1.0.1":"2022-08-03T09:24:22.626Z"},"maintainers":[{"name":"afazzdev","email":"afaizi1999@gmail.com"}],"description":"User-friendly puzzle slider captcha for React and Express","homepage":"https://github.com/adrsch/slider-captcha#readme","keywords":["react","slider","captcha","component","puzzle","slide","express"],"repository":{"type":"git","url":"git+https://github.com/adrsch/slider-captcha.git"},"author":{"name":"adrsch"},"bugs":{"url":"https://github.com/adrsch/slider-captcha/issues"},"license":"MIT","readme":"# @slider-captcha\nGenerate a puzzle slider captcha and display with React component.\\\n![](https://raw.githubusercontent.com/adrsch/slider-captcha/master/demo.gif)\n## Installation\nReact frontend:\n```\nnpm i @slider-captcha/react\n```\nBackend:\n```\nnpm i @slider-captcha/core\n```\n## Usage\nReact:\n```\nimport SliderCaptcha from '@slider-captcha/react';\n\nfunction verifiedCallback(token) {\n  console.log('Captcha token: ' + token);\n}\n\nfunction App() {\n  return (\n    <SliderCaptcha\n      create=\"https://example.com/captcha/create\"\n      verify=\"https://example.com/captcha/verify\"\n      callback={verifiedCallback}\n    />\n  );\n}\n```\nExpress:\n```\nvar sliderCaptcha = require('@slider-captcha/core');\n\napp.get('/captcha/create', function (req, res) {\n  sliderCaptcha.create()\n    .then(function ({data, solution}) {\n      req.session.captcha = solution;\n      req.session.save();\n      res.status(200).send(data);\n    });\n});\n\napp.post('/captcha/verify', function (req, res) {\n  sliderCaptcha.verify(req.session.captcha, req.body)\n    .then(function (verification) {\n      if (verification.result === 'success') {\n        req.session.token = verification.token;\n        req.session.save();\n      }\n      res.status(200).send(verification);\n    });\n});\n```\n### React component props\n\n| Name | Type | Default | Description |\n|:---- | ---- | ---- | ------ |\n| callback | func | `(token) => console.log(token)` | Called with token on successful verification |\n| create | string or func | `captcha/create` | Either the URL to fetch data from or a `function ()` returning a promise which resolves with `{ background, slider }` as PNG buffers |\n| verify | string or func | `captcha/verify` | Either the URL to fetch data from or a `function (response, trail)` returning a promise which resolves with `{ result, token }` |\n| text | { anchor: string, challenge: string } | `{ anchor: 'I am human', challenge: 'Slide to finish the puzzle' }` | Text used for captcha |\n| variant | string | `light` | Use `'light'` for light theme, `'dark'` for dark theme |\n\nLight:\\\n![](https://raw.githubusercontent.com/adrsch/slider-captcha/master/light.png)\\\nDark:\\\n![](https://raw.githubusercontent.com/adrsch/slider-captcha/master/dark.png)\n\n### Create captcha options\n`sliderCaptcha.create({option: value})`\n\n| Name | Type | Default | Description |\n|:---- | ---- | ---- | ------ |\n| image | buffer | randomly generated pattern | Background image used for captcha - resized to 250x150 |\n| fill | string | `#000` | Color used in overlay of puzzle piece on background |\n| stroke | string | `#fff` | Color for outline of puzzle piece |\n| strokeWidth | string | `0.4` | Puzzle piece outline width |\n| opacity | string | `0.5` | Opacity of puzzle piece overlay on background |\n| distort | bool | false | Apply distortion to the puzzle piece |\n| rotate | bool | false | Apply a random rotation to the puzzle piece |\n\nWith rotation and distortion: \\\n![](https://raw.githubusercontent.com/adrsch/slider-captcha/master/distortrotate.png)\n\n### Verify captcha options\n`sliderCaptcha.verify(captcha, {response, trail: {x, y}}, {option: value})`\n\n\n| Name | Type | Default | Description |\n|:---- | ---- | ---- | ------ |\n| tolerance | number | 7 | Allowed deviation from true captcha value |\n","readmeFilename":"README.md"}