UNPKG

ngx-turnstile

Version:

Angular component for Cloudflare Turnstile

1 lines 22.3 kB
{"version":3,"file":"ngx-turnstile.mjs","sources":["../../../projects/ngx-turnstile/src/lib/ngx-turnstile.service.ts","../../../projects/ngx-turnstile/src/lib/ngx-turnstile.component.ts","../../../projects/ngx-turnstile/src/lib/ngx-turnstile.module.ts","../../../projects/ngx-turnstile/src/lib/ngx-turnstile-value-accessor.directive.ts","../../../projects/ngx-turnstile/src/lib/ngx-turnstile-forms.module.ts","../../../projects/ngx-turnstile/src/public-api.ts","../../../projects/ngx-turnstile/src/ngx-turnstile.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class NgxTurnstileService {\n constructor() {}\n}\n","import {\n Component,\n ElementRef,\n Input,\n NgZone,\n Output,\n EventEmitter,\n OnDestroy,\n Inject,\n PLATFORM_ID,\n afterNextRender,\n signal,\n computed,\n} from '@angular/core';\nimport { toObservable, takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport { TurnstileOptions } from './interfaces/turnstile-options';\n\ndeclare global {\n interface Window {\n onloadTurnstileCallback: () => void;\n turnstile: {\n render: (\n idOrContainer: string | HTMLElement,\n options: TurnstileOptions,\n ) => string;\n reset: (widgetIdOrContainer: string | HTMLElement) => void;\n getResponse: (\n widgetIdOrContainer: string | HTMLElement,\n ) => string | undefined;\n remove: (widgetIdOrContainer: string | HTMLElement) => void;\n };\n }\n}\n\nconst SCRIPT_ID = 'ngx-turnstile';\nconst CALLBACK_NAME = 'onloadTurnstileCallback';\ntype SupportedVersion = '0';\n\n// Every mounted component waiting for the Turnstile script to finish loading.\n// A single global onload callback notifies all of them, so multiple widgets on\n// the same page each get rendered (not just the last one that was created).\nconst scriptLoadListeners = new Set<() => void>();\n\n@Component({\n selector: 'ngx-turnstile',\n template: ``,\n exportAs: 'ngx-turnstile',\n standalone: true,\n})\nexport class NgxTurnstileComponent implements OnDestroy {\n @Input() siteKey!: string;\n @Input() action?: string;\n @Input() cData?: string;\n @Input() theme?: 'light' | 'dark' | 'auto' = 'auto';\n @Input() language?: string = 'auto';\n @Input() version: SupportedVersion = '0';\n @Input() tabIndex?: number;\n @Input() appearance?: 'always' | 'execute' | 'interaction-only' = 'always';\n @Input() execution?: 'render' | 'execute';\n @Input() retry?: 'never' | 'auto' = 'auto';\n @Input() retryInterval?: number;\n @Input() refreshExpired?: 'auto' | 'manual' | 'never';\n @Input() refreshTimeout?: 'auto' | 'manual' | 'never';\n @Input() size?: 'normal' | 'flexible' | 'compact' = 'normal';\n @Input() responseField?: boolean;\n @Input() responseFieldName?: string;\n @Input() feedbackEnabled?: boolean;\n @Input() offlabelShowPrivacy?: boolean;\n @Input() offlabelShowHelp?: boolean;\n\n @Output() resolved = new EventEmitter<string | null>();\n @Output() errored = new EventEmitter<string | null>();\n @Output() beforeInteractive = new EventEmitter<void>();\n @Output() afterInteractive = new EventEmitter<void>();\n @Output() unsupported = new EventEmitter<void>();\n @Output() timeout = new EventEmitter<void>();\n\n private widgetId = signal<string | null | undefined>(undefined);\n\n /** Whether the Cloudflare Turnstile script has finished loading. */\n public scriptLoaded = signal(false);\n\n /** Whether a widget is currently rendered. Clients can watch this signal. */\n public widgetLoaded = computed(() => !!this.widgetId());\n\n // Notifies this instance when the shared script finishes loading. Kept as a\n // stable reference so it can be removed from the listener set on destroy.\n private onScriptLoad = (): void =>\n this.zone.run(() => this.scriptLoaded.set(true));\n\n constructor(\n private elementRef: ElementRef<HTMLElement>,\n private zone: NgZone,\n @Inject(DOCUMENT) private document: Document,\n @Inject(PLATFORM_ID) private platformId: Object,\n ) {\n // Touching `window` is only safe in the browser (skip during SSR).\n if (isPlatformBrowser(this.platformId)) {\n this.loadScript();\n }\n\n // Render once the host element exists (if the script is already loaded).\n afterNextRender(() => {\n if (this.scriptLoaded() && !this.widgetLoaded()) {\n this.createWidget();\n }\n });\n\n // Render once the script finishes loading (if not already rendered).\n toObservable(this.scriptLoaded)\n .pipe(takeUntilDestroyed())\n .subscribe((scriptLoaded) => {\n if (scriptLoaded && !this.widgetLoaded()) {\n this.createWidget();\n }\n });\n }\n\n private _getCloudflareTurnstileUrl(): string {\n if (this.version === '0') {\n return 'https://challenges.cloudflare.com/turnstile/v0/api.js';\n }\n\n throw 'Version not defined in ngx-turnstile component.';\n }\n\n private loadScript(): void {\n // Script already present (e.g. loaded by another widget or a prior route).\n if (window.turnstile) {\n this.scriptLoaded.set(true);\n return;\n }\n\n // Register to be notified when the shared script finishes loading.\n scriptLoadListeners.add(this.onScriptLoad);\n\n // A single global callback fans out to every waiting instance.\n window[CALLBACK_NAME] = () => {\n // Copy then clear so a listener re-registering mid-notification is safe.\n const listeners = Array.from(scriptLoadListeners);\n scriptLoadListeners.clear();\n listeners.forEach((listener) => listener());\n };\n\n // Only inject the script once, even with several widgets on the page.\n const scriptPending = !!this.document.getElementById(SCRIPT_ID);\n if (!scriptPending) {\n const script = this.document.createElement('script');\n script.src = `${this._getCloudflareTurnstileUrl()}?render=explicit&onload=${CALLBACK_NAME}`;\n script.id = SCRIPT_ID;\n script.async = true;\n script.defer = true;\n this.document.head.appendChild(script);\n }\n }\n\n public createWidget(): void {\n // Only render once the script is loaded and the host element exists.\n if (!this.scriptLoaded() || !this.elementRef?.nativeElement) {\n return;\n }\n\n const turnstileOptions: TurnstileOptions = {\n sitekey: this.siteKey,\n theme: this.theme,\n language: this.language,\n tabindex: this.tabIndex,\n action: this.action,\n cData: this.cData,\n appearance: this.appearance,\n retry: this.retry,\n size: this.size,\n callback: (token: string) => {\n this.zone.run(() => this.resolved.emit(token));\n },\n 'error-callback': (errorCode: string): boolean => {\n this.zone.run(() => this.errored.emit(errorCode));\n // Returning false causes Turnstile to log error code as a console warning.\n return false;\n },\n 'expired-callback': () => {\n this.zone.run(() => this.reset());\n },\n 'before-interactive-callback': () => {\n this.zone.run(() => this.beforeInteractive.emit());\n },\n 'after-interactive-callback': () => {\n this.zone.run(() => this.afterInteractive.emit());\n },\n 'unsupported-callback': () => {\n this.zone.run(() => this.unsupported.emit());\n },\n 'timeout-callback': () => {\n this.zone.run(() => this.timeout.emit());\n },\n };\n\n // Only forward optional parameters when set, so we never override\n // Cloudflare's defaults with an explicit `undefined`.\n if (this.execution !== undefined) {\n turnstileOptions.execution = this.execution;\n }\n if (this.retryInterval !== undefined) {\n turnstileOptions['retry-interval'] = this.retryInterval;\n }\n if (this.refreshExpired !== undefined) {\n turnstileOptions['refresh-expired'] = this.refreshExpired;\n }\n if (this.refreshTimeout !== undefined) {\n turnstileOptions['refresh-timeout'] = this.refreshTimeout;\n }\n if (this.responseField !== undefined) {\n turnstileOptions['response-field'] = this.responseField;\n }\n if (this.responseFieldName !== undefined) {\n turnstileOptions['response-field-name'] = this.responseFieldName;\n }\n if (this.feedbackEnabled !== undefined) {\n turnstileOptions['feedback-enabled'] = this.feedbackEnabled;\n }\n if (this.offlabelShowPrivacy !== undefined) {\n turnstileOptions['offlabel-show-privacy'] = this.offlabelShowPrivacy;\n }\n if (this.offlabelShowHelp !== undefined) {\n turnstileOptions['offlabel-show-help'] = this.offlabelShowHelp;\n }\n\n // Remove any existing widget so re-rendering doesn't create duplicates.\n this.remove();\n\n this.widgetId.set(\n window.turnstile.render(this.elementRef.nativeElement, turnstileOptions),\n );\n }\n\n public reset(): void {\n if (this.widgetLoaded()) {\n this.resolved.emit(null);\n window.turnstile.reset(this.widgetId()!);\n }\n }\n\n public remove(): void {\n if (this.widgetLoaded()) {\n window.turnstile.remove(this.widgetId()!);\n this.widgetId.set(undefined);\n }\n }\n\n public ngOnDestroy(): void {\n scriptLoadListeners.delete(this.onScriptLoad);\n this.remove();\n }\n}\n","import { NgModule } from '@angular/core';\nimport { NgxTurnstileComponent } from './ngx-turnstile.component';\n\n@NgModule({\n imports: [NgxTurnstileComponent],\n exports: [NgxTurnstileComponent],\n})\nexport class NgxTurnstileModule {}\n","import { Directive, forwardRef, OnInit } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { NgxTurnstileComponent } from './ngx-turnstile.component';\n\n@Directive({\n selector:\n 'ngx-turnstile[formControl], ngx-turnstile[formControlName], ngx-turnstile[ngModel]',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NgxTurnstileValueAccessorDirective),\n multi: true,\n },\n ],\n})\nexport class NgxTurnstileValueAccessorDirective\n implements ControlValueAccessor, OnInit\n{\n private onChange!: (value: string) => void;\n private onTouched!: () => void;\n private resolved: boolean = false;\n\n constructor(private turnstileComp: NgxTurnstileComponent) {}\n\n ngOnInit(): void {\n this.turnstileComp.resolved.subscribe((token: string) => {\n this.resolved = !!token;\n\n if (this.onChange) {\n this.onChange(token);\n }\n\n if (this.onTouched) {\n this.onTouched();\n }\n });\n }\n\n // Prevent form control from setting token value\n writeValue(value: any): void {\n // reset turnstile component if form control sets the value after already receiving a valid token\n if (this.resolved) {\n this.resolved = false;\n this.turnstileComp.reset();\n }\n }\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n}\n","import { NgModule } from '@angular/core';\nimport { NgxTurnstileValueAccessorDirective } from './ngx-turnstile-value-accessor.directive';\nimport { NgxTurnstileModule } from './ngx-turnstile.module';\n\n@NgModule({\n declarations: [NgxTurnstileValueAccessorDirective],\n imports: [NgxTurnstileModule],\n exports: [NgxTurnstileValueAccessorDirective],\n})\nexport class NgxTurnstileFormsModule {}\n","/*\n * Public API Surface of ngx-turnstile\n */\n\nexport * from './lib/ngx-turnstile.service';\nexport * from './lib/ngx-turnstile.component';\nexport * from './lib/ngx-turnstile.module';\nexport * from './lib/ngx-turnstile-value-accessor.directive';\nexport * from './lib/ngx-turnstile-forms.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.NgxTurnstileComponent"],"mappings":"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"}