{"_id":"ng-recaptcha","_rev":"52-905f56486a6f667dbf07efa3fb22d77f","name":"ng-recaptcha","description":"Angular component for Google reCAPTCHA","dist-tags":{"latest":"13.2.1","beta":"5.0.0-beta.2"},"versions":{"2.0.0-beta1":{"name":"ng-recaptcha","version":"2.0.0-beta1","description":"Angular component for Google reCAPTCHA","scripts":{"transpile":"ngc -p ./tsconfig.json","clean":"del-cli \"./recaptcha/**/*.+(js|d.ts|js.map|metadata.json)\" \"./index.*+(js|d.ts|js.map|metadata.json)\" \"./forms.*+(js|d.ts|js.map|metadata.json)\" factories","changelog":"conventional-changelog -p angular -i CHANGELOG.md -s","lint:prod":"tslint --project ./tsconfig.json --type-check","lint":"npm run lint:prod -- --force","compile:prod":"npm run clean && npm run lint:prod && npm run transpile","compile":"npm run clean && npm run lint && npm run transpile -- --sourceMap","pub":"npm run compile:prod && npm publish","prepush":"npm run lint:prod"},"main":"index.js","typings":"index.d.ts","repository":{"type":"git","url":"git+https://github.com/DethAriel/ng-recaptcha.git"},"keywords":["angular","recaptcha","angular-recaptcha","ng-recaptcha"],"author":{"name":"Ruslan Arkhipau","email":"dethariel@gmail.com"},"license":"MIT","optionalDependencies":{"@types/grecaptcha":"^2.0.30"},"peerDependencies":{"@angular/core":"^2.0.0"},"devDependencies":{"@angular/common":"^2.4.5","@angular/compiler":"^2.4.5","@angular/compiler-cli":"^2.4.5","@angular/core":"^2.4.5","@angular/forms":"^2.4.5","@types/core-js":"^0.9.35","@types/grecaptcha":"^2.0.31","angular-precommit":"^1.0.3","codelyzer":"^2.0.0-beta.4","conventional-changelog-cli":"^1.2.0","del-cli":"^0.2.1","husky":"^0.13.1","rxjs":"^5.0.3","tslint":"^4.4.2","typescript":"^2.1.5","zone.js":"^0.7.6"},"homepage":"https://github.com/DethAriel/ng-recaptcha#readme","gitHead":"76eb35d4cbd97d0528132d5a1c3c79bd1e4b839f","bugs":{"url":"https://github.com/DethAriel/ng-recaptcha/issues"},"dependencies":{"@types/grecaptcha":"^2.0.30"},"_id":"ng-recaptcha@2.0.0-beta1","_shasum":"9781d3ed77e094df49a0a87b4497d4ffa64d369e","_from":".","_npmVersion":"3.10.10","_nodeVersion":"6.9.5","_npmUser":{"name":"dethariel","email":"dethariel@gmail.com"},"dist":{"shasum":"9781d3ed77e094df49a0a87b4497d4ffa64d369e","tarball":"https://registry.npmjs.org/ng-recaptcha/-/ng-recaptcha-2.0.0-beta1.tgz","integrity":"sha512-uL14WMKZN3WO/n6HIHWDicP//NfI6EiyUuoMVw65n/5XZpvaK0Y4CUBInHjyODtmy4yWhxFi6xbjQGavzwy0Cg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIExMjKt8BOnIE/0ILzUxRvY1I/cOAAgj/Qn93TWXAOZHAiEAsPnhHyCyJ+uBlDwbNQI+WNSlVd3TdJxxboSJ3nvcbIA="}]},"maintainers":[{"name":"dethariel","email":"dethariel@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/ng-recaptcha-2.0.0-beta1.tgz_1489427569898_0.2554107017349452"},"directories":{}},"2.0.0":{"name":"ng-recaptcha","version":"2.0.0","description":"Angular component for Google reCAPTCHA","scripts":{"transpile":"ngc -p ./tsconfig.json","clean":"del-cli \"./recaptcha/**/*.+(js|d.ts|js.map|metadata.json)\" \"./index.*+(js|d.ts|js.map|metadata.json)\" \"./forms.*+(js|d.ts|js.map|metadata.json)\" factories","changelog":"conventional-changelog -p angular -i CHANGELOG.md -s","lint:prod":"tslint --project ./tsconfig.json --type-check","lint":"npm run lint:prod -- --force","compile:prod":"npm run clean && npm run lint:prod && npm run transpile","compile":"npm run clean && npm run lint && npm run transpile -- --sourceMap","pub":"npm run compile:prod && npm publish","prepush":"npm run lint:prod"},"main":"index.js","typings":"index.d.ts","repository":{"type":"git","url":"git+https://github.com/DethAriel/ng-recaptcha.git"},"keywords":["angular","recaptcha","angular-recaptcha","ng-recaptcha"],"author":{"name":"Ruslan Arkhipau","email":"dethariel@gmail.com"},"license":"MIT","optionalDependencies":{"@types/grecaptcha":"^2.0.30"},"peerDependencies":{"@angular/core":"^2.0.0"},"devDependencies":{"@angular/common":"^2.4.5","@angular/compiler":"^2.4.5","@angular/compiler-cli":"^2.4.5","@angular/core":"^2.4.5","@angular/forms":"^2.4.5","@types/core-js":"^0.9.35","@types/grecaptcha":"^2.0.31","angular-precommit":"^1.0.3","codelyzer":"^2.0.0-beta.4","conventional-changelog-cli":"^1.2.0","del-cli":"^0.2.1","husky":"^0.13.1","rxjs":"^5.0.3","tslint":"^4.4.2","typescript":"^2.1.5","zone.js":"^0.7.6"},"homepage":"https://github.com/DethAriel/ng-recaptcha#readme","gitHead":"983203a932c037865203eb306cb0b03206da9317","bugs":{"url":"https://github.com/DethAriel/ng-recaptcha/issues"},"dependencies":{"@types/grecaptcha":"^2.0.30"},"_id":"ng-recaptcha@2.0.0","_shasum":"26e6002fad1fc248099429f7c456e4ba249f9211","_from":".","_npmVersion":"3.10.10","_nodeVersion":"6.9.5","_npmUser":{"name":"dethariel","email":"dethariel@gmail.com"},"dist":{"shasum":"26e6002fad1fc248099429f7c456e4ba249f9211","tarball":"https://registry.npmjs.org/ng-recaptcha/-/ng-recaptcha-2.0.0.tgz","integrity":"sha512-dRC9R/GUKhqb8N9FtXvRv7D1J3bA+R4aEDiQGKtifxFPkPmDoYYSsNh1noSwl4MVI9AFPMmqL/mhxm+TtoHjWg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFr27J8mVIC1LghoqVTieLPZ7VpLMOh2RRaPMEZ7KF/uAiEA2wDIvjRQcKwJP1w1mzMWySnqcUSFSxJZFriNBoahhK8="}]},"maintainers":[{"name":"dethariel","email":"dethariel@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/ng-recaptcha-2.0.0.tgz_1489530267924_0.9504160492215306"},"directories":{}},"2.0.1":{"name":"ng-recaptcha","version":"2.0.1","description":"Angular component for Google reCAPTCHA","scripts":{"transpile":"ngc -p ./tsconfig.json","clean":"del-cli \"./recaptcha/**/*.+(js|d.ts|js.map|metadata.json)\" \"./index.*+(js|d.ts|js.map|metadata.json)\" \"./forms.*+(js|d.ts|js.map|metadata.json)\" factories","changelog":"conventional-changelog -p angular -i CHANGELOG.md -s","lint:prod":"tslint --project ./tsconfig.json --type-check","lint":"npm run lint:prod -- --force","compile:prod":"npm run clean && npm run lint:prod && npm run transpile","compile":"npm run clean && npm run lint && npm run transpile -- --sourceMap","pub":"npm run compile:prod && npm publish","prepush":"npm run lint:prod"},"main":"index.js","typings":"index.d.ts","repository":{"type":"git","url":"git+https://github.com/DethAriel/ng-recaptcha.git"},"keywords":["angular","recaptcha","angular-recaptcha","ng-recaptcha"],"author":{"name":"Ruslan Arkhipau","email":"dethariel@gmail.com"},"license":"MIT","optionalDependencies":{"@types/grecaptcha":"^2.0.30"},"peerDependencies":{"@angular/core":"^2.0.0"},"devDependencies":{"@angular/common":"^2.4.5","@angular/compiler":"^2.4.5","@angular/compiler-cli":"^2.4.5","@angular/core":"^2.4.5","@angular/forms":"^2.4.5","@types/core-js":"^0.9.35","@types/grecaptcha":"^2.0.31","angular-precommit":"^1.0.3","codelyzer":"^2.0.0-beta.4","conventional-changelog-cli":"^1.2.0","del-cli":"^0.2.1","husky":"^0.13.1","rxjs":"^5.0.3","tslint":"^4.4.2","typescript":"^2.1.5","zone.js":"^0.7.6"},"homepage":"https://github.com/DethAriel/ng-recaptcha#readme","gitHead":"15f2e21c2432b6c83d333ed4190877e2bf4bda8c","bugs":{"url":"https://github.com/DethAriel/ng-recaptcha/issues"},"dependencies":{"@types/grecaptcha":"^2.0.30"},"_id":"ng-recaptcha@2.0.1","_shasum":"4e301a18aa4895a1b401f565b96a73d8c2474029","_from":".","_npmVersion":"3.10.10","_nodeVersion":"6.9.5","_npmUser":{"name":"dethariel","email":"dethariel@gmail.com"},"dist":{"shasum":"4e301a18aa4895a1b401f565b96a73d8c2474029","tarball":"https://registry.npmjs.org/ng-recaptcha/-/ng-recaptcha-2.0.1.tgz","integrity":"sha512-pyQsqnGXeKAXiDaL6JuIQj5Pwg+FMgJvrV5c39915p0Y2tv4w2RfUlANWIsW9ugfcekL/weef1xeHIj3Gs3n3g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDwfKEJ3Lgx8gsCu4wIUsNnwL6zyYtxMbg4ESh2X8b6xgIgdbBGh/4htyfznt/yNnCRX1VUoARHYZCkrHa6gtCSfEQ="}]},"maintainers":[{"name":"dethariel","email":"dethariel@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/ng-recaptcha-2.0.1.tgz_1489713042447_0.995230020256713"},"directories":{}},"2.0.2":{"name":"ng-recaptcha","version":"2.0.2","description":"Angular component for Google reCAPTCHA","scripts":{"transpile":"ngc -p ./tsconfig.json","clean":"del-cli '{recaptcha/,index,forms}*.{js,d.ts,js.map,metadata.json}' factories","changelog":"conventional-changelog -p angular -i CHANGELOG.md -s","lint:prod":"tslint --project ./tsconfig.json --type-check","lint":"npm run lint:prod -- --force","build":"npm run clean && npm run lint:prod && npm run transpile","pub":"npm run build && npm publish","prepush":"npm run lint:prod"},"main":"index.js","typings":"index.d.ts","repository":{"type":"git","url":"git+https://github.com/DethAriel/ng-recaptcha.git"},"keywords":["angular","recaptcha","angular-recaptcha","ng-recaptcha"],"author":{"name":"Ruslan Arkhipau","email":"dethariel@gmail.com"},"license":"MIT","optionalDependencies":{"@types/grecaptcha":"^2.0.31"},"peerDependencies":{"@angular/core":"^4.0.0 || ^2.0.0"},"devDependencies":{"@angular/common":"^4.0.0","@angular/compiler":"^4.0.0","@angular/compiler-cli":"^4.0.0","@angular/core":"^4.0.0","@angular/forms":"^4.0.0","@angular/platform-browser":"^4.0.0","@types/core-js":"^0.9.39","@types/grecaptcha":"^2.0.31","angular-precommit":"^1.0.3","codelyzer":"^3.0.0-beta.4","conventional-changelog-cli":"^1.3.1","del-cli":"^0.2.1","husky":"^0.13.3","rxjs":"^5.2.0","tslint":"^4.5.1","typescript":"^2.2.1","zone.js":"^0.8.5"},"homepage":"https://github.com/DethAriel/ng-recaptcha#readme","gitHead":"f7f4ee8d3e1cc7e08a81184d632a3defbe43683f","bugs":{"url":"https://github.com/DethAriel/ng-recaptcha/issues"},"dependencies":{"@types/grecaptcha":"^2.0.31"},"_id":"ng-recaptcha@2.0.2","_shasum":"4a3fe966c390956f48feeff2a35d0b78c1a3fed4","_from":".","_npmVersion":"3.10.10","_nodeVersion":"6.9.5","_npmUser":{"name":"dethariel","email":"dethariel@gmail.com"},"dist":{"shasum":"4a3fe966c390956f48feeff2a35d0b78c1a3fed4","tarball":"https://registry.npmjs.org/ng-recaptcha/-/ng-recaptcha-2.0.2.tgz","integrity":"sha512-mdiYuYOVD5y3ovFHLDRQlQZQB8Xe4nFdhY1inM9sqdWXufCXY6pT97UK/Tc4LY1E+L6f4S1x9kLbB1pu8sYERg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDs9lTmtQw3Wk3ZWHGg3kTNXPS1A9+/FMEbWnVzaktcVQIhAK13cnG0rWKeVRMwqcgX9FnFxEBYU7n35RGyxLJi6kR3"}]},"maintainers":[{"name":"dethariel","email":"dethariel@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/ng-recaptcha-2.0.2.tgz_1490492054836_0.5624915447551757"},"directories":{}},"2.1.0":{"name":"ng-recaptcha","version":"2.1.0","description":"Angular component for Google reCAPTCHA","scripts":{"demo":"npm run demo:install && npm run demo:serve","demo:serve":"cd demo && bundle exec jekyll serve","demo:build":"cd demo && bundle exec jekyll build","demo:install":"npm run transpile && cd demo/examples && npm run latest && cd ../.. && npm run clean","demo:publish":"npm run demo:build && gh-pages -d demo/_site/","transpile":"ngc -p ./tsconfig.json","clean":"del-cli './{recaptcha/,index,forms}*.{js,d.ts,js.map,metadata.json}' factories","changelog":"conventional-changelog -p angular -i CHANGELOG.md -s","lint:prod":"tslint --project ./tsconfig.json --type-check","lint":"npm run lint:prod -- --force","build":"npm run clean && npm run lint:prod && npm run transpile","pub":"npm run build && npm publish","prepush":"npm run lint:prod"},"main":"index.js","typings":"index.d.ts","repository":{"type":"git","url":"git+https://github.com/DethAriel/ng-recaptcha.git"},"keywords":["angular","recaptcha","angular-recaptcha","ng-recaptcha"],"author":{"name":"Ruslan Arkhipau","email":"dethariel@gmail.com"},"license":"MIT","optionalDependencies":{"@types/grecaptcha":"^2.0.31"},"peerDependencies":{"@angular/core":"^4.0.0 || ^2.0.0"},"devDependencies":{"@angular/common":"^4.0.0","@angular/compiler":"^4.0.0","@angular/compiler-cli":"^4.0.0","@angular/core":"^4.0.0","@angular/forms":"^4.0.0","@angular/platform-browser":"^4.0.0","@types/core-js":"^0.9.39","@types/grecaptcha":"^2.0.31","angular-precommit":"^1.0.3","codelyzer":"^3.0.0-beta.4","conventional-changelog-cli":"^1.3.1","del-cli":"^0.2.1","gh-pages":"^0.12.0","husky":"^0.13.3","rxjs":"^5.2.0","tslint":"^4.5.1","typescript":"^2.2.1","zone.js":"^0.8.5"},"homepage":"https://github.com/DethAriel/ng-recaptcha#readme","gitHead":"cbb97e155474c547a395f6401bc874cb3a7ab68d","bugs":{"url":"https://github.com/DethAriel/ng-recaptcha/issues"},"dependencies":{"@types/grecaptcha":"^2.0.31"},"_id":"ng-recaptcha@2.1.0","_shasum":"d0344e2278e9e8dbaca4f5117741eae91d50ec57","_from":".","_npmVersion":"3.10.10","_nodeVersion":"6.9.5","_npmUser":{"name":"dethariel","email":"dethariel@gmail.com"},"dist":{"shasum":"d0344e2278e9e8dbaca4f5117741eae91d50ec57","tarball":"https://registry.npmjs.org/ng-recaptcha/-/ng-recaptcha-2.1.0.tgz","integrity":"sha512-B6wZvhpht1GBkELAjEZeo5QybBD2YKvB6pchSWRYXQr0912ctfzYN6/1jFtoLREnEgdJh0XvLWUVT3vl3wBPlA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCg3XpMwJukhcXRSSY8UElcJlrebgLfsD2yztxxfmLeJQIgHTw6Jzzk/nfHarefdRqwDibXGkwytNKX65X73PGtWR8="}]},"maintainers":[{"name":"dethariel","email":"dethariel@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/ng-recaptcha-2.1.0.tgz_1493671344959_0.027267589000985026"},"directories":{}},"2.1.1":{"name":"ng-recaptcha","version":"2.1.1","description":"Angular component for Google reCAPTCHA","scripts":{"demo":"npm run demo:install && npm run demo:serve","demo:serve":"cd demo && bundle exec jekyll serve","demo:build":"cd demo && bundle exec jekyll build","demo:install":"npm run transpile && cd demo/examples && npm run latest && cd ../.. && npm run clean","demo:publish":"npm run demo:build && gh-pages -d demo/_site/","transpile":"ngc -p ./tsconfig.json","clean":"del-cli './{recaptcha/,index,forms}*.{js,d.ts,js.map,metadata.json}'","changelog":"conventional-changelog -p angular -i CHANGELOG.md -s","lint:prod":"tslint --project ./tsconfig.json --type-check","lint":"npm run lint:prod -- --force","build":"npm run clean && npm run lint:prod && npm run transpile","pub":"npm run build && npm publish","prepush":"npm run lint:prod"},"main":"index.js","typings":"index.d.ts","repository":{"type":"git","url":"git+https://github.com/DethAriel/ng-recaptcha.git"},"keywords":["angular","recaptcha","angular-recaptcha","ng-recaptcha"],"author":{"name":"Ruslan Arkhipau","email":"dethariel@gmail.com"},"license":"MIT","optionalDependencies":{"@types/grecaptcha":"^2.0.33"},"peerDependencies":{"@angular/core":"^4.0.0 || ^2.0.0"},"devDependencies":{"@angular/common":"^4.0.0","@angular/compiler":"^4.0.0","@angular/compiler-cli":"^4.0.0","@angular/core":"^4.0.0","@angular/forms":"^4.0.0","@angular/platform-browser":"^4.0.0","@types/core-js":"^0.9.39","@types/grecaptcha":"^2.0.33","angular-precommit":"^1.0.3","codelyzer":"^3.0.1","conventional-changelog-cli":"^1.3.1","del-cli":"^0.2.1","gh-pages":"^0.12.0","husky":"^0.13.3","rxjs":"^5.2.0","tslint":"^5.1.0","typescript":"^2.2.1","zone.js":"^0.8.5"},"homepage":"https://github.com/DethAriel/ng-recaptcha#readme","gitHead":"dcd9275b223329e3cc936a260bc42f12873cca96","bugs":{"url":"https://github.com/DethAriel/ng-recaptcha/issues"},"dependencies":{"@types/grecaptcha":"^2.0.33"},"_id":"ng-recaptcha@2.1.1","_shasum":"cc1590095d2f7fd467602d33a280d38698043d74","_from":".","_npmVersion":"3.10.10","_nodeVersion":"6.10.2","_npmUser":{"name":"dethariel","email":"dethariel@gmail.com"},"dist":{"shasum":"cc1590095d2f7fd467602d33a280d38698043d74","tarball":"https://registry.npmjs.org/ng-recaptcha/-/ng-recaptcha-2.1.1.tgz","integrity":"sha512-+YATXDa9hxvj4Gpde3mNGRoIVhlICWpoPt0clTJp+qWQtnsKmC3tYWtR7ra0p1tgmsevkyql2lFO6XTM/TTQ+A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIE22h8VroI1jNm2l8RBJhNQOo3E7V1RCZ7qjVyt6g2veAiEAzeJLFQjd9LTbwmYe0NkH/ONyDJX1x/79hEu/dPpIdu4="}]},"maintainers":[{"name":"dethariel","email":"dethariel@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/ng-recaptcha-2.1.1.tgz_1493755962947_0.3950760015286505"},"directories":{}},"2.2.0":{"name":"ng-recaptcha","version":"2.2.0","description":"Angular component for Google reCAPTCHA","scripts":{"demo":"npm run demo:install && npm run demo:serve","demo:serve":"cd demo && bundle exec jekyll serve","demo:build":"cd demo && bundle exec jekyll build","demo:install":"npm run transpile && cd demo/examples && npm run latest && cd ../.. && npm run clean","demo:publish":"npm run demo:build && gh-pages -d demo/_site/","transpile":"ngc -p ./tsconfig.json","clean":"del-cli './{recaptcha/,index,forms}*.{js,d.ts,js.map,metadata.json}'","changelog":"conventional-changelog -p angular -i CHANGELOG.md -s","lint:prod":"tslint --project ./tsconfig.json --type-check","lint":"npm run lint:prod -- --force","build":"npm run clean && npm run lint:prod && npm run transpile","pub":"npm run build && npm publish","prepush":"npm run lint:prod"},"main":"index.js","typings":"index.d.ts","repository":{"type":"git","url":"git+https://github.com/DethAriel/ng-recaptcha.git"},"keywords":["angular","recaptcha","angular-recaptcha","ng-recaptcha"],"author":{"name":"Ruslan Arkhipau","email":"dethariel@gmail.com"},"license":"MIT","optionalDependencies":{"@types/grecaptcha":"^2.0.33"},"peerDependencies":{"@angular/core":"^4.0.0 || ^2.0.0"},"devDependencies":{"@angular/common":"^4.0.0","@angular/compiler":"^4.0.0","@angular/compiler-cli":"^4.0.0","@angular/core":"^4.0.0","@angular/forms":"^4.0.0","@angular/platform-browser":"^4.0.0","@types/core-js":"^0.9.39","angular-precommit":"^1.0.3","codelyzer":"^3.0.1","conventional-changelog-cli":"^1.3.1","del-cli":"^0.2.1","gh-pages":"^0.12.0","husky":"^0.13.3","rxjs":"^5.2.0","tslint":"^5.1.0","typescript":"^2.2.1","zone.js":"^0.8.5"},"homepage":"https://github.com/DethAriel/ng-recaptcha#readme","gitHead":"247fa20c968c997cdc81a12287821b80c758e3f2","bugs":{"url":"https://github.com/DethAriel/ng-recaptcha/issues"},"dependencies":{"@types/grecaptcha":"^2.0.33"},"_id":"ng-recaptcha@2.2.0","_shasum":"5b3418d99822be71b269d947aca5a2599f2618ba","_from":".","_npmVersion":"4.6.1","_nodeVersion":"6.10.3","_npmUser":{"name":"dethariel","email":"dethariel@gmail.com"},"dist":{"shasum":"5b3418d99822be71b269d947aca5a2599f2618ba","tarball":"https://registry.npmjs.org/ng-recaptcha/-/ng-recaptcha-2.2.0.tgz","integrity":"sha512-25XbOHQSwSsed3dcs1GDDjhvFDtnqM2bZ+EGMK0eU4uP6AZoa9FrBgFN5TWI3iurI/3uIEU6l5/h4ehDtniPqA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICewrzJToESQ9gAarK+o9wLCv6rnvOyWMr0zZq3GB2bnAiEA/trjfZ7uLNlivGCqVJfX56xBaWCs6HNL2bCZQDR437s="}]},"maintainers":[{"name":"dethariel","email":"dethariel@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ng-recaptcha-2.2.0.tgz_1503097168107_0.5026154131628573"},"directories":{}},"3.0.0":{"name":"ng-recaptcha","version":"3.0.0","description":"Angular component for Google reCAPTCHA","scripts":{"demo":"npm run demo:install && npm run demo:serve","demo:serve":"cd demo && bundle exec jekyll serve","demo:build":"cd demo && bundle exec jekyll build","demo:install":"npm run transpile && cd demo/examples && npm run latest && cd ../.. && npm run clean","demo:publish":"npm run demo:build && gh-pages -d demo/_site/","transpile":"ngc -p ./tsconfig.json","clean":"del-cli './{recaptcha/,index,forms}*.{js,d.ts,js.map,metadata.json}'","changelog":"conventional-changelog -p angular -i CHANGELOG.md -s","lint:prod":"tslint --project ./tsconfig.json --type-check","lint":"npm run lint:prod -- --force","build":"npm run clean && npm run lint:prod && npm run transpile","pub":"npm run build && npm publish","prepush":"npm run lint:prod"},"main":"index.js","typings":"index.d.ts","repository":{"type":"git","url":"git+https://github.com/DethAriel/ng-recaptcha.git"},"keywords":["angular","recaptcha","angular-recaptcha","ng-recaptcha"],"author":{"name":"Ruslan Arkhipau","email":"dethariel@gmail.com"},"license":"MIT","optionalDependencies":{"@types/grecaptcha":"^2.0.33"},"peerDependencies":{"@angular/core":"^4.0.0 || ^5.0.0-beta.1"},"devDependencies":{"@angular/common":"^4.0.0","@angular/compiler":"^4.0.0","@angular/compiler-cli":"^4.0.0","@angular/core":"^4.0.0","@angular/forms":"^4.0.0","@angular/platform-browser":"^4.0.0","@types/core-js":"^0.9.39","angular-precommit":"^1.0.3","codelyzer":"^3.0.1","conventional-changelog-cli":"^1.3.1","del-cli":"^0.2.1","gh-pages":"^0.12.0","husky":"^0.13.3","rxjs":"^5.2.0","tslint":"~5.7.0","typescript":"^2.2.1","zone.js":"^0.8.5"},"homepage":"https://github.com/DethAriel/ng-recaptcha#readme","gitHead":"63b10db3d09574d4b6fb903422cb997260a81d03","bugs":{"url":"https://github.com/DethAriel/ng-recaptcha/issues"},"dependencies":{"@types/grecaptcha":"^2.0.33"},"_id":"ng-recaptcha@3.0.0","_shasum":"2d117a795ea42a5be769467bf0a39afa2fd6357d","_from":".","_npmVersion":"4.6.1","_nodeVersion":"6.10.3","_npmUser":{"name":"dethariel","email":"dethariel@gmail.com"},"dist":{"shasum":"2d117a795ea42a5be769467bf0a39afa2fd6357d","tarball":"https://registry.npmjs.org/ng-recaptcha/-/ng-recaptcha-3.0.0.tgz","integrity":"sha512-2cptRbkV+DbsltjaN0GbIOFFfSmnUdlCMajX/+T2QpER+AWh2d+9Ud36maL9tw8X53ljcLHsjWzB39jjeaOq3Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICaM/AVsOagFGxamLUhDQKuXt7TQl0rveegy3XHg2BbgAiAV12S40TxXkLt+HYYnyXgCJeHEOvr+Yb72EwOESJX4nw=="}]},"maintainers":[{"name":"dethariel","email":"dethariel@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ng-recaptcha-3.0.0.tgz_1504118094455_0.3973750628065318"},"directories":{}},"3.0.1":{"name":"ng-recaptcha","version":"3.0.1","description":"Angular component for Google reCAPTCHA","scripts":{"demo":"npm run demo:install && npm run demo:serve","demo:serve":"cd demo && bundle exec jekyll serve","demo:build":"cd demo && bundle exec jekyll build","demo:install":"npm run transpile && cd demo/examples && npm run latest && cd ../.. && npm run clean","demo:publish":"npm run demo:build && gh-pages -d demo/_site/","demo:version":"node bin/update-demo-config.js","transpile":"ngc -p ./tsconfig.json","clean":"del-cli './{recaptcha/,index,forms}*.{js,d.ts,js.map,metadata.json}'","changelog":"conventional-changelog -p angular -i CHANGELOG.md -s","version":"npm run changelog && npm run demo:version && git add CHANGELOG.md demo/_config.yml","postversion":"git push && git push --tags && npm run pub","lint:prod":"tslint --project ./tsconfig.json --type-check","lint":"npm run lint:prod -- --force","build":"npm run clean && npm run lint:prod && npm run transpile","pub":"npm run build && npm publish && npm run demo:publish","prepush":"npm run lint:prod"},"main":"index.js","typings":"index.d.ts","repository":{"type":"git","url":"git+https://github.com/DethAriel/ng-recaptcha.git"},"keywords":["angular","recaptcha","angular-recaptcha","ng-recaptcha"],"author":{"name":"Ruslan Arkhipau","email":"dethariel@gmail.com"},"license":"MIT","optionalDependencies":{"@types/grecaptcha":"^2.0.33"},"peerDependencies":{"@angular/core":"^4.0.0 || ^5.0.0-beta.1"},"devDependencies":{"@angular/common":"^4.0.0","@angular/compiler":"^4.0.0","@angular/compiler-cli":"^4.0.0","@angular/core":"^4.0.0","@angular/forms":"^4.0.0","@angular/platform-browser":"^4.0.0","@types/core-js":"^0.9.39","angular-precommit":"^1.0.3","codelyzer":"^3.0.1","conventional-changelog-cli":"^1.3.1","del-cli":"^0.2.1","gh-pages":"^0.12.0","husky":"^0.13.3","replace-in-file":"^3.0.0-beta.2","rxjs":"^5.2.0","tslint":"~5.7.0","typescript":"^2.2.1","zone.js":"^0.8.5"},"homepage":"https://github.com/DethAriel/ng-recaptcha#readme","gitHead":"d1f06f4d3b732dab332a4b891e9d780393915eb3","bugs":{"url":"https://github.com/DethAriel/ng-recaptcha/issues"},"dependencies":{"@types/grecaptcha":"^2.0.33"},"_id":"ng-recaptcha@3.0.1","_shasum":"b146be28f4601bc694ccb19f56acf09e2cf30ffd","_from":".","_npmVersion":"4.6.1","_nodeVersion":"6.10.3","_npmUser":{"name":"dethariel","email":"dethariel@gmail.com"},"dist":{"shasum":"b146be28f4601bc694ccb19f56acf09e2cf30ffd","tarball":"https://registry.npmjs.org/ng-recaptcha/-/ng-recaptcha-3.0.1.tgz","integrity":"sha512-TOBLw6lspmqo6YBnTFmCh0nqjLQwq+LQCwFyn8FP/yvLxzv047v9vEFWp/uW8PjrO7bdg2rGWhSF5ZT7SnUbUg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHXO4ioqwpt//UHCoA91lpuf8at09YRCAAftCL8t4HkhAiEAgEmTwYIZDZaXuVu8h/sXQ5q8+vkfP22ywtAs9yKpm/U="}]},"maintainers":[{"name":"dethariel","email":"dethariel@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ng-recaptcha-3.0.1.tgz_1506724523720_0.8002327820286155"},"directories":{}},"3.0.2":{"name":"ng-recaptcha","version":"3.0.2","description":"Angular component for Google reCAPTCHA","scripts":{"demo":"npm run demo:install && npm run demo:serve","demo:serve":"cd demo && bundle exec jekyll serve","demo:build":"cd demo && bundle exec jekyll build","demo:install":"npm run transpile && cd demo/examples && npm run latest && cd ../.. && npm run clean","demo:publish":"npm run demo:build && gh-pages -d demo/_site/","demo:version":"node bin/update-demo-config.js","transpile":"ngc -p ./tsconfig.json","clean":"del-cli './{recaptcha/,index,forms}*.{js,d.ts,js.map,metadata.json}'","changelog":"conventional-changelog --preset angular --infile CHANGELOG.md --same-file","github-release":"conventional-github-releaser --preset angular","version":"npm run changelog && npm run demo:version && git add CHANGELOG.md demo/_config.yml","postversion":"git push && git push --tags && npm run github-release && npm run pub","lint:prod":"tslint --project ./tsconfig.json --type-check","lint":"npm run lint:prod -- --force","build":"npm run clean && npm run lint:prod && npm run transpile","pub":"npm run build && npm publish && npm run demo:publish","prepush":"npm run lint:prod"},"main":"index.js","typings":"index.d.ts","repository":{"type":"git","url":"git+https://github.com/DethAriel/ng-recaptcha.git"},"keywords":["angular","recaptcha","angular-recaptcha","ng-recaptcha"],"author":{"name":"Ruslan Arkhipau","email":"dethariel@gmail.com"},"license":"MIT","optionalDependencies":{"@types/grecaptcha":"^2.0.33"},"peerDependencies":{"@angular/core":"^4.0.0 || ^5.0.0-beta.1"},"devDependencies":{"@angular/common":"^4.0.0","@angular/compiler":"^4.0.0","@angular/compiler-cli":"^4.0.0","@angular/core":"^4.0.0","@angular/forms":"^4.0.0","@angular/platform-browser":"^4.0.0","@types/core-js":"^0.9.39","angular-precommit":"^1.0.3","codelyzer":"^3.0.1","conventional-changelog-cli":"^1.3.1","conventional-github-releaser":"^1.1.12","del-cli":"^0.2.1","gh-pages":"^0.12.0","husky":"^0.13.3","replace-in-file":"^3.0.0-beta.2","rxjs":"^5.2.0","tslint":"~5.7.0","typescript":"^2.2.1","zone.js":"^0.8.5"},"homepage":"https://github.com/DethAriel/ng-recaptcha#readme","gitHead":"6472014bb1cabb62be6ad7b68e9d45bae8e306bf","bugs":{"url":"https://github.com/DethAriel/ng-recaptcha/issues"},"dependencies":{"@types/grecaptcha":"^2.0.33"},"_id":"ng-recaptcha@3.0.2","_shasum":"0c0a21ece99928e8e19e9d0aab82ab3038f99697","_from":".","_npmVersion":"4.6.1","_nodeVersion":"6.10.3","_npmUser":{"name":"dethariel","email":"dethariel@gmail.com"},"dist":{"shasum":"0c0a21ece99928e8e19e9d0aab82ab3038f99697","tarball":"https://registry.npmjs.org/ng-recaptcha/-/ng-recaptcha-3.0.2.tgz","integrity":"sha512-bdd16HdZZZm1PMM8qrmsNNOTONcW7UTIgcOCBSnXPlIy7Ph/USH8GMZFipQFssJhQpCZLrxhnsuG1pOa3uv1gA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBKZ0x9W6+5q0PALNB4TT54ZLE8iX863RbhV4SRe1wVUAiEAqIp3zI+vTmgCA2tfPyrEvjK7cEs2bIG93Uot8tsbuPY="}]},"maintainers":[{"name":"dethariel","email":"dethariel@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ng-recaptcha-3.0.2.tgz_1508349260482_0.20743080275133252"},"directories":{}},"3.0.3":{"name":"ng-recaptcha","version":"3.0.3","description":"Angular component for Google reCAPTCHA","scripts":{"demo":"npm run demo:install && npm run demo:serve","demo:serve":"cd demo && bundle exec jekyll serve","demo:build":"cd demo && bundle exec jekyll build","demo:install":"npm run transpile && cd demo/examples && npm run latest && cd ../.. && npm run clean","demo:publish":"npm run demo:build && gh-pages -d demo/_site/","demo:version":"node bin/update-demo-config.js","transpile":"ngc -p ./tsconfig.json","clean":"del-cli './{recaptcha/,index,forms}*.{js,d.ts,js.map,metadata.json}'","changelog":"conventional-changelog --preset angular --infile CHANGELOG.md --same-file","github-release":"conventional-github-releaser --preset angular","version":"npm run changelog && npm run demo:version && git add CHANGELOG.md demo/_config.yml","postversion":"git push && git push --tags && npm run github-release && npm run pub","lint:prod":"tslint --project ./tsconfig.json --type-check","lint":"npm run lint:prod -- --force","build":"npm run clean && npm run lint:prod && npm run transpile","pub":"npm run build && npm publish && npm run demo:publish","prepush":"npm run lint:prod"},"main":"index.js","typings":"index.d.ts","repository":{"type":"git","url":"git+https://github.com/DethAriel/ng-recaptcha.git"},"keywords":["angular","recaptcha","angular-recaptcha","ng-recaptcha"],"author":{"name":"Ruslan Arkhipau","email":"dethariel@gmail.com"},"license":"MIT","optionalDependencies":{"@types/grecaptcha":"^2.0.33"},"peerDependencies":{"@angular/core":"^4.0.0 || ^5.0.0-beta.1"},"devDependencies":{"@angular/common":"^4.0.0","@angular/compiler":"^4.0.0","@angular/compiler-cli":"^4.0.0","@angular/core":"^4.0.0","@angular/forms":"^4.0.0","@angular/platform-browser":"^4.0.0","@types/core-js":"^0.9.39","angular-precommit":"^1.0.3","codelyzer":"^3.0.1","conventional-changelog-cli":"^1.3.1","conventional-github-releaser":"^1.1.12","del-cli":"^0.2.1","gh-pages":"^0.12.0","husky":"^0.13.3","replace-in-file":"^3.0.0-beta.2","rxjs":"^5.2.0","tslint":"~5.7.0","typescript":"^2.2.1","zone.js":"^0.8.5"},"homepage":"https://github.com/DethAriel/ng-recaptcha#readme","gitHead":"03bb9a1396ac1f78737d42024ee49e5279842191","bugs":{"url":"https://github.com/DethAriel/ng-recaptcha/issues"},"dependencies":{"@types/grecaptcha":"^2.0.33"},"_id":"ng-recaptcha@3.0.3","_shasum":"2355e7875b94b92486cf21b674a28c9d0f000531","_from":".","_npmVersion":"4.6.1","_nodeVersion":"6.10.3","_npmUser":{"name":"dethariel","email":"dethariel@gmail.com"},"dist":{"shasum":"2355e7875b94b92486cf21b674a28c9d0f000531","tarball":"https://registry.npmjs.org/ng-recaptcha/-/ng-recaptcha-3.0.3.tgz","integrity":"sha512-ZObw72KBmkNBzhfS4fiBaEEbSrsSe0tIjizkyP1oc3M/jm/zwTAK+OXxij070gQyEb0HdCqmZkmHz4QDIxVh5g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDbfDb5rbtf/Hg7jciuu+amfoaeeHBIGVMtwJyFba5lvQIhAOtfoiA1GeZgGwrveUAsOKwUimjnGk+OhacNLN8RQ2wS"}]},"maintainers":[{"name":"dethariel","email":"dethariel@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ng-recaptcha-3.0.3.tgz_1514322123910_0.2095123587641865"},"directories":{}},"3.0.5":{"name":"ng-recaptcha","version":"3.0.5","description":"Angular component for Google reCAPTCHA","scripts":{"demo":"yarn demo:serve","demo:serve":"cd demo && yarn start","demo:build":"cd demo && yarn build","demo:publish":"run-s demo:build demo:publish-gh-pages","demo:publish-gh-pages":"gh-pages -d demo/dist/ng-recaptcha","transpile":"ngc -p ./tsconfig.json","clean":"del-cli './{recaptcha/,index,forms}*.{js,d.ts,js.map,metadata.json}'","changelog":"conventional-changelog --preset angular --infile CHANGELOG.md --same-file","github-release":"conventional-github-releaser --preset angular","version":"yarn changelog && git add CHANGELOG.md","postversion":"git push && git push --tags && run-s github-release pub","lint:prod":"tslint --project ./tsconfig.json --type-check","lint":"yarn lint:prod --force","build":"run-s clean lint:prod transpile","pub":"run-s build publish demo:publish","publish":"npm publish","prepush":"yarn lint:prod"},"main":"index.js","typings":"index.d.ts","repository":{"type":"git","url":"git+https://github.com/DethAriel/ng-recaptcha.git"},"keywords":["angular","recaptcha","angular-recaptcha","ng-recaptcha"],"author":{"name":"Ruslan Arkhipau","email":"dethariel@gmail.com"},"license":"MIT","optionalDependencies":{"@types/grecaptcha":"^2.0.33"},"peerDependencies":{"@angular/core":"^4.0.0 || ^5.0.0-beta.1"},"devDependencies":{"@angular/common":"^4.0.0","@angular/compiler":"^4.0.0","@angular/compiler-cli":"^4.0.0","@angular/core":"^4.0.0","@angular/forms":"^4.0.0","@angular/platform-browser":"^4.0.0","@types/core-js":"^0.9.39","angular-precommit":"^1.0.3","codelyzer":"^3.0.1","conventional-changelog-cli":"^1.3.1","conventional-github-releaser":"^1.1.13","del-cli":"^0.2.1","gh-pages":"^0.12.0","husky":"^0.13.3","npm-run-all":"^4.1.2","replace-in-file":"^3.0.0-beta.2","rxjs":"^5.2.0","tslint":"~5.7.0","typescript":"^2.2.1","zone.js":"^0.8.5"},"homepage":"https://github.com/DethAriel/ng-recaptcha#readme","gitHead":"a215c159c0aba044525c4978f766b2d480c1bd74","bugs":{"url":"https://github.com/DethAriel/ng-recaptcha/issues"},"dependencies":{"@types/grecaptcha":"^2.0.33"},"_id":"ng-recaptcha@3.0.5","_shasum":"e22a20800901f5cf4468cf5f5d69af01f1220793","_from":".","_npmVersion":"4.6.1","_nodeVersion":"6.10.3","_npmUser":{"name":"dethariel","email":"dethariel@gmail.com"},"dist":{"shasum":"e22a20800901f5cf4468cf5f5d69af01f1220793","tarball":"https://registry.npmjs.org/ng-recaptcha/-/ng-recaptcha-3.0.5.tgz","fileCount":34,"unpackedSize":53356,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa43sCCRA9TVsSAnZWagAAGfgP/0BMHC/72bGt/cuJaJH1\nMHJtU0PmbVO3w6vT/YkXH5W50WwIrjIgDjG5wdNrioA0ul6PDsWBkj93eKgf\nMelW1YQF3eTAyjWCjPl4xVV1vm52YvyxmrW1fMedDgttPOiB28b63hSoD+sA\nBreEd9ayQ7ouj4k21eNdMJ6wxdHBF+LJMq9RpyfxXOkiLV1WY9w9xnciU4Nq\n/WdkfCFigQRJJ3HCFWYJaQnBKo4UWuN+8S5yy7IkygZDmGPDriMujPfAfx9h\n/drUHplyilnlEuaxDRxKxk1zIDBci9YtD7tj65CaEna1ftiWh45tSZHHzYNI\nPInVOkYjHvY0Z+Kh4zC9Y4OIL/4dCgtWDWAFohe3J6hXQdHCm5Oc9TbqbjQP\nZY2txUif4RdS8E90mL9uWz9s2aG6vQ1wnKwyk7NsxI+/EVLOt8uOS4iYZOUV\nBkXEPpsRWsozAbk+MlM4fGRwIqnCNgcml1oN85bmCNPz92b4ieUMlYfIrlIV\nd2DdOyHE2vb5HvQ0gFgP1uuGFj+IYAO/wHmbbtl68G5Vz9+1q23fviXIbyVd\nuB7oDaJWWGU2lnBhFfvzyOGLDDEOP+Tdc262RMcZvTnx35Pxaf/eyTYVqZtN\nBccpP/ycZLUEbINRb9nt9kLzreZXOxyF7nw3XV3+4hKrbXn5DBFGDwt/qipr\nTBIV\r\n=lHs9\r\n-----END PGP SIGNATURE-----\r\n","integrity":"sha512-lq6zf0BKrpy1J42m10F1uRwtmlQqdM/TUCwiYiXrmqOtfuZ5p2+3e4DIdzVfJpMnd6iexF/58ztb+Lm7MfdncQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCSImhoIWxukf49PDQFYefjRNttJpwqFUgcJRcZZRbpYQIgANizKcfsXZKNCbzc4opubvtyYBiX9yUgXDolCqqXnSQ="}]},"maintainers":[{"name":"dethariel","email":"dethariel@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ng-recaptcha_3.0.5_1524857601270_0.4609180238278032"},"_hasShrinkwrap":false},"4.0.0-beta.1":{"name":"ng-recaptcha","version":"4.0.0-beta.1","description":"Angular component for Google reCAPTCHA","scripts":{"demo":"yarn demo:serve","demo:serve":"cd demo && yarn start","demo:build":"cd demo && yarn build","demo:publish":"run-s demo:build demo:publish-gh-pages","demo:publish-gh-pages":"gh-pages -d demo/dist/ng-recaptcha","pack-latest":"yarn transpile && mv \"$(npm pack)\" ng-recaptcha-latest.tgz","transpile":"ngc -p ./tsconfig.json","clean":"del-cli './{recaptcha/,index,forms}*.{js,d.ts,js.map,metadata.json}' 'ng-recaptcha-*.tgz'","changelog":"conventional-changelog --preset angular --infile CHANGELOG.md --same-file","github-release":"conventional-github-releaser --preset angular","release":"NPM_TAG=latest npm version $1","release-beta":"NPM_TAG=beta npm version $1","version":"yarn changelog && git add CHANGELOG.md","postversion":"git push && git push --tags && run-s github-release pub","lint:prod":"tslint --project ./tsconfig.json --type-check","lint":"yarn lint:prod --force","build":"run-s clean lint:prod transpile","pub":"yarn build && npm publish --tag $NPM_TAG && yarn demo:publish","prepush":"yarn lint:prod"},"main":"index.js","typings":"index.d.ts","repository":{"type":"git","url":"git+https://github.com/DethAriel/ng-recaptcha.git"},"keywords":["angular","recaptcha","angular-recaptcha","ng-recaptcha"],"author":{"name":"Ruslan Arkhipau","email":"dethariel@gmail.com"},"license":"MIT","optionalDependencies":{"@types/grecaptcha":"^2.0.33"},"peerDependencies":{"@angular/core":"^6.0.0"},"devDependencies":{"@angular/common":"^6.0.0","@angular/compiler":"^6.0.0","@angular/compiler-cli":"^6.0.0","@angular/core":"^6.0.0","@angular/forms":"^6.0.0","@angular/platform-browser":"^6.0.0","@types/core-js":"^0.9.39","angular-precommit":"^1.0.3","codelyzer":"^4.3.0","conventional-changelog-cli":"^1.3.1","conventional-github-releaser":"^1.1.13","del-cli":"^0.2.1","gh-pages":"^0.12.0","husky":"^0.13.3","npm-run-all":"^4.1.2","replace-in-file":"^3.0.0-beta.2","rxjs":"^6.1.0","tslint":"~5.7.0","typescript":"~2.7.2","zone.js":"^0.8.26"},"homepage":"https://github.com/DethAriel/ng-recaptcha#readme","readme":"# Angular component for Google reCAPTCHA\n\n## ng-recaptcha [![npm version](https://badge.fury.io/js/ng-recaptcha.svg)](http://badge.fury.io/js/ng-recaptcha)\n\n[![MIT licensed](https://img.shields.io/badge/license-MIT-blue.svg)](https://raw.githubusercontent.com/dethariel/ng-recaptcha/master/LICENSE)\n[![Build Status](https://travis-ci.org/DethAriel/ng-recaptcha.svg?branch=master)](https://travis-ci.org/DethAriel/ng-recaptcha)\n\nA simple, configurable, easy-to-start component for handling reCAPTCHA.\n\n## Table of contents\n1. [Installation](#installation)\n2. [Basic Usage](#example-basic)\n   * [Playground](#playground)\n3. [Working with `@angular/forms`](#forms-ready)\n4. [API](#api)\n   * [Input Options](#api-options)\n   * [Events](#api-events)\n   * [Methods](#api-methods)\n5. [Examples](#examples)\n   * [Configuring the component globally](#example-global-config)\n   * [Specifying a different language](#example-language)\n   * [Loading the reCAPTCHA API by yourself](#example-preload-api)\n   * [Usage with `required` in forms](#example-forms)\n   * [Working with invisible reCAPTCHA](#example-invisible)\n   * [SystemJS configuration](#example-systemjs)\n\n## <a name=\"installation\"></a>Installation\n\nThe easiest way is to install trough [npm](https://www.npmjs.com/package/ng-recaptcha):\n```\nnpm i ng-recaptcha --save\n```\n\n## <a name=\"example-basic\"></a>Basic Usage [(see in action)](https://dethariel.github.io/ng-recaptcha/)\n\nTo start with, you need to import the `RecaptchaModule` (more on that [later](#modules)):\n\n```typescript\n// app.module.ts\nimport { RecaptchaModule } from 'ng-recaptcha';\n// if you need forms support:\n// import { RecaptchaFormsModule } from 'ng-recaptcha/forms';\nimport { BrowserModule }  from '@angular/platform-browser';\nimport { MyApp } from './app.component.ts';\n\n@NgModule({\n  bootstrap: [MyApp],\n  declarations: [MyApp],\n  imports: [\n    BrowserModule,\n    RecaptchaModule.forRoot(), // Keep in mind the \"forRoot\"-magic nuances!\n    // RecaptchaFormsModule, // if you need forms support\n  ],\n})\nexport class MyAppModule { }\n```\n\nOnce you have done that, the rest is simple:\n\n```typescript\n// app.component.ts\nimport { Component } from '@angular/core';\n\n@Component({\n    selector: 'my-app',\n    template: `<re-captcha (resolved)=\"resolved($event)\" siteKey=\"YOUR_SITE_KEY\"></re-captcha>`,\n}) export class MyApp {\n    resolved(captchaResponse: string) {\n        console.log(`Resolved captcha with response ${captchaResponse}:`);\n    }\n}\n```\n\n```typescript\n// boot.ts\nimport { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\nimport { MyAppModule } from './app.module.ts';\n\nplatformBrowserDynamic().bootstrapModule(MyAppModule);\n```\n\n### <a name=\"playground\"></a>Playground\n\nYou can also play with [this demo plunk](https://plnkr.co/edit/JNVNl0WJl3bFuWtt2O9i?p=preview) to get a feel of how this component can be used.\n\n## <a name=\"forms-ready\"></a>Working with `@angular/forms`\n\nThere are two modules available for you:\n\n```typescript\nimport { RecaptchaModule } from 'ng-recaptcha';\nimport { RecaptchaFormsModule } from 'ng-recaptcha/forms';\n```\n\nIf you want your `<re-captcha>` element to work correctly with `[(ngModel)]` directive,\nyou need to import the `RecaptchaFormsModule` into your application module (pretty much\nlike with Angular own `'@angular/forms'` module).\n\nIf you do not rely on\nAngular forms in your project, you should use the \"no-forms\" module version, as\nit does not require the `@angular/forms` package to be bundled with your code.\n\n## <a name=\"api\"></a>API\n\n### <a name=\"api-options\"></a>Input Options\n\nThe component supports this options:\n\n* `siteKey`\n* `theme`\n* `type`\n* `size`\n* `tabIndex`\n* `badge`\n\nThey are all pretty well described either in the [reCAPTCHA docs](https://developers.google.com/recaptcha/docs/display), or in the [invisible reCAPTCHA docs](https://developers.google.com/recaptcha/docs/invisible),\nso I won't duplicate it here.\n\nBesides specifying these options on the component itself, you can provide a global `<re-captcha>` configuration - see [Configuring the component globally](#example-global-config) section below.\n\n### <a name=\"api-events\"></a>Events\n\n* `resolved(response: string)`. Occurs when the captcha resolution value changed.\n  When user resolves captcha, use `response` parameter to send to the server for verification.\n  This parameter is equivalent to calling [`grecaptcha.getResponse`](https://developers.google.com/recaptcha/docs/display#js_api).\n\n  If the captcha has expired prior to submitting its value to the server, the component\n  will reset the captcha, and trigger the `resolved` event with `response === null`.\n\n### <a name=\"api-methods\"></a>Methods\n\n* `reset()`. Performs a manual captcha reset. This method might be useful if your form\nvalidation failed, and you need the user to re-enter the captcha.\n* `execute()`. Executes the invisible recaptcha. Does nothing if component's size is not set to \"invisible\". See [Invisible reCAPTCHA developers guide](https://developers.google.com/recaptcha/docs/invisible#js_api) for more information.\n\n## <a name=\"examples\"></a>Examples\n\n### <a name=\"example-global-config\"></a>Configuring the component globally [(see in action)](https://dethariel.github.io/ng-recaptcha/global-config)\n\nSome properties are global - including `siteKey`, `size`, and others. You can provide them at the module-level using the `RECAPTCHA_SETTINGS` provider:\n\n```typescript\nimport { RECAPTCHA_SETTINGS, RecaptchaSettings } from 'ng-recaptcha';\n\n@NgModule({\n  providers: [\n    {\n      provide: RECAPTCHA_SETTINGS,\n      useValue: { siteKey: '<YOUR_KEY>' } as RecaptchaSettings,\n    },\n  ],\n}) export class MyModule { }\n```\n\nGlobal properties can be overridden on a case-by-case basis - the values on the `<re-captcha>` component itself take precedence over global settings.\n\n### <a name=\"example-language\"></a>Specifying a different language [(see in action)](https://dethariel.github.io/ng-recaptcha/language)\n\n`<re-captcha>` supports various languages. By default recaptcha will guess the user's language itself\n(which is beyond the scope of this lib).\nBut you can override this behavior and provide a specific language to use.\nThe language setting is global, though, and cannot be set on a per-captcha basis.\nIt can be provided like this:\n\n```typescript\nimport { RECAPTCHA_LANGUAGE } from 'ng-recaptcha';\n\n@NgModule({\n  providers: [\n    {\n      provide: RECAPTCHA_LANGUAGE,\n      useValue: 'fr', // use French language\n    },\n  ],\n}) export class MyModule { }\n```\n\nYou can find the list of supported languages in [reCAPTCHA docs](https://developers.google.com/recaptcha/docs/language).\n\n### <a name=\"example-preload-api\"></a>Loading the reCAPTCHA API by yourself [(see in action)](https://dethariel.github.io/ng-recaptcha/preload-api)\n\nBy default, the component assumes that the reCAPTCHA API loading will be handled\nby the `RecaptchaLoaderService`. However, you can override that by providing your\ninstance of this service to the Angular DI.\n\nThe below code snippet is an example of how such a provider can be implemented.\n\n**TL;DR**: there should be an `Observable` that eventually resolves to a\n`grecaptcha`-compatible object (e.g. `grecaptcha` itself).\n\n```html\n<script src=\"https://www.google.com/recaptcha/api.js?render=explicit&amp;onload=onloadCallback\"></script>\n\n<script>\n    // bootstrap the application once the reCAPTCHA api has loaded\n    function onloadCallback() {\n        System.import('app').catch(function(err) { console.error(err); });\n    }\n</script>\n```\n\n```typescript\nimport { RecaptchaLoaderService } from 'ng-recaptcha';\n\n@Injectable()\nexport class PreloadedRecaptchaAPIService {\n  public ready: Observable<ReCaptchaV2.ReCaptcha>;\n\n  constructor() {\n    let readySubject = new BehaviorSubject<ReCaptchaV2.ReCaptcha>(grecaptcha);\n    this.ready = readySubject.asObservable();\n  }\n}\n\n@NgModule({\n  providers: [\n    {\n      provide: RecaptchaLoaderService,\n      useValue: new PreloadedRecaptchaAPIService(),\n    },\n  ],\n}) export class MyModule { }\n```\n\n### <a name=\"example-forms\"></a>Usage with `required` in forms [(see in action)](https://dethariel.github.io/ng-recaptcha/forms)\n\nIt's very easy to put `<re-captcha>` in an Angular form and have it `require`d - just\nadd the `required` attribute to the `<re-captcha>` element. Do not forget to import `RecaptchaFormsModule` from `'ng-recaptcha/forms'`!\n\n```typescript\n@Component({\n  selector: 'my-form',\n  template: `\n  <form>\n    <re-captcha\n      [(ngModel)]=\"formModel.captcha\"\n      name=\"captcha\"\n      required\n      siteKey=\"YOUR_SITE_KEY\"\n    ></re-captcha>\n  </form>`,\n}) export class MyForm {\n  formModel = new MyFormModel();\n}\n```\n\nA similar approach can be taken for reactive forms:\n\n```typescript\n@Component({\n  selector: 'my-reactive-form',\n  template: `\n    <form [formGroup]=\"reactiveForm\">\n      <re-captcha formControlName=\"recaptchaReactive\"></re-captcha>\n      <button [disabled]=\"reactiveForm.invalid\">Submit</button>\n    </form>\n  `,\n}) export class MyReactiveForm {\n  reactiveForm: FormGroup;\n\n  ngOnInit() {\n    this.reactiveForm = new FormGroup({\n      recaptchaReactive: new FormControl(null, Validators.required)\n    });\n  }\n}\n```\n\n### <a name=\"example-invisible\"></a>Working with invisible reCAPTCHA [(see in action)](https://dethariel.github.io/ng-recaptcha/invisible)\n\nWorking with [invisible reCAPTCHA](https://developers.google.com/recaptcha/docs/invisible) is almost the same as with regular one.\nFirst, you need to provide the right size:\n\n```html\n<re-captcha size=\"invisible\" ...></re-captcha>\n```\n\nYou will also need to invoke the [`\"execute()\"`](https://developers.google.com/recaptcha/docs/invisible#programmatic_execute) method manually. This can be done by either obtaining a reference to `RecaptchaComponent` via `@ViewChild()`, or by using inline template reference:\n\n```html\n<re-captcha #captchaRef=\"reCaptcha\" ...></re-captcha>\n...\n<button (click)=\"captchaRef.execute()\">Submit</button>\n```\n\nNormally you would only submit a form when recaptcha response has been received. This can be achieved by reacting to `(resolved)` event and invoking submit logic when the captcha response is truthy (this will not try to submit the form when recaptcha response has expired). A sample implementation would look like this:\n\n```typescript\n@Component({\n  selector: 'my-form',\n  template: `\n  <form>\n    <re-captcha\n      #captchaRef=\"reCaptcha\"\n      siteKey=\"YOUR_SITE_KEY\"\n      size=\"invisible\"\n      (resolved)=\"$event && submit($event)\"\n    ></re-captcha>\n    <button (click)=\"captchaRef.execute()\">Submit</button>\n  </form>`,\n}) export class MyForm {\n  public submit(captchaResponse: string): void {\n    this.http.post({\n      captcha: captchaResponse,\n      /* ... */\n    });\n  }\n}\n```\n\n### <a name=\"example-systemjs\"></a>SystemJS configuration\n\nTo configure the package to work with SystemJS, you would configure it approximately like that (assuming you've installed `ng-recaptcha` using `npm`):\n\n```javascript\n// SystemJS config file\n(function () {\n  System.config({\n    paths: {\n      'npm:': '/node_modules/',\n    },\n    map: {\n      'ng-recaptcha': 'npm:ng-recaptcha',\n    },\n    packages: {\n      'ng-recaptcha': { main: './index.js' },\n    },\n  });\n})();\n```\n","readmeFilename":"README.md","gitHead":"0da271b1f4f5a451e29e834f3b2057391907bfac","bugs":{"url":"https://github.com/DethAriel/ng-recaptcha/issues"},"dependencies":{"@types/grecaptcha":"^2.0.33"},"_id":"ng-recaptcha@4.0.0-beta.1","_npmVersion":"5.6.0","_nodeVersion":"8.9.4","_npmUser":{"name":"dethariel","email":"dethariel@gmail.com"},"dist":{"integrity":"sha512-8r+jpN/hMfrCpFqb1879FtYSIe4xW0ZJGOm3ahraJjjHYgWQMmKD5OdYI4AhgUOEpRgxl+LiWOWGV8MdLuMSAw==","shasum":"68f80c8f136718230d401ff2d5486bc83e043e99","tarball":"https://registry.npmjs.org/ng-recaptcha/-/ng-recaptcha-4.0.0-beta.1.tgz","fileCount":33,"unpackedSize":47240,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa/amACRA9TVsSAnZWagAAdEUP/1b7giR84F4uYKFhwjU+\noh3PoSkkqlcHwHLBB54s+j/slqpJGA/UkFihIkWb4JFs4/YhWr0ZKSlKIDZO\niXNAHzCIdVzpmkXWF4YuR4sI8u2HDWkNiSw8scX67eOcHc7h5iMj9QrjIm7n\nLVBBG0GM3E9u80L5clke4iHfS+tKeMbHwgLeE9Rie8NGI8ATL/ILCwwloLyN\nJsqiVH+LLwRvmQ3u2t5YJ26qiJ8JlYP3125Pd9/RNOB3Zsto79xNswWfPss8\nR4DsIhz+BMESZ8uOOcSianmR0tece4F/t/uV6KX2uXy1qlRtqHQJtwuttSp6\nsJE47Ws1FNazwYlBfrTysNb2LXM7q+zI6KbryWqVni8j5WE9Yh3fCksxs0av\nVrrMlUB3JWu42Zb2Ltm68duUT3BZFkhp8fLDGhc6oOD6STN7L5BrlqV+7Y95\nNruKTPA0xbAITJkvZ2G/RmfX+OOjiJ5+vfmnqg7gxKrXnR9DbBKVF9pCV754\nYREBZjjfHxGpvAfAkQI1+QBYwCCtAJmFFYfyBgP1Rcz5lBvZAA5GlrLeoIHj\nwI/kDINL+GzNU2IM/v4MONZ/IVafosmKrBDPIDDSyvRD4Jfccc3xBZjwBmpb\ndfjLUCY9H+uN1w02zFgdOzR5hcn9si7j/41BoMxFRcmsFRmg+CgX02B9/oCH\nk76P\r\n=YvxB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAYWNXyyi80BwZxVdYFigYDQo21XFQJTUP+tmHBJFPGYAiA5w+QABWU+muk8ZeMQ8sckt9qfgflO9jHlw/PH7GALLg=="}]},"maintainers":[{"name":"dethariel","email":"dethariel@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ng-recaptcha_4.0.0-beta.1_1526573439695_0.6845721856812175"},"_hasShrinkwrap":false},"4.0.0":{"name":"ng-recaptcha","version":"4.0.0","description":"Angular component for Google reCAPTCHA","scripts":{"demo":"yarn demo:serve","demo:serve":"cd demo && yarn start","demo:build":"cd demo && yarn build","demo:publish":"run-s demo:build demo:publish-gh-pages","demo:publish-gh-pages":"gh-pages -d demo/dist/ng-recaptcha","pack-latest":"yarn transpile && mv \"$(npm pack)\" ng-recaptcha-latest.tgz","transpile":"ngc -p ./tsconfig.json","clean":"del-cli './{recaptcha/,index,forms}*.{js,d.ts,js.map,metadata.json}' 'ng-recaptcha-*.tgz'","changelog":"conventional-changelog --preset angular --infile CHANGELOG.md --same-file","github-release":"conventional-github-releaser --preset angular","release":"npm whoami && NPM_TAG=latest npm version $1","release-beta":"npm whoami && NPM_TAG=beta npm version $1","version":"yarn changelog && git add CHANGELOG.md","postversion":"git push && git push --tags && run-s github-release pub","lint:prod":"tslint --project ./tsconfig.json --type-check","lint":"yarn lint:prod --force","build":"run-s clean lint:prod transpile","pub":"yarn build && npm publish --tag $NPM_TAG && yarn demo:publish","prepush":"yarn lint:prod"},"main":"index.js","typings":"index.d.ts","repository":{"type":"git","url":"git+https://github.com/DethAriel/ng-recaptcha.git"},"keywords":["angular","recaptcha","angular-recaptcha","ng-recaptcha"],"author":{"name":"Ruslan Arkhipau","email":"dethariel@gmail.com"},"license":"MIT","optionalDependencies":{"@types/grecaptcha":"^2.0.33"},"peerDependencies":{"@angular/core":"^6.0.0"},"devDependencies":{"@angular/common":"^6.0.0","@angular/compiler":"^6.0.0","@angular/compiler-cli":"^6.0.0","@angular/core":"^6.0.0","@angular/forms":"^6.0.0","@angular/platform-browser":"^6.0.0","@types/core-js":"^0.9.39","angular-precommit":"^1.0.3","codelyzer":"^4.3.0","conventional-changelog-cli":"^1.3.1","conventional-github-releaser":"^1.1.13","del-cli":"^0.2.1","gh-pages":"^0.12.0","husky":"^0.13.3","npm-run-all":"^4.1.2","replace-in-file":"^3.0.0-beta.2","rxjs":"^6.1.0","tslint":"~5.7.0","typescript":"~2.7.2","zone.js":"^0.8.26"},"homepage":"https://github.com/DethAriel/ng-recaptcha#readme","gitHead":"d53d997121cef665c4b8892cd1e8bed3c5ef4df8","bugs":{"url":"https://github.com/DethAriel/ng-recaptcha/issues"},"dependencies":{"@types/grecaptcha":"^2.0.33"},"_id":"ng-recaptcha@4.0.0","_npmVersion":"5.6.0","_nodeVersion":"8.11.2","_npmUser":{"name":"dethariel","email":"dethariel@gmail.com"},"dist":{"integrity":"sha512-eT62d14cK4IRhrp9g/T8nsZdnDCBodBPDf90mhLVZMxHmx5uXIt0R+zdc0VpZgrgqpHyrpl6KQY4cLkik2l+6g==","shasum":"26380b556e477a6a3ecd4a7d0127da3a7f3ef978","tarball":"https://registry.npmjs.org/ng-recaptcha/-/ng-recaptcha-4.0.0.tgz","fileCount":33,"unpackedSize":47383,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbrsFGCRA9TVsSAnZWagAAwsAP+wevfaA9/WCqOtmbddHo\nJT/64p/wjaCQK1BZQULtTbqJZcGOT8xgIdnVvmDL2gF363uJ7VbgKFKaEhcO\npLDToRXQYc9u+2EHxEENHuiFgY3RWX4teqmQcIKpwHqScJ9NinSgpgVkwgSM\neFwoSFU7/ohegRI7GS26DuikadSO9Dh7sSAnd4QmXRDRgVxnngA31asSdLyy\nP7YDZhIUt9HFhfo2jpEJRVpjtI4S8pcfY3yCQAo9srEL221iszcXtRNXbcHl\ns1LDqeVXcJ5Udsy2n7MI3jL38xOdRLelLvDiXFmGQeKE3PQpVyfRLzAJYl8b\ndgEW9u8ErSn3GdQn+SrWTDECsxGYSN7n/ZGOSFjTuyOjLy9DbSDf3hmdZoaV\nYqiFrGwzte5GUUmcDvvaJEZnTS3vOty9wvMqXHyV6uUQohwikotOlmKAooC0\nlFYvBtZ5CAIH5vTdYhDYfv13i4wQoPBKdYLI3fkPfOOafb5gUb4Eli750MTN\na9t4XaYn1/1QDMOBpCedi8YAh6p/W3zhiSNjdRCzmol0hr1IboGdYfT/vWhJ\nwCcym7C6ddXWvZPqN8k4Dzi2BPz/J29Iurz2gdMB0F7XQpCIfLgLYLD3ownD\nrAkkVoPx8XMZ6vjOKEYHl1GnHntiQcXDn3dTWhfc+0AqmtPe3UIWNnhSQKgR\n84Vl\r\n=9oUb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAtHauenA1Q/LYx9QMLZ6SoQZpNNTX2RfyGU1QH5dwDsAiEAquS8aGY5muFm3fjgR6t1cON30vww/CSR/hLZeX1qhIk="}]},"maintainers":[{"name":"dethariel","email":"dethariel@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ng-recaptcha_4.0.0_1538179397556_0.20585755879084933"},"_hasShrinkwrap":false},"4.1.0":{"name":"ng-recaptcha","version":"4.1.0","description":"Angular component for Google reCAPTCHA","scripts":{"demo":"yarn demo:serve","demo:serve":"cd demo && yarn start","demo:build":"cd demo && yarn build","demo:publish":"yarn demo:publish-gh-pages","demo:publish-gh-pages":"gh-pages -d demo/dist/ng-recaptcha","pack-latest":"yarn transpile && mv \"$(npm pack)\" ng-recaptcha-latest.tgz","transpile":"ngc -p ./tsconfig.json","clean":"del-cli './{recaptcha/,index,forms}*.{js,d.ts,js.map,metadata.json}' 'ng-recaptcha-*.tgz'","changelog":"conventional-changelog --preset angular --infile CHANGELOG.md --same-file","github-release":"conventional-github-releaser --preset angular","prepare-release":"npm whoami && npm version $1","push-release":"git push && git push --tags && run-s github-release pub","release":"NPM_TAG=latest yarn push-release","release-beta":"NPM_TAG=beta yarn push-release","version":"yarn changelog && git add CHANGELOG.md && yarn demo:build && git add demo/yarn.lock","lint:prod":"tslint --project ./tsconfig.json --type-check","lint":"yarn lint:prod --force","build":"run-s clean lint:prod transpile","pub":"yarn build && npm publish --tag $NPM_TAG && yarn demo:publish","prepush":"yarn lint:prod"},"main":"index.js","typings":"index.d.ts","repository":{"type":"git","url":"git+https://github.com/DethAriel/ng-recaptcha.git"},"keywords":["angular","recaptcha","angular-recaptcha","ng-recaptcha"],"author":{"name":"Ruslan Arkhipau","email":"dethariel@gmail.com"},"license":"MIT","optionalDependencies":{"@types/grecaptcha":"^2.0.33"},"peerDependencies":{"@angular/core":"^6.0.0 || ^7.0.0"},"devDependencies":{"@angular/common":"^6.0.0","@angular/compiler":"^6.0.0","@angular/compiler-cli":"^6.0.0","@angular/core":"^6.0.0","@angular/forms":"^6.0.0","@angular/platform-browser":"^6.0.0","@types/core-js":"^0.9.39","angular-precommit":"^1.0.3","codelyzer":"^4.3.0","conventional-changelog-cli":"^1.3.1","conventional-github-releaser":"^1.1.13","del-cli":"^0.2.1","gh-pages":"^0.12.0","husky":"^0.13.3","npm-run-all":"^4.1.2","replace-in-file":"^3.0.0-beta.2","rxjs":"^6.1.0","tslint":"~5.7.0","typescript":"~2.7.2","zone.js":"^0.8.26"},"homepage":"https://github.com/DethAriel/ng-recaptcha#readme","gitHead":"4db0d66bf0dcf59e8d545c5768bc383a0d7cd68d","bugs":{"url":"https://github.com/DethAriel/ng-recaptcha/issues"},"dependencies":{"@types/grecaptcha":"^2.0.33"},"_id":"ng-recaptcha@4.1.0","_npmVersion":"5.6.0","_nodeVersion":"8.11.2","_npmUser":{"name":"dethariel","email":"dethariel@gmail.com"},"dist":{"integrity":"sha512-22sopMAcEQqjx6AIi93vMBjaNsVBPRo6QV2P35YdcIy61X4xBwzfOFhCuAF92jg+eCasN0+BXxdoibJS9mKcvA==","shasum":"c2ba5479caedce12c8563a5868b6d20ce173daf3","tarball":"https://registry.npmjs.org/ng-recaptcha/-/ng-recaptcha-4.1.0.tgz","fileCount":33,"unpackedSize":48555,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb0LgGCRA9TVsSAnZWagAAWzMP/0nvTpLVThvWIB6rCBlE\ntjraAGjfk1XjSXMR3JK9NLFN5YbiP/LJhvfDiNRo3M2EYU+m3aztAemVNLPH\nQiE343ZKrDEJ73XTvO93IGdRDvDL2uAMl03BQHjxt6A6KG8mgXxn0Gflkimg\nFI4NNjikqJdQmsGM1PtItRVHf2jN6OrHdlwKtFs1YxlBa6EOQXrxj3n06Hle\ngmiWqVlYPataewY0eJUAyxkO0O5I9YPpHobXoMs/XtO1+Arue+dOe0Lz0IGW\nyIdQZOtmES41sxF6teUSfZRuX5fEYLSiU3syRtenRvAkAJ19/ioxYqPAVjGE\nIn3EEz7TYu/P/gQCmprIp9ofK93LNkAZFeGTsNV6dXa3G4/pRW1dobl3/9GL\ncUhh4u08vwkgJ5PmNnuu1SubEXHQ+N7LPHFfQ9KoLUgxQ1x8upgYZ/8SRTwj\nXmVkX9YQP/aI28kBKTA6cIH73KSf/Flq1MeqG4Cla0rPFjai+I++5Ya0cfro\nfj1OtZd3ywzEMmOtRzIXwRtcq2k2ldZe+ijm+gDO/RwyYRwKn854i00/+d+Q\nC6MYZ83xb+7dLWadYBzsWJCyeW5vSuNrcf4vNeO2UxzyzKzxmbZwXP/6mXZP\n+E8kDJxV1DJIKgNrc1Exgni87oaxrJxC4Pldr9i6bZC8YAU3B80mIhFxzyPH\n+lil\r\n=yN1t\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGVhMBu1AglF9sTnQlGr0FsFrDX9yUuX5EJcN/Yw8XX6AiEA+QF75b9wVnANusLOnaq/NE2DkyDrfTk5D0WYRJh7gZQ="}]},"maintainers":[{"name":"dethariel","email":"dethariel@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ng-recaptcha_4.1.0_1540405253857_0.2950094773645622"},"_hasShrinkwrap":false},"4.1.1":{"name":"ng-recaptcha","version":"4.1.1","description":"Angular component for Google reCAPTCHA","scripts":{"demo":"yarn demo:serve","demo:serve":"cd demo && yarn start","demo:build":"cd demo && yarn build","demo:publish":"yarn demo:publish-gh-pages","demo:publish-gh-pages":"gh-pages -d demo/dist/ng-recaptcha","pack-latest":"yarn transpile && mv \"$(npm pack)\" ng-recaptcha-latest.tgz","transpile":"ngc -p ./tsconfig.json","clean":"del-cli './{recaptcha/,index,forms}*.{js,d.ts,js.map,metadata.json}' 'ng-recaptcha-*.tgz'","changelog":"conventional-changelog --preset angular --infile CHANGELOG.md --same-file","github-release":"conventional-github-releaser --preset angular","prepare-release":"npm whoami && yarn build && npm version $1","push-release":"git push && git push --tags","version":"yarn changelog && git add CHANGELOG.md && yarn demo:build && git add demo/yarn.lock","lint:prod":"tslint --project ./tsconfig.json --type-check","lint":"yarn lint:prod --force","build":"run-s clean lint:prod transpile","prepush":"yarn lint:prod"},"main":"index.js","typings":"index.d.ts","repository":{"type":"git","url":"git+https://github.com/DethAriel/ng-recaptcha.git"},"keywords":["angular","recaptcha","angular-recaptcha","ng-recaptcha"],"author":{"name":"Ruslan Arkhipau","email":"dethariel@gmail.com"},"license":"MIT","optionalDependencies":{"@types/grecaptcha":"^2.0.33"},"peerDependencies":{"@angular/core":"^6.0.0 || ^7.0.0"},"devDependencies":{"@angular/common":"^6.0.0","@angular/compiler":"^6.0.0","@angular/compiler-cli":"^6.0.0","@angular/core":"^6.0.0","@angular/forms":"^6.0.0","@angular/platform-browser":"^6.0.0","@types/core-js":"^0.9.39","angular-precommit":"^1.0.3","codelyzer":"^4.3.0","conventional-changelog-cli":"^1.3.1","conventional-github-releaser":"^1.1.13","del-cli":"^0.2.1","gh-pages":"^0.12.0","husky":"^0.13.3","npm-run-all":"^4.1.2","replace-in-file":"^3.0.0-beta.2","rxjs":"^6.1.0","tslint":"~5.7.0","typescript":"~2.7.2","zone.js":"^0.8.26"},"homepage":"https://github.com/DethAriel/ng-recaptcha#readme","gitHead":"9395b82364ff852f7359949a679fc7ce72ab9bee","bugs":{"url":"https://github.com/DethAriel/ng-recaptcha/issues"},"dependencies":{"@types/grecaptcha":"^2.0.33"},"_id":"ng-recaptcha@4.1.1","_npmVersion":"5.6.0","_nodeVersion":"8.11.2","_npmUser":{"name":"dethariel","email":"dethariel@gmail.com"},"dist":{"integrity":"sha512-cbeO4uSSB1gnTXmYYBwDz23K3haSAy/GlVvLgeozmvKkGxbHYvn+mjcTSLoBo4Y7uynwNuobka3e9643i3Y8vQ==","shasum":"cc12c388f47636a4754dd6eb4f163032e4e5f3ea","tarball":"https://registry.npmjs.org/ng-recaptcha/-/ng-recaptcha-4.1.1.tgz","fileCount":4,"unpackedSize":24241,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb0NUYCRA9TVsSAnZWagAAiUIQAJi0FWXRzfgTtoKa8K5T\nddodMCTt27tl8mvgKvCYhGgbmUf8QnROcOGBIcUHRY5bQlMQRpSxlUX5hOiF\n+67oQ89L9Y8SJu5qWBpOQfUXNxvLpRbYoqLplPHoKcEtTy04kJfc9NXKOQgP\nDzcCWnK4Uh6ULHcqwqfjheb0jR0Q5KsBfYsGswru+lZp4ZmBlCgpFdL+Ps2I\n6bBDj3mKBK/L8GhFP9X4tlIFKls1NanGm9N1EsejMwWDcICfL/icDSRhEn7h\nnFF1oFeOXucvxt+yyx7sSnAQglX+8Ob3frk3tQbgc+kTN5dLk4aOQUpUbSbl\nKQumRNPf3xZaAjrUZH8U/wOySKjgxaKbazBPwhzQIzx7PHY8pqnjC2JGKwo9\nw4vw2wFXEnZoiRvnnkTw7NzbmFPy7Af+v+mgMLG3jUdI5svtlEEgGYPzgd/9\n3tJ+WnAtsKMZqZJwQI658C6EMMi7vvrC08vLv1RnGFf0WAg5Unq6VHQBhemz\nB1ML+ruG9zdvVwhsA96zbtXsprLmFB536jYpbwFfZ/2lpX582wwHrlbDlvVF\ngvcIkD+1SvHEdxPF2gItTqwlQUKsbgKnIn0UFN6aF9yVFDeK88jD4J/eDA7O\nAmI8o87Fskx1W1rdkLjyH5B0ecdeysKYzwlf8vqvOax0PPp0se99pgNtIMoT\nQ9of\r\n=Q6EO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICn5mdbTS4M/7idjUxy+CqrqFRbA0U5JZTvERBrl1r6kAiBHbMjhZdpeCiJzZ3WE+3jSw4QExrudon089pOySCQm9w=="}]},"maintainers":[{"name":"dethariel","email":"dethariel@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ng-recaptcha_4.1.1_1540412695853_0.7715681664826439"},"_hasShrinkwrap":false},"4.2.0":{"name":"ng-recaptcha","version":"4.2.0","description":"Angular component for Google reCAPTCHA","scripts":{"demo":"yarn demo:serve","demo:serve":"cd demo && yarn start","demo:build":"cd demo && yarn build","demo:publish":"yarn demo:publish-gh-pages","demo:publish-gh-pages":"gh-pages -d demo/dist/ng-recaptcha","pack-latest":"yarn transpile && mv \"$(npm pack)\" ng-recaptcha-latest.tgz","transpile":"ngc -p ./tsconfig.json","clean":"del-cli './{recaptcha/,index,forms}*.{js,d.ts,js.map,metadata.json}' 'ng-recaptcha-*.tgz'","changelog":"conventional-changelog --preset angular --infile CHANGELOG.md --same-file","github-release":"conventional-github-releaser --preset angular","prepare-release":"npm whoami && yarn build && npm version $1","push-release":"git push && git push --tags","version":"yarn changelog && git add CHANGELOG.md && yarn demo:build && git add demo/yarn.lock","lint:prod":"tslint --project ./tsconfig.json --type-check","lint":"yarn lint:prod --force","build":"run-s clean lint:prod transpile","prepush":"yarn lint:prod"},"main":"index.js","typings":"index.d.ts","repository":{"type":"git","url":"git+https://github.com/DethAriel/ng-recaptcha.git"},"keywords":["angular","recaptcha","angular-recaptcha","ng-recaptcha"],"author":{"name":"Ruslan Arkhipau","email":"dethariel@gmail.com"},"license":"MIT","optionalDependencies":{"@types/grecaptcha":"^2.0.33"},"peerDependencies":{"@angular/core":"^6.0.0 || ^7.0.0"},"devDependencies":{"@angular/common":"^6.0.0","@angular/compiler":"^6.0.0","@angular/compiler-cli":"^6.0.0","@angular/core":"^6.0.0","@angular/forms":"^6.0.0","@angular/platform-browser":"^6.0.0","@types/core-js":"^0.9.39","angular-precommit":"^1.0.3","codelyzer":"^4.3.0","conventional-changelog-cli":"^1.3.1","conventional-github-releaser":"^1.1.13","del-cli":"^0.2.1","gh-pages":"^0.12.0","husky":"^0.13.3","npm-run-all":"^4.1.2","rxjs":"^6.1.0","tslint":"~5.7.0","typescript":"~2.7.2","zone.js":"^0.8.26"},"homepage":"https://github.com/DethAriel/ng-recaptcha#readme","gitHead":"4ca60f7cf7dd07ea3e57f8273a9407602ccd1b9e","bugs":{"url":"https://github.com/DethAriel/ng-recaptcha/issues"},"dependencies":{"@types/grecaptcha":"^2.0.33"},"_id":"ng-recaptcha@4.2.0","_npmVersion":"5.6.0","_nodeVersion":"8.11.2","_npmUser":{"name":"dethariel","email":"dethariel@gmail.com"},"dist":{"integrity":"sha512-WCFHJQrbcEGpeLaa3y9RzdEqAE9PATjWXHiVQ3Hacc+tGQUAYtopAW1mcx8VIlZ+aufsJ/IhDUSOb9RRYDkvIw==","shasum":"d70ef4fe1f2b47544977a6c99403dc0d43e0b83a","tarball":"https://registry.npmjs.org/ng-recaptcha/-/ng-recaptcha-4.2.0.tgz","fileCount":4,"unpackedSize":26116,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb0OgqCRA9TVsSAnZWagAACXEP/izaeCVyQQlxtaUMZ37L\nqV6zi95KbW6/F0MCuNZJPi5/7Q/LoK0t0s+AHBgW8zRPGpcwqvwxjcbYCIG2\nc6nuyOovREeltLcDNIFKiTCPavUWxqRzp0bdkfrYjC9I2ioUhqVNIrKMJd4R\nWCz+4SDlenAQ62MWreekYgDuD/hL7WTxunklRVlS2BkiVtuBXRm7HBONYqOk\ntmSgax1pgSBBQrp6hZLfux33NUSXTJDeT7YzpQ2+wp5dMpelmHOK2kwNs9ru\nHgOcEaJgxWi79E/243cu2h3ygpSqtkNFoVJrKyYo27PhmUtCPqAfu9M5vi73\ntvcX4FgOVzr4oNo7n9bNJ/lGnKZ+DH1sG//D1JBg9cixFf3v7z0f03s+4X62\ncXB9+LydyVFPx7rj+e/RbmZvuztfI2WfCw0wNL1udK6gJY8iDR2V8zRuE9bl\n7H2z7UfHiRV8YywKbgMJ6PWCsllQeakjeRpZpaa6lH6ujyLjSnudOCSNy+BM\nlAmo8wKSOnbSLyH636FEDsMhvRC4NifpScFSdwuYkUnvn7Li7ZKXiYTiCyJy\nqXhvrQSQeJJ57SSLlyYB5HLC4bIQwFewovD8oeJDLr+sVAE58fSYMb0MrO4F\nFEuWttX7TJ8YkkYZHdIUqm7uWXqn/QK66Xu+mjs/REjREu0c1WPWIuQ8XCjh\nLK29\r\n=JX9v\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD5OsfkcGl61vdPHdb9Cy84B6ugJAqKRTUS7BaEreJWSgIhANUpBFz1nAntnd0zUOok5WTzhXN5bvcA8/AqkSiRiY0b"}]},"maintainers":[{"name":"dethariel","email":"dethariel@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ng-recaptcha_4.2.0_1540417578258_0.13487139429848072"},"_hasShrinkwrap":false},"4.2.1":{"name":"ng-recaptcha","version":"4.2.1","description":"Angular component for Google reCAPTCHA","scripts":{"demo":"yarn demo:serve","demo:serve":"cd demo && yarn start","demo:build":"cd demo && yarn build","demo:publish":"yarn demo:publish-gh-pages","demo:publish-gh-pages":"gh-pages -d demo/dist/ng-recaptcha","pack-latest":"yarn transpile && mv \"$(npm pack)\" ng-recaptcha-latest.tgz","transpile":"ngc -p ./tsconfig.json","clean":"del-cli './{recaptcha/,index,forms}*.{js,d.ts,js.map,metadata.json}' 'ng-recaptcha-*.tgz'","changelog":"conventional-changelog --preset angular --infile CHANGELOG.md --same-file","github-release":"conventional-github-releaser --preset angular","prepare-release":"npm whoami && yarn build && npm version $1","push-release":"git push && git push --tags","version":"yarn changelog && git add CHANGELOG.md && yarn demo:build && git add demo/yarn.lock","lint:prod":"tslint --project ./tsconfig.json --type-check","lint":"yarn lint:prod --force","build":"run-s clean lint:prod transpile","prepush":"yarn lint:prod"},"main":"index.js","typings":"index.d.ts","repository":{"type":"git","url":"git+https://github.com/DethAriel/ng-recaptcha.git"},"keywords":["angular","recaptcha","angular-recaptcha","ng-recaptcha"],"author":{"name":"Ruslan Arkhipau","email":"dethariel@gmail.com"},"license":"MIT","optionalDependencies":{"@types/grecaptcha":"^2.0.33"},"peerDependencies":{"@angular/core":"^6.0.0 || ^7.0.0"},"devDependencies":{"@angular/common":"^6.0.0","@angular/compiler":"^6.0.0","@angular/compiler-cli":"^6.0.0","@angular/core":"^6.0.0","@angular/forms":"^6.0.0","@angular/platform-browser":"^6.0.0","@types/core-js":"^0.9.39","angular-precommit":"^1.0.3","codelyzer":"^4.3.0","conventional-changelog-cli":"^1.3.1","conventional-github-releaser":"^1.1.13","del-cli":"^0.2.1","gh-pages":"^0.12.0","husky":"^0.13.3","npm-run-all":"^4.1.2","rxjs":"^6.1.0","tslint":"~5.7.0","typescript":"~2.7.2","zone.js":"^0.8.26"},"homepage":"https://github.com/DethAriel/ng-recaptcha#readme","gitHead":"cd350d7196efceb597577f3cc6bc0cebeff16b19","bugs":{"url":"https://github.com/DethAriel/ng-recaptcha/issues"},"dependencies":{"@types/grecaptcha":"^2.0.33"},"_id":"ng-recaptcha@4.2.1","_npmVersion":"5.6.0","_nodeVersion":"8.11.2","_npmUser":{"name":"dethariel","email":"dethariel@gmail.com"},"dist":{"integrity":"sha512-rnGsTScp3MgTY7wDDs6rL5UE283WECUS+DPmnqD/lQwATH6y7EIgOM5AqZURBozNqCJKdAlhIdhFl8pCqf+s/Q==","shasum":"6ae7eb7fd20f2a467a0f125ad072db9dd21060c1","tarball":"https://registry.npmjs.org/ng-recaptcha/-/ng-recaptcha-4.2.1.tgz","fileCount":33,"unpackedSize":54196,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb0OvnCRA9TVsSAnZWagAACisQAKQo43SmBEy2oK7qzSwT\nEStAoZNv3L2A//smc7GpacBwGPA6ecR+qux3eQyG5YwEDdJ5EHgEXxUgksIx\ndLKiYoemlZERO3wG90gyFuhCeIrXJT2INR/79LfjRcGs23UCiKNN9NkXE2G/\nBVxBhlsfS+ssdcPdGk6d9D5+Et3f/Xs0FJnBcoP/vJpUIbFXMJC7T47hNyfR\nh0dbFxHfSLOHEa5CF1GdACixBm+dO0kQOEgBqrrd0IzmZu0BgKdNgiJx72jT\njM8G2X/yqGciAeM2Ujt4JkDIJo2BnrUWpMtQAX6yNFR4uRCY1+4a31aG4bSa\npz6y3ETNH6aDYyV23aDcbP8XsXWKED+kYxjiCyS4k1jrbKFv3KYaU9m5d1AQ\nvaMETAeq8siGqcs02u3D77Cqj/Dy3VBSEe1KjEUlUN2ahHAKOIIpXv8RVcx3\nxlPVkiz7OFP3GrUk00N/R9z4fmUCkKITM6tV35fUBz65e0yEehcSqUyh3Nvm\ndmH6Md4GbHJEW+x3+Mgl5fsLVOaHjZbwnODbWHlxr8wrSoEVfHB/l/5npe3W\n2me3dgV6Fg2V9omsBCmRGWAymQXSxGpJTdmIzcI78fjTAC1ugZPnRlwDdP52\n75doUqNjfcEcIWuDv6tGE/1Hs5AAKYkkVJEqCYUL6+ZFWd4pD9NW7J4XdT2V\nw6VN\r\n=Cwfk\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDkiqUM0l1O7VwE0Nw/4ExKXXQKWl9k6Bs6Uhi6/0DebgIgLZCgYotK2nIgQbl4Bin07JefZQF/beikXcONGZTb/Cc="}]},"maintainers":[{"name":"dethariel","email":"dethariel@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ng-recaptcha_4.2.1_1540418535139_0.9552492553747709"},"_hasShrinkwrap":false},"4.3.0-beta.1":{"name":"ng-recaptcha","version":"4.3.0-beta.1","description":"Angular component for Google reCAPTCHA","scripts":{"demo":"yarn demo:serve","demo:serve":"cd demo && yarn start","demo:build":"cd demo && yarn build","demo:publish":"yarn demo:publish-gh-pages","demo:publish-gh-pages":"gh-pages -d demo/dist/ng-recaptcha","pack-latest":"yarn transpile && mv \"$(npm pack)\" ng-recaptcha-latest.tgz","transpile":"ngc -p ./tsconfig.json","clean":"del-cli './{recaptcha/,index,forms}*.{js,d.ts,js.map,metadata.json}' 'ng-recaptcha-*.tgz'","changelog":"conventional-changelog --preset angular --infile CHANGELOG.md --same-file","github-release":"conventional-github-releaser --preset angular","prepare-release":"npm whoami && yarn build && npm version $1","push-release":"git push && git push --tags","version":"yarn changelog && git add CHANGELOG.md && yarn demo:build && git add demo/yarn.lock","lint:prod":"tslint --project ./tsconfig.json --type-check","lint":"yarn lint:prod --force","build":"run-s clean lint:prod transpile","prepush":"yarn lint:prod"},"main":"index.js","typings":"index.d.ts","repository":{"type":"git","url":"git+https://github.com/DethAriel/ng-recaptcha.git"},"keywords":["angular","recaptcha","angular-recaptcha","ng-recaptcha"],"author":{"name":"Ruslan Arkhipau","email":"dethariel@gmail.com"},"license":"MIT","optionalDependencies":{"@types/grecaptcha":"^2.0.33"},"peerDependencies":{"@angular/core":"^6.0.0 || ^7.0.0"},"devDependencies":{"@angular/common":"^6.0.0","@angular/compiler":"^6.0.0","@angular/compiler-cli":"^6.0.0","@angular/core":"^6.0.0","@angular/forms":"^6.0.0","@angular/platform-browser":"^6.0.0","@types/core-js":"^0.9.39","angular-precommit":"^1.0.3","codelyzer":"^4.3.0","conventional-changelog-cli":"^1.3.1","conventional-github-releaser":"^1.1.13","del-cli":"^0.2.1","gh-pages":"^0.12.0","husky":"^0.13.3","npm-run-all":"^4.1.2","rxjs":"^6.1.0","tslint":"~5.7.0","typescript":"~2.7.2","zone.js":"^0.8.26"},"homepage":"https://github.com/DethAriel/ng-recaptcha#readme","readme":"# Angular component for Google reCAPTCHA\n\n## ng-recaptcha [![npm version](https://badge.fury.io/js/ng-recaptcha.svg)](http://badge.fury.io/js/ng-recaptcha)\n\n[![MIT licensed](https://img.shields.io/badge/license-MIT-blue.svg)](https://raw.githubusercontent.com/dethariel/ng-recaptcha/master/LICENSE)\n[![Build Status](https://travis-ci.org/DethAriel/ng-recaptcha.svg?branch=master)](https://travis-ci.org/DethAriel/ng-recaptcha)\n\nA simple, configurable, easy-to-start component for handling reCAPTCHA v2 and v3.\n\n## Table of contents\n1. [Installation](#installation)\n2. [Basic Usage](#example-basic)\n   * [Playground](#playground)\n3. [Working with `@angular/forms`](#forms-ready)\n4. [API](#api)\n   * [Input Options](#api-options)\n   * [Events](#api-events)\n   * [Methods](#api-methods)\n5. [Examples](#examples)\n   * [Configuring the component globally](#example-global-config)\n   * [Specifying a different language](#example-language)\n   * [Loading the reCAPTCHA API by yourself](#example-preload-api)\n   * [Usage with `required` in forms](#example-forms)\n   * [Working with invisible reCAPTCHA](#example-invisible)\n   * [Resizing](#example-resizing)\n   * [SystemJS configuration](#example-systemjs)\n   * [Loading from a different location](#example-different-url)\n   * [Specifying nonce for Content-Security-Policy](#example-csp-nonce)\n   * [Listening for all actions with reCAPTCHA v3](#example-v3-all-actions)\n\n## <a name=\"installation\"></a>Installation\n\nThe easiest way is to install through [yarn](https://yarnpkg.com/package/ng-recaptcha) or [npm](https://www.npmjs.com/package/ng-recaptcha):\n\n```sh\nyarn add ng-recaptcha\nnpm i ng-recaptcha --save\n```\n\n## <a name=\"example-basic\"></a>Basic Usage [(see in action)](https://dethariel.github.io/ng-recaptcha/)\n\nThe below applies to reCAPTCHA v2, for basic usage with reCAPTCHA v3 scroll down to [here](#example-basic-v3).\n\nTo start with, you need to import the `RecaptchaModule` (more on that [later](#modules)):\n\n```typescript\n// app.module.ts\nimport { RecaptchaModule } from 'ng-recaptcha';\n// if you need forms support:\n// import { RecaptchaFormsModule } from 'ng-recaptcha/forms';\nimport { BrowserModule }  from '@angular/platform-browser';\nimport { MyApp } from './app.component.ts';\n\n@NgModule({\n  bootstrap: [MyApp],\n  declarations: [MyApp],\n  imports: [\n    BrowserModule,\n    RecaptchaModule,\n    // RecaptchaFormsModule, // if you need forms support\n  ],\n})\nexport class MyAppModule { }\n```\n\nOnce you have done that, the rest is simple:\n\n```typescript\n// app.component.ts\nimport { Component } from '@angular/core';\n\n@Component({\n    selector: 'my-app',\n    template: `<re-captcha (resolved)=\"resolved($event)\" siteKey=\"YOUR_SITE_KEY\"></re-captcha>`,\n}) export class MyApp {\n    resolved(captchaResponse: string) {\n        console.log(`Resolved captcha with response: ${captchaResponse}`);\n    }\n}\n```\n\n```typescript\n// boot.ts\nimport { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\nimport { MyAppModule } from './app.module.ts';\n\nplatformBrowserDynamic().bootstrapModule(MyAppModule);\n```\n\n### <a name=\"example-basic-v3\"></a>reCAPTCHA v3 Usage [(see in action)](https://dethariel.github.io/ng-recaptcha/v3)\n\n[reCAPTCHA v3](https://developers.google.com/recaptcha/docs/v3) introduces a different way of bot protection. To work with v3 APIs, `ng-recaptcha` provides a service (as opposed to a component). To start with, you need to import the `RecaptchaV3Module` and provide your reCAPTCHA v3 site key using `RECAPTCHA_V3_SITE_KEY` injection token:\n\n```ts\nimport { BrowserModule } from '@angular/platform-browser';\nimport { RECAPTCHA_V3_SITE_KEY, RecaptchaV3Module } from 'ng-recaptcha';\n\nimport { MyApp } from './app.component.ts';\n\n@NgModule({\n  bootstrap: [MyApp],\n  declarations: [MyApp],\n  imports: [\n    BrowserModule,\n    RecaptchaV3Module,\n  ],\n  providers: [\n    { provide: RECAPTCHA_V3_SITE_KEY, useValue: '<YOUR_SITE_KEY>' },\n  ],\n})\nexport class MyAppModule { }\n\n```\n\nIn order to execute a reCAPTCHA v3 action, import the `ReCaptchaV3Service` into your desired component:\n\n```ts\nimport { ReCaptchaV3Service } from 'ng-recaptcha';\n\n@Component({\n  selector: 'recaptcha-demo',\n  template: `\n    <button (click)=\"executeImportantAction()\">Important action</button>\n  `,\n})\nexport class RecaptchaV3DemoComponent {\n  constructor(\n    private recaptchaV3Service: ReCaptchaV3Service,\n  ) {\n  }\n\n  public executeImportantAction(): void {\n    this.recaptchaV3Service.execute('importantAction')\n      .subscribe((token) => this.handleToken(token));\n  }\n```\n\nAs always with subscriptions, please don't forget to **unsubscribe**.\n\nA more advanced v3 usage scenario includes listening to all actions and their respectively emitted tokens. This is covered [later on this page](#example-v3-all-actions).\n\n### <a name=\"playground\"></a>Playground\n\nYou can also play with [this Stackblitz demo](https://stackblitz.com/edit/ng-recaptcha-example) to get a feel of how this component can be used.\n\n## <a name=\"forms-ready\"></a>Working with `@angular/forms`\n\nThere are two modules available for you:\n\n```typescript\nimport { RecaptchaModule } from 'ng-recaptcha';\nimport { RecaptchaFormsModule } from 'ng-recaptcha/forms';\n```\n\nIf you want your `<re-captcha>` element to work correctly with `[(ngModel)]` directive,\nyou need to import the `RecaptchaFormsModule` into your application module (pretty much\nlike with Angular own `'@angular/forms'` module).\n\nIf you do not rely on\nAngular forms in your project, you should use the \"no-forms\" module version, as\nit does not require the `@angular/forms` package to be bundled with your code.\n\n## <a name=\"api\"></a>API\n\n### <a name=\"api-options\"></a>Input Options\n\nThe component supports this options:\n\n* `siteKey`\n* `theme`\n* `type`\n* `size`\n* `tabIndex`\n* `badge`\n\nThey are all pretty well described either in the [reCAPTCHA docs](https://developers.google.com/recaptcha/docs/display), or in the [invisible reCAPTCHA docs](https://developers.google.com/recaptcha/docs/invisible),\nso I won't duplicate it here.\n\nBesides specifying these options on the component itself, you can provide a global `<re-captcha>` configuration - see [Configuring the component globally](#example-global-config) section below.\n\n### <a name=\"api-events\"></a>Events\n\n* `resolved(response: string)`. Occurs when the captcha resolution value changed.\n  When user resolves captcha, use `response` parameter to send to the server for verification.\n  This parameter is equivalent to calling [`grecaptcha.getResponse`](https://developers.google.com/recaptcha/docs/display#js_api).\n\n  If the captcha has expired prior to submitting its value to the server, the component\n  will reset the captcha, and trigger the `resolved` event with `response === null`.\n\n### <a name=\"api-methods\"></a>Methods\n\n* `reset()`. Performs a manual captcha reset. This method might be useful if your form\nvalidation failed, and you need the user to re-enter the captcha.\n* `execute()`. Executes the invisible recaptcha. Does nothing if component's size is not set to \"invisible\". See [Invisible reCAPTCHA developers guide](https://developers.google.com/recaptcha/docs/invisible#js_api) for more information.\n\n## <a name=\"examples\"></a>Examples\n\n### <a name=\"example-global-config\"></a>Configuring the component globally [(see in action)](https://dethariel.github.io/ng-recaptcha/global-config)\n\nSome properties are global - including `siteKey`, `size`, and others. You can provide them at the module-level using the `RECAPTCHA_SETTINGS` provider:\n\n```typescript\nimport { RECAPTCHA_SETTINGS, RecaptchaSettings } from 'ng-recaptcha';\n\n@NgModule({\n  providers: [\n    {\n      provide: RECAPTCHA_SETTINGS,\n      useValue: { siteKey: '<YOUR_KEY>' } as RecaptchaSettings,\n    },\n  ],\n}) export class MyModule { }\n```\n\nGlobal properties can be overridden on a case-by-case basis - the values on the `<re-captcha>` component itself take precedence over global settings.\n\n### <a name=\"example-language\"></a>Specifying a different language [(see in action)](https://dethariel.github.io/ng-recaptcha/language)\n\n`<re-captcha>` supports various languages. By default recaptcha will guess the user's language itself\n(which is beyond the scope of this lib).\nBut you can override this behavior and provide a specific language to use.\nThe language setting is global, though, and cannot be set on a per-captcha basis.\nIt can be provided like this:\n\n```typescript\nimport { RECAPTCHA_LANGUAGE } from 'ng-recaptcha';\n\n@NgModule({\n  providers: [\n    {\n      provide: RECAPTCHA_LANGUAGE,\n      useValue: 'fr', // use French language\n    },\n  ],\n}) export class MyModule { }\n```\n\nYou can find the list of supported languages in [reCAPTCHA docs](https://developers.google.com/recaptcha/docs/language).\n\n### <a name=\"example-preload-api\"></a>Loading the reCAPTCHA API by yourself [(see in action)](https://dethariel.github.io/ng-recaptcha/preload-api)\n\nBy default, the component assumes that the reCAPTCHA API loading will be handled\nby the `RecaptchaLoaderService`. However, you can override that by providing your\ninstance of this service to the Angular DI.\n\nThe below code snippet is an example of how such a provider can be implemented.\n\n**TL;DR**: there should be an `Observable` that eventually resolves to a\n`grecaptcha`-compatible object (e.g. `grecaptcha` itself).\n\n```html\n<script src=\"https://www.google.com/recaptcha/api.js?render=explicit&amp;onload=onloadCallback\"></script>\n\n<script>\n    // bootstrap the application once the reCAPTCHA api has loaded\n    function onloadCallback() {\n        System.import('app').catch(function(err) { console.error(err); });\n    }\n</script>\n```\n\n```typescript\nimport { RecaptchaLoaderService } from 'ng-recaptcha';\n\n@Injectable()\nexport class PreloadedRecaptchaAPIService {\n  public ready: Observable<ReCaptchaV2.ReCaptcha>;\n\n  constructor() {\n    let readySubject = new BehaviorSubject<ReCaptchaV2.ReCaptcha>(grecaptcha);\n    this.ready = readySubject.asObservable();\n  }\n}\n\n@NgModule({\n  providers: [\n    {\n      provide: RecaptchaLoaderService,\n      useValue: new PreloadedRecaptchaAPIService(),\n    },\n  ],\n}) export class MyModule { }\n```\n\n### <a name=\"example-forms\"></a>Usage with `required` in forms [(see in action)](https://dethariel.github.io/ng-recaptcha/forms)\n\nIt's very easy to put `<re-captcha>` in an Angular form and have it `require`d - just\nadd the `required` attribute to the `<re-captcha>` element. Do not forget to import `RecaptchaFormsModule` from `'ng-recaptcha/forms'`!\n\n```typescript\n@Component({\n  selector: 'my-form',\n  template: `\n  <form>\n    <re-captcha\n      [(ngModel)]=\"formModel.captcha\"\n      name=\"captcha\"\n      required\n      siteKey=\"YOUR_SITE_KEY\"\n    ></re-captcha>\n  </form>`,\n}) export class MyForm {\n  formModel = new MyFormModel();\n}\n```\n\nA similar approach can be taken for reactive forms:\n\n```typescript\n@Component({\n  selector: 'my-reactive-form',\n  template: `\n    <form [formGroup]=\"reactiveForm\">\n      <re-captcha formControlName=\"recaptchaReactive\"></re-captcha>\n      <button [disabled]=\"reactiveForm.invalid\">Submit</button>\n    </form>\n  `,\n}) export class MyReactiveForm {\n  reactiveForm: FormGroup;\n\n  ngOnInit() {\n    this.reactiveForm = new FormGroup({\n      recaptchaReactive: new FormControl(null, Validators.required)\n    });\n  }\n}\n```\n\n### <a name=\"example-invisible\"></a>Working with invisible reCAPTCHA [(see in action)](https://dethariel.github.io/ng-recaptcha/invisible)\n\nWorking with [invisible reCAPTCHA](https://developers.google.com/recaptcha/docs/invisible) is almost the same as with regular one.\nFirst, you need to provide the right size:\n\n```html\n<re-captcha size=\"invisible\" ...></re-captcha>\n```\n\nYou will also need to invoke the [`\"execute()\"`](https://developers.google.com/recaptcha/docs/invisible#programmatic_execute) method manually. This can be done by either obtaining a reference to `RecaptchaComponent` via `@ViewChild()`, or by using inline template reference:\n\n```html\n<re-captcha #captchaRef=\"reCaptcha\" ...></re-captcha>\n...\n<button (click)=\"captchaRef.execute()\">Submit</button>\n```\n\nNormally you would only submit a form when recaptcha response has been received. This can be achieved by reacting to `(resolved)` event and invoking submit logic when the captcha response is truthy (this will not try to submit the form when recaptcha response has expired). A sample implementation would look like this:\n\n```typescript\n@Component({\n  selector: 'my-form',\n  template: `\n  <form>\n    <re-captcha\n      #captchaRef=\"reCaptcha\"\n      siteKey=\"YOUR_SITE_KEY\"\n      size=\"invisible\"\n      (resolved)=\"$event && submit($event)\"\n    ></re-captcha>\n    <button (click)=\"captchaRef.execute()\">Submit</button>\n  </form>`,\n}) export class MyForm {\n  public submit(captchaResponse: string): void {\n    this.http.post({\n      captcha: captchaResponse,\n      /* ... */\n    });\n  }\n}\n```\n\n### <a name=\"example-resizing\"></a>Resizing\n\nMaking reCAPTCHA responsive is sometimes necessary, especially when working with mobile devices. You can use css-transforms to achieve that as in [this StackOverflow answer](https://stackoverflow.com/a/29521983/2645305), which is also ell-described in [this blog post](https://geekgoddess.com/how-to-resize-the-google-nocaptcha-recaptcha/). You can also take a look at a [live example](https://stackblitz.com/edit/ng-recaptcha-example-uncvxq?file=src/app/app.component.html) of how this might be implemented. This boils down to\n\n```html\n<div style=\"transform:scale(0.7);transform-origin:0;\">\n  <re-captcha></re-captcha>\n</div>\n```\n\n### <a name=\"example-systemjs\"></a>SystemJS configuration\n\nTo configure the package to work with SystemJS, you would configure it approximately like that (assuming you've installed `ng-recaptcha` using `npm`):\n\n```javascript\n// SystemJS config file\n(function () {\n  System.config({\n    paths: {\n      'npm:': '/node_modules/',\n    },\n    map: {\n      'ng-recaptcha': 'npm:ng-recaptcha',\n    },\n    packages: {\n      'ng-recaptcha': { main: './index.js' },\n    },\n  });\n})();\n```\n\n### <a name=\"example-different-url\"></a>Loading from a different location\n\nSince `\"google.com\"` domain might be unavailable in some countries, reCAPTCHA core team has a solution for that - using `\"recaptcha.net\"` domain. You can configure the component to use that by providing the `RECAPTCHA_BASE_URL` token, for example:\n\n```javascript\nimport { RECAPTCHA_BASE_URL } from 'ng-recaptcha';\n\n@NgModule({\n  providers: [\n    {\n      provide: RECAPTCHA_BASE_URL,\n      useValue: 'https://recaptcha.net/recaptcha/api.js', // use recaptcha.net script source for some of our users\n    },\n  ],\n}) export class MyModule { }\n```\n\n### <a name=\"example-csp-nonce\"></a>Specifying nonce for Content-Security-Policy\n\nPer [reCAPTCHA FAQ on CSP](https://developers.google.com/recaptcha/docs/faq#im-using-content-security-policy-csp-on-my-website-how-can-i-configure-it-to-work-with-recaptcha), the recommended approach for that is to supply nonce to the script tag. This is possible by providing the `RECAPTCHA_NONCE` token, for example:\n\n```javascript\nimport { RECAPTCHA_NONCE } from 'ng-recaptcha';\n\n@NgModule({\n  providers: [\n    {\n      provide: RECAPTCHA_NONCE,\n      useValue: '<YOUR_NONCE_VALUE>',\n    },\n  ],\n}) export class MyModule { }\n```\n\n### <a name=\"example-v3-all-actions\"></a>Listening for all actions with reCAPTCHA v3\n\nMore often than not you will need to only get a reCAPTCHA token with the action the user is currently taking, and submit it to the backend at that time. However, having a single listener for all events will be desirable.\n\nThere is an `Observable` exactly for that purpose: `ReCaptchaV3Service.onExecute`. It emits a value every time a token is received from reCAPTCHA. The shape of payload it operates on is defined via `OnExecuteData` interface:\n\n```ts\ninterface OnExecuteData {\n  action: string;\n  token: string;\n}\n```\n\nwhere `action` is the name of the action that has been executed, and `token` is what reCAPTCHA v3 provided when executing that action.\n\nHere's how you would potentially set this up:\n\n```ts\nimport { OnExecuteData, ReCaptchaV3Service } from 'ng-recaptcha';\n\n@Component({\n  selector: 'my-component',\n  templateUrl: './v3-demo.component.html',\n})\nexport class MyComponent implements OnInit, OnDestroy {\n  private subscription: Subscription;\n\n  constructor(\n    private recaptchaV3Service: ReCaptchaV3Service,\n  ) {\n  }\n\n  public ngOnInit() {\n    this.subscription = this.recaptchaV3Service.onExecute\n      .subscribe((data: OnExecuteData) => {\n        this.handleRecaptchaExecute(data.action, data.token);\n      });\n  }\n\n  public ngOnDestroy() {\n    if (this.subscription) {\n      this.subscription.unsubscribe();\n    }\n  }\n}\n```\n\nThere are a couple things to keep in mind:\n\n* `onExecute` will trigger for **all** actions. If you only need to bulk-process some actions, and not others - you will have to apply filtering yourself.\n* `onExecute` observable will provide you with all the events emitted **after** you have subscribed to it - it doesn't keep references to the previously emitted actions. So make sure you add such a subscription as early in your code as you feel is necessary.\n","readmeFilename":"README.md","gitHead":"33639ded27dfefca62150e515b0e69893f734349","bugs":{"url":"https://github.com/DethAriel/ng-recaptcha/issues"},"dependencies":{"@types/grecaptcha":"^2.0.33"},"_id":"ng-recaptcha@4.3.0-beta.1","_npmVersion":"6.4.1","_nodeVersion":"10.13.0","_npmUser":{"name":"dethariel","email":"dethariel@gmail.com"},"dist":{"integrity":"sha512-k0ubJIOgnywH3QsTnOzCmg9AJ2Hef8C4rEQtwFgT0wIIHIj9MV9jRzSKBQK6qmPbzglqKeLY9eGCx1EYtkGYxA==","shasum":"6bfb71e2aa102097879f5a0314a26b296bbcd197","tarball":"https://registry.npmjs.org/ng-recaptcha/-/ng-recaptcha-4.3.0-beta.1.tgz","fileCount":39,"unpackedSize":70276,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcXTkuCRA9TVsSAnZWagAAbZkP/1OJoCy28n2jJLsevXIg\nwHt2UFE8ANj/6TGC++IT6pZ/zxUsqlTafS3RHUnxD5c4LlrQkLRQ/Tlmfk1z\n1BFi1xY+ZoQ+uoc8hxgVpVyEf5pSdMRjD2ijQQYXOVJeICNpstswpD/thHHx\naKpKKGtPvMWvWi6jxmW6/hpVo3KrOlyIG3Ky51i6oY0Clu8tB/6ICSjO7nOR\n9oz5PoAsO9Xk0F8syJtHgj/8ejCLEyiy66H9Jru6AGRB2hq+M5w7eJo0+xxG\nMIxfmlvOtszE5QKr56R8oXmACIJKv8mXRQA8Vj/K79SZzHSVDtCErChrfSlo\nIToNmlh3yrvGXiwaNx83fpguzbgau5piL++XgS1GpEqU26G2l4vIwx2DdjAW\ni+bDoajHavUYqbfLAX7n39KFHuPwzlG9COeR2mlfdDByDPgV7sxlmNVepTPN\n7RXwJ4vrpKU2tBJj+bbFbdAQ7OQRLcgzeNXvwIkRx1cNDZavI6dWjntHpz09\n8OrNYBHdsVvUPA8zFxbnfp249+YLrer8ABf4mB//uLBbzG7WPMjrwzwG4KWJ\nBfo9eZx/H04934aXRZw479o6aPgAFOdpqbWgS7Us9G4V2SlmnfsgZBJOfMcX\nNwzDW/lfHUYMNJSM73iqXTxL9CkrLRwaxunshT19g2YQTxqiPFnaYg9PRw0E\nLnLD\r\n=smzk\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFDGxneF83wVvwZMPLcn5Rc0jFPJ18K3lrqCyBCx/GLOAiBoiOtb5pyldsOOzk/u0Exfrm+ezDeS8UUeajwUGKFLQA=="}]},"maintainers":[{"name":"dethariel","email":"dethariel@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ng-recaptcha_4.3.0-beta.1_1549613357923_0.9907197902273879"},"_hasShrinkwrap":false},"4.3.0":{"name":"ng-recaptcha","version":"4.3.0","description":"Angular component for Google reCAPTCHA","scripts":{"demo":"yarn demo:serve","demo:serve":"cd demo && yarn start","demo:build":"cd demo && yarn build","demo:publish":"yarn demo:publish-gh-pages","demo:publish-gh-pages":"gh-pages -d demo/dist/ng-recaptcha","pack-latest":"yarn transpile && mv \"$(npm pack)\" ng-recaptcha-latest.tgz","transpile":"ngc -p ./tsconfig.json","clean":"del-cli './{recaptcha/,index,forms}*.{js,d.ts,js.map,metadata.json}' 'ng-recaptcha-*.tgz'","changelog":"conventional-changelog --preset angular --infile CHANGELOG.md --same-file","github-release":"conventional-github-releaser --preset angular","prepare-release":"npm whoami && yarn build && npm version $1","push-release":"git push && git push --tags","version":"yarn changelog && git add CHANGELOG.md && yarn demo:build && git add demo/yarn.lock","lint:prod":"tslint --project ./tsconfig.json --type-check","lint":"yarn lint:prod --force","build":"run-s clean lint:prod transpile","prepush":"yarn lint:prod"},"main":"index.js","typings":"index.d.ts","repository":{"type":"git","url":"git+https://github.com/DethAriel/ng-recaptcha.git"},"keywords":["angular","recaptcha","angular-recaptcha","ng-recaptcha"],"author":{"name":"Ruslan Arkhipau","email":"dethariel@gmail.com"},"license":"MIT","optionalDependencies":{"@types/grecaptcha":"^2.0.33"},"peerDependencies":{"@angular/core":"^6.0.0 || ^7.0.0"},"devDependencies":{"@angular/common":"^6.0.0","@angular/compiler":"^6.0.0","@angular/compiler-cli":"^6.0.0","@angular/core":"^6.0.0","@angular/forms":"^6.0.0","@angular/platform-browser":"^6.0.0","@types/core-js":"^0.9.39","angular-precommit":"^1.0.3","codelyzer":"^4.3.0","conventional-changelog-cli":"^1.3.1","conventional-github-releaser":"^1.1.13","del-cli":"^0.2.1","gh-pages":"^0.12.0","husky":"^0.13.3","npm-run-all":"^4.1.2","rxjs":"^6.1.0","tslint":"~5.7.0","typescript":"~2.7.2","zone.js":"^0.8.26"},"homepage":"https://github.com/DethAriel/ng-recaptcha#readme","gitHead":"c50d26c6c90acfa45aa349b73562fac3c4e06991","bugs":{"url":"https://github.com/DethAriel/ng-recaptcha/issues"},"dependencies":{"@types/grecaptcha":"^2.0.33"},"_id":"ng-recaptcha@4.3.0","_npmVersion":"6.2.0","_nodeVersion":"10.9.0","_npmUser":{"name":"dethariel","email":"dethariel@gmail.com"},"dist":{"integrity":"sha512-p9v+4qjPJIrhKeddGHNtYaoeB9prZ893dsLzRMtYpREYZdRIcflRg5xcZ8GFacAnViPlFgjaJvQ/VmZoMKqn5Q==","shasum":"f5ce3c1ea94edbf308967cc17043eb36ec1e5a34","tarball":"https://registry.npmjs.org/ng-recaptcha/-/ng-recaptcha-4.3.0.tgz","fileCount":38,"unpackedSize":81667,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc9uyOCRA9TVsSAnZWagAAbk8P/1bmpS1iA+klQnEtx53T\nmfYcmvS0Tsr3eYzmNmUvuNQn1TY0TMl+YLAXj7juUqjKx6EXHWnLE1mATzbq\nfhjyrwX8AxqZWAlKv07dZWSLv+K4jX3yI9jR6xXvbcF1C0V8ciop9rmfHbBd\nf0i12J+tL0Y/Uffid/kI7njU45rh+aCkwdcIRoeQXXWl/w7T6c74WAhF7KrD\nzkG1EWjLPIbkYXGIoLVqy02HvIuGjd6JEXkyk6B43ApL+F23G2CI5Sb8W4ao\nJyDl+CB6Ho7uxmflpdBuKt2r60dV53tyGmQ0PGm+N3EE9IEC6gBy7Z5xO9Fq\nKPgZDzdaTz8spRD/BpHvza8GXqeemQ9m3XLam8DhALrHFn58HT8CAP8jb2I1\nBgWR62thKpreueETxCwOxKtBXSfA4Iqja/gosU0qbfA5927oRpX50HYxCQ23\nl1RdoLanO87X4OnmFYEijNAOYQn0hh8Di5fBOuOJSk2e1oxtXiYCSQFs2uNq\nKFY4VKE2P21tc7cfl5fC/J9Kfk5lXX+/0/uMyswdLaGqVF8Fabj0cSaUnKKz\no0gqXzRwxTQ9ii0GPX+4j9CjOkhWyvI8UKV8Q7cTvnjWYavxupqiavS8vtr/\n1X9gP5JhRo/5nNl3B8DgF6x/0uz0K3iSy9JfGkf9CWU/GY1YFdU+5r86kQcE\n0l2h\r\n=bR3z\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGv/uwgnx244AKWP492pVzP2eLsbW+q8nLLdUj4CKGsGAiB311QWKDn6k2O0Oax9De76FPKX6d7pvViM+W7B+iz2XA=="}]},"maintainers":[{"name":"dethariel","email":"dethariel@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ng-recaptcha_4.3.0_1559686285539_0.3232072349089745"},"_hasShrinkwrap":false},"5.0.0-beta.1":{"name":"ng-recaptcha","version":"5.0.0-beta.1","description":"Angular component for Google reCAPTCHA","scripts":{"demo":"cd demo && yarn serve","demo:install":"cd demo && yarn install","demo:clean":"cd demo && yarn clean:all","demo:build":"cd demo && yarn build","demo:publish":"yarn demo:publish-gh-pages","demo:publish-gh-pages":"gh-pages -d demo/dist/ng-recaptcha","pack-latest":"yarn clean && yarn transpile && cd dist && mv \"$(npm pack)\" ../ng-recaptcha-latest.tgz","transpile":"ng-packagr -p ./tsconfig.json","clean":"del-cli 'ng-recaptcha-*.tgz' && yarn demo:clean","changelog":"conventional-changelog --preset angular --infile CHANGELOG.md --same-file","github-release":"conventional-github-releaser --preset angular","prepare-release":"npm whoami && yarn build && npm version $1","push-release":"git push && git push --tags","version":"yarn changelog && git add CHANGELOG.md && yarn demo:build && git add demo/*/yarn.lock","lint:prod":"tslint --project ./tsconfig.json --type-check","lint":"yarn lint:prod --force","build":"run-s clean lint:prod transpile","prepush":"yarn lint:prod"},"main":"index.js","typings":"index.d.ts","repository":{"type":"git","url":"git+https://github.com/DethAriel/ng-recaptcha.git"},"keywords":["angular","recaptcha","angular-recaptcha","ng-recaptcha"],"author":{"name":"Ruslan Arkhipau","email":"dethariel@gmail.com"},"license":"MIT","ngPackage":{"lib":{"entryFile":"index.ts"}},"optionalDependencies":{"@types/grecaptcha":"^2.0.33"},"dependencies":{"tslib":"^1.9.0","@types/grecaptcha":"^2.0.33"},"peerDependencies":{"@angular/core":"^6.0.0 || ^7.0.0 || ^8.0.0"},"devDependencies":{"@angular/common":"^6.0.0","@angular/compiler":"^6.0.0","@angular/compiler-cli":"^6.0.0","@angular/core":"^6.0.0","@angular/forms":"^6.0.0","@angular/platform-browser":"^6.0.0","@types/core-js":"^0.9.39","angular-precommit":"^1.0.3","codelyzer":"^4.3.0","conventional-changelog-cli":"^1.3.1","conventional-github-releaser":"^1.1.13","del-cli":"^0.2.1","gh-pages":"^0.12.0","husky":"^0.13.3","ng-packagr":"^5.2.0","npm-run-all":"^4.1.2","rxjs":"^6.1.0","tslint":"~5.7.0","typescript":"~2.7.2","zone.js":"^0.8.26"},"homepage":"https://github.com/DethAriel/ng-recaptcha#readme","readme":"# Angular component for Google reCAPTCHA\n\n## ng-recaptcha [![npm version](https://badge.fury.io/js/ng-recaptcha.svg)](http://badge.fury.io/js/ng-recaptcha)\n\n[![MIT licensed](https://img.shields.io/badge/license-MIT-blue.svg)](https://raw.githubusercontent.com/dethariel/ng-recaptcha/master/LICENSE)\n[![Build Status](https://travis-ci.org/DethAriel/ng-recaptcha.svg?branch=master)](https://travis-ci.org/DethAriel/ng-recaptcha)\n\nA simple, configurable, easy-to-start component for handling reCAPTCHA v2 and v3.\n\n## Table of contents\n1. [Installation](#installation)\n2. [Basic Usage](#example-basic)\n   * [Playground](#playground)\n3. [Working with `@angular/forms`](#forms-ready)\n4. [API](#api)\n   * [Input Options](#api-options)\n   * [Events](#api-events)\n   * [Methods](#api-methods)\n5. [Examples](#examples)\n   * [Configuring the component globally](#example-global-config)\n   * [Specifying a different language](#example-language)\n   * [Loading the reCAPTCHA API by yourself](#example-preload-api)\n   * [Usage with `required` in forms](#example-forms)\n   * [Working with invisible reCAPTCHA](#example-invisible)\n   * [Resizing](#example-resizing)\n   * [SystemJS configuration](#example-systemjs)\n   * [Loading from a different location](#example-different-url)\n   * [Specifying nonce for Content-Security-Policy](#example-csp-nonce)\n   * [Listening for all actions with reCAPTCHA v3](#example-v3-all-actions)\n\n## <a name=\"installation\"></a>Installation\n\nThe easiest way is to install through [yarn](https://yarnpkg.com/package/ng-recaptcha) or [npm](https://www.npmjs.com/package/ng-recaptcha):\n\n```sh\nyarn add ng-recaptcha\nnpm i ng-recaptcha --save\n```\n\n## <a name=\"example-basic\"></a>Basic Usage [(see in action)](https://dethariel.github.io/ng-recaptcha/)\n\nThe below applies to reCAPTCHA v2, for basic usage with reCAPTCHA v3 scroll down to [here](#example-basic-v3).\n\nTo start with, you need to import the `RecaptchaModule` (more on that [later](#modules)):\n\n```typescript\n// app.module.ts\nimport { RecaptchaModule } from 'ng-recaptcha';\n// if you need forms support:\n// import { RecaptchaModule, RecaptchaFormsModule } from 'ng-recaptcha';\nimport { BrowserModule }  from '@angular/platform-browser';\nimport { MyApp } from './app.component.ts';\n\n@NgModule({\n  bootstrap: [MyApp],\n  declarations: [MyApp],\n  imports: [\n    BrowserModule,\n    RecaptchaModule,\n    // RecaptchaFormsModule, // if you need forms support\n  ],\n})\nexport class MyAppModule { }\n```\n\nOnce you have done that, the rest is simple:\n\n```typescript\n// app.component.ts\nimport { Component } from '@angular/core';\n\n@Component({\n    selector: 'my-app',\n    template: `<re-captcha (resolved)=\"resolved($event)\" siteKey=\"YOUR_SITE_KEY\"></re-captcha>`,\n}) export class MyApp {\n    resolved(captchaResponse: string) {\n        console.log(`Resolved captcha with response: ${captchaResponse}`);\n    }\n}\n```\n\n```typescript\n// boot.ts\nimport { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\nimport { MyAppModule } from './app.module.ts';\n\nplatformBrowserDynamic().bootstrapModule(MyAppModule);\n```\n\n### <a name=\"example-basic-v3\"></a>reCAPTCHA v3 Usage [(see in action)](https://dethariel.github.io/ng-recaptcha/v3)\n\n[reCAPTCHA v3](https://developers.google.com/recaptcha/docs/v3) introduces a different way of bot protection. To work with v3 APIs, `ng-recaptcha` provides a service (as opposed to a component). To start with, you need to import the `RecaptchaV3Module` and provide your reCAPTCHA v3 site key using `RECAPTCHA_V3_SITE_KEY` injection token:\n\n```ts\nimport { BrowserModule } from '@angular/platform-browser';\nimport { RECAPTCHA_V3_SITE_KEY, RecaptchaV3Module } from 'ng-recaptcha';\n\nimport { MyApp } from './app.component.ts';\n\n@NgModule({\n  bootstrap: [MyApp],\n  declarations: [MyApp],\n  imports: [\n    BrowserModule,\n    RecaptchaV3Module,\n  ],\n  providers: [\n    { provide: RECAPTCHA_V3_SITE_KEY, useValue: '<YOUR_SITE_KEY>' },\n  ],\n})\nexport class MyAppModule { }\n\n```\n\nIn order to execute a reCAPTCHA v3 action, import the `ReCaptchaV3Service` into your desired component:\n\n```ts\nimport { ReCaptchaV3Service } from 'ng-recaptcha';\n\n@Component({\n  selector: 'recaptcha-demo',\n  template: `\n    <button (click)=\"executeImportantAction()\">Important action</button>\n  `,\n})\nexport class RecaptchaV3DemoComponent {\n  constructor(\n    private recaptchaV3Service: ReCaptchaV3Service,\n  ) {\n  }\n\n  public executeImportantAction(): void {\n    this.recaptchaV3Service.execute('importantAction')\n      .subscribe((token) => this.handleToken(token));\n  }\n```\n\nAs always with subscriptions, please don't forget to **unsubscribe**.\n\nA more advanced v3 usage scenario includes listening to all actions and their respectively emitted tokens. This is covered [later on this page](#example-v3-all-actions).\n\n### <a name=\"playground\"></a>Playground\n\nYou can also play with [this Stackblitz demo](https://stackblitz.com/edit/ng-recaptcha-example) to get a feel of how this component can be used.\n\n## <a name=\"forms-ready\"></a>Working with `@angular/forms`\n\nThere are two modules available for you:\n\n```typescript\nimport { RecaptchaModule, RecaptchaFormsModule } from 'ng-recaptcha';\n```\n\nIf you want your `<re-captcha>` element to work correctly with `[(ngModel)]` directive,\nyou need to import the `RecaptchaFormsModule` into your application module (pretty much\nlike with Angular own `'@angular/forms'` module).\n\n## <a name=\"api\"></a>API\n\n### <a name=\"api-options\"></a>Input Options\n\nThe component supports this options:\n\n* `siteKey`\n* `theme`\n* `type`\n* `size`\n* `tabIndex`\n* `badge`\n\nThey are all pretty well described either in the [reCAPTCHA docs](https://developers.google.com/recaptcha/docs/display), or in the [invisible reCAPTCHA docs](https://developers.google.com/recaptcha/docs/invisible),\nso I won't duplicate it here.\n\nBesides specifying these options on the component itself, you can provide a global `<re-captcha>` configuration - see [Configuring the component globally](#example-global-config) section below.\n\n### <a name=\"api-events\"></a>Events\n\n* `resolved(response: string)`. Occurs when the captcha resolution value changed.\n  When user resolves captcha, use `response` parameter to send to the server for verification.\n  This parameter is equivalent to calling [`grecaptcha.getResponse`](https://developers.google.com/recaptcha/docs/display#js_api).\n\n  If the captcha has expired prior to submitting its value to the server, the component\n  will reset the captcha, and trigger the `resolved` event with `response === null`.\n\n### <a name=\"api-methods\"></a>Methods\n\n* `reset()`. Performs a manual captcha reset. This method might be useful if your form\nvalidation failed, and you need the user to re-enter the captcha.\n* `execute()`. Executes the invisible recaptcha. Does nothing if component's size is not set to \"invisible\". See [Invisible reCAPTCHA developers guide](https://developers.google.com/recaptcha/docs/invisible#js_api) for more information.\n\n## <a name=\"examples\"></a>Examples\n\n### <a name=\"example-global-config\"></a>Configuring the component globally [(see in action)](https://dethariel.github.io/ng-recaptcha/global-config)\n\nSome properties are global - including `siteKey`, `size`, and others. You can provide them at the module-level using the `RECAPTCHA_SETTINGS` provider:\n\n```typescript\nimport { RECAPTCHA_SETTINGS, RecaptchaSettings } from 'ng-recaptcha';\n\n@NgModule({\n  providers: [\n    {\n      provide: RECAPTCHA_SETTINGS,\n      useValue: { siteKey: '<YOUR_KEY>' } as RecaptchaSettings,\n    },\n  ],\n}) export class MyModule { }\n```\n\nGlobal properties can be overridden on a case-by-case basis - the values on the `<re-captcha>` component itself take precedence over global settings.\n\n### <a name=\"example-language\"></a>Specifying a different language [(see in action)](https://dethariel.github.io/ng-recaptcha/language)\n\n`<re-captcha>` supports various languages. By default recaptcha will guess the user's language itself\n(which is beyond the scope of this lib).\nBut you can override this behavior and provide a specific language to use.\nThe language setting is global, though, and cannot be set on a per-captcha basis.\nIt can be provided like this:\n\n```typescript\nimport { RECAPTCHA_LANGUAGE } from 'ng-recaptcha';\n\n@NgModule({\n  providers: [\n    {\n      provide: RECAPTCHA_LANGUAGE,\n      useValue: 'fr', // use French language\n    },\n  ],\n}) export class MyModule { }\n```\n\nYou can find the list of supported languages in [reCAPTCHA docs](https://developers.google.com/recaptcha/docs/language).\n\n### <a name=\"example-preload-api\"></a>Loading the reCAPTCHA API by yourself [(see in action)](https://dethariel.github.io/ng-recaptcha/preload-api)\n\nBy default, the component assumes that the reCAPTCHA API loading will be handled\nby the `RecaptchaLoaderService`. However, you can override that by providing your\ninstance of this service to the Angular DI.\n\nThe below code snippet is an example of how such a provider can be implemented.\n\n**TL;DR**: there should be an `Observable` that eventually resolves to a\n`grecaptcha`-compatible object (e.g. `grecaptcha` itself).\n\n```html\n<script src=\"https://www.google.com/recaptcha/api.js?render=explicit&amp;onload=onloadCallback\"></script>\n\n<script>\n    // bootstrap the application once the reCAPTCHA api has loaded\n    function onloadCallback() {\n        System.import('app').catch(function(err) { console.error(err); });\n    }\n</script>\n```\n\n```typescript\nimport { RecaptchaLoaderService } from 'ng-recaptcha';\n\n@Injectable()\nexport class PreloadedRecaptchaAPIService {\n  public ready: Observable<ReCaptchaV2.ReCaptcha>;\n\n  constructor() {\n    let readySubject = new BehaviorSubject<ReCaptchaV2.ReCaptcha>(grecaptcha);\n    this.ready = readySubject.asObservable();\n  }\n}\n\n@NgModule({\n  providers: [\n    {\n      provide: RecaptchaLoaderService,\n      useValue: new PreloadedRecaptchaAPIService(),\n    },\n  ],\n}) export class MyModule { }\n```\n\n### <a name=\"example-forms\"></a>Usage with `required` in forms [(see in action)](https://dethariel.github.io/ng-recaptcha/forms)\n\nIt's very easy to put `<re-captcha>` in an Angular form and have it `require`d - just\nadd the `required` attribute to the `<re-captcha>` element. Do not forget to import `RecaptchaFormsModule` from `'ng-recaptcha'`!\n\n```typescript\n@Component({\n  selector: 'my-form',\n  template: `\n  <form>\n    <re-captcha\n      [(ngModel)]=\"formModel.captcha\"\n      name=\"captcha\"\n      required\n      siteKey=\"YOUR_SITE_KEY\"\n    ></re-captcha>\n  </form>`,\n}) export class MyForm {\n  formModel = new MyFormModel();\n}\n```\n\nA similar approach can be taken for reactive forms:\n\n```typescript\n@Component({\n  selector: 'my-reactive-form',\n  template: `\n    <form [formGroup]=\"reactiveForm\">\n      <re-captcha formControlName=\"recaptchaReactive\"></re-captcha>\n      <button [disabled]=\"reactiveForm.invalid\">Submit</button>\n    </form>\n  `,\n}) export class MyReactiveForm {\n  reactiveForm: FormGroup;\n\n  ngOnInit() {\n    this.reactiveForm = new FormGroup({\n      recaptchaReactive: new FormControl(null, Validators.required)\n    });\n  }\n}\n```\n\n### <a name=\"example-invisible\"></a>Working with invisible reCAPTCHA [(see in action)](https://dethariel.github.io/ng-recaptcha/invisible)\n\nWorking with [invisible reCAPTCHA](https://developers.google.com/recaptcha/docs/invisible) is almost the same as with regular one.\nFirst, you need to provide the right size:\n\n```html\n<re-captcha size=\"invisible\" ...></re-captcha>\n```\n\nYou will also need to invoke the [`\"execute()\"`](https://developers.google.com/recaptcha/docs/invisible#programmatic_execute) method manually. This can be done by either obtaining a reference to `RecaptchaComponent` via `@ViewChild()`, or by using inline template reference:\n\n```html\n<re-captcha #captchaRef=\"reCaptcha\" ...></re-captcha>\n...\n<button (click)=\"captchaRef.execute()\">Submit</button>\n```\n\nNormally you would only submit a form when recaptcha response has been received. This can be achieved by reacting to `(resolved)` event and invoking submit logic when the captcha response is truthy (this will not try to submit the form when recaptcha response has expired). A sample implementation would look like this:\n\n```typescript\n@Component({\n  selector: 'my-form',\n  template: `\n  <form>\n    <re-captcha\n      #captchaRef=\"reCaptcha\"\n      siteKey=\"YOUR_SITE_KEY\"\n      size=\"invisible\"\n      (resolved)=\"$event && submit($event)\"\n    ></re-captcha>\n    <button (click)=\"captchaRef.execute()\">Submit</button>\n  </form>`,\n}) export class MyForm {\n  public submit(captchaResponse: string): void {\n    this.http.post({\n      captcha: captchaResponse,\n      /* ... */\n    });\n  }\n}\n```\n\n### <a name=\"example-resizing\"></a>Resizing\n\nMaking reCAPTCHA responsive is sometimes necessary, especially when working with mobile devices. You can use css-transforms to achieve that as in [this StackOverflow answer](https://stackoverflow.com/a/29521983/2645305), which is also ell-described in [this blog post](https://geekgoddess.com/how-to-resize-the-google-nocaptcha-recaptcha/). You can also take a look at a [live example](https://stackblitz.com/edit/ng-recaptcha-example-uncvxq?file=src/app/app.component.html) of how this might be implemented. This boils down to\n\n```html\n<div style=\"transform:scale(0.7);transform-origin:0;\">\n  <re-captcha></re-captcha>\n</div>\n```\n\n### <a name=\"example-systemjs\"></a>SystemJS configuration\n\nTo configure the package to work with SystemJS, you would configure it approximately like that (assuming you've installed `ng-recaptcha` using `npm`):\n\n```javascript\n// SystemJS config file\n(function () {\n  System.config({\n    paths: {\n      'npm:': '/node_modules/',\n    },\n    map: {\n      'ng-recaptcha': 'npm:ng-recaptcha',\n    },\n    packages: {\n      'ng-recaptcha': { main: './index.js' },\n    },\n  });\n})();\n```\n\n### <a name=\"example-different-url\"></a>Loading from a different location\n\nSince `\"google.com\"` domain might be unavailable in some countries, reCAPTCHA core team has a solution for that - using `\"recaptcha.net\"` domain. You can configure the component to use that by providing the `RECAPTCHA_BASE_URL` token, for example:\n\n```javascript\nimport { RECAPTCHA_BASE_URL } from 'ng-recaptcha';\n\n@NgModule({\n  providers: [\n    {\n      provide: RECAPTCHA_BASE_URL,\n      useValue: 'https://recaptcha.net/recaptcha/api.js', // use recaptcha.net script source for some of our users\n    },\n  ],\n}) export class MyModule { }\n```\n\n### <a name=\"example-csp-nonce\"></a>Specifying nonce for Content-Security-Policy\n\nPer [reCAPTCHA FAQ on CSP](https://developers.google.com/recaptcha/docs/faq#im-using-content-security-policy-csp-on-my-website-how-can-i-configure-it-to-work-with-recaptcha), the recommended approach for that is to supply nonce to the script tag. This is possible by providing the `RECAPTCHA_NONCE` token, for example:\n\n```javascript\nimport { RECAPTCHA_NONCE } from 'ng-recaptcha';\n\n@NgModule({\n  providers: [\n    {\n      provide: RECAPTCHA_NONCE,\n      useValue: '<YOUR_NONCE_VALUE>',\n    },\n  ],\n}) export class MyModule { }\n```\n\n### <a name=\"example-v3-all-actions\"></a>Listening for all actions with reCAPTCHA v3\n\nMore often than not you will need to only get a reCAPTCHA token with the action the user is currently taking, and submit it to the backend at that time. However, having a single listener for all events will be desirable.\n\nThere is an `Observable` exactly for that purpose: `ReCaptchaV3Service.onExecute`. It emits a value every time a token is received from reCAPTCHA. The shape of payload it operates on is defined via `OnExecuteData` interface:\n\n```ts\ninterface OnExecuteData {\n  action: string;\n  token: string;\n}\n```\n\nwhere `action` is the name of the action that has been executed, and `token` is what reCAPTCHA v3 provided when executing that action.\n\nHere's how you would potentially set this up:\n\n```ts\nimport { OnExecuteData, ReCaptchaV3Service } from 'ng-recaptcha';\n\n@Component({\n  selector: 'my-component',\n  templateUrl: './v3-demo.component.html',\n})\nexport class MyComponent implements OnInit, OnDestroy {\n  private subscription: Subscription;\n\n  constructor(\n    private recaptchaV3Service: ReCaptchaV3Service,\n  ) {\n  }\n\n  public ngOnInit() {\n    this.subscription = this.recaptchaV3Service.onExecute\n      .subscribe((data: OnExecuteData) => {\n        this.handleRecaptchaExecute(data.action, data.token);\n      });\n  }\n\n  public ngOnDestroy() {\n    if (this.subscription) {\n      this.subscription.unsubscribe();\n    }\n  }\n}\n```\n\nThere are a couple things to keep in mind:\n\n* `onExecute` will trigger for **all** actions. If you only need to bulk-process some actions, and not others - you will have to apply filtering yourself.\n* `onExecute` observable will provide you with all the events emitted **after** you have subscribed to it - it doesn't keep references to the previously emitted actions. So make sure you add such a subscription as early in your code as you feel is necessary.\n","readmeFilename":"README.md","gitHead":"5e7faa7f13d1b674bf58d64f2bff0ff8b6676c9e","bugs":{"url":"https://github.com/DethAriel/ng-recaptcha/issues"},"_id":"ng-recaptcha@5.0.0-beta.1","_npmVersion":"6.2.0","_nodeVersion":"10.9.0","_npmUser":{"name":"dethariel","email":"dethariel@gmail.com"},"dist":{"integrity":"sha512-fRwopsrvfcghgXG/8DJDgk7Hn9LA0V8yIeigYiTkSyKzCH+9kl91AGwctD4H19IoE3AybuW/Tv6+3iW4gFC8uQ==","shasum":"50f8203fb574446c64be82d9df5b1c3b84c23e18","tarball":"https://registry.npmjs.org/ng-recaptcha/-/ng-recaptcha-5.0.0-beta.1.tgz","fileCount":72,"unpackedSize":277090,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc9v1aCRA9TVsSAnZWagAA8i0QAJfolUQewK6pTXuHe2kt\nhNy1QXV2gTf5O3GVRhJPRVCPKIf33eYu85JfeaC553m6Osr+OYIa8NJxjo6K\nsGWiU0kS7iP61a5UExdtGuq4S+phC825uV6R8z2mkb8FZdB/qFjrrLA4yBXQ\njDI4cm/EWEwwPekylX3BpFgUKbsEAKYGAuvq5tG299Wf2e9i5GF4ql4ALabx\nK3YLXvaTpCZgHzkNT2XB4Ee9E2KG57HhaYPgGX/ekXYxIpFysCpNTH0u9uxf\nwXIYVO4E/1KUkpI66wPV1A6fA4lsIKK2LYBpweFUwhzpJKT99TAFFM9KTinh\n6MRW6tXVaxTFiR7Iq2bO2rCKbEFwywTp/xDlYqgFx3LJ6BjMQ1S/lghpgJso\nEsfIcEDhjFvUO+6uv2CduwAaJeWA3sd+XYE0eGWskxdV4fNA1RkGrxeo/411\nvvm818lWmUYVHjRqjyWTE1bADZGC47S2dpvkpS5H6OhIr12Jfe6zscf1rGuP\ntDOHjxoXb1IMlPEDobyx1cHFA84ba5kcwX4az6MCKMJ+becG3CNSNZLiCbBz\nSm1IH44Vffo98Q89OtPPrvTq7B0XMMV9oak8bIIjjuQGGwAfcU0zl5oDQtsc\nDO3ysc8Ht1lAO+2LXGN4LuaT35LbtqNODXBih99P29fGhuQoGXC1rSsfTFzC\nX9to\r\n=81Xx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHt4BR1gQZ6nmgo34GbgE6ByR9tCu6cUIPuO32I77xZaAiAmLI8INVqgOAGZw+2oSEjhkF1ELHtoVCuM5vX6xtCAAw=="}]},"maintainers":[{"name":"dethariel","email":"dethariel@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ng-recaptcha_5.0.0-beta.1_1559690585559_0.19952892199329697"},"_hasShrinkwrap":false,"deprecated":"This version was published incorrectly, please upgrade to at least v5.0.0-beta.2"},"5.0.0-beta.2":{"name":"ng-recaptcha","version":"5.0.0-beta.2","description":"Angular component for Google reCAPTCHA","main":"bundles/ng-recaptcha.umd.js","typings":"ng-recaptcha.d.ts","repository":{"type":"git","url":"git+https://github.com/DethAriel/ng-recaptcha.git"},"keywords":["angular","recaptcha","angular-recaptcha","ng-recaptcha"],"author":{"name":"Ruslan Arkhipau","email":"dethariel@gmail.com"},"license":"MIT","optionalDependencies":{"@types/grecaptcha":"^2.0.33"},"dependencies":{"tslib":"^1.9.0","@types/grecaptcha":"^2.0.33"},"peerDependencies":{"@angular/core":"^6.0.0 || ^7.0.0 || ^8.0.0"},"devDependencies":{"@angular/common":"^6.0.0","@angular/compiler":"^6.0.0","@angular/compiler-cli":"^6.0.0","@angular/core":"^6.0.0","@angular/forms":"^6.0.0","@angular/platform-browser":"^6.0.0","@types/core-js":"^0.9.39","angular-precommit":"^1.0.3","codelyzer":"^4.3.0","conventional-changelog-cli":"^1.3.1","conventional-github-releaser":"^1.1.13","del-cli":"^0.2.1","gh-pages":"^0.12.0","husky":"^0.13.3","ng-packagr":"^5.2.0","npm-run-all":"^4.1.2","rxjs":"^6.1.0","tslint":"~5.7.0","typescript":"~2.7.2","zone.js":"^0.8.26"},"homepage":"https://github.com/DethAriel/ng-recaptcha#readme","module":"fesm5/ng-recaptcha.js","es2015":"fesm2015/ng-recaptcha.js","esm5":"esm5/ng-recaptcha.js","esm2015":"esm2015/ng-recaptcha.js","fesm5":"fesm5/ng-recaptcha.js","fesm2015":"fesm2015/ng-recaptcha.js","metadata":"ng-recaptcha.metadata.json","sideEffects":false,"readme":"# Angular component for Google reCAPTCHA\n\n## ng-recaptcha [![npm version](https://badge.fury.io/js/ng-recaptcha.svg)](http://badge.fury.io/js/ng-recaptcha)\n\n[![MIT licensed](https://img.shields.io/badge/license-MIT-blue.svg)](https://raw.githubusercontent.com/dethariel/ng-recaptcha/master/LICENSE)\n[![Build Status](https://travis-ci.org/DethAriel/ng-recaptcha.svg?branch=master)](https://travis-ci.org/DethAriel/ng-recaptcha)\n\nA simple, configurable, easy-to-start component for handling reCAPTCHA v2 and v3.\n\n## Table of contents\n1. [Installation](#installation)\n2. [Basic Usage](#example-basic)\n   * [Playground](#playground)\n3. [Working with `@angular/forms`](#forms-ready)\n4. [API](#api)\n   * [Input Options](#api-options)\n   * [Events](#api-events)\n   * [Methods](#api-methods)\n5. [Examples](#examples)\n   * [Configuring the component globally](#example-global-config)\n   * [Specifying a different language](#example-language)\n   * [Loading the reCAPTCHA API by yourself](#example-preload-api)\n   * [Usage with `required` in forms](#example-forms)\n   * [Working with invisible reCAPTCHA](#example-invisible)\n   * [Resizing](#example-resizing)\n   * [SystemJS configuration](#example-systemjs)\n   * [Loading from a different location](#example-different-url)\n   * [Specifying nonce for Content-Security-Policy](#example-csp-nonce)\n   * [Listening for all actions with reCAPTCHA v3](#example-v3-all-actions)\n\n## <a name=\"installation\"></a>Installation\n\nThe easiest way is to install through [yarn](https://yarnpkg.com/package/ng-recaptcha) or [npm](https://www.npmjs.com/package/ng-recaptcha):\n\n```sh\nyarn add ng-recaptcha\nnpm i ng-recaptcha --save\n```\n\n## <a name=\"example-basic\"></a>Basic Usage [(see in action)](https://dethariel.github.io/ng-recaptcha/)\n\nThe below applies to reCAPTCHA v2, for basic usage with reCAPTCHA v3 scroll down to [here](#example-basic-v3).\n\nTo start with, you need to import the `RecaptchaModule` (more on that [later](#modules)):\n\n```typescript\n// app.module.ts\nimport { RecaptchaModule } from 'ng-recaptcha';\n// if you need forms support:\n// import { RecaptchaModule, RecaptchaFormsModule } from 'ng-recaptcha';\nimport { BrowserModule }  from '@angular/platform-browser';\nimport { MyApp } from './app.component.ts';\n\n@NgModule({\n  bootstrap: [MyApp],\n  declarations: [MyApp],\n  imports: [\n    BrowserModule,\n    RecaptchaModule,\n    // RecaptchaFormsModule, // if you need forms support\n  ],\n})\nexport class MyAppModule { }\n```\n\nOnce you have done that, the rest is simple:\n\n```typescript\n// app.component.ts\nimport { Component } from '@angular/core';\n\n@Component({\n    selector: 'my-app',\n    template: `<re-captcha (resolved)=\"resolved($event)\" siteKey=\"YOUR_SITE_KEY\"></re-captcha>`,\n}) export class MyApp {\n    resolved(captchaResponse: string) {\n        console.log(`Resolved captcha with response: ${captchaResponse}`);\n    }\n}\n```\n\n```typescript\n// boot.ts\nimport { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\nimport { MyAppModule } from './app.module.ts';\n\nplatformBrowserDynamic().bootstrapModule(MyAppModule);\n```\n\n### <a name=\"example-basic-v3\"></a>reCAPTCHA v3 Usage [(see in action)](https://dethariel.github.io/ng-recaptcha/v3)\n\n[reCAPTCHA v3](https://developers.google.com/recaptcha/docs/v3) introduces a different way of bot protection. To work with v3 APIs, `ng-recaptcha` provides a service (as opposed to a component). To start with, you need to import the `RecaptchaV3Module` and provide your reCAPTCHA v3 site key using `RECAPTCHA_V3_SITE_KEY` injection token:\n\n```ts\nimport { BrowserModule } from '@angular/platform-browser';\nimport { RECAPTCHA_V3_SITE_KEY, RecaptchaV3Module } from 'ng-recaptcha';\n\nimport { MyApp } from './app.component.ts';\n\n@NgModule({\n  bootstrap: [MyApp],\n  declarations: [MyApp],\n  imports: [\n    BrowserModule,\n    RecaptchaV3Module,\n  ],\n  providers: [\n    { provide: RECAPTCHA_V3_SITE_KEY, useValue: '<YOUR_SITE_KEY>' },\n  ],\n})\nexport class MyAppModule { }\n\n```\n\nIn order to execute a reCAPTCHA v3 action, import the `ReCaptchaV3Service` into your desired component:\n\n```ts\nimport { ReCaptchaV3Service } from 'ng-recaptcha';\n\n@Component({\n  selector: 'recaptcha-demo',\n  template: `\n    <button (click)=\"executeImportantAction()\">Important action</button>\n  `,\n})\nexport class RecaptchaV3DemoComponent {\n  constructor(\n    private recaptchaV3Service: ReCaptchaV3Service,\n  ) {\n  }\n\n  public executeImportantAction(): void {\n    this.recaptchaV3Service.execute('importantAction')\n      .subscribe((token) => this.handleToken(token));\n  }\n```\n\nAs always with subscriptions, please don't forget to **unsubscribe**.\n\nA more advanced v3 usage scenario includes listening to all actions and their respectively emitted tokens. This is covered [later on this page](#example-v3-all-actions).\n\n### <a name=\"playground\"></a>Playground\n\nYou can also play with [this Stackblitz demo](https://stackblitz.com/edit/ng-recaptcha-example) to get a feel of how this component can be used.\n\n## <a name=\"forms-ready\"></a>Working with `@angular/forms`\n\nThere are two modules available for you:\n\n```typescript\nimport { RecaptchaModule, RecaptchaFormsModule } from 'ng-recaptcha';\n```\n\nIf you want your `<re-captcha>` element to work correctly with `[(ngModel)]` directive,\nyou need to import the `RecaptchaFormsModule` into your application module (pretty much\nlike with Angular own `'@angular/forms'` module).\n\n## <a name=\"api\"></a>API\n\n### <a name=\"api-options\"></a>Input Options\n\nThe component supports this options:\n\n* `siteKey`\n* `theme`\n* `type`\n* `size`\n* `tabIndex`\n* `badge`\n\nThey are all pretty well described either in the [reCAPTCHA docs](https://developers.google.com/recaptcha/docs/display), or in the [invisible reCAPTCHA docs](https://developers.google.com/recaptcha/docs/invisible),\nso I won't duplicate it here.\n\nBesides specifying these options on the component itself, you can provide a global `<re-captcha>` configuration - see [Configuring the component globally](#example-global-config) section below.\n\n### <a name=\"api-events\"></a>Events\n\n* `resolved(response: string)`. Occurs when the captcha resolution value changed.\n  When user resolves captcha, use `response` parameter to send to the server for verification.\n  This parameter is equivalent to calling [`grecaptcha.getResponse`](https://developers.google.com/recaptcha/docs/display#js_api).\n\n  If the captcha has expired prior to submitting its value to the server, the component\n  will reset the captcha, and trigger the `resolved` event with `response === null`.\n\n### <a name=\"api-methods\"></a>Methods\n\n* `reset()`. Performs a manual captcha reset. This method might be useful if your form\nvalidation failed, and you need the user to re-enter the captcha.\n* `execute()`. Executes the invisible recaptcha. Does nothing if component's size is not set to \"invisible\". See [Invisible reCAPTCHA developers guide](https://developers.google.com/recaptcha/docs/invisible#js_api) for more information.\n\n## <a name=\"examples\"></a>Examples\n\n### <a name=\"example-global-config\"></a>Configuring the component globally [(see in action)](https://dethariel.github.io/ng-recaptcha/global-config)\n\nSome properties are global - including `siteKey`, `size`, and others. You can provide them at the module-level using the `RECAPTCHA_SETTINGS` provider:\n\n```typescript\nimport { RECAPTCHA_SETTINGS, RecaptchaSettings } from 'ng-recaptcha';\n\n@NgModule({\n  providers: [\n    {\n      provide: RECAPTCHA_SETTINGS,\n      useValue: { siteKey: '<YOUR_KEY>' } as RecaptchaSettings,\n    },\n  ],\n}) export class MyModule { }\n```\n\nGlobal properties can be overridden on a case-by-case basis - the values on the `<re-captcha>` component itself take precedence over global settings.\n\n### <a name=\"example-language\"></a>Specifying a different language [(see in action)](https://dethariel.github.io/ng-recaptcha/language)\n\n`<re-captcha>` supports various languages. By default recaptcha will guess the user's language itself\n(which is beyond the scope of this lib).\nBut you can override this behavior and provide a specific language to use.\nThe language setting is global, though, and cannot be set on a per-captcha basis.\nIt can be provided like this:\n\n```typescript\nimport { RECAPTCHA_LANGUAGE } from 'ng-recaptcha';\n\n@NgModule({\n  providers: [\n    {\n      provide: RECAPTCHA_LANGUAGE,\n      useValue: 'fr', // use French language\n    },\n  ],\n}) export class MyModule { }\n```\n\nYou can find the list of supported languages in [reCAPTCHA docs](https://developers.google.com/recaptcha/docs/language).\n\n### <a name=\"example-preload-api\"></a>Loading the reCAPTCHA API by yourself [(see in action)](https://dethariel.github.io/ng-recaptcha/preload-api)\n\nBy default, the component assumes that the reCAPTCHA API loading will be handled\nby the `RecaptchaLoaderService`. However, you can override that by providing your\ninstance of this service to the Angular DI.\n\nThe below code snippet is an example of how such a provider can be implemented.\n\n**TL;DR**: there should be an `Observable` that eventually resolves to a\n`grecaptcha`-compatible object (e.g. `grecaptcha` itself).\n\n```html\n<script src=\"https://www.google.com/recaptcha/api.js?render=explicit&amp;onload=onloadCallback\"></script>\n\n<script>\n    // bootstrap the application once the reCAPTCHA api has loaded\n    function onloadCallback() {\n        System.import('app').catch(function(err) { console.error(err); });\n    }\n</script>\n```\n\n```typescript\nimport { RecaptchaLoaderService } from 'ng-recaptcha';\n\n@Injectable()\nexport class PreloadedRecaptchaAPIService {\n  public ready: Observable<ReCaptchaV2.ReCaptcha>;\n\n  constructor() {\n    let readySubject = new BehaviorSubject<ReCaptchaV2.ReCaptcha>(grecaptcha);\n    this.ready = readySubject.asObservable();\n  }\n}\n\n@NgModule({\n  providers: [\n    {\n      provide: RecaptchaLoaderService,\n      useValue: new PreloadedRecaptchaAPIService(),\n    },\n  ],\n}) export class MyModule { }\n```\n\n### <a name=\"example-forms\"></a>Usage with `required` in forms [(see in action)](https://dethariel.github.io/ng-recaptcha/forms)\n\nIt's very easy to put `<re-captcha>` in an Angular form and have it `require`d - just\nadd the `required` attribute to the `<re-captcha>` element. Do not forget to import `RecaptchaFormsModule` from `'ng-recaptcha'`!\n\n```typescript\n@Component({\n  selector: 'my-form',\n  template: `\n  <form>\n    <re-captcha\n      [(ngModel)]=\"formModel.captcha\"\n      name=\"captcha\"\n      required\n      siteKey=\"YOUR_SITE_KEY\"\n    ></re-captcha>\n  </form>`,\n}) export class MyForm {\n  formModel = new MyFormModel();\n}\n```\n\nA similar approach can be taken for reactive forms:\n\n```typescript\n@Component({\n  selector: 'my-reactive-form',\n  template: `\n    <form [formGroup]=\"reactiveForm\">\n      <re-captcha formControlName=\"recaptchaReactive\"></re-captcha>\n      <button [disabled]=\"reactiveForm.invalid\">Submit</button>\n    </form>\n  `,\n}) export class MyReactiveForm {\n  reactiveForm: FormGroup;\n\n  ngOnInit() {\n    this.reactiveForm = new FormGroup({\n      recaptchaReactive: new FormControl(null, Validators.required)\n    });\n  }\n}\n```\n\n### <a name=\"example-invisible\"></a>Working with invisible reCAPTCHA [(see in action)](https://dethariel.github.io/ng-recaptcha/invisible)\n\nWorking with [invisible reCAPTCHA](https://developers.google.com/recaptcha/docs/invisible) is almost the same as with regular one.\nFirst, you need to provide the right size:\n\n```html\n<re-captcha size=\"invisible\" ...></re-captcha>\n```\n\nYou will also need to invoke the [`\"execute()\"`](https://developers.google.com/recaptcha/docs/invisible#programmatic_execute) method manually. This can be done by either obtaining a reference to `RecaptchaComponent` via `@ViewChild()`, or by using inline template reference:\n\n```html\n<re-captcha #captchaRef=\"reCaptcha\" ...></re-captcha>\n...\n<button (click)=\"captchaRef.execute()\">Submit</button>\n```\n\nNormally you would only submit a form when recaptcha response has been received. This can be achieved by reacting to `(resolved)` event and invoking submit logic when the captcha response is truthy (this will not try to submit the form when recaptcha response has expired). A sample implementation would look like this:\n\n```typescript\n@Component({\n  selector: 'my-form',\n  template: `\n  <form>\n    <re-captcha\n      #captchaRef=\"reCaptcha\"\n      siteKey=\"YOUR_SITE_KEY\"\n      size=\"invisible\"\n      (resolved)=\"$event && submit($event)\"\n    ></re-captcha>\n    <button (click)=\"captchaRef.execute()\">Submit</button>\n  </form>`,\n}) export class MyForm {\n  public submit(captchaResponse: string): void {\n    this.http.post({\n      captcha: captchaResponse,\n      /* ... */\n    });\n  }\n}\n```\n\n### <a name=\"example-resizing\"></a>Resizing\n\nMaking reCAPTCHA responsive is sometimes necessary, especially when working with mobile devices. You can use css-transforms to achieve that as in [this StackOverflow answer](https://stackoverflow.com/a/29521983/2645305), which is also ell-described in [this blog post](https://geekgoddess.com/how-to-resize-the-google-nocaptcha-recaptcha/). You can also take a look at a [live example](https://stackblitz.com/edit/ng-recaptcha-example-uncvxq?file=src/app/app.component.html) of how this might be implemented. This boils down to\n\n```html\n<div style=\"transform:scale(0.7);transform-origin:0;\">\n  <re-captcha></re-captcha>\n</div>\n```\n\n### <a name=\"example-systemjs\"></a>SystemJS configuration\n\nTo configure the package to work with SystemJS, you would configure it approximately like that (assuming you've installed `ng-recaptcha` using `npm`):\n\n```javascript\n// SystemJS config file\n(function () {\n  System.config({\n    paths: {\n      'npm:': '/node_modules/',\n    },\n    map: {\n      'ng-recaptcha': 'npm:ng-recaptcha',\n    },\n    packages: {\n      'ng-recaptcha': { main: './index.js' },\n    },\n  });\n})();\n```\n\n### <a name=\"example-different-url\"></a>Loading from a different location\n\nSince `\"google.com\"` domain might be unavailable in some countries, reCAPTCHA core team has a solution for that - using `\"recaptcha.net\"` domain. You can configure the component to use that by providing the `RECAPTCHA_BASE_URL` token, for example:\n\n```javascript\nimport { RECAPTCHA_BASE_URL } from 'ng-recaptcha';\n\n@NgModule({\n  providers: [\n    {\n      provide: RECAPTCHA_BASE_URL,\n      useValue: 'https://recaptcha.net/recaptcha/api.js', // use recaptcha.net script source for some of our users\n    },\n  ],\n}) export class MyModule { }\n```\n\n### <a name=\"example-csp-nonce\"></a>Specifying nonce for Content-Security-Policy\n\nPer [reCAPTCHA FAQ on CSP](https://developers.google.com/recaptcha/docs/faq#im-using-content-security-policy-csp-on-my-website-how-can-i-configure-it-to-work-with-recaptcha), the recommended approach for that is to supply nonce to the script tag. This is possible by providing the `RECAPTCHA_NONCE` token, for example:\n\n```javascript\nimport { RECAPTCHA_NONCE } from 'ng-recaptcha';\n\n@NgModule({\n  providers: [\n    {\n      provide: RECAPTCHA_NONCE,\n      useValue: '<YOUR_NONCE_VALUE>',\n    },\n  ],\n}) export class MyModule { }\n```\n\n### <a name=\"example-v3-all-actions\"></a>Listening for all actions with reCAPTCHA v3\n\nMore often than not you will need to only get a reCAPTCHA token with the action the user is currently taking, and submit it to the backend at that time. However, having a single listener for all events will be desirable.\n\nThere is an `Observable` exactly for that purpose: `ReCaptchaV3Service.onExecute`. It emits a value every time a token is received from reCAPTCHA. The shape of payload it operates on is defined via `OnExecuteData` interface:\n\n```ts\ninterface OnExecuteData {\n  action: string;\n  token: string;\n}\n```\n\nwhere `action` is the name of the action that has been executed, and `token` is what reCAPTCHA v3 provided when executing that action.\n\nHere's how you would potentially set this up:\n\n```ts\nimport { OnExecuteData, ReCaptchaV3Service } from 'ng-recaptcha';\n\n@Component({\n  selector: 'my-component',\n  templateUrl: './v3-demo.component.html',\n})\nexport class MyComponent implements OnInit, OnDestroy {\n  private subscription: Subscription;\n\n  constructor(\n    private recaptchaV3Service: ReCaptchaV3Service,\n  ) {\n  }\n\n  public ngOnInit() {\n    this.subscription = this.recaptchaV3Service.onExecute\n      .subscribe((data: OnExecuteData) => {\n        this.handleRecaptchaExecute(data.action, data.token);\n      });\n  }\n\n  public ngOnDestroy() {\n    if (this.subscription) {\n      this.subscription.unsubscribe();\n    }\n  }\n}\n```\n\nThere are a couple things to keep in mind:\n\n* `onExecute` will trigger for **all** actions. If you only need to bulk-process some actions, and not others - you will have to apply filtering yourself.\n* `onExecute` observable will provide you with all the events emitted **after** you have subscribed to it - it doesn't keep references to the previously emitted actions. So make sure you add such a subscription as early in your code as you feel is necessary.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/DethAriel/ng-recaptcha/issues"},"_id":"ng-recaptcha@5.0.0-beta.2","_npmVersion":"6.2.0","_nodeVersion":"10.9.0","_npmUser":{"name":"dethariel","email":"dethariel@gmail.com"},"dist":{"integrity":"sha512-NNwEL85k10gYICISaikAM3jeK6UpBFAqYUinr5UtB6XUdsj926Bk8PjyJTZ7yMaDU1l9pKsGUpiLPsAPbHck0w==","shasum":"a1b3a1656549d23ffc5e240f452e6baefa861876","tarball":"https://registry.npmjs.org/ng-recaptcha/-/ng-recaptcha-5.0.0-beta.2.tgz","fileCount":45,"unpackedSize":323967,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdA9JpCRA9TVsSAnZWagAA/xQP/j2o/3CMf9tdAil0SjFE\n8I6vnHSctbZthJc8yaw1kv5FqJLJ0W7RNVjkqRU+27yG2c4dqhmro5gcKgXu\ntb143QmUY0HP6aWaQ16hj6iQqey/SwRpG5zmdDz93EECS0OsZmK76gNz46hG\nGVvrC8I0nY2QYelBUBtxdBM/xyH+++CZWab/6DN/i6eZgkfzsBa285RDWfhl\n/WLV05lLqdTGWJwJL2CfJc2NGh+2cJ94zLkTbCNuJx9vYDkHLiZ04ZJRGhAo\nFTPSu7b3mX2eI9Ih51gVijyZoRwdA2f50Q2HIiZqrg73MoRCv/HNGAQl8sah\nzMhZ/dohpv4UimfHS6TPF1j9C2zRGG/NZYZkFElhqXvlzHuV49U0kPBHKnEQ\ntkatiA1Wkl07mC+4pwmhkSeim99HRlG9cRRU5IjoJyEazpmPGMcInKgwRvjw\ndAIcf4drAIvNGpCPvqkkm5yOAL5j9HjpPNdr0cKVsQ4UZDX20OvuKoVqpC1r\niQyDMV/8bjS3+u/gIfX4UD7q0sjwaptNoFABFKTKE0BKtsU3FRe6u+DF5/F3\njKJup0DtE2W1dphHcwf7EuuVwXSrTUUI+/bvg4xsPn53vlLW3Si+44d2lxiT\nrSZz2kt0gS5NntoRsXMhVCpgi33tdnnrfXI/yvlDa0NLUv9wGeMed9FAwRh7\nkR43\r\n=cuYD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDEYPFgNqTI+zuW4aDllY6K7PfXH5QmSEx5IqrkqJbbjAIgYci2bVeHJRtBloiApxE8Y1zmxm1REsGoISPwRmlTsjU="}]},"maintainers":[{"name":"dethariel","email":"dethariel@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ng-recaptcha_5.0.0-beta.2_1560531560663_0.16786411606604879"},"_hasShrinkwrap":false},"5.0.0":{"name":"ng-recaptcha","version":"5.0.0","description":"Angular component for Google reCAPTCHA","main":"bundles/ng-recaptcha.umd.js","typings":"ng-recaptcha.d.ts","repository":{"type":"git","url":"git+https://github.com/DethAriel/ng-recaptcha.git"},"keywords":["angular","recaptcha","angular-recaptcha","ng-recaptcha"],"author":{"name":"Ruslan Arkhipau","email":"dethariel@gmail.com"},"license":"MIT","optionalDependencies":{"@types/grecaptcha":"^2.0.33"},"dependencies":{"tslib":"^1.9.0","@types/grecaptcha":"^2.0.33"},"peerDependencies":{"@angular/core":"^6.0.0 || ^7.0.0 || ^8.0.0"},"devDependencies":{"@angular/common":"^6.0.0","@angular/compiler":"^6.0.0","@angular/compiler-cli":"^6.0.0","@angular/core":"^6.0.0","@angular/forms":"^6.0.0","@angular/platform-browser":"^6.0.0","@types/core-js":"^0.9.39","angular-precommit":"^1.0.3","codelyzer":"^4.3.0","conventional-changelog-cli":"^1.3.1","conventional-github-releaser":"^1.1.13","del-cli":"^0.2.1","gh-pages":"^0.12.0","husky":"^0.13.3","ng-packagr":"^5.2.0","npm-run-all":"^4.1.2","rxjs":"^6.1.0","tslint":"~5.7.0","typescript":"~2.7.2","zone.js":"^0.8.26"},"homepage":"https://github.com/DethAriel/ng-recaptcha#readme","module":"fesm5/ng-recaptcha.js","es2015":"fesm2015/ng-recaptcha.js","esm5":"esm5/ng-recaptcha.js","esm2015":"esm2015/ng-recaptcha.js","fesm5":"fesm5/ng-recaptcha.js","fesm2015":"fesm2015/ng-recaptcha.js","metadata":"ng-recaptcha.metadata.json","sideEffects":false,"bugs":{"url":"https://github.com/DethAriel/ng-recaptcha/issues"},"_id":"ng-recaptcha@5.0.0","_npmVersion":"6.2.0","_nodeVersion":"10.9.0","_npmUser":{"name":"dethariel","email":"dethariel@gmail.com"},"dist":{"integrity":"sha512-tUVMmHiCDgWSjqXddjRde9jTnyODwki/akixvFiYK8SaQhgW1aor1WKS8dnNtc+Spx7XFiurEXRVfgyd70G6Mw==","shasum":"3aa3344b17e2954ba0eb0e27daf97e216c006b4f","tarball":"https://registry.npmjs.org/ng-recaptcha/-/ng-recaptcha-5.0.0.tgz","fileCount":45,"unpackedSize":323960,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdTbtLCRA9TVsSAnZWagAAvTwP/j2pvrtusQr/K+YqlFER\nbJIv/DVaZnu8u2GwodHVaH+tyRUjF68fanSyRhk/km/ZcACPCW/QIrPF+g6z\n0VE7Dk2b5P02rgL5F5QPPl9qb5e99b7xabZZQqi90pQO7ZmWtl+Ex157vokM\n952NmL1g+CCVTlMJu9Fzg8a3FjhoDF64VEAjZgXP5rHXRJu+PqgnHPrNZUZ4\nh6113wmXG1+5DjeNkx5ihchw6HuoTQFYNW+kqwDLKTjXnrlDC8JH9bJpB6/x\njTr+1EUjbE1aPCQTHXa8BVpsuktyzB9IeTkt/VzV7f2Gxt2HUnsR2YICKjMR\na9JeEN+ZrBVQXeooRKYgGCTh85sQA455riADhXfvJS8Nf3A8z90yu4p2AbSS\nVJvKJPwAhE7U1Devn608GKaJoO4bA3SKziXGKV6A9YUwkGGQMPw7Ir5pgLS3\nNVGvZ7+z4EesoNwn3uJxfA13G+9AzVVmEbO8eP4wMUruSxWxAiRp9fY/Hbju\nmngU+sDT+1AYtrGdzJQgm4jr5J3mWxNYH2/T3c4Ywc9Bwl3DYia4O/iiPXBn\nCrnZaI5Tddnx+I6ipTdNn2m1lnCsGTM+yi9sKXIeZiFBCiPen8tRm/Qr9rSL\nMbzXLlC+ZKKaJIXV2rqxDW0FYH4gC0ybWbFaTRZYb411h8uWBak2qKy37Nwu\n7yFz\r\n=AJMG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBK//DoqJCqq2s42lBH6T4gv8C48QKs3/7w2RCwflX6zAiBVnhCNd8R5GLQlyeySoLV+4Li5Ee0DjSFvfZs2xq1H1A=="}]},"maintainers":[{"name":"dethariel","email":"dethariel@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ng-recaptcha_5.0.0_1565375306719_0.6773107656711532"},"_hasShrinkwrap":false},"6.0.0":{"name":"ng-recaptcha","version":"6.0.0","description":"Angular component for Google reCAPTCHA","main":"bundles/ng-recaptcha.umd.js","typings":"ng-recaptcha.d.ts","repository":{"type":"git","url":"git+https://github.com/DethAriel/ng-recaptcha.git"},"keywords":["angular","recaptcha","angular-recaptcha","ng-recaptcha"],"author":{"name":"Ruslan Arkhipau","email":"dethariel@gmail.com"},"license":"MIT","optionalDependencies":{"@types/grecaptcha":"^2.0.33"},"dependencies":{"tslib":"^1.9.0 || ^2.0.0","@types/grecaptcha":"^2.0.33"},"peerDependencies":{"@angular/core":"^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0"},"devDependencies":{"@angular/common":"^6.0.0","@angular/compiler":"^6.0.0","@angular/compiler-cli":"^6.0.0","@angular/core":"^6.0.0","@angular/forms":"^6.0.0","@angular/platform-browser":"^6.0.0","@types/core-js":"^0.9.39","angular-precommit":"^1.0.3","codelyzer":"^4.3.0","conventional-changelog-cli":"^1.3.1","conventional-github-releaser":"^1.1.13","del-cli":"^0.2.1","gh-pages":"^0.12.0","husky":"^0.13.3","ng-packagr":"^5.2.0","npm-run-all":"^4.1.2","rxjs":"^6.1.0","tslint":"~5.7.0","typescript":"~2.7.2","zone.js":"^0.8.26"},"homepage":"https://github.com/DethAriel/ng-recaptcha#readme","module":"fesm5/ng-recaptcha.js","es2015":"fesm2015/ng-recaptcha.js","esm5":"esm5/ng-recaptcha.js","esm2015":"esm2015/ng-recaptcha.js","fesm5":"fesm5/ng-recaptcha.js","fesm2015":"fesm2015/ng-recaptcha.js","metadata":"ng-recaptcha.metadata.json","sideEffects":false,"bugs":{"url":"https://github.com/DethAriel/ng-recaptcha/issues"},"_id":"ng-recaptcha@6.0.0","_nodeVersion":"12.17.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-CHTyCyNfQSMizZFEKT77xcZURF/BcgwK0j0GHJFllXrH00Y8MCDX9MX5chKfou335pXbH5HcV/t/yOa395G5eg==","shasum":"0c5e6566fbc95b4746d7c9e9f5e09fc610e86aaa","tarball":"https://registry.npmjs.org/ng-recaptcha/-/ng-recaptcha-6.0.0.tgz","fileCount":45,"unpackedSize":330243,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfWcqNCRA9TVsSAnZWagAA2NcP/RSgj7U8z7raadBadzLX\nLxaLgbGR9Ctms9yBt7zebEz1xuCZqUm+1dXHLHdDtZluRI8skPZENhO6KdUW\n96Lm48lZ7xSl9/hI3uW6kRjIG3JtpWkw6eygf7wIPh+1qM2z2Bbpj1yE5GdL\n+ZTfvzvpI4cF/X8Bc9Ay+N7+/PD8yiXLeziH+Ny3al+rxZ3w4+oYDbbToHPC\n9ynNgSB7+b0yYMQbssmZ5YbeZLXE+vulpEgqRuFrQ7ginJ+zNXn8XDlHSasI\nwNWI8mCh1qyGBm6I6lfpa3ZxKctHaNm6N2/3NGVOqa2sU7CnxMRCTI34fF7y\nCskpcB05ol+eMTjK0L6La/wqXDDniUxkb05wrBJ0o+nQlbGvvWP9yi14rxEP\nsYFDuAfbF0oSiWc65MvTZ9vj7qmFIsc6f6nHp6DeWokhcKHpQkhBcBL2odiY\nUifDA2QPh8aJ8nnD1NdRlHH2KXjzLo++6o0TqN6/5oV+Dqyf79adnHNVTMa/\nwuhNFwT3PvJAfz95f+ZljLF6XH9NZIRLDqCFH5B7SQpOIwcWFVfGCfFMfsW2\nZb25pzrYwmZ2naNzswKV6svA1jz5gFj9WMwsYs+Qf+UeorBLCr2YIG0H+kA9\nnkUZHt04CefYA2ejNrqbEKixnho853/3hSZN6PO5P5mil7UXJE4dZcjZPEVQ\nEOZj\r\n=ku37\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC3BWzo14TytSSnGMpEWTudqUAgC13J3YkIP8/8KzwEgwIhAJfqY02e3mIZ1hzczpwyRdAx/TPp4kKvAba062Fd7zj2"}]},"maintainers":[{"name":"dethariel","email":"dethariel@gmail.com"}],"_npmUser":{"name":"dethariel","email":"dethariel@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ng-recaptcha_6.0.0_1599720077079_0.07613148154091043"},"_hasShrinkwrap":false},"6.0.1":{"name":"ng-recaptcha","version":"6.0.1","description":"Angular component for Google reCAPTCHA","main":"bundles/ng-recaptcha.umd.js","typings":"ng-recaptcha.d.ts","repository":{"type":"git","url":"git+https://github.com/DethAriel/ng-recaptcha.git"},"keywords":["angular","recaptcha","angular-recaptcha","ng-recaptcha"],"author":{"name":"Ruslan Arkhipau","email":"dethariel@gmail.com"},"license":"MIT","optionalDependencies":{"@types/grecaptcha":"^2.0.33"},"dependencies":{"tslib":"^1.9.0 || ^2.0.0","@types/grecaptcha":"^2.0.33"},"peerDependencies":{"@angular/core":"^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0"},"devDependencies":{"@angular/common":"^6.0.0","@angular/compiler":"^6.0.0","@angular/compiler-cli":"^6.0.0","@angular/core":"^6.0.0","@angular/forms":"^6.0.0","@angular/platform-browser":"^6.0.0","@types/core-js":"^0.9.39","angular-precommit":"^1.0.3","codelyzer":"^4.3.0","conventional-changelog-cli":"^2.1.0","conventional-github-releaser":"^3.1.5","del-cli":"^0.2.1","gh-pages":"^0.12.0","husky":"^0.13.3","ng-packagr":"^5.7.0","npm-run-all":"^4.1.2","rxjs":"^6.1.0","tslint":"~5.7.0","typescript":"~2.7.2","zone.js":"^0.8.26"},"homepage":"https://github.com/DethAriel/ng-recaptcha#readme","module":"fesm5/ng-recaptcha.js","es2015":"fesm2015/ng-recaptcha.js","esm5":"esm5/ng-recaptcha.js","esm2015":"esm2015/ng-recaptcha.js","fesm5":"fesm5/ng-recaptcha.js","fesm2015":"fesm2015/ng-recaptcha.js","metadata":"ng-recaptcha.metadata.json","sideEffects":false,"bugs":{"url":"https://github.com/DethAriel/ng-recaptcha/issues"},"_id":"ng-recaptcha@6.0.1","_nodeVersion":"12.17.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-niZII12tTu9WVzI1pfSBKs+vhf697xzh4l1vhALDsKXocpZVjtJ9eo9DfNBju4DE0qgYGIpctx9YZBxmIQV3jA==","shasum":"93ad78950098be3bd34231fec1836df9614c523d","tarball":"https://registry.npmjs.org/ng-recaptcha/-/ng-recaptcha-6.0.1.tgz","fileCount":46,"unpackedSize":384903,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfXGIaCRA9TVsSAnZWagAAp8wP+wZziDsefMtiPzpCzOC7\nOImJk5C1g7FlJTWu5+Y4aUi4abyOzvLYgPPwgNVKgnmrgKSn5u1XGvS0EIVh\nBrlrbmbuCSG3ADiGkJXxbOKiXRLkVT8ZTXhZgNhxUB2MKcU4QAe+CtIt3PqT\niGqx9ppCp8L0VJV06jWTIzHJXoDvtRaZygsmIALsq2vxPWZFMisP04EP2LAG\n2zjWrqy8YXd+1PuMBWgQ07jG95I7ScDyWjBIID/avQqvJ0en4ca1DVQh4Amb\n5WR2I42x9OusOannqgixUzcxIFDnSi1EX47HvMXIfgjV5pPeTBFZtTpbm8Tu\nu/PEXQq2idrvUxhu48ieOkVTzS2uaMdXsdmZHMMZ2ma5+V4TtFIVjIFmXhwM\nH3zl+KhFg+wf9nxVHFFBeSgLGrmPs4T2DdMS1FCYXjP/HQtcwTytqMlCoe32\nBAuNmCbX00rh90xGGR2T8yZuZ1vIAJivUi4bKUngVjt1bLdpZfThTZth6Q+5\n5h3G5cJtruJBThHPceH/rYU4AHOIuFhIZalAG4/0T5UlrfNb0+HWFrwv749s\nXelSTYgm0NPPquA39qajHTEotR4VyJ04btdmMQ36a4CRGkTK31F7Kr1l2LIL\npbaG3xWWg83ZoUeu8EyFRW8StgGb62n1+GYDScC7q5BZw/ndYKD7ABw+lyUz\nm7e8\r\n=a6uL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDiQNK5XI36UavwUeb92VfOHnsaG1t5DxkieVC61qxUDAiEA/aExKIuwD6CTMLi2xdft6/aEdgYmDhRsbqaypQ1uh0A="}]},"maintainers":[{"name":"dethariel","email":"dethariel@gmail.com"}],"_npmUser":{"name":"dethariel","email":"dethariel@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ng-recaptcha_6.0.1_1599889945779_0.4632971533236889"},"_hasShrinkwrap":false},"6.0.2":{"name":"ng-recaptcha","version":"6.0.2","description":"Angular component for Google reCAPTCHA","main":"bundles/ng-recaptcha.umd.js","typings":"ng-recaptcha.d.ts","repository":{"type":"git","url":"git+https://github.com/DethAriel/ng-recaptcha.git"},"keywords":["angular","recaptcha","angular-recaptcha","ng-recaptcha"],"author":{"name":"Ruslan Arkhipau","email":"dethariel@gmail.com"},"license":"MIT","optionalDependencies":{"@types/grecaptcha":"^2.0.33"},"dependencies":{"tslib":"^1.9.0 || ^2.0.0","@types/grecaptcha":"^2.0.33"},"peerDependencies":{"@angular/core":"^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0"},"devDependencies":{"@angular/common":"^6.0.0","@angular/compiler":"^6.0.0","@angular/compiler-cli":"^6.0.0","@angular/core":"^6.0.0","@angular/forms":"^6.0.0","@angular/platform-browser":"^6.0.0","@types/core-js":"^0.9.39","angular-precommit":"^1.0.3","codelyzer":"^4.3.0","conventional-changelog-cli":"^2.1.0","conventional-github-releaser":"^3.1.5","del-cli":"^0.2.1","gh-pages":"^0.12.0","husky":"^0.13.3","ng-packagr":"^5.7.0","npm-run-all":"^4.1.2","rxjs":"^6.1.0","tslint":"~5.7.0","typescript":"~2.7.2","zone.js":"^0.8.26"},"homepage":"https://github.com/DethAriel/ng-recaptcha#readme","module":"fesm5/ng-recaptcha.js","es2015":"fesm2015/ng-recaptcha.js","esm5":"esm5/ng-recaptcha.js","esm2015":"esm2015/ng-recaptcha.js","fesm5":"fesm5/ng-recaptcha.js","fesm2015":"fesm2015/ng-recaptcha.js","metadata":"ng-recaptcha.metadata.json","sideEffects":false,"bugs":{"url":"https://github.com/DethAriel/ng-recaptcha/issues"},"_id":"ng-recaptcha@6.0.2","_nodeVersion":"12.17.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-m5nxRTugID+N7/3pMbpAXuwid5Q64DZobkTZyA+Zci5h6ynU+MH58aSmbZoG0J07108/F8Oy2RQDklcxw1u32A==","shasum":"03beb2bf906fc42aff2df41ae84ae220e20d48fd","tarball":"https://registry.npmjs.org/ng-recaptcha/-/ng-recaptcha-6.0.2.tgz","fileCount":52,"unpackedSize":399064,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfXw17CRA9TVsSAnZWagAAfUMQAIwNAt7mjWjvhTea1Kv+\nHrn42NpV7+dOAnaSMAp7vM81vz7W5wa+eOdyDuDInlWgKGAs8DCOcZg8O+MB\npegLRCMq7sDdROjwlC2kXmwtf+esG7lIauBGX0T/hgsUPhua6CvPzPkpEIRU\nOw+5BcUywaoBdtEiTXkDKW5S1C3X/s3goqYoJt0PzW7q+xGXzLTa+Oz8TLdw\njgQJB7+HPl8XHnZFWHzRkgE71moLXipFKxG1cg+n8K/sfb3iLHiYvFm1RdQy\naM6MN7XEVAdBVcbFAPrVbX0gSmD50tDRw4oWSFOr/fUiQ/X8pQFiIHyumPwu\njF9SiqAVE1A00OKML8/FvDyVblqBi89+L5gHp1y7iNrnBiPlpMNmziRGLsgk\nMN4py2Zgdf81tOhN+ub4kLV2t1oyrBeO8a8y8HaEAWZ5JOo8nHOqOaDWXkW7\ndJhS6mUwfwp25xjixhhU4x7VHYE9zXFNc5ux6jh1R2QcKnS+oScQWh9zHCXE\nYJM9ijiVbeCireHJfG+ycRpF6D+HRDLFxJY5cpug4vBn6wEd/lpjlFSLJsvx\niYOuGRQe2F73bQDRz7Vi/eVF7oUH9KlHEaFqZU2S72keyx2QliS/Kb1AD9Yi\nST+q5Y22x6cS25wMzCRj+u0+WP4Zk9KXmpV/fVTjqikkFWCtHM1ikPTCM8zN\nuXVo\r\n=ugPc\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCuMrDwHjkDCNVY5+BeSeDwC3kZGKL1Uc0rRQJ7X+OQOgIhAKzZERNjobbpwo6e85lxqPuglTC6P74jCzuWLQGi7MSV"}]},"maintainers":[{"name":"dethariel","email":"dethariel@gmail.com"}],"_npmUser":{"name":"dethariel","email":"dethariel@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ng-recaptcha_6.0.2_1600064890583_0.26341287467272667"},"_hasShrinkwrap":false},"6.1.0":{"name":"ng-recaptcha","version":"6.1.0","description":"Angular component for Google reCAPTCHA","main":"bundles/ng-recaptcha.umd.js","typings":"ng-recaptcha.d.ts","repository":{"type":"git","url":"git+https://github.com/DethAriel/ng-recaptcha.git"},"keywords":["angular","recaptcha","angular-recaptcha","ng-recaptcha"],"author":{"name":"Ruslan Arkhipau","email":"dethariel@gmail.com"},"license":"MIT","optionalDependencies":{"@types/grecaptcha":"^2.0.33"},"dependencies":{"tslib":"^1.9.0 || ^2.0.0","@types/grecaptcha":"^2.0.33"},"peerDependencies":{"@angular/core":"^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0"},"devDependencies":{"@angular/common":"^6.0.0","@angular/compiler":"^6.0.0","@angular/compiler-cli":"^6.0.0","@angular/core":"^6.0.0","@angular/forms":"^6.0.0","@angular/platform-browser":"^6.0.0","@types/core-js":"^0.9.39","angular-precommit":"^1.0.3","codelyzer":"^4.3.0","conventional-changelog-cli":"^2.1.0","conventional-github-releaser":"^3.1.5","del-cli":"^0.2.1","gh-pages":"^0.12.0","husky":"^0.13.3","ng-packagr":"^5.7.0","npm-run-all":"^4.1.2","rxjs":"^6.1.0","tslint":"~5.7.0","typescript":"~2.7.2","zone.js":"^0.8.26"},"homepage":"https://github.com/DethAriel/ng-recaptcha#readme","module":"fesm5/ng-recaptcha.js","es2015":"fesm2015/ng-recaptcha.js","esm5":"esm5/ng-recaptcha.js","esm2015":"esm2015/ng-recaptcha.js","fesm5":"fesm5/ng-recaptcha.js","fesm2015":"fesm2015/ng-recaptcha.js","metadata":"ng-recaptcha.metadata.json","sideEffects":false,"bugs":{"url":"https://github.com/DethAriel/ng-recaptcha/issues"},"_id":"ng-recaptcha@6.1.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-qAIHKqvqxKzDy9gcVgJuCp7C/i0EuXLjXPcLL/sLo5wp9QbKLnc4+mhqbJ3K3DIWlQjtp91a7of+iSaSftERUQ==","shasum":"035eda6974191dd44a406a00d42addc135d7c6d0","tarball":"https://registry.npmjs.org/ng-recaptcha/-/ng-recaptcha-6.1.0.tgz","fileCount":52,"unpackedSize":416354,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfxgOyCRA9TVsSAnZWagAAdkoP/iGeQppjrMUIb1t1nJiX\nAv7SKabbmF/0I0WXKbJH8WVWuO7LRu01pOscdx/5eMpVhDM7JMohMgw8QiTz\njQCSqa6ejTmWlnjA59KmkxIpMXv3w2oHSswp9Qglm4Cddx3TCQuAUZYGd53i\nNs6AlvQdvya5ODhyldrvcuKFnQt/pLqJ6ycV/ORa9ZJiXcFn9p2xOc34lmaf\ncgwcPz/q+tb3ncuj5n4PSv0LIwLbOovLVuYuY904IP/WmQMM5rBz9lmbVenS\n6CTIBRsNea5HZ97OWNmiDjvVQOizardWJUBVmhp2scTgf3Qa8+Ho1VnxdzjE\n9LrY7t4LM3W6OOPH+TekGY5xJy5YIg6uMUKqKWUeyC7lwZB4eYH1OITVWqqC\nOBk5u4DALs42UrGKp3FVnD1KY5lsbR9RckYk+p0TuCyPqqJf/QQyF+2B1yKQ\nJ0qyCe8R3E7FyMB/Bn/iQiPOh9cRAgTiGt+KuDaL4eEJ1v3UiQ5B/9wTUsFm\nAk/DArt1WXzerIx1ZLM9avgZ167FTZN+5P/e1UDivxTpb6lTVIhTHZkeWjjx\nmNDb75L0abaNq0X+9BBYQgWczqwdlabfDvRmAuV1yKiAL50ErdEHtbCWhDB0\nkU/Gxg5ACCkExRVTRrUwgzmKbHuidtyQMLvcGOrsVLD8UNU246UBWUudCGyj\nmaVP\r\n=+G+E\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF+299PEpsvF0ypfIIXAz1hYY/2EvJXJ4j/70skB+DFOAiBDvfz/LE+3bpg1ygag7vE+KCJSOsKkRbWXXQxNE43GSQ=="}]},"_npmUser":{"name":"dethariel","email":"dethariel@gmail.com"},"directories":{},"maintainers":[{"name":"dethariel","email":"dethariel@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ng-recaptcha_6.1.0_1606812594445_0.16496977408538016"},"_hasShrinkwrap":false},"7.0.0":{"name":"ng-recaptcha","version":"7.0.0","description":"Angular component for Google reCAPTCHA","lint-staged":{"**/*":"prettier --write --ignore-unknown"},"main":"bundles/ng-recaptcha.umd.js","typings":"ng-recaptcha.d.ts","repository":{"type":"git","url":"git+https://github.com/DethAriel/ng-recaptcha.git"},"keywords":["angular","recaptcha","angular-recaptcha","ng-recaptcha"],"author":{"name":"Ruslan Arkhipau","email":"dethariel@gmail.com"},"license":"MIT","dependencies":{"@types/grecaptcha":"^3.0.1","tslib":"^2.0.0"},"peerDependencies":{"@angular/core":"^11.0.0"},"homepage":"https://github.com/DethAriel/ng-recaptcha#readme","module":"fesm2015/ng-recaptcha.js","es2015":"fesm2015/ng-recaptcha.js","esm2015":"esm2015/ng-recaptcha.js","fesm2015":"fesm2015/ng-recaptcha.js","metadata":"ng-recaptcha.metadata.json","sideEffects":false,"bugs":{"url":"https://github.com/DethAriel/ng-recaptcha/issues"},"_id":"ng-recaptcha@7.0.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-POw/Dhziu+MOww3chZ+dgyIKjFm7tA71xqdBl9y0ruS4l0TmfTwRiEkmPAYWuDvXAAM8S9NtVYe6RrejeWLsSA==","shasum":"c12ee29bf5bbcf366f7c7d6832519cbce8ab1f3f","tarball":"https://registry.npmjs.org/ng-recaptcha/-/ng-recaptcha-7.0.0.tgz","fileCount":37,"unpackedSize":289247,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf4nOsCRA9TVsSAnZWagAAntkQAJGXlKFhDO9uijc+BW31\n5rKNpBlD/ZBeexptfBu5gCs/+wWmA6SPw4GTIeicPOYPlEBzATCobKn2jJHm\nYeYCX3EY0mG4sgx0gZW/ezW+DCRvWRgstZj7Nv83lsNnp10HsloZCKoCdQNU\niM31BXO9N26/TKJhRT4YokZAmIrulL/fd8XsMELvR2SygxA5mBj4AUhI8+ZD\n1yF/57EQWw+oCPyIOMm/sXbBmXBTecNVTKDt49HMzo4n+fQ887oTVX+C+sod\nVBtxDRmQocuyNRZpJtFWT08OMcg6hi6gYpgBVXREo7kekbZzUweW1pP0f0fx\nfma73AUks3hg4/nAxVzTbPcdb4IVaor72LmTb3n0AtjShbsSTfv3T4PsYS90\nQsqQf2JAZioNlI1cUymb9HmoCdiuAtDyamA/NfW4b8QbhhbehRXgj054hOGp\nuHPVIQuEiGzgtZc5MqVkkctsr6cLiO1QF2H6QxWIG84AJznaTh7qQIIqNUty\nVAjlRdaRIDef+oYHQVQohV3zZgo78dF5hZ62t5If7N3WH/Rh7TecJy9sHfMl\nytzct7jYaarmWr9k0syaEeYqPU+EwRUxbNXixUwv/JSn94aKMK5hr722Ft58\nqdk0MB91JBJhmI+VD1xTvWEu1Z+qfcRaBbyACVHQngRAe+S2ZfctR4VsXFbf\nwQSA\r\n=Qfyz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDeT9o2kejFC9t1/21zWzYD0+6GCRVgl8qnoQ6STjGcIQIgXsgHg2yfx3NTkKb9YKO7878vyYckEWwIhQER+LJx+L0="}]},"_npmUser":{"name":"dethariel","email":"dethariel@gmail.com"},"directories":{},"maintainers":[{"name":"dethariel","email":"dethariel@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ng-recaptcha_7.0.0_1608676268251_0.8254388894132796"},"_hasShrinkwrap":false},"7.0.1":{"name":"ng-recaptcha","version":"7.0.1","description":"Angular component for Google reCAPTCHA","lint-staged":{"**/*":"prettier --write --ignore-unknown"},"main":"bundles/ng-recaptcha.umd.js","typings":"ng-recaptcha.d.ts","repository":{"type":"git","url":"git+https://github.com/DethAriel/ng-recaptcha.git"},"keywords":["angular","recaptcha","angular-recaptcha","ng-recaptcha"],"author":{"name":"Ruslan Arkhipau","email":"dethariel@gmail.com"},"license":"MIT","dependencies":{"@types/grecaptcha":"^3.0.1","tslib":"^2.0.0"},"peerDependencies":{"@angular/core":"^11.0.0"},"homepage":"https://github.com/DethAriel/ng-recaptcha#readme","module":"fesm2015/ng-recaptcha.js","es2015":"fesm2015/ng-recaptcha.js","esm2015":"esm2015/ng-recaptcha.js","fesm2015":"fesm2015/ng-recaptcha.js","metadata":"ng-recaptcha.metadata.json","sideEffects":false,"bugs":{"url":"https://github.com/DethAriel/ng-recaptcha/issues"},"_id":"ng-recaptcha@7.0.1","_nodeVersion":"12.14.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-zlqglxmsc5YPXRz9J4h8sYeTWfdGTDHPQs7sR0DgCDqq4fDVPp8HFpm4t3PZsfyt8KcRz+jajs3hlMOz+xIqRQ==","shasum":"22a618c8de316a4f38ca107d39cc2d4a051620a2","tarball":"https://registry.npmjs.org/ng-recaptcha/-/ng-recaptcha-7.0.1.tgz","fileCount":37,"unpackedSize":289964,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf95qFCRA9TVsSAnZWagAAykoP/2Vfp8tEF+jjw9qxL403\nDGQ6A2y2/KSDyPfsDj7JexCxZpIOCbGOuRUYuX9WtVciNGGk5AjxoMIqLFcD\nHrGn6uSIax88IJfkWaWuAcRgYtU6jOGO/bYFcuMsOFOfrZDyChi7+lBIbgvF\nEBMivQMuuG2/CTXIgB1p25OcvhOrQ59tOJhkscZf4g8mihVoS6xqIRd7t72t\nk5JrcbN3yPcZ9LzqBkRaU5nTR74uuGCFyTfhIFuaE5QXPeEp6H3RCAY1ZwGw\nxXvX/Jn7VuJP6muustjUm9HTw7sRjrv1iFgqJAojC+o2m4zj+NhV3K9wKu/Q\nkhDAgewRrNURke2MB46frPyCMBVhCyBCnfGCb0IqFgA0nHNOsnmQebtQQHWG\n4EvHVA9u92DxE+uZ0yHSUWLyfVFtFLfcW4V/LVkComAjjUiHs/U0br80jaPo\nEXFACF8KkhLoyPv8DYEl7LqwdJbGO8F7Tp9uy2xkrJ7CE80PO75VHud3DpXl\nR0kl1Gq9JvivjvhnOvOkAfaExCYgfcacc4oEEasUWAyOFpRm6Hnxev2FCpkL\nkO5fHp+BZcxxqTEKFtlUk8OI3rLrcwSh/qr4twvrG0kzMjZBtQP3498lA8jj\nDG3JjbhCR+MYjv2RLdsUfGK5oUrvKPbBuA+/Cmdvjl4wiNhNsgowP/R7ctw3\nyIeS\r\n=rJKr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCCHrn13hrf4Dfv2e1zbRE6iOGGirFgzB5QU4t0+DcxogIgDX+qgdqq7SnR+0Ax0S9GI4XqbntJ4u3wSQeDUYAW2ok="}]},"_npmUser":{"name":"dethariel","email":"dethariel@gmail.com"},"directories":{},"maintainers":[{"name":"dethariel","email":"dethariel@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ng-recaptcha_7.0.1_1610062468691_0.09608249974124816"},"_hasShrinkwrap":false},"8.0.0":{"name":"ng-recaptcha","description":"Angular component for Google reCAPTCHA","version":"8.0.0","author":{"name":"Ruslan Arkhipau","email":"dethariel@gmail.com"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/DethAriel/ng-recaptcha.git"},"homepage":"https://github.com/DethAriel/ng-recaptcha#readme","keywords":["angular","recaptcha","angular-recaptcha","ng-recaptcha"],"peerDependencies":{"@angular/core":"^12.0.0"},"dependencies":{"@types/grecaptcha":"^3.0.1","tslib":"^2.0.0"},"main":"bundles/ng-recaptcha.umd.js","module":"fesm2015/ng-recaptcha.js","es2015":"fesm2015/ng-recaptcha.js","esm2015":"esm2015/ng-recaptcha.js","fesm2015":"fesm2015/ng-recaptcha.js","typings":"ng-recaptcha.d.ts","metadata":"ng-recaptcha.metadata.json","sideEffects":false,"bugs":{"url":"https://github.com/DethAriel/ng-recaptcha/issues"},"_id":"ng-recaptcha@8.0.0","_nodeVersion":"12.14.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-oLrKLKdOYFPzYKedkBKQvi62z796O1EAfkfX/Mt95k6musyxVTO0w9qsQVXm9Cq4CDh/AC8Uv5Fzj4EHY4LhSQ==","shasum":"c9263ee371d2a395038abb11cc68f6dc3e18d340","tarball":"https://registry.npmjs.org/ng-recaptcha/-/ng-recaptcha-8.0.0.tgz","fileCount":35,"unpackedSize":247949,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgnvroCRA9TVsSAnZWagAAX2EP/1/2KmAeach+MnQgaIIc\nkxPAMMC628gKUtsYAZ3jSGwp6CJAAHwE3jO2NI5LFR9lpN05t4KuSQaG7tsh\nuPBIdX3HGoirvm4uHT9ML4ewgwziTXxEXz8G/cH3DasF2oiT2WZvtHJAR51c\nFlpsNTJqzMc+w58V8NtjD80rx9Svsn2gr4dnms9v2AuiXPRvm7Xz9s7z2DzY\nJgAijcHqy+hC98Bs2zcrW20xrRxGUSYnvNq/KfrCHKiz6MSD8EWvsBD4yFpv\nj0bCAvD+ISGckjqqBB9VRkD9RC4uCMGfRZ0YOAKzhrKXp2YfzXqV5+mBIWLW\nDRXTDluDT3EAnm6nwJUbKxzEULgP/3CoAGnpdRPYBR3CFF6+M2MMbCyAAUxg\n5TLZkqCr6R5hGv7CEKZsU2W5/JASH5NKuiOhDFAxiWxflIgngDnugFsVX74e\nVlP3PFwM8DjIBTOUwXpLvGhtFAC1UD6m12cFbucC2m0zUirJFOAzD6zlruqj\nj5PH0o/oXrkwfHMlQA+g0NAoyaQ7fscpWsXawLrAfF+KEEMR/gtooWhLAp4z\nJ7YEuAqm/5Y3wZ0XSW7JPpmgPMrU5xJGA4SDU0O629IXKTloKFVARGu9J+bF\npO0aqaxhoh9AIX07D95G9VqyTGNPTPkU87LQ1AWPr0hbqEmjryXeDISVfgYA\nlYQ/\r\n=r1Sw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQChGD/aZwN09TBGh9st0wfiGjrBCRm370/DIyKcdSvORgIgG9v6GRYZiw9yxcypEEbjyIS+CSiAEhwV+37yOADzx3M="}]},"_npmUser":{"name":"dethariel","email":"dethariel@gmail.com"},"directories":{},"maintainers":[{"name":"dethariel","email":"dethariel@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ng-recaptcha_8.0.0_1621031655688_0.4015414893228211"},"_hasShrinkwrap":false},"8.0.1":{"name":"ng-recaptcha","description":"Angular component for Google reCAPTCHA","version":"8.0.1","author":{"name":"Ruslan Arkhipau","email":"dethariel@gmail.com"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/DethAriel/ng-recaptcha.git"},"homepage":"https://github.com/DethAriel/ng-recaptcha#readme","keywords":["angular","recaptcha","angular-recaptcha","ng-recaptcha"],"peerDependencies":{"@angular/core":"^12.0.0"},"dependencies":{"@types/grecaptcha":"^3.0.1","tslib":"^2.0.0"},"main":"bundles/ng-recaptcha.umd.js","module":"fesm2015/ng-recaptcha.js","es2015":"fesm2015/ng-recaptcha.js","esm2015":"esm2015/ng-recaptcha.js","fesm2015":"fesm2015/ng-recaptcha.js","typings":"ng-recaptcha.d.ts","metadata":"ng-recaptcha.metadata.json","sideEffects":false,"bugs":{"url":"https://github.com/DethAriel/ng-recaptcha/issues"},"_id":"ng-recaptcha@8.0.1","_nodeVersion":"12.14.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-Urc/0iGof9gqdXJ3HydpDrDlS3qLnjYLHqabCexpci8H3g6fYPeVWCKa2/haDHPUiyGc/+SXUaf7qTHlzJjObg==","shasum":"4068eabf34caffbf9e1aa6db1e5310f380705909","tarball":"https://registry.npmjs.org/ng-recaptcha/-/ng-recaptcha-8.0.1.tgz","fileCount":35,"unpackedSize":262764,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg+eMZCRA9TVsSAnZWagAA56YP/jlfHEchPQMVMcVxp5cX\nN9NclEFnrBjbkE+EV/UbMDopqYeawNtPMnq0SyxQS71jwNCFihaQwy4pJWSn\n2EZMVCDCLoT4jmDD4XXGpNP0KroYnYPYnlwke65yNLwtmSHuwmv0HKb5rfC8\nRw9aa57N3P0IPg8RKl54nbqj4VV+aFEGQGT/A/jVIR6ESLXwHUe+udbQKbTf\n/re5NhulVHke2ZL1U7nQrPs226zxwagK2OT/IWsK1o42vGBvS3YE/hjOylez\nK5qThesM8u16U+kdeTxaathpa0az49+tOsGJl/aLnJpVL6KE4mjyO+QKFNbO\nnkulvhDDqFGpUss/LlCGFO6SwMr389YvwKll335dAtQu662MLkZRQMeL5ca+\nPmDzGu9e/rv6SGbK20G35S608KuUBE1iMaRqBvzAhllB/baQ+Pg2qrEY/Udw\nXihMQSRG541e4vFe+ApyliPfNwH3UYzf7znBxtElfAgTVGR84q08ts6YGTH7\nVcMTSxVcK1md83zHfgUkzbY7pHTSHjNhxOsXNOim7OmTdAzAFmaTqtRo38mA\n+aW6aDqm7LLxZdSGdIstblvryWlRI4c0yDaRaPrEvBkD6UKtMCtvlnqYMk3p\nM7KYX1KSgQyNqMRfLrjct98yswxbVXHfXoBpnimBzi70IAY+Oqq+v1GrHMpi\nF0y7\r\n=e3G7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCWkEOxevYK2Q4hbwZG0tULzRraC0Q9TTVoNQV+X57LMgIhANWo6XtcQdkXYAIf+PQx0+ddjlzG8+IDKsJ+26wbbNC4"}]},"_npmUser":{"name":"dethariel","email":"dethariel@gmail.com"},"directories":{},"maintainers":[{"name":"dethariel","email":"dethariel@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ng-recaptcha_8.0.1_1626989336829_0.666194906158581"},"_hasShrinkwrap":false},"7.0.2":{"name":"ng-recaptcha","version":"7.0.2","description":"Angular component for Google reCAPTCHA","lint-staged":{"**/*":"prettier --write --ignore-unknown"},"main":"bundles/ng-recaptcha.umd.js","typings":"ng-recaptcha.d.ts","repository":{"type":"git","url":"git+https://github.com/DethAriel/ng-recaptcha.git"},"keywords":["angular","recaptcha","angular-recaptcha","ng-recaptcha"],"author":{"name":"Ruslan Arkhipau","email":"dethariel@gmail.com"},"license":"MIT","dependencies":{"@types/grecaptcha":"^3.0.1","tslib":"^2.0.0"},"peerDependencies":{"@angular/core":"^11.0.0"},"homepage":"https://github.com/DethAriel/ng-recaptcha#readme","module":"fesm2015/ng-recaptcha.js","es2015":"fesm2015/ng-recaptcha.js","esm2015":"esm2015/ng-recaptcha.js","fesm2015":"fesm2015/ng-recaptcha.js","metadata":"ng-recaptcha.metadata.json","sideEffects":false,"bugs":{"url":"https://github.com/DethAriel/ng-recaptcha/issues"},"_id":"ng-recaptcha@7.0.2","_nodeVersion":"12.14.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-OP7/4LgL/F4atAH3qKpWaWDSBkqlf0/hEHhRsjFFsVwIfQcnxlyd4EN6Eaf71BKB5JctFGfmwB6eaZ7MUeCxvQ==","shasum":"60d98976a1d830feede9bac8b7b5f9270d6db98b","tarball":"https://registry.npmjs.org/ng-recaptcha/-/ng-recaptcha-7.0.2.tgz","fileCount":37,"unpackedSize":305946,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg+eVNCRA9TVsSAnZWagAApRQP/jAcyk8zSxKLzykMETyf\n2Gik7AsXxup6Nis4gxh7Cn9fgMjcs+5yk4mIBezZJfwW8+1wwniY2VuemqhH\nBu03isUvSj9lkLskKim2OUkdw+Vq5Vuh1p7MrJ7rQKkO++VXYhykZA6wCJ7d\ni7obgUgkV9SGUuJD3cP4UVrUdTvbaPEipJg6nP/9WaO47SYIAXfHOOjXMKCZ\nPxfBkPo1jXbL2rif5APpnbN41kaTaFcsMqF0bJ+h4MADQh/U/uWHyF231L+G\nyCKVfMN3Mdmo5edMdyrVLcH4q8ELTz0lanNGhmX0KUyGba991T5YtWw+avvu\nXWljzacITviA1CYILQ6AsnylRlwm3J03CdkBDYU/xXAhbvEZCczvjjwoiOzH\nb9dQ76sVdUoWhEXYCh/iROY+1Mjo+8WCUgL6Z/R9Iguf189uGA0CoFFavn/j\nd3xtDb4W9BagGWW9vgf93rlcDz3oZ65ca81A9w8VsO4qOS5+jEkGZlXti1k4\nWC7tnJIcENcYBmS4zvFCdQNoA1EjkNkBjP92JTGRHPPlKrlk08VEXqQv0hQU\nMEOSQIP9gCbgLKDDCKUyu4syxH0Vb8wZX4iHA5DhTscMVIJhZRSpfghiS8x0\n+C092xn7O34soklE6tc6H3guKY3u1M2ILDQdT5cmOECT176BiV+dcTmb3tUt\ntHeF\r\n=DJCf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCBntJwbvriEV0N7uZLS95/5iv7so4jDWNAZf68k/oN/gIhALwpD/DQ3iTmCeWEcAqo6VjF2u9RSk1jqpe1/QzmZ/GD"}]},"_npmUser":{"name":"dethariel","email":"dethariel@gmail.com"},"directories":{},"maintainers":[{"name":"dethariel","email":"dethariel@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ng-recaptcha_7.0.2_1626989901575_0.3817376281490692"},"_hasShrinkwrap":false},"9.0.0":{"name":"ng-recaptcha","description":"Angular component for Google reCAPTCHA","version":"9.0.0","author":{"name":"Ruslan Arkhipau","email":"dethariel@gmail.com"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/DethAriel/ng-recaptcha.git"},"homepage":"https://github.com/DethAriel/ng-recaptcha#readme","keywords":["angular","recaptcha","angular-recaptcha","ng-recaptcha"],"peerDependencies":{"@angular/core":"^13.0.0"},"dependencies":{"@types/grecaptcha":"^3.0.3","tslib":"^2.2.0"},"module":"fesm2015/ng-recaptcha.mjs","es2020":"fesm2020/ng-recaptcha.mjs","esm2020":"esm2020/ng-recaptcha.mjs","fesm2020":"fesm2020/ng-recaptcha.mjs","fesm2015":"fesm2015/ng-recaptcha.mjs","typings":"ng-recaptcha.d.ts","exports":{"./package.json":{"default":"./package.json"},".":{"types":"./ng-recaptcha.d.ts","esm2020":"./esm2020/ng-recaptcha.mjs","es2020":"./fesm2020/ng-recaptcha.mjs","es2015":"./fesm2015/ng-recaptcha.mjs","node":"./fesm2015/ng-recaptcha.mjs","default":"./fesm2020/ng-recaptcha.mjs"}},"sideEffects":false,"bugs":{"url":"https://github.com/DethAriel/ng-recaptcha/issues"},"_id":"ng-recaptcha@9.0.0","_nodeVersion":"14.17.0","_npmVersion":"6.14.13","dist":{"integrity":"sha512-39YfJh1+p6gvfsGUhC8cmjhFZ1TtQ1OJES5SUgnanPL2aQuwrSX4WyTFh2liFn1dQqtGUVd5O4EhbcexB7AECQ==","shasum":"11b88f820cfca366d363fffd0f451490f2db2b04","tarball":"https://registry.npmjs.org/ng-recaptcha/-/ng-recaptcha-9.0.0.tgz","fileCount":34,"unpackedSize":230274,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhkwwyCRA9TVsSAnZWagAAuQUQAKDkfVNWEOo0Wr9SBsba\nwpjKrJSoRSLQADeH34+MQUyAxmWdRLV16VJM7lQTrIr/agBLnwYfXpG07HHE\noCJdGQWoFzWrE0tBZFPL6oWYAJx3++N437gqx1My5gze1Lj0MHPGcPqCph/m\nN1YYhm/yUfk4AJPG/Aji1FVlfhiYcLU8KQxTqZ0gi9NYMuzQzQDNU3rA7FsN\n+1w/WQ/oPhFs1/PrgR6C3NNJMQkO78kGevIOV9gxGzAkt/rIAw3SQ09FHBRC\nVkGvHyQsIgU5l07nZ88wp3Dyd2y/ws/By8x97JyYHoSw+EkrNWHqrxTrimg9\ni847UtLWTyX+MVxsY0Gf0Qa72mEkRRndvpPeDS5JvF5ByfydqF5v891Cl4Hi\n484lHMsYOCaNxLnLiSOJpgHCl/e4kY7uvumM8/eN3QSvcghpRdNq4L1GyI7E\nNVdSsNLsw1HAnlnlV3/lWAFwCBhA15TOPsy1LZ+qtWVAeD4M0L2RAVuOQIOz\n4c8d0plvc+8rxu0sh8+IjYYpdKUViKNGNHD2OjntnL0I+TX4Ul8Kx+7l59u2\nL07j6saBn3HsRpngW2nHLJbgLv3thWrRzvZXt/Ihb2P9zvBNuq8j13kdsi+D\nHfYC0KLnv2ueD3HDqsk8f5VqsRmABR+aGqvBU5EAqhFUtibbIjsz7L1MCk1R\n5X6o\r\n=teUw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIA0E4+J/hf3ArLhVRAr1xqCleqNSdl6i/GaaH5pA13YhAiEAr+z7wnrQ8UsFstqvQMBnwIGaanA85ewAqjsb2rqjhxk="}]},"_npmUser":{"name":"dethariel","email":"dethariel@gmail.com"},"directories":{},"maintainers":[{"name":"dethariel","email":"dethariel@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ng-recaptcha_9.0.0_1637026866043_0.9544330625277206"},"_hasShrinkwrap":false},"10.0.0":{"name":"ng-recaptcha","description":"Angular component for Google reCAPTCHA","version":"10.0.0","author":{"name":"Ruslan Arkhipau","email":"dethariel@gmail.com"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/DethAriel/ng-recaptcha.git"},"homepage":"https://github.com/DethAriel/ng-recaptcha#readme","keywords":["angular","recaptcha","angular-recaptcha","ng-recaptcha"],"peerDependencies":{"@angular/core":"^14.0.0"},"dependencies":{"@types/grecaptcha":"^3.0.3","tslib":"^2.2.0"},"module":"fesm2015/ng-recaptcha.mjs","es2020":"fesm2020/ng-recaptcha.mjs","esm2020":"esm2020/ng-recaptcha.mjs","fesm2020":"fesm2020/ng-recaptcha.mjs","fesm2015":"fesm2015/ng-recaptcha.mjs","typings":"index.d.ts","exports":{"./package.json":{"default":"./package.json"},".":{"types":"./index.d.ts","esm2020":"./esm2020/ng-recaptcha.mjs","es2020":"./fesm2020/ng-recaptcha.mjs","es2015":"./fesm2015/ng-recaptcha.mjs","node":"./fesm2015/ng-recaptcha.mjs","default":"./fesm2020/ng-recaptcha.mjs"}},"sideEffects":false,"bugs":{"url":"https://github.com/DethAriel/ng-recaptcha/issues"},"_id":"ng-recaptcha@10.0.0","_nodeVersion":"14.19.3","_npmVersion":"6.14.17","dist":{"integrity":"sha512-NpaQESxZXMY3blmp+tvjQzBRo3MkO+YBd0aZ2XAdPKsWRjvfpmqdvwXqXwnljIf9xwtoxe4b8oEKfiQ0LxoWZg==","shasum":"0d1d507a98af352ffbd54503a95b2b851c32ae1f","tarball":"https://registry.npmjs.org/ng-recaptcha/-/ng-recaptcha-10.0.0.tgz","fileCount":33,"unpackedSize":235555,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHgpui7gD+4c/ZSoMxJ70LJ6sYKDINb6wdP+4xlDGzseAiBNJRCGFyXRNGkvAMQuMzpv6SIwLXF6xL5+0eE1dpdw5A=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJitouVACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoD/g//crcC3CAtB1Ix1FBjuahuiUAjqfqwSFGpniU7lLxToukaRmjE\r\nEuPcT1K8c0cnEGMzp9R4snDw5PmzCLMXMmOi6d0n0T5Yx/7OLX05XSHUAwmG\r\nBFDHi/0uRHUc8L682QvnElEaR9U2dDbY/Cd2/zopMvzPXwMrmuZlABJy7yGs\r\nKvXmIj8UDi0/rvhTulIpctxrfa2CtKtfyoz1WxZ8kY3zm4E9I9GxXHTCbsZK\r\ndv5r/Gj1BkfXva8ueCwhT6lbtjUFJuouf1SM7RpmN+AhMLpYCFJCda8uAqKw\r\nskDZTEUhlweHWT0wiRXP1G5NRYFFs1Gwi1/jBBrvn7zE5aCKJFoW29L4ncZB\r\n0CrylRCXEzw6JbziX5ibZ8PxVhdqpR2lxnTgXR8fUpJGK+6tgvYBDQLb9PG7\r\n0n5U/s8XhnmGi7JZ5DIBbL3nJ2Ae7MXT6+GhOCCzr5lykz8SrVOHMn9FlSM5\r\nb+Aob9XOLAPeKuURBhb2OrhvQeWz+5ACcmV7h1Jb4Og4BZJF5krOjvUeLeXm\r\noJ798mFRCVSHNSZbuBiLEu+1S7OCQtoyjkvTDVlZObLN2pB+5WBFbGEitGZW\r\nZBF68CI7SDAU9mY1xuqtGp7+3kbBHlM0aNKs6SbpvSBB793PN6Du4+IoPQq3\r\nqEJDf/9AnsuloX9lQIiznNuAvkLC4dpC2jk=\r\n=K0xZ\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"dethariel","email":"dethariel@gmail.com"},"directories":{},"maintainers":[{"name":"dethariel","email":"dethariel@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ng-recaptcha_10.0.0_1656130453434_0.39398135176772886"},"_hasShrinkwrap":false},"11.0.0":{"name":"ng-recaptcha","description":"Angular component for Google reCAPTCHA","version":"11.0.0","author":{"name":"Ruslan Arkhipau","email":"dethariel@gmail.com"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/DethAriel/ng-recaptcha.git"},"homepage":"https://github.com/DethAriel/ng-recaptcha#readme","keywords":["angular","recaptcha","angular-recaptcha","ng-recaptcha"],"peerDependencies":{"@angular/core":"^15.0.0"},"dependencies":{"@types/grecaptcha":"^3.0.3","tslib":"^2.2.0"},"module":"fesm2015/ng-recaptcha.mjs","es2020":"fesm2020/ng-recaptcha.mjs","esm2020":"esm2020/ng-recaptcha.mjs","fesm2020":"fesm2020/ng-recaptcha.mjs","fesm2015":"fesm2015/ng-recaptcha.mjs","typings":"index.d.ts","exports":{"./package.json":{"default":"./package.json"},".":{"types":"./index.d.ts","esm2020":"./esm2020/ng-recaptcha.mjs","es2020":"./fesm2020/ng-recaptcha.mjs","es2015":"./fesm2015/ng-recaptcha.mjs","node":"./fesm2015/ng-recaptcha.mjs","default":"./fesm2020/ng-recaptcha.mjs"}},"sideEffects":false,"bugs":{"url":"https://github.com/DethAriel/ng-recaptcha/issues"},"_id":"ng-recaptcha@11.0.0","_nodeVersion":"14.19.3","_npmVersion":"6.14.17","dist":{"integrity":"sha512-DS0ESI9ODmAW2ToBU5EuizusAmGcJCmYCKGB5CYWntPQOHDEcCWLxkQ6RJrF2USLtq9vooN5KVV45pNUpmPhNw==","shasum":"858686cd377ec42a47aa9362e230d31dcff3d982","tarball":"https://registry.npmjs.org/ng-recaptcha/-/ng-recaptcha-11.0.0.tgz","fileCount":33,"unpackedSize":239693,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHlC+QQyqvRchCboO6pbYgAx4YLW/QqPxafSU/og69kWAiEAp2xFdqENuK66yO0soQIEuuSp8qYfGrSq9md/uv/KRpo="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjhvbuACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpzXA//VGE4MAg2SUN2Nf0edoCubHlJ1svIGgJdRz61t/4mFkMdbYuR\r\n5coSlGIjzqYtUaYmmBqj1RpcmiY/QopHwrG093cAnJ+rw2yHqzfMW2mjAZZl\r\nJ5VPWSw5t7khVgAVsoxTmoUWce4G6+BTu/a8J5VARmI92VKd39AFBMzPhRC8\r\nSDqaG77RMCr0H6igE916/7lf+T2rR6/4mblxZmgruNZ3KWof6LQWTupGfvXc\r\ns3fF8e+lNugA3C6Uysckuli7FXLl5R573/38sWUltT/LlupZMgVKRI40Jq39\r\nO/aL9biJftcpvKw1k926cvS9EASwKMBN2nsFXAQGrEJboxGacq1LrZIwCuTh\r\niaX6y9czf5PcdJduQtJwz532ungWILbz8D1sKsB8SkbqdY3I4r2WHLi3NQen\r\nLxzyJD0op3MaaKliJN2Pjwl1jMKD2Rh6lK9HgRzuKWbvljgSq0FctL6bxgCm\r\nJOvEgzwHtz8dA4eRFQOu2Df5Qia9VooqIN1aujzOGUiVzgg5ekn51xG6u91F\r\nu6nGsn8TN4WnlFkAdPrKhH9EThqduaodvWmfR1YvcmAxaiEZQ4z59bjP/A64\r\nCnoNcxAx9crsYzSJ00s6eC/r/sRk58X7ESIBrEZAdpa27dlWbRXdCWkC0I+u\r\n30grjkq7kJjRbIyuxL8xB8tOPf0EcoeAbQY=\r\n=QKxj\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"dethariel","email":"dethariel@gmail.com"},"directories":{},"maintainers":[{"name":"dethariel","email":"dethariel@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ng-recaptcha_11.0.0_1669789422391_0.8759548448872758"},"_hasShrinkwrap":false},"12.0.0":{"name":"ng-recaptcha","description":"Angular component for Google reCAPTCHA","version":"12.0.0","author":{"name":"Ruslan Arkhipau","email":"dethariel@gmail.com"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/DethAriel/ng-recaptcha.git"},"homepage":"https://github.com/DethAriel/ng-recaptcha#readme","keywords":["angular","recaptcha","angular-recaptcha","ng-recaptcha"],"peerDependencies":{"@angular/core":"^16.0.0"},"dependencies":{"@types/grecaptcha":"^3.0.3","tslib":"^2.2.0"},"module":"fesm2022/ng-recaptcha.mjs","typings":"index.d.ts","exports":{"./package.json":{"default":"./package.json"},".":{"types":"./index.d.ts","esm2022":"./esm2022/ng-recaptcha.mjs","esm":"./esm2022/ng-recaptcha.mjs","default":"./fesm2022/ng-recaptcha.mjs"}},"sideEffects":false,"gitHead":"4f54b0575578d1d23399ee56757e2d9daee396de","bugs":{"url":"https://github.com/DethAriel/ng-recaptcha/issues"},"_id":"ng-recaptcha@12.0.0","_nodeVersion":"18.16.0","_npmVersion":"9.5.1","dist":{"integrity":"sha512-xp9RI9VDZNuU1jExB3Rwyw2h6REsZjYNddAmFRaOTj+9slXu56Rhu1w2tr1mMTf08/ivCQPBzQi+OTCGfAwp9Q==","shasum":"f5854dc8dc1f69eb1654f0430c67c3d0e96037ff","tarball":"https://registry.npmjs.org/ng-recaptcha/-/ng-recaptcha-12.0.0.tgz","fileCount":30,"unpackedSize":159774,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHOc2Nc4Icm0dobwLOYA6hqg3CngkNTzemyeEIFRuN+GAiEA8d99IpPB3cMO8aw6gEMiSek9PZKeFQx9BAj8Ojr1YGY="}]},"_npmUser":{"name":"dethariel","email":"dethariel@gmail.com"},"directories":{},"maintainers":[{"name":"dethariel","email":"dethariel@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ng-recaptcha_12.0.0_1684893883770_0.01832436272057314"},"_hasShrinkwrap":false},"12.0.1":{"name":"ng-recaptcha","description":"Angular component for Google reCAPTCHA","version":"12.0.1","author":{"name":"Ruslan Arkhipau","email":"dethariel@gmail.com"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/DethAriel/ng-recaptcha.git"},"homepage":"https://github.com/DethAriel/ng-recaptcha#readme","keywords":["angular","recaptcha","angular-recaptcha","ng-recaptcha"],"peerDependencies":{"@angular/core":"^16.0.0"},"dependencies":{"@types/grecaptcha":"^3.0.3","tslib":"^2.2.0"},"module":"fesm2022/ng-recaptcha.mjs","typings":"index.d.ts","exports":{"./package.json":{"default":"./package.json"},".":{"types":"./index.d.ts","esm2022":"./esm2022/ng-recaptcha.mjs","esm":"./esm2022/ng-recaptcha.mjs","default":"./fesm2022/ng-recaptcha.mjs"}},"sideEffects":false,"gitHead":"fdd810bafcc6026f4c5ee1c2473f45946e1bfb62","bugs":{"url":"https://github.com/DethAriel/ng-recaptcha/issues"},"_id":"ng-recaptcha@12.0.1","_nodeVersion":"18.16.0","_npmVersion":"9.5.1","dist":{"integrity":"sha512-EX7IKqEn2SF8a2Enw3ggZVEjBIW2LQ52YiT2cb0/z4InikjlFoXGyM7PVb+jVvZfr5sfrxfRd/OOX29sjtWexA==","shasum":"509d3fe99a3270caeebc8cbe04f979fddbff9f5b","tarball":"https://registry.npmjs.org/ng-recaptcha/-/ng-recaptcha-12.0.1.tgz","fileCount":31,"unpackedSize":183613,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHh7H3P0kRLeMhJ81/nuGqwgXDz1ZdwsQ+78APlFQoiIAiEAyC8NYFAyOeSuqucdqcIP9iqzgN0zT7c4zXjMs2w1w8E="}]},"_npmUser":{"name":"dethariel","email":"dethariel@gmail.com"},"directories":{},"maintainers":[{"name":"dethariel","email":"dethariel@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ng-recaptcha_12.0.1_1684894412679_0.9671959111279635"},"_hasShrinkwrap":false},"12.0.2":{"name":"ng-recaptcha","description":"Angular component for Google reCAPTCHA","version":"12.0.2","author":{"name":"Ruslan Arkhipau","email":"dethariel@gmail.com"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/DethAriel/ng-recaptcha.git"},"homepage":"https://github.com/DethAriel/ng-recaptcha#readme","keywords":["angular","recaptcha","angular-recaptcha","ng-recaptcha"],"peerDependencies":{"@angular/core":"^16.0.0"},"dependencies":{"@types/grecaptcha":"^3.0.3","tslib":"^2.2.0"},"module":"fesm2022/ng-recaptcha.mjs","typings":"index.d.ts","exports":{"./package.json":{"default":"./package.json"},".":{"types":"./index.d.ts","esm2022":"./esm2022/ng-recaptcha.mjs","esm":"./esm2022/ng-recaptcha.mjs","default":"./fesm2022/ng-recaptcha.mjs"}},"sideEffects":false,"gitHead":"4f461bf8b86f98411bafa6a0070ee46152f5f135","bugs":{"url":"https://github.com/DethAriel/ng-recaptcha/issues"},"_id":"ng-recaptcha@12.0.2","_nodeVersion":"18.16.0","_npmVersion":"9.5.1","dist":{"integrity":"sha512-3osY3dFMg6/puxi1+kPRNr/Y/vooOP3SFtFmrFOKbfGVWufpfuCmzmtsqY68QMP4ts0rQvjF+DfkexEXSfhk9Q==","shasum":"03b941da9fc90bbd64354c6fad57f54055e20a76","tarball":"https://registry.npmjs.org/ng-recaptcha/-/ng-recaptcha-12.0.2.tgz","fileCount":31,"unpackedSize":184234,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIF/pOi36ZVgybaXS36Dvg9oCqRlh9edtw7u2+IFaFctQAiEAnSnrcEs4wry4n6DidfsMkkkWNPnC6AYRDYP1T2qPQ/4="}]},"_npmUser":{"name":"dethariel","email":"dethariel@gmail.com"},"directories":{},"maintainers":[{"name":"dethariel","email":"dethariel@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ng-recaptcha_12.0.2_1690829841918_0.13233057286958605"},"_hasShrinkwrap":false},"13.0.0":{"name":"ng-recaptcha","description":"Angular component for Google reCAPTCHA","version":"13.0.0","author":{"name":"Ruslan Arkhipau","email":"dethariel@gmail.com"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/DethAriel/ng-recaptcha.git"},"homepage":"https://github.com/DethAriel/ng-recaptcha#readme","keywords":["angular","recaptcha","angular-recaptcha","ng-recaptcha"],"peerDependencies":{"@angular/core":"^17.0.0"},"dependencies":{"@types/grecaptcha":"^3.0.3","tslib":"^2.2.0"},"module":"fesm2022/ng-recaptcha.mjs","typings":"index.d.ts","exports":{"./package.json":{"default":"./package.json"},".":{"types":"./index.d.ts","esm2022":"./esm2022/ng-recaptcha.mjs","esm":"./esm2022/ng-recaptcha.mjs","default":"./fesm2022/ng-recaptcha.mjs"}},"sideEffects":false,"gitHead":"40fc713782ca4223abd09527f8990f008c839d71","bugs":{"url":"https://github.com/DethAriel/ng-recaptcha/issues"},"_id":"ng-recaptcha@13.0.0","_nodeVersion":"18.16.0","_npmVersion":"9.5.1","dist":{"integrity":"sha512-Oxk65P8trULAn4jQ2GWe9v8nOSZ55Kp1wwOcvtL7FdUivFSQ2LHnb6fBIVU8V1IGnfanrYQ47/j2p/BmbROvpw==","shasum":"7afe3b5d8ad2e924ef6e612408b59d7e055cc79c","tarball":"https://registry.npmjs.org/ng-recaptcha/-/ng-recaptcha-13.0.0.tgz","fileCount":31,"unpackedSize":185640,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIF+4szC/+bG/KgYz9/cUgBf0I/C+7lMc8Ldqnl75Xa7lAiEArC384EX7wmz1ky36lOOptqPpCsfl6KuK8w6IHfZffIw="}]},"_npmUser":{"name":"dethariel","email":"dethariel@gmail.com"},"directories":{},"maintainers":[{"name":"dethariel","email":"dethariel@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ng-recaptcha_13.0.0_1700774101947_0.9713722272111438"},"_hasShrinkwrap":false},"13.1.0":{"name":"ng-recaptcha","description":"Angular component for Google reCAPTCHA","version":"13.1.0","author":{"name":"Ruslan Arkhipau","email":"dethariel@gmail.com"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/DethAriel/ng-recaptcha.git"},"homepage":"https://github.com/DethAriel/ng-recaptcha#readme","keywords":["angular","recaptcha","angular-recaptcha","ng-recaptcha"],"peerDependencies":{"@angular/core":"^17.0.0"},"dependencies":{"@types/grecaptcha":"^3.0.3","tslib":"^2.2.0"},"module":"fesm2022/ng-recaptcha.mjs","typings":"index.d.ts","exports":{"./package.json":{"default":"./package.json"},".":{"types":"./index.d.ts","esm2022":"./esm2022/ng-recaptcha.mjs","esm":"./esm2022/ng-recaptcha.mjs","default":"./fesm2022/ng-recaptcha.mjs"}},"sideEffects":false,"gitHead":"59176ef3e23815309d95c06d599ecd0a6cdc47b5","bugs":{"url":"https://github.com/DethAriel/ng-recaptcha/issues"},"_id":"ng-recaptcha@13.1.0","_nodeVersion":"18.16.0","_npmVersion":"9.5.1","dist":{"integrity":"sha512-xYCC0r2OoE0M/st5DqwKKj3yB7foB8UkgMyHKKNBt5gAYVXh8GdzPX+Grq42Wz6/84WRlSciRx0zJ3MrDpH8Zw==","shasum":"2976a6cf1bd69e4d98904ac0ffa72787d181db17","tarball":"https://registry.npmjs.org/ng-recaptcha/-/ng-recaptcha-13.1.0.tgz","fileCount":31,"unpackedSize":189222,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBI8YheVh9/12Fm2ylwNEzXpE4uiPAUll0E5v9YorLISAiEAu7F3MfgOozo1mj2sSYQNUlcQ8fHrUvuouqw2sWyNCXM="}]},"_npmUser":{"name":"dethariel","email":"dethariel@gmail.com"},"directories":{},"maintainers":[{"name":"dethariel","email":"dethariel@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ng-recaptcha_13.1.0_1700787846881_0.9290744549713652"},"_hasShrinkwrap":false},"13.2.0":{"name":"ng-recaptcha","description":"Angular component for Google reCAPTCHA","version":"13.2.0","author":{"name":"Ruslan Arkhipau","email":"dethariel@gmail.com"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/DethAriel/ng-recaptcha.git"},"homepage":"https://github.com/DethAriel/ng-recaptcha#readme","keywords":["angular","recaptcha","angular-recaptcha","ng-recaptcha"],"peerDependencies":{"@angular/core":"^17.0.0"},"dependencies":{"@types/grecaptcha":"^3.0.7","tslib":"^2.2.0"},"module":"fesm2022/ng-recaptcha.mjs","typings":"index.d.ts","exports":{"./package.json":{"default":"./package.json"},".":{"types":"./index.d.ts","esm2022":"./esm2022/ng-recaptcha.mjs","esm":"./esm2022/ng-recaptcha.mjs","default":"./fesm2022/ng-recaptcha.mjs"}},"sideEffects":false,"gitHead":"5d05cdef8971022110bcae7b14f94a37ac12b73b","bugs":{"url":"https://github.com/DethAriel/ng-recaptcha/issues"},"_id":"ng-recaptcha@13.2.0","_nodeVersion":"18.16.0","_npmVersion":"9.5.1","dist":{"integrity":"sha512-QsE/lDHWRcWTXStnQAu3bLmFkVtMb5Z+pzKlOoBlrDEd/y6JJzu5RlbthkNnWXyG2Naw8N8XxBapvOdR/vGsVw==","shasum":"391de310d31ee73df6ee27d1bef6815ecdebf4e5","tarball":"https://registry.npmjs.org/ng-recaptcha/-/ng-recaptcha-13.2.0.tgz","fileCount":31,"unpackedSize":207535,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDbdw0ygGcKWBrXvV+CTYmtZV5d9Z+QajPZT3h5WdJvYAiEAqCMZygoCNBtnKwU1LI8/xOrgtmdD49PtgQIIj0J5Bgk="}]},"_npmUser":{"name":"dethariel","email":"dethariel@gmail.com"},"directories":{},"maintainers":[{"name":"dethariel","email":"dethariel@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ng-recaptcha_13.2.0_1700877996097_0.441672932141155"},"_hasShrinkwrap":false},"13.2.1":{"name":"ng-recaptcha","description":"Angular component for Google reCAPTCHA","version":"13.2.1","author":{"name":"Ruslan Arkhipau","email":"dethariel@gmail.com"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/DethAriel/ng-recaptcha.git"},"homepage":"https://github.com/DethAriel/ng-recaptcha#readme","keywords":["angular","recaptcha","angular-recaptcha","ng-recaptcha"],"peerDependencies":{"@angular/core":"^17.0.0"},"dependencies":{"@types/grecaptcha":"^3.0.7","tslib":"^2.2.0"},"module":"fesm2022/ng-recaptcha.mjs","typings":"index.d.ts","exports":{"./package.json":{"default":"./package.json"},".":{"types":"./index.d.ts","esm2022":"./esm2022/ng-recaptcha.mjs","esm":"./esm2022/ng-recaptcha.mjs","default":"./fesm2022/ng-recaptcha.mjs"}},"sideEffects":false,"gitHead":"9b8979122dccf006ef42e45e23532d4b631491ce","bugs":{"url":"https://github.com/DethAriel/ng-recaptcha/issues"},"_id":"ng-recaptcha@13.2.1","_nodeVersion":"18.16.0","_npmVersion":"9.5.1","dist":{"integrity":"sha512-aBOoFla9t6AfT9t5paykoXomCDKreBKouB16VUFxSZwn1RCfDsdcaTmSNJKYLFz5j0Cq/V+szY9f3mHLgzRw5Q==","shasum":"25138a4e3b6ce3606c5991c5355ea2b00f18e2c9","tarball":"https://registry.npmjs.org/ng-recaptcha/-/ng-recaptcha-13.2.1.tgz","fileCount":31,"unpackedSize":208457,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBEuTyGhRIYXsIN5xuuye94/vSLBdSDLP2mNhx51hTLXAiEAjATG0GRlfRw7hAVwBJpvFvE3r7QI8SVFqJ5qVUNYLQE="}]},"_npmUser":{"name":"dethariel","email":"dethariel@gmail.com"},"directories":{},"maintainers":[{"name":"dethariel","email":"dethariel@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ng-recaptcha_13.2.1_1700878850958_0.14191106347127969"},"_hasShrinkwrap":false}},"readme":"# Angular component for Google reCAPTCHA\n\n## ng-recaptcha [![npm version](https://badge.fury.io/js/ng-recaptcha.svg)](https://www.npmjs.com/package/ng-recaptcha)\n\n[![MIT licensed](https://img.shields.io/badge/license-MIT-blue.svg)](https://raw.githubusercontent.com/dethariel/ng-recaptcha/master/LICENSE)\n[![Build Status](https://app.travis-ci.com/DethAriel/ng-recaptcha.svg?branch=master)](https://app.travis-ci.com/DethAriel/ng-recaptcha)\n[![Coverage Status](https://coveralls.io/repos/github/DethAriel/ng-recaptcha/badge.svg?branch=master)](https://coveralls.io/github/DethAriel/ng-recaptcha?branch=master)\n[![NPM downloads](https://img.shields.io/npm/dm/ng-recaptcha)](https://www.npmjs.com/package/ng-recaptcha)\n\nA simple, configurable, easy-to-start component for handling reCAPTCHA v2 and v3.\n\n## Table of contents\n\n1. [Installation](#installation)\n1. [Basic Usage](#example-basic)\n   - [reCAPTCHA v3 Usage](#example-basic-v3)\n   - [Playground](#playground)\n1. [Working with `@angular/forms`](#forms-ready)\n1. [API](#api)\n   - [Input Options](#api-options)\n   - [Events](#api-events)\n   - [Methods](#api-methods)\n1. [Angular version compatibility](#angular-versions)\n1. [Examples](#examples)\n   - [Configuring the component globally](#example-global-config)\n   - [Specifying a different language](#example-language)\n   - [Handling errors](#example-error-handling)\n   - [Loading the reCAPTCHA API by yourself](#example-preload-api)\n   - [Usage with `required` in forms](#example-forms)\n   - [Working with invisible reCAPTCHA](#example-invisible)\n   - [Resizing](#example-resizing)\n   - [SystemJS configuration](#example-systemjs)\n   - [Loading from a different location](#example-different-url)\n   - [Specifying nonce for Content-Security-Policy](#example-csp-nonce)\n   - [Listening for all actions with reCAPTCHA v3](#example-v3-all-actions)\n   - [Loading reCAPTCHA keys asynchronously](#async-config-load)\n   - [Hiding reCAPTCHA badge](#hide-recaptcha-badge)\n\n## <a name=\"installation\"></a>Installation\n\nThe easiest way is to install through [yarn](https://yarnpkg.com/package/ng-recaptcha) or [npm](https://www.npmjs.com/package/ng-recaptcha):\n\n```sh\nyarn add ng-recaptcha\nnpm i ng-recaptcha --save\n```\n\n## <a name=\"example-basic\"></a>Basic Usage [(see in action)](https://dethariel.github.io/ng-recaptcha/)\n\nThe below applies to reCAPTCHA v2, for basic usage with reCAPTCHA v3 scroll down to [here](#example-basic-v3).\n\nTo start with, you need to import the `RecaptchaModule` (more on that [later](#modules)):\n\n```typescript\n// app.module.ts\nimport { RecaptchaModule } from \"ng-recaptcha\";\n// if you need forms support:\n// import { RecaptchaModule, RecaptchaFormsModule } from 'ng-recaptcha';\nimport { BrowserModule } from \"@angular/platform-browser\";\nimport { MyApp } from \"./app.component.ts\";\n\n@NgModule({\n  bootstrap: [MyApp],\n  declarations: [MyApp],\n  imports: [\n    BrowserModule,\n    RecaptchaModule,\n    // RecaptchaFormsModule, // if you need forms support\n  ],\n})\nexport class MyAppModule {}\n```\n\nOnce you have done that, the rest is simple:\n\n```typescript\n// app.component.ts\nimport { Component } from \"@angular/core\";\n\n@Component({\n  selector: \"my-app\",\n  template: `<re-captcha (resolved)=\"resolved($event)\" siteKey=\"YOUR_SITE_KEY\"></re-captcha>`,\n})\nexport class MyApp {\n  resolved(captchaResponse: string) {\n    console.log(`Resolved captcha with response: ${captchaResponse}`);\n  }\n}\n```\n\n```typescript\n// main.ts\nimport { platformBrowserDynamic } from \"@angular/platform-browser-dynamic\";\nimport { MyAppModule } from \"./app.module.ts\";\n\nplatformBrowserDynamic().bootstrapModule(MyAppModule);\n```\n\n### <a name=\"example-basic-v3\"></a>reCAPTCHA v3 Usage [(see in action)](https://dethariel.github.io/ng-recaptcha/v3)\n\n[reCAPTCHA v3](https://developers.google.com/recaptcha/docs/v3) introduces a different way of bot protection. To work with v3 APIs, `ng-recaptcha` provides a service (as opposed to a component). To start with, you need to import the `RecaptchaV3Module` and provide your reCAPTCHA v3 site key using `RECAPTCHA_V3_SITE_KEY` injection token:\n\n```ts\nimport { BrowserModule } from \"@angular/platform-browser\";\nimport { RECAPTCHA_V3_SITE_KEY, RecaptchaV3Module } from \"ng-recaptcha\";\n\nimport { MyApp } from \"./app.component.ts\";\n\n@NgModule({\n  bootstrap: [MyApp],\n  declarations: [MyApp],\n  imports: [BrowserModule, RecaptchaV3Module],\n  providers: [{ provide: RECAPTCHA_V3_SITE_KEY, useValue: \"<YOUR_SITE_KEY>\" }],\n})\nexport class MyAppModule {}\n```\n\nIn order to execute a reCAPTCHA v3 action, import the `ReCaptchaV3Service` into your desired component:\n\n```ts\nimport { ReCaptchaV3Service } from 'ng-recaptcha';\n\n@Component({\n  selector: 'recaptcha-demo',\n  template: `\n    <button (click)=\"executeImportantAction()\">Important action</button>\n  `,\n})\nexport class RecaptchaV3DemoComponent {\n  constructor(\n    private recaptchaV3Service: ReCaptchaV3Service,\n  ) {\n  }\n\n  public executeImportantAction(): void {\n    this.recaptchaV3Service.execute('importantAction')\n      .subscribe((token) => this.handleToken(token));\n  }\n```\n\nAs always with subscriptions, please don't forget to **unsubscribe**.\n\n❗️ **Important note**: If your site uses both v2 and v3, then you should _always_ provide `RECAPTCHA_V3_SITE_KEY` (even in modules that only rely on v2 functionality). This will prevent bugs in your code by allowing `ng-recaptcha` to follow reCAPTCHA development guidelines properly ([this one](https://developers.google.com/recaptcha/docs/faq#can-i-run-recaptcha-v2-and-v3-on-the-same-page) in particular).\n\nA more advanced v3 usage scenario includes listening to all actions and their respectively emitted tokens. This is covered [later on this page](#example-v3-all-actions).\n\n### <a name=\"playground\"></a>Playground\n\nYou can also play with [this Stackblitz demo](https://stackblitz.com/edit/ng-recaptcha-example) to get a feel of how this component can be used.\n\n## <a name=\"forms-ready\"></a>Working with `@angular/forms`\n\nThere are two modules available for you:\n\n```typescript\nimport { RecaptchaModule, RecaptchaFormsModule } from \"ng-recaptcha\";\n```\n\nIf you want your `<re-captcha>` element to work correctly with `[(ngModel)]` directive,\nyou need to import the `RecaptchaFormsModule` into your application module (pretty much\nlike with Angular own `'@angular/forms'` module).\n\n## <a name=\"api\"></a>API\n\n### <a name=\"api-options\"></a>Input Options\n\nThe component supports this options:\n\n- `siteKey`\n- `theme`\n- `type`\n- `size`\n- `tabIndex`\n- `badge`\n\nThey are all pretty well described either in the [reCAPTCHA docs](https://developers.google.com/recaptcha/docs/display), or in the [invisible reCAPTCHA docs](https://developers.google.com/recaptcha/docs/invisible),\nso I won't duplicate it here.\n\nOne additional option that component accepts is `errorMode`. You can learn more about it in the [Handling errors](#example-error-handling) section below.\n\nBesides specifying these options on the component itself, you can provide a global `<re-captcha>` configuration - see [Configuring the component globally](#example-global-config) section below.\n\n### <a name=\"api-events\"></a>Events\n\n- `resolved(response: string)`. Occurs when the captcha resolution value changed.\n  When user resolves captcha, use `response` parameter to send to the server for verification.\n  This parameter is equivalent to calling [`grecaptcha.getResponse`](https://developers.google.com/recaptcha/docs/display#js_api).\n\n  If the captcha has expired prior to submitting its value to the server, the component\n  will reset the captcha, and trigger the `resolved` event with `response === null`.\n\n- `errored(errorDetails: RecaptchaErrorParameters)`. Occurs when reCAPTCHA encounters an error (usually a connectivity problem) **if and only if** `errorMode` input has been set to `\"handled\"`.\n  `errorDetails` is a simple propagation of any arguments that the original `error-callback` has provided, and is documented here for the purposes of completeness and future-proofing. This array will most often (if not always) be empty. A good strategy would be to rely on just the fact that this event got triggered, and show a message to your app's user telling them to retry.\n\n### <a name=\"api-methods\"></a>Methods\n\n- `reset()`. Performs a manual captcha reset. This method might be useful if your form\n  validation failed, and you need the user to re-enter the captcha.\n- `execute()`. Executes the invisible recaptcha. Does nothing if component's size is not set to \"invisible\". See [Invisible reCAPTCHA developers guide](https://developers.google.com/recaptcha/docs/invisible#js_api) for more information.\n\n## <a name=\"angular-versions\"></a>Angular version compatibility\n\n| `ng-recaptcha` version                                                           | Supported Angular versions                           |\n| -------------------------------------------------------------------------------- | ---------------------------------------------------- |\n| `13.x.x`                                                                         | `17.x.x`                                             |\n| `12.x.x`                                                                         | `16.x.x`                                             |\n| `11.x.x`                                                                         | `15.x.x`                                             |\n| `10.x.x`                                                                         | `14.x.x`                                             |\n| `9.x.x`                                                                          | `13.x.x`                                             |\n| `8.x.x`                                                                          | `12.x.x`                                             |\n| `7.x.x`                                                                          | `11.x.x`                                             |\n| ⬆️ Starting with `ng-recaptcha@7`, only one version of Angular will be supported |\n| `6.x.x`                                                                          | `6.x.x \\|\\| 7.x.x \\|\\| 8.x.x \\|\\| 9.x.x \\|\\| 10.x.x` |\n| `5.x.x`                                                                          | `6.x.x \\|\\| 7.x.x \\|\\| 8.x.x`                        |\n| `4.x.x`                                                                          | `6.x.x \\|\\| 7.x.x`                                   |\n| `3.x.x`                                                                          | `4.x.x \\|\\| 5.x.x`                                   |\n| `2.x.x`                                                                          | `2.x.x \\|\\| 4.x.x`                                   |\n| `1.x.x`                                                                          | `2.x.x`                                              |\n\n## <a name=\"examples\"></a>Examples\n\n### <a name=\"example-global-config\"></a>Configuring the component globally [(see in action)](https://dethariel.github.io/ng-recaptcha/global-config)\n\nSome properties are global - including `siteKey`, `size`, and others. You can provide them at the module-level using the `RECAPTCHA_SETTINGS` provider:\n\n```typescript\nimport { RECAPTCHA_SETTINGS, RecaptchaSettings } from \"ng-recaptcha\";\n\n@NgModule({\n  providers: [\n    {\n      provide: RECAPTCHA_SETTINGS,\n      useValue: { siteKey: \"<YOUR_KEY>\" } as RecaptchaSettings,\n    },\n  ],\n})\nexport class MyModule {}\n```\n\nGlobal properties can be overridden on a case-by-case basis - the values on the `<re-captcha>` component itself take precedence over global settings.\n\n### <a name=\"example-language\"></a>Specifying a different language [(see in action)](https://dethariel.github.io/ng-recaptcha/basic?lang-fr)\n\n`<re-captcha>` supports various languages. By default recaptcha will guess the user's language itself\n(which is beyond the scope of this lib).\nBut you can override this behavior and provide a specific language to use by setting the `\"hl\"` search param in the `onBeforeLoad` hook.\nNote, that the language setting is **global**, and cannot be set on a per-captcha basis.\n\nA good way to synchronize reCAPTCHA language with the rest of your application is relying on `LOCALE_ID` value like so:\n\n```typescript\nimport { LOCALE_ID } from \"@angular/core\";\nimport { RECAPTCHA_LOADER_OPTIONS } from \"ng-recaptcha\";\n\n@NgModule({\n  providers: [\n    {\n      provide: RECAPTCHA_LOADER_OPTIONS,\n      useFactory: (locale: string) => ({\n        onBeforeLoad(url) {\n          url.searchParams.set(\"hl\", locale);\n\n          return { url };\n        },\n      }),\n      deps: [LOCALE_ID],\n    },\n  ],\n})\nexport class MyModule {}\n```\n\nAlternatively, a specific language can be provided like so:\n\n```typescript\nimport { RECAPTCHA_LOADER_OPTIONS } from \"ng-recaptcha\";\n\n@NgModule({\n  providers: [\n    {\n      provide: RECAPTCHA_LOADER_OPTIONS,\n      useValue: {\n        onBeforeLoad(url) {\n          url.searchParams.set(\"hl\", \"fr\"); // use French language\n\n          return { url };\n        },\n      },\n    },\n  ],\n})\nexport class MyModule {}\n```\n\nYou can find the list of supported languages in [reCAPTCHA docs](https://developers.google.com/recaptcha/docs/language).\n\n### <a name=\"example-error-handling\"></a>Handling errors\n\nSometimes reCAPTCHA encounters an error, which is usually a network connectivity problem. It cannot continue until connectivity is restored. By default, reCAPTCHA lets the user know that an error has happened (it's a built-in functionality of reCAPTCHA itself, and this lib is not in control of it). The downside of such behavior is that you, as a developer, don't get notified about this in any way. Opting into such notifications is easy, but comes at a cost of assuming responsibility for informing the user that they should retry. Here's how you would do this:\n\n```typescript\nimport { Component } from \"@angular/core\";\n\n@Component({\n  selector: \"my-app\",\n  template: `<re-captcha (resolved)=\"resolved($event)\" (errored)=\"errored($event)\" errorMode=\"handled\"></re-captcha>`,\n})\nexport class MyApp {\n  resolved(captchaResponse: string) {\n    console.log(`Resolved captcha with response: ${captchaResponse}`);\n  }\n\n  errored() {\n    console.warn(`reCAPTCHA error encountered`);\n  }\n}\n```\n\nYou can see this in action by navigating to either [basic example demo](https://dethariel.github.io/ng-recaptcha/basic) or [invisible demo](https://dethariel.github.io/ng-recaptcha/invisible) and trying to interact with reCAPTCHA after setting the network to \"Offline\".\n\nThe `errorMode` input has two possible values -- `\"handled\"` and `\"default\"`, with latter being the default as the name suggests. Not specifying `errorMode`, or setting it to anything other than `\"handled\"` will not invoke your `(errored)` callback, and will instead result in default reCAPTCHA functionality.\n\nThe `(errored)` callback will propagate all of the parameters that it receives from `grecaptcha['error-callback']` (which might be none) as an array.\n\n### <a name=\"example-preload-api\"></a>Loading the reCAPTCHA API by yourself [(see in action)](https://dethariel.github.io/ng-recaptcha/v8/preload-api)\n\nBy default, the component assumes that the reCAPTCHA API loading will be handled\nby the `RecaptchaLoaderService`. However, you can override that by providing your\ninstance of this service to the Angular DI.\n\nThe below code snippet is an example of how such a provider can be implemented.\n\n**TL;DR**: there should be an `Observable` that eventually resolves to a\n`grecaptcha`-compatible object (e.g. `grecaptcha` itself).\n\n```html\n<script src=\"https://www.google.com/recaptcha/api.js?render=explicit&amp;onload=onloadCallback\"></script>\n\n<script>\n  // bootstrap the application once the reCAPTCHA api has loaded\n  function onloadCallback() {\n    System.import(\"app\").catch(function (err) {\n      console.error(err);\n    });\n  }\n</script>\n```\n\n```typescript\nimport { RecaptchaLoaderService } from \"ng-recaptcha\";\n\n@Injectable()\nexport class PreloadedRecaptchaAPIService {\n  public ready: Observable<ReCaptchaV2.ReCaptcha>;\n\n  constructor() {\n    let readySubject = new BehaviorSubject<ReCaptchaV2.ReCaptcha>(grecaptcha);\n    this.ready = readySubject.asObservable();\n  }\n}\n\n@NgModule({\n  providers: [\n    {\n      provide: RecaptchaLoaderService,\n      useValue: new PreloadedRecaptchaAPIService(),\n    },\n  ],\n})\nexport class MyModule {}\n```\n\n### <a name=\"example-forms\"></a>Usage with `required` in forms [(see in action)](https://dethariel.github.io/ng-recaptcha/forms)\n\nIt's very easy to put `<re-captcha>` in an Angular form and have it `require`d - just\nadd the `required` attribute to the `<re-captcha>` element. Do not forget to import `RecaptchaFormsModule` from `'ng-recaptcha'`!\n\n```typescript\n@Component({\n  selector: \"my-form\",\n  template: ` <form>\n    <re-captcha [(ngModel)]=\"formModel.captcha\" name=\"captcha\" required siteKey=\"YOUR_SITE_KEY\"></re-captcha>\n  </form>`,\n})\nexport class MyForm {\n  formModel = new MyFormModel();\n}\n```\n\nA similar approach can be taken for reactive forms:\n\n```typescript\n@Component({\n  selector: \"my-reactive-form\",\n  template: `\n    <form [formGroup]=\"reactiveForm\">\n      <re-captcha formControlName=\"recaptchaReactive\"></re-captcha>\n      <button [disabled]=\"reactiveForm.invalid\">Submit</button>\n    </form>\n  `,\n})\nexport class MyReactiveForm {\n  reactiveForm: FormGroup;\n\n  ngOnInit() {\n    this.reactiveForm = new FormGroup({\n      recaptchaReactive: new FormControl(null, Validators.required),\n    });\n  }\n}\n```\n\n### <a name=\"example-invisible\"></a>Working with invisible reCAPTCHA [(see in action)](https://dethariel.github.io/ng-recaptcha/invisible)\n\nWorking with [invisible reCAPTCHA](https://developers.google.com/recaptcha/docs/invisible) is almost the same as with regular one.\nFirst, you need to provide the right size:\n\n```html\n<re-captcha size=\"invisible\" ...></re-captcha>\n```\n\nYou will also need to invoke the [`\"execute()\"`](https://developers.google.com/recaptcha/docs/invisible#programmatic_execute) method manually. This can be done by either obtaining a reference to `RecaptchaComponent` via `@ViewChild()`, or by using inline template reference:\n\n```html\n<re-captcha #captchaRef=\"reCaptcha\" ...></re-captcha>\n...\n<button (click)=\"captchaRef.execute()\">Submit</button>\n```\n\nNormally you would only submit a form when recaptcha response has been received. This can be achieved by reacting to `(resolved)` event and invoking submit logic when the captcha response is truthy (this will not try to submit the form when recaptcha response has expired). A sample implementation would look like this:\n\n```typescript\n@Component({\n  selector: \"my-form\",\n  template: ` <form>\n    <re-captcha\n      #captchaRef=\"reCaptcha\"\n      siteKey=\"YOUR_SITE_KEY\"\n      size=\"invisible\"\n      (resolved)=\"$event && submit($event)\"\n    ></re-captcha>\n    <button (click)=\"captchaRef.execute()\">Submit</button>\n  </form>`,\n})\nexport class MyForm {\n  public submit(captchaResponse: string): void {\n    this.http.post({\n      captcha: captchaResponse,\n      /* ... */\n    });\n  }\n}\n```\n\n### <a name=\"example-resizing\"></a>Resizing\n\nMaking reCAPTCHA responsive is sometimes necessary, especially when working with mobile devices. You can use css-transforms to achieve that as in [this StackOverflow answer](https://stackoverflow.com/a/29521983/2645305), which is also ell-described in [this blog post](https://geekgoddess.com/how-to-resize-the-google-nocaptcha-recaptcha/). You can also take a look at a [live example](https://stackblitz.com/edit/ng-recaptcha-example-uncvxq?file=src/app/app.component.html) of how this might be implemented. This boils down to\n\n```html\n<div style=\"transform:scale(0.7);transform-origin:0;\">\n  <re-captcha></re-captcha>\n</div>\n```\n\n### <a name=\"example-systemjs\"></a>SystemJS configuration\n\nTo configure the package to work with SystemJS, you would configure it approximately like that (assuming you've installed `ng-recaptcha` using `npm`):\n\n```javascript\n// SystemJS config file\n(function () {\n  System.config({\n    paths: {\n      \"npm:\": \"/node_modules/\",\n    },\n    map: {\n      \"ng-recaptcha\": \"npm:ng-recaptcha\",\n    },\n    packages: {\n      \"ng-recaptcha\": { main: \"./index.js\" },\n    },\n  });\n})();\n```\n\n### <a name=\"example-different-url\"></a>Loading from a different location\n\nSince `\"google.com\"` domain might be unavailable in some countries, reCAPTCHA core team has a solution for that - using `\"recaptcha.net\"` domain. You can configure the component to use that by using the `onBeforeLoad` hook of `RECAPTCHA_LOADER_OPTIONS`, for example:\n\n```javascript\nimport { RECAPTCHA_LOADER_OPTIONS } from \"ng-recaptcha\";\n\n@NgModule({\n  providers: [\n    {\n      provide: RECAPTCHA_LOADER_OPTIONS,\n      useValue: {\n        onBeforeLoad(_url) {\n          return {\n            url: new URL(\"https://www.recaptcha.net/recaptcha/api.js\"), // use recaptcha.net script source for some of our users\n          };\n        },\n      },\n    },\n  ],\n})\nexport class MyModule {}\n```\n\n### <a name=\"example-csp-nonce\"></a>Specifying nonce for Content-Security-Policy\n\nPer [reCAPTCHA FAQ on CSP](https://developers.google.com/recaptcha/docs/faq#im-using-content-security-policy-csp-on-my-website-how-can-i-configure-it-to-work-with-recaptcha), the recommended approach for that is to supply nonce to the script tag. This is possible by providing the nonce as part of the `onBeforeLoad` hook of `RECAPTCHA_LOADER_OPTIONS`, for example\n\n```javascript\nimport { RECAPTCHA_LOADER_OPTIONS } from \"ng-recaptcha\";\n\n@NgModule({\n  providers: [\n    {\n      provide: RECAPTCHA_LOADER_OPTIONS,\n      useValue: {\n        onBeforeLoad(_url) {\n          return {\n            url,\n            nonce: \"<YOUR_NONCE_VALUE>\",\n          };\n        },\n      },\n    },\n  ],\n})\nexport class MyModule {}\n```\n\n### <a name=\"example-v3-all-actions\"></a>Listening for all actions with reCAPTCHA v3\n\nMore often than not you will need to only get a reCAPTCHA token with the action the user is currently taking, and submit it to the backend at that time. However, having a single listener for all events will be desirable.\n\nThere is an `Observable` exactly for that purpose: `ReCaptchaV3Service.onExecute`. It emits a value every time a token is received from reCAPTCHA. The shape of payload it operates on is defined via `OnExecuteData` interface:\n\n```ts\ninterface OnExecuteData {\n  action: string;\n  token: string;\n}\n```\n\nwhere `action` is the name of the action that has been executed, and `token` is what reCAPTCHA v3 provided when executing that action.\n\nHere's how you would potentially set this up:\n\n```ts\nimport { OnExecuteData, ReCaptchaV3Service } from \"ng-recaptcha\";\n\n@Component({\n  selector: \"my-component\",\n  templateUrl: \"./v3-demo.component.html\",\n})\nexport class MyComponent implements OnInit, OnDestroy {\n  private subscription: Subscription;\n\n  constructor(private recaptchaV3Service: ReCaptchaV3Service) {}\n\n  public ngOnInit() {\n    this.subscription = this.recaptchaV3Service.onExecute.subscribe((data: OnExecuteData) => {\n      this.handleRecaptchaExecute(data.action, data.token);\n    });\n  }\n\n  public ngOnDestroy() {\n    if (this.subscription) {\n      this.subscription.unsubscribe();\n    }\n  }\n}\n```\n\nThere are a couple things to keep in mind:\n\n- `onExecute` will trigger for **all** actions. If you only need to bulk-process some actions, and not others - you will have to apply filtering yourself.\n- `onExecute` observable will provide you with all the events emitted **after** you have subscribed to it - it doesn't keep references to the previously emitted actions. So make sure you add such a subscription as early in your code as you feel is necessary.\n- `onExecute` does not emit anything for when a `grecaptcha` error occurs. Use `onExecuteError` Observable for that.\n\n### <a name=\"async-config-load\"></a>Loading reCAPTCHA keys asynchronously\n\nIf your use-case needs to load the reCAPTCHA v2/v3 key from the backend (as opposed to specifying it in-code during build time), the Angular-idiomatic way to do that is by relying on [`APP_INITIALIZER`](https://angular.io/api/core/APP_INITIALIZER). You can find an example of how this could look like below, and you can also consult the source code for the demo site.\n\n```ts\n// config.service.ts\nimport { Injectable } from \"@angular/core\";\n\n@Injectable({\n  providedIn: \"root\",\n})\nexport class ConfigService {\n  public recaptchaSiteKeyV2: string | null = null;\n  public recaptchaSiteKeyV3: string | null = null;\n\n  public async loadConfig(): Promise<void> {\n    const { siteKeyV2, siteKeyV3 } = await fetchConfig(/* some API call */);\n    this.recaptchaSiteKeyV2 = siteKeyV2;\n    this.recaptchaSiteKeyV3 = siteKeyV3;\n  }\n}\n\n// app.module.ts\nimport { APP_INITIALIZER, NgModule } from \"@angular/core\";\nimport { RECAPTCHA_SETTINGS, RecaptchaSettings, RECAPTCHA_V3_SITE_KEY } from \"ng-recaptcha\";\n\nimport { ConfigService } from \"./config.service\";\n\nfunction appLoadFactory(config: ConfigService) {\n  return () => config.loadConfig().then(() => console.log(`config resolved`, config));\n}\n\n@NgModule({\n  providers: [\n    {\n      provide: RECAPTCHA_V3_SITE_KEY,\n      useFactory: (config: ConfigService) => {\n        return config.recaptchaSiteKeyV3;\n      },\n      deps: [ConfigService],\n    },\n    {\n      provide: RECAPTCHA_SETTINGS,\n      useFactory: (config: ConfigService): RecaptchaSettings => {\n        return { siteKey: config.recaptchaSiteKeyV2 };\n      },\n      deps: [ConfigService],\n    },\n    {\n      provide: APP_INITIALIZER,\n      useFactory: appLoadFactory,\n      deps: [ConfigService],\n      multi: true,\n    },\n  ],\n})\nexport class AppModule {}\n```\n\n### <a name=\"hide-recaptcha-badge\"></a>Hiding reCAPTCHA badge\n\nTo start with, this is not strictly under `ng-recaptcha` library control.\nHowever, there is a way of doing so (albeit subject to certain conditions).\nPlease refer to the [FAQ section of reCAPTCHA documentation](https://developers.google.com/recaptcha/docs/faq#id-like-to-hide-the-recaptcha-badge.-what-is-allowed) to get an idea of what you're required to do.\n","maintainers":[{"name":"dethariel","email":"dethariel@gmail.com"}],"time":{"modified":"2023-11-25T02:20:51.334Z","created":"2017-03-13T17:52:51.769Z","2.0.0-beta1":"2017-03-13T17:52:51.769Z","2.0.0":"2017-03-14T22:24:29.821Z","2.0.1":"2017-03-17T01:10:44.368Z","2.0.2":"2017-03-26T01:34:16.682Z","2.1.0":"2017-05-01T20:42:26.871Z","2.1.1":"2017-05-02T20:12:43.185Z","2.2.0":"2017-08-18T22:59:28.249Z","3.0.0":"2017-08-30T18:34:54.601Z","3.0.1":"2017-09-29T22:35:23.898Z","3.0.2":"2017-10-18T17:54:20.558Z","3.0.3":"2017-12-26T21:02:04.112Z","3.0.4":"2018-04-27T19:12:18.938Z","3.0.5":"2018-04-27T19:33:21.385Z","4.0.0-beta.1":"2018-05-17T16:10:39.784Z","4.0.0":"2018-09-29T00:03:17.723Z","4.1.0":"2018-10-24T18:20:53.954Z","4.1.1":"2018-10-24T20:24:56.029Z","4.2.0":"2018-10-24T21:46:18.373Z","4.2.1":"2018-10-24T22:02:15.304Z","4.3.0-beta.1":"2019-02-08T08:09:18.059Z","4.3.0":"2019-06-04T22:11:25.694Z","5.0.0-beta.1":"2019-06-04T23:23:05.668Z","5.0.0-beta.2":"2019-06-14T16:59:20.931Z","5.0.0":"2019-08-09T18:28:26.820Z","6.0.0":"2020-09-10T06:41:17.219Z","6.0.1":"2020-09-12T05:52:25.922Z","6.0.2":"2020-09-14T06:28:10.699Z","6.1.0":"2020-12-01T08:49:54.575Z","7.0.0":"2020-12-22T22:31:08.463Z","7.0.1":"2021-01-07T23:34:28.799Z","8.0.0":"2021-05-14T22:34:15.877Z","8.0.1":"2021-07-22T21:28:57.000Z","7.0.2":"2021-07-22T21:38:21.694Z","9.0.0":"2021-11-16T01:41:06.379Z","10.0.0":"2022-06-25T04:14:13.618Z","11.0.0":"2022-11-30T06:23:42.612Z","12.0.0":"2023-05-24T02:04:43.949Z","12.0.1":"2023-05-24T02:13:32.809Z","12.0.2":"2023-07-31T18:57:22.102Z","13.0.0":"2023-11-23T21:15:02.219Z","13.1.0":"2023-11-24T01:04:07.049Z","13.2.0":"2023-11-25T02:06:36.261Z","13.2.1":"2023-11-25T02:20:51.161Z"},"homepage":"https://github.com/DethAriel/ng-recaptcha#readme","keywords":["angular","recaptcha","angular-recaptcha","ng-recaptcha"],"repository":{"type":"git","url":"git+https://github.com/DethAriel/ng-recaptcha.git"},"author":{"name":"Ruslan Arkhipau","email":"dethariel@gmail.com"},"license":"MIT","readmeFilename":"README.md","users":{"3ddario":true},"bugs":{"url":"https://github.com/DethAriel/ng-recaptcha/issues"}}