@esolve/ng-esolve-connect 0.109.0 → 0.110.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.
Files changed (39) hide show
  1. package/esm2022/lib/auth/index.mjs +3 -4
  2. package/esm2022/lib/auth/interceptors/esolve-auth.interceptor.mjs +32 -0
  3. package/esm2022/lib/auth/interceptors/index.mjs +2 -0
  4. package/esm2022/lib/auth/providers/esolve-eurus-auto-login.provider.mjs +2 -2
  5. package/esm2022/lib/auth/services/esolve-auth.service.mjs +288 -0
  6. package/esm2022/lib/auth/services/esolve-otp.service.mjs +77 -0
  7. package/esm2022/lib/auth/services/index.mjs +3 -0
  8. package/esm2022/lib/core/esolve-config.service.mjs +37 -40
  9. package/esm2022/lib/core/esolve-connect-config.interface.mjs +1 -1
  10. package/esm2022/lib/core/providers/index.mjs +2 -2
  11. package/esm2022/lib/core/providers/ng-esolve-connect.provider.mjs +19 -0
  12. package/esm2022/lib/coupons/esolve-coupons.service.mjs +8 -6
  13. package/esm2022/lib/session/esolve-session.service.mjs +89 -89
  14. package/esm2022/lib/shared/cookie/esolve-cookie-options.interface.mjs +2 -0
  15. package/esm2022/lib/shared/cookie/esolve-cookie.service.mjs +5 -5
  16. package/esm2022/lib/shared/cookie/index.mjs +2 -2
  17. package/esm2022/lib/vouchers/esolve-vouchers.service.mjs +8 -6
  18. package/fesm2022/esolve-ng-esolve-connect.mjs +304 -315
  19. package/fesm2022/esolve-ng-esolve-connect.mjs.map +1 -1
  20. package/lib/auth/index.d.ts +2 -3
  21. package/lib/auth/interceptors/esolve-auth.interceptor.d.ts +2 -0
  22. package/lib/auth/interceptors/index.d.ts +1 -0
  23. package/lib/auth/{esolve-auth.service.d.ts → services/esolve-auth.service.d.ts} +1 -1
  24. package/lib/auth/{esolve-otp.service.d.ts → services/esolve-otp.service.d.ts} +3 -3
  25. package/lib/auth/services/index.d.ts +2 -0
  26. package/lib/core/esolve-config.service.d.ts +14 -10
  27. package/lib/core/esolve-connect-config.interface.d.ts +6 -6
  28. package/lib/core/providers/index.d.ts +1 -1
  29. package/lib/session/esolve-session.service.d.ts +12 -5
  30. package/lib/shared/cookie/esolve-cookie-options.interface.d.ts +7 -0
  31. package/lib/shared/cookie/esolve-cookie.service.d.ts +3 -2
  32. package/lib/shared/cookie/index.d.ts +2 -1
  33. package/package.json +1 -1
  34. package/esm2022/lib/auth/esolve-auth-interceptor.service.mjs +0 -42
  35. package/esm2022/lib/auth/esolve-auth.service.mjs +0 -286
  36. package/esm2022/lib/auth/esolve-otp.service.mjs +0 -77
  37. package/esm2022/lib/core/providers/provide-ng-esolve-connect.function.mjs +0 -24
  38. package/lib/auth/esolve-auth-interceptor.service.d.ts +0 -10
  39. /package/lib/core/providers/{provide-ng-esolve-connect.function.d.ts → ng-esolve-connect.provider.d.ts} +0 -0
@@ -1,8 +1,7 @@
1
- export * from './esolve-auth.service';
2
- export * from './esolve-auth-interceptor.service';
3
- export * from './esolve-otp.service';
1
+ export * from './services';
4
2
  export * from './models';
5
3
  export * from './types';
4
+ export * from './interceptors';
6
5
  export * from './interfaces';
7
6
  export * from './providers';
8
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL25nLWVzb2x2ZS1jb25uZWN0L3NyYy9saWIvYXV0aC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsbUNBQW1DLENBQUM7QUFDbEQsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLFVBQVUsQ0FBQztBQUN6QixjQUFjLFNBQVMsQ0FBQztBQUN4QixjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLGFBQWEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vZXNvbHZlLWF1dGguc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2Vzb2x2ZS1hdXRoLWludGVyY2VwdG9yLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9lc29sdmUtb3RwLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9tb2RlbHMnO1xuZXhwb3J0ICogZnJvbSAnLi90eXBlcyc7XG5leHBvcnQgKiBmcm9tICcuL2ludGVyZmFjZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9wcm92aWRlcnMnO1xuIl19
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL25nLWVzb2x2ZS1jb25uZWN0L3NyYy9saWIvYXV0aC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLFlBQVksQ0FBQztBQUMzQixjQUFjLFVBQVUsQ0FBQztBQUN6QixjQUFjLFNBQVMsQ0FBQztBQUN4QixjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsYUFBYSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9zZXJ2aWNlcyc7XG5leHBvcnQgKiBmcm9tICcuL21vZGVscyc7XG5leHBvcnQgKiBmcm9tICcuL3R5cGVzJztcbmV4cG9ydCAqIGZyb20gJy4vaW50ZXJjZXB0b3JzJztcbmV4cG9ydCAqIGZyb20gJy4vaW50ZXJmYWNlcyc7XG5leHBvcnQgKiBmcm9tICcuL3Byb3ZpZGVycyc7XG4iXX0=
@@ -0,0 +1,32 @@
1
+ import { inject } from '@angular/core';
2
+ import { EsolveSessionService } from '../../session';
3
+ import { EsolveConfigService } from '../../core';
4
+ export const esolveAuthInterceptor = (req, next) => {
5
+ const config = inject(EsolveConfigService);
6
+ const session = inject(EsolveSessionService);
7
+ if (req.url.startsWith(`${config.api_url}/`)) {
8
+ const service_identifier = req.url.replace(`${config.api_url}/`, '');
9
+ const modified_url = req.url;
10
+ let params = req.params;
11
+ let headers = req.headers;
12
+ if (session.isValid()) {
13
+ if (service_identifier !== 'get-access-token.php') {
14
+ headers = headers.set('Authorization', `Bearer ${session.getToken()}`);
15
+ }
16
+ const state_hash = session.getStateHash();
17
+ headers = headers.set('X-Esolve-State-Hash', state_hash);
18
+ }
19
+ params = params.set('ws_id', config.wsid);
20
+ if (config.native && config.device_designation) {
21
+ headers = headers.set('X-Device-Designation', config.device_designation);
22
+ }
23
+ const modified_req = req.clone({
24
+ url: modified_url,
25
+ params,
26
+ headers,
27
+ });
28
+ return next(modified_req);
29
+ }
30
+ return next(req);
31
+ };
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXNvbHZlLWF1dGguaW50ZXJjZXB0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL25nLWVzb2x2ZS1jb25uZWN0L3NyYy9saWIvYXV0aC9pbnRlcmNlcHRvcnMvZXNvbHZlLWF1dGguaW50ZXJjZXB0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV2QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRWpELE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFzQixDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRTtJQUNsRSxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUMzQyxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUU3QyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEdBQUcsTUFBTSxDQUFDLE9BQU8sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUMzQyxNQUFNLGtCQUFrQixHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsTUFBTSxDQUFDLE9BQU8sR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRXJFLE1BQU0sWUFBWSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUM7UUFDN0IsSUFBSSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQztRQUN4QixJQUFJLE9BQU8sR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDO1FBRTFCLElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7WUFDcEIsSUFBSSxrQkFBa0IsS0FBSyxzQkFBc0IsRUFBRSxDQUFDO2dCQUNoRCxPQUFPLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FDakIsZUFBZSxFQUNmLFVBQVUsT0FBTyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQ2pDLENBQUM7WUFDTixDQUFDO1lBRUQsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQzFDLE9BQU8sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLHFCQUFxQixFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQzdELENBQUM7UUFFRCxNQUFNLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTFDLElBQUksTUFBTSxDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUM3QyxPQUFPLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FDakIsc0JBQXNCLEVBQ3RCLE1BQU0sQ0FBQyxrQkFBa0IsQ0FDNUIsQ0FBQztRQUNOLENBQUM7UUFFRCxNQUFNLFlBQVksR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDO1lBQzNCLEdBQUcsRUFBRSxZQUFZO1lBQ2pCLE1BQU07WUFDTixPQUFPO1NBQ1YsQ0FBQyxDQUFDO1FBRUgsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVELE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3JCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBJbnRlcmNlcHRvckZuIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEVzb2x2ZVNlc3Npb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2Vzc2lvbic7XG5pbXBvcnQgeyBFc29sdmVDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZSc7XG5cbmV4cG9ydCBjb25zdCBlc29sdmVBdXRoSW50ZXJjZXB0b3I6IEh0dHBJbnRlcmNlcHRvckZuID0gKHJlcSwgbmV4dCkgPT4ge1xuICAgIGNvbnN0IGNvbmZpZyA9IGluamVjdChFc29sdmVDb25maWdTZXJ2aWNlKTtcbiAgICBjb25zdCBzZXNzaW9uID0gaW5qZWN0KEVzb2x2ZVNlc3Npb25TZXJ2aWNlKTtcblxuICAgIGlmIChyZXEudXJsLnN0YXJ0c1dpdGgoYCR7Y29uZmlnLmFwaV91cmx9L2ApKSB7XG4gICAgICAgIGNvbnN0IHNlcnZpY2VfaWRlbnRpZmllciA9IHJlcS51cmwucmVwbGFjZShgJHtjb25maWcuYXBpX3VybH0vYCwgJycpO1xuXG4gICAgICAgIGNvbnN0IG1vZGlmaWVkX3VybCA9IHJlcS51cmw7XG4gICAgICAgIGxldCBwYXJhbXMgPSByZXEucGFyYW1zO1xuICAgICAgICBsZXQgaGVhZGVycyA9IHJlcS5oZWFkZXJzO1xuXG4gICAgICAgIGlmIChzZXNzaW9uLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgaWYgKHNlcnZpY2VfaWRlbnRpZmllciAhPT0gJ2dldC1hY2Nlc3MtdG9rZW4ucGhwJykge1xuICAgICAgICAgICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldChcbiAgICAgICAgICAgICAgICAgICAgJ0F1dGhvcml6YXRpb24nLFxuICAgICAgICAgICAgICAgICAgICBgQmVhcmVyICR7c2Vzc2lvbi5nZXRUb2tlbigpfWAsXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3Qgc3RhdGVfaGFzaCA9IHNlc3Npb24uZ2V0U3RhdGVIYXNoKCk7XG4gICAgICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ1gtRXNvbHZlLVN0YXRlLUhhc2gnLCBzdGF0ZV9oYXNoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBhcmFtcyA9IHBhcmFtcy5zZXQoJ3dzX2lkJywgY29uZmlnLndzaWQpO1xuXG4gICAgICAgIGlmIChjb25maWcubmF0aXZlICYmIGNvbmZpZy5kZXZpY2VfZGVzaWduYXRpb24pIHtcbiAgICAgICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldChcbiAgICAgICAgICAgICAgICAnWC1EZXZpY2UtRGVzaWduYXRpb24nLFxuICAgICAgICAgICAgICAgIGNvbmZpZy5kZXZpY2VfZGVzaWduYXRpb24sXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbW9kaWZpZWRfcmVxID0gcmVxLmNsb25lKHtcbiAgICAgICAgICAgIHVybDogbW9kaWZpZWRfdXJsLFxuICAgICAgICAgICAgcGFyYW1zLFxuICAgICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIG5leHQobW9kaWZpZWRfcmVxKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV4dChyZXEpO1xufTtcbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export { esolveAuthInterceptor } from './esolve-auth.interceptor';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL25nLWVzb2x2ZS1jb25uZWN0L3NyYy9saWIvYXV0aC9pbnRlcmNlcHRvcnMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMkJBQTJCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBlc29sdmVBdXRoSW50ZXJjZXB0b3IgfSBmcm9tICcuL2Vzb2x2ZS1hdXRoLmludGVyY2VwdG9yJztcbiJdfQ==
@@ -1,5 +1,5 @@
1
1
  import { APP_INITIALIZER } from '@angular/core';
