@herdwatch/ng-recaptcha
Version:
Angular component for Google reCAPTCHA
102 lines • 12 kB
JavaScript
import { isPlatformBrowser } from "@angular/common";
import { Inject, Injectable, Optional, PLATFORM_ID } from "@angular/core";
import { BehaviorSubject, of } from "rxjs";
import { filter } from "rxjs/operators";
import { loader } from "./load-script";
import { RECAPTCHA_LOADER_OPTIONS, RECAPTCHA_BASE_URL, RECAPTCHA_LANGUAGE, RECAPTCHA_NONCE, RECAPTCHA_V3_SITE_KEY, } from "./tokens";
import * as i0 from "@angular/core";
function toNonNullObservable(subject) {
return subject.asObservable().pipe(filter((value) => value !== null));
}
export class RecaptchaLoaderService {
/**
* @internal
* @nocollapse
*/
static { this.ready = null; }
constructor(platformId,
// eslint-disable-next-line deprecation/deprecation
language,
// eslint-disable-next-line deprecation/deprecation
baseUrl,
// eslint-disable-next-line deprecation/deprecation
nonce, v3SiteKey, options) {
this.platformId = platformId;
this.language = language;
this.baseUrl = baseUrl;
this.nonce = nonce;
this.v3SiteKey = v3SiteKey;
this.options = options;
const subject = this.init();
this.ready = subject ? toNonNullObservable(subject) : of();
}
/** @internal */
init() {
if (RecaptchaLoaderService.ready) {
return RecaptchaLoaderService.ready;
}
if (!isPlatformBrowser(this.platformId)) {
return undefined;
}
const subject = new BehaviorSubject(null);
RecaptchaLoaderService.ready = subject;
loader.newLoadScript({
v3SiteKey: this.v3SiteKey,
onBeforeLoad: (url) => {
if (this.options?.onBeforeLoad) {
return this.options.onBeforeLoad(url);
}
const newUrl = new URL(this.baseUrl ?? url);
if (this.language) {
newUrl.searchParams.set("hl", this.language);
}
return {
url: newUrl,
nonce: this.nonce,
};
},
onLoaded: (recaptcha) => {
let value = recaptcha;
if (this.options?.onLoaded) {
value = this.options.onLoaded(recaptcha);
}
subject.next(value);
},
});
return subject;
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: RecaptchaLoaderService, deps: [{ token: PLATFORM_ID }, { token: RECAPTCHA_LANGUAGE, optional: true }, { token: RECAPTCHA_BASE_URL, optional: true }, { token: RECAPTCHA_NONCE, optional: true }, { token: RECAPTCHA_V3_SITE_KEY, optional: true }, { token: RECAPTCHA_LOADER_OPTIONS, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: RecaptchaLoaderService }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: RecaptchaLoaderService, decorators: [{
type: Injectable
}], ctorParameters: () => [{ type: undefined, decorators: [{
type: Inject,
args: [PLATFORM_ID]
}] }, { type: undefined, decorators: [{
type: Optional
}, {
type: Inject,
args: [RECAPTCHA_LANGUAGE]
}] }, { type: undefined, decorators: [{
type: Optional
}, {
type: Inject,
args: [RECAPTCHA_BASE_URL]
}] }, { type: undefined, decorators: [{
type: Optional
}, {
type: Inject,
args: [RECAPTCHA_NONCE]
}] }, { type: undefined, decorators: [{
type: Optional
}, {
type: Inject,
args: [RECAPTCHA_V3_SITE_KEY]
}] }, { type: undefined, decorators: [{
type: Optional
}, {
type: Inject,
args: [RECAPTCHA_LOADER_OPTIONS]
}] }] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjYXB0Y2hhLWxvYWRlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctcmVjYXB0Y2hhL3NyYy9saWIvcmVjYXB0Y2hhLWxvYWRlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUUsT0FBTyxFQUFFLGVBQWUsRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXhDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkMsT0FBTyxFQUNMLHdCQUF3QixFQUN4QixrQkFBa0IsRUFDbEIsa0JBQWtCLEVBQ2xCLGVBQWUsRUFDZixxQkFBcUIsR0FFdEIsTUFBTSxVQUFVLENBQUM7O0FBRWxCLFNBQVMsbUJBQW1CLENBQUksT0FBa0M7SUFDaEUsT0FBTyxPQUFPLENBQUMsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBSSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDM0UsQ0FBQztBQUdELE1BQU0sT0FBTyxzQkFBc0I7SUFDakM7OztPQUdHO2FBQ1ksVUFBSyxHQUF5RCxJQUFJLEFBQTdELENBQThEO0lBZWxGLFlBQ3dDLFVBQWtCO0lBQ3hELG1EQUFtRDtJQUNYLFFBQWlCO0lBQ3pELG1EQUFtRDtJQUNYLE9BQWdCO0lBQ3hELG1EQUFtRDtJQUNkLEtBQWMsRUFDUixTQUFrQixFQUNmLE9BQWdDO1FBUnhDLGVBQVUsR0FBVixVQUFVLENBQVE7UUFVeEQsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDekIsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDdkIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7UUFDM0IsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDdkIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7SUFDN0QsQ0FBQztJQUVELGdCQUFnQjtJQUNSLElBQUk7UUFDVixJQUFJLHNCQUFzQixDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2pDLE9BQU8sc0JBQXNCLENBQUMsS0FBSyxDQUFDO1FBQ3RDLENBQUM7UUFFRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDeEMsT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQztRQUVELE1BQU0sT0FBTyxHQUFHLElBQUksZUFBZSxDQUErQixJQUFJLENBQUMsQ0FBQztRQUN4RSxzQkFBc0IsQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDO1FBRXZDLE1BQU0sQ0FBQyxhQUFhLENBQUM7WUFDbkIsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO1lBQ3pCLFlBQVksRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUNwQixJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsWUFBWSxFQUFFLENBQUM7b0JBQy9CLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3hDLENBQUM7Z0JBRUQsTUFBTSxNQUFNLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxHQUFHLENBQUMsQ0FBQztnQkFFNUMsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQ2xCLE1BQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQy9DLENBQUM7Z0JBRUQsT0FBTztvQkFDTCxHQUFHLEVBQUUsTUFBTTtvQkFDWCxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7aUJBQ2xCLENBQUM7WUFDSixDQUFDO1lBQ0QsUUFBUSxFQUFFLENBQUMsU0FBUyxFQUFFLEVBQUU7Z0JBQ3RCLElBQUksS0FBSyxHQUFHLFNBQVMsQ0FBQztnQkFDdEIsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxDQUFDO29CQUMzQixLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQzNDLENBQUM7Z0JBRUQsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN0QixDQUFDO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQzs4R0FsRlUsc0JBQXNCLGtCQXFCdkIsV0FBVyxhQUVDLGtCQUFrQiw2QkFFbEIsa0JBQWtCLDZCQUVsQixlQUFlLDZCQUNmLHFCQUFxQiw2QkFDckIsd0JBQXdCO2tIQTdCbkMsc0JBQXNCOzsyRkFBdEIsc0JBQXNCO2tCQURsQyxVQUFVOzswQkFzQk4sTUFBTTsyQkFBQyxXQUFXOzswQkFFbEIsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxrQkFBa0I7OzBCQUVyQyxRQUFROzswQkFBSSxNQUFNOzJCQUFDLGtCQUFrQjs7MEJBRXJDLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsZUFBZTs7MEJBQ2xDLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMscUJBQXFCOzswQkFDeEMsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyx3QkFBd0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc1BsYXRmb3JtQnJvd3NlciB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgT3B0aW9uYWwsIFBMQVRGT1JNX0lEIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgZmlsdGVyIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XG5cbmltcG9ydCB7IGxvYWRlciB9IGZyb20gXCIuL2xvYWQtc2NyaXB0XCI7XG5pbXBvcnQge1xuICBSRUNBUFRDSEFfTE9BREVSX09QVElPTlMsXG4gIFJFQ0FQVENIQV9CQVNFX1VSTCxcbiAgUkVDQVBUQ0hBX0xBTkdVQUdFLFxuICBSRUNBUFRDSEFfTk9OQ0UsXG4gIFJFQ0FQVENIQV9WM19TSVRFX0tFWSxcbiAgUmVjYXB0Y2hhTG9hZGVyT3B0aW9ucyxcbn0gZnJvbSBcIi4vdG9rZW5zXCI7XG5cbmZ1bmN0aW9uIHRvTm9uTnVsbE9ic2VydmFibGU8VD4oc3ViamVjdDogQmVoYXZpb3JTdWJqZWN0PFQgfCBudWxsPik6IE9ic2VydmFibGU8VD4ge1xuICByZXR1cm4gc3ViamVjdC5hc09ic2VydmFibGUoKS5waXBlKGZpbHRlcjxUPigodmFsdWUpID0+IHZhbHVlICE9PSBudWxsKSk7XG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBSZWNhcHRjaGFMb2FkZXJTZXJ2aWNlIHtcbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKiBAbm9jb2xsYXBzZVxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZHk6IEJlaGF2aW9yU3ViamVjdDxSZUNhcHRjaGFWMi5SZUNhcHRjaGEgfCBudWxsPiB8IG51bGwgPSBudWxsO1xuXG4gIHB1YmxpYyByZWFkeTogT2JzZXJ2YWJsZTxSZUNhcHRjaGFWMi5SZUNhcHRjaGE+O1xuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgcHJpdmF0ZSBsYW5ndWFnZT86IHN0cmluZztcbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBwcml2YXRlIGJhc2VVcmw/OiBzdHJpbmc7XG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgcHJpdmF0ZSBub25jZT86IHN0cmluZztcbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBwcml2YXRlIHYzU2l0ZUtleT86IHN0cmluZztcbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBwcml2YXRlIG9wdGlvbnM/OiBSZWNhcHRjaGFMb2FkZXJPcHRpb25zO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoUExBVEZPUk1fSUQpIHByaXZhdGUgcmVhZG9ubHkgcGxhdGZvcm1JZDogb2JqZWN0LFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoUkVDQVBUQ0hBX0xBTkdVQUdFKSBsYW5ndWFnZT86IHN0cmluZyxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KFJFQ0FQVENIQV9CQVNFX1VSTCkgYmFzZVVybD86IHN0cmluZyxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KFJFQ0FQVENIQV9OT05DRSkgbm9uY2U/OiBzdHJpbmcsXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChSRUNBUFRDSEFfVjNfU0lURV9LRVkpIHYzU2l0ZUtleT86IHN0cmluZyxcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KFJFQ0FQVENIQV9MT0FERVJfT1BUSU9OUykgb3B0aW9ucz86IFJlY2FwdGNoYUxvYWRlck9wdGlvbnMsXG4gICkge1xuICAgIHRoaXMubGFuZ3VhZ2UgPSBsYW5ndWFnZTtcbiAgICB0aGlzLmJhc2VVcmwgPSBiYXNlVXJsO1xuICAgIHRoaXMubm9uY2UgPSBub25jZTtcbiAgICB0aGlzLnYzU2l0ZUtleSA9IHYzU2l0ZUtleTtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgIGNvbnN0IHN1YmplY3QgPSB0aGlzLmluaXQoKTtcbiAgICB0aGlzLnJlYWR5ID0gc3ViamVjdCA/IHRvTm9uTnVsbE9ic2VydmFibGUoc3ViamVjdCkgOiBvZigpO1xuICB9XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBwcml2YXRlIGluaXQoKTogQmVoYXZpb3JTdWJqZWN0PFJlQ2FwdGNoYVYyLlJlQ2FwdGNoYSB8IG51bGw+IHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoUmVjYXB0Y2hhTG9hZGVyU2VydmljZS5yZWFkeSkge1xuICAgICAgcmV0dXJuIFJlY2FwdGNoYUxvYWRlclNlcnZpY2UucmVhZHk7XG4gICAgfVxuXG4gICAgaWYgKCFpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IHN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFJlQ2FwdGNoYVYyLlJlQ2FwdGNoYSB8IG51bGw+KG51bGwpO1xuICAgIFJlY2FwdGNoYUxvYWRlclNlcnZpY2UucmVhZHkgPSBzdWJqZWN0O1xuXG4gICAgbG9hZGVyLm5ld0xvYWRTY3JpcHQoe1xuICAgICAgdjNTaXRlS2V5OiB0aGlzLnYzU2l0ZUtleSxcbiAgICAgIG9uQmVmb3JlTG9hZDogKHVybCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zPy5vbkJlZm9yZUxvYWQpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25zLm9uQmVmb3JlTG9hZCh1cmwpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbmV3VXJsID0gbmV3IFVSTCh0aGlzLmJhc2VVcmwgPz8gdXJsKTtcblxuICAgICAgICBpZiAodGhpcy5sYW5ndWFnZSkge1xuICAgICAgICAgIG5ld1VybC5zZWFyY2hQYXJhbXMuc2V0KFwiaGxcIiwgdGhpcy5sYW5ndWFnZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHVybDogbmV3VXJsLFxuICAgICAgICAgIG5vbmNlOiB0aGlzLm5vbmNlLFxuICAgICAgICB9O1xuICAgICAgfSxcbiAgICAgIG9uTG9hZGVkOiAocmVjYXB0Y2hhKSA9PiB7XG4gICAgICAgIGxldCB2YWx1ZSA9IHJlY2FwdGNoYTtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucz8ub25Mb2FkZWQpIHtcbiAgICAgICAgICB2YWx1ZSA9IHRoaXMub3B0aW9ucy5vbkxvYWRlZChyZWNhcHRjaGEpO1xuICAgICAgICB9XG5cbiAgICAgICAgc3ViamVjdC5uZXh0KHZhbHVlKTtcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gc3ViamVjdDtcbiAgfVxufVxuIl19