{"_id":"@anilkumarthakur/vue3-recaptcha","_rev":"11-1dc7f2361c3ddffc2b62d7813e996846","name":"@anilkumarthakur/vue3-recaptcha","dist-tags":{"latest":"1.0.0"},"versions":{"0.0.1":{"name":"@anilkumarthakur/vue3-recaptcha","version":"0.0.1","_id":"@anilkumarthakur/vue3-recaptcha@0.0.1","maintainers":[{"name":"anilkumarthakur","email":"anilkumarthakur60@gmail.com"}],"dist":{"shasum":"f5020f78d44f5f80e66b500ea60284acc8ebb94a","tarball":"https://registry.npmjs.org/@anilkumarthakur/vue3-recaptcha/-/vue3-recaptcha-0.0.1.tgz","fileCount":11,"integrity":"sha512-XgOeK4jkDPLMahbdpNK5kbK3xdwulO4x9DdEJfzIH9kD0WeaSIOmQWdWehE1aNSCfTAWpyf9vt62FSi8KRSskA==","signatures":[{"sig":"MEUCID2G4WFTADLXS0vIOU1lvp2XH86NEY20wVWvpcx+Coq9AiEAgU0U9sRfkkEclMKajQX0ZIxIefm6oiO9A5YYYsKvbbc=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":17221},"main":"dist/index.umd.js","type":"module","types":"dist/index.d.ts","module":"dist/index.es.js","browser":{"./styles.css":"./dist/index.css"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.es.js","require":"./dist/index.umd.js"},"./styles.css":"./dist/index.css"},"gitHead":"2479bf9618463c42cb3f02038db5f9392f2787a7","private":false,"scripts":{"dev":"vite --config vite.config.prod.ts","lint":"eslint . --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .gitignore","build":"vue-tsc && vite build","format":"prettier --write src/","preview":"vite preview","test:e2e":"start-server-and-test preview http://localhost:4173 'cypress run --e2e'","test:unit":"vitest","build-only":"vite build","build:prod":"vue-tsc && vite build --config vite.config.prod.ts","type-check":"vue-tsc --build --force","test:e2e:dev":"start-server-and-test 'vite dev --port 4173' http://localhost:4173 'cypress open --e2e'"},"_npmUser":{"name":"anilkumarthakur","email":"anilkumarthakur60@gmail.com"},"_npmVersion":"10.8.3","description":"This template should help get you started developing with Vue 3 in Vite.","directories":{},"_nodeVersion":"22.9.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^5.3.1","jsdom":"^24.1.0","eslint":"^8.57.0","vitest":"^1.6.0","cypress":"^13.12.0","vue-tsc":"^2.0.21","prettier":"^3.2.5","typescript":"~5.4.0","@types/node":"^20.14.5","@types/jsdom":"^21.1.7","npm-run-all2":"^6.2.0","@vue/tsconfig":"^0.5.1","sass-embedded":"^1.79.4","@vue/test-utils":"^2.4.6","vite-plugin-dts":"^4.2.4","@tsconfig/node20":"^20.1.4","eslint-plugin-vue":"^9.23.0","@vitejs/plugin-vue":"^5.0.5","eslint-plugin-cypress":"^3.3.0","start-server-and-test":"^2.0.4","@vitejs/plugin-vue-jsx":"^4.0.0","@rushstack/eslint-patch":"^1.8.0","vite-plugin-vue-devtools":"^7.3.1","@vue/eslint-config-prettier":"^9.0.0","@vue/eslint-config-typescript":"^13.0.0"},"peerDependencies":{"vue":"^3.4.29","axios":"^1.7.7","pinia":"^2.1.7","vue-router":"^4.3.3"},"_npmOperationalInternal":{"tmp":"tmp/vue3-recaptcha_0.0.1_1729434577187_0.8641022723202687","host":"s3://npm-registry-packages"}},"0.0.2":{"name":"@anilkumarthakur/vue3-recaptcha","version":"0.0.2","_id":"@anilkumarthakur/vue3-recaptcha@0.0.2","maintainers":[{"name":"anilkumarthakur","email":"anilkumarthakur60@gmail.com"}],"dist":{"shasum":"a2c129922407ee4c6ed5780cdb758ec77f3c0a5b","tarball":"https://registry.npmjs.org/@anilkumarthakur/vue3-recaptcha/-/vue3-recaptcha-0.0.2.tgz","fileCount":11,"integrity":"sha512-XkI9p3OfkOiqDe0xfOiYuBeruf+YjWha5qFckZOlKAq/R6f/ocfAthdZK+Z3hn4kN2OzTf9wmwTAQ+yr/quFKQ==","signatures":[{"sig":"MEYCIQDJjyRZ5den3vL2+sLGgl+vEGyWZjKxVtXxB3zz+pY74AIhAKjQN23r3BKVHDtNnqfSxVADoNWiPpyDp+Foim0XxUmh","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":17260},"main":"dist/index.umd.js","type":"module","types":"dist/index.d.ts","module":"dist/index.es.js","browser":{"./styles.css":"./dist/index.css"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.es.js","require":"./dist/index.umd.js"},"./styles.css":"./dist/index.css"},"gitHead":"2479bf9618463c42cb3f02038db5f9392f2787a7","private":false,"scripts":{"dev":"vite --config vite.config.prod.ts","lint":"eslint . --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .gitignore","build":"vue-tsc && vite build","format":"prettier --write src/","preview":"vite preview","test:e2e":"start-server-and-test preview http://localhost:4173 'cypress run --e2e'","test:unit":"vitest","build-only":"vite build","build:prod":"vue-tsc && vite build --config vite.config.prod.ts","type-check":"vue-tsc --build --force","test:e2e:dev":"start-server-and-test 'vite dev --port 4173' http://localhost:4173 'cypress open --e2e'"},"_npmUser":{"name":"anilkumarthakur","email":"anilkumarthakur60@gmail.com"},"_npmVersion":"10.8.3","description":"This template should help get you started developing with Vue 3 in Vite.","directories":{},"_nodeVersion":"22.9.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^5.3.1","jsdom":"^24.1.0","eslint":"^8.57.0","vitest":"^1.6.0","cypress":"^13.12.0","vue-tsc":"^2.0.21","prettier":"^3.2.5","typescript":"~5.4.0","@types/node":"^20.14.5","@types/jsdom":"^21.1.7","npm-run-all2":"^6.2.0","@vue/tsconfig":"^0.5.1","sass-embedded":"^1.79.4","@vue/test-utils":"^2.4.6","vite-plugin-dts":"^4.2.4","@tsconfig/node20":"^20.1.4","eslint-plugin-vue":"^9.23.0","@vitejs/plugin-vue":"^5.0.5","eslint-plugin-cypress":"^3.3.0","start-server-and-test":"^2.0.4","@vitejs/plugin-vue-jsx":"^4.0.0","@rushstack/eslint-patch":"^1.8.0","vite-plugin-vue-devtools":"^7.3.1","@vue/eslint-config-prettier":"^9.0.0","@vue/eslint-config-typescript":"^13.0.0"},"peerDependencies":{"vue":"^3.4.29","axios":"^1.7.7","pinia":"^2.1.7","vue-router":"^4.3.3"},"_npmOperationalInternal":{"tmp":"tmp/vue3-recaptcha_0.0.2_1729434706101_0.3427811397415852","host":"s3://npm-registry-packages"}},"0.0.3":{"name":"@anilkumarthakur/vue3-recaptcha","version":"0.0.3","_id":"@anilkumarthakur/vue3-recaptcha@0.0.3","maintainers":[{"name":"anilkumarthakur","email":"anilkumarthakur60@gmail.com"}],"dist":{"shasum":"f00a8d2f7964c9e8d1e10687c49bcb1cfa261123","tarball":"https://registry.npmjs.org/@anilkumarthakur/vue3-recaptcha/-/vue3-recaptcha-0.0.3.tgz","fileCount":10,"integrity":"sha512-SuUyD0yq8/TIkrq4JhlnKpE7VyOHOi0b0hutNen7GIsDEDRGlJM7lYdg1Grsclg/WljddcpI+3ziF5AZCta65w==","signatures":[{"sig":"MEUCIQCE5Z3QUdH+OVri2NSLgUFDbOMdXLYLk8nbM/4WMukROAIgGBE/7Rx94g7YdAa5eQlxkPnpEptzJk5g9fyRVrP0XR0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":16145},"main":"dist/index.umd.js","type":"module","types":"dist/index.d.ts","module":"dist/index.es.js","browser":{"./styles.css":"./dist/index.css"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.es.js","require":"./dist/index.umd.js"},"./styles.css":"./dist/index.css"},"gitHead":"35e8172ae7eb4f3bc8569d554420647bca47b7b0","private":false,"scripts":{"dev":"vite --config vite.config.prod.ts","lint":"eslint . --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .gitignore","test":"jest","build":"vue-tsc && vite build","format":"prettier --write src/","preview":"vite preview","test:e2e":"start-server-and-test preview http://localhost:4173 'cypress run --e2e'","test:unit":"vitest","build-only":"vite build","build:prod":"vue-tsc && vite build --config vite.config.prod.ts","type-check":"vue-tsc --build --force","test:e2e:dev":"start-server-and-test 'vite dev --port 4173' http://localhost:4173 'cypress open --e2e'"},"_npmUser":{"name":"anilkumarthakur","email":"anilkumarthakur60@gmail.com"},"_npmVersion":"10.8.3","description":"This template should help get you started developing with Vue 3 in Vite.","directories":{},"_nodeVersion":"22.9.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","vite":"^5.3.1","jsdom":"^24.1.0","eslint":"^8.57.0","vitest":"^1.6.0","cypress":"^13.12.0","ts-jest":"^29.2.5","ts-node":"^10.9.2","vue-tsc":"^2.0.21","prettier":"^3.2.5","typescript":"~5.4.0","@types/jest":"^29.5.14","@types/node":"^20.14.5","@types/jsdom":"^21.1.7","npm-run-all2":"^6.2.0","@vue/tsconfig":"^0.5.1","sass-embedded":"^1.79.4","@vue/test-utils":"^2.4.6","vite-plugin-dts":"^4.2.4","@tsconfig/node20":"^20.1.4","eslint-plugin-vue":"^9.23.0","@vitejs/plugin-vue":"^5.0.5","eslint-plugin-cypress":"^3.3.0","start-server-and-test":"^2.0.4","@vitejs/plugin-vue-jsx":"^4.0.0","jest-environment-jsdom":"^29.7.0","@rushstack/eslint-patch":"^1.8.0","vite-plugin-vue-devtools":"^7.3.1","@vue/eslint-config-prettier":"^9.0.0","@vue/eslint-config-typescript":"^13.0.0"},"peerDependencies":{"vue":"^3.4.29","axios":"^1.7.7","pinia":"^2.1.7","vue-router":"^4.3.3"},"_npmOperationalInternal":{"tmp":"tmp/vue3-recaptcha_0.0.3_1729867666193_0.2422310932584315","host":"s3://npm-registry-packages"}},"0.0.4":{"name":"@anilkumarthakur/vue3-recaptcha","version":"0.0.4","_id":"@anilkumarthakur/vue3-recaptcha@0.0.4","maintainers":[{"name":"anilkumarthakur","email":"anilkumarthakur60@gmail.com"}],"dist":{"shasum":"5923bf1218458dd403521775210d1ba7963b6f5f","tarball":"https://registry.npmjs.org/@anilkumarthakur/vue3-recaptcha/-/vue3-recaptcha-0.0.4.tgz","fileCount":10,"integrity":"sha512-DvDEct1NcqUxMiHIJdfHQ050jrLOLpkRZLhC9f8RUfNCHwxmh7pwv+EGfoMS7476MsOVL1wGTKw0GD5wtSAhKw==","signatures":[{"sig":"MEQCIEPynE7AlgWdmOddfHQXGY0Ja9laA0rwRXjWBR3PkhFSAiAWZTU+5p5Rg6RouE5YkRHJIyk9gXiqdwEQ6bIoTVyqYw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":16684},"main":"dist/index.umd.js","type":"module","types":"dist/index.d.ts","module":"dist/index.es.js","browser":{"./styles.css":"./dist/index.css"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.es.js","require":"./dist/index.umd.js"},"./styles.css":"./dist/index.css"},"gitHead":"35e8172ae7eb4f3bc8569d554420647bca47b7b0","private":false,"scripts":{"dev":"vite --config vite.config.prod.ts","lint":"eslint . --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .gitignore","test":"jest","build":"vue-tsc && vite build","format":"prettier --write src/","preview":"vite preview","test:e2e":"start-server-and-test preview http://localhost:4173 'cypress run --e2e'","test:unit":"vitest","build-only":"vite build","build:prod":"vue-tsc && vite build --config vite.config.prod.ts","type-check":"vue-tsc --build --force","test:e2e:dev":"start-server-and-test 'vite dev --port 4173' http://localhost:4173 'cypress open --e2e'"},"_npmUser":{"name":"anilkumarthakur","email":"anilkumarthakur60@gmail.com"},"_npmVersion":"10.8.3","description":"This template should help get you started developing with Vue 3 in Vite.","directories":{},"_nodeVersion":"22.9.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","vite":"^5.3.1","jsdom":"^24.1.0","eslint":"^8.57.0","vitest":"^1.6.0","cypress":"^13.12.0","ts-jest":"^29.2.5","ts-node":"^10.9.2","vue-tsc":"^2.0.21","prettier":"^3.2.5","typescript":"~5.4.0","@types/jest":"^29.5.14","@types/node":"^20.14.5","@types/jsdom":"^21.1.7","npm-run-all2":"^6.2.0","@vue/tsconfig":"^0.5.1","sass-embedded":"^1.79.4","@vue/test-utils":"^2.4.6","vite-plugin-dts":"^4.2.4","@tsconfig/node20":"^20.1.4","eslint-plugin-vue":"^9.23.0","@vitejs/plugin-vue":"^5.0.5","eslint-plugin-cypress":"^3.3.0","start-server-and-test":"^2.0.4","@vitejs/plugin-vue-jsx":"^4.0.0","jest-environment-jsdom":"^29.7.0","@rushstack/eslint-patch":"^1.8.0","vite-plugin-vue-devtools":"^7.3.1","@vue/eslint-config-prettier":"^9.0.0","@vue/eslint-config-typescript":"^13.0.0"},"peerDependencies":{"vue":"^3.4.29","axios":"^1.7.7","pinia":"^2.1.7","vue-router":"^4.3.3"},"_npmOperationalInternal":{"tmp":"tmp/vue3-recaptcha_0.0.4_1729867847213_0.5851516446394411","host":"s3://npm-registry-packages"}},"0.0.5":{"name":"@anilkumarthakur/vue3-recaptcha","version":"0.0.5","_id":"@anilkumarthakur/vue3-recaptcha@0.0.5","maintainers":[{"name":"anilkumarthakur","email":"anilkumarthakur60@gmail.com"}],"dist":{"shasum":"4391223fd554f3fa05baece693d842ea75dc81d5","tarball":"https://registry.npmjs.org/@anilkumarthakur/vue3-recaptcha/-/vue3-recaptcha-0.0.5.tgz","fileCount":10,"integrity":"sha512-3apbVK6DzjfG4J7KJ3zNkiqk/PhvrPIheFvfPqeYHKfhSxl6V54DjKwCVRkvlmmgk/rg5U55E4ymghadWVvs3w==","signatures":[{"sig":"MEUCIBO81qb9+QboBGcLVDup4pd2bvZL6fjdMCH+WGx6LG5ZAiEAxgkm61w1+oVhREYP9lAkOF2P9xz3pvtL/DaWF/hyX4Y=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":20201},"main":"dist/index.umd.js","type":"module","types":"dist/index.d.ts","module":"dist/index.es.js","browser":{"./styles.css":"./dist/index.css"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.es.js","require":"./dist/index.umd.js"},"./styles.css":"./dist/index.css"},"gitHead":"79f32a8ab06f06367d71620a1706bf1480308263","private":false,"scripts":{"dev":"vite --config vite.config.prod.ts","lint":"eslint . --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .gitignore","test":"jest","build":"vue-tsc && vite build","format":"prettier --write src/","preview":"vite preview","test:e2e":"start-server-and-test preview http://localhost:4173 'cypress run --e2e'","test:unit":"vitest","build-only":"vite build","build:prod":"vue-tsc && vite build --config vite.config.prod.ts","type-check":"vue-tsc --build --force","test:e2e:dev":"start-server-and-test 'vite dev --port 4173' http://localhost:4173 'cypress open --e2e'"},"_npmUser":{"name":"anilkumarthakur","email":"anilkumarthakur60@gmail.com"},"_npmVersion":"10.8.3","description":"This plugin provides a Vue 3 component and plugin for integrating Google reCAPTCHA V3. The plugin enables easy reCAPTCHA token generation, management, and configuration within a Vue 3 application.","directories":{},"_nodeVersion":"22.9.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","vite":"^5.3.1","jsdom":"^24.1.0","eslint":"^8.57.0","vitest":"^1.6.0","cypress":"^13.12.0","ts-jest":"^29.2.5","ts-node":"^10.9.2","vue-tsc":"^2.0.21","prettier":"^3.2.5","typescript":"~5.4.0","@types/jest":"^29.5.14","@types/node":"^20.14.5","@types/jsdom":"^21.1.7","npm-run-all2":"^6.2.0","@vue/tsconfig":"^0.5.1","sass-embedded":"^1.79.4","@vue/test-utils":"^2.4.6","vite-plugin-dts":"^4.2.4","@tsconfig/node20":"^20.1.4","eslint-plugin-vue":"^9.23.0","@vitejs/plugin-vue":"^5.0.5","eslint-plugin-cypress":"^3.3.0","start-server-and-test":"^2.0.4","@vitejs/plugin-vue-jsx":"^4.0.0","jest-environment-jsdom":"^29.7.0","@rushstack/eslint-patch":"^1.8.0","vite-plugin-vue-devtools":"^7.3.1","@vue/eslint-config-prettier":"^9.0.0","@vue/eslint-config-typescript":"^13.0.0"},"peerDependencies":{"vue":"^3.4.29","axios":"^1.7.7","pinia":"^2.1.7","vue-router":"^4.3.3"},"_npmOperationalInternal":{"tmp":"tmp/vue3-recaptcha_0.0.5_1729868834543_0.13378225333605243","host":"s3://npm-registry-packages"}},"0.0.6":{"name":"@anilkumarthakur/vue3-recaptcha","version":"0.0.6","keywords":["recaptcha","google-recaptcha","vue-recaptcha","vue3-recaptcha","captcha","verification","recaptcha-v3","vue3-recaptcha","vue3-recaptcha-v3"],"_id":"@anilkumarthakur/vue3-recaptcha@0.0.6","maintainers":[{"name":"anilkumarthakur","email":"anilkumarthakur60@gmail.com"}],"dist":{"shasum":"da65b47720867716d739bb76100e64ed0dad1933","tarball":"https://registry.npmjs.org/@anilkumarthakur/vue3-recaptcha/-/vue3-recaptcha-0.0.6.tgz","fileCount":10,"integrity":"sha512-YQrG4JWPfhSNn+7lpBOjq0vSWVv1Pl6BfHpJBgywgMa1PCzUlRRRp39UzXtViEzHF5eDcL8LWhNeRHefNJnJwQ==","signatures":[{"sig":"MEQCIESuls6hmTmet/aukZ+lZjkWGBUf3HSwQPmSpElSbY2NAiBEyJgg1dugJAQBYPeAiRYXam4DJtj0Qg38iCrK1yCyOA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":20407},"main":"dist/index.umd.js","type":"module","types":"dist/index.d.ts","module":"dist/index.es.js","browser":{"./styles.css":"./dist/index.css"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.es.js","require":"./dist/index.umd.js"},"./styles.css":"./dist/index.css"},"gitHead":"cc3850632a4f6ebe8e6d520df7418acf30ee1a20","private":false,"scripts":{"dev":"vite --config vite.config.prod.ts","lint":"eslint . --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .gitignore","test":"jest","build":"vue-tsc && vite build","format":"prettier --write src/","preview":"vite preview","test:e2e":"start-server-and-test preview http://localhost:4173 'cypress run --e2e'","test:unit":"vitest","build-only":"vite build","build:prod":"vue-tsc && vite build --config vite.config.prod.ts","type-check":"vue-tsc --build --force","test:e2e:dev":"start-server-and-test 'vite dev --port 4173' http://localhost:4173 'cypress open --e2e'"},"_npmUser":{"name":"anilkumarthakur","email":"anilkumarthakur60@gmail.com"},"_npmVersion":"10.8.3","description":"This plugin provides a Vue 3 component and plugin for integrating Google reCAPTCHA V3. The plugin enables easy reCAPTCHA token generation, management, and configuration within a Vue 3 application.","directories":{},"_nodeVersion":"22.9.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","vite":"^5.3.1","jsdom":"^24.1.0","eslint":"^8.57.0","vitest":"^1.6.0","cypress":"^13.12.0","ts-jest":"^29.2.5","ts-node":"^10.9.2","vue-tsc":"^2.0.21","prettier":"^3.2.5","typescript":"~5.4.0","@types/jest":"^29.5.14","@types/node":"^20.14.5","@types/jsdom":"^21.1.7","npm-run-all2":"^6.2.0","@vue/tsconfig":"^0.5.1","sass-embedded":"^1.79.4","@vue/test-utils":"^2.4.6","vite-plugin-dts":"^4.2.4","@tsconfig/node20":"^20.1.4","eslint-plugin-vue":"^9.23.0","@vitejs/plugin-vue":"^5.0.5","eslint-plugin-cypress":"^3.3.0","start-server-and-test":"^2.0.4","@vitejs/plugin-vue-jsx":"^4.0.0","jest-environment-jsdom":"^29.7.0","@rushstack/eslint-patch":"^1.8.0","vite-plugin-vue-devtools":"^7.3.1","@vue/eslint-config-prettier":"^9.0.0","@vue/eslint-config-typescript":"^13.0.0"},"peerDependencies":{"vue":"^3.4.29","axios":"^1.7.7","pinia":"^2.1.7","vue-router":"^4.3.3"},"_npmOperationalInternal":{"tmp":"tmp/vue3-recaptcha_0.0.6_1730640131657_0.9611341571536167","host":"s3://npm-registry-packages"}},"0.0.7":{"name":"@anilkumarthakur/vue3-recaptcha","version":"0.0.7","keywords":["recaptcha","google-recaptcha","vue-recaptcha","vue3-recaptcha","captcha","verification","recaptcha-v3","vue3-recaptcha","vue3-recaptcha-v3"],"_id":"@anilkumarthakur/vue3-recaptcha@0.0.7","maintainers":[{"name":"anilkumarthakur","email":"anilkumarthakur60@gmail.com"}],"dist":{"shasum":"998bdb71389417dc88207152add0b8d94ad033c9","tarball":"https://registry.npmjs.org/@anilkumarthakur/vue3-recaptcha/-/vue3-recaptcha-0.0.7.tgz","fileCount":2,"integrity":"sha512-vF/u19sWu6X3sBuxZRHnZ/VZXLZXTOcT6yn/wbjM/pcZ/zIvLKNGYZ0ltezioIc07Zfm0o8lkXpm7rrfGUUfrQ==","signatures":[{"sig":"MEYCIQClx9G0cnqXVJjWKM9OkvBmlyTSpPlNMeUuuOldDtjSpAIhAKbu+5ps1bVdnOE3gf/kugXkbA2l03y+QpcbyJaqi7Kh","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":7044},"main":"dist/index.umd.js","type":"module","types":"dist/index.d.ts","module":"dist/index.es.js","browser":{"./styles.css":"./dist/index.css"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.es.js","require":"./dist/index.umd.js"},"./styles.css":"./dist/index.css"},"gitHead":"c1c7f81850bb5642df31aa48cc71b30e4989d9c8","private":false,"scripts":{"dev":"vite --config vite.config.prod.ts","lint":"eslint . --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .gitignore","test":"jest","build":"vue-tsc && vite build","format":"prettier --write src/","preview":"vite preview","test:e2e":"start-server-and-test preview http://localhost:4173 'cypress run --e2e'","test:unit":"vitest","build-only":"vite build","build:prod":"vue-tsc && vite build --config vite.config.prod.ts","type-check":"vue-tsc --build --force","test:e2e:dev":"start-server-and-test 'vite dev --port 4173' http://localhost:4173 'cypress open --e2e'"},"_npmUser":{"name":"anilkumarthakur","email":"anilkumarthakur60@gmail.com"},"_npmVersion":"11.0.0","description":"This plugin provides a Vue 3 component and plugin for integrating Google reCAPTCHA V3. The plugin enables easy reCAPTCHA token generation, management, and configuration within a Vue 3 application.","directories":{},"_nodeVersion":"22.11.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","vite":"^5.3.1","jsdom":"^24.1.0","eslint":"^8.57.0","vitest":"^1.6.0","cypress":"^13.12.0","ts-jest":"^29.2.5","ts-node":"^10.9.2","vue-tsc":"^2.0.21","prettier":"^3.2.5","typescript":"~5.4.0","@types/jest":"^29.5.14","@types/node":"^20.14.5","@types/jsdom":"^21.1.7","npm-run-all2":"^6.2.0","@vue/tsconfig":"^0.5.1","sass-embedded":"^1.79.4","@vue/test-utils":"^2.4.6","vite-plugin-dts":"^4.2.4","@tsconfig/node20":"^20.1.4","eslint-plugin-vue":"^9.23.0","@vitejs/plugin-vue":"^5.0.5","eslint-plugin-cypress":"^3.3.0","start-server-and-test":"^2.0.4","@vitejs/plugin-vue-jsx":"^4.0.0","jest-environment-jsdom":"^29.7.0","@rushstack/eslint-patch":"^1.8.0","vite-plugin-vue-devtools":"^7.3.1","@vue/eslint-config-prettier":"^9.0.0","@vue/eslint-config-typescript":"^13.0.0"},"peerDependencies":{"vue":"^3.4.29","axios":"^1.7.7","pinia":"^2.1.7","vue-router":"^4.3.3"},"_npmOperationalInternal":{"tmp":"tmp/vue3-recaptcha_0.0.7_1739943910161_0.08278148277123942","host":"s3://npm-registry-packages-npm-production"}},"0.0.8":{"name":"@anilkumarthakur/vue3-recaptcha","version":"0.0.8","keywords":["recaptcha","google-recaptcha","vue-recaptcha","vue3-recaptcha","captcha","verification","recaptcha-v3","vue3-recaptcha","vue3-recaptcha-v3"],"_id":"@anilkumarthakur/vue3-recaptcha@0.0.8","maintainers":[{"name":"anilkumarthakur","email":"anilkumarthakur60@gmail.com"}],"dist":{"shasum":"ba88dc14d9819077bc26e02d2a9bd04f5d724f00","tarball":"https://registry.npmjs.org/@anilkumarthakur/vue3-recaptcha/-/vue3-recaptcha-0.0.8.tgz","fileCount":10,"integrity":"sha512-i8zh34ITIqG7i+lSBnoWo/BI/xYzz8ibbxv7JUXK2f/d9BOZug/PTlwplx4VJk45oRsYTf8hwycUgbUu9nDCZA==","signatures":[{"sig":"MEQCIHjGfyLhPPpmxxLL7R2EV+Fkpk0FLoEH/oDIgzSqsYmbAiB1D8jLOtfwB/UMK1htSNNqMfNyKD39sM0yreKogTFBww==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":20505},"main":"dist/index.umd.js","type":"module","types":"dist/index.d.ts","module":"dist/index.es.js","browser":{"./styles.css":"./dist/index.css"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.es.js","require":"./dist/index.umd.js"},"./styles.css":"./dist/index.css"},"gitHead":"bee51f966ce6b5c20922ba5f7420c18971f7d896","private":false,"scripts":{"dev":"vite --config vite.config.prod.ts","lint":"eslint . --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .gitignore","test":"jest","build":"vue-tsc && vite build","format":"prettier --write src/","preview":"vite preview","test:e2e":"start-server-and-test preview http://localhost:4173 'cypress run --e2e'","test:unit":"vitest","build-only":"vite build","build:prod":"vue-tsc && vite build --config vite.config.prod.ts","type-check":"vue-tsc --build --force","test:e2e:dev":"start-server-and-test 'vite dev --port 4173' http://localhost:4173 'cypress open --e2e'"},"_npmUser":{"name":"anilkumarthakur","email":"anilkumarthakur60@gmail.com"},"_npmVersion":"11.0.0","description":"This plugin provides a Vue 3 component and plugin for integrating Google reCAPTCHA V3. The plugin enables easy reCAPTCHA token generation, management, and configuration within a Vue 3 application.","directories":{},"_nodeVersion":"22.11.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.0.0","vite":"^6.3.5","axios":"^1.9.0","jsdom":"^26.1.0","pinia":"^3.0.3","eslint":"^9.29.0","vitest":"^3.2.3","cypress":"^14.4.1","ts-jest":"^29.4.0","ts-node":"^10.9.2","vue-tsc":"^2.2.10","prettier":"^3.5.3","typescript":"~5.8.3","vue-router":"^4.5.1","@types/jest":"^29.5.14","@types/node":"^24.0.1","@types/jsdom":"^21.1.7","npm-run-all2":"^8.0.4","@vue/tsconfig":"^0.7.0","sass-embedded":"^1.89.2","@vue/test-utils":"^2.4.6","vite-plugin-dts":"^4.5.4","@tsconfig/node20":"^20.1.6","eslint-plugin-vue":"^10.2.0","@vitejs/plugin-vue":"^5.2.4","eslint-plugin-cypress":"^5.1.0","start-server-and-test":"^2.0.12","@vitejs/plugin-vue-jsx":"^4.2.0","jest-environment-jsdom":"^30.0.0","@rushstack/eslint-patch":"^1.11.0","vite-plugin-vue-devtools":"^7.7.6","@vue/eslint-config-prettier":"^10.2.0","@vue/eslint-config-typescript":"^14.5.0"},"peerDependencies":{"vue":"^3.4.29"},"_npmOperationalInternal":{"tmp":"tmp/vue3-recaptcha_0.0.8_1749877162615_0.9376076043509203","host":"s3://npm-registry-packages-npm-production"}},"0.0.9":{"name":"@anilkumarthakur/vue3-recaptcha","version":"0.0.9","keywords":["recaptcha","google-recaptcha","recaptcha-v2","recaptcha-v3","vue","vue3","vue3-recaptcha","captcha","verification","security","typescript"],"author":{"name":"Anil Kumar Thakur"},"license":"MIT","_id":"@anilkumarthakur/vue3-recaptcha@0.0.9","maintainers":[{"name":"anilkumarthakur","email":"anilkumarthakur60@gmail.com"}],"homepage":"https://github.com/anilkumarthakur/vue3-recaptcha#readme","bugs":{"url":"https://github.com/anilkumarthakur/vue3-recaptcha/issues"},"dist":{"shasum":"0dc9fc55303111bdbab4c6b49435acb2d2c589a5","tarball":"https://registry.npmjs.org/@anilkumarthakur/vue3-recaptcha/-/vue3-recaptcha-0.0.9.tgz","fileCount":8,"integrity":"sha512-5/vkO09KlU44aRZ+lD7gmIS4FANql1Jt3lZF+uAMaoDOxRiUuAOVSocpIoa2bSb8nql6XAsWFSqPxU9+IAUgZw==","signatures":[{"sig":"MEQCIE+DTQ1I7CKzkaIvOPINPkKTceVtD3nJLphWevZCMiicAiAjLqVwgfipXugYvj96FWd/6nR+sQ3TKhJZVlGJJV6F5Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":69048},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.es.js","engines":{"npm":">=9.0.0","node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.es.js","require":"./dist/index.cjs"},"./package.json":"./package.json"},"gitHead":"ba115854814c9e6fd29c7b1f66a20aec8b4d689b","private":false,"scripts":{"dev":"vite --config vite.config.prod.ts","lint":"eslint src/package --ext .vue,.js,.jsx,.ts,.tsx --fix 2>/dev/null || true","test":"jest --coverage","build":"vue-tsc --noEmit && vite build","format":"prettier --write \"src/package/**/*.{vue,ts,tsx,js,jsx,json,css}\"","preview":"vite preview","version":"npm run format && git add -A","test:e2e":"start-server-and-test preview http://localhost:4173 'cypress run --e2e'","test:unit":"vitest run src/package --no-coverage 2>/dev/null || true","build:prod":"vue-tsc && vite build --config vite.config.prod.ts","type-check":"vue-tsc --noEmit","test:e2e:dev":"start-server-and-test 'vite dev --port 4173' http://localhost:4173 'cypress open --e2e'","prepublishOnly":"npm run build"},"_npmUser":{"name":"anilkumarthakur","email":"anilkumarthakur60@gmail.com"},"repository":{"url":"git+https://github.com/anilkumarthakur/vue3-recaptcha.git","type":"git"},"_npmVersion":"10.9.4","description":"A Vue 3 plugin for Google reCAPTCHA v2 (checkbox & invisible) and v3 integration","directories":{},"_nodeVersion":"22.21.1","dependencies":{},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.4.29","jest":"^30.2.0","vite":"^7.3.1","axios":"^1.13.2","jsdom":"^27.4.0","pinia":"^3.0.4","eslint":"^9.39.2","vitest":"^4.0.17","cypress":"^15.9.0","ts-jest":"^29.4.6","ts-node":"^10.9.2","vue-tsc":"^3.2.2","prettier":"^3.8.0","typescript":"~5.9.3","vue-router":"^4.6.4","@types/jest":"^30.0.0","@types/node":"^25.0.9","@types/jsdom":"^27.0.0","npm-run-all2":"^8.0.4","@vue/tsconfig":"^0.8.1","sass-embedded":"^1.97.2","@vue/test-utils":"^2.4.6","vite-plugin-dts":"^4.5.4","@tsconfig/node20":"^20.1.8","eslint-plugin-vue":"^10.7.0","@vitejs/plugin-vue":"^6.0.3","eslint-plugin-cypress":"^5.2.1","start-server-and-test":"^2.1.3","@vitejs/plugin-vue-jsx":"^5.1.3","jest-environment-jsdom":"^30.2.0","@rushstack/eslint-patch":"^1.15.0","vite-plugin-vue-devtools":"^8.0.5","@vue/eslint-config-prettier":"^10.2.0","@vue/eslint-config-typescript":"^14.6.0"},"peerDependencies":{"vue":"^3.4.0"},"peerDependenciesMeta":{"vue":{"optional":false}},"_npmOperationalInternal":{"tmp":"tmp/vue3-recaptcha_0.0.9_1768793079602_0.38003356066879923","host":"s3://npm-registry-packages-npm-production"}},"0.0.10":{"name":"@anilkumarthakur/vue3-recaptcha","version":"0.0.10","keywords":["recaptcha","google-recaptcha","recaptcha-v2","recaptcha-v3","vue","vue3","vue3-recaptcha","captcha","verification","security","typescript"],"author":{"name":"Anil Kumar Thakur"},"license":"MIT","_id":"@anilkumarthakur/vue3-recaptcha@0.0.10","maintainers":[{"name":"anilkumarthakur","email":"anilkumarthakur60@gmail.com"}],"homepage":"https://github.com/anilkumarthakur60/vue3-recaptcha#readme","bugs":{"url":"https://github.com/anilkumarthakur60/vue3-recaptcha/issues"},"dist":{"shasum":"04731eea9fe0b3536e4b652af86ba75e842e7372","tarball":"https://registry.npmjs.org/@anilkumarthakur/vue3-recaptcha/-/vue3-recaptcha-0.0.10.tgz","fileCount":8,"integrity":"sha512-3Um9/4MibrzKuJ49M2d6UQbqQb80LU8gAiJpmC3tmKwBRU8oTckZ1HLF03cii8lP828XRmC9w9Rfc+PB96jboQ==","signatures":[{"sig":"MEUCIAED/b0P1TjLrwQUr+2PRQY8qBHUzsQUfRSbC92SiZwHAiEAsLhn2txdK0nUyi+AbaqsT6MgJix8Qv8bKO2lxDBaB3g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":69063},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.es.js","engines":{"npm":">=9.0.0","node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.es.js","require":"./dist/index.cjs"},"./package.json":"./package.json"},"gitHead":"c58063afaaa778403bdf437df4b04c31d28f27d8","private":false,"scripts":{"dev":"vite --config vite.config.prod.ts","lint":"eslint src/package --ext .vue,.js,.jsx,.ts,.tsx --fix 2>/dev/null || true","test":"jest --coverage","build":"vue-tsc --noEmit && vite build","format":"prettier --write \"src/package/**/*.{vue,ts,tsx,js,jsx,json,css}\"","preview":"vite preview","version":"npm run format && git add -A","test:e2e":"start-server-and-test preview http://localhost:4173 'cypress run --e2e'","test:unit":"vitest run src/package --no-coverage 2>/dev/null || true","build:prod":"vue-tsc && vite build --config vite.config.prod.ts","type-check":"vue-tsc --noEmit","test:e2e:dev":"start-server-and-test 'vite dev --port 4173' http://localhost:4173 'cypress open --e2e'","prepublishOnly":"npm run build"},"_npmUser":{"name":"anilkumarthakur","email":"anilkumarthakur60@gmail.com"},"repository":{"url":"git+https://github.com/anilkumarthakur60/vue3-recaptcha.git","type":"git"},"_npmVersion":"10.9.4","description":"A Vue 3 plugin for Google reCAPTCHA v2 (checkbox & invisible) and v3 integration","directories":{},"_nodeVersion":"22.22.0","dependencies":{},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.4.29","jest":"^30.2.0","vite":"^7.3.1","axios":"^1.13.2","jsdom":"^27.4.0","pinia":"^3.0.4","eslint":"^9.39.2","vitest":"^4.0.17","cypress":"^15.9.0","ts-jest":"^29.4.6","ts-node":"^10.9.2","vue-tsc":"^3.2.2","prettier":"^3.8.0","typescript":"~5.9.3","vue-router":"^4.6.4","@types/jest":"^30.0.0","@types/node":"^25.0.9","@types/jsdom":"^27.0.0","npm-run-all2":"^8.0.4","@vue/tsconfig":"^0.8.1","sass-embedded":"^1.97.2","@vue/test-utils":"^2.4.6","vite-plugin-dts":"^4.5.4","@tsconfig/node20":"^20.1.8","eslint-plugin-vue":"^10.7.0","@vitejs/plugin-vue":"^6.0.3","eslint-plugin-cypress":"^5.2.1","start-server-and-test":"^2.1.3","@vitejs/plugin-vue-jsx":"^5.1.3","jest-environment-jsdom":"^30.2.0","@rushstack/eslint-patch":"^1.15.0","vite-plugin-vue-devtools":"^8.0.5","@vue/eslint-config-prettier":"^10.2.0","@vue/eslint-config-typescript":"^14.6.0"},"peerDependencies":{"vue":"^3.4.0"},"peerDependenciesMeta":{"vue":{"optional":false}},"_npmOperationalInternal":{"tmp":"tmp/vue3-recaptcha_0.0.10_1768922556640_0.1338633857526179","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"@anilkumarthakur/vue3-recaptcha","description":"A Vue 3 plugin for Google reCAPTCHA v2 (checkbox & invisible) and v3 integration","version":"1.0.0","private":false,"type":"module","license":"MIT","author":{"name":"Anil Kumar Thakur"},"repository":{"type":"git","url":"git+https://github.com/anilkumarthakur60/vue3-recaptcha.git"},"bugs":{"url":"https://github.com/anilkumarthakur60/vue3-recaptcha/issues"},"homepage":"https://github.com/anilkumarthakur60/vue3-recaptcha#readme","keywords":["recaptcha","google-recaptcha","recaptcha-v2","recaptcha-v3","vue","vue3","vue3-recaptcha","captcha","verification","security","typescript"],"main":"./dist/index.cjs","module":"./dist/index.es.js","types":"./dist/index.d.ts","unpkg":"./dist/index.iife.js","jsdelivr":"./dist/index.iife.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.es.js","require":"./dist/index.cjs"},"./package.json":"./package.json"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"engines":{"node":">=18.0.0","npm":">=9.0.0"},"peerDependencies":{"vue":"^3.4.0"},"peerDependenciesMeta":{"vue":{"optional":false}},"devDependencies":{"@rushstack/eslint-patch":"^1.16.1","@tsconfig/node20":"^20.1.9","@types/jsdom":"^28.0.1","@types/node":"^25.5.0","@vitejs/plugin-vue":"^6.0.5","@vitejs/plugin-vue-jsx":"^5.1.5","@vue/eslint-config-prettier":"^10.2.0","@vue/eslint-config-typescript":"^14.7.0","@vue/test-utils":"^2.4.6","@vue/tsconfig":"^0.9.0","axios":"^1.13.6","esbuild":"^0.27.4","eslint":"^10.1.0","eslint-plugin-vue":"^10.8.0","jsdom":"^29.0.1","pinia":"^3.0.4","prettier":"^3.8.1","sass-embedded":"^1.98.0","typescript":"~5.7.3","vite":"^8.0.2","vite-plugin-dts":"^4.5.4","vite-plugin-vue-devtools":"^8.1.1","vitest":"^4.1.1","vue":"^3.5.30","vue-router":"^5.0.4","vue-tsc":"^3.2.6"},"scripts":{"dev":"vite --config vite.config.prod.ts","build":"vue-tsc --noEmit && vite build","build:prod":"vue-tsc && vite build --config vite.config.prod.ts","preview":"vite preview","type-check":"vue-tsc --noEmit","lint":"eslint src/package --fix","format":"prettier --write \"src/package/**/*.{vue,ts,tsx,js,jsx,json,css}\"","test":"vitest run tests","prepublishOnly":"npm run build","version":"npm run format && git add -A"},"gitHead":"e5a3062c6394376a9ee2127436a6c187eeffc609","_id":"@anilkumarthakur/vue3-recaptcha@1.0.0","_nodeVersion":"24.14.0","_npmVersion":"11.9.0","dist":{"integrity":"sha512-iOZPayaLbIoPlBiz+L4N1Xn5hUejdfpnL8UxbU+sZZkV0nPw6nkY/7YamW1HKSYfCPCx6Kf6bKqNMWPA/PVlUQ==","shasum":"bffeada25cad02d0d775117118c70a83aee3556f","tarball":"https://registry.npmjs.org/@anilkumarthakur/vue3-recaptcha/-/vue3-recaptcha-1.0.0.tgz","fileCount":33,"unpackedSize":316332,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIBzAM6Jca24TSCw2w16Jh/rwitIxKUP8Fd+zwjs1SGYXAiBntyzO4DJuI3thQXX7mXmhUdLZrS4czkUbxGmxtWJOGw=="}]},"_npmUser":{"name":"anilkumarthakur","email":"anilkumarthakur60@gmail.com"},"directories":{},"maintainers":[{"name":"anilkumarthakur","email":"anilkumarthakur60@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/vue3-recaptcha_1.0.0_1774373122520_0.5957351536993225"},"_hasShrinkwrap":false}},"time":{"created":"2024-10-20T14:29:37.089Z","modified":"2026-03-24T17:25:22.783Z","0.0.1":"2024-10-20T14:29:37.443Z","0.0.2":"2024-10-20T14:31:46.281Z","0.0.3":"2024-10-25T14:47:46.353Z","0.0.4":"2024-10-25T14:50:47.407Z","0.0.5":"2024-10-25T15:07:14.726Z","0.0.6":"2024-11-03T13:22:11.841Z","0.0.7":"2025-02-19T05:45:10.319Z","0.0.8":"2025-06-14T04:59:22.799Z","0.0.9":"2026-01-19T03:24:39.754Z","0.0.10":"2026-01-20T15:22:36.789Z","1.0.0":"2026-03-24T17:25:22.657Z"},"bugs":{"url":"https://github.com/anilkumarthakur60/vue3-recaptcha/issues"},"author":{"name":"Anil Kumar Thakur"},"license":"MIT","homepage":"https://github.com/anilkumarthakur60/vue3-recaptcha#readme","keywords":["recaptcha","google-recaptcha","recaptcha-v2","recaptcha-v3","vue","vue3","vue3-recaptcha","captcha","verification","security","typescript"],"repository":{"type":"git","url":"git+https://github.com/anilkumarthakur60/vue3-recaptcha.git"},"description":"A Vue 3 plugin for Google reCAPTCHA v2 (checkbox & invisible) and v3 integration","maintainers":[{"name":"anilkumarthakur","email":"anilkumarthakur60@gmail.com"}],"readme":"# @anilkumarthakur/vue3-recaptcha\n\nA fully-typed Vue 3 plugin for Google reCAPTCHA — supports **v2 checkbox**, **v2 invisible**, and **v3 score-based** out of the box.\n\n[![npm version](https://img.shields.io/npm/v/@anilkumarthakur/vue3-recaptcha)](https://www.npmjs.com/package/@anilkumarthakur/vue3-recaptcha)\n[![npm downloads](https://img.shields.io/npm/dm/@anilkumarthakur/vue3-recaptcha)](https://www.npmjs.com/package/@anilkumarthakur/vue3-recaptcha)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](./LICENSE)\n\n---\n\n## Features\n\n- **Three reCAPTCHA modes** — v2 checkbox, v2 invisible, v3 score-based\n- **Component + composable APIs** — use whichever fits your pattern\n- **`v-model` support** — bind tokens reactively with no boilerplate\n- **TypeScript-first** — full type coverage, component instance types included\n- **Script caching** — loads the Google script once, shared across all instances\n- **Token expiry management** — auto-clears v3 tokens before Google's 2-minute expiry\n- **SSR-safe** — DOM checks guard all browser APIs\n- **Lightweight** — Vue is a peer dep, zero other runtime dependencies\n\n---\n\n## Contents\n\n- [Installation](#installation)\n- [Quick Start](#quick-start)\n- [Plugin Options](#plugin-options)\n- [Components](#components)\n  - [RecaptchaV3](#recaptchav3)\n  - [RecaptchaV2Checkbox](#recaptchav2checkbox)\n  - [RecaptchaV2Invisible](#recaptchav2invisible)\n- [Composables](#composables)\n  - [useRecaptchaV3](#userecaptchav3)\n  - [useRecaptchaV2](#userecaptchav2)\n- [TypeScript](#typescript)\n- [Running Locally](#running-locally)\n- [Building](#building)\n- [Contributing](#contributing)\n\n---\n\n## Installation\n\n```bash\nnpm install @anilkumarthakur/vue3-recaptcha\n# or\npnpm add @anilkumarthakur/vue3-recaptcha\n# or\nyarn add @anilkumarthakur/vue3-recaptcha\n```\n\n**Requirements:** Vue >= 3.4, Node >= 18\n\n---\n\n## Quick Start\n\n### 1. Register the plugin\n\n```ts\n// main.ts\nimport { createApp } from 'vue'\nimport App from './App.vue'\nimport { VueRecaptchaPlugin } from '@anilkumarthakur/vue3-recaptcha'\n\nconst app = createApp(App)\n\napp.use(VueRecaptchaPlugin, {\n  siteKey: import.meta.env.VITE_RECAPTCHA_SITE_KEY_V3,\n  version: 'v3' // 'v2' | 'v3'\n})\n\napp.mount('#app')\n```\n\n### 2. Use a component\n\n```vue\n<template>\n  <form @submit.prevent=\"submit\">\n    <RecaptchaV3 v-model=\"token\" @verify=\"onVerify\" />\n    <button type=\"submit\">Submit</button>\n  </form>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref } from 'vue'\n\nconst token = ref('')\n\nfunction onVerify(t: string) {\n  console.log('Token ready:', t)\n}\n\nasync function submit() {\n  // send token to your backend for server-side verification\n}\n</script>\n```\n\n> Components (`RecaptchaV3`, `RecaptchaV2Checkbox`, `RecaptchaV2Invisible`) are auto-registered globally when you install the plugin. No per-component import needed.\n\n---\n\n## Plugin Options\n\n| Option      | Type                 | Default    | Description                                   |\n| ----------- | -------------------- | ---------- | --------------------------------------------- |\n| `siteKey`   | `string`             | —          | **Required.** Your Google reCAPTCHA site key  |\n| `version`   | `'v2' \\| 'v3'`       | `'v3'`     | Which reCAPTCHA version to load               |\n| `autoLoad`  | `boolean`            | `true`     | Load the Google script immediately on install |\n| `language`  | `string`             | —          | Force a language (e.g. `'fr'`, `'de'`)        |\n| `scriptUrl` | `string`             | —          | Override the Google script URL entirely       |\n| `action`    | `string`             | `'submit'` | Default action name for v3 analytics          |\n| `onLoad`    | `() => void`         | —          | Callback when script loads successfully       |\n| `onError`   | `(e: Error) => void` | —          | Callback when script fails to load            |\n\n---\n\n## Components\n\n### RecaptchaV3\n\nInvisible, score-based reCAPTCHA. Does not render any UI — Google shows a badge in the corner.\n\n```vue\n<template>\n  <RecaptchaV3\n    v-model=\"token\"\n    action=\"login\"\n    badge=\"bottomright\"\n    @verify=\"onVerify\"\n    @error=\"onError\"\n    ref=\"recaptcha\"\n  />\n  <button @click=\"recaptcha?.execute('checkout')\">Pay Now</button>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref } from 'vue'\nimport type { RecaptchaV3Instance } from '@anilkumarthakur/vue3-recaptcha'\n\nconst token = ref('')\nconst recaptcha = ref<RecaptchaV3Instance>()\n\nfunction onVerify(t: string) {\n  /* verified */\n}\nfunction onError(e: Error) {\n  /* handle error */\n}\n</script>\n```\n\n**Props**\n\n| Prop         | Type                                        | Default         | Description                        |\n| ------------ | ------------------------------------------- | --------------- | ---------------------------------- |\n| `siteKey`    | `string`                                    | plugin config   | Override the site key per-instance |\n| `action`     | `string`                                    | `'submit'`      | Action label for Google Analytics  |\n| `badge`      | `'bottomright' \\| 'bottomleft' \\| 'inline'` | `'bottomright'` | Badge position                     |\n| `hideBadge`  | `boolean`                                   | `false`         | Hide the reCAPTCHA badge           |\n| `modelValue` | `string`                                    | —               | v-model token binding              |\n\n**Emits:** `update:modelValue`, `verify(token)`, `error(Error)`, `load`\n\n**Ref Methods**\n\n| Method             | Returns           | Description                  |\n| ------------------ | ----------------- | ---------------------------- |\n| `execute(action?)` | `Promise<string>` | Generate a new token         |\n| `load()`           | `Promise<void>`   | Manually trigger script load |\n\n**Ref State:** `isLoaded`, `isLoading`, `error`\n\n---\n\n### RecaptchaV2Checkbox\n\nThe classic \"I'm not a robot\" checkbox widget.\n\n```vue\n<template>\n  <RecaptchaV2Checkbox\n    v-model=\"token\"\n    theme=\"light\"\n    size=\"normal\"\n    @verify=\"onVerify\"\n    @expire=\"onExpire\"\n    ref=\"checkbox\"\n  />\n  <button @click=\"checkbox?.reset()\">Reset</button>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref } from 'vue'\nimport type { RecaptchaV2CheckboxInstance } from '@anilkumarthakur/vue3-recaptcha'\n\nconst token = ref('')\nconst checkbox = ref<RecaptchaV2CheckboxInstance>()\n\nfunction onVerify(t: string) {\n  /* user checked */\n}\nfunction onExpire() {\n  token.value = ''\n}\n</script>\n```\n\n**Props**\n\n| Prop         | Type                    | Default       | Description                        |\n| ------------ | ----------------------- | ------------- | ---------------------------------- |\n| `siteKey`    | `string`                | plugin config | Override the site key per-instance |\n| `theme`      | `'light' \\| 'dark'`     | `'light'`     | Widget color theme                 |\n| `size`       | `'normal' \\| 'compact'` | `'normal'`    | Widget size                        |\n| `tabindex`   | `number`                | `0`           | Accessibility tabindex             |\n| `modelValue` | `string`                | —             | v-model token binding              |\n\n**Emits:** `update:modelValue`, `verify(token)`, `expire`, `error(Error)`, `load`\n\n**Ref Methods:** `reset()`, `getResponse(): string`\n\n**Ref State:** `widgetId`\n\n---\n\n### RecaptchaV2Invisible\n\nInvisible v2 — no UI, fires on demand, returns a token via promise.\n\n```vue\n<template>\n  <RecaptchaV2Invisible v-model=\"token\" badge=\"bottomright\" @verify=\"onVerify\" ref=\"invisible\" />\n  <button @click=\"verify\">Submit</button>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref } from 'vue'\nimport type { RecaptchaV2InvisibleInstance } from '@anilkumarthakur/vue3-recaptcha'\n\nconst token = ref('')\nconst invisible = ref<RecaptchaV2InvisibleInstance>()\n\nasync function verify() {\n  const t = await invisible.value?.execute()\n  // proceed with form submission\n}\n\nfunction onVerify(t: string) {\n  /* token ready */\n}\n</script>\n```\n\n**Props**\n\n| Prop         | Type                                        | Default         | Description                        |\n| ------------ | ------------------------------------------- | --------------- | ---------------------------------- |\n| `siteKey`    | `string`                                    | plugin config   | Override the site key per-instance |\n| `badge`      | `'bottomright' \\| 'bottomleft' \\| 'inline'` | `'bottomright'` | Badge position                     |\n| `tabindex`   | `number`                                    | `0`             | Accessibility tabindex             |\n| `modelValue` | `string`                                    | —               | v-model token binding              |\n\n**Emits:** `update:modelValue`, `verify(token)`, `expire`, `error(Error)`, `load`\n\n**Ref Methods:** `execute(): Promise<string>`, `reset()`, `getResponse(): string`\n\n---\n\n## Composables\n\nComposables give you full programmatic control without mounting a component. Useful when you want to decouple token generation from your template entirely.\n\n### useRecaptchaV3\n\n```ts\nimport { useRecaptchaV3 } from '@anilkumarthakur/vue3-recaptcha'\n\nconst { execute, token, isReady, isLoading, error } = useRecaptchaV3({\n  action: 'checkout'\n})\n\nasync function handleSubmit() {\n  try {\n    const t = await execute() // generates a fresh token\n    await api.post('/checkout', { recaptchaToken: t })\n  } catch (e) {\n    console.error('reCAPTCHA failed', e)\n  }\n}\n```\n\n| Option    | Type     | Description                          |\n| --------- | -------- | ------------------------------------ |\n| `siteKey` | `string` | Override plugin-level site key       |\n| `action`  | `string` | Default action for `execute()` calls |\n\n| Return             | Type                           | Description                       |\n| ------------------ | ------------------------------ | --------------------------------- |\n| `token`            | `Readonly<Ref<string>>`        | Current token (clears after 110s) |\n| `isReady`          | `Readonly<Ref<boolean>>`       | Script has loaded                 |\n| `isLoading`        | `Readonly<Ref<boolean>>`       | Token generation in progress      |\n| `error`            | `Readonly<Ref<Error \\| null>>` | Last error                        |\n| `execute(action?)` | `Promise<string>`              | Generate a token                  |\n\n---\n\n### useRecaptchaV2\n\n```ts\nimport { ref, onMounted } from 'vue'\nimport { useRecaptchaV2 } from '@anilkumarthakur/vue3-recaptcha'\n\nconst container = ref<HTMLElement>()\n\nconst { render, execute, reset, token, error } = useRecaptchaV2({\n  theme: 'dark',\n  size: 'normal'\n})\n\nonMounted(async () => {\n  await render(container.value!)\n})\n\nasync function handleSubmit() {\n  const t = await execute()\n  // send token to backend\n}\n```\n\n| Return          | Type                            | Description                     |\n| --------------- | ------------------------------- | ------------------------------- |\n| `token`         | `Readonly<Ref<string>>`         | Current token                   |\n| `widgetId`      | `Readonly<Ref<number \\| null>>` | Google widget ID                |\n| `isReady`       | `Readonly<Ref<boolean>>`        | Widget rendered                 |\n| `isLoading`     | `Readonly<Ref<boolean>>`        | Execution in progress           |\n| `error`         | `Readonly<Ref<Error \\| null>>`  | Last error                      |\n| `render(el)`    | `Promise<number>`               | Mount widget into a DOM element |\n| `execute()`     | `Promise<string>`               | Trigger invisible verification  |\n| `reset()`       | `void`                          | Reset widget state              |\n| `getResponse()` | `string`                        | Get current token synchronously |\n\n---\n\n## TypeScript\n\nAll component instance types are exported for use with template refs:\n\n```ts\nimport type {\n  RecaptchaV3Instance,\n  RecaptchaV2CheckboxInstance,\n  RecaptchaV2InvisibleInstance\n} from '@anilkumarthakur/vue3-recaptcha'\n```\n\nOther exported types:\n\n```ts\nimport type {\n  RecaptchaVersion, // 'v2' | 'v3'\n  RecaptchaTheme, // 'light' | 'dark'\n  RecaptchaSize, // 'normal' | 'compact' | 'invisible'\n  RecaptchaBadgePosition, // 'bottomright' | 'bottomleft' | 'inline'\n  VueRecaptchaPluginOptions\n} from '@anilkumarthakur/vue3-recaptcha'\n```\n\n---\n\n## Running Locally\n\n```bash\n# 1. Clone\ngit clone https://github.com/anilkumarthakur60/vue3-recaptcha.git\ncd vue3-recaptcha\n\n# 2. Install dependencies\nnpm install\n\n# 3. Set up your reCAPTCHA key\n# Create a .env file in the project root:\necho \"VITE_RECAPTCHA_SITE_KEY_V3=your_key_here\" > .env\n\n# 4. Start the demo app\nnpm run dev\n# Opens at http://localhost:3000\n```\n\n> Get a free site key at [google.com/recaptcha/admin](https://www.google.com/recaptcha/admin). Add `localhost` as an allowed domain when creating the key.\n\n---\n\n## Building\n\n### Build the npm package\n\n```bash\nnpm run build\n```\n\nOutputs to `dist/` in multiple formats:\n\n| File                 | Format     | Use case               |\n| -------------------- | ---------- | ---------------------- |\n| `dist/index.es.js`   | ES Module  | Vite / modern bundlers |\n| `dist/index.cjs`     | CommonJS   | Node / older bundlers  |\n| `dist/index.iife.js` | IIFE       | CDN / `<script>` tags  |\n| `dist/index.d.ts`    | TypeScript | Type declarations      |\n\n### Build the demo app\n\n```bash\nnpm run build:prod\n```\n\nBuilds the interactive demo site. Preview the output locally:\n\n```bash\nnpm run preview\n```\n\n### Other scripts\n\n```bash\nnpm run type-check   # TypeScript validation only (no emit)\nnpm run test         # Run Vitest test suite\nnpm run lint         # ESLint with auto-fix\nnpm run format       # Prettier formatting\n```\n\n---\n\n## Contributing\n\nContributions are welcome — whether it's a bug fix, a new feature, or improved docs.\n\n### Getting Started\n\n1. **Fork** the repo and create your branch from `main`\n\n   ```bash\n   git checkout -b feat/your-feature\n   ```\n\n2. **Make changes** — keep them focused and well-scoped\n\n3. **Add or update tests** in `tests/` (Vitest + Vue Test Utils)\n\n4. **Run the checks** before pushing\n\n   ```bash\n   npm run type-check\n   npm run lint\n   npm run test\n   ```\n\n5. **Open a PR** against `main` with a clear description of what changed and why\n\n### Project Layout\n\n```\nsrc/\n├── package/           # Library source (published to npm)\n│   ├── index.ts       # Plugin entry + all exports\n│   ├── components/    # RecaptchaV3, RecaptchaV2Checkbox, RecaptchaV2Invisible\n│   ├── composables/   # useRecaptchaV3, useRecaptchaV2\n│   ├── types/         # TypeScript interfaces and types\n│   └── utils/         # Script loader and helpers\n└── views/             # Demo app (HomeView etc.) — not published\n\ntests/                 # Vitest specs mirroring src/package/\nvite.config.ts         # Dev server config (demo app)\nvite.config.prod.ts    # Library build config (npm package)\n```\n\n### What to Work On\n\n- Issues labeled `good first issue` or `help wanted`\n- Nuxt module wrapper\n- reCAPTCHA Enterprise support\n- Additional composable test coverage\n- Docs improvements\n\n---\n\n## License\n\n[MIT](./LICENSE) © [Anil Kumar Thakur](https://github.com/anilkumarthakur60)\n","readmeFilename":"README.md"}