2
- import { EsolveAuthService } from '../esolve-auth.service';
2
+ import { EsolveAuthService } from '../services';
3
3
  export const ESOLVE_EURUS_AUTO_LOGIN = {
4
4
  provide: APP_INITIALIZER,
5
5
  multi: true,
@@ -9,4 +9,4 @@ export const ESOLVE_EURUS_AUTO_LOGIN = {
9
9
  return true;
10
10
  },
11
11
  };
12
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXNvbHZlLWV1cnVzLWF1dG8tbG9naW4ucHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL25nLWVzb2x2ZS1jb25uZWN0L3NyYy9saWIvYXV0aC9wcm92aWRlcnMvZXNvbHZlLWV1cnVzLWF1dG8tbG9naW4ucHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBWSxNQUFNLGVBQWUsQ0FBQztBQUUxRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUUzRCxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBYTtJQUM3QyxPQUFPLEVBQUUsZUFBZTtJQUN4QixLQUFLLEVBQUUsSUFBSTtJQUNYLElBQUksRUFBRSxDQUFDLGlCQUFpQixDQUFDO0lBQ3pCLFVBQVUsRUFBRSxDQUFDLElBQXVCLEVBQUUsRUFBRSxDQUFDLEtBQUssSUFBSSxFQUFFO1FBQ2hELE1BQU0sSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBRXZCLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7Q0FDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVBQX0lOSVRJQUxJWkVSLCBQcm92aWRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBFc29sdmVBdXRoU2VydmljZSB9IGZyb20gJy4uL2Vzb2x2ZS1hdXRoLnNlcnZpY2UnO1xuXG5leHBvcnQgY29uc3QgRVNPTFZFX0VVUlVTX0FVVE9fTE9HSU46IFByb3ZpZGVyID0ge1xuICAgIHByb3ZpZGU6IEFQUF9JTklUSUFMSVpFUixcbiAgICBtdWx0aTogdHJ1ZSxcbiAgICBkZXBzOiBbRXNvbHZlQXV0aFNlcnZpY2VdLFxuICAgIHVzZUZhY3Rvcnk6IChhdXRoOiBFc29sdmVBdXRoU2VydmljZSkgPT4gYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCBhdXRoLmF1dG9Mb2dpbigpO1xuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG59O1xuIl19
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXNvbHZlLWV1cnVzLWF1dG8tbG9naW4ucHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL25nLWVzb2x2ZS1jb25uZWN0L3NyYy9saWIvYXV0aC9wcm92aWRlcnMvZXNvbHZlLWV1cnVzLWF1dG8tbG9naW4ucHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBWSxNQUFNLGVBQWUsQ0FBQztBQUUxRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFaEQsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQWE7SUFDN0MsT0FBTyxFQUFFLGVBQWU7SUFDeEIsS0FBSyxFQUFFLElBQUk7SUFDWCxJQUFJLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQztJQUN6QixVQUFVLEVBQUUsQ0FBQyxJQUF1QixFQUFFLEVBQUUsQ0FBQyxLQUFLLElBQUksRUFBRTtRQUNoRCxNQUFNLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUV2QixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0NBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFQUF9JTklUSUFMSVpFUiwgUHJvdmlkZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgRXNvbHZlQXV0aFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcyc7XG5cbmV4cG9ydCBjb25zdCBFU09MVkVfRVVSVVNfQVVUT19MT0dJTjogUHJvdmlkZXIgPSB7XG4gICAgcHJvdmlkZTogQVBQX0lOSVRJQUxJWkVSLFxuICAgIG11bHRpOiB0cnVlLFxuICAgIGRlcHM6IFtFc29sdmVBdXRoU2VydmljZV0sXG4gICAgdXNlRmFjdG9yeTogKGF1dGg6IEVzb2x2ZUF1dGhTZXJ2aWNlKSA9PiBhc3luYyAoKSA9PiB7XG4gICAgICAgIGF3YWl0IGF1dGguYXV0b0xvZ2luKCk7XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcbn07XG4iXX0=
@@ -0,0 +1,288 @@
1
+ import { inject, Injectable } from '@angular/core';
2
+ import { HttpClient, HttpParams, HttpHeaders, } from '@angular/common/http';
3
+ import { catchError, firstValueFrom, map, of, switchMap, tap, throwError, } from 'rxjs';
4
+ import { EsolveConfigService } from '../../core';
5
+ import { EsolveErrorHandlerService } from '../../shared';
6
+ import { EsolveSessionService } from '../../session';
7
+ import * as i0 from "@angular/core";
8
+ export class EsolveAuthService {
9
+ constructor() {
10
+ this.config = inject(EsolveConfigService);
11
+ this.http = inject(HttpClient);
12
+ this.session = inject(EsolveSessionService);
13
+ this.errorHandler = inject(EsolveErrorHandlerService);
14
+ this.session
15
+ .onSessionEnd()
16
+ .pipe(switchMap(() => this.checkAccessToken()), catchError(() => of(null)))
17
+ .subscribe((result) => {
18
+ if (result) {
19
+ this.handleAuthentication(result);
20
+ }
21
+ else {
22
+ this.session.expireSession();
23
+ }
24
+ });
25
+ this.session.onExpire().subscribe(() => {
26
+ this.logout().catch(() => {
27
+ // Deal with error gracefully
28
+ });
29
+ });
30
+ }
31
+ getAccessToken(email, password, anonymous = false) {
32
+ let params = new HttpParams();
33
+ if (anonymous) {
34
+ params = params.set('anonymous', true);
35
+ }
36
+ else {
37
+ if (email !== '') {
38
+ params = params.set('email', email);
39
+ }
40
+ if (password !== '') {
41
+ params = params.set('password', password);
42
+ }
43
+ }
44
+ return this.http
45
+ .get(`${this.config.api_url}/get-access-token.php`, {
46
+ params,
47
+ headers: new HttpHeaders({
48
+ 'Accept-Language': '*',
49
+ }),
50
+ })
51
+ .pipe(tap((response) => {
52
+ if (response.type === 'error' ||
53
+ response.type === 'exception') {
54
+ throw response;
55
+ }
56
+ }), catchError(this.handleError), tap((response) => {
57
+ this.handleAuthentication(response.additional_data);
58
+ }));
59
+ }
60
+ getAnonymousSession() {
61
+ return this.getAccessToken('', '', true);
62
+ }
63
+ async autoLogin() {
64
+ let result = await this.restore();
65
+ try {
66
+ if (!result) {
67
+ const response = await firstValueFrom(this.getAnonymousSession());
68
+ result = response.additional_data;
69
+ }
70
+ this.handleAuthentication(result);
71
+ }
72
+ catch (error) {
73
+ console.error(error);
74
+ }
75
+ }
76
+ login(email, password) {
77
+ const body = {
78
+ login: {
79
+ email,
80
+ password,
81
+ },
82
+ };
83
+ return this.http
84
+ .post(`${this.config.api_url}/set-login.php`, body, {
85
+ headers: {
86
+ 'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8;',
87
+ },
88
+ responseType: 'json',
89
+ observe: 'body',
90
+ })
91
+ .pipe(map((response) => {
92
+ if (response.responses === undefined ||
93
+ response.responses.length <= 0) {
94
+ throw response;
95
+ }
96
+ const login_response = response.responses[0];
97
+ const result = response.additional_data;
98
+ if (login_response.status.state !== 'success' &&
99
+ login_response.status.state !== 'warning') {
100
+ throw login_response;
101
+ }
102
+ for (const response_log of login_response.log) {
103
+ if (response_log.type === 'success' &&
104
+ response_log.message_code === 'login_success') {
105
+ const user_id = +login_response.esolve_id;
106
+ if (Array.isArray(result)) {
107
+ throw new Error('Invalid login');
108
+ }
109
+ this.handleAuthentication({
110
+ key: result.key,
111
+ user_id: result.user_id,
112
+ access_level: result.access_level,
113
+ location_id: result.location_id,
114
+ addresses_id: result.addresses_id,
115
+ shipping_id: result.shipping_id,
116
+ expires: result.expires,
117
+ expiry_time: result.expiry_time,
118
+ grace_period: result.grace_period,
119
+ clients_id: result.clients_id,
120
+ });
121
+ return user_id;
122
+ }
123
+ }
124
+ throw login_response;
125
+ }), catchError((errorRes) => {
126
+ return this.errorHandler.handleHttpPostError('set-login', errorRes);
127
+ }));
128
+ }
129
+ async logout() {
130
+ this.session.stopTimer();
131
+ const response = await firstValueFrom(this.http
132
+ .post(`${this.config.api_url}/set-logout.php`, {}, {
133
+ headers: {
134
+ 'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8;',
135
+ },
136
+ responseType: 'json',
137
+ observe: 'body',
138
+ })
139
+ .pipe(map((response) => {
140
+ if (response.responses === undefined ||
141
+ response.responses.length <= 0) {
142
+ throw response;
143
+ }
144
+ const logout_response = response.responses[0];
145
+ const result = response.additional_data;
146
+ if (logout_response.status.state !== 'success' &&
147
+ logout_response.status.state !== 'warning') {
148
+ throw logout_response;
149
+ }
150
+ for (const response_log of logout_response.log) {
151
+ if (response_log.type === 'success' &&
152
+ response_log.message_code === 'logout_success') {
153
+ if (Array.isArray(result)) {
154
+ throw new Error('Invalid logout');
155
+ }
156
+ this.handleAuthentication({
157
+ key: result.key,
158
+ user_id: result.user_id,
159
+ access_level: result.access_level,
160
+ location_id: result.location_id,
161
+ addresses_id: result.addresses_id,
162
+ shipping_id: result.shipping_id,
163
+ expires: result.expires,
164
+ expiry_time: result.expiry_time,
165
+ grace_period: result.grace_period,
166
+ clients_id: result.clients_id,
167
+ });
168
+ return result;
169
+ }
170
+ }
171
+ throw logout_response;
172
+ }), catchError((errorRes) => {
173
+ return this.errorHandler.handleHttpPostError('set-logout', errorRes);
174
+ })));
175
+ return response;
176
+ }
177
+ async validateCachedTokens() {
178
+ let valid = false;
179
+ try {
180
+ const session = this.session.getCachedSession();
181
+ if (!session) {
182
+ throw new Error('Invalid session');
183
+ }
184
+ const result = await this.checkAccessToken(session);
185
+ if (!result.key) {
186
+ throw new Error('Invalid key');
187
+ }
188
+ valid = true;
189
+ }
190
+ catch (error) {
191
+ console.error(error);
192
+ this.session.reset();
193
+ }
194
+ return valid;
195
+ }
196
+ async checkAccessToken(token = this.session.getToken()) {
197
+ if (token === '') {
198
+ throw new Error('Invalid Token');
199
+ }
200
+ const response = await firstValueFrom(this.http.get(`${this.config.api_url}/get-access-token.php`, {
201
+ headers: new HttpHeaders({
202
+ 'Accept-Language': '*',
203
+ Authorization: `Bearer ${token}`,
204
+ }),
205
+ }));
206
+ if (response.type === 'error' || response.type === 'exception') {
207
+ throw response;
208
+ }
209
+ const additional_data = response.additional_data;
210
+ if (!additional_data.key_okay) {
211
+ throw response;
212
+ }
213
+ if (additional_data.key) {
214
+ token = additional_data.key;
215
+ }
216
+ const result = {
217
+ key: token,
218
+ expires: +additional_data.expires,
219
+ expiry_time: +additional_data.expiry_time,
220
+ grace_period: +additional_data.grace_period,
221
+ location_id: +additional_data.location_id,
222
+ user_id: +additional_data.user_id,
223
+ access_level: +additional_data.access_level,
224
+ addresses_id: +additional_data.addresses_id,
225
+ shipping_id: +additional_data.shipping_id,
226
+ clients_id: +additional_data.clients_id,
227
+ };
228
+ return result;
229
+ }
230
+ async restore() {
231
+ try {
232
+ const token = this.session.getCachedSession();
233
+ if (!token) {
234
+ throw new Error('Invalid token. Resetting session');
235
+ }
236
+ const result = await this.checkAccessToken(token);
237
+ return result;
238
+ }
239
+ catch (error) {
240
+ console.error(error);
241
+ this.session.reset();
242
+ }
243
+ return null;
244
+ }
245
+ // Handlers
246
+ handleExternalAuthentication(result) {
247
+ this.handleAuthentication(result);
248
+ }
249
+ handleAuthentication(result) {
250
+ if (!result.key) {
251
+ return;
252
+ }
253
+ this.session.handleSession({
254
+ token: result.key,
255
+ user_id: +result.user_id,
256
+ access_level: +result.access_level,
257
+ location_id: +result.location_id,
258
+ addresses_id: +result.addresses_id,
259
+ shipping_id: +result.shipping_id,
260
+ clients_id: +result.clients_id,
261
+ }, +result.expiry_time, +result.grace_period);
262
+ }
263
+ handleError(errorRes) {
264
+ const error = {
265
+ message: 'An unknown error occurred',
266
+ data: {},
267
+ };
268
+ if (!errorRes.type || !errorRes.service_type || !errorRes.message) {
269
+ return throwError(() => error);
270
+ }
271
+ if (errorRes.message.trim() !== '') {
272
+ error.message = errorRes.message;
273
+ }
274
+ if (errorRes.additional_data) {
275
+ error.data = errorRes.additional_data;
276
+ }
277
+ return throwError(() => error);
278
+ }
279
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: EsolveAuthService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
280
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: EsolveAuthService, providedIn: 'root' }); }
281
+ }
282
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: EsolveAuthService, decorators: [{
283
+ type: Injectable,
284
+ args: [{
285
+ providedIn: 'root',
286
+ }]
287
+ }], ctorParameters: () => [] });
288
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXNvbHZlLWF1dGguc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmctZXNvbHZlLWNvbm5lY3Qvc3JjL2xpYi9hdXRoL3NlcnZpY2VzL2Vzb2x2ZS1hdXRoLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUNILFVBQVUsRUFDVixVQUFVLEVBRVYsV0FBVyxHQUNkLE1BQU0sc0JBQXNCLENBQUM7QUFFOUIsT0FBTyxFQUNILFVBQVUsRUFDVixjQUFjLEVBQ2QsR0FBRyxFQUVILEVBQUUsRUFDRixTQUFTLEVBQ1QsR0FBRyxFQUNILFVBQVUsR0FDYixNQUFNLE1BQU0sQ0FBQztBQUVkLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNqRCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFekQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZUFBZSxDQUFDOztBQWFyRCxNQUFNLE9BQU8saUJBQWlCO0lBTTFCO1FBTGlCLFdBQU0sR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUNyQyxTQUFJLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzFCLFlBQU8sR0FBRyxNQUFNLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUN2QyxpQkFBWSxHQUFHLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBRzlELElBQUksQ0FBQyxPQUFPO2FBQ1AsWUFBWSxFQUFFO2FBQ2QsSUFBSSxDQUNELFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxFQUN4QyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQzdCO2FBQ0Es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RUFBRSxDQUFDLE1BQU0sQ0FBQyxXQUFXO1lBQ2hDLFlBQVksRUFBRSxDQUFDLE1BQU0sQ0FBQyxZQUFZO1lBQ2xDLFdBQVcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxXQUFXO1lBQ2hDLFVBQVUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxVQUFVO1NBQ2pDLEVBQ0QsQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUNuQixDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQ3ZCLENBQUM7SUFDTixDQUFDO0lBRU8sV0FBVyxDQUNmLFFBQXlEO1FBRXpELE1BQU0sS0FBSyxHQUFHO1lBQ1YsT0FBTyxFQUFFLDJCQUEyQjtZQUNwQyxJQUFJLEVBQUUsRUFBRTtTQUNYLENBQUM7UUFFRixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDaEUsT0FBTyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkMsQ0FBQztRQUVELElBQUksUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQztZQUNqQyxLQUFLLENBQUMsT0FBTyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUM7UUFDckMsQ0FBQztRQUVELElBQUksUUFBUSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQzNCLEtBQUssQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDLGVBQWUsQ0FBQztRQUMxQyxDQUFDO1FBRUQsT0FBTyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkMsQ0FBQzs4R0F4WVEsaUJBQWlCO2tIQUFqQixpQkFBaUIsY0FGZCxNQUFNOzsyRkFFVCxpQkFBaUI7a0JBSDdCLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICAgIEh0dHBDbGllbnQsXG4gICAgSHR0cFBhcmFtcyxcbiAgICBIdHRwRXJyb3JSZXNwb25zZSxcbiAgICBIdHRwSGVhZGVycyxcbn0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuXG5pbXBvcnQge1xuICAgIGNhdGNoRXJyb3IsXG4gICAgZmlyc3RWYWx1ZUZyb20sXG4gICAgbWFwLFxuICAgIE9ic2VydmFibGUsXG4gICAgb2YsXG4gICAgc3dpdGNoTWFwLFxuICAgIHRhcCxcbiAgICB0aHJvd0Vycm9yLFxufSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgRXNvbHZlQ29uZmlnU2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUnO1xuaW1wb3J0IHsgRXNvbHZlRXJyb3JIYW5kbGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NoYXJlZCc7XG5cbmltcG9ydCB7IEVzb2x2ZVNlc3Npb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2Vzc2lvbic7XG5cbmltcG9ydCB7XG4gICAgRXNvbHZlQXV0aEdldFJlc3BvbnNlLFxuICAgIEVzb2x2ZUF1dGhDaGVja1Jlc3BvbnNlLFxuICAgIEVzb2x2ZUF1dGhSZXN1bHQsXG4gICAgRXNvbHZlTG9naW5SZXNwb25zZSxcbiAgICBFc29sdmVMb2dvdXRSZXNwb25zZSxcbn0gZnJvbSAnLi4vdHlwZXMnO1xuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBFc29sdmVBdXRoU2VydmljZSB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBjb25maWcgPSBpbmplY3QoRXNvbHZlQ29uZmlnU2VydmljZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBodHRwID0gaW5qZWN0KEh0dHBDbGllbnQpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgc2Vzc2lvbiA9IGluamVjdChFc29sdmVTZXNzaW9uU2VydmljZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBlcnJvckhhbmRsZXIgPSBpbmplY3QoRXNvbHZlRXJyb3JIYW5kbGVyU2VydmljZSk7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5zZXNzaW9uXG4gICAgICAgICAgICAub25TZXNzaW9uRW5kKClcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLmNoZWNrQWNjZXNzVG9rZW4oKSksXG4gICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoKSA9PiBvZihudWxsKSksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlQXV0aGVudGljYXRpb24ocmVzdWx0KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlc3Npb24uZXhwaXJlU2Vzc2lvbigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuc2Vzc2lvbi5vbkV4cGlyZSgpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmxvZ291dCgpLmNhdGNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBEZWFsIHdpdGggZXJyb3IgZ3JhY2VmdWxseVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRBY2Nlc3NUb2tlbihcbiAgICAgICAgZW1haWw6IHN0cmluZyxcbiAgICAgICAgcGFzc3dvcmQ6IHN0cmluZyxcbiAgICAgICAgYW5vbnltb3VzID0gZmFsc2UsXG4gICAgKTogT2JzZXJ2YWJsZTxFc29sdmVBdXRoR2V0UmVzcG9uc2U+IHtcbiAgICAgICAgbGV0IHBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XG5cbiAgICAgICAgaWYgKGFub255bW91cykge1xuICAgICAgICAgICAgcGFyYW1zID0gcGFyYW1zLnNldCgnYW5vbnltb3VzJywgdHJ1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoZW1haWwgIT09ICcnKSB7XG4gICAgICAgICAgICAgICAgcGFyYW1zID0gcGFyYW1zLnNldCgnZW1haWwnLCBlbWFpbCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChwYXNzd29yZCAhPT0gJycpIHtcbiAgICAgICAgICAgICAgICBwYXJhbXMgPSBwYXJhbXMuc2V0KCdwYXNzd29yZCcsIHBhc3N3b3JkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgICAgICAgIC5nZXQ8RXNvbHZlQXV0aEdldFJlc3BvbnNlPihcbiAgICAgICAgICAgICAgICBgJHt0aGlzLmNvbmZpZy5hcGlfdXJsfS9nZXQtYWNjZXNzLXRva2VuLnBocGAsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBwYXJhbXMsXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAgICAgICAgICAgICAgICAgICAnQWNjZXB0LUxhbmd1YWdlJzogJyonLFxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFwKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS50eXBlID09PSAnZXJyb3InIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS50eXBlID09PSAnZXhjZXB0aW9uJ1xuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IHJlc3BvbnNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZUVycm9yKSxcbiAgICAgICAgICAgICAgICB0YXAoKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlQXV0aGVudGljYXRpb24ocmVzcG9uc2UuYWRkaXRpb25hbF9kYXRhKTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEFub255bW91c1Nlc3Npb24oKTogT2JzZXJ2YWJsZTxFc29sdmVBdXRoR2V0UmVzcG9uc2U+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QWNjZXNzVG9rZW4oJycsICcnLCB0cnVlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgYXV0b0xvZ2luKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgdGhpcy5yZXN0b3JlKCk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmICghcmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbShcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRBbm9ueW1vdXNTZXNzaW9uKCksXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3BvbnNlLmFkZGl0aW9uYWxfZGF0YTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5oYW5kbGVBdXRoZW50aWNhdGlvbihyZXN1bHQpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgbG9naW4oZW1haWw6IHN0cmluZywgcGFzc3dvcmQ6IHN0cmluZyk6IE9ic2VydmFibGU8bnVtYmVyPiB7XG4gICAgICAgIGNvbnN0IGJvZHkgPSB7XG4gICAgICAgICAgICBsb2dpbjoge1xuICAgICAgICAgICAgICAgIGVtYWlsLFxuICAgICAgICAgICAgICAgIHBhc3N3b3JkLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAgICAgICAucG9zdDxFc29sdmVMb2dpblJlc3BvbnNlPihcbiAgICAgICAgICAgICAgICBgJHt0aGlzLmNvbmZpZy5hcGlfdXJsfS9zZXQtbG9naW4ucGhwYCxcbiAgICAgICAgICAgICAgICBib2R5LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PXV0Zi04OycsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogJ2pzb24nLFxuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlOiAnYm9keScsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UucmVzcG9uc2VzID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLnJlc3BvbnNlcy5sZW5ndGggPD0gMFxuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IHJlc3BvbnNlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbG9naW5fcmVzcG9uc2UgPSByZXNwb25zZS5yZXNwb25zZXNbMF07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHJlc3BvbnNlLmFkZGl0aW9uYWxfZGF0YTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2dpbl9yZXNwb25zZS5zdGF0dXMuc3RhdGUgIT09ICdzdWNjZXNzJyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgbG9naW5fcmVzcG9uc2Uuc3RhdHVzLnN0YXRlICE9PSAnd2FybmluZydcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBsb2dpbl9yZXNwb25zZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcmVzcG9uc2VfbG9nIG9mIGxvZ2luX3Jlc3BvbnNlLmxvZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlX2xvZy50eXBlID09PSAnc3VjY2VzcycgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZV9sb2cubWVzc2FnZV9jb2RlID09PSAnbG9naW5fc3VjY2VzcydcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVzZXJfaWQgPSArbG9naW5fcmVzcG9uc2UuZXNvbHZlX2lkO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmVzdWx0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgbG9naW4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUF1dGhlbnRpY2F0aW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiByZXN1bHQua2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyX2lkOiByZXN1bHQudXNlcl9pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNjZXNzX2xldmVsOiByZXN1bHQuYWNjZXNzX2xldmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbl9pZDogcmVzdWx0LmxvY2F0aW9uX2lkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzZXNfaWQ6IHJlc3VsdC5hZGRyZXNzZXNfaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoaXBwaW5nX2lkOiByZXN1bHQuc2hpcHBpbmdfaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGlyZXM6IHJlc3VsdC5leHBpcmVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBpcnlfdGltZTogcmVzdWx0LmV4cGlyeV90aW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncmFjZV9wZXJpb2Q6IHJlc3VsdC5ncmFjZV9wZXJpb2QsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWVudHNfaWQ6IHJlc3VsdC5jbGllbnRzX2lkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVzZXJfaWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBsb2dpbl9yZXNwb25zZTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvclJlczogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXJyb3JIYW5kbGVyLmhhbmRsZUh0dHBQb3N0RXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICAnc2V0LWxvZ2luJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yUmVzLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgbG9nb3V0KCkge1xuICAgICAgICB0aGlzLnNlc3Npb24uc3RvcFRpbWVyKCk7XG5cbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbTxFc29sdmVBdXRoUmVzdWx0PihcbiAgICAgICAgICAgIHRoaXMuaHR0cFxuICAgICAgICAgICAgICAgIC5wb3N0PEVzb2x2ZUxvZ291dFJlc3BvbnNlPihcbiAgICAgICAgICAgICAgICAgICAgYCR7dGhpcy5jb25maWcuYXBpX3VybH0vc2V0LWxvZ291dC5waHBgLFxuICAgICAgICAgICAgICAgICAgICB7fSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9dXRmLTg7JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZVR5cGU6ICdqc29uJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9ic2VydmU6ICdib2R5JyxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5yZXNwb25zZXMgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLnJlc3BvbnNlcy5sZW5ndGggPD0gMFxuICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgcmVzcG9uc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxvZ291dF9yZXNwb25zZSA9IHJlc3BvbnNlLnJlc3BvbnNlc1swXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHJlc3BvbnNlLmFkZGl0aW9uYWxfZGF0YTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ291dF9yZXNwb25zZS5zdGF0dXMuc3RhdGUgIT09ICdzdWNjZXNzJyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ291dF9yZXNwb25zZS5zdGF0dXMuc3RhdGUgIT09ICd3YXJuaW5nJ1xuICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbG9nb3V0X3Jlc3BvbnNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHJlc3BvbnNlX2xvZyBvZiBsb2dvdXRfcmVzcG9uc2UubG9nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZV9sb2cudHlwZSA9PT0gJ3N1Y2Nlc3MnICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlX2xvZy5tZXNzYWdlX2NvZGUgPT09ICdsb2dvdXRfc3VjY2VzcydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmVzdWx0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGxvZ291dCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVBdXRoZW50aWNhdGlvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IHJlc3VsdC5rZXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyX2lkOiByZXN1bHQudXNlcl9pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjY2Vzc19sZXZlbDogcmVzdWx0LmFjY2Vzc19sZXZlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uX2lkOiByZXN1bHQubG9jYXRpb25faWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzZXNfaWQ6IHJlc3VsdC5hZGRyZXNzZXNfaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGlwcGluZ19pZDogcmVzdWx0LnNoaXBwaW5nX2lkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwaXJlczogcmVzdWx0LmV4cGlyZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBpcnlfdGltZTogcmVzdWx0LmV4cGlyeV90aW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JhY2VfcGVyaW9kOiByZXN1bHQuZ3JhY2VfcGVyaW9kLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpZW50c19pZDogcmVzdWx0LmNsaWVudHNfaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBsb2dvdXRfcmVzcG9uc2U7XG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvclJlczogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVycm9ySGFuZGxlci5oYW5kbGVIdHRwUG9zdEVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzZXQtbG9nb3V0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvclJlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyB2YWxpZGF0ZUNhY2hlZFRva2VucygpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgICAgbGV0IHZhbGlkID0gZmFsc2U7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHNlc3Npb24gPSB0aGlzLnNlc3Npb24uZ2V0Q2FjaGVkU2Vzc2lvbigpO1xuXG4gICAgICAgICAgICBpZiAoIXNlc3Npb24pIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgc2Vzc2lvbicpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmNoZWNrQWNjZXNzVG9rZW4oc2Vzc2lvbik7XG5cbiAgICAgICAgICAgIGlmICghcmVzdWx0LmtleSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBrZXknKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFsaWQgPSB0cnVlO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG5cbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5yZXNldCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHZhbGlkO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgY2hlY2tBY2Nlc3NUb2tlbihcbiAgICAgICAgdG9rZW4gPSB0aGlzLnNlc3Npb24uZ2V0VG9rZW4oKSxcbiAgICApOiBQcm9taXNlPEVzb2x2ZUF1dGhSZXN1bHQ+IHtcbiAgICAgICAgaWYgKHRva2VuID09PSAnJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIFRva2VuJyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKFxuICAgICAgICAgICAgdGhpcy5odHRwLmdldDxFc29sdmVBdXRoQ2hlY2tSZXNwb25zZT4oXG4gICAgICAgICAgICAgICAgYCR7dGhpcy5jb25maWcuYXBpX3VybH0vZ2V0LWFjY2Vzcy10b2tlbi5waHBgLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdBY2NlcHQtTGFuZ3VhZ2UnOiAnKicsXG4gICAgICAgICAgICAgICAgICAgICAgICBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YCxcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICksXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKHJlc3BvbnNlLnR5cGUgPT09ICdlcnJvcicgfHwgcmVzcG9uc2UudHlwZSA9PT0gJ2V4Y2VwdGlvbicpIHtcbiAgICAgICAgICAgIHRocm93IHJlc3BvbnNlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYWRkaXRpb25hbF9kYXRhID0gcmVzcG9uc2UuYWRkaXRpb25hbF9kYXRhO1xuXG4gICAgICAgIGlmICghYWRkaXRpb25hbF9kYXRhLmtleV9va2F5KSB7XG4gICAgICAgICAgICB0aHJvdyByZXNwb25zZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhZGRpdGlvbmFsX2RhdGEua2V5KSB7XG4gICAgICAgICAgICB0b2tlbiA9IGFkZGl0aW9uYWxfZGF0YS5rZXk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXN1bHQ6IEVzb2x2ZUF1dGhSZXN1bHQgPSB7XG4gICAgICAgICAgICBrZXk6IHRva2VuLFxuICAgICAgICAgICAgZXhwaXJlczogK2FkZGl0aW9uYWxfZGF0YS5leHBpcmVzLFxuICAgICAgICAgICAgZXhwaXJ5X3RpbWU6ICthZGRpdGlvbmFsX2RhdGEuZXhwaXJ5X3RpbWUsXG4gICAgICAgICAgICBncmFjZV9wZXJpb2Q6ICthZGRpdGlvbmFsX2RhdGEuZ3JhY2VfcGVyaW9kLFxuICAgICAgICAgICAgbG9jYXRpb25faWQ6ICthZGRpdGlvbmFsX2RhdGEubG9jYXRpb25faWQsXG4gICAgICAgICAgICB1c2VyX2lkOiArYWRkaXRpb25hbF9kYXRhLnVzZXJfaWQsXG4gICAgICAgICAgICBhY2Nlc3NfbGV2ZWw6ICthZGRpdGlvbmFsX2RhdGEuYWNjZXNzX2xldmVsLFxuICAgICAgICAgICAgYWRkcmVzc2VzX2lkOiArYWRkaXRpb25hbF9kYXRhLmFkZHJlc3Nlc19pZCxcbiAgICAgICAgICAgIHNoaXBwaW5nX2lkOiArYWRkaXRpb25hbF9kYXRhLnNoaXBwaW5nX2lkLFxuICAgICAgICAgICAgY2xpZW50c19pZDogK2FkZGl0aW9uYWxfZGF0YS5jbGllbnRzX2lkLFxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyByZXN0b3JlKCk6IFByb21pc2U8RXNvbHZlQXV0aFJlc3VsdCB8IG51bGw+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHRva2VuID0gdGhpcy5zZXNzaW9uLmdldENhY2hlZFNlc3Npb24oKTtcblxuICAgICAgICAgICAgaWYgKCF0b2tlbikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCB0b2tlbi4gUmVzZXR0aW5nIHNlc3Npb24nKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5jaGVja0FjY2Vzc1Rva2VuKHRva2VuKTtcblxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuXG4gICAgICAgICAgICB0aGlzLnNlc3Npb24ucmVzZXQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZXJzXG5cbiAgICBwdWJsaWMgaGFuZGxlRXh0ZXJuYWxBdXRoZW50aWNhdGlvbihyZXN1bHQ6IEVzb2x2ZUF1dGhSZXN1bHQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5oYW5kbGVBdXRoZW50aWNhdGlvbihyZXN1bHQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlQXV0aGVudGljYXRpb24ocmVzdWx0OiBFc29sdmVBdXRoUmVzdWx0KTogdm9pZCB7XG4gICAgICAgIGlmICghcmVzdWx0LmtleSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZXNzaW9uLmhhbmRsZVNlc3Npb24oXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdG9rZW46IHJlc3VsdC5rZXksXG4gICAgICAgICAgICAgICAgdXNlcl9pZDogK3Jlc3VsdC51c2VyX2lkLFxuICAgICAgICAgICAgICAgIGFjY2Vzc19sZXZlbDogK3Jlc3VsdC5hY2Nlc3NfbGV2ZWwsXG4gICAgICAgICAgICAgICAgbG9jYXRpb25faWQ6ICtyZXN1bHQubG9jYXRpb25faWQsXG4gICAgICAgICAgICAgICAgYWRkcmVzc2VzX2lkOiArcmVzdWx0LmFkZHJlc3Nlc19pZCxcbiAgICAgICAgICAgICAgICBzaGlwcGluZ19pZDogK3Jlc3VsdC5zaGlwcGluZ19pZCxcbiAgICAgICAgICAgICAgICBjbGllbnRzX2lkOiArcmVzdWx0LmNsaWVudHNfaWQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgK3Jlc3VsdC5leHBpcnlfdGltZSxcbiAgICAgICAgICAgICtyZXN1bHQuZ3JhY2VfcGVyaW9kLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlRXJyb3IoXG4gICAgICAgIGVycm9yUmVzOiBFc29sdmVBdXRoR2V0UmVzcG9uc2UgfCBFc29sdmVBdXRoQ2hlY2tSZXNwb25zZSxcbiAgICApOiBPYnNlcnZhYmxlPG5ldmVyPiB7XG4gICAgICAgIGNvbnN0IGVycm9yID0ge1xuICAgICAgICAgICAgbWVzc2FnZTogJ0FuIHVua25vd24gZXJyb3Igb2NjdXJyZWQnLFxuICAgICAgICAgICAgZGF0YToge30sXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKCFlcnJvclJlcy50eXBlIHx8ICFlcnJvclJlcy5zZXJ2aWNlX3R5cGUgfHwgIWVycm9yUmVzLm1lc3NhZ2UpIHtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGVycm9yKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlcnJvclJlcy5tZXNzYWdlLnRyaW0oKSAhPT0gJycpIHtcbiAgICAgICAgICAgIGVycm9yLm1lc3NhZ2UgPSBlcnJvclJlcy5tZXNzYWdlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVycm9yUmVzLmFkZGl0aW9uYWxfZGF0YSkge1xuICAgICAgICAgICAgZXJyb3IuZGF0YSA9IGVycm9yUmVzLmFkZGl0aW9uYWxfZGF0YTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGVycm9yKTtcbiAgICB9XG59XG4iXX0=
@@ -0,0 +1,77 @@
1
+ import { inject, Injectable } from '@angular/core';
2
+ import { HttpClient, HttpParams } from '@angular/common/http';
3
+ import { throwError } from 'rxjs';
4
+ import { map } from 'rxjs/operators';
5
+ import { EsolveConfigService } from '../../core';
6
+ import { EsolveOtp, EsolveOtpValidation } from '../models';
7
+ import { EsolveAuthService } from './esolve-auth.service';
8
+ import * as i0 from "@angular/core";
9
+ export class EsolveOtpService {
10
+ constructor() {
11
+ this.config = inject(EsolveConfigService);
12
+ this.http = inject(HttpClient);
13
+ this.auth = inject(EsolveAuthService);
14
+ }
15
+ getOtp(recipient_number, captcha_options) {
16
+ let params = new HttpParams();
17
+ if (recipient_number) {
18
+ params = params.set('recipient_number', recipient_number);
19
+ }
20
+ if (captcha_options) {
21
+ params = params.set('captcha_key', captcha_options.captcha_key);
22
+ params = params.set('captcha_code', captcha_options.captcha_code);
23
+ }
24
+ try {
25
+ return this.http
26
+ .get(`${this.config.api_url}/get-otp.php`, { params })
27
+ .pipe(map((response) => {
28
+ if (response.records === undefined ||
29
+ Array.isArray(response.records)) {
30
+ throw response;
31
+ }
32
+ return new EsolveOtp(response.records);
33
+ }));
34
+ }
35
+ catch (error) {
36
+ return throwError(() => error);
37
+ }
38
+ }
39
+ getValidateOtp(otp_key, otp_code, otp_action = '', email = '', cellnumber = '') {
40
+ try {
41
+ return this.http
42
+ .get(`${this.config.api_url}/get-otp-validation.php`, {
43
+ params: {
44
+ otp_key,
45
+ otp_code,
46
+ otp_action,
47
+ email,
48
+ cellnumber,
49
+ },
50
+ })
51
+ .pipe(map((response) => {
52
+ if (response.records === undefined ||
53
+ Array.isArray(response.records)) {
54
+ throw response;
55
+ }
56
+ const additional_data = response.additional_data;
57
+ if (!Array.isArray(additional_data) &&
58
+ additional_data.key) {
59
+ this.auth.handleExternalAuthentication(additional_data);
60
+ }
61
+ return new EsolveOtpValidation(response.records);
62
+ }));
63
+ }
64
+ catch (error) {
65
+ return throwError(() => error);
66
+ }
67
+ }
68
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: EsolveOtpService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
69
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: EsolveOtpService, providedIn: 'root' }); }
70
+ }
71
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: EsolveOtpService, decorators: [{
72
+ type: Injectable,
73
+ args: [{
74
+ providedIn: 'root',
75
+ }]
76
+ }] });
77
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXNvbHZlLW90cC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZy1lc29sdmUtY29ubmVjdC9zcmMvbGliL2F1dGgvc2VydmljZXMvZXNvbHZlLW90cC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFOUQsT0FBTyxFQUFjLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM5QyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFckMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBTWpELE9BQU8sRUFBRSxTQUFTLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFM0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7O0FBSzFELE1BQU0sT0FBTyxnQkFBZ0I7SUFIN0I7UUFJcUIsV0FBTSxHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ3JDLFNBQUksR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDMUIsU0FBSSxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0tBdUZyRDtJQXJGVSxNQUFNLENBQ1QsZ0JBQXlCLEVBQ3pCLGVBQXNDO1FBRXRDLElBQUksTUFBTSxHQUFHLElBQUksVUFBVSxFQUFFLENBQUM7UUFFOUIsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1lBQ25CLE1BQU0sR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLGtCQUFrQixFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFDOUQsQ0FBQztRQUVELElBQUksZUFBZSxFQUFFLENBQUM7WUFDbEIsTUFBTSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLGVBQWUsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUNoRSxNQUFNLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsZUFBZSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3RFLENBQUM7UUFFRCxJQUFJLENBQUM7WUFDRCxPQUFPLElBQUksQ0FBQyxJQUFJO2lCQUNYLEdBQUcsQ0FFRixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxjQUFjLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQztpQkFDbEQsSUFBSSxDQUNELEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFO2dCQUNiLElBQ0ksUUFBUSxDQUFDLE9BQU8sS0FBSyxTQUFTO29CQUM5QixLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFDakMsQ0FBQztvQkFDQyxNQUFNLFFBQVEsQ0FBQztnQkFDbkIsQ0FBQztnQkFFRCxPQUFPLElBQUksU0FBUyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUMzQyxDQUFDLENBQUMsQ0FDTCxDQUFDO1FBQ1YsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDYixPQUFPLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLGNBQWMsQ0FDakIsT0FBZSxFQUNmLFFBQWdCLEVBQ2hCLGFBQThCLEVBQUUsRUFDaEMsS0FBSyxHQUFHLEVBQUUsRUFDVixVQUFVLEdBQUcsRUFBRTtRQUVmLElBQUksQ0FBQztZQUNELE9BQU8sSUFBSSxDQUFDLElBQUk7aUJBQ1gsR0FBRyxDQUNBLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLHlCQUF5QixFQUMvQztnQkFDSSxNQUFNLEVBQUU7b0JBQ0osT0FBTztvQkFDUCxRQUFRO29CQUNSLFVBQVU7b0JBQ1YsS0FBSztvQkFDTCxVQUFVO2lCQUNiO2FBQ0osQ0FDSjtpQkFDQSxJQUFJLENBQ0QsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7Z0JBQ2IsSUFDSSxRQUFRLENBQUMsT0FBTyxLQUFLLFNBQVM7b0JBQzlCLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUNqQyxDQUFDO29CQUNDLE1BQU0sUUFBUSxDQUFDO2dCQUNuQixDQUFDO2dCQUVELE1BQU0sZUFBZSxHQUFHLFFBQVEsQ0FBQyxlQUFlLENBQUM7Z0JBRWpELElBQ0ksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQztvQkFDL0IsZUFBZSxDQUFDLEdBQUcsRUFDckIsQ0FBQztvQkFDQyxJQUFJLENBQUMsSUFBSSxDQUFDLDRCQUE0QixDQUNsQyxlQUFlLENBQ2xCLENBQUM7Z0JBQ04sQ0FBQztnQkFFRCxPQUFPLElBQUksbUJBQW1CLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3JELENBQUMsQ0FBQyxDQUNMLENBQUM7UUFDVixDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNiLE9BQU8sVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ25DLENBQUM7SUFDTCxDQUFDOzhHQXpGUSxnQkFBZ0I7a0hBQWhCLGdCQUFnQixjQUZiLE1BQU07OzJGQUVULGdCQUFnQjtrQkFINUIsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBQYXJhbXMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5cbmltcG9ydCB7IE9ic2VydmFibGUsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgRXNvbHZlQ29uZmlnU2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUnO1xuaW1wb3J0IHsgRXNvbHZlR2V0UmVzcG9uc2UgfSBmcm9tICcuLi8uLi9zaGFyZWQnO1xuaW1wb3J0IHsgRXNvbHZlQ2FwdGNoYU9wdGlvbnMgfSBmcm9tICcuLi8uLi9jYXB0Y2hhJztcblxuaW1wb3J0IHsgRXNvbHZlT3RwQWN0aW9uLCBFc29sdmVWYWxpZGF0ZU90cFJlc3BvbnNlIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgRXNvbHZlT3RwUmVjb3JkIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBFc29sdmVPdHAsIEVzb2x2ZU90cFZhbGlkYXRpb24gfSBmcm9tICcuLi9tb2RlbHMnO1xuXG5pbXBvcnQgeyBFc29sdmVBdXRoU2VydmljZSB9IGZyb20gJy4vZXNvbHZlLWF1dGguc2VydmljZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEVzb2x2ZU90cFNlcnZpY2Uge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnID0gaW5qZWN0KEVzb2x2ZUNvbmZpZ1NlcnZpY2UpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgaHR0cCA9IGluamVjdChIdHRwQ2xpZW50KTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGF1dGggPSBpbmplY3QoRXNvbHZlQXV0aFNlcnZpY2UpO1xuXG4gICAgcHVibGljIGdldE90cChcbiAgICAgICAgcmVjaXBpZW50X251bWJlcj86IHN0cmluZyxcbiAgICAgICAgY2FwdGNoYV9vcHRpb25zPzogRXNvbHZlQ2FwdGNoYU9wdGlvbnMsXG4gICAgKTogT2JzZXJ2YWJsZTxFc29sdmVPdHA+IHtcbiAgICAgICAgbGV0IHBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XG5cbiAgICAgICAgaWYgKHJlY2lwaWVudF9udW1iZXIpIHtcbiAgICAgICAgICAgIHBhcmFtcyA9IHBhcmFtcy5zZXQoJ3JlY2lwaWVudF9udW1iZXInLCByZWNpcGllbnRfbnVtYmVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjYXB0Y2hhX29wdGlvbnMpIHtcbiAgICAgICAgICAgIHBhcmFtcyA9IHBhcmFtcy5zZXQoJ2NhcHRjaGFfa2V5JywgY2FwdGNoYV9vcHRpb25zLmNhcHRjaGFfa2V5KTtcbiAgICAgICAgICAgIHBhcmFtcyA9IHBhcmFtcy5zZXQoJ2NhcHRjaGFfY29kZScsIGNhcHRjaGFfb3B0aW9ucy5jYXB0Y2hhX2NvZGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgICAgICAgICAgICAuZ2V0PFxuICAgICAgICAgICAgICAgICAgICBFc29sdmVHZXRSZXNwb25zZTxFc29sdmVPdHBSZWNvcmQ+XG4gICAgICAgICAgICAgICAgPihgJHt0aGlzLmNvbmZpZy5hcGlfdXJsfS9nZXQtb3RwLnBocGAsIHsgcGFyYW1zIH0pXG4gICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5yZWNvcmRzID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcnJheS5pc0FycmF5KHJlc3BvbnNlLnJlY29yZHMpXG4gICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyByZXNwb25zZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBFc29sdmVPdHAocmVzcG9uc2UucmVjb3Jkcyk7XG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnJvcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0VmFsaWRhdGVPdHAoXG4gICAgICAgIG90cF9rZXk6IHN0cmluZyxcbiAgICAgICAgb3RwX2NvZGU6IHN0cmluZyxcbiAgICAgICAgb3RwX2FjdGlvbjogRXNvbHZlT3RwQWN0aW9uID0gJycsXG4gICAgICAgIGVtYWlsID0gJycsXG4gICAgICAgIGNlbGxudW1iZXIgPSAnJyxcbiAgICApOiBPYnNlcnZhYmxlPEVzb2x2ZU90cFZhbGlkYXRpb24+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgICAgICAgICAgICAuZ2V0PEVzb2x2ZVZhbGlkYXRlT3RwUmVzcG9uc2U+KFxuICAgICAgICAgICAgICAgICAgICBgJHt0aGlzLmNvbmZpZy5hcGlfdXJsfS9nZXQtb3RwLXZhbGlkYXRpb24ucGhwYCxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RwX2tleSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdHBfY29kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdHBfYWN0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtYWlsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGxudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLnJlY29yZHMgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5LmlzQXJyYXkocmVzcG9uc2UucmVjb3JkcylcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IHJlc3BvbnNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhZGRpdGlvbmFsX2RhdGEgPSByZXNwb25zZS5hZGRpdGlvbmFsX2RhdGE7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAhQXJyYXkuaXNBcnJheShhZGRpdGlvbmFsX2RhdGEpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbF9kYXRhLmtleVxuICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hdXRoLmhhbmRsZUV4dGVybmFsQXV0aGVudGljYXRpb24oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxfZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEVzb2x2ZU90cFZhbGlkYXRpb24ocmVzcG9uc2UucmVjb3Jkcyk7XG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnJvcik7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
@@ -0,0 +1,3 @@
1
+ export { EsolveAuthService } from './esolve-auth.service';
2
+ export { EsolveOtpService } from './esolve-otp.service';
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL25nLWVzb2x2ZS1jb25uZWN0L3NyYy9saWIvYXV0aC9zZXJ2aWNlcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IEVzb2x2ZUF1dGhTZXJ2aWNlIH0gZnJvbSAnLi9lc29sdmUtYXV0aC5zZXJ2aWNlJztcbmV4cG9ydCB7IEVzb2x2ZU90cFNlcnZpY2UgfSBmcm9tICcuL2Vzb2x2ZS1vdHAuc2VydmljZSc7XG4iXX0=
@@ -3,48 +3,45 @@ import { ESOLVE_CONNECT_CONFIG } from './esolve-connect-config.token';
3
3
  import * as i0 from "@angular/core";
