@nauth-toolkit/client-angular 0.1.92 → 0.1.94

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.
@@ -1,4 +1,4 @@
1
- import { NgModule, inject } from '@angular/core';
1
+ import { NgModule, inject, Optional, APP_INITIALIZER } from '@angular/core';
2
2
  import { HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http';
3
3
  import { Router } from '@angular/router';
4
4
  import { NAUTH_CLIENT_CONFIG } from './tokens';
@@ -6,13 +6,14 @@ import { AuthService } from './auth.service';
6
6
  import { AngularHttpAdapter } from './http-adapter';
7
7
  import { AuthInterceptorClass } from './auth.interceptor.class';
8
8
  import { AuthGuard } from '../lib/auth.guard';
9
+ import { RecaptchaService, RECAPTCHA_CONFIG } from '../lib/recaptcha.service';
9
10
  import * as i0 from "@angular/core";
10
11
  /**
11
12
  * NgModule for nauth-toolkit Angular integration.
12
13
  *
13
14
  * Use this for NgModule-based apps (Angular 17+ with NgModule or legacy apps).
14
15
  *
15
- * @example
16
+ * @example Basic Setup
16
17
  * ```typescript
17
18
  * // app.module.ts
18
19
  * import { NAuthModule } from '@nauth-toolkit/client-angular';
@@ -27,35 +28,67 @@ import * as i0 from "@angular/core";
27
28
  * })
28
29
  * export class AppModule {}
29
30
  * ```
31
+ *
32
+ * @example With reCAPTCHA Enterprise
33
+ * ```typescript
34
+ * NAuthModule.forRoot({
35
+ * baseUrl: 'http://localhost:3000/auth',
36
+ * tokenDelivery: 'cookies',
37
+ * recaptcha: {
38
+ * enabled: true,
39
+ * version: 'enterprise',
40
+ * siteKey: environment.recaptchaSiteKey,
41
+ * action: 'login',
42
+ * },
43
+ * })
44
+ * ```
30
45
  */
31
46
  export class NAuthModule {
32
47
  static forRoot(config) {
33
- return {
34
- ngModule: NAuthModule,
35
- providers: [
36
- {
37
- provide: NAUTH_CLIENT_CONFIG,
38
- useValue: config,
39
- },
40
- AngularHttpAdapter,
41
- {
42
- provide: AuthService,
43
- useFactory: (httpAdapter) => {
44
- // Try to inject Router optionally - if not available, pass undefined
45
- // Router will be undefined if not provided (e.g., in apps without routing)
46
- const router = inject(Router, { optional: true });
47
- return new AuthService(config, httpAdapter, router ?? undefined);
48
- },
49
- deps: [AngularHttpAdapter],
48
+ const providers = [
49
+ {
50
+ provide: NAUTH_CLIENT_CONFIG,
51
+ useValue: config,
52
+ },
53
+ AngularHttpAdapter,
54
+ {
55
+ provide: AuthService,
56
+ useFactory: (httpAdapter, recaptchaService) => {
57
+ // Try to inject Router optionally - if not available, pass undefined
58
+ // Router will be undefined if not provided (e.g., in apps without routing)
59
+ const router = inject(Router, { optional: true });
60
+ return new AuthService(config, httpAdapter, router ?? undefined, recaptchaService);
50
61
  },
51
- {
52
- provide: HTTP_INTERCEPTORS,
53
- useClass: AuthInterceptorClass,
54
- multi: true,
62
+ deps: [AngularHttpAdapter, [new Optional(), RecaptchaService]],
63
+ },
64
+ {
65
+ provide: HTTP_INTERCEPTORS,
66
+ useClass: AuthInterceptorClass,
67
+ multi: true,
68
+ },
69
+ // Provide AuthGuard so it has access to NAUTH_CLIENT_CONFIG
70
+ AuthGuard,
71
+ ];
72
+ // Add reCAPTCHA providers if configured
73
+ if (config.recaptcha?.enabled) {
74
+ providers.push({
75
+ provide: RECAPTCHA_CONFIG,
76
+ // Cast because interface extends but they're compatible
77
+ useValue: config.recaptcha,
78
+ }, RecaptchaService, {
79
+ provide: APP_INITIALIZER,
80
+ useFactory: () => {
81
+ // Force RecaptchaService instantiation at app startup so script preloads
82
+ inject(RecaptchaService);
83
+ // No-op - constructor already handles preload
84
+ return () => { };
55
85
  },
56
- // Provide AuthGuard so it has access to NAUTH_CLIENT_CONFIG
57
- AuthGuard,
58
- ],
86
+ multi: true,
87
+ });
88
+ }
89
+ return {
90
+ ngModule: NAuthModule,
91
+ providers,
59
92
  };
60
93
  }
61
94
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NAuthModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
@@ -69,4 +102,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
69
102
  exports: [HttpClientModule],
70
103
  }]
71
104
  }] });
