ng-recaptchav3
Version:
Angular8 library to provide easy extraction for google recaptcha v3, invisible recaptcha and recaptcha v2
274 lines • 17.4 kB
JavaScript
/**
* @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