4
4
  export class EsolveConfigService {
5
5
  constructor() {
6
- this.api_url = '';
7
- this.site_url = '';
8
- this.wsid = '';
9
- this.title_separator = '|';
10
- this.session_storage_key = '_ng_eslv_token';
11
- this.coupon_storage_key = '_ng_eslv_coupons';
12
- this.voucher_storage_key = '_ng_eslv_vouchers';
13
- this.device_designation = 'web';
14
- const config = inject(ESOLVE_CONNECT_CONFIG);
15
- if (config.api_url === '' || config.wsid === '') {
6
+ this.config = inject(ESOLVE_CONNECT_CONFIG);
7
+ this.wsid = this.config.wsid;
8
+ this.api_url = this.config.api_url;
9
+ this.site_url = this.config.site_url;
10
+ // Device specific
11
+ this.native = this.config.native ?? false;
12
+ this.device_designation = this.config.device_designation ?? 'web';
13
+ // SEO configuration
14
+ this.title_prefix = this.config.title_prefix ?? '';
15
+ this.title_suffix = this.config.title_suffix ?? '';
16
+ this.title_separator = this.config.title_separator ?? '|';
17
+ this.default_seo_title = this.config.default_seo_title ?? '';
18
+ this.default_seo_description = this.config.default_seo_description ?? '';
19
+ this.default_seo_keywords = this.config.default_seo_keywords ?? '';
20
+ // Storage keys
21
+ this.session_cookie_key = this.config.session_cookie_key ?? '_ng_eslv_token';
22
+ this.coupon_cookie_key = this.config.coupon_cookie_key ?? '_ng_eslv_coupons';
23
+ this.voucher_cookie_key = this.config.voucher_cookie_key ?? '_ng_eslv_vouchers';
24
+ // CDN settings
25
+ this.legacy_cdn = this.config.legacy_cdn;
26
+ this.cdn = this.config.cdn;
27
+ this.ftg_cdn = this.config.ftg_cdn;
28
+ this.error_image_path = this.config.error_image_path;
29
+ if (this.api_url === '' || this.wsid === '') {
16
30
  throw new Error('Invalid eSolve Eurus config');
17
31
  }
18
- this.api_url = config.api_url;
19
- this.site_url = config.site_url;
20
- this.wsid = config.wsid;
21
- this.title_prefix = config.title_prefix ?? '';
22
- this.title_suffix = config.title_suffix ?? '';
23
- this.default_seo_title = config.default_seo_title ?? '';
24
- this.default_seo_description = config.default_seo_description ?? '';
25
- this.default_seo_keywords = config.default_seo_keywords ?? '';
26
- this.native = config.native ?? false;
27
- if (config.session_storage_key) {
28
- this.session_storage_key = config.session_storage_key;
29
- }
30
- if (config.title_separator) {
31
- this.title_separator = config.title_separator;
32
- }
33
- if (config.coupon_storage_key) {
34
- this.coupon_storage_key = config.coupon_storage_key;
35
- }
36
- if (config.voucher_storage_key) {
37
- this.voucher_storage_key = config.voucher_storage_key;
38
- }
39
- if (this.native && config.device_designation) {
40
- this.device_designation = config.device_designation;
41
- }
42
- this.legacy_cdn = config.legacy_cdn;
43
- this.cdn = config.cdn;
44
- if (config.ftg_cdn) {
45
- this.ftg_cdn = config.ftg_cdn;
32
+ }
33
+ updateWsid(wsid) {
34
+ if (wsid === '') {
35
+ throw new Error('Invalid WSID');
46
36
  }
47
- this.error_image_path = config.error_image_path;
37
+ this.wsid = wsid;
38
+ }
39
+ udpateCdn(cdn, ftg_cdn) {
40
+ this.cdn = cdn;
41
+ this.ftg_cdn = ftg_cdn;
42
+ }
43
+ udpateLegacyCdn(cdn) {
44
+ this.legacy_cdn = cdn;
48
45
  }
49
46
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: EsolveConfigService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
50
47
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: EsolveConfigService, providedIn: 'root' }); }
@@ -55,4 +52,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImpor
55
52
  providedIn: 'root',