72
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF1dGgubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL25nbW9kdWxlL25hdXRoLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUF1QixNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDM0UsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG1CQUFtQixDQUFDOztBQUc5Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQkc7QUFLSCxNQUFNLE9BQU8sV0FBVztJQUN0QixNQUFNLENBQUMsT0FBTyxDQUFDLE1BQXlCO1FBQ3RDLE9BQU87WUFDTCxRQUFRLEVBQUUsV0FBVztZQUNyQixTQUFTLEVBQUU7Z0JBQ1Q7b0JBQ0UsT0FBTyxFQUFFLG1CQUFtQjtvQkFDNUIsUUFBUSxFQUFFLE1BQU07aUJBQ2pCO2dCQUNELGtCQUFrQjtnQkFDbEI7b0JBQ0UsT0FBTyxFQUFFLFdBQVc7b0JBQ3BCLFVBQVUsRUFBRSxDQUFDLFdBQStCLEVBQUUsRUFBRTt3QkFDOUMscUVBQXFFO3dCQUNyRSwyRUFBMkU7d0JBQzNFLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQzt3QkFDbEQsT0FBTyxJQUFJLFdBQVcsQ0FBQyxNQUFNLEVBQUUsV0FBVyxFQUFFLE1BQU0sSUFBSSxTQUFTLENBQUMsQ0FBQztvQkFDbkUsQ0FBQztvQkFDRCxJQUFJLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQztpQkFDM0I7Z0JBQ0Q7b0JBQ0UsT0FBTyxFQUFFLGlCQUFpQjtvQkFDMUIsUUFBUSxFQUFFLG9CQUFvQjtvQkFDOUIsS0FBSyxFQUFFLElBQUk7aUJBQ1o7Z0JBQ0QsNERBQTREO2dCQUM1RCxTQUFTO2FBQ1Y7U0FDRixDQUFDO0lBQ0osQ0FBQzt3R0E3QlUsV0FBVzt5R0FBWCxXQUFXLFlBSFosZ0JBQWdCLGFBQ2hCLGdCQUFnQjt5R0FFZixXQUFXLFlBSFosZ0JBQWdCLEVBQ2hCLGdCQUFnQjs7NEZBRWYsV0FBVztrQkFKdkIsUUFBUTttQkFBQztvQkFDUixPQUFPLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQztvQkFDM0IsT0FBTyxFQUFFLENBQUMsZ0JBQWdCLENBQUM7aUJBQzVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUsIE1vZHVsZVdpdGhQcm92aWRlcnMsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSHR0cENsaWVudE1vZHVsZSwgSFRUUF9JTlRFUkNFUFRPUlMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgTkFVVEhfQ0xJRU5UX0NPTkZJRyB9IGZyb20gJy4vdG9rZW5zJztcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi9hdXRoLnNlcnZpY2UnO1xuaW1wb3J0IHsgQW5ndWxhckh0dHBBZGFwdGVyIH0gZnJvbSAnLi9odHRwLWFkYXB0ZXInO1xuaW1wb3J0IHsgQXV0aEludGVyY2VwdG9yQ2xhc3MgfSBmcm9tICcuL2F1dGguaW50ZXJjZXB0b3IuY2xhc3MnO1xuaW1wb3J0IHsgQXV0aEd1YXJkIH0gZnJvbSAnLi4vbGliL2F1dGguZ3VhcmQnO1xuaW1wb3J0IHsgTkF1dGhDbGllbnRDb25maWcgfSBmcm9tICdAbmF1dGgtdG9vbGtpdC9jbGllbnQnO1xuXG4vKipcbiAqIE5nTW9kdWxlIGZvciBuYXV0aC10b29sa2l0IEFuZ3VsYXIgaW50ZWdyYXRpb24uXG4gKlxuICogVXNlIHRoaXMgZm9yIE5nTW9kdWxlLWJhc2VkIGFwcHMgKEFuZ3VsYXIgMTcrIHdpdGggTmdNb2R1bGUgb3IgbGVnYWN5IGFwcHMpLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAvLyBhcHAubW9kdWxlLnRzXG4gKiBpbXBvcnQgeyBOQXV0aE1vZHVsZSB9IGZyb20gJ0BuYXV0aC10b29sa2l0L2NsaWVudC1hbmd1bGFyJztcbiAqXG4gKiBATmdNb2R1bGUoe1xuICogICBpbXBvcnRzOiBbXG4gKiAgICAgTkF1dGhNb2R1bGUuZm9yUm9vdCh7XG4gKiAgICAgICBiYXNlVXJsOiAnaHR0cDovL2xvY2FsaG9zdDozMDAwL2F1dGgnLFxuICogICAgICAgdG9rZW5EZWxpdmVyeTogJ2Nvb2tpZXMnLFxuICogICAgIH0pLFxuICogICBdLFxuICogfSlcbiAqIGV4cG9ydCBjbGFzcyBBcHBNb2R1bGUge31cbiAqIGBgYFxuICovXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbSHR0cENsaWVudE1vZHVsZV0sXG4gIGV4cG9ydHM6IFtIdHRwQ2xpZW50TW9kdWxlXSxcbn0pXG5leHBvcnQgY2xhc3MgTkF1dGhNb2R1bGUge1xuICBzdGF0aWMgZm9yUm9vdChjb25maWc6IE5BdXRoQ2xpZW50Q29uZmlnKTogTW9kdWxlV2l0aFByb3ZpZGVyczxOQXV0aE1vZHVsZT4ge1xuICAgIHJldHVybiB7XG4gICAgICBuZ01vZHVsZTogTkF1dGhNb2R1bGUsXG4gICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHByb3ZpZGU6IE5BVVRIX0NMSUVOVF9DT05GSUcsXG4gICAgICAgICAgdXNlVmFsdWU6IGNvbmZpZyxcbiAgICAgICAgfSxcbiAgICAgICAgQW5ndWxhckh0dHBBZGFwdGVyLFxuICAgICAgICB7XG4gICAgICAgICAgcHJvdmlkZTogQXV0aFNlcnZpY2UsXG4gICAgICAgICAgdXNlRmFjdG9yeTogKGh0dHBBZGFwdGVyOiBBbmd1bGFySHR0cEFkYXB0ZXIpID0+IHtcbiAgICAgICAgICAgIC8vIFRyeSB0byBpbmplY3QgUm91dGVyIG9wdGlvbmFsbHkgLSBpZiBub3QgYXZhaWxhYmxlLCBwYXNzIHVuZGVmaW5lZFxuICAgICAgICAgICAgLy8gUm91dGVyIHdpbGwgYmUgdW5kZWZpbmVkIGlmIG5vdCBwcm92aWRlZCAoZS5nLiwgaW4gYXBwcyB3aXRob3V0IHJvdXRpbmcpXG4gICAgICAgICAgICBjb25zdCByb3V0ZXIgPSBpbmplY3QoUm91dGVyLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBBdXRoU2VydmljZShjb25maWcsIGh0dHBBZGFwdGVyLCByb3V0ZXIgPz8gdW5kZWZpbmVkKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGRlcHM6IFtBbmd1bGFySHR0cEFkYXB0ZXJdLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgcHJvdmlkZTogSFRUUF9JTlRFUkNFUFRPUlMsXG4gICAgICAgICAgdXNlQ2xhc3M6IEF1dGhJbnRlcmNlcHRvckNsYXNzLFxuICAgICAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICAvLyBQcm92aWRlIEF1dGhHdWFyZCBzbyBpdCBoYXMgYWNjZXNzIHRvIE5BVVRIX0NMSUVOVF9DT05GSUdcbiAgICAgICAgQXV0aEd1YXJkLFxuICAgICAgXSxcbiAgICB9O1xuICB9XG59XG4iXX0=
105
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF1dGgubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL25nbW9kdWxlL25hdXRoLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUF1QixNQUFNLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMzRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUFFLG1CQUFtQixFQUFzQixNQUFNLFVBQVUsQ0FBQztBQUNuRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDOztBQUU5RTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtDRztBQUtILE1BQU0sT0FBTyxXQUFXO0lBQ3RCLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBMEI7UUFDdkMsTUFBTSxTQUFTLEdBQVU7WUFDdkI7Z0JBQ0UsT0FBTyxFQUFFLG1CQUFtQjtnQkFDNUIsUUFBUSxFQUFFLE1BQU07YUFDakI7WUFDRCxrQkFBa0I7WUFDbEI7Z0JBQ0UsT0FBTyxFQUFFLFdBQVc7Z0JBQ3BCLFVBQVUsRUFBRSxDQUFDLFdBQStCLEVBQUUsZ0JBQW1DLEVBQUUsRUFBRTtvQkFDbkYscUVBQXFFO29CQUNyRSwyRUFBMkU7b0JBQzNFLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztvQkFDbEQsT0FBTyxJQUFJLFdBQVcsQ0FBQyxNQUFNLEVBQUUsV0FBVyxFQUFFLE1BQU0sSUFBSSxTQUFTLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztnQkFDckYsQ0FBQztnQkFDRCxJQUFJLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLElBQUksUUFBUSxFQUFFLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQzthQUMvRDtZQUNEO2dCQUNFLE9BQU8sRUFBRSxpQkFBaUI7Z0JBQzFCLFFBQVEsRUFBRSxvQkFBb0I7Z0JBQzlCLEtBQUssRUFBRSxJQUFJO2FBQ1o7WUFDRCw0REFBNEQ7WUFDNUQsU0FBUztTQUNWLENBQUM7UUFFRix3Q0FBd0M7UUFDeEMsSUFBSSxNQUFNLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxDQUFDO1lBQzlCLFNBQVMsQ0FBQyxJQUFJLENBQ1o7Z0JBQ0UsT0FBTyxFQUFFLGdCQUFnQjtnQkFDekIsd0RBQXdEO2dCQUN4RCxRQUFRLEVBQUUsTUFBTSxDQUFDLFNBQVM7YUFDM0IsRUFDRCxnQkFBZ0IsRUFDaEI7Z0JBQ0UsT0FBTyxFQUFFLGVBQWU7Z0JBQ3hCLFVBQVUsRUFBRSxHQUFHLEVBQUU7b0JBQ2YseUVBQXlFO29CQUN6RSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztvQkFDekIsOENBQThDO29CQUM5QyxPQUFPLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQztnQkFDbEIsQ0FBQztnQkFDRCxLQUFLLEVBQUUsSUFBSTthQUNaLENBQ0YsQ0FBQztRQUNKLENBQUM7UUFFRCxPQUFPO1lBQ0wsUUFBUSxFQUFFLFdBQVc7WUFDckIsU0FBUztTQUNWLENBQUM7SUFDSixDQUFDO3dHQXJEVSxXQUFXO3lHQUFYLFdBQVcsWUFIWixnQkFBZ0IsYUFDaEIsZ0JBQWdCO3lHQUVmLFdBQVcsWUFIWixnQkFBZ0IsRUFDaEIsZ0JBQWdCOzs0RkFFZixXQUFXO2tCQUp2QixRQUFRO21CQUFDO29CQUNSLE9BQU8sRUFBRSxDQUFDLGdCQUFnQixDQUFDO29CQUMzQixPQUFPLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQztpQkFDNUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSwgTW9kdWxlV2l0aFByb3ZpZGVycywgaW5qZWN0LCBPcHRpb25hbCwgQVBQX0lOSVRJQUxJWkVSIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50TW9kdWxlLCBIVFRQX0lOVEVSQ0VQVE9SUyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBOQVVUSF9DTElFTlRfQ09ORklHLCBOQXV0aEFuZ3VsYXJDb25maWcgfSBmcm9tICcuL3Rva2Vucyc7XG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4vYXV0aC5zZXJ2aWNlJztcbmltcG9ydCB7IEFuZ3VsYXJIdHRwQWRhcHRlciB9IGZyb20gJy4vaHR0cC1hZGFwdGVyJztcbmltcG9ydCB7IEF1dGhJbnRlcmNlcHRvckNsYXNzIH0gZnJvbSAnLi9hdXRoLmludGVyY2VwdG9yLmNsYXNzJztcbmltcG9ydCB7IEF1dGhHdWFyZCB9IGZyb20gJy4uL2xpYi9hdXRoLmd1YXJkJztcbmltcG9ydCB7IFJlY2FwdGNoYVNlcnZpY2UsIFJFQ0FQVENIQV9DT05GSUcgfSBmcm9tICcuLi9saWIvcmVjYXB0Y2hhLnNlcnZpY2UnO1xuXG4vKipcbiAqIE5nTW9kdWxlIGZvciBuYXV0aC10b29sa2l0IEFuZ3VsYXIgaW50ZWdyYXRpb24uXG4gKlxuICogVXNlIHRoaXMgZm9yIE5nTW9kdWxlLWJhc2VkIGFwcHMgKEFuZ3VsYXIgMTcrIHdpdGggTmdNb2R1bGUgb3IgbGVnYWN5IGFwcHMpLlxuICpcbiAqIEBleGFtcGxlIEJhc2ljIFNldHVwXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAvLyBhcHAubW9kdWxlLnRzXG4gKiBpbXBvcnQgeyBOQXV0aE1vZHVsZSB9IGZyb20gJ0BuYXV0aC10b29sa2l0L2NsaWVudC1hbmd1bGFyJztcbiAqXG4gKiBATmdNb2R1bGUoe1xuICogICBpbXBvcnRzOiBbXG4gKiAgICAgTkF1dGhNb2R1bGUuZm9yUm9vdCh7XG4gKiAgICAgICBiYXNlVXJsOiAnaHR0cDovL2xvY2FsaG9zdDozMDAwL2F1dGgnLFxuICogICAgICAgdG9rZW5EZWxpdmVyeTogJ2Nvb2tpZXMnLFxuICogICAgIH0pLFxuICogICBdLFxuICogfSlcbiAqIGV4cG9ydCBjbGFzcyBBcHBNb2R1bGUge31cbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlIFdpdGggcmVDQVBUQ0hBIEVudGVycHJpc2VcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIE5BdXRoTW9kdWxlLmZvclJvb3Qoe1xuICogICBiYXNlVXJsOiAnaHR0cDovL2xvY2FsaG9zdDozMDAwL2F1dGgnLFxuICogICB0b2tlbkRlbGl2ZXJ5OiAnY29va2llcycsXG4gKiAgIHJlY2FwdGNoYToge1xuICogICAgIGVuYWJsZWQ6IHRydWUsXG4gKiAgICAgdmVyc2lvbjogJ2VudGVycHJpc2UnLFxuICogICAgIHNpdGVLZXk6IGVudmlyb25tZW50LnJlY2FwdGNoYVNpdGVLZXksXG4gKiAgICAgYWN0aW9uOiAnbG9naW4nLFxuICogICB9LFxuICogfSlcbiAqIGBgYFxuICovXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbSHR0cENsaWVudE1vZHVsZV0sXG4gIGV4cG9ydHM6IFtIdHRwQ2xpZW50TW9kdWxlXSxcbn0pXG5leHBvcnQgY2xhc3MgTkF1dGhNb2R1bGUge1xuICBzdGF0aWMgZm9yUm9vdChjb25maWc6IE5BdXRoQW5ndWxhckNvbmZpZyk6IE1vZHVsZVdpdGhQcm92aWRlcnM8TkF1dGhNb2R1bGU+IHtcbiAgICBjb25zdCBwcm92aWRlcnM6IGFueVtdID0gW1xuICAgICAge1xuICAgICAgICBwcm92aWRlOiBOQVVUSF9DTElFTlRfQ09ORklHLFxuICAgICAgICB1c2VWYWx1ZTogY29uZmlnLFxuICAgICAgfSxcbiAgICAgIEFuZ3VsYXJIdHRwQWRhcHRlcixcbiAgICAgIHtcbiAgICAgICAgcHJvdmlkZTogQXV0aFNlcnZpY2UsXG4gICAgICAgIHVzZUZhY3Rvcnk6IChodHRwQWRhcHRlcjogQW5ndWxhckh0dHBBZGFwdGVyLCByZWNhcHRjaGFTZXJ2aWNlPzogUmVjYXB0Y2hhU2VydmljZSkgPT4ge1xuICAgICAgICAgIC8vIFRyeSB0byBpbmplY3QgUm91dGVyIG9wdGlvbmFsbHkgLSBpZiBub3QgYXZhaWxhYmxlLCBwYXNzIHVuZGVmaW5lZFxuICAgICAgICAgIC8vIFJvdXRlciB3aWxsIGJlIHVuZGVmaW5lZCBpZiBub3QgcHJvdmlkZWQgKGUuZy4sIGluIGFwcHMgd2l0aG91dCByb3V0aW5nKVxuICAgICAgICAgIGNvbnN0IHJvdXRlciA9IGluamVjdChSb3V0ZXIsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG4gICAgICAgICAgcmV0dXJuIG5ldyBBdXRoU2VydmljZShjb25maWcsIGh0dHBBZGFwdGVyLCByb3V0ZXIgPz8gdW5kZWZpbmVkLCByZWNhcHRjaGFTZXJ2aWNlKTtcbiAgICAgICAgfSxcbiAgICAgICAgZGVwczogW0FuZ3VsYXJIdHRwQWRhcHRlciwgW25ldyBPcHRpb25hbCgpLCBSZWNhcHRjaGFTZXJ2aWNlXV0sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBwcm92aWRlOiBIVFRQX0lOVEVSQ0VQVE9SUyxcbiAgICAgICAgdXNlQ2xhc3M6IEF1dGhJbnRlcmNlcHRvckNsYXNzLFxuICAgICAgICBtdWx0aTogdHJ1ZSxcbiAgICAgIH0sXG4gICAgICAvLyBQcm92aWRlIEF1dGhHdWFyZCBzbyBpdCBoYXMgYWNjZXNzIHRvIE5BVVRIX0NMSUVOVF9DT05GSUdcbiAgICAgIEF1dGhHdWFyZCxcbiAgICBdO1xuXG4gICAgLy8gQWRkIHJlQ0FQVENIQSBwcm92aWRlcnMgaWYgY29uZmlndXJlZFxuICAgIGlmIChjb25maWcucmVjYXB0Y2hhPy5lbmFibGVkKSB7XG4gICAgICBwcm92aWRlcnMucHVzaChcbiAgICAgICAge1xuICAgICAgICAgIHByb3ZpZGU6IFJFQ0FQVENIQV9DT05GSUcsXG4gICAgICAgICAgLy8gQ2FzdCBiZWNhdXNlIGludGVyZmFjZSBleHRlbmRzIGJ1dCB0aGV5J3JlIGNvbXBhdGlibGVcbiAgICAgICAgICB1c2VWYWx1ZTogY29uZmlnLnJlY2FwdGNoYSxcbiAgICAgICAgfSxcbiAgICAgICAgUmVjYXB0Y2hhU2VydmljZSxcbiAgICAgICAge1xuICAgICAgICAgIHByb3ZpZGU6IEFQUF9JTklUSUFMSVpFUixcbiAgICAgICAgICB1c2VGYWN0b3J5OiAoKSA9PiB7XG4gICAgICAgICAgICAvLyBGb3JjZSBSZWNhcHRjaGFTZXJ2aWNlIGluc3RhbnRpYXRpb24gYXQgYXBwIHN0YXJ0dXAgc28gc2NyaXB0IHByZWxvYWRzXG4gICAgICAgICAgICBpbmplY3QoUmVjYXB0Y2hhU2VydmljZSk7XG4gICAgICAgICAgICAvLyBOby1vcCAtIGNvbnN0cnVjdG9yIGFscmVhZHkgaGFuZGxlcyBwcmVsb2FkXG4gICAgICAgICAgICByZXR1cm4gKCkgPT4ge307XG4gICAgICAgICAgfSxcbiAgICAgICAgICBtdWx0aTogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIG5nTW9kdWxlOiBOQXV0aE1vZHVsZSxcbiAgICAgIHByb3ZpZGVycyxcbiAgICB9O1xuICB9XG59XG4iXX0=
@@ -17,4 +17,5 @@ export * from './lib/auth.interceptor';
17
17
  export * from './lib/auth.guard';
