UNPKG

ng-recaptchav3

Version:

Angular8 library to provide easy extraction for google recaptcha v3, invisible recaptcha and recaptcha v2

274 lines 17.4 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Component, ElementRef, EventEmitter, HostBinding, Inject, Input, NgZone, Optional, Output } from '@angular/core'; import { RecaptchaLoaderService } from './recaptcha-loader.service'; import { RECAPTCHA_SETTINGS } from './recaptcha-settings'; /** @type {?} */ var nextId = 0; var RecaptchaComponent = /** @class */ (function () { function RecaptchaComponent(elementRef, loader, zone, settings) { this.elementRef = elementRef; this.loader = loader; this.zone = zone; this.id = "ngrecaptcha-" + nextId++; this.resolved = new EventEmitter(); if (!settings) { return; } this.siteKey = settings.siteKey; this.theme = settings.theme; this.type = settings.type; this.size = settings.size; this.badge = settings.badge; } /** * @return {?} */ RecaptchaComponent.prototype.ngAfterViewInit = /** * @return {?} */ function () { var _this = this; this.subscription = this.loader.ready.subscribe((/** * @param {?} grecaptcha * @return {?} */ function (grecaptcha) { if (grecaptcha != null) { _this.grecaptcha = grecaptcha; _this.renderRecaptcha(); } })); }; /** * @return {?} */ RecaptchaComponent.prototype.ngOnDestroy = /** * @return {?} */ function () { // reset the captcha to ensure it does not leave anything behind // after the component is no longer needed this.grecaptchaReset(); if (this.subscription) { this.subscription.unsubscribe(); } }; /** * Executes the invisible recaptcha. * Does nothing if component's size is not set to "invisible". */ /** * Executes the invisible recaptcha. * Does nothing if component's size is not set to "invisible". * @return {?} */ RecaptchaComponent.prototype.execute = /** * Executes the invisible recaptcha. * Does nothing if component's size is not set to "invisible". * @return {?} */ function () { if (this.size !== 'invisible' || this.widget === null) { return; } if (this.actionName) { this.grecaptcha.execute(this.widget, { action: this.actionName }); } else { this.grecaptcha.execute(this.widget); } }; /** * @return {?} */ RecaptchaComponent.prototype.reset = /** * @return {?} */ function () { if (this.widget === null) { return; } if (this.grecaptcha.getResponse(this.widget)) { // Only emit an event in case if something would actually change. // That way we do not trigger "touching" of the control if someone does a "reset" // on a non-resolved captcha. this.resolved.emit(null); } this.grecaptchaReset(); }; /** @internal */ /** * \@internal * @private * @return {?} */ RecaptchaComponent.prototype.expired = /** * \@internal * @private * @return {?} */ function () { this.resolved.emit(null); }; /** @internal */ /** * \@internal * @private * @param {?} response * @return {?} */ RecaptchaComponent.prototype.captchaReponseCallback = /** * \@internal * @private * @param {?} response * @return {?} */ function (response) { this.resolved.emit(response); }; /** @internal */ /** * \@internal * @private * @return {?} */ RecaptchaComponent.prototype.grecaptchaReset = /** * \@internal * @private * @return {?} */ function () { var _this = this; if (this.widget != null) { this.zone.runOutsideAngular((/** * @return {?} */ function () { return _this.grecaptcha.reset(_this.widget); })); } }; /** @internal */ /** * \@internal * @private * @return {?} */ RecaptchaComponent.prototype.renderRecaptcha = /** * \@internal * @private * @return {?} */ function () { var _this = this; this.widget = this.grecaptcha.render(this.elementRef.nativeElement, { badge: this.badge, callback: (/** * @param {?} response * @return {?} */ function (response) { _this.zone.run((/** * @return {?} */ function () { return _this.captchaReponseCallback(response); })); }), 'expired-callback': (/** * @return {?} */ function () { _this.zone.run((/** * @return {?} */ function () { return _this.expired(); })); }), sitekey: this.siteKey, size: this.size, tabindex: this.tabIndex, theme: this.theme, type: this.type }); }; RecaptchaComponent.decorators = [ { type: Component, args: [{ exportAs: 'reCaptcha', selector: 're-captcha', template: '' }] } ]; /** @nocollapse */ RecaptchaComponent.ctorParameters = function () { return [ { type: ElementRef }, { type: RecaptchaLoaderService }, { type: NgZone }, { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [RECAPTCHA_SETTINGS,] }] } ]; }; RecaptchaComponent.propDecorators = { id: [{ type: Input }, { type: HostBinding, args: ['attr.id',] }], siteKey: [{ type: Input }], theme: [{ type: Input }], type: [{ type: Input }], size: [{ type: Input }], tabIndex: [{ type: Input }], badge: [{ type: Input }], actionName: [{ type: Input }], resolved: [{ type: Output }] }; return RecaptchaComponent; }()); export { RecaptchaComponent }; if (false) { /** @type {?} */ RecaptchaComponent.prototype.id; /** @type {?} */ RecaptchaComponent.prototype.siteKey; /** @type {?} */ RecaptchaComponent.prototype.theme; /** @type {?} */ RecaptchaComponent.prototype.type; /** @type {?} */ RecaptchaComponent.prototype.size; /** @type {?} */ RecaptchaComponent.prototype.tabIndex; /** @type {?} */ RecaptchaComponent.prototype.badge; /** @type {?} */ RecaptchaComponent.prototype.actionName; /** @type {?} */ RecaptchaComponent.prototype.resolved; /** * \@internal * @type {?} * @private */ RecaptchaComponent.prototype.subscription; /** * \@internal * @type {?} * @private */ RecaptchaComponent.prototype.widget; /** * \@internal * @type {?} * @private */ RecaptchaComponent.prototype.grecaptcha; /** * @type {?} * @private */ RecaptchaComponent.prototype.elementRef; /** * @type {?} * @private */ RecaptchaComponent.prototype.loader; /** * @type {?} * @private */ RecaptchaComponent.prototype.zone; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjYXB0Y2hhLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nLXJlY2FwdGNoYXYzLyIsInNvdXJjZXMiOlsibGliL3JlY2FwdGNoYS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFFTCxTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixXQUFXLEVBQ1gsTUFBTSxFQUNOLEtBQUssRUFDTCxNQUFNLEVBRU4sUUFBUSxFQUNSLE1BQU0sRUFDUCxNQUFNLGVBQWUsQ0FBQztBQUd2QixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsa0JBQWtCLEVBQXFCLE1BQU0sc0JBQXNCLENBQUM7O0lBR3pFLE1BQU0sR0FBRyxDQUFDO0FBRWQ7SUEyQkUsNEJBQ1UsVUFBc0IsRUFDdEIsTUFBOEIsRUFDOUIsSUFBWSxFQUNvQixRQUE0QjtRQUg1RCxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3RCLFdBQU0sR0FBTixNQUFNLENBQXdCO1FBQzlCLFNBQUksR0FBSixJQUFJLENBQVE7UUF0QnRCLE9BQUUsR0FBRyxpQkFBZSxNQUFNLEVBQUksQ0FBQztRQVVyQixhQUFRLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQWU5QyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2IsT0FBTztTQUNSO1FBQ0QsSUFBSSxDQUFDLE9BQU8sR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQztRQUM1QixJQUFJLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFDMUIsSUFBSSxDQUFDLElBQUksR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDO1FBQzFCLElBQUksQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQztJQUM5QixDQUFDOzs7O0lBRUQsNENBQWU7OztJQUFmO1FBQUEs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SSxDQUFDLEdBQUc7OztnQkFBQyxjQUFNLE9BQUEsS0FBSSxDQUFDLE9BQU8sRUFBRSxFQUFkLENBQWMsRUFBQyxDQUFDO1lBQ3RDLENBQUMsQ0FBQTtZQUNELE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztZQUNyQixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7WUFDZixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7WUFDdkIsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO1lBQ2pCLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtTQUNoQixDQUFDLENBQUM7SUFDTCxDQUFDOztnQkEzSEYsU0FBUyxTQUFDO29CQUNULFFBQVEsRUFBRSxXQUFXO29CQUNyQixRQUFRLEVBQUUsWUFBWTtvQkFDdEIsUUFBUSxFQUFFLEVBQUU7aUJBQ2I7Ozs7Z0JBdEJDLFVBQVU7Z0JBWUgsc0JBQXNCO2dCQVA3QixNQUFNO2dEQTRDSCxRQUFRLFlBQUksTUFBTSxTQUFDLGtCQUFrQjs7O3FCQXpCdkMsS0FBSyxZQUNMLFdBQVcsU0FBQyxTQUFTOzBCQUdyQixLQUFLO3dCQUNMLEtBQUs7dUJBQ0wsS0FBSzt1QkFDTCxLQUFLOzJCQUNMLEtBQUs7d0JBQ0wsS0FBSzs2QkFDTCxLQUFLOzJCQUVMLE1BQU07O0lBMEdULHlCQUFDO0NBQUEsQUE1SEQsSUE0SEM7U0F2SFksa0JBQWtCOzs7SUFDN0IsZ0NBRStCOztJQUUvQixxQ0FBeUI7O0lBQ3pCLG1DQUErQjs7SUFDL0Isa0NBQTZCOztJQUM3QixrQ0FBNkI7O0lBQzdCLHNDQUEwQjs7SUFDMUIsbUNBQStCOztJQUMvQix3Q0FBNkI7O0lBRTdCLHNDQUFnRDs7Ozs7O0lBR2hELDBDQUFtQzs7Ozs7O0lBRW5DLG9DQUF1Qjs7Ozs7O0lBRXZCLHdDQUE4Qjs7Ozs7SUFHNUIsd0NBQThCOzs7OztJQUM5QixvQ0FBc0M7Ozs7O0lBQ3RDLGtDQUFvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0QmluZGluZyxcbiAgSW5qZWN0LFxuICBJbnB1dCxcbiAgTmdab25lLFxuICBPbkRlc3Ryb3ksXG4gIE9wdGlvbmFsLFxuICBPdXRwdXRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IFJlQ2FwdGNoYSwgUmVDYXB0Y2hhQmFkZ2UsIFJlQ2FwdGNoYVNpemUsIFJlQ2FwdGNoYVRoZW1lLCBSZUNhcHRjaGFUeXBlIH0gZnJvbSAnLi9ncmVjYXB0Y2hhJztcbmltcG9ydCB7IFJlY2FwdGNoYUxvYWRlclNlcnZpY2UgfSBmcm9tICcuL3JlY2FwdGNoYS1sb2FkZXIuc2VydmljZSc7XG5pbXBvcnQgeyBSRUNBUFRDSEFfU0VUVElOR1MsIFJlY2FwdGNoYVNldHRpbmdzIH0gZnJvbSAnLi9yZWNhcHRjaGEtc2V0dGluZ3MnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbmxldCBuZXh0SWQgPSAwO1xuXG5AQ29tcG9uZW50KHtcbiAgZXhwb3J0QXM6ICdyZUNhcHRjaGEnLFxuICBzZWxlY3RvcjogJ3JlLWNhcHRjaGEnLFxuICB0ZW1wbGF0ZTogJydcbn0pXG5leHBvcnQgY2xhc3MgUmVjYXB0Y2hhQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgQElucHV0KClcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmlkJylcbiAgaWQgPSBgbmdyZWNhcHRjaGEtJHtuZXh0SWQrK31gO1xuXG4gIEBJbnB1dCgpIHNpdGVLZXk6IHN0cmluZztcbiAgQElucHV0KCkgdGhlbWU6IFJlQ2FwdGNoYVRoZW1lO1xuICBASW5wdXQoKSB0eXBlOiBSZUNhcHRjaGFUeXBlO1xuICBASW5wdXQoKSBzaXplOiBSZUNhcHRjaGFTaXplO1xuICBASW5wdXQoKSB0YWJJbmRleDogbnVtYmVyO1xuICBASW5wdXQoKSBiYWRnZTogUmVDYXB0Y2hhQmFkZ2U7XG4gIEBJbnB1dCgpIGFjdGlvbk5hbWU/OiBzdHJpbmc7XG5cbiAgQE91dHB1dCgpIHJlc29sdmVkID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBwcml2YXRlIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICAvKiogQGludGVybmFsICovXG4gIHByaXZhdGUgd2lkZ2V0OiBudW1iZXI7XG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgcHJpdmF0ZSBncmVjYXB0Y2hhOiBSZUNhcHRjaGE7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgbG9hZGVyOiBSZWNhcHRjaGFMb2FkZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgem9uZTogTmdab25lLFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoUkVDQVBUQ0hBX1NFVFRJTkdTKSBzZXR0aW5ncz86IFJlY2FwdGNoYVNldHRpbmdzXG4gICkge1xuICAgIGlmICghc2V0dGluZ3MpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zaXRlS2V5ID0gc2V0dGluZ3Muc2l0ZUtleTtcbiAgICB0aGlzLnRoZW1lID0gc2V0dGluZ3MudGhlbWU7XG4gICAgdGhpcy50eXBlID0gc2V0dGluZ3MudHlwZTtcbiAgICB0aGlzLnNpemUgPSBzZXR0aW5ncy5zaXplO1xuICAgIHRoaXMuYmFkZ2UgPSBzZXR0aW5ncy5iYWRnZTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IHRoaXMubG9hZGVyLnJlYWR5LnN1YnNjcmliZSgoZ3JlY2FwdGNoYTogUmVDYXB0Y2hhKSA9PiB7XG4gICAgICBpZiAoZ3JlY2FwdGNoYSAhPSBudWxsKSB7XG4gICAgICAgIHRoaXMuZ3JlY2FwdGNoYSA9IGdyZWNhcHRjaGE7XG4gICAgICAgIHRoaXMucmVuZGVyUmVjYXB0Y2hhKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICAvLyByZXNldCB0aGUgY2FwdGNoYSB0byBlbnN1cmUgaXQgZG9lcyBub3QgbGVhdmUgYW55dGhpbmcgYmVoaW5kXG4gICAgLy8gYWZ0ZXIgdGhlIGNvbXBvbmVudCBpcyBubyBsb25nZXIgbmVlZGVkXG4gICAgdGhpcy5ncmVjYXB0Y2hhUmVzZXQoKTtcbiAgICBpZiAodGhpcy5zdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGVzIHRoZSBpbnZpc2libGUgcmVjYXB0Y2hhLlxuICAgKiBEb2VzIG5vdGhpbmcgaWYgY29tcG9uZW50J3Mgc2l6ZSBpcyBub3Qgc2V0IHRvIFwiaW52aXNpYmxlXCIuXG4gICAqL1xuICBleGVjdXRlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnNpemUgIT09ICdpbnZpc2libGUnIHx8IHRoaXMud2lkZ2V0ID09PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYWN0aW9uTmFtZSkge1xuICAgICAgdGhpcy5ncmVjYXB0Y2hhLmV4ZWN1dGUodGhpcy53aWRnZXQsIHsgYWN0aW9uOiB0aGlzLmFjdGlvbk5hbWUgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZ3JlY2FwdGNoYS5leGVjdXRlKHRoaXMud2lkZ2V0KTtcbiAgICB9XG4gIH1cblxuICByZXNldCgpIHtcbiAgICBpZiAodGhpcy53aWRnZXQgPT09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuZ3JlY2FwdGNoYS5nZXRSZXNwb25zZSh0aGlzLndpZGdldCkpIHtcbiAgICAgIC8vIE9ubHkgZW1pdCBhbiBldmVudCBpbiBjYXNlIGlmIHNvbWV0aGluZyB3b3VsZCBhY3R1YWxseSBjaGFuZ2UuXG4gICAgICAvLyBUaGF0IHdheSB3ZSBkbyBub3QgdHJpZ2dlciBcInRvdWNoaW5nXCIgb2YgdGhlIGNvbnRyb2wgaWYgc29tZW9uZSBkb2VzIGEgXCJyZXNldFwiXG4gICAgICAvLyBvbiBhIG5vbi1yZXNvbHZlZCBjYXB0Y2hhLlxuICAgICAgdGhpcy5yZXNvbHZlZC5lbWl0KG51bGwpO1xuICAgIH1cbiAgICB0aGlzLmdyZWNhcHRjaGFSZXNldCgpO1xuICB9XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBwcml2YXRlIGV4cGlyZWQoKSB7XG4gICAgdGhpcy5yZXNvbHZlZC5lbWl0KG51bGwpO1xuICB9XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBwcml2YXRlIGNhcHRjaGFSZXBvbnNlQ2FsbGJhY2socmVzcG9uc2U6IHN0cmluZykge1xuICAgIHRoaXMucmVzb2x2ZWQuZW1pdChyZXNwb25zZSk7XG4gIH1cblxuICAvKiogQGludGVybmFsICovXG4gIHByaXZhdGUgZ3JlY2FwdGNoYVJlc2V0KCkge1xuICAgIGlmICh0aGlzLndpZGdldCAhPSBudWxsKSB7XG4gICAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4gdGhpcy5ncmVjYXB0Y2hhLnJlc2V0KHRoaXMud2lkZ2V0KSk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBwcml2YXRlIHJlbmRlclJlY2FwdGNoYSgpIHtcbiAgICB0aGlzLndpZGdldCA9IHRoaXMuZ3JlY2FwdGNoYS5yZW5kZXIodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIHtcbiAgICAgIGJhZGdlOiB0aGlzLmJhZGdlLFxuICAgICAgY2FsbGJhY2s6IChyZXNwb25zZTogc3RyaW5nKSA9PiB7XG4gICAgICAgIHRoaXMuem9uZS5ydW4oKCkgPT4gdGhpcy5jYXB0Y2hhUmVwb25zZUNhbGxiYWNrKHJlc3BvbnNlKSk7XG4gICAgICB9LFxuICAgICAgJ2V4cGlyZWQtY2FsbGJhY2snOiAoKSA9PiB7XG4gICAgICAgIHRoaXMuem9uZS5ydW4oKCkgPT4gdGhpcy5leHBpcmVkKCkpO1xuICAgICAgfSxcbiAgICAgIHNpdGVrZXk6IHRoaXMuc2l0ZUtleSxcbiAgICAgIHNpemU6IHRoaXMuc2l6ZSxcbiAgICAgIHRhYmluZGV4OiB0aGlzLnRhYkluZGV4LFxuICAgICAgdGhlbWU6IHRoaXMudGhlbWUsXG4gICAgICB0eXBlOiB0aGlzLnR5cGVcbiAgICB9KTtcbiAgfVxufVxuIl19