56
53
  }]
57
54
  }], ctorParameters: () => [] });
58
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXNvbHZlLWNvbmZpZy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZy1lc29sdmUtY29ubmVjdC9zcmMvbGliL2NvcmUvZXNvbHZlLWNvbmZpZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR25ELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLCtCQUErQixDQUFDOztBQUt0RSxNQUFNLE9BQU8sbUJBQW1CO0lBcUI1QjtRQXBCTyxZQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2IsYUFBUSxHQUFHLEVBQUUsQ0FBQztRQUNkLFNBQUksR0FBRyxFQUFFLENBQUM7UUFHVixvQkFBZSxHQUFHLEdBQUcsQ0FBQztRQUt0Qix3QkFBbUIsR0FBRyxnQkFBZ0IsQ0FBQztRQUN2Qyx1QkFBa0IsR0FBRyxrQkFBa0IsQ0FBQztRQUN4Qyx3QkFBbUIsR0FBRyxtQkFBbUIsQ0FBQztRQUMxQyx1QkFBa0IsR0FBRyxLQUFLLENBQUM7UUFROUIsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFFN0MsSUFBSSxNQUFNLENBQUMsT0FBTyxLQUFLLEVBQUUsSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLEVBQUUsRUFBRSxDQUFDO1lBQzlDLE1BQU0sSUFBSSxLQUFLLENBQUMsNkJBQTZCLENBQUMsQ0FBQztRQUNuRCxDQUFDO1FBRUQsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDO1FBQzlCLElBQUksQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQztRQUNoQyxJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFFeEIsSUFBSSxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUMsWUFBWSxJQUFJLEVBQUUsQ0FBQztRQUM5QyxJQUFJLENBQUMsWUFBWSxHQUFHLE1BQU0sQ0FBQyxZQUFZLElBQUksRUFBRSxDQUFDO1FBQzlDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxNQUFNLENBQUMsaUJBQWlCLElBQUksRUFBRSxDQUFDO1FBQ3hELElBQUksQ0FBQyx1QkFBdUIsR0FBRyxNQUFNLENBQUMsdUJBQXVCLElBQUksRUFBRSxDQUFDO1FBQ3BFLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxNQUFNLENBQUMsb0JBQW9CLElBQUksRUFBRSxDQUFDO1FBRTlELElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUM7UUFFckMsSUFBSSxNQUFNLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUM3QixJQUFJLENBQUMsbUJBQW1CLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixDQUFDO1FBQzFELENBQUM7UUFFRCxJQUFJLE1BQU0sQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsZUFBZSxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUM7UUFDbEQsQ0FBQztRQUVELElBQUksTUFBTSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDNUIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQztRQUN4RCxDQUFDO1FBRUQsSUFBSSxNQUFNLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUM3QixJQUFJLENBQUMsbUJBQW1CLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixDQUFDO1FBQzFELENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDM0MsSUFBSSxDQUFDLGtCQUFrQixHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQztRQUN4RCxDQUFDO1FBRUQsSUFBSSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDO1FBQ3BDLElBQUksQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQztRQUV0QixJQUFJLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNqQixJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUM7UUFDbEMsQ0FBQztRQUVELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUM7SUFDcEQsQ0FBQzs4R0FwRVEsbUJBQW1CO2tIQUFuQixtQkFBbUIsY0FGaEIsTUFBTTs7MkZBRVQsbUJBQW1CO2tCQUgvQixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBFc29sdmVDb25uZWN0Q29uZmlnIH0gZnJvbSAnLi9lc29sdmUtY29ubmVjdC1jb25maWcuaW50ZXJmYWNlJztcbmltcG9ydCB7IEVTT0xWRV9DT05ORUNUX0NPTkZJRyB9IGZyb20gJy4vZXNvbHZlLWNvbm5lY3QtY29uZmlnLnRva2VuJztcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgRXNvbHZlQ29uZmlnU2VydmljZSBpbXBsZW1lbnRzIEVzb2x2ZUNvbm5lY3RDb25maWcge1xuICAgIHB1YmxpYyBhcGlfdXJsID0gJyc7XG4gICAgcHVibGljIHNpdGVfdXJsID0gJyc7XG4gICAgcHVibGljIHdzaWQgPSAnJztcbiAgICBwdWJsaWMgdGl0bGVfcHJlZml4OiBzdHJpbmc7XG4gICAgcHVibGljIHRpdGxlX3N1ZmZpeDogc3RyaW5nO1xuICAgIHB1YmxpYyB0aXRsZV9zZXBhcmF0b3IgPSAnfCc7XG4gICAgcHVibGljIGRlZmF1bHRfc2VvX3RpdGxlOiBzdHJpbmc7XG4gICAgcHVibGljIGRlZmF1bHRfc2VvX2Rlc2NyaXB0aW9uOiBzdHJpbmc7XG4gICAgcHVibGljIGRlZmF1bHRfc2VvX2tleXdvcmRzOiBzdHJpbmc7XG4gICAgcHVibGljIG5hdGl2ZTogYm9vbGVhbjtcbiAgICBwdWJsaWMgc2Vzc2lvbl9zdG9yYWdlX2tleSA9ICdfbmdfZXNsdl90b2tlbic7XG4gICAgcHVibGljIGNvdXBvbl9zdG9yYWdlX2tleSA9ICdfbmdfZXNsdl9jb3Vwb25zJztcbiAgICBwdWJsaWMgdm91Y2hlcl9zdG9yYWdlX2tleSA9ICdfbmdfZXNsdl92b3VjaGVycyc7XG4gICAgcHVibGljIGRldmljZV9kZXNpZ25hdGlvbiA9ICd3ZWInO1xuXG4gICAgcHVibGljIGxlZ2FjeV9jZG4/OiBzdHJpbmc7XG4gICAgcHVibGljIGNkbj86IHN0cmluZztcbiAgICBwdWJsaWMgZnRnX2Nkbj86IHN0cmluZztcbiAgICBwdWJsaWMgZXJyb3JfaW1hZ2VfcGF0aD86IHN0cmluZztcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBjb25zdCBjb25maWcgPSBpbmplY3QoRVNPTFZFX0NPTk5FQ1RfQ09ORklHKTtcblxuICAgICAgICBpZiAoY29uZmlnLmFwaV91cmwgPT09ICcnIHx8IGNvbmZpZy53c2lkID09PSAnJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGVTb2x2ZSBFdXJ1cyBjb25maWcnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYXBpX3VybCA9IGNvbmZpZy5hcGlfdXJsO1xuICAgICAgICB0aGlzLnNpdGVfdXJsID0gY29uZmlnLnNpdGVfdXJsO1xuICAgICAgICB0aGlzLndzaWQgPSBjb25maWcud3NpZDtcblxuICAgICAgICB0aGlzLnRpdGxlX3ByZWZpeCA9IGNvbmZpZy50aXRsZV9wcmVmaXggPz8gJyc7XG4gICAgICAgIHRoaXMudGl0bGVfc3VmZml4ID0gY29uZmlnLnRpdGxlX3N1ZmZpeCA/PyAnJztcbiAgICAgICAgdGhpcy5kZWZhdWx0X3Nlb190aXRsZSA9IGNvbmZpZy5kZWZhdWx0X3Nlb190aXRsZSA/PyAnJztcbiAgICAgICAgdGhpcy5kZWZhdWx0X3Nlb19kZXNjcmlwdGlvbiA9IGNvbmZpZy5kZWZhdWx0X3Nlb19kZXNjcmlwdGlvbiA/PyAnJztcbiAgICAgICAgdGhpcy5kZWZhdWx0X3Nlb19rZXl3b3JkcyA9IGNvbmZpZy5kZWZhdWx0X3Nlb19rZXl3b3JkcyA/PyAnJztcblxuICAgICAgICB0aGlzLm5hdGl2ZSA9IGNvbmZpZy5uYXRpdmUgPz8gZmFsc2U7XG5cbiAgICAgICAgaWYgKGNvbmZpZy5zZXNzaW9uX3N0b3JhZ2Vfa2V5KSB7XG4gICAgICAgICAgICB0aGlzLnNlc3Npb25fc3RvcmFnZV9rZXkgPSBjb25maWcuc2Vzc2lvbl9zdG9yYWdlX2tleTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb25maWcudGl0bGVfc2VwYXJhdG9yKSB7XG4gICAgICAgICAgICB0aGlzLnRpdGxlX3NlcGFyYXRvciA9IGNvbmZpZy50aXRsZV9zZXBhcmF0b3I7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29uZmlnLmNvdXBvbl9zdG9yYWdlX2tleSkge1xuICAgICAgICAgICAgdGhpcy5jb3Vwb25fc3RvcmFnZV9rZXkgPSBjb25maWcuY291cG9uX3N0b3JhZ2Vfa2V5O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbmZpZy52b3VjaGVyX3N0b3JhZ2Vfa2V5KSB7XG4gICAgICAgICAgICB0aGlzLnZvdWNoZXJfc3RvcmFnZV9rZXkgPSBjb25maWcudm91Y2hlcl9zdG9yYWdlX2tleTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm5hdGl2ZSAmJiBjb25maWcuZGV2aWNlX2Rlc2lnbmF0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmRldmljZV9kZXNpZ25hdGlvbiA9IGNvbmZpZy5kZXZpY2VfZGVzaWduYXRpb247XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmxlZ2FjeV9jZG4gPSBjb25maWcubGVnYWN5X2NkbjtcbiAgICAgICAgdGhpcy5jZG4gPSBjb25maWcuY2RuO1xuXG4gICAgICAgIGlmIChjb25maWcuZnRnX2Nkbikge1xuICAgICAgICAgICAgdGhpcy5mdGdfY2RuID0gY29uZmlnLmZ0Z19jZG47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmVycm9yX2ltYWdlX3BhdGggPSBjb25maWcuZXJyb3JfaW1hZ2VfcGF0aDtcbiAgICB9XG59XG4iXX0=
55
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXNvbHZlLWNvbmZpZy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZy1lc29sdmUtY29ubmVjdC9zcmMvbGliL2NvcmUvZXNvbHZlLWNvbmZpZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR25ELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLCtCQUErQixDQUFDOztBQUt0RSxNQUFNLE9BQU8sbUJBQW1CO0lBaUM1QjtRQWhDaUIsV0FBTSxHQUFHLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBRWpELFNBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztRQUN4QixZQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUM7UUFDOUIsYUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO1FBRXZDLGtCQUFrQjtRQUNYLFdBQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUM7UUFDckMsdUJBQWtCLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsSUFBSSxLQUFLLENBQUM7UUFFcEUsb0JBQW9CO1FBQ2IsaUJBQVksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksSUFBSSxFQUFFLENBQUM7UUFDOUMsaUJBQVksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksSUFBSSxFQUFFLENBQUM7UUFDOUMsb0JBQWUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsSUFBSSxHQUFHLENBQUM7UUFDckQsc0JBQWlCLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsSUFBSSxFQUFFLENBQUM7UUFDeEQsNEJBQXVCLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyx1QkFBdUIsSUFBSSxFQUFFLENBQUM7UUFDcEUseUJBQW9CLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsSUFBSSxFQUFFLENBQUM7UUFFckUsZUFBZTtRQUNSLHVCQUFrQixHQUNyQixJQUFJLENBQUMsTUFBTSxDQUFDLGtCQUFrQixJQUFJLGdCQUFnQixDQUFDO1FBQ2hELHNCQUFpQixHQUNwQixJQUFJLENBQUMsTUFBTSxDQUFDLGlCQUFpQixJQUFJLGtCQUFrQixDQUFDO1FBQ2pELHVCQUFrQixHQUNyQixJQUFJLENBQUMsTUFBTSxDQUFDLGtCQUFrQixJQUFJLG1CQUFtQixDQUFDO1FBRTFELGVBQWU7UUFDUixlQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUM7UUFDcEMsUUFBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDO1FBQ3RCLFlBQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQztRQUM5QixxQkFBZ0IsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDO1FBR25ELElBQUksSUFBSSxDQUFDLE9BQU8sS0FBSyxFQUFFLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxFQUFFLEVBQUUsQ0FBQztZQUMxQyxNQUFNLElBQUksS0FBSyxDQUFDLDZCQUE2QixDQUFDLENBQUM7UUFDbkQsQ0FBQztJQUNMLENBQUM7SUFFTSxVQUFVLENBQUMsSUFBWTtRQUMxQixJQUFJLElBQUksS0FBSyxFQUFFLEVBQUUsQ0FBQztZQUNkLE1BQU0sSUFBSSxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDcEMsQ0FBQztRQUVELElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0lBQ3JCLENBQUM7SUFFTSxTQUFTLENBQUMsR0FBWSxFQUFFLE9BQWdCO1FBQzNDLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ2YsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7SUFDM0IsQ0FBQztJQUVNLGVBQWUsQ0FBQyxHQUFZO1FBQy9CLElBQUksQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDO0lBQzFCLENBQUM7OEdBdERRLG1CQUFtQjtrSEFBbkIsbUJBQW1CLGNBRmhCLE1BQU07OzJGQUVULG1CQUFtQjtrQkFIL0IsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgRXNvbHZlQ29ubmVjdENvbmZpZyB9IGZyb20gJy4vZXNvbHZlLWNvbm5lY3QtY29uZmlnLmludGVyZmFjZSc7XG5pbXBvcnQgeyBFU09MVkVfQ09OTkVDVF9DT05GSUcgfSBmcm9tICcuL2Vzb2x2ZS1jb25uZWN0LWNvbmZpZy50b2tlbic7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEVzb2x2ZUNvbmZpZ1NlcnZpY2UgaW1wbGVtZW50cyBFc29sdmVDb25uZWN0Q29uZmlnIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbmZpZyA9IGluamVjdChFU09MVkVfQ09OTkVDVF9DT05GSUcpO1xuXG4gICAgcHVibGljIHdzaWQgPSB0aGlzLmNvbmZpZy53c2lkO1xuICAgIHB1YmxpYyBhcGlfdXJsID0gdGhpcy5jb25maWcuYXBpX3VybDtcbiAgICBwdWJsaWMgc2l0ZV91cmwgPSB0aGlzLmNvbmZpZy5zaXRlX3VybDtcblxuICAgIC8vIERldmljZSBzcGVjaWZpY1xuICAgIHB1YmxpYyBuYXRpdmUgPSB0aGlzLmNvbmZpZy5uYXRpdmUgPz8gZmFsc2U7XG4gICAgcHVibGljIGRldmljZV9kZXNpZ25hdGlvbiA9IHRoaXMuY29uZmlnLmRldmljZV9kZXNpZ25hdGlvbiA/PyAnd2ViJztcblxuICAgIC8vIFNFTyBjb25maWd1cmF0aW9uXG4gICAgcHVibGljIHRpdGxlX3ByZWZpeCA9IHRoaXMuY29uZmlnLnRpdGxlX3ByZWZpeCA/PyAnJztcbiAgICBwdWJsaWMgdGl0bGVfc3VmZml4ID0gdGhpcy5jb25maWcudGl0bGVfc3VmZml4ID8/ICcnO1xuICAgIHB1YmxpYyB0aXRsZV9zZXBhcmF0b3IgPSB0aGlzLmNvbmZpZy50aXRsZV9zZXBhcmF0b3IgPz8gJ3wnO1xuICAgIHB1YmxpYyBkZWZhdWx0X3Nlb190aXRsZSA9IHRoaXMuY29uZmlnLmRlZmF1bHRfc2VvX3RpdGxlID8/ICcnO1xuICAgIHB1YmxpYyBkZWZhdWx0X3Nlb19kZXNjcmlwdGlvbiA9IHRoaXMuY29uZmlnLmRlZmF1bHRfc2VvX2Rlc2NyaXB0aW9uID8/ICcnO1xuICAgIHB1YmxpYyBkZWZhdWx0X3Nlb19rZXl3b3JkcyA9IHRoaXMuY29uZmlnLmRlZmF1bHRfc2VvX2tleXdvcmRzID8/ICcnO1xuXG4gICAgLy8gU3RvcmFnZSBrZXlzXG4gICAgcHVibGljIHNlc3Npb25fY29va2llX2tleSA9XG4gICAgICAgIHRoaXMuY29uZmlnLnNlc3Npb25fY29va2llX2tleSA/PyAnX25nX2VzbHZfdG9rZW4nO1xuICAgIHB1YmxpYyBjb3Vwb25fY29va2llX2tleSA9XG4gICAgICAgIHRoaXMuY29uZmlnLmNvdXBvbl9jb29raWVfa2V5ID8/ICdfbmdfZXNsdl9jb3Vwb25zJztcbiAgICBwdWJsaWMgdm91Y2hlcl9jb29raWVfa2V5ID1cbiAgICAgICAgdGhpcy5jb25maWcudm91Y2hlcl9jb29raWVfa2V5ID8/ICdfbmdfZXNsdl92b3VjaGVycyc7XG5cbiAgICAvLyBDRE4gc2V0dGluZ3NcbiAgICBwdWJsaWMgbGVnYWN5X2NkbiA9IHRoaXMuY29uZmlnLmxlZ2FjeV9jZG47XG4gICAgcHVibGljIGNkbiA9IHRoaXMuY29uZmlnLmNkbjtcbiAgICBwdWJsaWMgZnRnX2NkbiA9IHRoaXMuY29uZmlnLmZ0Z19jZG47XG4gICAgcHVibGljIGVycm9yX2ltYWdlX3BhdGggPSB0aGlzLmNvbmZpZy5lcnJvcl9pbWFnZV9wYXRoO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIGlmICh0aGlzLmFwaV91cmwgPT09ICcnIHx8IHRoaXMud3NpZCA9PT0gJycpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBlU29sdmUgRXVydXMgY29uZmlnJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgdXBkYXRlV3NpZCh3c2lkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgaWYgKHdzaWQgPT09ICcnKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgV1NJRCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy53c2lkID0gd3NpZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgdWRwYXRlQ2RuKGNkbj86IHN0cmluZywgZnRnX2Nkbj86IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLmNkbiA9IGNkbjtcbiAgICAgICAgdGhpcy5mdGdfY2RuID0gZnRnX2NkbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgdWRwYXRlTGVnYWN5Q2RuKGNkbj86IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLmxlZ2FjeV9jZG4gPSBjZG47XG4gICAgfVxufVxuIl19