18
18
  export * from './lib/social-redirect-callback.guard';
19
19
  export * from './lib/recaptcha.service';
20
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7OztHQUtHO0FBRUgsNENBQTRDO0FBQzVDLGNBQWMsdUJBQXVCLENBQUM7QUFFdEMsb0RBQW9EO0FBQ3BELGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsbUNBQW1DLENBQUM7QUFDbEQsY0FBYyx5QkFBeUIsQ0FBQztBQUV4QyxzRUFBc0U7QUFDdEUsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsc0NBQXNDLENBQUM7QUFDckQsY0FBYyx5QkFBeUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUHVibGljIEFQSSBTdXJmYWNlIG9mIEBuYXV0aC10b29sa2l0L2NsaWVudC1hbmd1bGFyIChOZ01vZHVsZSlcbiAqXG4gKiBUaGlzIGlzIHRoZSBkZWZhdWx0IGVudHJ5IHBvaW50IGZvciBOZ01vZHVsZS1iYXNlZCBBbmd1bGFyIGFwcHMuXG4gKiBGb3Igc3RhbmRhbG9uZSBjb21wb25lbnRzLCB1c2U6IEBuYXV0aC10b29sa2l0L2NsaWVudC1hbmd1bGFyL3N0YW5kYWxvbmVcbiAqL1xuXG4vLyBSZS1leHBvcnQgY29yZSBjbGllbnQgdHlwZXMgYW5kIHV0aWxpdGllc1xuZXhwb3J0ICogZnJvbSAnQG5hdXRoLXRvb2xraXQvY2xpZW50JztcblxuLy8gRXhwb3J0IE5nTW9kdWxlLXNwZWNpZmljIGNvbXBvbmVudHMgKGNsYXNzLWJhc2VkKVxuZXhwb3J0ICogZnJvbSAnLi9uZ21vZHVsZS90b2tlbnMnO1xuZXhwb3J0ICogZnJvbSAnLi9uZ21vZHVsZS9hdXRoLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9uZ21vZHVsZS9odHRwLWFkYXB0ZXInO1xuZXhwb3J0ICogZnJvbSAnLi9uZ21vZHVsZS9hdXRoLmludGVyY2VwdG9yLmNsYXNzJztcbmV4cG9ydCAqIGZyb20gJy4vbmdtb2R1bGUvbmF1dGgubW9kdWxlJztcblxuLy8gRXhwb3J0IGZ1bmN0aW9uYWwgY29tcG9uZW50cyAoZm9yIGZsZXhpYmlsaXR5IGluIE5nTW9kdWxlIGFwcHMgdG9vKVxuZXhwb3J0ICogZnJvbSAnLi9saWIvYXV0aC5pbnRlcmNlcHRvcic7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9hdXRoLmd1YXJkJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NvY2lhbC1yZWRpcmVjdC1jYWxsYmFjay5ndWFyZCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9yZWNhcHRjaGEuc2VydmljZSc7XG4iXX0=
20
+ export * from './lib/recaptcha-provider';
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7OztHQUtHO0FBRUgsNENBQTRDO0FBQzVDLGNBQWMsdUJBQXVCLENBQUM7QUFFdEMsb0RBQW9EO0FBQ3BELGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsbUNBQW1DLENBQUM7QUFDbEQsY0FBYyx5QkFBeUIsQ0FBQztBQUV4QyxzRUFBc0U7QUFDdEUsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsc0NBQXNDLENBQUM7QUFDckQsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLDBCQUEwQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBQdWJsaWMgQVBJIFN1cmZhY2Ugb2YgQG5hdXRoLXRvb2xraXQvY2xpZW50LWFuZ3VsYXIgKE5nTW9kdWxlKVxuICpcbiAqIFRoaXMgaXMgdGhlIGRlZmF1bHQgZW50cnkgcG9pbnQgZm9yIE5nTW9kdWxlLWJhc2VkIEFuZ3VsYXIgYXBwcy5cbiAqIEZvciBzdGFuZGFsb25lIGNvbXBvbmVudHMsIHVzZTogQG5hdXRoLXRvb2xraXQvY2xpZW50LWFuZ3VsYXIvc3RhbmRhbG9uZVxuICovXG5cbi8vIFJlLWV4cG9ydCBjb3JlIGNsaWVudCB0eXBlcyBhbmQgdXRpbGl0aWVzXG5leHBvcnQgKiBmcm9tICdAbmF1dGgtdG9vbGtpdC9jbGllbnQnO1xuXG4vLyBFeHBvcnQgTmdNb2R1bGUtc3BlY2lmaWMgY29tcG9uZW50cyAoY2xhc3MtYmFzZWQpXG5leHBvcnQgKiBmcm9tICcuL25nbW9kdWxlL3Rva2Vucyc7XG5leHBvcnQgKiBmcm9tICcuL25nbW9kdWxlL2F1dGguc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL25nbW9kdWxlL2h0dHAtYWRhcHRlcic7XG5leHBvcnQgKiBmcm9tICcuL25nbW9kdWxlL2F1dGguaW50ZXJjZXB0b3IuY2xhc3MnO1xuZXhwb3J0ICogZnJvbSAnLi9uZ21vZHVsZS9uYXV0aC5tb2R1bGUnO1xuXG4vLyBFeHBvcnQgZnVuY3Rpb25hbCBjb21wb25lbnRzIChmb3IgZmxleGliaWxpdHkgaW4gTmdNb2R1bGUgYXBwcyB0b28pXG5leHBvcnQgKiBmcm9tICcuL2xpYi9hdXRoLmludGVyY2VwdG9yJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2F1dGguZ3VhcmQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc29jaWFsLXJlZGlyZWN0LWNhbGxiYWNrLmd1YXJkJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3JlY2FwdGNoYS5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3JlY2FwdGNoYS1wcm92aWRlcic7XG4iXX0=
@@ -1,7 +1,7 @@
1
1
  import { NAuthErrorCode, NAuthClientError, NAuthClient } from '@nauth-toolkit/client';
