UNPKG

ng-recaptcha-2

Version:

Angular component for Google reCAPTCHA for Angular v18 and onwards

1 lines 41 kB
{"version":3,"file":"ng-recaptcha-2.mjs","sources":["../../../projects/ng-recaptcha/src/lib/tokens.ts","../../../projects/ng-recaptcha/src/lib/load-script.ts","../../../projects/ng-recaptcha/src/lib/recaptcha-loader.service.ts","../../../projects/ng-recaptcha/src/lib/recaptcha.component.ts","../../../projects/ng-recaptcha/src/lib/recaptcha-common.module.ts","../../../projects/ng-recaptcha/src/lib/recaptcha.module.ts","../../../projects/ng-recaptcha/src/lib/recaptcha-v3.service.ts","../../../projects/ng-recaptcha/src/lib/recaptcha-v3.module.ts","../../../projects/ng-recaptcha/src/lib/recaptcha-value-accessor.directive.ts","../../../projects/ng-recaptcha/src/lib/recaptcha-forms.module.ts","../../../projects/ng-recaptcha/src/index.ts","../../../projects/ng-recaptcha/src/ng-recaptcha-2.ts"],"sourcesContent":["import { InjectionToken } from \"@angular/core\";\n\nimport { RecaptchaSettings } from \"./recaptcha-settings\";\n\n/** @deprecated Use `LOADER_OPTIONS` instead. See `RecaptchaLoaderOptions.onBeforeLoad` */\nexport const RECAPTCHA_LANGUAGE = new InjectionToken<string>(\"recaptcha-language\");\n/** @deprecated Use `LOADER_OPTIONS` instead. See `RecaptchaLoaderOptions.onBeforeLoad` */\nexport const RECAPTCHA_BASE_URL = new InjectionToken<string>(\"recaptcha-base-url\");\n/** @deprecated Use `LOADER_OPTIONS` instead. See `RecaptchaLoaderOptions.onBeforeLoad` */\nexport const RECAPTCHA_NONCE = new InjectionToken<string>(\"recaptcha-nonce-tag\");\nexport const RECAPTCHA_SETTINGS = new InjectionToken<RecaptchaSettings>(\"recaptcha-settings\");\nexport const RECAPTCHA_V3_SITE_KEY = new InjectionToken<string>(\"recaptcha-v3-site-key\");\n\n/**\n * Specifies the options for loading the reCAPTCHA script tag.\n */\nexport type RecaptchaLoaderOptions = {\n /**\n * Invoked before the `<script>` tag is appended to the DOM.\n * Use this function as an opportunity to set `nonce`, as well as modify the URL of the tag.\n *\n * Use the `url.searchParams` to set additional query string attributes (including reCAPTCHA language),\n * or use an entirely different base URL altogether.\n *\n * The URL that you provide will then properly set the `\"render\"` and `\"onload\"` attributes which are required for proper `ng-recaptcha` wire-up.\n *\n * @param url the current URL that was composed. Either modify it in-place, or return a completely new URL.\n * @returns the final URL that is going to be used as the `src` for the `<script>` tag, along with (optionally) a nonce.\n *\n * @example\n * Provide nonce:\n * ```ts\n * {\n * provide: RECAPTCHA_LOADER_OPTIONS,\n * useValue: {\n * onBeforeLoad(url) {\n * return {\n * url,\n * nonce: \"YOUR_NONCE\"\n * };\n * }\n * }\n * }\n * ```\n *\n * Set the reCAPTCHA language:\n * ```ts\n * {\n * provide: RECAPTCHA_LOADER_OPTIONS,\n * useValue: {\n * onBeforeLoad(url) {\n * url.searchParams.set(\"hl\", \"en-GB\")\n *\n * return { url };\n * }\n * }\n * }\n * ```\n *\n * Use a different base URL for loading reCAPTCHA\n * ```ts\n * {\n * provide: RECAPTCHA_LOADER_OPTIONS,\n * useValue: {\n * onBeforeLoad(_url) {\n * const chinaCompatibleUrl = new URL(\"https://www.recaptcha.net/recaptcha/api.js\");\n * // optionally, set the locale:\n * // chinaCompatibleUrl.searchParams.set(\"hl\", \"zh-CN\");\n *\n * return {\n * url: chinaCompatibleUrl\n * };\n * }\n * }\n * }\n * ```\n */\n onBeforeLoad?(url: URL): { url: URL; nonce?: string };\n\n /**\n * Allows you to change the `grecaptcha` that the `ng-recaptcha` will be relying on.\n * This method is useful when you need to use `grecaptcha.enterprise` instead of the base `grecaptcha`\n *\n * @param recaptcha the value of `window.grecaptcha` upon script load.\n * @returns the {ReCaptchaV2.ReCaptcha} instance that the `ng-recaptcha` lib will use.\n *\n * @example\n * Using the Enterprise version of `grecaptcha`:\n *\n * ```ts\n * {\n * provide: RECAPTCHA_LOADER_OPTIONS,\n * useValue: {\n * onBeforeLoad() {\n * const recaptchaEnterpriseUrl = new URL(\"https://www.google.com/recaptcha/enterprise.js\");\n * // optionally, if you're using the reCAPTCHA session-tokens, set the `&waf=session` param,\n * // see https://cloud.google.com/recaptcha-enterprise/docs/implement-waf-ca#session-token\n * // recaptchaEnterpriseUrl.searchParams.set(\"waf\", \"session\");\n *\n * return {\n * url: recaptchaEnterpriseUrl,\n * }\n * },\n * onLoaded(recaptcha) {\n * return recaptcha.enterprise;\n * }\n * }\n * }\n * ```\n */\n onLoaded?(recaptcha: ReCaptchaV2.ReCaptcha): ReCaptchaV2.ReCaptcha;\n};\n\n/**\n * See the documentation for `RecaptchaLoaderOptions`.\n */\nexport const RECAPTCHA_LOADER_OPTIONS = new InjectionToken<RecaptchaLoaderOptions>(\"recaptcha-loader-options\");\n","import { RecaptchaLoaderOptions } from \"./tokens\";\n\ndeclare global {\n interface Window {\n ng2recaptchaloaded?(): void;\n }\n}\n\nexport type RenderMode = \"explicit\" | { key: string };\n\nfunction loadScript(\n this: void,\n renderMode: RenderMode,\n onBeforeLoad: (url: URL) => { url: URL; nonce?: string },\n onLoaded: (grecaptcha: ReCaptchaV2.ReCaptcha) => void,\n { url, lang, nonce }: { url?: string; lang?: string; nonce?: string } = {},\n): void {\n window.ng2recaptchaloaded = () => {\n onLoaded(grecaptcha);\n };\n const script = document.createElement(\"script\");\n script.innerHTML = \"\";\n\n const { url: baseUrl, nonce: onBeforeLoadNonce } = onBeforeLoad(\n new URL(url || \"https://www.google.com/recaptcha/api.js\"),\n );\n baseUrl.searchParams.set(\"render\", renderMode === \"explicit\" ? renderMode : renderMode.key);\n baseUrl.searchParams.set(\"onload\", \"ng2recaptchaloaded\");\n baseUrl.searchParams.set(\"trustedtypes\", \"true\");\n if (lang) {\n baseUrl.searchParams.set(\"hl\", lang);\n }\n\n script.src = baseUrl.href;\n\n const nonceValue = onBeforeLoadNonce || nonce;\n\n if (nonceValue) {\n script.setAttribute(\"nonce\", nonceValue);\n }\n script.async = true;\n script.defer = true;\n document.head.appendChild(script);\n}\n\nfunction newLoadScript(this:void, {\n v3SiteKey,\n onBeforeLoad,\n onLoaded,\n}: { v3SiteKey: string | undefined; onLoaded(recaptcha: ReCaptchaV2.ReCaptcha): void } & Pick<\n Required<RecaptchaLoaderOptions>,\n \"onBeforeLoad\"\n>) {\n const renderMode: RenderMode = v3SiteKey ? { key: v3SiteKey } : \"explicit\";\n\n loader.loadScript(renderMode, onBeforeLoad, onLoaded);\n}\n\nexport const loader = { loadScript, newLoadScript };\n","import { isPlatformBrowser } from \"@angular/common\";\nimport { Inject, Injectable, Optional, PLATFORM_ID } from \"@angular/core\";\nimport { BehaviorSubject, Observable, of } from \"rxjs\";\nimport { filter } from \"rxjs/operators\";\n\nimport { loader } from \"./load-script\";\nimport {\n RECAPTCHA_LOADER_OPTIONS,\n RECAPTCHA_BASE_URL,\n RECAPTCHA_LANGUAGE,\n RECAPTCHA_NONCE,\n RECAPTCHA_V3_SITE_KEY,\n RecaptchaLoaderOptions,\n} from \"./tokens\";\n\nfunction toNonNullObservable<T>(subject: BehaviorSubject<T | null>): Observable<T> {\n return subject.asObservable().pipe(filter((value) => value !== null));\n}\n\n@Injectable()\nexport class RecaptchaLoaderService {\n /**\n * @internal\n * @nocollapse\n */\n private static ready: BehaviorSubject<ReCaptchaV2.ReCaptcha | null> | null = null;\n\n public ready: Observable<ReCaptchaV2.ReCaptcha>;\n\n /** @internal */\n private language?: string;\n /** @internal */\n private baseUrl?: string;\n /** @internal */\n private nonce?: string;\n /** @internal */\n private v3SiteKey?: string;\n /** @internal */\n private options?: RecaptchaLoaderOptions;\n\n constructor(\n // eslint-disable-next-line @typescript-eslint/ban-types\n @Inject(PLATFORM_ID) private readonly platformId: Object,\n // eslint-disable-next-line deprecation/deprecation\n @Optional() @Inject(RECAPTCHA_LANGUAGE) language?: string,\n // eslint-disable-next-line deprecation/deprecation\n @Optional() @Inject(RECAPTCHA_BASE_URL) baseUrl?: string,\n // eslint-disable-next-line deprecation/deprecation\n @Optional() @Inject(RECAPTCHA_NONCE) nonce?: string,\n @Optional() @Inject(RECAPTCHA_V3_SITE_KEY) v3SiteKey?: string,\n @Optional() @Inject(RECAPTCHA_LOADER_OPTIONS) options?: RecaptchaLoaderOptions,\n ) {\n this.language = language;\n this.baseUrl = baseUrl;\n this.nonce = nonce;\n this.v3SiteKey = v3SiteKey;\n this.options = options;\n const subject = this.init();\n this.ready = subject ? toNonNullObservable(subject) : of();\n }\n\n /** @internal */\n private init(): BehaviorSubject<ReCaptchaV2.ReCaptcha | null> | undefined {\n if (RecaptchaLoaderService.ready) {\n return RecaptchaLoaderService.ready;\n }\n\n if (!isPlatformBrowser(this.platformId)) {\n return undefined;\n }\n\n const subject = new BehaviorSubject<ReCaptchaV2.ReCaptcha | null>(null);\n RecaptchaLoaderService.ready = subject;\n\n loader.newLoadScript({\n v3SiteKey: this.v3SiteKey,\n onBeforeLoad: (url) => {\n if (this.options?.onBeforeLoad) {\n return this.options.onBeforeLoad(url);\n }\n\n const newUrl = new URL(this.baseUrl ?? url);\n\n if (this.language) {\n newUrl.searchParams.set(\"hl\", this.language);\n }\n\n return {\n url: newUrl,\n nonce: this.nonce,\n };\n },\n onLoaded: (recaptcha) => {\n let value = recaptcha;\n if (this.options?.onLoaded) {\n value = this.options.onLoaded(recaptcha);\n }\n\n subject.next(value);\n },\n });\n\n return subject;\n }\n}\n","import {\n AfterViewInit,\n Component,\n ElementRef,\n HostBinding,\n Inject,\n model,\n NgZone,\n OnDestroy,\n Optional,\n output,\n ChangeDetectionStrategy,\n} from \"@angular/core\";\nimport { Subscription } from \"rxjs\";\n\nimport { RecaptchaLoaderService } from \"./recaptcha-loader.service\";\nimport { RecaptchaSettings } from \"./recaptcha-settings\";\nimport { RECAPTCHA_SETTINGS } from \"./tokens\";\n\nlet nextId = 0;\n\nexport type NeverUndefined<T> = T extends undefined ? never : T;\n\nexport type RecaptchaErrorParameters = Parameters<NeverUndefined<ReCaptchaV2.Parameters[\"error-callback\"]>>;\n\n@Component({\n exportAs: \"reCaptcha\",\n selector: \"re-captcha\",\n template: ``,\n changeDetection: ChangeDetectionStrategy.Eager,\n standalone: false,\n})\nexport class RecaptchaComponent implements AfterViewInit, OnDestroy {\n @HostBinding(\"attr.id\")\n public id = model<string>(`ngrecaptcha-${nextId++}`);\n\n public siteKey = model<string>();\n public theme = model<ReCaptchaV2.Theme>();\n public type = model<ReCaptchaV2.Type>();\n public size = model<ReCaptchaV2.Size>();\n public tabIndex = model<number>();\n public badge = model<ReCaptchaV2.Badge>();\n public errorMode = model<\"handled\" | \"default\">(\"default\");\n\n public resolved = output<string | null>();\n /**\n * @deprecated `(error) output will be removed in the next major version. Use (errored) instead\n */\n // eslint-disable-next-line @angular-eslint/no-output-native\n public error = output<RecaptchaErrorParameters>();\n public errored = output<RecaptchaErrorParameters>();\n\n /** @internal */\n private subscription: Subscription | undefined;\n /** @internal */\n private widget: number | null = null;\n /** @internal */\n private grecaptcha: ReCaptchaV2.ReCaptcha | undefined;\n /** @internal */\n private executeRequested: boolean = false;\n\n constructor(\n private elementRef: ElementRef<HTMLElement>,\n private loader: RecaptchaLoaderService,\n private zone: NgZone,\n @Optional() @Inject(RECAPTCHA_SETTINGS) settings?: RecaptchaSettings,\n ) {\n if (settings) {\n this.siteKey.set(settings.siteKey);\n if (settings.theme) {\n this.theme.set(settings.theme);\n }\n if (settings.type) {\n this.type.set(settings.type);\n }\n if (settings.size) {\n this.size.set(settings.size);\n }\n if (settings.badge) {\n this.badge.set(settings.badge);\n }\n }\n }\n\n public ngAfterViewInit(): void {\n this.subscription = this.loader.ready.subscribe((grecaptcha: ReCaptchaV2.ReCaptcha) => {\n if (grecaptcha != null && grecaptcha.render instanceof Function) {\n this.grecaptcha = grecaptcha;\n this.renderRecaptcha();\n }\n });\n }\n\n public ngOnDestroy(): void {\n // reset the captcha to ensure it does not leave anything behind\n // after the component is no longer needed\n this.grecaptchaReset();\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n\n /**\n * Executes the invisible recaptcha.\n * Does nothing if component's size is not set to \"invisible\".\n */\n public execute(): void {\n if (this.size() !== \"invisible\") {\n return;\n }\n\n if (this.widget != null) {\n void this.grecaptcha?.execute(this.widget);\n } else {\n // delay execution of recaptcha until it actually renders\n this.executeRequested = true;\n }\n }\n\n public reset(): void {\n if (this.widget != null) {\n if (this.grecaptcha?.getResponse(this.widget)) {\n // Only emit an event in case if something would actually change.\n // That way we do not trigger \"touching\" of the control if someone does a \"reset\"\n // on a non-resolved captcha.\n this.resolved.emit(null);\n }\n\n this.grecaptchaReset();\n }\n }\n\n /**\n * ⚠️ Warning! Use this property at your own risk!\n *\n * While this member is `public`, it is not a part of the component's public API.\n * The semantic versioning guarantees _will not be honored_! Thus, you might find that this property behavior changes in incompatible ways in minor or even patch releases.\n * You are **strongly advised** against using this property.\n * Instead, use more idiomatic ways to get reCAPTCHA value, such as `resolved` EventEmitter, or form-bound methods (ngModel, formControl, and the likes).å\n */\n public get __unsafe_widgetValue(): string | null {\n return this.widget != null && this.grecaptcha ? this.grecaptcha.getResponse(this.widget) : null;\n }\n\n /** @internal */\n private expired() {\n this.resolved.emit(null);\n }\n\n /** @internal */\n private onError(args: RecaptchaErrorParameters) {\n // eslint-disable-next-line deprecation/deprecation\n this.error.emit(args);\n this.errored.emit(args);\n }\n\n /** @internal */\n private captchaResponseCallback(response: string) {\n this.resolved.emit(response);\n }\n\n /** @internal */\n private grecaptchaReset() {\n this.zone.runOutsideAngular(() => this.widget && this.grecaptcha?.reset(this.widget));\n }\n\n /** @internal */\n private renderRecaptcha() {\n // This `any` can be removed after @types/grecaptcha get updated\n const renderOptions: ReCaptchaV2.Parameters = {\n badge: this.badge(),\n callback: (response: string) => {\n this.zone.run(() => this.captchaResponseCallback(response));\n },\n \"expired-callback\": () => {\n this.zone.run(() => this.expired());\n },\n sitekey: this.siteKey(),\n size: this.size(),\n tabindex: this.tabIndex(),\n theme: this.theme(),\n type: this.type(),\n };\n\n if (this.errorMode() === \"handled\") {\n renderOptions[\"error-callback\"] = (...args: RecaptchaErrorParameters) => {\n this.zone.run(() => this.onError(args));\n };\n }\n\n this.widget = this.grecaptcha?.render(this.elementRef.nativeElement, renderOptions) ?? null;\n\n if (this.executeRequested === true) {\n this.executeRequested = false;\n this.execute();\n }\n }\n}\n","import { NgModule } from \"@angular/core\";\n\nimport { RecaptchaComponent } from \"./recaptcha.component\";\n\n@NgModule({\n declarations: [RecaptchaComponent],\n exports: [RecaptchaComponent],\n})\nexport class RecaptchaCommonModule {}\n","import { NgModule } from \"@angular/core\";\n\nimport { RecaptchaCommonModule } from \"./recaptcha-common.module\";\nimport { RecaptchaLoaderService } from \"./recaptcha-loader.service\";\nimport { RecaptchaComponent } from \"./recaptcha.component\";\n\n@NgModule({\n exports: [RecaptchaComponent],\n imports: [RecaptchaCommonModule],\n providers: [RecaptchaLoaderService],\n})\nexport class RecaptchaModule {}\n","import { Inject, Injectable, NgZone } from \"@angular/core\";\nimport { Observable, Subject } from \"rxjs\";\n\nimport { RECAPTCHA_V3_SITE_KEY } from \"./tokens\";\nimport { RecaptchaLoaderService } from \"./recaptcha-loader.service\";\n\nexport interface OnExecuteData {\n /**\n * The name of the action that has been executed.\n */\n action: string;\n /**\n * The token that reCAPTCHA v3 provided when executing the action.\n */\n token: string;\n}\n\nexport interface OnExecuteErrorData {\n /**\n * The name of the action that has been executed.\n */\n action: string;\n /**\n * The error which was encountered\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n error: any;\n}\n\ntype ActionBacklogEntry = [string, Subject<string>];\n\n/**\n * The main service for working with reCAPTCHA v3 APIs.\n *\n * Use the `execute` method for executing a single action, and\n * `onExecute` observable for listening to all actions at once.\n */\n@Injectable()\nexport class ReCaptchaV3Service {\n /** @internal */\n private readonly siteKey: string;\n /** @internal */\n private readonly zone: NgZone;\n /** @internal */\n private actionBacklog: ActionBacklogEntry[] | undefined;\n /** @internal */\n private grecaptcha: ReCaptchaV2.ReCaptcha | undefined;\n\n /** @internal */\n private onExecuteSubject: Subject<OnExecuteData> | undefined;\n /** @internal */\n private onExecuteErrorSubject: Subject<OnExecuteErrorData> | undefined;\n /** @internal */\n private onExecuteObservable: Observable<OnExecuteData> | undefined;\n /** @internal */\n private onExecuteErrorObservable: Observable<OnExecuteErrorData> | undefined;\n\n constructor(\n zone: NgZone,\n public recaptchaLoader: RecaptchaLoaderService,\n @Inject(RECAPTCHA_V3_SITE_KEY) siteKey: string,\n ) {\n this.zone = zone;\n this.siteKey = siteKey;\n\n this.init();\n }\n\n public get onExecute(): Observable<OnExecuteData> {\n if (!this.onExecuteSubject || !this.onExecuteObservable) {\n this.onExecuteSubject = new Subject<OnExecuteData>();\n this.onExecuteObservable = this.onExecuteSubject.asObservable();\n }\n\n return this.onExecuteObservable;\n }\n\n public get onExecuteError(): Observable<OnExecuteErrorData> {\n if (!this.onExecuteErrorSubject || !this.onExecuteErrorObservable) {\n this.onExecuteErrorSubject = new Subject<OnExecuteErrorData>();\n this.onExecuteErrorObservable = this.onExecuteErrorSubject.asObservable();\n }\n\n return this.onExecuteErrorObservable;\n }\n\n /**\n * Executes the provided `action` with reCAPTCHA v3 API.\n * Use the emitted token value for verification purposes on the backend.\n *\n * For more information about reCAPTCHA v3 actions and tokens refer to the official documentation at\n * https://developers.google.com/recaptcha/docs/v3.\n *\n * @param {string} action the action to execute\n * @returns {Observable<string>} an `Observable` that will emit the reCAPTCHA v3 string `token` value whenever ready.\n * The returned `Observable` completes immediately after emitting a value.\n */\n public execute(action: string): Observable<string> {\n const subject = new Subject<string>();\n if (!this.grecaptcha) {\n if (!this.actionBacklog) {\n this.actionBacklog = [];\n }\n\n this.actionBacklog.push([action, subject]);\n } else {\n this.executeActionWithSubject(action, subject);\n }\n\n return subject.asObservable();\n }\n\n /** @internal */\n private executeActionWithSubject(action: string, subject: Subject<string>): void {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const onError = (error: any) => {\n this.zone.run(() => {\n subject.error(error);\n if (this.onExecuteErrorSubject) {\n // We don't know any better at this point, unfortunately, so have to resort to `any`\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n this.onExecuteErrorSubject.next({ action, error });\n }\n });\n };\n\n this.zone.runOutsideAngular(() => {\n try {\n this.grecaptcha?.execute(this.siteKey, { action }).then((token: string) => {\n this.zone.run(() => {\n subject.next(token);\n subject.complete();\n if (this.onExecuteSubject) {\n this.onExecuteSubject.next({ action, token });\n }\n });\n }, onError);\n } catch (e) {\n onError(e);\n }\n });\n }\n\n /** @internal */\n private init() {\n this.recaptchaLoader.ready.subscribe((value) => {\n this.grecaptcha = value;\n if (this.actionBacklog && this.actionBacklog.length > 0) {\n this.actionBacklog.forEach(([action, subject]) => this.executeActionWithSubject(action, subject));\n this.actionBacklog = undefined;\n }\n });\n }\n}\n","import { NgModule } from \"@angular/core\";\n\nimport { ReCaptchaV3Service } from \"./recaptcha-v3.service\";\nimport { RecaptchaLoaderService } from \"./recaptcha-loader.service\";\n\n@NgModule({\n providers: [ReCaptchaV3Service, RecaptchaLoaderService],\n})\nexport class RecaptchaV3Module {}\n","import { Directive, forwardRef, OnDestroy } from \"@angular/core\";\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from \"@angular/forms\";\n\nimport { RecaptchaComponent } from \"./recaptcha.component\";\nimport { Subscription } from \"rxjs\";\n\n@Directive({\n providers: [\n {\n multi: true,\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => RecaptchaValueAccessorDirective),\n },\n ],\n selector: \"re-captcha[formControlName],re-captcha[formControl],re-captcha[ngModel]\",\n standalone: false,\n})\nexport class RecaptchaValueAccessorDirective implements ControlValueAccessor, OnDestroy {\n /** @internal */\n private onChange: undefined | ((value: string | null) => void);\n\n /** @internal */\n private onTouched: (() => void) | undefined;\n\n private requiresControllerReset = false;\n private subscription = new Subscription();\n\n constructor(private host: RecaptchaComponent) {\n this.subscription.add(\n host.resolved.subscribe((value: string | null) => {\n this.onResolve(value);\n }),\n );\n }\n\n public writeValue(value: string): void {\n if (!value) {\n this.host.reset();\n } else {\n // In this case, it is most likely that a form controller has requested to write a specific value into the component.\n // This isn't really a supported case - reCAPTCHA values are single-use, and, in a sense, readonly.\n // What this means is that the form controller has recaptcha control state of X, while reCAPTCHA itself can't \"restore\"\n // to that state. In order to make form controller aware of this discrepancy, and to fix the said misalignment,\n // we'll be telling the controller to \"reset\" the value back to null.\n if (this.host.__unsafe_widgetValue !== value && Boolean(this.host.__unsafe_widgetValue) === false) {\n this.requiresControllerReset = true;\n }\n }\n }\n\n public registerOnChange(fn: (value: string | null) => void): void {\n this.onChange = fn;\n if (this.requiresControllerReset) {\n this.requiresControllerReset = false;\n this.onChange(null);\n }\n }\n public registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n public onResolve($event: string | null): void {\n if (this.onChange) {\n this.onChange($event);\n }\n if (this.onTouched) {\n this.onTouched();\n }\n }\n\n ngOnDestroy(): void {\n this.subscription.unsubscribe();\n }\n}\n","import { NgModule } from \"@angular/core\";\nimport { FormsModule } from \"@angular/forms\";\n\nimport { RecaptchaCommonModule } from \"./recaptcha-common.module\";\nimport { RecaptchaValueAccessorDirective } from \"./recaptcha-value-accessor.directive\";\n\n@NgModule({\n declarations: [RecaptchaValueAccessorDirective],\n exports: [RecaptchaValueAccessorDirective],\n imports: [FormsModule, RecaptchaCommonModule],\n})\nexport class RecaptchaFormsModule {}\n","/// <reference types=\"grecaptcha\" preserve=\"true\"/>\n\nexport { RecaptchaComponent, RecaptchaErrorParameters } from \"./lib/recaptcha.component\";\nexport { RecaptchaLoaderService } from \"./lib/recaptcha-loader.service\";\nexport { RecaptchaModule } from \"./lib/recaptcha.module\";\nexport { RecaptchaSettings } from \"./lib/recaptcha-settings\";\n\nexport { RecaptchaV3Module } from \"./lib/recaptcha-v3.module\";\nexport { OnExecuteData, OnExecuteErrorData, ReCaptchaV3Service } from \"./lib/recaptcha-v3.service\";\n\nexport { RecaptchaFormsModule } from \"./lib/recaptcha-forms.module\";\nexport { RecaptchaValueAccessorDirective } from \"./lib/recaptcha-value-accessor.directive\";\n\nexport {\n // eslint-disable-next-line deprecation/deprecation\n RECAPTCHA_LANGUAGE,\n // eslint-disable-next-line deprecation/deprecation\n RECAPTCHA_BASE_URL,\n // eslint-disable-next-line deprecation/deprecation\n RECAPTCHA_NONCE,\n RECAPTCHA_SETTINGS,\n RECAPTCHA_V3_SITE_KEY,\n RECAPTCHA_LOADER_OPTIONS,\n RecaptchaLoaderOptions,\n} from \"./lib/tokens\";\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.RecaptchaComponent"],"mappings":"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"}