ng-recaptcha-2 14.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +530 -0
- package/LICENSE +21 -0
- package/README.md +647 -0
- package/esm2022/index.mjs +15 -0
- package/esm2022/lib/load-script.mjs +28 -0
- package/esm2022/lib/recaptcha-common.module.mjs +16 -0
- package/esm2022/lib/recaptcha-forms.module.mjs +19 -0
- package/esm2022/lib/recaptcha-loader.service.mjs +104 -0
- package/esm2022/lib/recaptcha-settings.mjs +2 -0
- package/esm2022/lib/recaptcha-v3.module.mjs +16 -0
- package/esm2022/lib/recaptcha-v3.service.mjs +106 -0
- package/esm2022/lib/recaptcha-value-accessor.directive.mjs +68 -0
- package/esm2022/lib/recaptcha.component.mjs +171 -0
- package/esm2022/lib/recaptcha.module.mjs +19 -0
- package/esm2022/lib/tokens.mjs +14 -0
- package/esm2022/ng-recaptcha-2.mjs +5 -0
- package/fesm2022/ng-recaptcha-2.mjs +536 -0
- package/fesm2022/ng-recaptcha-2.mjs.map +1 -0
- package/index.d.ts +9 -0
- package/lib/load-script.d.ts +27 -0
- package/lib/recaptcha-common.module.d.ts +7 -0
- package/lib/recaptcha-forms.module.d.ts +9 -0
- package/lib/recaptcha-loader.service.d.ts +28 -0
- package/lib/recaptcha-settings.d.ts +8 -0
- package/lib/recaptcha-v3.module.d.ts +6 -0
- package/lib/recaptcha-v3.service.d.ts +70 -0
- package/lib/recaptcha-value-accessor.directive.d.ts +18 -0
- package/lib/recaptcha.component.d.ts +64 -0
- package/lib/recaptcha.module.d.ts +8 -0
- package/lib/tokens.d.ts +116 -0
- package/package.json +40 -0
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
function loadScript(renderMode, onBeforeLoad, onLoaded, { url, lang, nonce } = {}) {
|
|
2
|
+
window.ng2recaptchaloaded = () => {
|
|
3
|
+
onLoaded(grecaptcha);
|
|
4
|
+
};
|
|
5
|
+
const script = document.createElement("script");
|
|
6
|
+
script.innerHTML = "";
|
|
7
|
+
const { url: baseUrl, nonce: onBeforeLoadNonce } = onBeforeLoad(new URL(url || "https://www.google.com/recaptcha/api.js"));
|
|
8
|
+
baseUrl.searchParams.set("render", renderMode === "explicit" ? renderMode : renderMode.key);
|
|
9
|
+
baseUrl.searchParams.set("onload", "ng2recaptchaloaded");
|
|
10
|
+
baseUrl.searchParams.set("trustedtypes", "true");
|
|
11
|
+
if (lang) {
|
|
12
|
+
baseUrl.searchParams.set("hl", lang);
|
|
13
|
+
}
|
|
14
|
+
script.src = baseUrl.href;
|
|
15
|
+
const nonceValue = onBeforeLoadNonce || nonce;
|
|
16
|
+
if (nonceValue) {
|
|
17
|
+
script.setAttribute("nonce", nonceValue);
|
|
18
|
+
}
|
|
19
|
+
script.async = true;
|
|
20
|
+
script.defer = true;
|
|
21
|
+
document.head.appendChild(script);
|
|
22
|
+
}
|
|
23
|
+
function newLoadScript({ v3SiteKey, onBeforeLoad, onLoaded, }) {
|
|
24
|
+
const renderMode = v3SiteKey ? { key: v3SiteKey } : "explicit";
|
|
25
|
+
loader.loadScript(renderMode, onBeforeLoad, onLoaded);
|
|
26
|
+
}
|
|
27
|
+
export const loader = { loadScript, newLoadScript };
|
|
28
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZC1zY3JpcHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1yZWNhcHRjaGEvc3JjL2xpYi9sb2FkLXNjcmlwdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFVQSxTQUFTLFVBQVUsQ0FDakIsVUFBc0IsRUFDdEIsWUFBd0QsRUFDeEQsUUFBcUQsRUFDckQsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUssS0FBc0QsRUFBRTtJQUUxRSxNQUFNLENBQUMsa0JBQWtCLEdBQUcsR0FBRyxFQUFFO1FBQy9CLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN2QixDQUFDLENBQUM7SUFDRixNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2hELE1BQU0sQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO0lBRXRCLE1BQU0sRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxHQUFHLFlBQVksQ0FDN0QsSUFBSSxHQUFHLENBQUMsR0FBRyxJQUFJLHlDQUF5QyxDQUFDLENBQzFELENBQUM7SUFDRixPQUFPLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsVUFBVSxLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDNUYsT0FBTyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLG9CQUFvQixDQUFDLENBQUM7SUFDekQsT0FBTyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsY0FBYyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2pELElBQUksSUFBSSxFQUFFLENBQUM7UUFDVCxPQUFPLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELE1BQU0sQ0FBQyxHQUFHLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQztJQUUxQixNQUFNLFVBQVUsR0FBRyxpQkFBaUIsSUFBSSxLQUFLLENBQUM7SUFFOUMsSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUNmLE1BQU0sQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFDRCxNQUFNLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztJQUNwQixNQUFNLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztJQUNwQixRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNwQyxDQUFDO0FBRUQsU0FBUyxhQUFhLENBQUMsRUFDckIsU0FBUyxFQUNULFlBQVksRUFDWixRQUFRLEdBSVQ7SUFDQyxNQUFNLFVBQVUsR0FBZSxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUM7SUFFM0UsTUFBTSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsWUFBWSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ3hELENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxNQUFNLEdBQUcsRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZWNhcHRjaGFMb2FkZXJPcHRpb25zIH0gZnJvbSBcIi4vdG9rZW5zXCI7XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIFdpbmRvdyB7XG4gICAgbmcycmVjYXB0Y2hhbG9hZGVkPygpOiB2b2lkO1xuICB9XG59XG5cbmV4cG9ydCB0eXBlIFJlbmRlck1vZGUgPSBcImV4cGxpY2l0XCIgfCB7IGtleTogc3RyaW5nIH07XG5cbmZ1bmN0aW9uIGxvYWRTY3JpcHQoXG4gIHJlbmRlck1vZGU6IFJlbmRlck1vZGUsXG4gIG9uQmVmb3JlTG9hZDogKHVybDogVVJMKSA9PiB7IHVybDogVVJMOyBub25jZT86IHN0cmluZyB9LFxuICBvbkxvYWRlZDogKGdyZWNhcHRjaGE6IFJlQ2FwdGNoYVYyLlJlQ2FwdGNoYSkgPT4gdm9pZCxcbiAgeyB1cmwsIGxhbmcsIG5vbmNlIH06IHsgdXJsPzogc3RyaW5nOyBsYW5nPzogc3RyaW5nOyBub25jZT86IHN0cmluZyB9ID0ge30sXG4pOiB2b2lkIHtcbiAgd2luZG93Lm5nMnJlY2FwdGNoYWxvYWRlZCA9ICgpID0+IHtcbiAgICBvbkxvYWRlZChncmVjYXB0Y2hhKTtcbiAgfTtcbiAgY29uc3Qgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTtcbiAgc2NyaXB0LmlubmVySFRNTCA9IFwiXCI7XG5cbiAgY29uc3QgeyB1cmw6IGJhc2VVcmwsIG5vbmNlOiBvbkJlZm9yZUxvYWROb25jZSB9ID0gb25CZWZvcmVMb2FkKFxuICAgIG5ldyBVUkwodXJsIHx8IFwiaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9yZWNhcHRjaGEvYXBpLmpzXCIpLFxuICApO1xuICBiYXNlVXJsLnNlYXJjaFBhcmFtcy5zZXQoXCJyZW5kZXJcIiwgcmVuZGVyTW9kZSA9PT0gXCJleHBsaWNpdFwiID8gcmVuZGVyTW9kZSA6IHJlbmRlck1vZGUua2V5KTtcbiAgYmFzZVVybC5zZWFyY2hQYXJhbXMuc2V0KFwib25sb2FkXCIsIFwibmcycmVjYXB0Y2hhbG9hZGVkXCIpO1xuICBiYXNlVXJsLnNlYXJjaFBhcmFtcy5zZXQoXCJ0cnVzdGVkdHlwZXNcIiwgXCJ0cnVlXCIpO1xuICBpZiAobGFuZykge1xuICAgIGJhc2VVcmwuc2VhcmNoUGFyYW1zLnNldChcImhsXCIsIGxhbmcpO1xuICB9XG5cbiAgc2NyaXB0LnNyYyA9IGJhc2VVcmwuaHJlZjtcblxuICBjb25zdCBub25jZVZhbHVlID0gb25CZWZvcmVMb2FkTm9uY2UgfHwgbm9uY2U7XG5cbiAgaWYgKG5vbmNlVmFsdWUpIHtcbiAgICBzY3JpcHQuc2V0QXR0cmlidXRlKFwibm9uY2VcIiwgbm9uY2VWYWx1ZSk7XG4gIH1cbiAgc2NyaXB0LmFzeW5jID0gdHJ1ZTtcbiAgc2NyaXB0LmRlZmVyID0gdHJ1ZTtcbiAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzY3JpcHQpO1xufVxuXG5mdW5jdGlvbiBuZXdMb2FkU2NyaXB0KHtcbiAgdjNTaXRlS2V5LFxuICBvbkJlZm9yZUxvYWQsXG4gIG9uTG9hZGVkLFxufTogeyB2M1NpdGVLZXk6IHN0cmluZyB8IHVuZGVmaW5lZDsgb25Mb2FkZWQocmVjYXB0Y2hhOiBSZUNhcHRjaGFWMi5SZUNhcHRjaGEpOiB2b2lkIH0gJiBQaWNrPFxuICBSZXF1aXJlZDxSZWNhcHRjaGFMb2FkZXJPcHRpb25zPixcbiAgXCJvbkJlZm9yZUxvYWRcIlxuPikge1xuICBjb25zdCByZW5kZXJNb2RlOiBSZW5kZXJNb2RlID0gdjNTaXRlS2V5ID8geyBrZXk6IHYzU2l0ZUtleSB9IDogXCJleHBsaWNpdFwiO1xuXG4gIGxvYWRlci5sb2FkU2NyaXB0KHJlbmRlck1vZGUsIG9uQmVmb3JlTG9hZCwgb25Mb2FkZWQpO1xufVxuXG5leHBvcnQgY29uc3QgbG9hZGVyID0geyBsb2FkU2NyaXB0LCBuZXdMb2FkU2NyaXB0IH07XG4iXX0=
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { NgModule } from "@angular/core";
|
|
2
|
+
import { RecaptchaComponent } from "./recaptcha.component";
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export class RecaptchaCommonModule {
|
|
5
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: RecaptchaCommonModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
6
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.0.1", ngImport: i0, type: RecaptchaCommonModule, declarations: [RecaptchaComponent], exports: [RecaptchaComponent] }); }
|
|
7
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: RecaptchaCommonModule }); }
|
|
8
|
+
}
|
|
9
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: RecaptchaCommonModule, decorators: [{
|
|
10
|
+
type: NgModule,
|
|
11
|
+
args: [{
|
|
12
|
+
declarations: [RecaptchaComponent],
|
|
13
|
+
exports: [RecaptchaComponent],
|
|
14
|
+
}]
|
|
15
|
+
}] });
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjYXB0Y2hhLWNvbW1vbi5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1yZWNhcHRjaGEvc3JjL2xpYi9yZWNhcHRjaGEtY29tbW9uLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXpDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDOztBQU0zRCxNQUFNLE9BQU8scUJBQXFCOzhHQUFyQixxQkFBcUI7K0dBQXJCLHFCQUFxQixpQkFIakIsa0JBQWtCLGFBQ3ZCLGtCQUFrQjsrR0FFakIscUJBQXFCOzsyRkFBckIscUJBQXFCO2tCQUpqQyxRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRSxDQUFDLGtCQUFrQixDQUFDO29CQUNsQyxPQUFPLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQztpQkFDOUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5cbmltcG9ydCB7IFJlY2FwdGNoYUNvbXBvbmVudCB9IGZyb20gXCIuL3JlY2FwdGNoYS5jb21wb25lbnRcIjtcblxuQE5nTW9kdWxlKHtcbiAgZGVjbGFyYXRpb25zOiBbUmVjYXB0Y2hhQ29tcG9uZW50XSxcbiAgZXhwb3J0czogW1JlY2FwdGNoYUNvbXBvbmVudF0sXG59KVxuZXhwb3J0IGNsYXNzIFJlY2FwdGNoYUNvbW1vbk1vZHVsZSB7fVxuIl19
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { NgModule } from "@angular/core";
|
|
2
|
+
import { FormsModule } from "@angular/forms";
|
|
3
|
+
import { RecaptchaCommonModule } from "./recaptcha-common.module";
|
|
4
|
+
import { RecaptchaValueAccessorDirective } from "./recaptcha-value-accessor.directive";
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
export class RecaptchaFormsModule {
|
|
7
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: RecaptchaFormsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
8
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.0.1", ngImport: i0, type: RecaptchaFormsModule, declarations: [RecaptchaValueAccessorDirective], imports: [FormsModule, RecaptchaCommonModule], exports: [RecaptchaValueAccessorDirective] }); }
|
|
9
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: RecaptchaFormsModule, imports: [FormsModule, RecaptchaCommonModule] }); }
|
|
10
|
+
}
|
|
11
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: RecaptchaFormsModule, decorators: [{
|
|
12
|
+
type: NgModule,
|
|
13
|
+
args: [{
|
|
14
|
+
declarations: [RecaptchaValueAccessorDirective],
|
|
15
|
+
exports: [RecaptchaValueAccessorDirective],
|
|
16
|
+
imports: [FormsModule, RecaptchaCommonModule],
|
|
17
|
+
}]
|
|
18
|
+
}] });
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjYXB0Y2hhLWZvcm1zLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXJlY2FwdGNoYS9zcmMvbGliL3JlY2FwdGNoYS1mb3Jtcy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFN0MsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDbEUsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7O0FBT3ZGLE1BQU0sT0FBTyxvQkFBb0I7OEdBQXBCLG9CQUFvQjsrR0FBcEIsb0JBQW9CLGlCQUpoQiwrQkFBK0IsYUFFcEMsV0FBVyxFQUFFLHFCQUFxQixhQURsQywrQkFBK0I7K0dBRzlCLG9CQUFvQixZQUZyQixXQUFXLEVBQUUscUJBQXFCOzsyRkFFakMsb0JBQW9CO2tCQUxoQyxRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRSxDQUFDLCtCQUErQixDQUFDO29CQUMvQyxPQUFPLEVBQUUsQ0FBQywrQkFBK0IsQ0FBQztvQkFDMUMsT0FBTyxFQUFFLENBQUMsV0FBVyxFQUFFLHFCQUFxQixDQUFDO2lCQUM5QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XG5cbmltcG9ydCB7IFJlY2FwdGNoYUNvbW1vbk1vZHVsZSB9IGZyb20gXCIuL3JlY2FwdGNoYS1jb21tb24ubW9kdWxlXCI7XG5pbXBvcnQgeyBSZWNhcHRjaGFWYWx1ZUFjY2Vzc29yRGlyZWN0aXZlIH0gZnJvbSBcIi4vcmVjYXB0Y2hhLXZhbHVlLWFjY2Vzc29yLmRpcmVjdGl2ZVwiO1xuXG5ATmdNb2R1bGUoe1xuICBkZWNsYXJhdGlvbnM6IFtSZWNhcHRjaGFWYWx1ZUFjY2Vzc29yRGlyZWN0aXZlXSxcbiAgZXhwb3J0czogW1JlY2FwdGNoYVZhbHVlQWNjZXNzb3JEaXJlY3RpdmVdLFxuICBpbXBvcnRzOiBbRm9ybXNNb2R1bGUsIFJlY2FwdGNoYUNvbW1vbk1vZHVsZV0sXG59KVxuZXhwb3J0IGNsYXNzIFJlY2FwdGNoYUZvcm1zTW9kdWxlIHt9XG4iXX0=
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { isPlatformBrowser } from "@angular/common";
|
|
2
|
+
import { Inject, Injectable, Optional, PLATFORM_ID } from "@angular/core";
|
|
3
|
+
import { BehaviorSubject, of } from "rxjs";
|
|
4
|
+
import { filter } from "rxjs/operators";
|
|
5
|
+
import { loader } from "./load-script";
|
|
6
|
+
import { RECAPTCHA_LOADER_OPTIONS, RECAPTCHA_BASE_URL, RECAPTCHA_LANGUAGE, RECAPTCHA_NONCE, RECAPTCHA_V3_SITE_KEY, } from "./tokens";
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
function toNonNullObservable(subject) {
|
|
9
|
+
return subject.asObservable().pipe(filter((value) => value !== null));
|
|
10
|
+
}
|
|
11
|
+
export class RecaptchaLoaderService {
|
|
12
|
+
/**
|
|
13
|
+
* @internal
|
|
14
|
+
* @nocollapse
|
|
15
|
+
*/
|
|
16
|
+
static { this.ready = null; }
|
|
17
|
+
constructor(
|
|
18
|
+
// eslint-disable-next-line @typescript-eslint/ban-types
|
|
19
|
+
platformId,
|
|
20
|
+
// eslint-disable-next-line deprecation/deprecation
|
|
21
|
+
language,
|
|
22
|
+
// eslint-disable-next-line deprecation/deprecation
|
|
23
|
+
baseUrl,
|
|
24
|
+
// eslint-disable-next-line deprecation/deprecation
|
|
25
|
+
nonce, v3SiteKey, options) {
|
|
26
|
+
this.platformId = platformId;
|
|
27
|
+
this.language = language;
|
|
28
|
+
this.baseUrl = baseUrl;
|
|
29
|
+
this.nonce = nonce;
|
|
30
|
+
this.v3SiteKey = v3SiteKey;
|
|
31
|
+
this.options = options;
|
|
32
|
+
const subject = this.init();
|
|
33
|
+
this.ready = subject ? toNonNullObservable(subject) : of();
|
|
34
|
+
}
|
|
35
|
+
/** @internal */
|
|
36
|
+
init() {
|
|
37
|
+
if (RecaptchaLoaderService.ready) {
|
|
38
|
+
return RecaptchaLoaderService.ready;
|
|
39
|
+
}
|
|
40
|
+
if (!isPlatformBrowser(this.platformId)) {
|
|
41
|
+
return undefined;
|
|
42
|
+
}
|
|
43
|
+
const subject = new BehaviorSubject(null);
|
|
44
|
+
RecaptchaLoaderService.ready = subject;
|
|
45
|
+
loader.newLoadScript({
|
|
46
|
+
v3SiteKey: this.v3SiteKey,
|
|
47
|
+
onBeforeLoad: (url) => {
|
|
48
|
+
if (this.options?.onBeforeLoad) {
|
|
49
|
+
return this.options.onBeforeLoad(url);
|
|
50
|
+
}
|
|
51
|
+
const newUrl = new URL(this.baseUrl ?? url);
|
|
52
|
+
if (this.language) {
|
|
53
|
+
newUrl.searchParams.set("hl", this.language);
|
|
54
|
+
}
|
|
55
|
+
return {
|
|
56
|
+
url: newUrl,
|
|
57
|
+
nonce: this.nonce,
|
|
58
|
+
};
|
|
59
|
+
},
|
|
60
|
+
onLoaded: (recaptcha) => {
|
|
61
|
+
let value = recaptcha;
|
|
62
|
+
if (this.options?.onLoaded) {
|
|
63
|
+
value = this.options.onLoaded(recaptcha);
|
|
64
|
+
}
|
|
65
|
+
subject.next(value);
|
|
66
|
+
},
|
|
67
|
+
});
|
|
68
|
+
return subject;
|
|
69
|
+
}
|
|
70
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.1", 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 }); }
|
|
71
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: RecaptchaLoaderService }); }
|
|
72
|
+
}
|
|
73
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: RecaptchaLoaderService, decorators: [{
|
|
74
|
+
type: Injectable
|
|
75
|
+
}], ctorParameters: () => [{ type: Object, decorators: [{
|
|
76
|
+
type: Inject,
|
|
77
|
+
args: [PLATFORM_ID]
|
|
78
|
+
}] }, { type: undefined, decorators: [{
|
|
79
|
+
type: Optional
|
|
80
|
+
}, {
|
|
81
|
+
type: Inject,
|
|
82
|
+
args: [RECAPTCHA_LANGUAGE]
|
|
83
|
+
}] }, { type: undefined, decorators: [{
|
|
84
|
+
type: Optional
|
|
85
|
+
}, {
|
|
86
|
+
type: Inject,
|
|
87
|
+
args: [RECAPTCHA_BASE_URL]
|
|
88
|
+
}] }, { type: undefined, decorators: [{
|
|
89
|
+
type: Optional
|
|
90
|
+
}, {
|
|
91
|
+
type: Inject,
|
|
92
|
+
args: [RECAPTCHA_NONCE]
|
|
93
|
+
}] }, { type: undefined, decorators: [{
|
|
94
|
+
type: Optional
|
|
95
|
+
}, {
|
|
96
|
+
type: Inject,
|
|
97
|
+
args: [RECAPTCHA_V3_SITE_KEY]
|
|
98
|
+
}] }, { type: undefined, decorators: [{
|
|
99
|
+
type: Optional
|
|
100
|
+
}, {
|
|
101
|
+
type: Inject,
|
|
102
|
+
args: [RECAPTCHA_LOADER_OPTIONS]
|
|
103
|
+
}] }] });
|
|
104
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjYXB0Y2hhLWxvYWRlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctcmVjYXB0Y2hhL3NyYy9saWIvcmVjYXB0Y2hhLWxvYWRlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUUsT0FBTyxFQUFFLGVBQWUsRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXhDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkMsT0FBTyxFQUNMLHdCQUF3QixFQUN4QixrQkFBa0IsRUFDbEIsa0JBQWtCLEVBQ2xCLGVBQWUsRUFDZixxQkFBcUIsR0FFdEIsTUFBTSxVQUFVLENBQUM7O0FBRWxCLFNBQVMsbUJBQW1CLENBQUksT0FBa0M7SUFDaEUsT0FBTyxPQUFPLENBQUMsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBSSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDM0UsQ0FBQztBQUdELE1BQU0sT0FBTyxzQkFBc0I7SUFDakM7OztPQUdHO2FBQ1ksVUFBSyxHQUF5RCxJQUFJLEFBQTdELENBQThEO0lBZWxGO0lBQ0Usd0RBQXdEO0lBQ2xCLFVBQWtCO0lBQ3hELG1EQUFtRDtJQUNYLFFBQWlCO0lBQ3pELG1EQUFtRDtJQUNYLE9BQWdCO0lBQ3hELG1EQUFtRDtJQUNkLEtBQWMsRUFDUixTQUFrQixFQUNmLE9BQWdDO1FBUnhDLGVBQVUsR0FBVixVQUFVLENBQVE7UUFVeEQsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDekIsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDdkIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7UUFDM0IsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDdkIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7SUFDN0QsQ0FBQztJQUVELGdCQUFnQjtJQUNSLElBQUk7UUFDVixJQUFJLHNCQUFzQixDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2pDLE9BQU8sc0JBQXNCLENBQUMsS0FBSyxDQUFDO1FBQ3RDLENBQUM7UUFFRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDeEMsT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQztRQUVELE1BQU0sT0FBTyxHQUFHLElBQUksZUFBZSxDQUErQixJQUFJLENBQUMsQ0FBQztRQUN4RSxzQkFBc0IsQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDO1FBRXZDLE1BQU0sQ0FBQyxhQUFhLENBQUM7WUFDbkIsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO1lBQ3pCLFlBQVksRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUNwQixJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsWUFBWSxFQUFFLENBQUM7b0JBQy9CLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3hDLENBQUM7Z0JBRUQsTUFBTSxNQUFNLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxHQUFHLENBQUMsQ0FBQztnQkFFNUMsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQ2xCLE1BQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQy9DLENBQUM7Z0JBRUQsT0FBTztvQkFDTCxHQUFHLEVBQUUsTUFBTTtvQkFDWCxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7aUJBQ2xCLENBQUM7WUFDSixDQUFDO1lBQ0QsUUFBUSxFQUFFLENBQUMsU0FBUyxFQUFFLEVBQUU7Z0JBQ3RCLElBQUksS0FBSyxHQUFHLFNBQVMsQ0FBQztnQkFDdEIsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxDQUFDO29CQUMzQixLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQzNDLENBQUM7Z0JBRUQsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN0QixDQUFDO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQzs4R0FuRlUsc0JBQXNCLGtCQXNCdkIsV0FBVyxhQUVDLGtCQUFrQiw2QkFFbEIsa0JBQWtCLDZCQUVsQixlQUFlLDZCQUNmLHFCQUFxQiw2QkFDckIsd0JBQXdCO2tIQTlCbkMsc0JBQXNCOzsyRkFBdEIsc0JBQXNCO2tCQURsQyxVQUFVOzswQkF1Qk4sTUFBTTsyQkFBQyxXQUFXOzswQkFFbEIsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxrQkFBa0I7OzBCQUVyQyxRQUFROzswQkFBSSxNQUFNOzJCQUFDLGtCQUFrQjs7MEJBRXJDLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsZUFBZTs7MEJBQ2xDLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMscUJBQXFCOzswQkFDeEMsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyx3QkFBd0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc1BsYXRmb3JtQnJvd3NlciB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgT3B0aW9uYWwsIFBMQVRGT1JNX0lEIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgZmlsdGVyIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XG5cbmltcG9ydCB7IGxvYWRlciB9IGZyb20gXCIuL2xvYWQtc2NyaXB0XCI7XG5pbXBvcnQge1xuICBSRUNBUFRDSEFfTE9BREVSX09QVElPTlMsXG4gIFJFQ0FQVENIQV9CQVNFX1VSTCxcbiAgUkVDQVBUQ0hBX0xBTkdVQUdFLFxuICBSRUNBUFRDSEFfTk9OQ0UsXG4gIFJFQ0FQVENIQV9WM19TSVRFX0tFWSxcbiAgUmVjYXB0Y2hhTG9hZGVyT3B0aW9ucyxcbn0gZnJvbSBcIi4vdG9rZW5zXCI7XG5cbmZ1bmN0aW9uIHRvTm9uTnVsbE9ic2VydmFibGU8VD4oc3ViamVjdDogQmVoYXZpb3JTdWJqZWN0PFQgfCBudWxsPik6IE9ic2VydmFibGU8VD4ge1xuICByZXR1cm4gc3ViamVjdC5hc09ic2VydmFibGUoKS5waXBlKGZpbHRlcjxUPigodmFsdWUpID0+IHZhbHVlICE9PSBudWxsKSk7XG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBSZWNhcHRjaGFMb2FkZXJTZXJ2aWNlIHtcbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKiBAbm9jb2xsYXBzZVxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZHk6IEJlaGF2aW9yU3ViamVjdDxSZUNhcHRjaGFWMi5SZUNhcHRjaGEgfCBudWxsPiB8IG51bGwgPSBudWxsO1xuXG4gIHB1YmxpYyByZWFkeTogT2JzZXJ2YWJsZTxSZUNhcHRjaGFWMi5SZUNhcHRjaGE+O1xuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgcHJpdmF0ZSBsYW5ndWFnZT86IHN0cmluZztcbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBwcml2YXRlIGJhc2VVcmw/OiBzdHJpbmc7XG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgcHJpdmF0ZSBub25jZT86IHN0cmluZztcbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBwcml2YXRlIHYzU2l0ZUtleT86IHN0cmluZztcbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBwcml2YXRlIG9wdGlvbnM/OiBSZWNhcHRjaGFMb2FkZXJPcHRpb25zO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXR5cGVzXG4gICAgQEluamVjdChQTEFURk9STV9JRCkgcHJpdmF0ZSByZWFkb25seSBwbGF0Zm9ybUlkOiBPYmplY3QsXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChSRUNBUFRDSEFfTEFOR1VBR0UpIGxhbmd1YWdlPzogc3RyaW5nLFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoUkVDQVBUQ0hBX0JBU0VfVVJMKSBiYXNlVXJsPzogc3RyaW5nLFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoUkVDQVBUQ0hBX05PTkNFKSBub25jZT86IHN0cmluZyxcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KFJFQ0FQVENIQV9WM19TSVRFX0tFWSkgdjNTaXRlS2V5Pzogc3RyaW5nLFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoUkVDQVBUQ0hBX0xPQURFUl9PUFRJT05TKSBvcHRpb25zPzogUmVjYXB0Y2hhTG9hZGVyT3B0aW9ucyxcbiAgKSB7XG4gICAgdGhpcy5sYW5ndWFnZSA9IGxhbmd1YWdlO1xuICAgIHRoaXMuYmFzZVVybCA9IGJhc2VVcmw7XG4gICAgdGhpcy5ub25jZSA9IG5vbmNlO1xuICAgIHRoaXMudjNTaXRlS2V5ID0gdjNTaXRlS2V5O1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgY29uc3Qgc3ViamVjdCA9IHRoaXMuaW5pdCgpO1xuICAgIHRoaXMucmVhZHkgPSBzdWJqZWN0ID8gdG9Ob25OdWxsT2JzZXJ2YWJsZShzdWJqZWN0KSA6IG9mKCk7XG4gIH1cblxuICAvKiogQGludGVybmFsICovXG4gIHByaXZhdGUgaW5pdCgpOiBCZWhhdmlvclN1YmplY3Q8UmVDYXB0Y2hhVjIuUmVDYXB0Y2hhIHwgbnVsbD4gfCB1bmRlZmluZWQge1xuICAgIGlmIChSZWNhcHRjaGFMb2FkZXJTZXJ2aWNlLnJlYWR5KSB7XG4gICAgICByZXR1cm4gUmVjYXB0Y2hhTG9hZGVyU2VydmljZS5yZWFkeTtcbiAgICB9XG5cbiAgICBpZiAoIWlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgY29uc3Qgc3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UmVDYXB0Y2hhVjIuUmVDYXB0Y2hhIHwgbnVsbD4obnVsbCk7XG4gICAgUmVjYXB0Y2hhTG9hZGVyU2VydmljZS5yZWFkeSA9IHN1YmplY3Q7XG5cbiAgICBsb2FkZXIubmV3TG9hZFNjcmlwdCh7XG4gICAgICB2M1NpdGVLZXk6IHRoaXMudjNTaXRlS2V5LFxuICAgICAgb25CZWZvcmVMb2FkOiAodXJsKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnM/Lm9uQmVmb3JlTG9hZCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMub25CZWZvcmVMb2FkKHVybCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBuZXdVcmwgPSBuZXcgVVJMKHRoaXMuYmFzZVVybCA/PyB1cmwpO1xuXG4gICAgICAgIGlmICh0aGlzLmxhbmd1YWdlKSB7XG4gICAgICAgICAgbmV3VXJsLnNlYXJjaFBhcmFtcy5zZXQoXCJobFwiLCB0aGlzLmxhbmd1YWdlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdXJsOiBuZXdVcmwsXG4gICAgICAgICAgbm9uY2U6IHRoaXMubm9uY2UsXG4gICAgICAgIH07XG4gICAgICB9LFxuICAgICAgb25Mb2FkZWQ6IChyZWNhcHRjaGEpID0+IHtcbiAgICAgICAgbGV0IHZhbHVlID0gcmVjYXB0Y2hhO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zPy5vbkxvYWRlZCkge1xuICAgICAgICAgIHZhbHVlID0gdGhpcy5vcHRpb25zLm9uTG9hZGVkKHJlY2FwdGNoYSk7XG4gICAgICAgIH1cblxuICAgICAgICBzdWJqZWN0Lm5leHQodmFsdWUpO1xuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBzdWJqZWN0O1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjYXB0Y2hhLXNldHRpbmdzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctcmVjYXB0Y2hhL3NyYy9saWIvcmVjYXB0Y2hhLXNldHRpbmdzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIFJlY2FwdGNoYVNldHRpbmdzIHtcbiAgc2l0ZUtleT86IHN0cmluZztcbiAgdGhlbWU/OiBSZUNhcHRjaGFWMi5UaGVtZTtcbiAgdHlwZT86IFJlQ2FwdGNoYVYyLlR5cGU7XG4gIHNpemU/OiBSZUNhcHRjaGFWMi5TaXplO1xuICBiYWRnZT86IFJlQ2FwdGNoYVYyLkJhZGdlO1xufVxuIl19
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { NgModule } from "@angular/core";
|
|
2
|
+
import { ReCaptchaV3Service } from "./recaptcha-v3.service";
|
|
3
|
+
import { RecaptchaLoaderService } from "./recaptcha-loader.service";
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export class RecaptchaV3Module {
|
|
6
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: RecaptchaV3Module, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
7
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.0.1", ngImport: i0, type: RecaptchaV3Module }); }
|
|
8
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: RecaptchaV3Module, providers: [ReCaptchaV3Service, RecaptchaLoaderService] }); }
|
|
9
|
+
}
|
|
10
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: RecaptchaV3Module, decorators: [{
|
|
11
|
+
type: NgModule,
|
|
12
|
+
args: [{
|
|
13
|
+
providers: [ReCaptchaV3Service, RecaptchaLoaderService],
|
|
14
|
+
}]
|
|
15
|
+
}] });
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjYXB0Y2hhLXYzLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXJlY2FwdGNoYS9zcmMvbGliL3JlY2FwdGNoYS12My5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV6QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7QUFLcEUsTUFBTSxPQUFPLGlCQUFpQjs4R0FBakIsaUJBQWlCOytHQUFqQixpQkFBaUI7K0dBQWpCLGlCQUFpQixhQUZqQixDQUFDLGtCQUFrQixFQUFFLHNCQUFzQixDQUFDOzsyRkFFNUMsaUJBQWlCO2tCQUg3QixRQUFRO21CQUFDO29CQUNSLFNBQVMsRUFBRSxDQUFDLGtCQUFrQixFQUFFLHNCQUFzQixDQUFDO2lCQUN4RCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcblxuaW1wb3J0IHsgUmVDYXB0Y2hhVjNTZXJ2aWNlIH0gZnJvbSBcIi4vcmVjYXB0Y2hhLXYzLnNlcnZpY2VcIjtcbmltcG9ydCB7IFJlY2FwdGNoYUxvYWRlclNlcnZpY2UgfSBmcm9tIFwiLi9yZWNhcHRjaGEtbG9hZGVyLnNlcnZpY2VcIjtcblxuQE5nTW9kdWxlKHtcbiAgcHJvdmlkZXJzOiBbUmVDYXB0Y2hhVjNTZXJ2aWNlLCBSZWNhcHRjaGFMb2FkZXJTZXJ2aWNlXSxcbn0pXG5leHBvcnQgY2xhc3MgUmVjYXB0Y2hhVjNNb2R1bGUge31cbiJdfQ==
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { Inject, Injectable } from "@angular/core";
|
|
2
|
+
import { Subject } from "rxjs";
|
|
3
|
+
import { RECAPTCHA_V3_SITE_KEY } from "./tokens";
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "./recaptcha-loader.service";
|
|
6
|
+
/**
|
|
7
|
+
* The main service for working with reCAPTCHA v3 APIs.
|
|
8
|
+
*
|
|
9
|
+
* Use the `execute` method for executing a single action, and
|
|
10
|
+
* `onExecute` observable for listening to all actions at once.
|
|
11
|
+
*/
|
|
12
|
+
export class ReCaptchaV3Service {
|
|
13
|
+
constructor(zone, recaptchaLoader, siteKey) {
|
|
14
|
+
this.recaptchaLoader = recaptchaLoader;
|
|
15
|
+
this.zone = zone;
|
|
16
|
+
this.siteKey = siteKey;
|
|
17
|
+
this.init();
|
|
18
|
+
}
|
|
19
|
+
get onExecute() {
|
|
20
|
+
if (!this.onExecuteSubject) {
|
|
21
|
+
this.onExecuteSubject = new Subject();
|
|
22
|
+
this.onExecuteObservable = this.onExecuteSubject.asObservable();
|
|
23
|
+
}
|
|
24
|
+
return this.onExecuteObservable;
|
|
25
|
+
}
|
|
26
|
+
get onExecuteError() {
|
|
27
|
+
if (!this.onExecuteErrorSubject) {
|
|
28
|
+
this.onExecuteErrorSubject = new Subject();
|
|
29
|
+
this.onExecuteErrorObservable = this.onExecuteErrorSubject.asObservable();
|
|
30
|
+
}
|
|
31
|
+
return this.onExecuteErrorObservable;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Executes the provided `action` with reCAPTCHA v3 API.
|
|
35
|
+
* Use the emitted token value for verification purposes on the backend.
|
|
36
|
+
*
|
|
37
|
+
* For more information about reCAPTCHA v3 actions and tokens refer to the official documentation at
|
|
38
|
+
* https://developers.google.com/recaptcha/docs/v3.
|
|
39
|
+
*
|
|
40
|
+
* @param {string} action the action to execute
|
|
41
|
+
* @returns {Observable<string>} an `Observable` that will emit the reCAPTCHA v3 string `token` value whenever ready.
|
|
42
|
+
* The returned `Observable` completes immediately after emitting a value.
|
|
43
|
+
*/
|
|
44
|
+
execute(action) {
|
|
45
|
+
const subject = new Subject();
|
|
46
|
+
if (!this.grecaptcha) {
|
|
47
|
+
if (!this.actionBacklog) {
|
|
48
|
+
this.actionBacklog = [];
|
|
49
|
+
}
|
|
50
|
+
this.actionBacklog.push([action, subject]);
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
this.executeActionWithSubject(action, subject);
|
|
54
|
+
}
|
|
55
|
+
return subject.asObservable();
|
|
56
|
+
}
|
|
57
|
+
/** @internal */
|
|
58
|
+
executeActionWithSubject(action, subject) {
|
|
59
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
60
|
+
const onError = (error) => {
|
|
61
|
+
this.zone.run(() => {
|
|
62
|
+
subject.error(error);
|
|
63
|
+
if (this.onExecuteErrorSubject) {
|
|
64
|
+
// We don't know any better at this point, unfortunately, so have to resort to `any`
|
|
65
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
66
|
+
this.onExecuteErrorSubject.next({ action, error });
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
};
|
|
70
|
+
this.zone.runOutsideAngular(() => {
|
|
71
|
+
try {
|
|
72
|
+
this.grecaptcha.execute(this.siteKey, { action }).then((token) => {
|
|
73
|
+
this.zone.run(() => {
|
|
74
|
+
subject.next(token);
|
|
75
|
+
subject.complete();
|
|
76
|
+
if (this.onExecuteSubject) {
|
|
77
|
+
this.onExecuteSubject.next({ action, token });
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
}, onError);
|
|
81
|
+
}
|
|
82
|
+
catch (e) {
|
|
83
|
+
onError(e);
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
/** @internal */
|
|
88
|
+
init() {
|
|
89
|
+
this.recaptchaLoader.ready.subscribe((value) => {
|
|
90
|
+
this.grecaptcha = value;
|
|
91
|
+
if (this.actionBacklog && this.actionBacklog.length > 0) {
|
|
92
|
+
this.actionBacklog.forEach(([action, subject]) => this.executeActionWithSubject(action, subject));
|
|
93
|
+
this.actionBacklog = undefined;
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: ReCaptchaV3Service, deps: [{ token: i0.NgZone }, { token: i1.RecaptchaLoaderService }, { token: RECAPTCHA_V3_SITE_KEY }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
98
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: ReCaptchaV3Service }); }
|
|
99
|
+
}
|
|
100
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: ReCaptchaV3Service, decorators: [{
|
|
101
|
+
type: Injectable
|
|
102
|
+
}], ctorParameters: () => [{ type: i0.NgZone }, { type: i1.RecaptchaLoaderService }, { type: undefined, decorators: [{
|
|
103
|
+
type: Inject,
|
|
104
|
+
args: [RECAPTCHA_V3_SITE_KEY]
|
|
105
|
+
}] }] });
|
|
106
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjYXB0Y2hhLXYzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1yZWNhcHRjaGEvc3JjL2xpYi9yZWNhcHRjaGEtdjMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUMzRCxPQUFPLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLFVBQVUsQ0FBQzs7O0FBNEJqRDs7Ozs7R0FLRztBQUVILE1BQU0sT0FBTyxrQkFBa0I7SUFtQjdCLFlBQ0UsSUFBWSxFQUNMLGVBQXVDLEVBQ2YsT0FBZTtRQUR2QyxvQkFBZSxHQUFmLGVBQWUsQ0FBd0I7UUFHOUMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFFdkIsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2QsQ0FBQztJQUVELElBQVcsU0FBUztRQUNsQixJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksT0FBTyxFQUFpQixDQUFDO1lBQ3JELElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDbEUsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDO0lBQ2xDLENBQUM7SUFFRCxJQUFXLGNBQWM7UUFDdkIsSUFBSSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1lBQ2hDLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLE9BQU8sRUFBc0IsQ0FBQztZQUMvRCxJQUFJLENBQUMsd0JBQXdCLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFD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QUM7WUFDakMsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs4R0FsSFUsa0JBQWtCLDhFQXNCbkIscUJBQXFCO2tIQXRCcEIsa0JBQWtCOzsyRkFBbEIsa0JBQWtCO2tCQUQ5QixVQUFVOzswQkF1Qk4sTUFBTTsyQkFBQyxxQkFBcUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIE5nWm9uZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSBcInJ4anNcIjtcblxuaW1wb3J0IHsgUkVDQVBUQ0hBX1YzX1NJVEVfS0VZIH0gZnJvbSBcIi4vdG9rZW5zXCI7XG5pbXBvcnQgeyBSZWNhcHRjaGFMb2FkZXJTZXJ2aWNlIH0gZnJvbSBcIi4vcmVjYXB0Y2hhLWxvYWRlci5zZXJ2aWNlXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgT25FeGVjdXRlRGF0YSB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgYWN0aW9uIHRoYXQgaGFzIGJlZW4gZXhlY3V0ZWQuXG4gICAqL1xuICBhY3Rpb246IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSB0b2tlbiB0aGF0IHJlQ0FQVENIQSB2MyBwcm92aWRlZCB3aGVuIGV4ZWN1dGluZyB0aGUgYWN0aW9uLlxuICAgKi9cbiAgdG9rZW46IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPbkV4ZWN1dGVFcnJvckRhdGEge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGFjdGlvbiB0aGF0IGhhcyBiZWVuIGV4ZWN1dGVkLlxuICAgKi9cbiAgYWN0aW9uOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgZXJyb3Igd2hpY2ggd2FzIGVuY291bnRlcmVkXG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICBlcnJvcjogYW55O1xufVxuXG50eXBlIEFjdGlvbkJhY2tsb2dFbnRyeSA9IFtzdHJpbmcsIFN1YmplY3Q8c3RyaW5nPl07XG5cbi8qKlxuICogVGhlIG1haW4gc2VydmljZSBmb3Igd29ya2luZyB3aXRoIHJlQ0FQVENIQSB2MyBBUElzLlxuICpcbiAqIFVzZSB0aGUgYGV4ZWN1dGVgIG1ldGhvZCBmb3IgZXhlY3V0aW5nIGEgc2luZ2xlIGFjdGlvbiwgYW5kXG4gKiBgb25FeGVjdXRlYCBvYnNlcnZhYmxlIGZvciBsaXN0ZW5pbmcgdG8gYWxsIGFjdGlvbnMgYXQgb25jZS5cbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFJlQ2FwdGNoYVYzU2VydmljZSB7XG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBzaXRlS2V5OiBzdHJpbmc7XG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgcHJpdmF0ZSByZWFkb25seSB6b25lOiBOZ1pvbmU7XG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgcHJpdmF0ZSBhY3Rpb25CYWNrbG9nOiBBY3Rpb25CYWNrbG9nRW50cnlbXSB8IHVuZGVmaW5lZDtcbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBwcml2YXRlIGdyZWNhcHRjaGE6IFJlQ2FwdGNoYVYyLlJlQ2FwdGNoYTtcblxuICAvKiogQGludGVybmFsICovXG4gIHByaXZhdGUgb25FeGVjdXRlU3ViamVjdDogU3ViamVjdDxPbkV4ZWN1dGVEYXRhPjtcbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBwcml2YXRlIG9uRXhlY3V0ZUVycm9yU3ViamVjdDogU3ViamVjdDxPbkV4ZWN1dGVFcnJvckRhdGE+O1xuICAvKiogQGludGVybmFsICovXG4gIHByaXZhdGUgb25FeGVjdXRlT2JzZXJ2YWJsZTogT2JzZXJ2YWJsZTxPbkV4ZWN1dGVEYXRhPjtcbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBwcml2YXRlIG9uRXhlY3V0ZUVycm9yT2JzZXJ2YWJsZTogT2JzZXJ2YWJsZTxPbkV4ZWN1dGVFcnJvckRhdGE+O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHpvbmU6IE5nWm9uZSxcbiAgICBwdWJsaWMgcmVjYXB0Y2hhTG9hZGVyOiBSZWNhcHRjaGFMb2FkZXJTZXJ2aWNlLFxuICAgIEBJbmplY3QoUkVDQVBUQ0hBX1YzX1NJVEVfS0VZKSBzaXRlS2V5OiBzdHJpbmcsXG4gICkge1xuICAgIHRoaXMuem9uZSA9IHpvbmU7XG4gICAgdGhpcy5zaXRlS2V5ID0gc2l0ZUtleTtcblxuICAgIHRoaXMuaW5pdCgpO1xuICB9XG5cbiAgcHVibGljIGdldCBvbkV4ZWN1dGUoKTogT2JzZXJ2YWJsZTxPbkV4ZWN1dGVEYXRhPiB7XG4gICAgaWYgKCF0aGlzLm9uRXhlY3V0ZVN1YmplY3QpIHtcbiAgICAgIHRoaXMub25FeGVjdXRlU3ViamVjdCA9IG5ldyBTdWJqZWN0PE9uRXhlY3V0ZURhdGE+KCk7XG4gICAgICB0aGlzLm9uRXhlY3V0ZU9ic2VydmFibGUgPSB0aGlzLm9uRXhlY3V0ZVN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMub25FeGVjdXRlT2JzZXJ2YWJsZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgb25FeGVjdXRlRXJyb3IoKTogT2JzZXJ2YWJsZTxPbkV4ZWN1dGVFcnJvckRhdGE+IHtcbiAgICBpZiAoIXRoaXMub25FeGVjdXRlRXJyb3JTdWJqZWN0KSB7XG4gICAgICB0aGlzLm9uRXhlY3V0ZUVycm9yU3ViamVjdCA9IG5ldyBTdWJqZWN0PE9uRXhlY3V0ZUVycm9yRGF0YT4oKTtcbiAgICAgIHRoaXMub25FeGVjdXRlRXJyb3JPYnNlcnZhYmxlID0gdGhpcy5vbkV4ZWN1dGVFcnJvclN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMub25FeGVjdXRlRXJyb3JPYnNlcnZhYmxlO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGVzIHRoZSBwcm92aWRlZCBgYWN0aW9uYCB3aXRoIHJlQ0FQVENIQSB2MyBBUEkuXG4gICAqIFVzZSB0aGUgZW1pdHRlZCB0b2tlbiB2YWx1ZSBmb3IgdmVyaWZpY2F0aW9uIHB1cnBvc2VzIG9uIHRoZSBiYWNrZW5kLlxuICAgKlxuICAgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCByZUNBUFRDSEEgdjMgYWN0aW9ucyBhbmQgdG9rZW5zIHJlZmVyIHRvIHRoZSBvZmZpY2lhbCBkb2N1bWVudGF0aW9uIGF0XG4gICAqIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3JlY2FwdGNoYS9kb2NzL3YzLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYWN0aW9uIHRoZSBhY3Rpb24gdG8gZXhlY3V0ZVxuICAgKiBAcmV0dXJucyB7T2JzZXJ2YWJsZTxzdHJpbmc+fSBhbiBgT2JzZXJ2YWJsZWAgdGhhdCB3aWxsIGVtaXQgdGhlIHJlQ0FQVENIQSB2MyBzdHJpbmcgYHRva2VuYCB2YWx1ZSB3aGVuZXZlciByZWFkeS5cbiAgICogVGhlIHJldHVybmVkIGBPYnNlcnZhYmxlYCBjb21wbGV0ZXMgaW1tZWRpYXRlbHkgYWZ0ZXIgZW1pdHRpbmcgYSB2YWx1ZS5cbiAgICovXG4gIHB1YmxpYyBleGVjdXRlKGFjdGlvbjogc3RyaW5nKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICBjb25zdCBzdWJqZWN0ID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xuICAgIGlmICghdGhpcy5ncmVjYXB0Y2hhKSB7XG4gICAgICBpZiAoIXRoaXMuYWN0aW9uQmFja2xvZykge1xuICAgICAgICB0aGlzLmFjdGlvbkJhY2tsb2cgPSBbXTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5hY3Rpb25CYWNrbG9nLnB1c2goW2FjdGlvbiwgc3ViamVjdF0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmV4ZWN1dGVBY3Rpb25XaXRoU3ViamVjdChhY3Rpb24sIHN1YmplY3QpO1xuICAgIH1cblxuICAgIHJldHVybiBzdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBwcml2YXRlIGV4ZWN1dGVBY3Rpb25XaXRoU3ViamVjdChhY3Rpb246IHN0cmluZywgc3ViamVjdDogU3ViamVjdDxzdHJpbmc+KTogdm9pZCB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBjb25zdCBvbkVycm9yID0gKGVycm9yOiBhbnkpID0+IHtcbiAgICAgIHRoaXMuem9uZS5ydW4oKCkgPT4ge1xuICAgICAgICBzdWJqZWN0LmVycm9yKGVycm9yKTtcbiAgICAgICAgaWYgKHRoaXMub25FeGVjdXRlRXJyb3JTdWJqZWN0KSB7XG4gICAgICAgICAgLy8gV2UgZG9uJ3Qga25vdyBhbnkgYmV0dGVyIGF0IHRoaXMgcG9pbnQsIHVuZm9ydHVuYXRlbHksIHNvIGhhdmUgdG8gcmVzb3J0IHRvIGBhbnlgXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtYXNzaWdubWVudFxuICAgICAgICAgIHRoaXMub25FeGVjdXRlRXJyb3JTdWJqZWN0Lm5leHQoeyBhY3Rpb24sIGVycm9yIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMuZ3JlY2FwdGNoYS5leGVjdXRlKHRoaXMuc2l0ZUtleSwgeyBhY3Rpb24gfSkudGhlbigodG9rZW46IHN0cmluZykgPT4ge1xuICAgICAgICAgIHRoaXMuem9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgc3ViamVjdC5uZXh0KHRva2VuKTtcbiAgICAgICAgICAgIHN1YmplY3QuY29tcGxldGUoKTtcbiAgICAgICAgICAgIGlmICh0aGlzLm9uRXhlY3V0ZVN1YmplY3QpIHtcbiAgICAgICAgICAgICAgdGhpcy5vbkV4ZWN1dGVTdWJqZWN0Lm5leHQoeyBhY3Rpb24sIHRva2VuIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9LCBvbkVycm9yKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgb25FcnJvcihlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgcHJpdmF0ZSBpbml0KCkge1xuICAgIHRoaXMucmVjYXB0Y2hhTG9hZGVyLnJlYWR5LnN1YnNjcmliZSgodmFsdWUpID0+IHtcbiAgICAgIHRoaXMuZ3JlY2FwdGNoYSA9IHZhbHVlO1xuICAgICAgaWYgKHRoaXMuYWN0aW9uQmFja2xvZyAmJiB0aGlzLmFjdGlvbkJhY2tsb2cubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLmFjdGlvbkJhY2tsb2cuZm9yRWFjaCgoW2FjdGlvbiwgc3ViamVjdF0pID0+IHRoaXMuZXhlY3V0ZUFjdGlvbldpdGhTdWJqZWN0KGFjdGlvbiwgc3ViamVjdCkpO1xuICAgICAgICB0aGlzLmFjdGlvbkJhY2tsb2cgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { Directive, forwardRef, HostListener } from "@angular/core";
|
|
2
|
+
import { NG_VALUE_ACCESSOR } from "@angular/forms";
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "./recaptcha.component";
|
|
5
|
+
export class RecaptchaValueAccessorDirective {
|
|
6
|
+
constructor(host) {
|
|
7
|
+
this.host = host;
|
|
8
|
+
this.requiresControllerReset = false;
|
|
9
|
+
}
|
|
10
|
+
writeValue(value) {
|
|
11
|
+
if (!value) {
|
|
12
|
+
this.host.reset();
|
|
13
|
+
}
|
|
14
|
+
else {
|
|
15
|
+
// In this case, it is most likely that a form controller has requested to write a specific value into the component.
|
|
16
|
+
// This isn't really a supported case - reCAPTCHA values are single-use, and, in a sense, readonly.
|
|
17
|
+
// What this means is that the form controller has recaptcha control state of X, while reCAPTCHA itself can't "restore"
|
|
18
|
+
// to that state. In order to make form controller aware of this discrepancy, and to fix the said misalignment,
|
|
19
|
+
// we'll be telling the controller to "reset" the value back to null.
|
|
20
|
+
if (this.host.__unsafe_widgetValue !== value && Boolean(this.host.__unsafe_widgetValue) === false) {
|
|
21
|
+
this.requiresControllerReset = true;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
registerOnChange(fn) {
|
|
26
|
+
this.onChange = fn;
|
|
27
|
+
if (this.requiresControllerReset) {
|
|
28
|
+
this.requiresControllerReset = false;
|
|
29
|
+
this.onChange(null);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
registerOnTouched(fn) {
|
|
33
|
+
this.onTouched = fn;
|
|
34
|
+
}
|
|
35
|
+
onResolve($event) {
|
|
36
|
+
if (this.onChange) {
|
|
37
|
+
this.onChange($event);
|
|
38
|
+
}
|
|
39
|
+
if (this.onTouched) {
|
|
40
|
+
this.onTouched();
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: RecaptchaValueAccessorDirective, deps: [{ token: i1.RecaptchaComponent }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
44
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.1", type: RecaptchaValueAccessorDirective, selector: "re-captcha[formControlName],re-captcha[formControl],re-captcha[ngModel]", host: { listeners: { "resolved": "onResolve($event)" } }, providers: [
|
|
45
|
+
{
|
|
46
|
+
multi: true,
|
|
47
|
+
provide: NG_VALUE_ACCESSOR,
|
|
48
|
+
useExisting: forwardRef(() => RecaptchaValueAccessorDirective),
|
|
49
|
+
},
|
|
50
|
+
], ngImport: i0 }); }
|
|
51
|
+
}
|
|
52
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: RecaptchaValueAccessorDirective, decorators: [{
|
|
53
|
+
type: Directive,
|
|
54
|
+
args: [{
|
|
55
|
+
providers: [
|
|
56
|
+
{
|
|
57
|
+
multi: true,
|
|
58
|
+
provide: NG_VALUE_ACCESSOR,
|
|
59
|
+
useExisting: forwardRef(() => RecaptchaValueAccessorDirective),
|
|
60
|
+
},
|
|
61
|
+
],
|
|
62
|
+
selector: "re-captcha[formControlName],re-captcha[formControl],re-captcha[ngModel]",
|
|
63
|
+
}]
|
|
64
|
+
}], ctorParameters: () => [{ type: i1.RecaptchaComponent }], propDecorators: { onResolve: [{
|
|
65
|
+
type: HostListener,
|
|
66
|
+
args: ["resolved", ["$event"]]
|
|
67
|
+
}] } });
|
|
68
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjYXB0Y2hhLXZhbHVlLWFjY2Vzc29yLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXJlY2FwdGNoYS9zcmMvbGliL3JlY2FwdGNoYS12YWx1ZS1hY2Nlc3Nvci5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BFLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7O0FBY3pFLE1BQU0sT0FBTywrQkFBK0I7SUFTMUMsWUFBb0IsSUFBd0I7UUFBeEIsU0FBSSxHQUFKLElBQUksQ0FBb0I7UUFGcEMsNEJBQXVCLEdBQUcsS0FBSyxDQUFDO0lBRU8sQ0FBQztJQUV6QyxVQUFVLENBQUMsS0FBYTtRQUM3QixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDWCxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3BCLENBQUM7YUFBTSxDQUFDO1lBQ04scUhBQXFIO1lBQ3JILG1HQUFtRztZQUNuRyx1SEFBdUg7WUFDdkgsK0dBQStHO1lBQy9HLHFFQUFxRTtZQUNyRSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEtBQUssS0FBSyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssS0FBSyxFQUFFLENBQUM7Z0JBQ2xHLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLENBQUM7WUFDdEMsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRU0sZ0JBQWdCLENBQUMsRUFBMkI7UUFDakQsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7UUFDbkIsSUFBSSxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztZQUNqQyxJQUFJLENBQUMsdUJBQXVCLEdBQUcsS0FBSyxDQUFDO1lBQ3JDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEIsQ0FBQztJQUNILENBQUM7SUFDTSxpQkFBaUIsQ0FBQyxFQUFjO1FBQ3JDLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFNEMsU0FBUyxDQUFDLE1BQWM7UUFDbkUsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN4QixDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ25CLENBQUM7SUFDSCxDQUFDOzhHQTVDVSwrQkFBK0I7a0dBQS9CLCtCQUErQiw0SkFUL0I7WUFDVDtnQkFDRSxLQUFLLEVBQUUsSUFBSTtnQkFDWCxPQUFPLEVBQUUsaUJBQWlCO2dCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLCtCQUErQixDQUFDO2FBQy9EO1NBQ0Y7OzJGQUdVLCtCQUErQjtrQkFWM0MsU0FBUzttQkFBQztvQkFDVCxTQUFTLEVBQUU7d0JBQ1Q7NEJBQ0UsS0FBSyxFQUFFLElBQUk7NEJBQ1gsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsZ0NBQWdDLENBQUM7eUJBQy9EO3FCQUNGO29CQUNELFFBQVEsRUFBRSx5RUFBeUU7aUJBQ3BGO3VGQXNDOEMsU0FBUztzQkFBckQsWUFBWTt1QkFBQyxVQUFVLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIGZvcndhcmRSZWYsIEhvc3RMaXN0ZW5lciB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcblxuaW1wb3J0IHsgUmVjYXB0Y2hhQ29tcG9uZW50IH0gZnJvbSBcIi4vcmVjYXB0Y2hhLmNvbXBvbmVudFwiO1xuXG5ARGlyZWN0aXZlKHtcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgbXVsdGk6IHRydWUsXG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFJlY2FwdGNoYVZhbHVlQWNjZXNzb3JEaXJlY3RpdmUpLFxuICAgIH0sXG4gIF0sXG4gIHNlbGVjdG9yOiBcInJlLWNhcHRjaGFbZm9ybUNvbnRyb2xOYW1lXSxyZS1jYXB0Y2hhW2Zvcm1Db250cm9sXSxyZS1jYXB0Y2hhW25nTW9kZWxdXCIsXG59KVxuZXhwb3J0IGNsYXNzIFJlY2FwdGNoYVZhbHVlQWNjZXNzb3JEaXJlY3RpdmUgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgcHJpdmF0ZSBvbkNoYW5nZTogKHZhbHVlOiBzdHJpbmcgfCBudWxsKSA9PiB2b2lkO1xuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgcHJpdmF0ZSBvblRvdWNoZWQ6ICgpID0+IHZvaWQ7XG5cbiAgcHJpdmF0ZSByZXF1aXJlc0NvbnRyb2xsZXJSZXNldCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaG9zdDogUmVjYXB0Y2hhQ29tcG9uZW50KSB7fVxuXG4gIHB1YmxpYyB3cml0ZVZhbHVlKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIXZhbHVlKSB7XG4gICAgICB0aGlzLmhvc3QucmVzZXQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSW4gdGhpcyBjYXNlLCBpdCBpcyBtb3N0IGxpa2VseSB0aGF0IGEgZm9ybSBjb250cm9sbGVyIGhhcyByZXF1ZXN0ZWQgdG8gd3JpdGUgYSBzcGVjaWZpYyB2YWx1ZSBpbnRvIHRoZSBjb21wb25lbnQuXG4gICAgICAvLyBUaGlzIGlzbid0IHJlYWxseSBhIHN1cHBvcnRlZCBjYXNlIC0gcmVDQVBUQ0hBIHZhbHVlcyBhcmUgc2luZ2xlLXVzZSwgYW5kLCBpbiBhIHNlbnNlLCByZWFkb25seS5cbiAgICAgIC8vIFdoYXQgdGhpcyBtZWFucyBpcyB0aGF0IHRoZSBmb3JtIGNvbnRyb2xsZXIgaGFzIHJlY2FwdGNoYSBjb250cm9sIHN0YXRlIG9mIFgsIHdoaWxlIHJlQ0FQVENIQSBpdHNlbGYgY2FuJ3QgXCJyZXN0b3JlXCJcbiAgICAgIC8vIHRvIHRoYXQgc3RhdGUuIEluIG9yZGVyIHRvIG1ha2UgZm9ybSBjb250cm9sbGVyIGF3YXJlIG9mIHRoaXMgZGlzY3JlcGFuY3ksIGFuZCB0byBmaXggdGhlIHNhaWQgbWlzYWxpZ25tZW50LFxuICAgICAgLy8gd2UnbGwgYmUgdGVsbGluZyB0aGUgY29udHJvbGxlciB0byBcInJlc2V0XCIgdGhlIHZhbHVlIGJhY2sgdG8gbnVsbC5cbiAgICAgIGlmICh0aGlzLmhvc3QuX191bnNhZmVfd2lkZ2V0VmFsdWUgIT09IHZhbHVlICYmIEJvb2xlYW4odGhpcy5ob3N0Ll9fdW5zYWZlX3dpZGdldFZhbHVlKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5yZXF1aXJlc0NvbnRyb2xsZXJSZXNldCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICAgIGlmICh0aGlzLnJlcXVpcmVzQ29udHJvbGxlclJlc2V0KSB7XG4gICAgICB0aGlzLnJlcXVpcmVzQ29udHJvbGxlclJlc2V0ID0gZmFsc2U7XG4gICAgICB0aGlzLm9uQ2hhbmdlKG51bGwpO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcihcInJlc29sdmVkXCIsIFtcIiRldmVudFwiXSkgcHVibGljIG9uUmVzb2x2ZSgkZXZlbnQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLm9uQ2hhbmdlKSB7XG4gICAgICB0aGlzLm9uQ2hhbmdlKCRldmVudCk7XG4gICAgfVxuICAgIGlmICh0aGlzLm9uVG91Y2hlZCkge1xuICAgICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
import { Component, EventEmitter, HostBinding, Inject, Input, Optional, Output, } from "@angular/core";
|
|
2
|
+
import { RECAPTCHA_SETTINGS } from "./tokens";
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "./recaptcha-loader.service";
|
|
5
|
+
let nextId = 0;
|
|
6
|
+
export class RecaptchaComponent {
|
|
7
|
+
constructor(elementRef, loader, zone, settings) {
|
|
8
|
+
this.elementRef = elementRef;
|
|
9
|
+
this.loader = loader;
|
|
10
|
+
this.zone = zone;
|
|
11
|
+
this.id = `ngrecaptcha-${nextId++}`;
|
|
12
|
+
this.errorMode = "default";
|
|
13
|
+
this.resolved = new EventEmitter();
|
|
14
|
+
/**
|
|
15
|
+
* @deprecated `(error) output will be removed in the next major version. Use (errored) instead
|
|
16
|
+
*/
|
|
17
|
+
// eslint-disable-next-line @angular-eslint/no-output-native
|
|
18
|
+
this.error = new EventEmitter();
|
|
19
|
+
this.errored = new EventEmitter();
|
|
20
|
+
if (settings) {
|
|
21
|
+
this.siteKey = settings.siteKey;
|
|
22
|
+
this.theme = settings.theme;
|
|
23
|
+
this.type = settings.type;
|
|
24
|
+
this.size = settings.size;
|
|
25
|
+
this.badge = settings.badge;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
ngAfterViewInit() {
|
|
29
|
+
this.subscription = this.loader.ready.subscribe((grecaptcha) => {
|
|
30
|
+
if (grecaptcha != null && grecaptcha.render instanceof Function) {
|
|
31
|
+
this.grecaptcha = grecaptcha;
|
|
32
|
+
this.renderRecaptcha();
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
ngOnDestroy() {
|
|
37
|
+
// reset the captcha to ensure it does not leave anything behind
|
|
38
|
+
// after the component is no longer needed
|
|
39
|
+
this.grecaptchaReset();
|
|
40
|
+
if (this.subscription) {
|
|
41
|
+
this.subscription.unsubscribe();
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Executes the invisible recaptcha.
|
|
46
|
+
* Does nothing if component's size is not set to "invisible".
|
|
47
|
+
*/
|
|
48
|
+
execute() {
|
|
49
|
+
if (this.size !== "invisible") {
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
if (this.widget != null) {
|
|
53
|
+
void this.grecaptcha.execute(this.widget);
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
// delay execution of recaptcha until it actually renders
|
|
57
|
+
this.executeRequested = true;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
reset() {
|
|
61
|
+
if (this.widget != null) {
|
|
62
|
+
if (this.grecaptcha.getResponse(this.widget)) {
|
|
63
|
+
// Only emit an event in case if something would actually change.
|
|
64
|
+
// That way we do not trigger "touching" of the control if someone does a "reset"
|
|
65
|
+
// on a non-resolved captcha.
|
|
66
|
+
this.resolved.emit(null);
|
|
67
|
+
}
|
|
68
|
+
this.grecaptchaReset();
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* ⚠️ Warning! Use this property at your own risk!
|
|
73
|
+
*
|
|
74
|
+
* While this member is `public`, it is not a part of the component's public API.
|
|
75
|
+
* 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.
|
|
76
|
+
* You are **strongly advised** against using this property.
|
|
77
|
+
* Instead, use more idiomatic ways to get reCAPTCHA value, such as `resolved` EventEmitter, or form-bound methods (ngModel, formControl, and the likes).å
|
|
78
|
+
*/
|
|
79
|
+
get __unsafe_widgetValue() {
|
|
80
|
+
return this.widget != null ? this.grecaptcha.getResponse(this.widget) : null;
|
|
81
|
+
}
|
|
82
|
+
/** @internal */
|
|
83
|
+
expired() {
|
|
84
|
+
this.resolved.emit(null);
|
|
85
|
+
}
|
|
86
|
+
/** @internal */
|
|
87
|
+
onError(args) {
|
|
88
|
+
// eslint-disable-next-line deprecation/deprecation
|
|
89
|
+
this.error.emit(args);
|
|
90
|
+
this.errored.emit(args);
|
|
91
|
+
}
|
|
92
|
+
/** @internal */
|
|
93
|
+
captchaResponseCallback(response) {
|
|
94
|
+
this.resolved.emit(response);
|
|
95
|
+
}
|
|
96
|
+
/** @internal */
|
|
97
|
+
grecaptchaReset() {
|
|
98
|
+
if (this.widget != null) {
|
|
99
|
+
this.zone.runOutsideAngular(() => this.grecaptcha.reset(this.widget));
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
/** @internal */
|
|
103
|
+
renderRecaptcha() {
|
|
104
|
+
// This `any` can be removed after @types/grecaptcha get updated
|
|
105
|
+
const renderOptions = {
|
|
106
|
+
badge: this.badge,
|
|
107
|
+
callback: (response) => {
|
|
108
|
+
this.zone.run(() => this.captchaResponseCallback(response));
|
|
109
|
+
},
|
|
110
|
+
"expired-callback": () => {
|
|
111
|
+
this.zone.run(() => this.expired());
|
|
112
|
+
},
|
|
113
|
+
sitekey: this.siteKey,
|
|
114
|
+
size: this.size,
|
|
115
|
+
tabindex: this.tabIndex,
|
|
116
|
+
theme: this.theme,
|
|
117
|
+
type: this.type,
|
|
118
|
+
};
|
|
119
|
+
if (this.errorMode === "handled") {
|
|
120
|
+
renderOptions["error-callback"] = (...args) => {
|
|
121
|
+
this.zone.run(() => this.onError(args));
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
this.widget = this.grecaptcha.render(this.elementRef.nativeElement, renderOptions);
|
|
125
|
+
if (this.executeRequested === true) {
|
|
126
|
+
this.executeRequested = false;
|
|
127
|
+
this.execute();
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: RecaptchaComponent, deps: [{ token: i0.ElementRef }, { token: i1.RecaptchaLoaderService }, { token: i0.NgZone }, { token: RECAPTCHA_SETTINGS, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
131
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.1", type: RecaptchaComponent, selector: "re-captcha", inputs: { id: "id", siteKey: "siteKey", theme: "theme", type: "type", size: "size", tabIndex: "tabIndex", badge: "badge", errorMode: "errorMode" }, outputs: { resolved: "resolved", error: "error", errored: "errored" }, host: { properties: { "attr.id": "this.id" } }, exportAs: ["reCaptcha"], ngImport: i0, template: ``, isInline: true }); }
|
|
132
|
+
}
|
|
133
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: RecaptchaComponent, decorators: [{
|
|
134
|
+
type: Component,
|
|
135
|
+
args: [{
|
|
136
|
+
exportAs: "reCaptcha",
|
|
137
|
+
selector: "re-captcha",
|
|
138
|
+
template: ``,
|
|
139
|
+
}]
|
|
140
|
+
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i1.RecaptchaLoaderService }, { type: i0.NgZone }, { type: undefined, decorators: [{
|
|
141
|
+
type: Optional
|
|
142
|
+
}, {
|
|
143
|
+
type: Inject,
|
|
144
|
+
args: [RECAPTCHA_SETTINGS]
|
|
145
|
+
}] }], propDecorators: { id: [{
|
|
146
|
+
type: Input
|
|
147
|
+
}, {
|
|
148
|
+
type: HostBinding,
|
|
149
|
+
args: ["attr.id"]
|
|
150
|
+
}], siteKey: [{
|
|
151
|
+
type: Input
|
|
152
|
+
}], theme: [{
|
|
153
|
+
type: Input
|
|
154
|
+
}], type: [{
|
|
155
|
+
type: Input
|
|
156
|
+
}], size: [{
|
|
157
|
+
type: Input
|
|
158
|
+
}], tabIndex: [{
|
|
159
|
+
type: Input
|
|
160
|
+
}], badge: [{
|
|
161
|
+
type: Input
|
|
162
|
+
}], errorMode: [{
|
|
163
|
+
type: Input
|
|
164
|
+
}], resolved: [{
|
|
165
|
+
type: Output
|
|
166
|
+
}], error: [{
|
|
167
|
+
type: Output
|
|
168
|
+
}], errored: [{
|
|
169
|
+
type: Output
|
|
170
|
+
}] } });
|
|
171
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjYXB0Y2hhLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXJlY2FwdGNoYS9zcmMvbGliL3JlY2FwdGNoYS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFFVCxZQUFZLEVBQ1osV0FBVyxFQUNYLE1BQU0sRUFDTixLQUFLLEVBR0wsUUFBUSxFQUNSLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUt2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxVQUFVLENBQUM7OztBQUU5QyxJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFXZixNQUFNLE9BQU8sa0JBQWtCO0lBOEI3QixZQUNVLFVBQW1DLEVBQ25DLE1BQThCLEVBQzlCLElBQVksRUFDb0IsUUFBNEI7UUFINUQsZUFBVSxHQUFWLFVBQVUsQ0FBeUI7UUFDbkMsV0FBTSxHQUFOLE1BQU0sQ0FBd0I7UUFDOUIsU0FBSSxHQUFKLElBQUksQ0FBUTtRQTlCZixPQUFFLEdBQUcsZUFBZSxNQUFNLEVBQUUsRUFBRSxDQUFDO1FBUXRCLGNBQVMsR0FBMEIsU0FBUyxDQUFDO1FBRTVDLGFBQVEsR0FBRyxJQUFJLFlBQVksRUFBaUIsQ0FBQztRQUM5RDs7V0FFRztRQUNILDREQUE0RDtRQUMzQyxVQUFLLEdBQUcsSUFBSSxZQUFZLEVBQTRCLENBQUM7UUFDckQsWUFBTyxHQUFHLElBQUksWUFBWSxFQUE0QixDQUFDO1FBaUJ0RSxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQ2IsSUFBSSxDQUFDLE9BQU8sR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDO1lBQ2hDLElBQUksQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQztZQUM1QixJQUFJLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUM7WUFDMUIsSUFBSSxDQUFDLElBQUksR0FBRyxRQUFRLENBQUMsSUFB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Z0IsR0FBRyxLQUFLLENBQUM7WUFDOUIsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2pCLENBQUM7SUFDSCxDQUFDOzhHQS9KVSxrQkFBa0Isd0dBa0NQLGtCQUFrQjtrR0FsQzdCLGtCQUFrQixzVkFGbkIsRUFBRTs7MkZBRUQsa0JBQWtCO2tCQUw5QixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxXQUFXO29CQUNyQixRQUFRLEVBQUUsWUFBWTtvQkFDdEIsUUFBUSxFQUFFLEVBQUU7aUJBQ2I7OzBCQW1DSSxRQUFROzswQkFBSSxNQUFNOzJCQUFDLGtCQUFrQjt5Q0EvQmpDLEVBQUU7c0JBRlIsS0FBSzs7c0JBQ0wsV0FBVzt1QkFBQyxTQUFTO2dCQUdOLE9BQU87c0JBQXRCLEtBQUs7Z0JBQ1UsS0FBSztzQkFBcEIsS0FBSztnQkFDVSxJQUFJO3NCQUFuQixLQUFLO2dCQUNVLElBQUk7c0JBQW5CLEtBQUs7Z0JBQ1UsUUFBUTtzQkFBdkIsS0FBSztnQkFDVSxLQUFLO3NCQUFwQixLQUFLO2dCQUNVLFNBQVM7c0JBQXhCLEtBQUs7Z0JBRVcsUUFBUTtzQkFBeEIsTUFBTTtnQkFLVSxLQUFLO3NCQUFyQixNQUFNO2dCQUNVLE9BQU87c0JBQXZCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdEJpbmRpbmcsXG4gIEluamVjdCxcbiAgSW5wdXQsXG4gIE5nWm9uZSxcbiAgT25EZXN0cm95LFxuICBPcHRpb25hbCxcbiAgT3V0cHV0LFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSBcInJ4anNcIjtcblxuaW1wb3J0IHsgUmVjYXB0Y2hhTG9hZGVyU2VydmljZSB9IGZyb20gXCIuL3JlY2FwdGNoYS1sb2FkZXIuc2VydmljZVwiO1xuaW1wb3J0IHsgUmVjYXB0Y2hhU2V0dGluZ3MgfSBmcm9tIFwiLi9yZWNhcHRjaGEtc2V0dGluZ3NcIjtcbmltcG9ydCB7IFJFQ0FQVENIQV9TRVRUSU5HUyB9IGZyb20gXCIuL3Rva2Vuc1wiO1xuXG5sZXQgbmV4dElkID0gMDtcblxuZXhwb3J0IHR5cGUgTmV2ZXJVbmRlZmluZWQ8VD4gPSBUIGV4dGVuZHMgdW5kZWZpbmVkID8gbmV2ZXIgOiBUO1xuXG5leHBvcnQgdHlwZSBSZWNhcHRjaGFFcnJvclBhcmFtZXRlcnMgPSBQYXJhbWV0ZXJzPE5ldmVyVW5kZWZpbmVkPFJlQ2FwdGNoYVYyLlBhcmFtZXRlcnNbXCJlcnJvci1jYWxsYmFja1wiXT4+O1xuXG5AQ29tcG9uZW50KHtcbiAgZXhwb3J0QXM6IFwicmVDYXB0Y2hhXCIsXG4gIHNlbGVjdG9yOiBcInJlLWNhcHRjaGFcIixcbiAgdGVtcGxhdGU6IGBgLFxufSlcbmV4cG9ydCBjbGFzcyBSZWNhcHRjaGFDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICBASW5wdXQoKVxuICBASG9zdEJpbmRpbmcoXCJhdHRyLmlkXCIpXG4gIHB1YmxpYyBpZCA9IGBuZ3JlY2FwdGNoYS0ke25leHRJZCsrfWA7XG5cbiAgQElucHV0KCkgcHVibGljIHNpdGVLZXk/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIHB1YmxpYyB0aGVtZT86IFJlQ2FwdGNoYVYyLlRoZW1lO1xuICBASW5wdXQoKSBwdWJsaWMgdHlwZT86IFJlQ2FwdGNoYVYyLlR5cGU7XG4gIEBJbnB1dCgpIHB1YmxpYyBzaXplPzogUmVDYXB0Y2hhVjIuU2l6ZTtcbiAgQElucHV0KCkgcHVibGljIHRhYkluZGV4PzogbnVtYmVyO1xuICBASW5wdXQoKSBwdWJsaWMgYmFkZ2U/OiBSZUNhcHRjaGFWMi5CYWRnZTtcbiAgQElucHV0KCkgcHVibGljIGVycm9yTW9kZTogXCJoYW5kbGVkXCIgfCBcImRlZmF1bHRcIiA9IFwiZGVmYXVsdFwiO1xuXG4gIEBPdXRwdXQoKSBwdWJsaWMgcmVzb2x2ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZyB8IG51bGw+KCk7XG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBgKGVycm9yKSBvdXRwdXQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZXh0IG1ham9yIHZlcnNpb24uIFVzZSAoZXJyb3JlZCkgaW5zdGVhZFxuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1vdXRwdXQtbmF0aXZlXG4gIEBPdXRwdXQoKSBwdWJsaWMgZXJyb3IgPSBuZXcgRXZlbnRFbWl0dGVyPFJlY2FwdGNoYUVycm9yUGFyYW1ldGVycz4oKTtcbiAgQE91dHB1dCgpIHB1YmxpYyBlcnJvcmVkID0gbmV3IEV2ZW50RW1pdHRlcjxSZWNhcHRjaGFFcnJvclBhcmFtZXRlcnM+KCk7XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBwcml2YXRlIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICAvKiogQGludGVybmFsICovXG4gIHByaXZhdGUgd2lkZ2V0OiBudW1iZXI7XG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgcHJpdmF0ZSBncmVjYXB0Y2hhOiBSZUNhcHRjaGFWMi5SZUNhcHRjaGE7XG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgcHJpdmF0ZSBleGVjdXRlUmVxdWVzdGVkOiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgcHJpdmF0ZSBsb2FkZXI6IFJlY2FwdGNoYUxvYWRlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSB6b25lOiBOZ1pvbmUsXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChSRUNBUFRDSEFfU0VUVElOR1MpIHNldHRpbmdzPzogUmVjYXB0Y2hhU2V0dGluZ3MsXG4gICkge1xuICAgIGlmIChzZXR0aW5ncykge1xuICAgICAgdGhpcy5zaXRlS2V5ID0gc2V0dGluZ3Muc2l0ZUtleTtcbiAgICAgIHRoaXMudGhlbWUgPSBzZXR0aW5ncy50aGVtZTtcbiAgICAgIHRoaXMudHlwZSA9IHNldHRpbmdzLnR5cGU7XG4gICAgICB0aGlzLnNpemUgPSBzZXR0aW5ncy5zaXplO1xuICAgICAgdGhpcy5iYWRnZSA9IHNldHRpbmdzLmJhZGdlO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLmxvYWRlci5yZWFkeS5zdWJzY3JpYmUoKGdyZWNhcHRjaGE6IFJlQ2FwdGNoYVYyLlJlQ2FwdGNoYSkgPT4ge1xuICAgICAgaWYgKGdyZWNhcHRjaGEgIT0gbnVsbCAmJiBncmVjYXB0Y2hhLnJlbmRlciBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XG4gICAgICAgIHRoaXMuZ3JlY2FwdGNoYSA9IGdyZWNhcHRjaGE7XG4gICAgICAgIHRoaXMucmVuZGVyUmVjYXB0Y2hhKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgLy8gcmVzZXQgdGhlIGNhcHRjaGEgdG8gZW5zdXJlIGl0IGRvZXMgbm90IGxlYXZlIGFueXRoaW5nIGJlaGluZFxuICAgIC8vIGFmdGVyIHRoZSBjb21wb25lbnQgaXMgbm8gbG9uZ2VyIG5lZWRlZFxuICAgIHRoaXMuZ3JlY2FwdGNoYVJlc2V0KCk7XG4gICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlcyB0aGUgaW52aXNpYmxlIHJlY2FwdGNoYS5cbiAgICogRG9lcyBub3RoaW5nIGlmIGNvbXBvbmVudCdzIHNpemUgaXMgbm90IHNldCB0byBcImludmlzaWJsZVwiLlxuICAgKi9cbiAgcHVibGljIGV4ZWN1dGUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2l6ZSAhPT0gXCJpbnZpc2libGVcIikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLndpZGdldCAhPSBudWxsKSB7XG4gICAgICB2b2lkIHRoaXMuZ3JlY2FwdGNoYS5leGVjdXRlKHRoaXMud2lkZ2V0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZGVsYXkgZXhlY3V0aW9uIG9mIHJlY2FwdGNoYSB1bnRpbCBpdCBhY3R1YWxseSByZW5kZXJzXG4gICAgICB0aGlzLmV4ZWN1dGVSZXF1ZXN0ZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyByZXNldCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy53aWRnZXQgIT0gbnVsbCkge1xuICAgICAgaWYgKHRoaXMuZ3JlY2FwdGNoYS5nZXRSZXNwb25zZSh0aGlzLndpZGdldCkpIHtcbiAgICAgICAgLy8gT25seSBlbWl0IGFuIGV2ZW50IGluIGNhc2UgaWYgc29tZXRoaW5nIHdvdWxkIGFjdHVhbGx5IGNoYW5nZS5cbiAgICAgICAgLy8gVGhhdCB3YXkgd2UgZG8gbm90IHRyaWdnZXIgXCJ0b3VjaGluZ1wiIG9mIHRoZSBjb250cm9sIGlmIHNvbWVvbmUgZG9lcyBhIFwicmVzZXRcIlxuICAgICAgICAvLyBvbiBhIG5vbi1yZXNvbHZlZCBjYXB0Y2hhLlxuICAgICAgICB0aGlzLnJlc29sdmVkLmVtaXQobnVsbCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZ3JlY2FwdGNoYVJlc2V0KCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIOKaoO+4jyBXYXJuaW5nISBVc2UgdGhpcyBwcm9wZXJ0eSBhdCB5b3VyIG93biByaXNrIVxuICAgKlxuICAgKiBXaGlsZSB0aGlzIG1lbWJlciBpcyBgcHVibGljYCwgaXQgaXMgbm90IGEgcGFydCBvZiB0aGUgY29tcG9uZW50J3MgcHVibGljIEFQSS5cbiAgICogVGhlIHNlbWFudGljIHZlcnNpb25pbmcgZ3VhcmFudGVlcyBfd2lsbCBub3QgYmUgaG9ub3JlZF8hIFRodXMsIHlvdSBtaWdodCBmaW5kIHRoYXQgdGhpcyBwcm9wZXJ0eSBiZWhhdmlvciBjaGFuZ2VzIGluIGluY29tcGF0aWJsZSB3YXlzIGluIG1pbm9yIG9yIGV2ZW4gcGF0Y2ggcmVsZWFzZXMuXG4gICAqIFlvdSBhcmUgKipzdHJvbmdseSBhZHZpc2VkKiogYWdhaW5zdCB1c2luZyB0aGlzIHByb3BlcnR5LlxuICAgKiBJbnN0ZWFkLCB1c2UgbW9yZSBpZGlvbWF0aWMgd2F5cyB0byBnZXQgcmVDQVBUQ0hBIHZhbHVlLCBzdWNoIGFzIGByZXNvbHZlZGAgRXZlbnRFbWl0dGVyLCBvciBmb3JtLWJvdW5kIG1ldGhvZHMgKG5nTW9kZWwsIGZvcm1Db250cm9sLCBhbmQgdGhlIGxpa2VzKS7DpVxuICAgKi9cbiAgcHVibGljIGdldCBfX3Vuc2FmZV93aWRnZXRWYWx1ZSgpOiBzdHJpbmcgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy53aWRnZXQgIT0gbnVsbCA/IHRoaXMuZ3JlY2FwdGNoYS5nZXRSZXNwb25zZSh0aGlzLndpZGdldCkgOiBudWxsO1xuICB9XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBwcml2YXRlIGV4cGlyZWQoKSB7XG4gICAgdGhpcy5yZXNvbHZlZC5lbWl0KG51bGwpO1xuICB9XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBwcml2YXRlIG9uRXJyb3IoYXJnczogUmVjYXB0Y2hhRXJyb3JQYXJhbWV0ZXJzKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gICAgdGhpcy5lcnJvci5lbWl0KGFyZ3MpO1xuICAgIHRoaXMuZXJyb3JlZC5lbWl0KGFyZ3MpO1xuICB9XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBwcml2YXRlIGNhcHRjaGFSZXNwb25zZUNhbGxiYWNrKHJlc3BvbnNlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnJlc29sdmVkLmVtaXQocmVzcG9uc2UpO1xuICB9XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBwcml2YXRlIGdyZWNhcHRjaGFSZXNldCgpIHtcbiAgICBpZiAodGhpcy53aWRnZXQgIT0gbnVsbCkge1xuICAgICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHRoaXMuZ3JlY2FwdGNoYS5yZXNldCh0aGlzLndpZGdldCkpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgcHJpdmF0ZSByZW5kZXJSZWNhcHRjaGEoKSB7XG4gICAgLy8gVGhpcyBgYW55YCBjYW4gYmUgcmVtb3ZlZCBhZnRlciBAdHlwZXMvZ3JlY2FwdGNoYSBnZXQgdXBkYXRlZFxuICAgIGNvbnN0IHJlbmRlck9wdGlvbnM6IFJlQ2FwdGNoYVYyLlBhcmFtZXRlcnMgPSB7XG4gICAgICBiYWRnZTogdGhpcy5iYWRnZSxcbiAgICAgIGNhbGxiYWNrOiAocmVzcG9uc2U6IHN0cmluZykgPT4ge1xuICAgICAgICB0aGlzLnpvbmUucnVuKCgpID0+IHRoaXMuY2FwdGNoYVJlc3BvbnNlQ2FsbGJhY2socmVzcG9uc2UpKTtcbiAgICAgIH0sXG4gICAgICBcImV4cGlyZWQtY2FsbGJhY2tcIjogKCkgPT4ge1xuICAgICAgICB0aGlzLnpvbmUucnVuKCgpID0+IHRoaXMuZXhwaXJlZCgpKTtcbiAgICAgIH0sXG4gICAgICBzaXRla2V5OiB0aGlzLnNpdGVLZXksXG4gICAgICBzaXplOiB0aGlzLnNpemUsXG4gICAgICB0YWJpbmRleDogdGhpcy50YWJJbmRleCxcbiAgICAgIHRoZW1lOiB0aGlzLnRoZW1lLFxuICAgICAgdHlwZTogdGhpcy50eXBlLFxuICAgIH07XG5cbiAgICBpZiAodGhpcy5lcnJvck1vZGUgPT09IFwiaGFuZGxlZFwiKSB7XG4gICAgICByZW5kZXJPcHRpb25zW1wiZXJyb3ItY2FsbGJhY2tcIl0gPSAoLi4uYXJnczogUmVjYXB0Y2hhRXJyb3JQYXJhbWV0ZXJzKSA9PiB7XG4gICAgICAgIHRoaXMuem9uZS5ydW4oKCkgPT4gdGhpcy5vbkVycm9yKGFyZ3MpKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgdGhpcy53aWRnZXQgPSB0aGlzLmdyZWNhcHRjaGEucmVuZGVyKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCByZW5kZXJPcHRpb25zKTtcblxuICAgIGlmICh0aGlzLmV4ZWN1dGVSZXF1ZXN0ZWQgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuZXhlY3V0ZVJlcXVlc3RlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5leGVjdXRlKCk7XG4gICAgfVxuICB9XG59XG4iXX0=
|