ngx-turnstile
Version:
Angular component for Cloudflare Turnstile
127 lines • 14.4 kB
JavaScript
import { Component, Input, Output, EventEmitter, Inject, afterNextRender, } from '@angular/core';
import { DOCUMENT } from '@angular/common';
import * as i0 from "@angular/core";
const SCRIPT_ID = 'ngx-turnstile';
const CALLBACK_NAME = 'onloadTurnstileCallback';
export class NgxTurnstileComponent {
elementRef;
zone;
document;
siteKey;
action;
cData;
theme = 'auto';
language = 'auto';
version = '0';
tabIndex;
appearance = 'always';
retry = 'auto';
size = 'normal';
resolved = new EventEmitter();
errored = new EventEmitter();
widgetId;
constructor(elementRef, zone, document) {
this.elementRef = elementRef;
this.zone = zone;
this.document = document;
afterNextRender(() => this.createWidget());
}
_getCloudflareTurnstileUrl() {
if (this.version === '0') {
return 'https://challenges.cloudflare.com/turnstile/v0/api.js';
}
throw 'Version not defined in ngx-turnstile component.';
}
createWidget() {
let turnstileOptions = {
sitekey: this.siteKey,
theme: this.theme,
language: this.language,
tabindex: this.tabIndex,
action: this.action,
cData: this.cData,
appearance: this.appearance,
retry: this.retry,
size: this.size,
callback: (token) => {
this.zone.run(() => this.resolved.emit(token));
},
'error-callback': (errorCode) => {
this.zone.run(() => this.errored.emit(errorCode));
// Returning false causes Turnstile to log error code as a console warning.
return false;
},
'expired-callback': () => {
this.zone.run(() => this.reset());
},
};
window[CALLBACK_NAME] = () => {
if (!this.elementRef?.nativeElement) {
return;
}
this.widgetId = window.turnstile.render(this.elementRef.nativeElement, turnstileOptions);
};
if (this.scriptLoaded()) {
window[CALLBACK_NAME]();
return;
}
const script = this.document.createElement('script');
script.src = `${this._getCloudflareTurnstileUrl()}?render=explicit&onload=${CALLBACK_NAME}`;
script.id = SCRIPT_ID;
script.async = true;
script.defer = true;
this.document.head.appendChild(script);
}
reset() {
if (this.widgetId) {
this.resolved.emit(null);
window.turnstile.reset(this.widgetId);
}
}
ngOnDestroy() {
if (this.widgetId) {
window.turnstile.remove(this.widgetId);
}
}
scriptLoaded() {
return !!this.document.getElementById(SCRIPT_ID);
}
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: NgxTurnstileComponent, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Component });
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.8", type: NgxTurnstileComponent, selector: "ngx-turnstile", inputs: { siteKey: "siteKey", action: "action", cData: "cData", theme: "theme", language: "language", version: "version", tabIndex: "tabIndex", appearance: "appearance", retry: "retry", size: "size" }, outputs: { resolved: "resolved", errored: "errored" }, exportAs: ["ngx-turnstile"], ngImport: i0, template: ``, isInline: true });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: NgxTurnstileComponent, decorators: [{
type: Component,
args: [{
selector: 'ngx-turnstile',
template: ``,
exportAs: 'ngx-turnstile',
}]
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.NgZone }, { type: Document, decorators: [{
type: Inject,
args: [DOCUMENT]
}] }], propDecorators: { siteKey: [{
type: Input
}], action: [{
type: Input
}], cData: [{
type: Input
}], theme: [{
type: Input
}], language: [{
type: Input
}], version: [{
type: Input
}], tabIndex: [{
type: Input
}], appearance: [{
type: Input
}], retry: [{
type: Input
}], size: [{
type: Input
}], resolved: [{
type: Output
}], errored: [{
type: Output
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXR1cm5zdGlsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdHVybnN0aWxlL3NyYy9saWIvbmd4LXR1cm5zdGlsZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFHVCxLQUFLLEVBRUwsTUFBTSxFQUNOLFlBQVksRUFFWixNQUFNLEVBQ04sZUFBZSxHQUNoQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7O0FBb0IzQyxNQUFNLFNBQVMsR0FBRyxlQUFlLENBQUM7QUFDbEMsTUFBTSxhQUFhLEdBQUcseUJBQXlCLENBQUM7QUFRaEQsTUFBTSxPQUFPLHFCQUFxQjtJQWtCdEI7SUFDQTtJQUNrQjtJQW5CbkIsT0FBTyxDQUFVO0lBQ2pCLE1BQU0sQ0FBVTtJQUNoQixLQUFLLENBQVU7SUFDZixLQUFLLEdBQStCLE1BQU0sQ0FBQztJQUMzQyxRQUFRLEdBQVksTUFBTSxDQUFDO0lBQzNCLE9BQU8sR0FBcUIsR0FBRyxDQUFDO0lBQ2hDLFFBQVEsQ0FBVTtJQUNsQixVQUFVLEdBQStDLFFBQVEsQ0FBQztJQUNsRSxLQUFLLEdBQXNCLE1BQU0sQ0FBQztJQUNsQyxJQUFJLEdBQXVDLFFBQVEsQ0FBQztJQUVuRCxRQUFRLEdBQUcsSUFBSSxZQUFZLEVBQWlCLENBQUM7SUFDN0MsT0FBTyxHQUFHLElBQUksWUFBWSxFQUFpQixDQUFDO0lBRTlDLFFBQVEsQ0FBVTtJQUUxQixZQUNVLFVBQW1DLEVBQ25DLElBQVksRUFDTSxRQUFrQjtRQUZwQyxlQUFVLEdBQVYsVUFBVSxDQUF5QjtRQUNuQyxTQUFJLEdBQUosSUFBSSxDQUFRO1FBQ00sYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUU1QyxlQUFlLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFD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QUFDLENBQUM7U0FDeEM7SUFDSCxDQUFDO0lBRU0sWUFBWTtRQUNqQixPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNuRCxDQUFDO3VHQWhHVSxxQkFBcUIsa0VBb0J0QixRQUFROzJGQXBCUCxxQkFBcUIsbVZBSHRCLEVBQUU7OzJGQUdELHFCQUFxQjtrQkFMakMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsZUFBZTtvQkFDekIsUUFBUSxFQUFFLEVBQUU7b0JBQ1osUUFBUSxFQUFFLGVBQWU7aUJBQzFCOzswQkFxQkksTUFBTTsyQkFBQyxRQUFRO3lDQW5CVCxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBRUksUUFBUTtzQkFBakIsTUFBTTtnQkFDRyxPQUFPO3NCQUFoQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBBZnRlclZpZXdJbml0LFxuICBFbGVtZW50UmVmLFxuICBJbnB1dCxcbiAgTmdab25lLFxuICBPdXRwdXQsXG4gIEV2ZW50RW1pdHRlcixcbiAgT25EZXN0cm95LFxuICBJbmplY3QsXG4gIGFmdGVyTmV4dFJlbmRlcixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBUdXJuc3RpbGVPcHRpb25zIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3R1cm5zdGlsZS1vcHRpb25zJztcblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgV2luZG93IHtcbiAgICBvbmxvYWRUdXJuc3RpbGVDYWxsYmFjazogKCkgPT4gdm9pZDtcbiAgICB0dXJuc3RpbGU6IHtcbiAgICAgIHJlbmRlcjogKFxuICAgICAgICBpZE9yQ29udGFpbmVyOiBzdHJpbmcgfCBIVE1MRWxlbWVudCxcbiAgICAgICAgb3B0aW9uczogVHVybnN0aWxlT3B0aW9ucyxcbiAgICAgICkgPT4gc3RyaW5nO1xuICAgICAgcmVzZXQ6ICh3aWRnZXRJZE9yQ29udGFpbmVyOiBzdHJpbmcgfCBIVE1MRWxlbWVudCkgPT4gdm9pZDtcbiAgICAgIGdldFJlc3BvbnNlOiAoXG4gICAgICAgIHdpZGdldElkT3JDb250YWluZXI6IHN0cmluZyB8IEhUTUxFbGVtZW50LFxuICAgICAgKSA9PiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICByZW1vdmU6ICh3aWRnZXRJZE9yQ29udGFpbmVyOiBzdHJpbmcgfCBIVE1MRWxlbWVudCkgPT4gdm9pZDtcbiAgICB9O1xuICB9XG59XG5cbmNvbnN0IFNDUklQVF9JRCA9ICduZ3gtdHVybnN0aWxlJztcbmNvbnN0IENBTExCQUNLX05BTUUgPSAnb25sb2FkVHVybnN0aWxlQ2FsbGJhY2snO1xudHlwZSBTdXBwb3J0ZWRWZXJzaW9uID0gJzAnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICduZ3gtdHVybnN0aWxlJyxcbiAgdGVtcGxhdGU6IGBgLFxuICBleHBvcnRBczogJ25neC10dXJuc3RpbGUnLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3hUdXJuc3RpbGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBASW5wdXQoKSBzaXRlS2V5ITogc3RyaW5nO1xuICBASW5wdXQoKSBhY3Rpb24/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGNEYXRhPzogc3RyaW5nO1xuICBASW5wdXQoKSB0aGVtZT86ICdsaWdodCcgfCAnZGFyaycgfCAnYXV0bycgPSAnYXV0byc7XG4gIEBJbnB1dCgpIGxhbmd1YWdlPzogc3RyaW5nID0gJ2F1dG8nO1xuICBASW5wdXQoKSB2ZXJzaW9uOiBTdXBwb3J0ZWRWZXJzaW9uID0gJzAnO1xuICBASW5wdXQoKSB0YWJJbmRleD86IG51bWJlcjtcbiAgQElucHV0KCkgYXBwZWFyYW5jZT86ICdhbHdheXMnIHwgJ2V4ZWN1dGUnIHwgJ2ludGVyYWN0aW9uLW9ubHknID0gJ2Fsd2F5cyc7XG4gIEBJbnB1dCgpIHJldHJ5PzogJ25ldmVyJyB8ICdhdXRvJyA9ICdhdXRvJztcbiAgQElucHV0KCkgc2l6ZT86ICdub3JtYWwnIHwgJ2ZsZXhpYmxlJyB8ICdjb21wYWN0JyA9ICdub3JtYWwnO1xuXG4gIEBPdXRwdXQoKSByZXNvbHZlZCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nIHwgbnVsbD4oKTtcbiAgQE91dHB1dCgpIGVycm9yZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZyB8IG51bGw+KCk7XG5cbiAgcHJpdmF0ZSB3aWRnZXRJZCE6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxuICAgIHByaXZhdGUgem9uZTogTmdab25lLFxuICAgIEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgZG9jdW1lbnQ6IERvY3VtZW50LFxuICApIHtcbiAgICBhZnRlck5leHRSZW5kZXIoKCkgPT4gdGhpcy5jcmVhdGVXaWRnZXQoKSk7XG4gIH1cblxuICBwcml2YXRlIF9nZXRDbG91ZGZsYXJlVHVybnN0aWxlVXJsKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMudmVyc2lvbiA9PT0gJzAnKSB7XG4gICAgICByZXR1cm4gJ2h0dHBzOi8vY2hhbGxlbmdlcy5jbG91ZGZsYXJlLmNvbS90dXJuc3RpbGUvdjAvYXBpLmpzJztcbiAgICB9XG5cbiAgICB0aHJvdyAnVmVyc2lvbiBub3QgZGVmaW5lZCBpbiBuZ3gtdHVybnN0aWxlIGNvbXBvbmVudC4nO1xuICB9XG5cbiAgcHVibGljIGNyZWF0ZVdpZGdldCgpOiB2b2lkIHtcbiAgICBsZXQgdHVybnN0aWxlT3B0aW9uczogVHVybnN0aWxlT3B0aW9ucyA9IHtcbiAgICAgIHNpdGVrZXk6IHRoaXMuc2l0ZUtleSxcbiAgICAgIHRoZW1lOiB0aGlzLnRoZW1lLFxuICAgICAgbGFuZ3VhZ2U6IHRoaXMubGFuZ3VhZ2UsXG4gICAgICB0YWJpbmRleDogdGhpcy50YWJJbmRleCxcbiAgICAgIGFjdGlvbjogdGhpcy5hY3Rpb24sXG4gICAgICBjRGF0YTogdGhpcy5jRGF0YSxcbiAgICAgIGFwcGVhcmFuY2U6IHRoaXMuYXBwZWFyYW5jZSxcbiAgICAgIHJldHJ5OiB0aGlzLnJldHJ5LFxuICAgICAgc2l6ZTogdGhpcy5zaXplLFxuICAgICAgY2FsbGJhY2s6ICh0b2tlbjogc3RyaW5nKSA9PiB7XG4gICAgICAgIHRoaXMuem9uZS5ydW4oKCkgPT4gdGhpcy5yZXNvbHZlZC5lbWl0KHRva2VuKSk7XG4gICAgICB9LFxuICAgICAgJ2Vycm9yLWNhbGxiYWNrJzogKGVycm9yQ29kZTogc3RyaW5nKTogYm9vbGVhbiA9PiB7XG4gICAgICAgIHRoaXMuem9uZS5ydW4oKCkgPT4gdGhpcy5lcnJvcmVkLmVtaXQoZXJyb3JDb2RlKSk7XG4gICAgICAgIC8vIFJldHVybmluZyBmYWxzZSBjYXVzZXMgVHVybnN0aWxlIHRvIGxvZyBlcnJvciBjb2RlIGFzIGEgY29uc29sZSB3YXJuaW5nLlxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9LFxuICAgICAgJ2V4cGlyZWQtY2FsbGJhY2snOiAoKSA9PiB7XG4gICAgICAgIHRoaXMuem9uZS5ydW4oKCkgPT4gdGhpcy5yZXNldCgpKTtcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIHdpbmRvd1tDQUxMQkFDS19OQU1FXSA9ICgpID0+IHtcbiAgICAgIGlmICghdGhpcy5lbGVtZW50UmVmPy5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy53aWRnZXRJZCA9IHdpbmRvdy50dXJuc3RpbGUucmVuZGVyKFxuICAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICAgdHVybnN0aWxlT3B0aW9ucyxcbiAgICAgICk7XG4gICAgfTtcblxuICAgIGlmICh0aGlzLnNjcmlwdExvYWRlZCgpKSB7XG4gICAgICB3aW5kb3dbQ0FMTEJBQ0tfTkFNRV0oKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzY3JpcHQgPSB0aGlzLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuICAgIHNjcmlwdC5zcmMgPSBgJHt0aGlzLl9nZXRDbG91ZGZsYXJlVHVybnN0aWxlVXJsKCl9P3JlbmRlcj1leHBsaWNpdCZvbmxvYWQ9JHtDQUxMQkFDS19OQU1FfWA7XG4gICAgc2NyaXB0LmlkID0gU0NSSVBUX0lEO1xuICAgIHNjcmlwdC5hc3luYyA9IHRydWU7XG4gICAgc2NyaXB0LmRlZmVyID0gdHJ1ZTtcbiAgICB0aGlzLmRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc2NyaXB0KTtcbiAgfVxuXG4gIHB1YmxpYyByZXNldCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy53aWRnZXRJZCkge1xuICAgICAgdGhpcy5yZXNvbHZlZC5lbWl0KG51bGwpO1xuICAgICAgd2luZG93LnR1cm5zdGlsZS5yZXNldCh0aGlzLndpZGdldElkKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMud2lkZ2V0SWQpIHtcbiAgICAgIHdpbmRvdy50dXJuc3RpbGUucmVtb3ZlKHRoaXMud2lkZ2V0SWQpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzY3JpcHRMb2FkZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChTQ1JJUFRfSUQpO1xuICB9XG59XG4iXX0=