2
2
  export * from '@nauth-toolkit/client';
3
3
  import * as i0 from '@angular/core';
4
- import { InjectionToken, Injectable, PLATFORM_ID, Inject, Optional, inject, NgModule } from '@angular/core';
4
+ import { InjectionToken, Injectable, PLATFORM_ID, Inject, Optional, inject, APP_INITIALIZER, NgModule, makeEnvironmentProviders } from '@angular/core';
5
5
  import { firstValueFrom, BehaviorSubject, Subject, from, switchMap, of, map, catchError, throwError, finalize, shareReplay } from 'rxjs';
6
6
  import { filter } from 'rxjs/operators';
7
7
  import * as i1 from '@angular/common/http';
@@ -139,7 +139,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
139
139
  /**
140
140
  * Injection token for reCAPTCHA configuration
141
141
  */
142
- const RECAPTCHA_CONFIG = new InjectionToken('RECAPTCHA_CONFIG');
142
+ const RECAPTCHA_CONFIG = new InjectionToken('RECAPTCHA_CONFIG', {
143
+ providedIn: 'root',
144
+ factory: () => undefined,
145
+ });
143
146
  /**
144
147
  * Google reCAPTCHA service for Angular applications.
145
148
  *
@@ -184,6 +187,15 @@ class RecaptchaService {
184
187
  this.platformId = platformId;
185
188
  this.config = config;
186
189
  this.platform = this.detectPlatform();
190
+ // Auto-preload script for v3/Enterprise so it's ready before first login/signup
191
+ // No-op when disabled, shouldSkip, or v2 (v2 renders on-demand)
192
+ if (this.config?.enabled && (this.config.version === 'v3' || this.config.version === 'enterprise')) {
193
+ if (!this.shouldSkip()) {
194
+ this.loadScript().catch(() => {
195
+ // Silently fail - execute() will handle errors when called
196
+ });
197
+ }
198
+ }
187
199
  }
188
200
  // ============================================================================
189
201
  // Platform Detection
@@ -1895,7 +1907,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
1895
1907
  *
1896
1908
  * Use this for NgModule-based apps (Angular 17+ with NgModule or legacy apps).
1897
1909
  *
1898
- * @example
1910
+ * @example Basic Setup
1899
1911
  * ```typescript
1900
1912
  * // app.module.ts
1901
1913
  * import { NAuthModule } from '@nauth-toolkit/client-angular';
@@ -1910,35 +1922,67 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
1910
1922
  * })
1911
1923
  * export class AppModule {}
1912
1924
  * ```
1925
+ *
1926
+ * @example With reCAPTCHA Enterprise
1927
+ * ```typescript
1928
+ * NAuthModule.forRoot({
1929
+ * baseUrl: 'http://localhost:3000/auth',
1930
+ * tokenDelivery: 'cookies',
1931
+ * recaptcha: {
1932
+ * enabled: true,
1933
+ * version: 'enterprise',
1934
+ * siteKey: environment.recaptchaSiteKey,
1935
+ * action: 'login',
1936
+ * },
1937
+ * })
1938
+ * ```
1913
1939
  */
