{"version":3,"file":"ngx-captcha.mjs","sources":["../../src/lib/services/script.service.ts","../../src/lib/components/base-re-captcha-component.directive.ts","../../src/lib/models/recaptcha-type.enum.ts","../../src/lib/components/invisible-recaptcha.component.ts","../../src/lib/components/recaptcha-2.component.ts","../../src/lib/services/recaptcha_v3.service.ts","../../src/lib/ngx-captcha.module.ts","../../src/public_api.ts","../../src/ngx-captcha.ts"],"sourcesContent":["import { Injectable, NgZone } from \"@angular/core\";\r\nimport { RecaptchaConfiguration } from \"../models/recaptcha-configuration\";\r\n\r\n@Injectable({\r\n  providedIn: \"root\",\r\n})\r\nexport class ScriptService {\r\n  private readonly scriptElemId: string = \"ngx-catpcha-script\";\r\n\r\n  /**\r\n   * Name of the global google recaptcha script\r\n   */\r\n  protected readonly windowGrecaptcha = \"grecaptcha\";\r\n\r\n  /**\r\n   * Name of enterpise property in the global google recaptcha script\r\n   */\r\n  protected readonly windowGrecaptchaEnterprise = \"enterprise\";\r\n\r\n  /**\r\n   * Name of the global callback\r\n   */\r\n  protected readonly windowOnLoadCallbackProperty =\r\n    \"ngx_captcha_onload_callback\";\r\n\r\n  /**\r\n   * Name of the global callback for enterprise\r\n   */\r\n  protected readonly windowOnLoadEnterpriseCallbackProperty =\r\n    \"ngx_captcha_onload_enterprise_callback\";\r\n\r\n  protected readonly globalDomain: string = \"recaptcha.net\";\r\n\r\n  protected readonly defaultDomain: string = \"google.com\";\r\n\r\n  protected readonly enterpriseApi: string = \"enterprise.js\";\r\n\r\n  protected readonly defaultApi: string = \"api.js\";\r\n\r\n  constructor(protected zone: NgZone) {}\r\n\r\n  registerCaptchaScript(\r\n    config: RecaptchaConfiguration,\r\n    render: string,\r\n    onLoad: (grecaptcha: any) => void,\r\n    language?: string\r\n  ): void {\r\n    if (this.grecaptchaScriptLoaded(config.useEnterprise)) {\r\n      // recaptcha script is already loaded\r\n      // just call the callback\r\n      if (config.useEnterprise) {\r\n        this.zone.run(() => {\r\n          onLoad(\r\n            (window as any)[this.windowGrecaptcha][\r\n              this.windowGrecaptchaEnterprise\r\n            ]\r\n          );\r\n        });\r\n      } else {\r\n        this.zone.run(() => {\r\n          onLoad((window as any)[this.windowGrecaptcha]);\r\n        });\r\n      }\r\n      return;\r\n    }\r\n\r\n    // we need to patch the callback through global variable, otherwise callback is not accessible\r\n    // note: https://github.com/Enngage/ngx-captcha/issues/2\r\n    if (config.useEnterprise) {\r\n      (window as any)[this.getCallbackName(true)] = <any>(\r\n        (() =>\r\n          this.zone.run(\r\n            onLoad.bind(\r\n              this,\r\n              (window as any)[this.windowGrecaptcha][\r\n                this.windowGrecaptchaEnterprise\r\n              ]\r\n            )\r\n          ))\r\n      );\r\n    } else {\r\n      (window as any)[this.getCallbackName(false)] = <any>(\r\n        (() =>\r\n          this.zone.run(\r\n            onLoad.bind(this, (window as any)[this.windowGrecaptcha])\r\n          ))\r\n      );\r\n    }\r\n\r\n    // prepare script elem\r\n    const scriptElem = document.createElement(\"script\");\r\n    scriptElem.id = this.scriptElemId;\r\n    scriptElem.innerHTML = \"\";\r\n    scriptElem.src = this.getCaptchaScriptUrl(config, render, language);\r\n    scriptElem.async = true;\r\n    scriptElem.defer = true;\r\n\r\n    // add script to header\r\n    document.getElementsByTagName(\"head\")[0].appendChild(scriptElem);\r\n  }\r\n\r\n  cleanup(): void {\r\n    const elem = document.getElementById(this.scriptElemId);\r\n\r\n    if (elem) {\r\n      elem.remove();\r\n    }\r\n    (window as any)[this.getCallbackName()] = undefined;\r\n    (window as any)[this.windowGrecaptcha] = undefined;\r\n  }\r\n\r\n  /**\r\n   * Indicates if google recaptcha script is available and ready to be used\r\n   */\r\n  private grecaptchaScriptLoaded(useEnterprise?: boolean): boolean {\r\n    if (\r\n      !(window as any)[this.getCallbackName(useEnterprise)] ||\r\n      !(window as any)[this.windowGrecaptcha]\r\n    ) {\r\n      return false;\r\n    } else if (\r\n      useEnterprise &&\r\n      (window as any)[this.windowGrecaptcha][this.windowGrecaptchaEnterprise]\r\n    ) {\r\n      return true;\r\n      // if only enterprise script is loaded we need to check some v3's method\r\n    } else if ((window as any)[this.windowGrecaptcha].execute) {\r\n      return true;\r\n    }\r\n    return false;\r\n  }\r\n\r\n  /**\r\n   * Gets global callback name\r\n   * @param useEnterprise Optional flag for enterprise script\r\n   * @private\r\n   */\r\n  private getCallbackName(useEnterprise?: boolean): string {\r\n    return useEnterprise\r\n      ? this.windowOnLoadEnterpriseCallbackProperty\r\n      : this.windowOnLoadCallbackProperty;\r\n  }\r\n\r\n  /**\r\n   * Gets language param used in script url\r\n   */\r\n  private getLanguageParam(hl?: string): string {\r\n    if (!hl) {\r\n      return \"\";\r\n    }\r\n\r\n    return `&hl=${hl}`;\r\n  }\r\n\r\n  /**\r\n   * Url to google api script\r\n   */\r\n  private getCaptchaScriptUrl(\r\n    config: RecaptchaConfiguration,\r\n    render: string,\r\n    language?: string\r\n  ): string {\r\n    const domain = config.useGlobalDomain\r\n      ? this.globalDomain\r\n      : this.defaultDomain;\r\n    const api = config.useEnterprise ? this.enterpriseApi : this.defaultApi;\r\n    const callback = this.getCallbackName(config.useEnterprise);\r\n\r\n    return `https://www.${domain}/recaptcha/${api}?onload=${callback}&render=${render}${this.getLanguageParam(\r\n      language\r\n    )}`;\r\n  }\r\n}\r\n","import {\r\n  AfterViewChecked,\r\n  AfterViewInit,\r\n  Directive,\r\n  ElementRef,\r\n  EventEmitter,\r\n  Injector,\r\n  Input,\r\n  NgZone,\r\n  OnChanges,\r\n  Output,\r\n  Renderer2,\r\n  SimpleChanges\r\n} from \"@angular/core\";\r\nimport {\r\n  AbstractControl,\r\n  ControlValueAccessor,\r\n  NgControl,\r\n} from \"@angular/forms\";\r\n\r\nimport { ReCaptchaType } from \"../models/recaptcha-type.enum\";\r\nimport { ScriptService } from \"../services/script.service\";\r\n\r\n@Directive()\r\nexport abstract class BaseReCaptchaComponentDirective\r\n  implements OnChanges, ControlValueAccessor, AfterViewInit, AfterViewChecked\r\n{\r\n  /**\r\n   * Prefix of the captcha element\r\n   */\r\n  protected readonly captchaElemPrefix = \"ngx_captcha_id_\";\r\n\r\n  private setupCaptcha: boolean = true;\r\n\r\n  /**\r\n   * Google's site key.\r\n   * You can find this under https://www.google.com/recaptcha\r\n   */\r\n  @Input() siteKey?: string;\r\n\r\n  /**\r\n   * Indicates if global domain 'recaptcha.net' should be used instead of default domain ('google.com')\r\n   */\r\n  @Input() useGlobalDomain: boolean = false;\r\n\r\n  @Input() useEnterprise: boolean = false;\r\n\r\n  /**\r\n   * Type\r\n   */\r\n  @Input() type: \"audio\" | \"image\" = \"image\";\r\n\r\n  /**\r\n   * Language code. Auto-detects the user's language if unspecified.\r\n   */\r\n  @Input() hl?: string;\r\n\r\n  /**\r\n   * Tab index\r\n   */\r\n  @Input() tabIndex = 0;\r\n\r\n  /**\r\n   * Called when captcha receives successful response.\r\n   * Captcha response token is passed to event.\r\n   */\r\n  @Output() success = new EventEmitter<string>();\r\n\r\n  /**\r\n   * Called when captcha is loaded. Event receives id of the captcha\r\n   */\r\n  @Output() load = new EventEmitter<void>();\r\n\r\n  /**\r\n   * Called when captcha is reset.\r\n   */\r\n  @Output() reset = new EventEmitter<void>();\r\n\r\n  /**\r\n   * Called when captcha is loaded & ready. I.e. when you need to execute captcha on component load.\r\n   */\r\n  @Output() ready = new EventEmitter<void>();\r\n\r\n  /**\r\n   * Error callback\r\n   */\r\n  @Output() error = new EventEmitter<void>();\r\n\r\n  /**\r\n   * Expired callback\r\n   */\r\n  @Output() expire = new EventEmitter<void>();\r\n\r\n  abstract captchaWrapperElem?: ElementRef;\r\n\r\n  /**\r\n   * Indicates if captcha should be set on load\r\n   */\r\n  private setupAfterLoad = false;\r\n\r\n  /**\r\n   * Captcha element\r\n   */\r\n  protected captchaElem?: HTMLElement;\r\n\r\n  /**\r\n   * Id of the captcha elem\r\n   */\r\n  protected captchaId?: number;\r\n\r\n  /**\r\n   * Holds last response value\r\n   */\r\n  protected currentResponse?: string;\r\n\r\n  /**\r\n   * If enabled, captcha will reset after receiving success response. This is useful\r\n   * when invisible captcha need to be resolved multiple times on same page\r\n   */\r\n  protected resetCaptchaAfterSuccess = false;\r\n\r\n  /**\r\n   * Captcha type\r\n   */\r\n  protected abstract recaptchaType: ReCaptchaType;\r\n\r\n  /**\r\n   * Required by ControlValueAccessor\r\n   */\r\n  protected onChange: (value: string | undefined) => void = (val) => {};\r\n  protected onTouched: (value: string | undefined) => void = (val) => {};\r\n\r\n  /**\r\n   * Indicates if captcha is loaded\r\n   */\r\n  public isLoaded = false;\r\n\r\n  /**\r\n   * Reference to global reCaptcha API\r\n   */\r\n  public reCaptchaApi?: any;\r\n\r\n  /**\r\n   * Id of the DOM element wrapping captcha\r\n   */\r\n  public captchaElemId?: string;\r\n\r\n  /**\r\n   * Form Control to be enable usage in reactive forms\r\n   */\r\n  public control?: AbstractControl | null;\r\n\r\n  protected constructor(\r\n    protected renderer: Renderer2,\r\n    protected zone: NgZone,\r\n    protected injector: Injector,\r\n    protected scriptService: ScriptService\r\n  ) {}\r\n\r\n  ngAfterViewInit() {\r\n    this.control = this.injector.get<NgControl | undefined>(\r\n      NgControl,\r\n      undefined,\r\n      { optional: true }\r\n    )?.control;\r\n  }\r\n\r\n  ngAfterViewChecked(): void {\r\n    if (this.setupCaptcha) {\r\n      this.setupCaptcha = false;\r\n      this.setupComponent();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Gets reCaptcha properties\r\n   */\r\n  protected abstract getCaptchaProperties(): any;\r\n\r\n  /**\r\n   * Used for captcha specific setup\r\n   */\r\n  protected abstract captchaSpecificSetup(): void;\r\n\r\n  ngOnChanges(changes: SimpleChanges): void {\r\n    // cleanup scripts if language changed because they need to be reloaded\r\n    if (changes && changes.hl) {\r\n      // cleanup scripts when language changes\r\n      if (\r\n        !changes.hl.firstChange &&\r\n        changes.hl.currentValue !== changes.hl.previousValue\r\n      ) {\r\n        this.scriptService.cleanup();\r\n      }\r\n    }\r\n\r\n    if (changes && changes.useGlobalDomain) {\r\n      // cleanup scripts when domain changes\r\n      if (\r\n        !changes.useGlobalDomain.firstChange &&\r\n        changes.useGlobalDomain.currentValue !==\r\n          changes.useGlobalDomain.previousValue\r\n      ) {\r\n        this.scriptService.cleanup();\r\n      }\r\n    }\r\n\r\n    this.setupCaptcha = true;\r\n  }\r\n\r\n  /**\r\n   * Gets captcha response as per reCaptcha docs\r\n   */\r\n  getResponse(): string {\r\n    return this.reCaptchaApi.getResponse(this.captchaId);\r\n  }\r\n\r\n  /**\r\n   * Gets Id of captcha widget\r\n   */\r\n  getCaptchaId(): number | undefined {\r\n    return this.captchaId;\r\n  }\r\n\r\n  /**\r\n   * Resets captcha\r\n   */\r\n  resetCaptcha(): void {\r\n    this.zone.run(() => {\r\n      // reset captcha using Google js api\r\n      this.reCaptchaApi.reset();\r\n\r\n      // required due to forms\r\n      this.onChange(undefined);\r\n      this.onTouched(undefined);\r\n\r\n      // trigger reset event\r\n      this.reset.next();\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Gets last submitted captcha response\r\n   */\r\n  getCurrentResponse(): string | undefined {\r\n    return this.currentResponse;\r\n  }\r\n\r\n  /**\r\n   * Reload captcha. Useful when properties (i.e. theme) changed and captcha need to reflect them\r\n   */\r\n  reloadCaptcha(): void {\r\n    this.setupComponent();\r\n  }\r\n\r\n  protected ensureCaptchaElem(captchaElemId: string): void {\r\n    const captchaElem = document.getElementById(captchaElemId);\r\n\r\n    if (!captchaElem) {\r\n      throw Error(`Captcha element with id '${captchaElemId}' was not found`);\r\n    }\r\n\r\n    // assign captcha alem\r\n    this.captchaElem = captchaElem;\r\n  }\r\n\r\n  /**\r\n   * Responsible for instantiating captcha element\r\n   */\r\n  protected renderReCaptcha(): void {\r\n    // run outside angular zone due to timeout issues when testing\r\n    // details: https://github.com/Enngage/ngx-captcha/issues/26\r\n    this.zone.runOutsideAngular(() => {\r\n      // to fix reCAPTCHA placeholder element must be an element or id\r\n      // https://github.com/Enngage/ngx-captcha/issues/96\r\n      setTimeout(() => {\r\n        this.captchaId = this.reCaptchaApi.render(\r\n          this.captchaElemId,\r\n          this.getCaptchaProperties()\r\n        );\r\n        this.ready.next();\r\n      }, 0);\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Called when captcha receives response\r\n   * @param callback Callback\r\n   */\r\n  protected handleCallback(callback: any): void {\r\n    this.currentResponse = callback;\r\n    this.success.next(callback);\r\n\r\n    this.zone.run(() => {\r\n      this.onChange(callback);\r\n      this.onTouched(callback);\r\n    });\r\n\r\n    if (this.resetCaptchaAfterSuccess) {\r\n      this.resetCaptcha();\r\n    }\r\n  }\r\n\r\n  private getPseudoUniqueNumber(): number {\r\n    return new Date().getUTCMilliseconds() + Math.floor(Math.random() * 9999);\r\n  }\r\n\r\n  private setupComponent(): void {\r\n    // captcha specific setup\r\n    this.captchaSpecificSetup();\r\n\r\n    // create captcha wrapper\r\n    this.createAndSetCaptchaElem();\r\n\r\n    this.scriptService.registerCaptchaScript(\r\n      {\r\n        useGlobalDomain: this.useGlobalDomain,\r\n        useEnterprise: this.useEnterprise,\r\n      },\r\n      \"explicit\",\r\n      (grecaptcha) => {\r\n        this.onloadCallback(grecaptcha);\r\n      },\r\n      this.hl\r\n    );\r\n  }\r\n\r\n  /**\r\n   * Called when google's recaptcha script is ready\r\n   */\r\n  private onloadCallback(grecapcha: any): void {\r\n    // assign reference to reCaptcha Api once its loaded\r\n    this.reCaptchaApi = grecapcha;\r\n\r\n    if (!this.reCaptchaApi) {\r\n      throw Error(`ReCaptcha Api was not initialized correctly`);\r\n    }\r\n\r\n    // loaded flag\r\n    this.isLoaded = true;\r\n\r\n    // fire load event\r\n    this.load.next();\r\n\r\n    // render captcha\r\n    this.renderReCaptcha();\r\n\r\n    // setup component if it was flagged as such\r\n    if (this.setupAfterLoad) {\r\n      this.setupAfterLoad = false;\r\n      this.setupComponent();\r\n    }\r\n  }\r\n\r\n  private generateNewElemId(): string {\r\n    return this.captchaElemPrefix + this.getPseudoUniqueNumber();\r\n  }\r\n\r\n  private createAndSetCaptchaElem(): void {\r\n    // generate new captcha id\r\n    this.captchaElemId = this.generateNewElemId();\r\n\r\n    if (!this.captchaElemId) {\r\n      throw Error(`Captcha elem Id is not set`);\r\n    }\r\n\r\n    if (!this.captchaWrapperElem) {\r\n      throw Error(`Captcha DOM element is not initialized`);\r\n    }\r\n\r\n    // remove old html\r\n    this.captchaWrapperElem.nativeElement.innerHTML = \"\";\r\n\r\n    // create new wrapper for captcha\r\n    const newElem = this.renderer.createElement(\"div\");\r\n    newElem.id = this.captchaElemId;\r\n\r\n    this.renderer.appendChild(this.captchaWrapperElem.nativeElement, newElem);\r\n\r\n    // when use captcha in cdk stepper then throwing error Captcha element with id 'ngx_captcha_id_XXXX' not found\r\n    // to fix it checking ensureCaptchaElem in timeout so that its check in next call and its able to find element\r\n    setTimeout(() => {\r\n      // update captcha elem\r\n      if (this.captchaElemId) {\r\n        this.ensureCaptchaElem(this.captchaElemId);\r\n      }\r\n    }, 0);\r\n  }\r\n\r\n  /**\r\n   * To be aligned with the ControlValueAccessor interface we need to implement this method\r\n   * However as we don't want to update the recaptcha, this doesn't need to be implemented\r\n   */\r\n  public writeValue(obj: any): void {}\r\n\r\n  /**\r\n   * This method helps us tie together recaptcha and our formControl values\r\n   */\r\n  public registerOnChange(fn: any): void {\r\n    this.onChange = fn;\r\n  }\r\n\r\n  /**\r\n   * At some point we might be interested whether the user has touched our component\r\n   */\r\n  public registerOnTouched(fn: any): void {\r\n    this.onTouched = fn;\r\n  }\r\n\r\n  /**\r\n   * Handles error callback\r\n   */\r\n  protected handleErrorCallback(): void {\r\n    this.zone.run(() => {\r\n      this.onChange(undefined);\r\n      this.onTouched(undefined);\r\n    });\r\n\r\n    this.error.next();\r\n  }\r\n\r\n  /**\r\n   * Handles expired callback\r\n   */\r\n  protected handleExpireCallback(): void {\r\n    this.expire.next();\r\n\r\n    // reset captcha on expire callback\r\n    this.resetCaptcha();\r\n  }\r\n}\r\n","export enum ReCaptchaType {\r\n\r\n    InvisibleReCaptcha,\r\n    ReCaptcha2\r\n}\r\n","import {\r\n  Component,\r\n  ElementRef,\r\n  forwardRef,\r\n  Injector,\r\n  Input,\r\n  NgZone,\r\n  OnChanges,\r\n  Renderer2,\r\n  SimpleChanges,\r\n  ViewChild,\r\n} from '@angular/core';\r\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\r\n\r\nimport { ReCaptchaType } from '../models/recaptcha-type.enum';\r\nimport { ScriptService } from '../services/script.service';\r\nimport { BaseReCaptchaComponentDirective } from './base-re-captcha-component.directive';\r\n\r\n@Component({\r\n    selector: 'ngx-invisible-recaptcha',\r\n    template: `\r\n  <div #captchaWrapperElem></div>`,\r\n    providers: [\r\n        {\r\n            provide: NG_VALUE_ACCESSOR,\r\n            useExisting: forwardRef(() => InvisibleReCaptchaComponent),\r\n            multi: true,\r\n        }\r\n    ],\r\n    standalone: false\r\n})\r\nexport class InvisibleReCaptchaComponent extends BaseReCaptchaComponentDirective implements OnChanges {\r\n\r\n  /**\r\n   * This size representing invisible captcha\r\n   */\r\n  protected readonly size = 'invisible';\r\n\r\n  /**\r\n   * Theme\r\n   */\r\n  @Input() theme: 'dark' | 'light' = 'light';\r\n\r\n  /**\r\n   * Badge\r\n   */\r\n  @Input() badge: 'bottomright' | 'bottomleft' | 'inline' = 'bottomright';\r\n\r\n  @ViewChild('captchaWrapperElem', { static: false }) captchaWrapperElem?: ElementRef;\r\n\r\n  protected recaptchaType: ReCaptchaType = ReCaptchaType.InvisibleReCaptcha;\r\n\r\n  constructor(\r\n    protected renderer: Renderer2,\r\n    protected zone: NgZone,\r\n    protected injector: Injector,\r\n    protected scriptService: ScriptService\r\n  ) {\r\n    super(renderer, zone, injector, scriptService);\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges): void {\r\n    super.ngOnChanges(changes);\r\n  }\r\n\r\n  /**\r\n   * Programatically invoke the reCAPTCHA check. Used if the invisible reCAPTCHA is on a div instead of a button.\r\n   */\r\n  execute(): void {\r\n    // execute captcha\r\n    this.zone.runOutsideAngular(() => this.reCaptchaApi.execute(this.captchaId));\r\n  }\r\n\r\n  protected captchaSpecificSetup(): void {\r\n  }\r\n\r\n  /**\r\n  * Gets reCaptcha properties\r\n  */\r\n  protected getCaptchaProperties(): any {\r\n    return {\r\n      'sitekey': this.siteKey,\r\n      'callback': (response: any) => this.zone.run(() => this.handleCallback(response)),\r\n      'expired-callback': () => this.zone.run(() => this.handleExpireCallback()),\r\n      'error-callback': () => this.zone.run(() => this.handleErrorCallback()),\r\n      'badge': this.badge,\r\n      'type': this.type,\r\n      'tabindex': this.tabIndex,\r\n      'size': this.size,\r\n      'theme': this.theme\r\n    };\r\n  }\r\n\r\n\r\n}\r\n\r\n","import {\r\n  Component,\r\n  ElementRef,\r\n  forwardRef,\r\n  Injector,\r\n  Input,\r\n  NgZone,\r\n  OnChanges,\r\n  OnDestroy,\r\n  Renderer2,\r\n  SimpleChanges,\r\n  ViewChild,\r\n} from '@angular/core';\r\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\r\n\r\nimport { ReCaptchaType } from '../models/recaptcha-type.enum';\r\nimport { ScriptService } from '../services/script.service';\r\nimport { BaseReCaptchaComponentDirective } from './base-re-captcha-component.directive';\r\n\r\n@Component({\r\n    selector: 'ngx-recaptcha2',\r\n    template: `\r\n  <div #captchaWrapperElem></div>`,\r\n    providers: [\r\n        {\r\n            provide: NG_VALUE_ACCESSOR,\r\n            useExisting: forwardRef(() => ReCaptcha2Component),\r\n            multi: true,\r\n        }\r\n    ],\r\n    standalone: false\r\n})\r\nexport class ReCaptcha2Component extends BaseReCaptchaComponentDirective implements OnChanges, OnDestroy {\r\n\r\n  /**\r\n  * Name of the global expire callback\r\n  */\r\n  protected readonly windowOnErrorCallbackProperty = 'ngx_captcha_error_callback';\r\n\r\n  /**\r\n  * Name of the global error callback\r\n  */\r\n  protected readonly windowOnExpireCallbackProperty = 'ngx_captcha_expire_callback';\r\n\r\n  /**\r\n   * Theme\r\n   */\r\n  @Input() theme: 'dark' | 'light' = 'light';\r\n\r\n  /**\r\n  * Size\r\n  */\r\n  @Input() size: 'compact' | 'normal' = 'normal';\r\n\r\n  @ViewChild('captchaWrapperElem', { static: false}) captchaWrapperElem?: ElementRef;\r\n\r\n  protected recaptchaType: ReCaptchaType = ReCaptchaType.ReCaptcha2;\r\n\r\n  constructor(\r\n    protected renderer: Renderer2,\r\n    protected zone: NgZone,\r\n    protected injector: Injector,\r\n    protected scriptService: ScriptService,\r\n  ) {\r\n    super(renderer, zone, injector, scriptService);\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges): void {\r\n    super.ngOnChanges(changes);\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    (window as any)[this.windowOnErrorCallbackProperty] = {};\r\n    (window as any)[this.windowOnExpireCallbackProperty] = {};\r\n  }\r\n\r\n  protected captchaSpecificSetup(): void {\r\n    this.registerCallbacks();\r\n  }\r\n\r\n  /**\r\n   * Gets reCaptcha properties\r\n  */\r\n  protected getCaptchaProperties(): any {\r\n    return {\r\n      'sitekey': this.siteKey,\r\n      'callback': (response: any) => this.zone.run(() => this.handleCallback(response)),\r\n      'expired-callback': () => this.zone.run(() => this.handleExpireCallback()),\r\n      'error-callback': () => this.zone.run(() => this.handleErrorCallback()),\r\n      'theme': this.theme,\r\n      'type': this.type,\r\n      'size': this.size,\r\n      'tabindex': this.tabIndex\r\n    };\r\n  }\r\n\r\n  /**\r\n   * Registers global callbacks\r\n  */\r\n  private registerCallbacks(): void {\r\n    (window as any)[this.windowOnErrorCallbackProperty] = super.handleErrorCallback.bind(this);\r\n    (window as any)[this.windowOnExpireCallbackProperty] = super.handleExpireCallback.bind(this);\r\n  }\r\n}\r\n\r\n","import { Injectable, NgZone } from \"@angular/core\";\r\n\r\nimport { ScriptService } from \"./script.service\";\r\nimport { RecaptchaConfiguration } from \"../models/recaptcha-configuration\";\r\n\r\n@Injectable({\r\n  providedIn: \"root\",\r\n})\r\nexport class ReCaptchaV3Service {\r\n  constructor(protected scriptService: ScriptService, protected zone: NgZone) {}\r\n\r\n  /**\r\n   * Executes reCaptcha v3/Enterprise with given action and passes token via callback. You need to verify\r\n   * this callback in your backend to get meaningful results.\r\n   *\r\n   * For more information see https://developers.google.com/recaptcha/docs/v3\r\n   * For enterprise see https://cloud.google.com/recaptcha-enterprise/docs\r\n   *\r\n   * @param siteKey Site key found in your google admin panel\r\n   * @param action Action to log\r\n   * @param callback Callback function to to handle token\r\n   * @param config Optional configuration like useGlobalDomain to be provided\r\n   * @param errorCallback Optional Callback function to handle errors\r\n   */\r\n  execute(\r\n    siteKey: string,\r\n    action: string,\r\n    callback: (token: string) => void,\r\n    config?: RecaptchaConfiguration,\r\n    errorCallback?: (error: any) => void\r\n  ): void {\r\n    this.executeAsPromise(siteKey, action, config)\r\n      .then(callback)\r\n      .catch((error) =>\r\n        errorCallback ? errorCallback(error) : console.error(error)\r\n      );\r\n  }\r\n\r\n  /**\r\n   * Executes reCaptcha v3/Enterprise with given action and returns token via Promise. You need to verify\r\n   * this token in your backend to get meaningful results.\r\n   *\r\n   * For more information see https://developers.google.com/recaptcha/docs/v3\r\n   * For enterprise see https://cloud.google.com/recaptcha-enterprise/docs\r\n   *\r\n   * @param siteKey Site key found in your google admin panel\r\n   * @param action Action to log\r\n   * @param config Optional configuration like useGlobalDomain to be provided\r\n   */\r\n  executeAsPromise(\r\n    siteKey: string,\r\n    action: string,\r\n    config?: RecaptchaConfiguration\r\n  ): Promise<string> {\r\n    return new Promise((resolve, reject) => {\r\n      const configuration = config || {};\r\n\r\n      const onRegister = (grecaptcha: any) => {\r\n        this.zone.runOutsideAngular(() => {\r\n          try {\r\n            grecaptcha\r\n              .execute(siteKey, { action })\r\n              .then((token: any) => this.zone.run(() => resolve(token)));\r\n          } catch (error) {\r\n            reject(error);\r\n          }\r\n        });\r\n      };\r\n\r\n      this.scriptService.registerCaptchaScript(\r\n        configuration,\r\n        siteKey,\r\n        onRegister\r\n      );\r\n    });\r\n  }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\n\r\nimport { InvisibleReCaptchaComponent } from './components/invisible-recaptcha.component';\r\nimport { ReCaptcha2Component } from './components/recaptcha-2.component';\r\nimport { ReCaptchaV3Service } from './services/recaptcha_v3.service';\r\nimport { ScriptService } from './services/script.service';\r\n\r\n@NgModule({\r\n  imports: [\r\n    CommonModule\r\n  ],\r\n  declarations: [\r\n    ReCaptcha2Component,\r\n    InvisibleReCaptchaComponent\r\n  ],\r\n  providers: [\r\n    ScriptService,\r\n    ReCaptchaV3Service\r\n  ],\r\n  exports: [\r\n    ReCaptcha2Component,\r\n    InvisibleReCaptchaComponent\r\n  ]\r\n})\r\nexport class NgxCaptchaModule {\r\n}\r\n\r\n\r\n","/*\r\n * Public API\r\n */\r\n\r\nexport * from './lib/index';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1.ScriptService"],"mappings":"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"}