1914
1940
  class NAuthModule {
1915
1941
  static forRoot(config) {
1916
- return {
1917
- ngModule: NAuthModule,
1918
- providers: [
1919
- {
1920
- provide: NAUTH_CLIENT_CONFIG,
1921
- useValue: config,
1922
- },
1923
- AngularHttpAdapter,
1924
- {
1925
- provide: AuthService,
1926
- useFactory: (httpAdapter) => {
1927
- // Try to inject Router optionally - if not available, pass undefined
1928
- // Router will be undefined if not provided (e.g., in apps without routing)
1929
- const router = inject(Router, { optional: true });
1930
- return new AuthService(config, httpAdapter, router ?? undefined);
1931
- },
1932
- deps: [AngularHttpAdapter],
1942
+ const providers = [
1943
+ {
1944
+ provide: NAUTH_CLIENT_CONFIG,
1945
+ useValue: config,
1946
+ },
1947
+ AngularHttpAdapter,
1948
+ {
1949
+ provide: AuthService,
1950
+ useFactory: (httpAdapter, recaptchaService) => {
1951
+ // Try to inject Router optionally - if not available, pass undefined
1952
+ // Router will be undefined if not provided (e.g., in apps without routing)
1953
+ const router = inject(Router, { optional: true });
1954
+ return new AuthService(config, httpAdapter, router ?? undefined, recaptchaService);
1933
1955
  },
1934
- {
1935
- provide: HTTP_INTERCEPTORS,
1936
- useClass: AuthInterceptorClass,
1937
- multi: true,
1956
+ deps: [AngularHttpAdapter, [new Optional(), RecaptchaService]],
1957
+ },
1958
+ {
1959
+ provide: HTTP_INTERCEPTORS,
1960
+ useClass: AuthInterceptorClass,
1961
+ multi: true,
1962
+ },
1963
+ // Provide AuthGuard so it has access to NAUTH_CLIENT_CONFIG
1964
+ AuthGuard,
1965
+ ];
1966
+ // Add reCAPTCHA providers if configured
1967
+ if (config.recaptcha?.enabled) {
1968
+ providers.push({
1969
+ provide: RECAPTCHA_CONFIG,
1970
+ // Cast because interface extends but they're compatible
1971
+ useValue: config.recaptcha,
1972
+ }, RecaptchaService, {
1973
+ provide: APP_INITIALIZER,
1974
+ useFactory: () => {
1975
+ // Force RecaptchaService instantiation at app startup so script preloads
1976
+ inject(RecaptchaService);
1977
+ // No-op - constructor already handles preload
1978
+ return () => { };
1938
1979
  },
1939
- // Provide AuthGuard so it has access to NAUTH_CLIENT_CONFIG
1940
- AuthGuard,
1941
- ],
1980
+ multi: true,
1981
+ });
1982
+ }
1983
+ return {
1984
+ ngModule: NAuthModule,
1985
+ providers,
1942
1986
  };
1943
1987
  }
1944
1988
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NAuthModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
@@ -2108,6 +2152,56 @@ const socialRedirectCallbackGuard = async () => {
2108
2152
  return router.isSuccessRedirectDisabled({ source: 'social', appState: appState ?? undefined });
2109
2153
  };
2110
2154
 
2155
+ /**
2156
+ * Provides reCAPTCHA configuration and automatic script preloading.
2157
+ *
2158
+ * Sets up `RECAPTCHA_CONFIG` and forces `RecaptchaService` instantiation at app
2159
+ * startup so the reCAPTCHA script preloads before the user clicks login/signup.
2160
+ *
2161
+ * @param config - reCAPTCHA configuration (enabled, version, siteKey, action)
2162
+ * @returns Environment providers for reCAPTCHA
2163
+ *
2164
+ * @example
2165
+ * ```typescript
2166
+ * export const appConfig: ApplicationConfig = {
2167
+ * providers: [
2168
+ * provideRecaptcha({
2169
+ * enabled: true,
2170
+ * version: 'enterprise',
2171
+ * siteKey: environment.recaptchaSiteKey,
2172
+ * action: 'login',
2173
+ * }),
2174
+ * // ... other providers
2175
+ * ],
2176
+ * };
2177
+ * ```
2178
+ */
2179
+ function provideRecaptcha(config) {
2180
+ return makeEnvironmentProviders([
2181
+ {
2182
+ provide: RECAPTCHA_CONFIG,
2183
+ useValue: config,
2184
+ },
2185
+ RecaptchaService,
2186
+ {
2187
+ provide: APP_INITIALIZER,
2188
+ useFactory: () => {
2189
+ const recaptcha = inject(RecaptchaService);
2190
+ // Return initialization function that ensures script starts loading
2191
+ return () => {
2192
+ // Trigger script load (fire-and-forget, don't block app startup)
2193
+ if (config.enabled && (config.version === 'v3' || config.version === 'enterprise')) {
2194
+ recaptcha.loadScript().catch(() => {
2195
+ // Silent fail - execute() will retry when called
2196
+ });
2197
+ }
2198
+ };
2199
+ },
2200
+ multi: true,
2201
+ },
2202
+ ]);
2203
+ }
2204
+
2111
2205
  /**
2112
2206
  * Public API Surface of @nauth-toolkit/client-angular (NgModule)
2113
2207
  *
@@ -2120,5 +2214,5 @@ const socialRedirectCallbackGuard = async () => {
2120
2214
  * Generated bundle index. Do not edit.
2121
2215
  */
2122
2216
 
2123
- export { AngularHttpAdapter, AuthGuard, AuthInterceptor, AuthInterceptorClass, AuthService, NAUTH_CLIENT_CONFIG, NAuthModule, RECAPTCHA_CONFIG, RecaptchaService, authGuard, authInterceptor, socialRedirectCallbackGuard };
2217
+ export { AngularHttpAdapter, AuthGuard, AuthInterceptor, AuthInterceptorClass, AuthService, NAUTH_CLIENT_CONFIG, NAuthModule, RECAPTCHA_CONFIG, RecaptchaService, authGuard, authInterceptor, provideRecaptcha, socialRedirectCallbackGuard };
2124
2218
  //# sourceMappingURL=nauth-toolkit-client-angular.mjs.map