@posiwise/common-services 0.1.76 → 0.1.78
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/index.mjs +2 -2
- package/esm2022/lib/auth.service.mjs +33 -22
- package/esm2022/lib/brain.service.mjs +1 -1
- package/esm2022/lib/secure-token-storage.service.mjs +264 -0
- package/esm2022/lib/sentry.service.mjs +2 -2
- package/fesm2022/posiwise-common-services.mjs +315 -79
- package/fesm2022/posiwise-common-services.mjs.map +1 -1
- package/index.d.ts +1 -1
- package/lib/auth.service.d.ts +8 -2
- package/lib/brain.service.d.ts +1 -1
- package/lib/secure-token-storage.service.d.ts +94 -0
- package/package.json +1 -1
- package/esm2022/lib/jquery.service.mjs +0 -35
- package/lib/jquery.service.d.ts +0 -14
package/esm2022/index.mjs
CHANGED
|
@@ -10,6 +10,7 @@ export * from './lib/permission.service';
|
|
|
10
10
|
export * from './lib/toast.service';
|
|
11
11
|
export * from './lib/auth.service';
|
|
12
12
|
export * from './lib/local-storage.service';
|
|
13
|
+
export * from './lib/secure-token-storage.service';
|
|
13
14
|
export * from './lib/integrations-api-http.service';
|
|
14
15
|
export * from './lib/link-loader.service';
|
|
15
16
|
export * from './lib/user.service';
|
|
@@ -42,5 +43,4 @@ export * from './lib/logo-caching.service';
|
|
|
42
43
|
export * from './lib/hopscotch.service';
|
|
43
44
|
export * from './lib/brain.service';
|
|
44
45
|
export * from './lib/brain-api-http.service';
|
|
45
|
-
|
|
46
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzL2NvbW1vbi1zZXJ2aWNlcy9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFDSCxjQUFjLGdDQUFnQyxDQUFDO0FBQy9DLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLHFDQUFxQyxDQUFDO0FBQ3BELGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMsOEJBQThCLENBQUM7QUFDN0MsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLDRCQUE0QixDQUFDO0FBQzNDLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsOEJBQThCLENBQUM7QUFDN0MsY0FBYyxzQkFBc0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBQdWJsaWMgQVBJIFN1cmZhY2Ugb2YgcHctc2VydmljZXNcbiAqL1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZ29vZ2xlLWFuYWx5dGljcy5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NjcmlwdC1sb2FkZXIuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9iYXNlLWh0dHAuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21tb24tc2VydmljZXMubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL21haW4tYXBpLWh0dHAuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9wZXJtaXNzaW9uLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdG9hc3Quc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9hdXRoLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbG9jYWwtc3RvcmFnZS5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2ludGVncmF0aW9ucy1hcGktaHR0cC5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2xpbmstbG9hZGVyLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdXNlci5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2N1c3RvbS1wcmVsb2FkaW5nLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvYWItdGVzdC5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2dlby5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3Byb2ZpbGUuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zdWJzY3JpcHRpb24uc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9wcm9kdWN0LnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdmFsaWRhdGlvbi5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2Zvcm0taGVscGVyLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvYWhveS5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbW1vbi5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2RhdGUtZm9ybWF0dGVyLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcHJpbWVOZ0hlbHBlcic7XG5leHBvcnQgKiBmcm9tICcuL2xpYi90YWcuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi90aXBzLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvd2luZG93LnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZ3JvdXAuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9xdWFsaWZpY2F0aW9uLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZGFzaGJvYXJkLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbWFpbGJveC5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL25vdGlmaWNhdGlvbi5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NvY2tldC5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2VmZmVjdHMvdXNlci5lZmZlY3RzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2RhdGEuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9udW1iZXItcGlja2VyLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VudHJ5LnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbG9nby1jYWNoaW5nLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvaG9wc2NvdGNoLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvYnJhaW4uc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9icmFpbi1hcGktaHR0cC5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2pxdWVyeS5zZXJ2aWNlJztcbiJdfQ==
|
|
46
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzL2NvbW1vbi1zZXJ2aWNlcy9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFDSCxjQUFjLGdDQUFnQyxDQUFDO0FBQy9DLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLG9DQUFvQyxDQUFDO0FBQ25ELGNBQWMscUNBQXFDLENBQUM7QUFDcEQsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsc0JBQXNCLENBQUM7QUFDckMsY0FBYyw4QkFBOEIsQ0FBQztBQUM3QyxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsc0JBQXNCLENBQUM7QUFDckMsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyw4QkFBOEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBQdWJsaWMgQVBJIFN1cmZhY2Ugb2YgcHctc2VydmljZXNcbiAqL1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZ29vZ2xlLWFuYWx5dGljcy5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NjcmlwdC1sb2FkZXIuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9iYXNlLWh0dHAuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21tb24tc2VydmljZXMubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL21haW4tYXBpLWh0dHAuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9wZXJtaXNzaW9uLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdG9hc3Quc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9hdXRoLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbG9jYWwtc3RvcmFnZS5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlY3VyZS10b2tlbi1zdG9yYWdlLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvaW50ZWdyYXRpb25zLWFwaS1odHRwLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbGluay1sb2FkZXIuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi91c2VyLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY3VzdG9tLXByZWxvYWRpbmcuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9hYi10ZXN0LnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZ2VvLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcHJvZmlsZS5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3N1YnNjcmlwdGlvbi5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3Byb2R1Y3Quc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi92YWxpZGF0aW9uLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZm9ybS1oZWxwZXIuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9haG95LnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tbW9uLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZGF0ZS1mb3JtYXR0ZXIuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9wcmltZU5nSGVscGVyJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3RhZy5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3RpcHMuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi93aW5kb3cuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9ncm91cC5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3F1YWxpZmljYXRpb24uc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9kYXNoYm9hcmQuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9tYWlsYm94LnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbm90aWZpY2F0aW9uLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc29ja2V0LnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZWZmZWN0cy91c2VyLmVmZmVjdHMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZGF0YS5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL251bWJlci1waWNrZXIuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZW50cnkuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9sb2dvLWNhY2hpbmcuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9ob3BzY290Y2guc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9icmFpbi5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2JyYWluLWFwaS1odHRwLnNlcnZpY2UnO1xuIl19
|
|
@@ -3,26 +3,29 @@ import { HttpHeaders } from '@angular/common/http';
|
|
|
3
3
|
import { Inject, Injectable } from '@angular/core';
|
|
4
4
|
import { Router } from '@angular/router';
|
|
5
5
|
import { AppConfigService } from '@posiwise/app-config-service';
|
|
6
|
-
import { CAPTCHA_VALIDATION_PATH, NEWSLETTER_CONFIRMATION_PATH, NEWSLETTER_UNSUBSCRIBE_PATH, SOCIAL_LOGIN_PATH, TOKEN_HEADER_KEY, TOKEN_KEY
|
|
6
|
+
import { CAPTCHA_VALIDATION_PATH, NEWSLETTER_CONFIRMATION_PATH, NEWSLETTER_UNSUBSCRIBE_PATH, SOCIAL_LOGIN_PATH, TOKEN_HEADER_KEY, TOKEN_KEY } from '@posiwise/common-utilities';
|
|
7
7
|
import { BehaviorSubject } from 'rxjs';
|
|
8
8
|
import { map, switchMap } from 'rxjs/operators';
|
|
9
9
|
import swal from 'sweetalert2';
|
|
10
10
|
import { IntegrationsApiHttpService } from './integrations-api-http.service';
|
|
11
11
|
import { LocalStorage } from './local-storage.service';
|
|
12
12
|
import { MainApiHttpService } from './main-api-http.service';
|
|
13
|
+
import { SecureTokenStorageService } from './secure-token-storage.service';
|
|
13
14
|
import { CustomToastService } from './toast.service';
|
|
14
15
|
import { UserService } from './user.service';
|
|
15
16
|
import * as i0 from "@angular/core";
|
|
16
17
|
import * as i1 from "./local-storage.service";
|
|
17
|
-
import * as i2 from "
|
|
18
|
-
import * as i3 from "
|
|
19
|
-
import * as i4 from "./
|
|
20
|
-
import * as i5 from "./
|
|
21
|
-
import * as i6 from "
|
|
22
|
-
import * as i7 from "
|
|
18
|
+
import * as i2 from "./secure-token-storage.service";
|
|
19
|
+
import * as i3 from "@angular/router";
|
|
20
|
+
import * as i4 from "./main-api-http.service";
|
|
21
|
+
import * as i5 from "./user.service";
|
|
22
|
+
import * as i6 from "./toast.service";
|
|
23
|
+
import * as i7 from "@posiwise/app-config-service";
|
|
24
|
+
import * as i8 from "./integrations-api-http.service";
|
|
23
25
|
export class AuthService {
|
|
24
|
-
constructor(localStorage, router, http, userService, toastr, appConfigService, integrationsApi, document) {
|
|
26
|
+
constructor(localStorage, secureTokenStorage, router, http, userService, toastr, appConfigService, integrationsApi, document) {
|
|
25
27
|
this.localStorage = localStorage;
|
|
28
|
+
this.secureTokenStorage = secureTokenStorage;
|
|
26
29
|
this.router = router;
|
|
27
30
|
this.http = http;
|
|
28
31
|
this.userService = userService;
|
|
@@ -39,20 +42,20 @@ export class AuthService {
|
|
|
39
42
|
this.setHeaderKey();
|
|
40
43
|
}
|
|
41
44
|
getToken() {
|
|
42
|
-
if (this.
|
|
45
|
+
if (this.secureTokenStorage.getImpersonatedToken()) {
|
|
43
46
|
this.isUserPersonated = true;
|
|
44
|
-
return this.
|
|
47
|
+
return this.secureTokenStorage.getImpersonatedToken();
|
|
45
48
|
}
|
|
46
|
-
if (this.
|
|
49
|
+
if (this.secureTokenStorage.getPhonegapToken()) {
|
|
47
50
|
this.isUserPersonated = true;
|
|
48
|
-
return this.
|
|
51
|
+
return this.secureTokenStorage.getPhonegapToken();
|
|
49
52
|
}
|
|
50
53
|
this.isUserPersonated = false;
|
|
51
|
-
return this.
|
|
54
|
+
return this.secureTokenStorage.getToken();
|
|
52
55
|
}
|
|
53
56
|
getImpersonatedToken() {
|
|
54
|
-
return (this.
|
|
55
|
-
this.
|
|
57
|
+
return (this.secureTokenStorage.getImpersonatedToken() ||
|
|
58
|
+
this.secureTokenStorage.getPhonegapToken());
|
|
56
59
|
}
|
|
57
60
|
setHeaderKey() {
|
|
58
61
|
// Mobile: app
|
|
@@ -141,7 +144,7 @@ export class AuthService {
|
|
|
141
144
|
return this.http.post('session', formData);
|
|
142
145
|
}
|
|
143
146
|
storeToken(token) {
|
|
144
|
-
return this.
|
|
147
|
+
return this.secureTokenStorage.storeToken(token);
|
|
145
148
|
}
|
|
146
149
|
storePlatform(plat) {
|
|
147
150
|
return this.localStorage.setItem$('platform', plat);
|
|
@@ -155,10 +158,18 @@ export class AuthService {
|
|
|
155
158
|
phonegap: true
|
|
156
159
|
};
|
|
157
160
|
}
|
|
161
|
+
// Clear all tokens securely
|
|
162
|
+
this.secureTokenStorage.clearTokens().subscribe();
|
|
158
163
|
return this.http.delete('session', options);
|
|
159
164
|
}
|
|
165
|
+
/**
|
|
166
|
+
* Clear all authentication tokens
|
|
167
|
+
*/
|
|
168
|
+
clearTokens() {
|
|
169
|
+
return this.secureTokenStorage.clearTokens();
|
|
170
|
+
}
|
|
160
171
|
getToken$() {
|
|
161
|
-
return this.
|
|
172
|
+
return this.secureTokenStorage.getToken$();
|
|
162
173
|
}
|
|
163
174
|
getNewsletterSubscription(token) {
|
|
164
175
|
return this.http.get(`${NEWSLETTER_CONFIRMATION_PATH}?token=${token}`);
|
|
@@ -239,10 +250,10 @@ export class AuthService {
|
|
|
239
250
|
}
|
|
240
251
|
return this.http.post('/session/impersonate_user', data).pipe(map(x => {
|
|
241
252
|
if (x?.auth_token) {
|
|
242
|
-
this.
|
|
253
|
+
this.secureTokenStorage.storeImpersonatedToken(x.auth_token);
|
|
243
254
|
}
|
|
244
255
|
if (x?.phonegap_token) {
|
|
245
|
-
this.
|
|
256
|
+
this.secureTokenStorage.storePhonegapToken(x.phonegap_token);
|
|
246
257
|
}
|
|
247
258
|
return x;
|
|
248
259
|
}));
|
|
@@ -293,13 +304,13 @@ export class AuthService {
|
|
|
293
304
|
}
|
|
294
305
|
});
|
|
295
306
|
}
|
|
296
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: AuthService, deps: [{ token: i1.LocalStorage }, { token: i2.
|
|
307
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: AuthService, deps: [{ token: i1.LocalStorage }, { token: i2.SecureTokenStorageService }, { token: i3.Router }, { token: i4.MainApiHttpService }, { token: i5.UserService }, { token: i6.CustomToastService }, { token: i7.AppConfigService }, { token: i8.IntegrationsApiHttpService }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
297
308
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: AuthService }); }
|
|
298
309
|
}
|
|
299
310
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: AuthService, decorators: [{
|
|
300
311
|
type: Injectable
|
|
301
|
-
}], ctorParameters: () => [{ type: i1.LocalStorage }, { type: i2.
|
|
312
|
+
}], ctorParameters: () => [{ type: i1.LocalStorage }, { type: i2.SecureTokenStorageService }, { type: i3.Router }, { type: i4.MainApiHttpService }, { type: i5.UserService }, { type: i6.CustomToastService }, { type: i7.AppConfigService }, { type: i8.IntegrationsApiHttpService }, { type: Document, decorators: [{
|
|
302
313
|
type: Inject,
|
|
303
314
|
args: [DOCUMENT]
|
|
304
315
|
}] }] });
|
|
305
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24tc2VydmljZXMvc3JjL2xpYi9hdXRoLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFekMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDaEUsT0FBTyxFQUNILHVCQUF1QixFQUN2Qiw0QkFBNEIsRUFDNUIsMkJBQTJCLEVBQzNCLGlCQUFpQixFQUNqQixnQkFBZ0IsRUFDaEIsU0FBUyxFQUNULGdDQUFnQyxFQUNoQyx1QkFBdUIsRUFDMUIsTUFBTSw0QkFBNEIsQ0FBQztBQUVwQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEQsT0FBTyxJQUFJLE1BQU0sYUFBYSxDQUFDO0FBRy9CLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7OztBQUc3QyxNQUFNLE9BQU8sV0FBVztJQVlwQixZQUNxQixZQUEw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QUMsQ0FBQztJQUNQLENBQUM7K0dBelZRLFdBQVcsNk9Bb0JSLFFBQVE7bUhBcEJYLFdBQVc7OzRGQUFYLFdBQVc7a0JBRHZCLFVBQVU7OzBCQXFCRixNQUFNOzJCQUFDLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBIdHRwSGVhZGVycyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuaW1wb3J0IHsgQXBwQ29uZmlnU2VydmljZSB9IGZyb20gJ0Bwb3Npd2lzZS9hcHAtY29uZmlnLXNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgICBDQVBUQ0hBX1ZBTElEQVRJT05fUEFUSCxcbiAgICBORVdTTEVUVEVSX0NPTkZJUk1BVElPTl9QQVRILFxuICAgIE5FV1NMRVRURVJfVU5TVUJTQ1JJQkVfUEFUSCxcbiAgICBTT0NJQUxfTE9HSU5fUEFUSCxcbiAgICBUT0tFTl9IRUFERVJfS0VZLFxuICAgIFRPS0VOX0tFWSxcbiAgICBVU0VSX0lNUEVSU09OQVRFRF9QSE9ORUdBUF9UT0tFTixcbiAgICBVU0VSX0lNUEVSU09OQVRFRF9UT0tFTlxufSBmcm9tICdAcG9zaXdpc2UvY29tbW9uLXV0aWxpdGllcyc7XG5cbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgc3dhbCBmcm9tICdzd2VldGFsZXJ0Mic7XG5cbmltcG9ydCB7IFNpZ25VcFZhbHVlcyB9IGZyb20gJy4vY29tbW9uLXNlcnZpY2VzLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJbnRlZ3JhdGlvbnNBcGlIdHRwU2VydmljZSB9IGZyb20gJy4vaW50ZWdyYXRpb25zLWFwaS1odHRwLnNlcnZpY2UnO1xuaW1wb3J0IHsgTG9jYWxTdG9yYWdlIH0gZnJvbSAnLi9sb2NhbC1zdG9yYWdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgTWFpbkFwaUh0dHBTZXJ2aWNlIH0gZnJvbSAnLi9tYWluLWFwaS1odHRwLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ3VzdG9tVG9hc3RTZXJ2aWNlIH0gZnJvbSAnLi90b2FzdC5zZXJ2aWNlJztcbmltcG9ydCB7IFVzZXJTZXJ2aWNlIH0gZnJvbSAnLi91c2VyLnNlcnZpY2UnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQXV0aFNlcnZpY2Uge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcGxhdGZvcm1TdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KCcnKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHR3aXR0ZXJFbmRwb2ludCA9ICcvdHdpdHRlcic7XG5cbiAgICBhdXRoX3Rva2VuOiBzdHJpbmc7XG4gICAgaGVhZGVyX2tleSA9ICdicm93c2VyJztcbiAgICBwbGF0Zm9ybSA9ICcnO1xuXG4gICAgcGxhdGZvcm0kID0gdGhpcy5wbGF0Zm9ybVN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cbiAgICBpc1VzZXJQZXJzb25hdGVkOiBib29sZWFuO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgbG9jYWxTdG9yYWdlOiBMb2NhbFN0b3JhZ2UsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGVyOiBSb3V0ZXIsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgaHR0cDogTWFpbkFwaUh0dHBTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHVzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSB0b2FzdHI6IEN1c3RvbVRvYXN0U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBhcHBDb25maWdTZXJ2aWNlOiBBcHBDb25maWdTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGludGVncmF0aW9uc0FwaTogSW50ZWdyYXRpb25zQXBpSHR0cFNlcnZpY2UsXG4gICAgICAgIEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgcmVhZG9ubHkgZG9jdW1lbnQ6IERvY3VtZW50XG4gICAgKSB7XG4gICAgICAgIC8vIFNldCBIZWFkZXIgS2V5XG4gICAgICAgIHRoaXMuc2V0SGVhZGVyS2V5KCk7XG4gICAgfVxuXG4gICAgZ2V0VG9rZW4oKSB7XG4gICAgICAgIGlmICh0aGlzLmxvY2FsU3RvcmFnZS5nZXRJdGVtKFVTRVJfSU1QRVJTT05BVEVEX1RPS0VOKSkge1xuICAgICAgICAgICAgdGhpcy5pc1VzZXJQZXJzb25hdGVkID0gdHJ1ZTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxTdG9yYWdlLmdldEl0ZW0oVVNFUl9JTVBFUlNPTkFURURfVE9LRU4pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmxvY2FsU3RvcmFnZS5nZXRJdGVtKFVTRVJfSU1QRVJTT05BVEVEX1BIT05FR0FQX1RPS0VOKSkge1xuICAgICAgICAgICAgdGhpcy5pc1VzZXJQZXJzb25hdGVkID0gdHJ1ZTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxTdG9yYWdlLmdldEl0ZW0oVVNFUl9JTVBFUlNPTkFURURfUEhPTkVHQVBfVE9LRU4pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pc1VzZXJQZXJzb25hdGVkID0gZmFsc2U7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxTdG9yYWdlLmdldEl0ZW0oVE9LRU5fS0VZKTtcbiAgICB9XG5cbiAgICBnZXRJbXBlcnNvbmF0ZWRUb2tlbigpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHRoaXMubG9jYWxTdG9yYWdlLmdldEl0ZW0oVVNFUl9JTVBFUlNPTkFURURfVE9LRU4pIHx8XG4gICAgICAgICAgICB0aGlzLmxvY2FsU3RvcmFnZS5nZXRJdGVtKFVTRVJfSU1QRVJTT05BVEVEX1BIT05FR0FQX1RPS0VOKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHNldEhlYWRlcktleSgpIHtcbiAgICAgICAgLy8gTW9iaWxlOiBhcHBcbiAgICAgICAgLy8gV2Vic2l0ZTogYnJvd3NlclxuICAgICAgICB0aGlzLmdldEhlYWRlcktleSgpLnN1YnNjcmliZSh7XG4gICAgICAgICAgICBuZXh0OiAoa2V5OiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGVhZGVyX2tleSA9ICdicm93c2VyJztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wbGF0Zm9ybVN1YmplY3QubmV4dCgnYnJvd3NlcicpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnYXBwJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhlYWRlcl9rZXkgPSBrZXk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGxhdGZvcm1TdWJqZWN0Lm5leHQoa2V5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmhlYWRlcl9rZXkgPSAnYnJvd3Nlcic7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHNpZ25VcFVzZXIodmFsdWVzOiBTaWduVXBWYWx1ZXMpIHtcbiAgICAgICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICAgICAgZm9ybURhdGEuYXBwZW5kKCdjb25maXJtYXRpb25fcGF0aCcsIHZhbHVlcy5jb25maXJtYXRpb25fcGF0aCk7XG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZCgnY29udGFjdF9uYW1lJywgdmFsdWVzLmNvbnRhY3RfbmFtZSk7XG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZCgnZW1haWwnLCB2YWx1ZXMuZW1haWwpO1xuICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ3VzZXJfc2lnbnVwX3VybCcsIHZhbHVlcy51c2VyX3NpZ251cF91cmwpO1xuICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ29yZ2FuaXNhdGlvbicsIHZhbHVlcy5vcmdhbmlzYXRpb24pO1xuICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ3Byb2R1Y3RfaWQnLCB2YWx1ZXMucHJvZHVjdF9pZC50b1N0cmluZygpKTtcbiAgICAgICAgZm9ybURhdGEuYXBwZW5kKCd1bml0cycsIHZhbHVlcy51bml0cy50b1N0cmluZygpKTtcbiAgICAgICAgZm9ybURhdGEuYXBwZW5kKCdzdHJpcGVfdG9rZW4nLCB2YWx1ZXMuc3RyaXBlX3Rva2VuKTtcbiAgICAgICAgZm9ybURhdGEuYXBwZW5kKCdtYXN0ZXJfc3Vic2NyaXB0aW9uX2lkJywgdmFsdWVzLm1hc3Rlcl9zdWJzY3JpcHRpb25faWQudG9TdHJpbmcoKSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KCdzaWdudXBzJywgZm9ybURhdGEpO1xuICAgIH1cblxuICAgIHRyaWFsU2lnblVwKGRhdGE6IG9iamVjdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoJ3NpZ251cHMvdHJpYWxfc2lnbnVwJywgZGF0YSk7XG4gICAgfVxuXG4gICAgdmFsaWRhdGVFbWFpbChlbWFpbDogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgICAgIGVtYWlsXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXRXaXRoUGFyYW1zKCd1c2Vycy92YWxpZGF0ZV9lbWFpbCcsIHBhcmFtcyk7XG4gICAgfVxuXG4gICAgZm9yZ290UGFzc3dvcmQoZW1haWw6IHN0cmluZywgcmVzZXRfcGF0aDogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgICAgIGVtYWlsLFxuICAgICAgICAgICAgcmVzZXRfcGF0aFxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0V2l0aFBhcmFtcygncGFzc3dvcmQnLCBwYXJhbXMpO1xuICAgIH1cblxuICAgIHJlc2V0UGFzc3dvcmQocGFzc3dvcmQ6IHN0cmluZywgY29uZmlybV9wYXNzd29yZDogc3RyaW5nLCBwYXNzd29yZF9yZXNldF90b2tlbjogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZCgncGFzc3dvcmQnLCBwYXNzd29yZCk7XG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZCgncGFzc3dvcmRfY29uZmlybWF0aW9uJywgY29uZmlybV9wYXNzd29yZCk7XG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZCgncmVzZXRfcGFzc3dvcmRfdG9rZW4nLCBwYXNzd29yZF9yZXNldF90b2tlbik7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoJ3Bhc3N3b3JkJywgZm9ybURhdGEpO1xuICAgIH1cblxuICAgIGhlYWRlcigpIHtcbiAgICAgICAgaWYgKHRoaXMuaGVhZGVyX2tleSA9PT0gJ2Jyb3dzZXInKSB7XG4gICAgICAgICAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICAgICAgICAgICBbVE9LRU5fSEVBREVSX0tFWV06IGJ0b2EodGhpcy5hdXRoX3Rva2VuKVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiBoZWFkZXJzO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgICAgICAgJ1gtUGhvbmVnYXAtVG9rZW4nOiBidG9hKHRoaXMuYXV0aF90b2tlbilcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGhlYWRlcnM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRIZWFkZXJLZXkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsU3RvcmFnZS5nZXRJdGVtJCgncGxhdGZvcm0nKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFBsYXRmb3JtKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbSQoJ3BsYXRmb3JtJyk7XG4gICAgfVxuXG4gICAgc2lnbkluVXNlcihlbWFpbDogc3RyaW5nLCBwYXNzd29yZDogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZCgnZW1haWwnLCBlbWFpbCk7XG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZCgncGFzc3dvcmQnLCBwYXNzd29yZCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KCdzZXNzaW9uJywgZm9ybURhdGEpO1xuICAgIH1cblxuICAgIHNpZ25JblVzZXJXaXRoMkZhKGVtYWlsOiBzdHJpbmcsIHBhc3N3b3JkOiBzdHJpbmcsIGdvb2dsZV9jb2RlKSB7XG4gICAgICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZCgnZW1haWwnLCBlbWFpbCk7XG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZCgncGFzc3dvcmQnLCBwYXNzd29yZCk7XG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZCgnZ29vZ2xlX2NvZGUnLCBnb29nbGVfY29kZSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KCdzZXNzaW9uJywgZm9ybURhdGEpO1xuICAgIH1cblxuICAgIHN0b3JlVG9rZW4odG9rZW46IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbSQoVE9LRU5fS0VZLCB0b2tlbik7XG4gICAgfVxuXG4gICAgc3RvcmVQbGF0Zm9ybShwbGF0OiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxTdG9yYWdlLnNldEl0ZW0kKCdwbGF0Zm9ybScsIHBsYXQpO1xuICAgIH1cblxuICAgIGxvZ291dCgpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGhlYWRlcnM6IHRoaXMuaGVhZGVyKClcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAodGhpcy5oZWFkZXJfa2V5ICE9PSAnYnJvd3NlcicpIHtcbiAgICAgICAgICAgIG9wdGlvbnNbJ3BhcmFtcyddID0ge1xuICAgICAgICAgICAgICAgIHBob25lZ2FwOiB0cnVlXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5kZWxldGUoJ3Nlc3Npb24nLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBnZXRUb2tlbiQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsU3RvcmFnZS5nZXRJdGVtJChUT0tFTl9LRVkpO1xuICAgIH1cblxuICAgIGdldE5ld3NsZXR0ZXJTdWJzY3JpcHRpb24odG9rZW46IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldChgJHtORVdTTEVUVEVSX0NPTkZJUk1BVElPTl9QQVRIfT90b2tlbj0ke3Rva2VufWApO1xuICAgIH1cblxuICAgIHVuc3Vic2NyaWJlTmV3c2xldHRlcih0b2tlbjogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGAke05FV1NMRVRURVJfVU5TVUJTQ1JJQkVfUEFUSH0/dG9rZW49JHt0b2tlbn1gKTtcbiAgICB9XG5cbiAgICB2YWxpZGF0ZVJlQ2FwdGNoYSh0b2tlbjogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGAke0NBUFRDSEFfVkFMSURBVElPTl9QQVRIfT0ke3Rva2VufWApO1xuICAgIH1cblxuICAgIHNvY2lhbExvZ2luKGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KFNPQ0lBTF9MT0dJTl9QQVRILCBkYXRhKTtcbiAgICB9XG5cbiAgICB0d2l0dGVyTG9naW4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGAke3RoaXMudHdpdHRlckVuZHBvaW50fS9nZXRfYXV0aG9yaXplX3VybGApO1xuICAgIH1cblxuICAgIHR3aXR0ZXJBdXRoQ2FsbGJhY2soZGF0YSkge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy50d2l0dGVyRW5kcG9pbnR9L2F1dGhvcml6YXRpb25fY2FsbGJhY2tgLCBkYXRhKTtcbiAgICB9XG5cbiAgICBtaWNyb3NvZnRMb2dpbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoYG1pY3Jvc29mdC9nZXRfYXV0aG9yaXplX3VybGApO1xuICAgIH1cblxuICAgIGNvZ25pdG9Mb2dpbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoYGNvZ25pdG8vZ2V0X2F1dGhvcml6ZV91cmxgKTtcbiAgICB9XG5cbiAgICBtaWNyb3NvZnRBdXRoQ2FsbGJhY2soZGF0YSkge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYG1pY3Jvc29mdC9hdXRob3JpemF0aW9uX2NhbGxiYWNrYCwgZGF0YSk7XG4gICAgfVxuXG4gICAgZ29vZ2xlTG9naW4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGBnb29nbGUvZ2V0X2F1dGhvcml6ZV91cmxgKTtcbiAgICB9XG5cbiAgICBnb29nbGVBdXRoQ2FsbGJhY2soZGF0YSkge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYGdvb2dsZS9hdXRob3JpemF0aW9uX2NhbGxiYWNrYCwgZGF0YSk7XG4gICAgfVxuXG4gICAgZmFjZWJvb2tMb2dpbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoYGZhY2Vib29rL2dldF9hdXRob3JpemVfdXJsYCk7XG4gICAgfVxuXG4gICAgZmFjZWJvb2tBdXRoQ2FsbGJhY2soZGF0YSkge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYGZhY2Vib29rL2F1dGhvcml6YXRpb25fY2FsbGJhY2tgLCBkYXRhKTtcbiAgICB9XG5cbiAgICBhcHBsZUxvZ2luKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldChgYXBwbGUvZ2V0X2F1dGhvcml6ZV91cmxgKTtcbiAgICB9XG5cbiAgICBhcHBsZUF1dGhDYWxsYmFjayhkYXRhKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChgYXBwbGUvYXV0aG9yaXphdGlvbl9jYWxsYmFja2AsIGRhdGEpO1xuICAgIH1cblxuICAgIGNvZ25pdG9BdXRoQ2FsbGJhY2soZGF0YSkge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYGNvZ25pdG8vYXV0aG9yaXphdGlvbl9jYWxsYmFja2AsIGRhdGEpO1xuICAgIH1cblxuICAgIGxpbmtlZGluTG9naW4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFwcENvbmZpZ1NlcnZpY2UuYXBwQ29uZmlnJC5waXBlKFxuICAgICAgICAgICAgc3dpdGNoTWFwKGNvbmZpZyA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXG4gICAgICAgICAgICAgICAgICAgIGAvbGlua2VkaW4vZ2V0X2F1dGhvcml6ZV91cmw/cmVkaXJlY3RfdXJsPSR7Y29uZmlnWydsaW5rcyddLmZyb250ZW5kX2xpbmt9L2xpbmtlZGluLWNvbmZpcm1hdGlvbmBcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBsaW5rZWRJbkF1dGhDYWxsYmFjayhkYXRhKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdCgnbGlua2VkaW4vYXV0aG9yaXphdGlvbl9jYWxsYmFjaycsIGRhdGEpO1xuICAgIH1cblxuICAgIHBvc3RMb2dpbihyZXNwb25zZSkge1xuICAgICAgICB0aGlzLmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtJCgncHJvZHVjdF9pZCcpLnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLnNldEhlYWRlcktleSgpO1xuICAgICAgICAvLyB0aGlzLnNldFBsYXRmb3JtKCk7IGNhbGwgaXQgZnJvbSBjbG91ZG9saXZlIHJlcG8uXG5cbiAgICAgICAgLy8gU2F2ZXMgdGhlIHRva2VuIGludG8gdGhlIGxvY2FsU3RvcmFnZSBhbmQgZmV0Y2hlcyB0aGUgdXNlciBpbmZvcm1hdGlvblxuICAgICAgICBjb25zdCBzZXF1ZW5jZSQgPSB0aGlzLnN0b3JlVG9rZW4ocmVzcG9uc2VbVE9LRU5fS0VZXSkucGlwZShcbiAgICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudXNlclNlcnZpY2UuZ2V0VXNlckluZm8oKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgc2VxdWVuY2UkLnN1YnNjcmliZShyZXNwID0+IHtcbiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCduYW1lJywgcmVzcC5maXJzdF9uYW1lKTtcbiAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnaG9tZSddKTtcbiAgICAgICAgICAgIGlmICgkKCcuY2MtZGlzbWlzcycpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAkKCcuY2MtZGlzbWlzcycpWzBdLmNsaWNrKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpbXBlcnNvbmF0ZVVzZXIoZGF0YTogeyBlbWFpbDogc3RyaW5nOyBzdWJzY3JpcHRpb25faWQ6IG51bWJlcjsgcGhvbmVnYXA/OiBib29sZWFuIH0pIHtcbiAgICAgICAgaWYgKCFkYXRhLnBob25lZ2FwKSB7XG4gICAgICAgICAgICBkZWxldGUgZGF0YS5waG9uZWdhcDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdCgnL3Nlc3Npb24vaW1wZXJzb25hdGVfdXNlcicsIGRhdGEpLnBpcGUoXG4gICAgICAgICAgICBtYXAoeCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHg/LmF1dGhfdG9rZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbSQoVVNFUl9JTVBFUlNPTkFURURfVE9LRU4sIHguYXV0aF90b2tlbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh4Py5waG9uZWdhcF90b2tlbikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvY2FsU3RvcmFnZS5zZXRJdGVtJChVU0VSX0lNUEVSU09OQVRFRF9QSE9ORUdBUF9UT0tFTiwgeC5waG9uZWdhcF90b2tlbik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHg7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHBvc3RTb2NpYWxMb2dpbihyZXNwb25zZSkge1xuICAgICAgICBjb25zdCBhbHJlYWR5U2lnbmVkID0gISFyZXNwb25zZVtUT0tFTl9LRVldO1xuICAgICAgICBjb25zdCBpc05ld1NpZ25VcCA9ICEhcmVzcG9uc2Uuc3Vic2NyaXB0aW9uO1xuXG4gICAgICAgIGlmIChpc05ld1NpZ25VcCkge1xuICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWydjb25maXJtYXRpb24nXSwge1xuICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zOiB7XG4gICAgICAgICAgICAgICAgICAgIHJlZjogcmVzcG9uc2UucmVmZXJlbmNlX251bWJlcixcbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaXB0aW9uOiByZXNwb25zZS5zdWJzY3JpcHRpb24sXG4gICAgICAgICAgICAgICAgICAgIHVzZXJzOiByZXNwb25zZS51c2Vyc1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKGFscmVhZHlTaWduZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc3RvcmVUb2tlbihyZXNwb25zZVtUT0tFTl9LRVldKS5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWydob21lJ10pO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b2FzdHIuc2hvd1RvYXN0KGVycm9yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN3YWwuZmlyZSh7XG4gICAgICAgICAgICAgICAgdG9hc3Q6IHRydWUsXG4gICAgICAgICAgICAgICAgcG9zaXRpb246ICdib3R0b20nLFxuICAgICAgICAgICAgICAgIGh0bWw6IGA8c3Ryb25nIGNsYXNzPVwidGV4dC1kYW5nZXJcIj4gJHtyZXNwb25zZS5lcnJvci5tZXNzYWdlfTwvc3Ryb25nPmAsXG4gICAgICAgICAgICAgICAgc2hvd0NhbmNlbEJ1dHRvbjogdHJ1ZSxcbiAgICAgICAgICAgICAgICByZXZlcnNlQnV0dG9uczogdHJ1ZSxcbiAgICAgICAgICAgICAgICBpY29uOiAnZXJyb3InXG4gICAgICAgICAgICB9KS50aGVuKHJlcCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHJlcC52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJ3JlZ2lzdGVyJ10pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVnaXN0ZXJUb2tlbkxpc3RlbmVyKCkge1xuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignc3RvcmFnZScsIGRhdGEgPT4ge1xuICAgICAgICAgICAgLy8gbG9ncyBvdXQgdGhlIG90aGVyIHRhYnMgd2hlbiB0aGUgdG9rZW4gaXMgY2hhbmdlZC5cbiAgICAgICAgICAgIC8vIHdlIGFzc3VtZSB0aGF0IHRva2VuIGRvZXNuJ3QgcmVmcmVzaCBhbmQgYmFja2VuZCB1cGRhdGVzIHRoZSBleHBpcnkgdGltZVxuICAgICAgICAgICAgaWYgKGRhdGE/LmtleSA9PT0gVE9LRU5fS0VZICYmIGRhdGE/Lm9sZFZhbHVlICE9PSBkYXRhPy5uZXdWYWx1ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZG9jdW1lbnQubG9jYXRpb24ucmVsb2FkKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==
|
|
316
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24tc2VydmljZXMvc3JjL2xpYi9hdXRoLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFekMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDaEUsT0FBTyxFQUNILHVCQUF1QixFQUN2Qiw0QkFBNEIsRUFDNUIsMkJBQTJCLEVBQzNCLGlCQUFpQixFQUNqQixnQkFBZ0IsRUFDaEIsU0FBUyxFQUNaLE1BQU0sNEJBQTRCLENBQUM7QUFFcEMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2QyxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hELE9BQU8sSUFBSSxNQUFNLGFBQWEsQ0FBQztBQUcvQixPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDN0QsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDckQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7O0FBRzdDLE1BQU0sT0FBTyxX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UyxJQUFJLElBQUksRUFBRSxRQUFRLEtBQUssSUFBSSxFQUFFLFFBQVEsRUFBRSxDQUFDO2dCQUMvRCxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNwQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDOytHQWpXUSxXQUFXLHNSQXFCUixRQUFRO21IQXJCWCxXQUFXOzs0RkFBWCxXQUFXO2tCQUR2QixVQUFVOzswQkFzQkYsTUFBTTsyQkFBQyxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgSHR0cEhlYWRlcnMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbmltcG9ydCB7IEFwcENvbmZpZ1NlcnZpY2UgfSBmcm9tICdAcG9zaXdpc2UvYXBwLWNvbmZpZy1zZXJ2aWNlJztcbmltcG9ydCB7XG4gICAgQ0FQVENIQV9WQUxJREFUSU9OX1BBVEgsXG4gICAgTkVXU0xFVFRFUl9DT05GSVJNQVRJT05fUEFUSCxcbiAgICBORVdTTEVUVEVSX1VOU1VCU0NSSUJFX1BBVEgsXG4gICAgU09DSUFMX0xPR0lOX1BBVEgsXG4gICAgVE9LRU5fSEVBREVSX0tFWSxcbiAgICBUT0tFTl9LRVlcbn0gZnJvbSAnQHBvc2l3aXNlL2NvbW1vbi11dGlsaXRpZXMnO1xuXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHN3YWwgZnJvbSAnc3dlZXRhbGVydDInO1xuXG5pbXBvcnQgeyBTaWduVXBWYWx1ZXMgfSBmcm9tICcuL2NvbW1vbi1zZXJ2aWNlcy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSW50ZWdyYXRpb25zQXBpSHR0cFNlcnZpY2UgfSBmcm9tICcuL2ludGVncmF0aW9ucy1hcGktaHR0cC5zZXJ2aWNlJztcbmltcG9ydCB7IExvY2FsU3RvcmFnZSB9IGZyb20gJy4vbG9jYWwtc3RvcmFnZS5zZXJ2aWNlJztcbmltcG9ydCB7IE1haW5BcGlIdHRwU2VydmljZSB9IGZyb20gJy4vbWFpbi1hcGktaHR0cC5zZXJ2aWNlJztcbmltcG9ydCB7IFNlY3VyZVRva2VuU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuL3NlY3VyZS10b2tlbi1zdG9yYWdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ3VzdG9tVG9hc3RTZXJ2aWNlIH0gZnJvbSAnLi90b2FzdC5zZXJ2aWNlJztcbmltcG9ydCB7IFVzZXJTZXJ2aWNlIH0gZnJvbSAnLi91c2VyLnNlcnZpY2UnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQXV0aFNlcnZpY2Uge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcGxhdGZvcm1TdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KCcnKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHR3aXR0ZXJFbmRwb2ludCA9ICcvdHdpdHRlcic7XG5cbiAgICBhdXRoX3Rva2VuOiBzdHJpbmc7XG4gICAgaGVhZGVyX2tleSA9ICdicm93c2VyJztcbiAgICBwbGF0Zm9ybSA9ICcnO1xuXG4gICAgcGxhdGZvcm0kID0gdGhpcy5wbGF0Zm9ybVN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG5cbiAgICBpc1VzZXJQZXJzb25hdGVkOiBib29sZWFuO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgbG9jYWxTdG9yYWdlOiBMb2NhbFN0b3JhZ2UsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgc2VjdXJlVG9rZW5TdG9yYWdlOiBTZWN1cmVUb2tlblN0b3JhZ2VTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlcjogUm91dGVyLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGh0dHA6IE1haW5BcGlIdHRwU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSB1c2VyU2VydmljZTogVXNlclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgdG9hc3RyOiBDdXN0b21Ub2FzdFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgYXBwQ29uZmlnU2VydmljZTogQXBwQ29uZmlnU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBpbnRlZ3JhdGlvbnNBcGk6IEludGVncmF0aW9uc0FwaUh0dHBTZXJ2aWNlLFxuICAgICAgICBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIHJlYWRvbmx5IGRvY3VtZW50OiBEb2N1bWVudFxuICAgICkge1xuICAgICAgICAvLyBTZXQgSGVhZGVyIEtleVxuICAgICAgICB0aGlzLnNldEhlYWRlcktleSgpO1xuICAgIH1cblxuICAgIGdldFRva2VuKCkge1xuICAgICAgICBpZiAodGhpcy5zZWN1cmVUb2tlblN0b3JhZ2UuZ2V0SW1wZXJzb25hdGVkVG9rZW4oKSkge1xuICAgICAgICAgICAgdGhpcy5pc1VzZXJQZXJzb25hdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNlY3VyZVRva2VuU3RvcmFnZS5nZXRJbXBlcnNvbmF0ZWRUb2tlbigpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnNlY3VyZVRva2VuU3RvcmFnZS5nZXRQaG9uZWdhcFRva2VuKCkpIHtcbiAgICAgICAgICAgIHRoaXMuaXNVc2VyUGVyc29uYXRlZCA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZWN1cmVUb2tlblN0b3JhZ2UuZ2V0UGhvbmVnYXBUb2tlbigpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pc1VzZXJQZXJzb25hdGVkID0gZmFsc2U7XG4gICAgICAgIHJldHVybiB0aGlzLnNlY3VyZVRva2VuU3RvcmFnZS5nZXRUb2tlbigpO1xuICAgIH1cblxuICAgIGdldEltcGVyc29uYXRlZFRva2VuKCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdGhpcy5zZWN1cmVUb2tlblN0b3JhZ2UuZ2V0SW1wZXJzb25hdGVkVG9rZW4oKSB8fFxuICAgICAgICAgICAgdGhpcy5zZWN1cmVUb2tlblN0b3JhZ2UuZ2V0UGhvbmVnYXBUb2tlbigpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgc2V0SGVhZGVyS2V5KCkge1xuICAgICAgICAvLyBNb2JpbGU6IGFwcFxuICAgICAgICAvLyBXZWJzaXRlOiBicm93c2VyXG4gICAgICAgIHRoaXMuZ2V0SGVhZGVyS2V5KCkuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgIG5leHQ6IChrZXk6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChrZXkgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oZWFkZXJfa2V5ID0gJ2Jyb3dzZXInO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBsYXRmb3JtU3ViamVjdC5uZXh0KCdicm93c2VyJyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICdhcHAnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGVhZGVyX2tleSA9IGtleTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wbGF0Zm9ybVN1YmplY3QubmV4dChrZXkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuaGVhZGVyX2tleSA9ICdicm93c2VyJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc2lnblVwVXNlcih2YWx1ZXM6IFNpZ25VcFZhbHVlcykge1xuICAgICAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ2NvbmZpcm1hdGlvbl9wYXRoJywgdmFsdWVzLmNvbmZpcm1hdGlvbl9wYXRoKTtcbiAgICAgICAgZm9ybURhdGEuYXBwZW5kKCdjb250YWN0X25hbWUnLCB2YWx1ZXMuY29udGFjdF9uYW1lKTtcbiAgICAgICAgZm9ybURhdGEuYXBwZW5kKCdlbWFpbCcsIHZhbHVlcy5lbWFpbCk7XG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZCgndXNlcl9zaWdudXBfdXJsJywgdmFsdWVzLnVzZXJfc2lnbnVwX3VybCk7XG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZCgnb3JnYW5pc2F0aW9uJywgdmFsdWVzLm9yZ2FuaXNhdGlvbik7XG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZCgncHJvZHVjdF9pZCcsIHZhbHVlcy5wcm9kdWN0X2lkLnRvU3RyaW5nKCkpO1xuICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ3VuaXRzJywgdmFsdWVzLnVuaXRzLnRvU3RyaW5nKCkpO1xuICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ3N0cmlwZV90b2tlbicsIHZhbHVlcy5zdHJpcGVfdG9rZW4pO1xuICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ21hc3Rlcl9zdWJzY3JpcHRpb25faWQnLCB2YWx1ZXMubWFzdGVyX3N1YnNjcmlwdGlvbl9pZC50b1N0cmluZygpKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoJ3NpZ251cHMnLCBmb3JtRGF0YSk7XG4gICAgfVxuXG4gICAgdHJpYWxTaWduVXAoZGF0YTogb2JqZWN0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdCgnc2lnbnVwcy90cmlhbF9zaWdudXAnLCBkYXRhKTtcbiAgICB9XG5cbiAgICB2YWxpZGF0ZUVtYWlsKGVtYWlsOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICAgICAgZW1haWxcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldFdpdGhQYXJhbXMoJ3VzZXJzL3ZhbGlkYXRlX2VtYWlsJywgcGFyYW1zKTtcbiAgICB9XG5cbiAgICBmb3Jnb3RQYXNzd29yZChlbWFpbDogc3RyaW5nLCByZXNldF9wYXRoOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICAgICAgZW1haWwsXG4gICAgICAgICAgICByZXNldF9wYXRoXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXRXaXRoUGFyYW1zKCdwYXNzd29yZCcsIHBhcmFtcyk7XG4gICAgfVxuXG4gICAgcmVzZXRQYXNzd29yZChwYXNzd29yZDogc3RyaW5nLCBjb25maXJtX3Bhc3N3b3JkOiBzdHJpbmcsIHBhc3N3b3JkX3Jlc2V0X3Rva2VuOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICAgICAgZm9ybURhdGEuYXBwZW5kKCdwYXNzd29yZCcsIHBhc3N3b3JkKTtcbiAgICAgICAgZm9ybURhdGEuYXBwZW5kKCdwYXNzd29yZF9jb25maXJtYXRpb24nLCBjb25maXJtX3Bhc3N3b3JkKTtcbiAgICAgICAgZm9ybURhdGEuYXBwZW5kKCdyZXNldF9wYXNzd29yZF90b2tlbicsIHBhc3N3b3JkX3Jlc2V0X3Rva2VuKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnB1dCgncGFzc3dvcmQnLCBmb3JtRGF0YSk7XG4gICAgfVxuXG4gICAgaGVhZGVyKCkge1xuICAgICAgICBpZiAodGhpcy5oZWFkZXJfa2V5ID09PSAnYnJvd3NlcicpIHtcbiAgICAgICAgICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgICAgICAgICAgIFtUT0tFTl9IRUFERVJfS0VZXTogYnRvYSh0aGlzLmF1dGhfdG9rZW4pXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIGhlYWRlcnM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAgICAgICAnWC1QaG9uZWdhcC1Ub2tlbic6IGJ0b2EodGhpcy5hdXRoX3Rva2VuKVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gaGVhZGVycztcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEhlYWRlcktleSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxTdG9yYWdlLmdldEl0ZW0kKCdwbGF0Zm9ybScpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0UGxhdGZvcm0oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsU3RvcmFnZS5nZXRJdGVtJCgncGxhdGZvcm0nKTtcbiAgICB9XG5cbiAgICBzaWduSW5Vc2VyKGVtYWlsOiBzdHJpbmcsIHBhc3N3b3JkOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICAgICAgZm9ybURhdGEuYXBwZW5kKCdlbWFpbCcsIGVtYWlsKTtcbiAgICAgICAgZm9ybURhdGEuYXBwZW5kKCdwYXNzd29yZCcsIHBhc3N3b3JkKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoJ3Nlc3Npb24nLCBmb3JtRGF0YSk7XG4gICAgfVxuXG4gICAgc2lnbkluVXNlcldpdGgyRmEoZW1haWw6IHN0cmluZywgcGFzc3dvcmQ6IHN0cmluZywgZ29vZ2xlX2NvZGUpIHtcbiAgICAgICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICAgICAgZm9ybURhdGEuYXBwZW5kKCdlbWFpbCcsIGVtYWlsKTtcbiAgICAgICAgZm9ybURhdGEuYXBwZW5kKCdwYXNzd29yZCcsIHBhc3N3b3JkKTtcbiAgICAgICAgZm9ybURhdGEuYXBwZW5kKCdnb29nbGVfY29kZScsIGdvb2dsZV9jb2RlKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoJ3Nlc3Npb24nLCBmb3JtRGF0YSk7XG4gICAgfVxuXG4gICAgc3RvcmVUb2tlbih0b2tlbjogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlY3VyZVRva2VuU3RvcmFnZS5zdG9yZVRva2VuKHRva2VuKTtcbiAgICB9XG5cbiAgICBzdG9yZVBsYXRmb3JtKHBsYXQ6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbSQoJ3BsYXRmb3JtJywgcGxhdCk7XG4gICAgfVxuXG4gICAgbG9nb3V0KCkge1xuICAgICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICAgICAgaGVhZGVyczogdGhpcy5oZWFkZXIoKVxuICAgICAgICB9O1xuXG4gICAgICAgIGlmICh0aGlzLmhlYWRlcl9rZXkgIT09ICdicm93c2VyJykge1xuICAgICAgICAgICAgb3B0aW9uc1sncGFyYW1zJ10gPSB7XG4gICAgICAgICAgICAgICAgcGhvbmVnYXA6IHRydWVcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDbGVhciBhbGwgdG9rZW5zIHNlY3VyZWx5XG4gICAgICAgIHRoaXMuc2VjdXJlVG9rZW5TdG9yYWdlLmNsZWFyVG9rZW5zKCkuc3Vic2NyaWJlKCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5kZWxldGUoJ3Nlc3Npb24nLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDbGVhciBhbGwgYXV0aGVudGljYXRpb24gdG9rZW5zXG4gICAgICovXG4gICAgY2xlYXJUb2tlbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlY3VyZVRva2VuU3RvcmFnZS5jbGVhclRva2VucygpO1xuICAgIH1cblxuICAgIGdldFRva2VuJCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VjdXJlVG9rZW5TdG9yYWdlLmdldFRva2VuJCgpO1xuICAgIH1cblxuICAgIGdldE5ld3NsZXR0ZXJTdWJzY3JpcHRpb24odG9rZW46IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldChgJHtORVdTTEVUVEVSX0NPTkZJUk1BVElPTl9QQVRIfT90b2tlbj0ke3Rva2VufWApO1xuICAgIH1cblxuICAgIHVuc3Vic2NyaWJlTmV3c2xldHRlcih0b2tlbjogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGAke05FV1NMRVRURVJfVU5TVUJTQ1JJQkVfUEFUSH0/dG9rZW49JHt0b2tlbn1gKTtcbiAgICB9XG5cbiAgICB2YWxpZGF0ZVJlQ2FwdGNoYSh0b2tlbjogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGAke0NBUFRDSEFfVkFMSURBVElPTl9QQVRIfT0ke3Rva2VufWApO1xuICAgIH1cblxuICAgIHNvY2lhbExvZ2luKGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KFNPQ0lBTF9MT0dJTl9QQVRILCBkYXRhKTtcbiAgICB9XG5cbiAgICB0d2l0dGVyTG9naW4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGAke3RoaXMudHdpdHRlckVuZHBvaW50fS9nZXRfYXV0aG9yaXplX3VybGApO1xuICAgIH1cblxuICAgIHR3aXR0ZXJBdXRoQ2FsbGJhY2soZGF0YSkge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy50d2l0dGVyRW5kcG9pbnR9L2F1dGhvcml6YXRpb25fY2FsbGJhY2tgLCBkYXRhKTtcbiAgICB9XG5cbiAgICBtaWNyb3NvZnRMb2dpbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoYG1pY3Jvc29mdC9nZXRfYXV0aG9yaXplX3VybGApO1xuICAgIH1cblxuICAgIGNvZ25pdG9Mb2dpbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoYGNvZ25pdG8vZ2V0X2F1dGhvcml6ZV91cmxgKTtcbiAgICB9XG5cbiAgICBtaWNyb3NvZnRBdXRoQ2FsbGJhY2soZGF0YSkge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYG1pY3Jvc29mdC9hdXRob3JpemF0aW9uX2NhbGxiYWNrYCwgZGF0YSk7XG4gICAgfVxuXG4gICAgZ29vZ2xlTG9naW4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGBnb29nbGUvZ2V0X2F1dGhvcml6ZV91cmxgKTtcbiAgICB9XG5cbiAgICBnb29nbGVBdXRoQ2FsbGJhY2soZGF0YSkge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYGdvb2dsZS9hdXRob3JpemF0aW9uX2NhbGxiYWNrYCwgZGF0YSk7XG4gICAgfVxuXG4gICAgZmFjZWJvb2tMb2dpbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoYGZhY2Vib29rL2dldF9hdXRob3JpemVfdXJsYCk7XG4gICAgfVxuXG4gICAgZmFjZWJvb2tBdXRoQ2FsbGJhY2soZGF0YSkge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYGZhY2Vib29rL2F1dGhvcml6YXRpb25fY2FsbGJhY2tgLCBkYXRhKTtcbiAgICB9XG5cbiAgICBhcHBsZUxvZ2luKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldChgYXBwbGUvZ2V0X2F1dGhvcml6ZV91cmxgKTtcbiAgICB9XG5cbiAgICBhcHBsZUF1dGhDYWxsYmFjayhkYXRhKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChgYXBwbGUvYXV0aG9yaXphdGlvbl9jYWxsYmFja2AsIGRhdGEpO1xuICAgIH1cblxuICAgIGNvZ25pdG9BdXRoQ2FsbGJhY2soZGF0YSkge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYGNvZ25pdG8vYXV0aG9yaXphdGlvbl9jYWxsYmFja2AsIGRhdGEpO1xuICAgIH1cblxuICAgIGxpbmtlZGluTG9naW4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFwcENvbmZpZ1NlcnZpY2UuYXBwQ29uZmlnJC5waXBlKFxuICAgICAgICAgICAgc3dpdGNoTWFwKGNvbmZpZyA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXG4gICAgICAgICAgICAgICAgICAgIGAvbGlua2VkaW4vZ2V0X2F1dGhvcml6ZV91cmw/cmVkaXJlY3RfdXJsPSR7Y29uZmlnWydsaW5rcyddLmZyb250ZW5kX2xpbmt9L2xpbmtlZGluLWNvbmZpcm1hdGlvbmBcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBsaW5rZWRJbkF1dGhDYWxsYmFjayhkYXRhKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdCgnbGlua2VkaW4vYXV0aG9yaXphdGlvbl9jYWxsYmFjaycsIGRhdGEpO1xuICAgIH1cblxuICAgIHBvc3RMb2dpbihyZXNwb25zZSkge1xuICAgICAgICB0aGlzLmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtJCgncHJvZHVjdF9pZCcpLnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLnNldEhlYWRlcktleSgpO1xuICAgICAgICAvLyB0aGlzLnNldFBsYXRmb3JtKCk7IGNhbGwgaXQgZnJvbSBjbG91ZG9saXZlIHJlcG8uXG5cbiAgICAgICAgLy8gU2F2ZXMgdGhlIHRva2VuIGludG8gdGhlIGxvY2FsU3RvcmFnZSBhbmQgZmV0Y2hlcyB0aGUgdXNlciBpbmZvcm1hdGlvblxuICAgICAgICBjb25zdCBzZXF1ZW5jZSQgPSB0aGlzLnN0b3JlVG9rZW4ocmVzcG9uc2VbVE9LRU5fS0VZXSkucGlwZShcbiAgICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudXNlclNlcnZpY2UuZ2V0VXNlckluZm8oKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgc2VxdWVuY2UkLnN1YnNjcmliZShyZXNwID0+IHtcbiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCduYW1lJywgcmVzcC5maXJzdF9uYW1lKTtcbiAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnaG9tZSddKTtcbiAgICAgICAgICAgIGlmICgkKCcuY2MtZGlzbWlzcycpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAkKCcuY2MtZGlzbWlzcycpWzBdLmNsaWNrKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpbXBlcnNvbmF0ZVVzZXIoZGF0YTogeyBlbWFpbDogc3RyaW5nOyBzdWJzY3JpcHRpb25faWQ6IG51bWJlcjsgcGhvbmVnYXA/OiBib29sZWFuIH0pIHtcbiAgICAgICAgaWYgKCFkYXRhLnBob25lZ2FwKSB7XG4gICAgICAgICAgICBkZWxldGUgZGF0YS5waG9uZWdhcDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdCgnL3Nlc3Npb24vaW1wZXJzb25hdGVfdXNlcicsIGRhdGEpLnBpcGUoXG4gICAgICAgICAgICBtYXAoeCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHg/LmF1dGhfdG9rZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWN1cmVUb2tlblN0b3JhZ2Uuc3RvcmVJbXBlcnNvbmF0ZWRUb2tlbih4LmF1dGhfdG9rZW4pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoeD8ucGhvbmVnYXBfdG9rZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWN1cmVUb2tlblN0b3JhZ2Uuc3RvcmVQaG9uZWdhcFRva2VuKHgucGhvbmVnYXBfdG9rZW4pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiB4O1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwb3N0U29jaWFsTG9naW4ocmVzcG9uc2UpIHtcbiAgICAgICAgY29uc3QgYWxyZWFkeVNpZ25lZCA9ICEhcmVzcG9uc2VbVE9LRU5fS0VZXTtcbiAgICAgICAgY29uc3QgaXNOZXdTaWduVXAgPSAhIXJlc3BvbnNlLnN1YnNjcmlwdGlvbjtcblxuICAgICAgICBpZiAoaXNOZXdTaWduVXApIHtcbiAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnY29uZmlybWF0aW9uJ10sIHtcbiAgICAgICAgICAgICAgICBxdWVyeVBhcmFtczoge1xuICAgICAgICAgICAgICAgICAgICByZWY6IHJlc3BvbnNlLnJlZmVyZW5jZV9udW1iZXIsXG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmlwdGlvbjogcmVzcG9uc2Uuc3Vic2NyaXB0aW9uLFxuICAgICAgICAgICAgICAgICAgICB1c2VyczogcmVzcG9uc2UudXNlcnNcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChhbHJlYWR5U2lnbmVkKSB7XG4gICAgICAgICAgICB0aGlzLnN0b3JlVG9rZW4ocmVzcG9uc2VbVE9LRU5fS0VZXSkuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnaG9tZSddKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGVycm9yOiBlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9hc3RyLnNob3dUb2FzdChlcnJvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzd2FsLmZpcmUoe1xuICAgICAgICAgICAgICAgIHRvYXN0OiB0cnVlLFxuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiAnYm90dG9tJyxcbiAgICAgICAgICAgICAgICBodG1sOiBgPHN0cm9uZyBjbGFzcz1cInRleHQtZGFuZ2VyXCI+ICR7cmVzcG9uc2UuZXJyb3IubWVzc2FnZX08L3N0cm9uZz5gLFxuICAgICAgICAgICAgICAgIHNob3dDYW5jZWxCdXR0b246IHRydWUsXG4gICAgICAgICAgICAgICAgcmV2ZXJzZUJ1dHRvbnM6IHRydWUsXG4gICAgICAgICAgICAgICAgaWNvbjogJ2Vycm9yJ1xuICAgICAgICAgICAgfSkudGhlbihyZXAgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChyZXAudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWydyZWdpc3RlciddKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlZ2lzdGVyVG9rZW5MaXN0ZW5lcigpIHtcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3N0b3JhZ2UnLCBkYXRhID0+IHtcbiAgICAgICAgICAgIC8vIGxvZ3Mgb3V0IHRoZSBvdGhlciB0YWJzIHdoZW4gdGhlIHRva2VuIGlzIGNoYW5nZWQuXG4gICAgICAgICAgICAvLyB3ZSBhc3N1bWUgdGhhdCB0b2tlbiBkb2Vzbid0IHJlZnJlc2ggYW5kIGJhY2tlbmQgdXBkYXRlcyB0aGUgZXhwaXJ5IHRpbWVcbiAgICAgICAgICAgIGlmIChkYXRhPy5rZXkgPT09IFRPS0VOX0tFWSAmJiBkYXRhPy5vbGRWYWx1ZSAhPT0gZGF0YT8ubmV3VmFsdWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRvY3VtZW50LmxvY2F0aW9uLnJlbG9hZCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG59XG4iXX0=
|
|
@@ -18,4 +18,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
|
|
|
18
18
|
providedIn: 'root'
|
|
19
19
|
}]
|
|
20
20
|
}], ctorParameters: () => [{ type: i1.BrainApiHttpService }] });
|
|
21
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJhaW4uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uLXNlcnZpY2VzL3NyYy9saWIvYnJhaW4uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7QUFLL0QsTUFBTSxPQUFPLGVBQWU7SUFDeEIsWUFBNkIsR0FBd0I7UUFBeEIsUUFBRyxHQUFILEdBQUcsQ0FBcUI7SUFBRyxDQUFDO0lBRXpELFdBQVcsQ0FBQyxPQU1YO1FBQ0csT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNyRCxDQUFDOytHQVhRLGVBQWU7bUhBQWYsZUFBZSxjQUZaLE1BQU07OzRGQUVULGVBQWU7a0JBSDNCLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBCcmFpbkFwaUh0dHBTZXJ2aWNlIH0gZnJvbSAnLi9icmFpbi1hcGktaHR0cC5zZXJ2aWNlJztcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBCcmFpbkFwaVNlcnZpY2Uge1xuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgYXBpOiBCcmFpbkFwaUh0dHBTZXJ2aWNlKSB7fVxuXG4gICAgaW52b2tlTW9kZWwocGF5bG9hZDoge1xuICAgICAgICBtb2RlbF9uYW1lOiAnY2xhdWRlJyB8ICdkZWVwc2Vlayc7XG4gICAgICAgIHByb21wdDogc3RyaW5nO1xuICAgICAgICBzZXNzaW9uX2lkPzogc3RyaW5nO1xuICAgICAgICBtYXhfdG9rZW5zPzogbnVtYmVyO1xuICAgICAgICB0ZW1wZXJhdHVyZT86IG51bWJlcjtcbiAgICB9KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFwaS5wb3N0KCcvYmVkcm9jay9pbnZva2UnLCBwYXlsb2FkKTtcbiAgICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
import { DOCUMENT } from '@angular/common';
|
|
2
|
+
import { Inject, Injectable } from '@angular/core';
|
|
3
|
+
import { BehaviorSubject, of } from 'rxjs';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
/**
|
|
6
|
+
* Secure Token Storage Service
|
|
7
|
+
*
|
|
8
|
+
* This service provides secure token storage using memory + secure cookies.
|
|
9
|
+
* NO localStorage usage - tokens are stored only in memory and secure cookies.
|
|
10
|
+
*
|
|
11
|
+
* Security Features:
|
|
12
|
+
* - Memory storage (primary) - not persistent across refreshes
|
|
13
|
+
* - Secure cookies (backup) - with SameSite=Strict protection
|
|
14
|
+
* - No localStorage - prevents XSS token theft
|
|
15
|
+
* - Secure flag for HTTPS
|
|
16
|
+
* - CSRF protection via SameSite cookies
|
|
17
|
+
*/
|
|
18
|
+
export class SecureTokenStorageService {
|
|
19
|
+
constructor(document) {
|
|
20
|
+
this.document = document;
|
|
21
|
+
this.TOKEN_COOKIE_NAME = 'auth_token';
|
|
22
|
+
this.IMPERSONATED_TOKEN_COOKIE_NAME = 'user_impersonated_token';
|
|
23
|
+
this.PHONEGAP_TOKEN_COOKIE_NAME = 'user_impersonated_phonegap_token';
|
|
24
|
+
// In-memory fallback for development or when cookies are not available
|
|
25
|
+
this.memoryStorage = new Map();
|
|
26
|
+
this.tokenSubject = new BehaviorSubject(null);
|
|
27
|
+
this.impersonatedTokenSubject = new BehaviorSubject(null);
|
|
28
|
+
this.phonegapTokenSubject = new BehaviorSubject(null);
|
|
29
|
+
this.initializeTokens();
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Store authentication token securely
|
|
33
|
+
*/
|
|
34
|
+
storeToken(token) {
|
|
35
|
+
try {
|
|
36
|
+
// Store ONLY in memory and secure cookie - NO localStorage
|
|
37
|
+
this.memoryStorage.set(this.TOKEN_COOKIE_NAME, token);
|
|
38
|
+
this.setSecureCookie(this.TOKEN_COOKIE_NAME, token);
|
|
39
|
+
this.tokenSubject.next(token);
|
|
40
|
+
return of(true);
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
console.warn('Failed to store token, using memory fallback:', error);
|
|
44
|
+
this.memoryStorage.set(this.TOKEN_COOKIE_NAME, token);
|
|
45
|
+
this.tokenSubject.next(token);
|
|
46
|
+
return of(true);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Store impersonated user token
|
|
51
|
+
*/
|
|
52
|
+
storeImpersonatedToken(token) {
|
|
53
|
+
try {
|
|
54
|
+
// Store ONLY in memory and secure cookie - NO localStorage
|
|
55
|
+
this.memoryStorage.set(this.IMPERSONATED_TOKEN_COOKIE_NAME, token);
|
|
56
|
+
this.setSecureCookie(this.IMPERSONATED_TOKEN_COOKIE_NAME, token);
|
|
57
|
+
this.impersonatedTokenSubject.next(token);
|
|
58
|
+
return of(true);
|
|
59
|
+
}
|
|
60
|
+
catch (error) {
|
|
61
|
+
console.warn('Failed to store impersonated token, using memory fallback:', error);
|
|
62
|
+
this.memoryStorage.set(this.IMPERSONATED_TOKEN_COOKIE_NAME, token);
|
|
63
|
+
this.impersonatedTokenSubject.next(token);
|
|
64
|
+
return of(true);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Store phonegap impersonated token
|
|
69
|
+
*/
|
|
70
|
+
storePhonegapToken(token) {
|
|
71
|
+
try {
|
|
72
|
+
// Store ONLY in memory and secure cookie - NO localStorage
|
|
73
|
+
this.memoryStorage.set(this.PHONEGAP_TOKEN_COOKIE_NAME, token);
|
|
74
|
+
this.setSecureCookie(this.PHONEGAP_TOKEN_COOKIE_NAME, token);
|
|
75
|
+
this.phonegapTokenSubject.next(token);
|
|
76
|
+
return of(true);
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
console.warn('Failed to store phonegap token, using memory fallback:', error);
|
|
80
|
+
this.memoryStorage.set(this.PHONEGAP_TOKEN_COOKIE_NAME, token);
|
|
81
|
+
this.phonegapTokenSubject.next(token);
|
|
82
|
+
return of(true);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Get authentication token
|
|
87
|
+
*/
|
|
88
|
+
getToken() {
|
|
89
|
+
// Try memory storage first (primary storage)
|
|
90
|
+
const memoryToken = this.memoryStorage.get(this.TOKEN_COOKIE_NAME);
|
|
91
|
+
if (memoryToken) {
|
|
92
|
+
return memoryToken;
|
|
93
|
+
}
|
|
94
|
+
// Try cookie as backup
|
|
95
|
+
const cookieToken = this.getCookieValue(this.TOKEN_COOKIE_NAME);
|
|
96
|
+
if (cookieToken) {
|
|
97
|
+
// Restore to memory storage
|
|
98
|
+
this.memoryStorage.set(this.TOKEN_COOKIE_NAME, cookieToken);
|
|
99
|
+
return cookieToken;
|
|
100
|
+
}
|
|
101
|
+
return null;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Get impersonated token
|
|
105
|
+
*/
|
|
106
|
+
getImpersonatedToken() {
|
|
107
|
+
const memoryToken = this.memoryStorage.get(this.IMPERSONATED_TOKEN_COOKIE_NAME);
|
|
108
|
+
if (memoryToken) {
|
|
109
|
+
return memoryToken;
|
|
110
|
+
}
|
|
111
|
+
const cookieToken = this.getCookieValue(this.IMPERSONATED_TOKEN_COOKIE_NAME);
|
|
112
|
+
if (cookieToken) {
|
|
113
|
+
this.memoryStorage.set(this.IMPERSONATED_TOKEN_COOKIE_NAME, cookieToken);
|
|
114
|
+
return cookieToken;
|
|
115
|
+
}
|
|
116
|
+
return null;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Get phonegap token
|
|
120
|
+
*/
|
|
121
|
+
getPhonegapToken() {
|
|
122
|
+
const memoryToken = this.memoryStorage.get(this.PHONEGAP_TOKEN_COOKIE_NAME);
|
|
123
|
+
if (memoryToken) {
|
|
124
|
+
return memoryToken;
|
|
125
|
+
}
|
|
126
|
+
const cookieToken = this.getCookieValue(this.PHONEGAP_TOKEN_COOKIE_NAME);
|
|
127
|
+
if (cookieToken) {
|
|
128
|
+
this.memoryStorage.set(this.PHONEGAP_TOKEN_COOKIE_NAME, cookieToken);
|
|
129
|
+
return cookieToken;
|
|
130
|
+
}
|
|
131
|
+
return null;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Get token as Observable
|
|
135
|
+
*/
|
|
136
|
+
getToken$() {
|
|
137
|
+
return this.tokenSubject.asObservable();
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Get impersonated token as Observable
|
|
141
|
+
*/
|
|
142
|
+
getImpersonatedToken$() {
|
|
143
|
+
return this.impersonatedTokenSubject.asObservable();
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Get phonegap token as Observable
|
|
147
|
+
*/
|
|
148
|
+
getPhonegapToken$() {
|
|
149
|
+
return this.phonegapTokenSubject.asObservable();
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Remove all tokens
|
|
153
|
+
*/
|
|
154
|
+
clearTokens() {
|
|
155
|
+
try {
|
|
156
|
+
// Clear cookies
|
|
157
|
+
this.deleteCookie(this.TOKEN_COOKIE_NAME);
|
|
158
|
+
this.deleteCookie(this.IMPERSONATED_TOKEN_COOKIE_NAME);
|
|
159
|
+
this.deleteCookie(this.PHONEGAP_TOKEN_COOKIE_NAME);
|
|
160
|
+
}
|
|
161
|
+
catch (error) {
|
|
162
|
+
console.warn('Failed to clear cookies:', error);
|
|
163
|
+
}
|
|
164
|
+
// Clear memory storage
|
|
165
|
+
this.memoryStorage.delete(this.TOKEN_COOKIE_NAME);
|
|
166
|
+
this.memoryStorage.delete(this.IMPERSONATED_TOKEN_COOKIE_NAME);
|
|
167
|
+
this.memoryStorage.delete(this.PHONEGAP_TOKEN_COOKIE_NAME);
|
|
168
|
+
// Update subjects
|
|
169
|
+
this.tokenSubject.next(null);
|
|
170
|
+
this.impersonatedTokenSubject.next(null);
|
|
171
|
+
this.phonegapTokenSubject.next(null);
|
|
172
|
+
return of(true);
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Remove specific token
|
|
176
|
+
*/
|
|
177
|
+
removeToken() {
|
|
178
|
+
try {
|
|
179
|
+
this.deleteCookie(this.TOKEN_COOKIE_NAME);
|
|
180
|
+
}
|
|
181
|
+
catch (error) {
|
|
182
|
+
console.warn('Failed to remove token:', error);
|
|
183
|
+
}
|
|
184
|
+
this.memoryStorage.delete(this.TOKEN_COOKIE_NAME);
|
|
185
|
+
this.tokenSubject.next(null);
|
|
186
|
+
return of(true);
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Remove impersonated tokens
|
|
190
|
+
*/
|
|
191
|
+
removeImpersonatedTokens() {
|
|
192
|
+
try {
|
|
193
|
+
this.deleteCookie(this.IMPERSONATED_TOKEN_COOKIE_NAME);
|
|
194
|
+
this.deleteCookie(this.PHONEGAP_TOKEN_COOKIE_NAME);
|
|
195
|
+
}
|
|
196
|
+
catch (error) {
|
|
197
|
+
console.warn('Failed to remove impersonated tokens:', error);
|
|
198
|
+
}
|
|
199
|
+
this.memoryStorage.delete(this.IMPERSONATED_TOKEN_COOKIE_NAME);
|
|
200
|
+
this.memoryStorage.delete(this.PHONEGAP_TOKEN_COOKIE_NAME);
|
|
201
|
+
this.impersonatedTokenSubject.next(null);
|
|
202
|
+
this.phonegapTokenSubject.next(null);
|
|
203
|
+
return of(true);
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Set secure cookie
|
|
207
|
+
* Note: HttpOnly cannot be set from client-side JavaScript
|
|
208
|
+
* For maximum security, backend should set httpOnly cookies
|
|
209
|
+
*/
|
|
210
|
+
setSecureCookie(name, value) {
|
|
211
|
+
const isSecure = this.document.location.protocol === 'https:';
|
|
212
|
+
// Set cookie with maximum security possible from client-side
|
|
213
|
+
const cookieString = `${name}=${value}; Path=/; ${isSecure ? 'Secure; ' : ''}SameSite=Strict; Max-Age=86400`;
|
|
214
|
+
this.document.cookie = cookieString;
|
|
215
|
+
// Log warning about security limitations
|
|
216
|
+
console.warn('⚠️ SECURITY WARNING: Cookie is not httpOnly. For maximum security, backend should set httpOnly cookies.');
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Get cookie value
|
|
220
|
+
*/
|
|
221
|
+
getCookieValue(name) {
|
|
222
|
+
const value = `; ${this.document.cookie}`;
|
|
223
|
+
const parts = value.split(`; ${name}=`);
|
|
224
|
+
if (parts.length === 2) {
|
|
225
|
+
return parts.pop()?.split(';').shift() || null;
|
|
226
|
+
}
|
|
227
|
+
return null;
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Delete cookie
|
|
231
|
+
*/
|
|
232
|
+
deleteCookie(name) {
|
|
233
|
+
this.document.cookie = `${name}=; Path=/; expires=Thu, 01 Jan 1970 00:00:01 GMT;`;
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Initialize tokens from storage on service startup
|
|
237
|
+
*/
|
|
238
|
+
initializeTokens() {
|
|
239
|
+
const token = this.getToken();
|
|
240
|
+
const impersonatedToken = this.getImpersonatedToken();
|
|
241
|
+
const phonegapToken = this.getPhonegapToken();
|
|
242
|
+
if (token) {
|
|
243
|
+
this.tokenSubject.next(token);
|
|
244
|
+
}
|
|
245
|
+
if (impersonatedToken) {
|
|
246
|
+
this.impersonatedTokenSubject.next(impersonatedToken);
|
|
247
|
+
}
|
|
248
|
+
if (phonegapToken) {
|
|
249
|
+
this.phonegapTokenSubject.next(phonegapToken);
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SecureTokenStorageService, deps: [{ token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
253
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SecureTokenStorageService, providedIn: 'root' }); }
|
|
254
|
+
}
|
|
255
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SecureTokenStorageService, decorators: [{
|
|
256
|
+
type: Injectable,
|
|
257
|
+
args: [{
|
|
258
|
+
providedIn: 'root'
|
|
259
|
+
}]
|
|
260
|
+
}], ctorParameters: () => [{ type: Document, decorators: [{
|
|
261
|
+
type: Inject,
|
|
262
|
+
args: [DOCUMENT]
|
|
263
|
+
}] }] });
|
|
264
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjdXJlLXRva2VuLXN0b3JhZ2Uuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uLXNlcnZpY2VzL3NyYy9saWIvc2VjdXJlLXRva2VuLXN0b3JhZ2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbkQsT0FBTyxFQUFFLGVBQWUsRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBRXZEOzs7Ozs7Ozs7Ozs7R0FZRztBQUlILE1BQU0sT0FBTyx5QkFBeUI7SUFXbEMsWUFBK0MsUUFBa0I7UUFBbEIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQVZoRCxzQkFBaUIsR0FBRyxZQUFZLENBQUM7UUFDakMsbUNBQThCLEdBQUcseUJBQXlCLENBQUM7UUFDM0QsK0JBQTBCLEdBQUcsa0NBQWtDLENBQUM7UUFFakYsdUVBQXVFO1FBQ3RELGtCQUFhLEdBQUcsSUFBSSxHQUFHLEVBQWtCLENBQUM7UUFDMUMsaUJBQVksR0FBRyxJQUFJLGVBQWUsQ0FBZ0IsSUFBSSxDQUFDLENBQUM7UUFDeEQsNkJBQXdCLEdBQUcsSUFBSSxlQUFlLENBQWdCLElBQUksQ0FBQyxDQUFDO1FBQ3BFLHlCQUFvQixHQUFHLElBQUksZUFBZSxDQUFnQixJQUFJLENBQUMsQ0FBQztRQUc3RSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxVQUFVLENBQUMsS0FBYTtRQUNwQixJQUFJLENBQUM7WUFDRCwyREFBMkQ7WUFDM0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3RELElBQUksQ0FBQyxlQUFlLENB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RyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUN0RCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUU5QyxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ1IsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEMsQ0FBQztRQUNELElBQUksaUJBQWlCLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDMUQsQ0FBQztRQUNELElBQUksYUFBYSxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNsRCxDQUFDO0lBQ0wsQ0FBQzsrR0FyUVEseUJBQXlCLGtCQVdkLFFBQVE7bUhBWG5CLHlCQUF5QixjQUZ0QixNQUFNOzs0RkFFVCx5QkFBeUI7a0JBSHJDLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCOzswQkFZZ0IsTUFBTTsyQkFBQyxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcblxuLyoqXG4gKiBTZWN1cmUgVG9rZW4gU3RvcmFnZSBTZXJ2aWNlXG4gKlxuICogVGhpcyBzZXJ2aWNlIHByb3ZpZGVzIHNlY3VyZSB0b2tlbiBzdG9yYWdlIHVzaW5nIG1lbW9yeSArIHNlY3VyZSBjb29raWVzLlxuICogTk8gbG9jYWxTdG9yYWdlIHVzYWdlIC0gdG9rZW5zIGFyZSBzdG9yZWQgb25seSBpbiBtZW1vcnkgYW5kIHNlY3VyZSBjb29raWVzLlxuICpcbiAqIFNlY3VyaXR5IEZlYXR1cmVzOlxuICogLSBNZW1vcnkgc3RvcmFnZSAocHJpbWFyeSkgLSBub3QgcGVyc2lzdGVudCBhY3Jvc3MgcmVmcmVzaGVzXG4gKiAtIFNlY3VyZSBjb29raWVzIChiYWNrdXApIC0gd2l0aCBTYW1lU2l0ZT1TdHJpY3QgcHJvdGVjdGlvblxuICogLSBObyBsb2NhbFN0b3JhZ2UgLSBwcmV2ZW50cyBYU1MgdG9rZW4gdGhlZnRcbiAqIC0gU2VjdXJlIGZsYWcgZm9yIEhUVFBTXG4gKiAtIENTUkYgcHJvdGVjdGlvbiB2aWEgU2FtZVNpdGUgY29va2llc1xuICovXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFNlY3VyZVRva2VuU3RvcmFnZVNlcnZpY2Uge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgVE9LRU5fQ09PS0lFX05BTUUgPSAnYXV0aF90b2tlbic7XG4gICAgcHJpdmF0ZSByZWFkb25seSBJTVBFUlNPTkFURURfVE9LRU5fQ09PS0lFX05BTUUgPSAndXNlcl9pbXBlcnNvbmF0ZWRfdG9rZW4nO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgUEhPTkVHQVBfVE9LRU5fQ09PS0lFX05BTUUgPSAndXNlcl9pbXBlcnNvbmF0ZWRfcGhvbmVnYXBfdG9rZW4nO1xuXG4gICAgLy8gSW4tbWVtb3J5IGZhbGxiYWNrIGZvciBkZXZlbG9wbWVudCBvciB3aGVuIGNvb2tpZXMgYXJlIG5vdCBhdmFpbGFibGVcbiAgICBwcml2YXRlIHJlYWRvbmx5IG1lbW9yeVN0b3JhZ2UgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgdG9rZW5TdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmcgfCBudWxsPihudWxsKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGltcGVyc29uYXRlZFRva2VuU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBwaG9uZWdhcFRva2VuU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG5cbiAgICBjb25zdHJ1Y3RvcihASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIHJlYWRvbmx5IGRvY3VtZW50OiBEb2N1bWVudCkge1xuICAgICAgICB0aGlzLmluaXRpYWxpemVUb2tlbnMoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTdG9yZSBhdXRoZW50aWNhdGlvbiB0b2tlbiBzZWN1cmVseVxuICAgICAqL1xuICAgIHN0b3JlVG9rZW4odG9rZW46IHN0cmluZyk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gU3RvcmUgT05MWSBpbiBtZW1vcnkgYW5kIHNlY3VyZSBjb29raWUgLSBOTyBsb2NhbFN0b3JhZ2VcbiAgICAgICAgICAgIHRoaXMubWVtb3J5U3RvcmFnZS5zZXQodGhpcy5UT0tFTl9DT09LSUVfTkFNRSwgdG9rZW4pO1xuICAgICAgICAgICAgdGhpcy5zZXRTZWN1cmVDb29raWUodGhpcy5UT0tFTl9DT09LSUVfTkFNRSwgdG9rZW4pO1xuXG4gICAgICAgICAgICB0aGlzLnRva2VuU3ViamVjdC5uZXh0KHRva2VuKTtcbiAgICAgICAgICAgIHJldHVybiBvZih0cnVlKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignRmFpbGVkIHRvIHN0b3JlIHRva2VuLCB1c2luZyBtZW1vcnkgZmFsbGJhY2s6JywgZXJyb3IpO1xuICAgICAgICAgICAgdGhpcy5tZW1vcnlTdG9yYWdlLnNldCh0aGlzLlRPS0VOX0NPT0tJRV9OQU1FLCB0b2tlbik7XG4gICAgICAgICAgICB0aGlzLnRva2VuU3ViamVjdC5uZXh0KHRva2VuKTtcbiAgICAgICAgICAgIHJldHVybiBvZih0cnVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFN0b3JlIGltcGVyc29uYXRlZCB1c2VyIHRva2VuXG4gICAgICovXG4gICAgc3RvcmVJbXBlcnNvbmF0ZWRUb2tlbih0b2tlbjogc3RyaW5nKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBTdG9yZSBPTkxZIGluIG1lbW9yeSBhbmQgc2VjdXJlIGNvb2tpZSAtIE5PIGxvY2FsU3RvcmFnZVxuICAgICAgICAgICAgdGhpcy5tZW1vcnlTdG9yYWdlLnNldCh0aGlzLklNUEVSU09OQVRFRF9UT0tFTl9DT09LSUVfTkFNRSwgdG9rZW4pO1xuICAgICAgICAgICAgdGhpcy5zZXRTZWN1cmVDb29raWUodGhpcy5JTVBFUlNPTkFURURfVE9LRU5fQ09PS0lFX05BTUUsIHRva2VuKTtcbiAgICAgICAgICAgIHRoaXMuaW1wZXJzb25hdGVkVG9rZW5TdWJqZWN0Lm5leHQodG9rZW4pO1xuICAgICAgICAgICAgcmV0dXJuIG9mKHRydWUpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdGYWlsZWQgdG8gc3RvcmUgaW1wZXJzb25hdGVkIHRva2VuLCB1c2luZyBtZW1vcnkgZmFsbGJhY2s6JywgZXJyb3IpO1xuICAgICAgICAgICAgdGhpcy5tZW1vcnlTdG9yYWdlLnNldCh0aGlzLklNUEVSU09OQVRFRF9UT0tFTl9DT09LSUVfTkFNRSwgdG9rZW4pO1xuICAgICAgICAgICAgdGhpcy5pbXBlcnNvbmF0ZWRUb2tlblN1YmplY3QubmV4dCh0b2tlbik7XG4gICAgICAgICAgICByZXR1cm4gb2YodHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTdG9yZSBwaG9uZWdhcCBpbXBlcnNvbmF0ZWQgdG9rZW5cbiAgICAgKi9cbiAgICBzdG9yZVBob25lZ2FwVG9rZW4odG9rZW46IHN0cmluZyk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gU3RvcmUgT05MWSBpbiBtZW1vcnkgYW5kIHNlY3VyZSBjb29raWUgLSBOTyBsb2NhbFN0b3JhZ2VcbiAgICAgICAgICAgIHRoaXMubWVtb3J5U3RvcmFnZS5zZXQodGhpcy5QSE9ORUdBUF9UT0tFTl9DT09LSUVfTkFNRSwgdG9rZW4pO1xuICAgICAgICAgICAgdGhpcy5zZXRTZWN1cmVDb29raWUodGhpcy5QSE9ORUdBUF9UT0tFTl9DT09LSUVfTkFNRSwgdG9rZW4pO1xuICAgICAgICAgICAgdGhpcy5waG9uZWdhcFRva2VuU3ViamVjdC5uZXh0KHRva2VuKTtcbiAgICAgICAgICAgIHJldHVybiBvZih0cnVlKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignRmFpbGVkIHRvIHN0b3JlIHBob25lZ2FwIHRva2VuLCB1c2luZyBtZW1vcnkgZmFsbGJhY2s6JywgZXJyb3IpO1xuICAgICAgICAgICAgdGhpcy5tZW1vcnlTdG9yYWdlLnNldCh0aGlzLlBIT05FR0FQX1RPS0VOX0NPT0tJRV9OQU1FLCB0b2tlbik7XG4gICAgICAgICAgICB0aGlzLnBob25lZ2FwVG9rZW5TdWJqZWN0Lm5leHQodG9rZW4pO1xuICAgICAgICAgICAgcmV0dXJuIG9mKHRydWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IGF1dGhlbnRpY2F0aW9uIHRva2VuXG4gICAgICovXG4gICAgZ2V0VG9rZW4oKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgICAgIC8vIFRyeSBtZW1vcnkgc3RvcmFnZSBmaXJzdCAocHJpbWFyeSBzdG9yYWdlKVxuICAgICAgICBjb25zdCBtZW1vcnlUb2tlbiA9IHRoaXMubWVtb3J5U3RvcmFnZS5nZXQodGhpcy5UT0tFTl9DT09LSUVfTkFNRSk7XG4gICAgICAgIGlmIChtZW1vcnlUb2tlbikge1xuICAgICAgICAgICAgcmV0dXJuIG1lbW9yeVRva2VuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVHJ5IGNvb2tpZSBhcyBiYWNrdXBcbiAgICAgICAgY29uc3QgY29va2llVG9rZW4gPSB0aGlzLmdldENvb2tpZVZhbHVlKHRoaXMuVE9LRU5fQ09PS0lFX05BTUUpO1xuICAgICAgICBpZiAoY29va2llVG9rZW4pIHtcbiAgICAgICAgICAgIC8vIFJlc3RvcmUgdG8gbWVtb3J5IHN0b3JhZ2VcbiAgICAgICAgICAgIHRoaXMubWVtb3J5U3RvcmFnZS5zZXQodGhpcy5UT0tFTl9DT09LSUVfTkFNRSwgY29va2llVG9rZW4pO1xuICAgICAgICAgICAgcmV0dXJuIGNvb2tpZVRva2VuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IGltcGVyc29uYXRlZCB0b2tlblxuICAgICAqL1xuICAgIGdldEltcGVyc29uYXRlZFRva2VuKCk6IHN0cmluZyB8IG51bGwge1xuICAgICAgICBjb25zdCBtZW1vcnlUb2tlbiA9IHRoaXMubWVtb3J5U3RvcmFnZS5nZXQodGhpcy5JTVBFUlNPTkFURURfVE9LRU5fQ09PS0lFX05BTUUpO1xuICAgICAgICBpZiAobWVtb3J5VG9rZW4pIHtcbiAgICAgICAgICAgIHJldHVybiBtZW1vcnlUb2tlbjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvb2tpZVRva2VuID0gdGhpcy5nZXRDb29raWVWYWx1ZSh0aGlzLklNUEVSU09OQVRFRF9UT0tFTl9DT09LSUVfTkFNRSk7XG4gICAgICAgIGlmIChjb29raWVUb2tlbikge1xuICAgICAgICAgICAgdGhpcy5tZW1vcnlTdG9yYWdlLnNldCh0aGlzLklNUEVSU09OQVRFRF9UT0tFTl9DT09LSUVfTkFNRSwgY29va2llVG9rZW4pO1xuICAgICAgICAgICAgcmV0dXJuIGNvb2tpZVRva2VuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IHBob25lZ2FwIHRva2VuXG4gICAgICovXG4gICAgZ2V0UGhvbmVnYXBUb2tlbigpOiBzdHJpbmcgfCBudWxsIHtcbiAgICAgICAgY29uc3QgbWVtb3J5VG9rZW4gPSB0aGlzLm1lbW9yeVN0b3JhZ2UuZ2V0KHRoaXMuUEhPTkVHQVBfVE9LRU5fQ09PS0lFX05BTUUpO1xuICAgICAgICBpZiAobWVtb3J5VG9rZW4pIHtcbiAgICAgICAgICAgIHJldHVybiBtZW1vcnlUb2tlbjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvb2tpZVRva2VuID0gdGhpcy5nZXRDb29raWVWYWx1ZSh0aGlzLlBIT05FR0FQX1RPS0VOX0NPT0tJRV9OQU1FKTtcbiAgICAgICAgaWYgKGNvb2tpZVRva2VuKSB7XG4gICAgICAgICAgICB0aGlzLm1lbW9yeVN0b3JhZ2Uuc2V0KHRoaXMuUEhPTkVHQVBfVE9LRU5fQ09PS0lFX05BTUUsIGNvb2tpZVRva2VuKTtcbiAgICAgICAgICAgIHJldHVybiBjb29raWVUb2tlbjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCB0b2tlbiBhcyBPYnNlcnZhYmxlXG4gICAgICovXG4gICAgZ2V0VG9rZW4kKCk6IE9ic2VydmFibGU8c3RyaW5nIHwgbnVsbD4ge1xuICAgICAgICByZXR1cm4gdGhpcy50b2tlblN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IGltcGVyc29uYXRlZCB0b2tlbiBhcyBPYnNlcnZhYmxlXG4gICAgICovXG4gICAgZ2V0SW1wZXJzb25hdGVkVG9rZW4kKCk6IE9ic2VydmFibGU8c3RyaW5nIHwgbnVsbD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5pbXBlcnNvbmF0ZWRUb2tlblN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IHBob25lZ2FwIHRva2VuIGFzIE9ic2VydmFibGVcbiAgICAgKi9cbiAgICBnZXRQaG9uZWdhcFRva2VuJCgpOiBPYnNlcnZhYmxlPHN0cmluZyB8IG51bGw+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGhvbmVnYXBUb2tlblN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlIGFsbCB0b2tlbnNcbiAgICAgKi9cbiAgICBjbGVhclRva2VucygpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIENsZWFyIGNvb2tpZXNcbiAgICAgICAgICAgIHRoaXMuZGVsZXRlQ29va2llKHRoaXMuVE9LRU5fQ09PS0lFX05BTUUpO1xuICAgICAgICAgICAgdGhpcy5kZWxldGVDb29raWUodGhpcy5JTVBFUlNPTkFURURfVE9LRU5fQ09PS0lFX05BTUUpO1xuICAgICAgICAgICAgdGhpcy5kZWxldGVDb29raWUodGhpcy5QSE9ORUdBUF9UT0tFTl9DT09LSUVfTkFNRSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ0ZhaWxlZCB0byBjbGVhciBjb29raWVzOicsIGVycm9yKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENsZWFyIG1lbW9yeSBzdG9yYWdlXG4gICAgICAgIHRoaXMubWVtb3J5U3RvcmFnZS5kZWxldGUodGhpcy5UT0tFTl9DT09LSUVfTkFNRSk7XG4gICAgICAgIHRoaXMubWVtb3J5U3RvcmFnZS5kZWxldGUodGhpcy5JTVBFUlNPTkFURURfVE9LRU5fQ09PS0lFX05BTUUpO1xuICAgICAgICB0aGlzLm1lbW9yeVN0b3JhZ2UuZGVsZXRlKHRoaXMuUEhPTkVHQVBfVE9LRU5fQ09PS0lFX05BTUUpO1xuXG4gICAgICAgIC8vIFVwZGF0ZSBzdWJqZWN0c1xuICAgICAgICB0aGlzLnRva2VuU3ViamVjdC5uZXh0KG51bGwpO1xuICAgICAgICB0aGlzLmltcGVyc29uYXRlZFRva2VuU3ViamVjdC5uZXh0KG51bGwpO1xuICAgICAgICB0aGlzLnBob25lZ2FwVG9rZW5TdWJqZWN0Lm5leHQobnVsbCk7XG5cbiAgICAgICAgcmV0dXJuIG9mKHRydWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZSBzcGVjaWZpYyB0b2tlblxuICAgICAqL1xuICAgIHJlbW92ZVRva2VuKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5kZWxldGVDb29raWUodGhpcy5UT0tFTl9DT09LSUVfTkFNRSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ0ZhaWxlZCB0byByZW1vdmUgdG9rZW46JywgZXJyb3IpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5tZW1vcnlTdG9yYWdlLmRlbGV0ZSh0aGlzLlRPS0VOX0NPT0tJRV9OQU1FKTtcbiAgICAgICAgdGhpcy50b2tlblN1YmplY3QubmV4dChudWxsKTtcbiAgICAgICAgcmV0dXJuIG9mKHRydWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZSBpbXBlcnNvbmF0ZWQgdG9rZW5zXG4gICAgICovXG4gICAgcmVtb3ZlSW1wZXJzb25hdGVkVG9rZW5zKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5kZWxldGVDb29raWUodGhpcy5JTVBFUlNPTkFURURfVE9LRU5fQ09PS0lFX05BTUUpO1xuICAgICAgICAgICAgdGhpcy5kZWxldGVDb29raWUodGhpcy5QSE9ORUdBUF9UT0tFTl9DT09LSUVfTkFNRSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ0ZhaWxlZCB0byByZW1vdmUgaW1wZXJzb25hdGVkIHRva2VuczonLCBlcnJvcik7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm1lbW9yeVN0b3JhZ2UuZGVsZXRlKHRoaXMuSU1QRVJTT05BVEVEX1RPS0VOX0NPT0tJRV9OQU1FKTtcbiAgICAgICAgdGhpcy5tZW1vcnlTdG9yYWdlLmRlbGV0ZSh0aGlzLlBIT05FR0FQX1RPS0VOX0NPT0tJRV9OQU1FKTtcbiAgICAgICAgdGhpcy5pbXBlcnNvbmF0ZWRUb2tlblN1YmplY3QubmV4dChudWxsKTtcbiAgICAgICAgdGhpcy5waG9uZWdhcFRva2VuU3ViamVjdC5uZXh0KG51bGwpO1xuICAgICAgICByZXR1cm4gb2YodHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0IHNlY3VyZSBjb29raWVcbiAgICAgKiBOb3RlOiBIdHRwT25seSBjYW5ub3QgYmUgc2V0IGZyb20gY2xpZW50LXNpZGUgSmF2YVNjcmlwdFxuICAgICAqIEZvciBtYXhpbXVtIHNlY3VyaXR5LCBiYWNrZW5kIHNob3VsZCBzZXQgaHR0cE9ubHkgY29va2llc1xuICAgICAqL1xuICAgIHByaXZhdGUgc2V0U2VjdXJlQ29va2llKG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBjb25zdCBpc1NlY3VyZSA9IHRoaXMuZG9jdW1lbnQubG9jYXRpb24ucHJvdG9jb2wgPT09ICdodHRwczonO1xuXG4gICAgICAgIC8vIFNldCBjb29raWUgd2l0aCBtYXhpbXVtIHNlY3VyaXR5IHBvc3NpYmxlIGZyb20gY2xpZW50LXNpZGVcbiAgICAgICAgY29uc3QgY29va2llU3RyaW5nID0gYCR7bmFtZX09JHt2YWx1ZX07IFBhdGg9LzsgJHtpc1NlY3VyZSA/ICdTZWN1cmU7ICcgOiAnJ31TYW1lU2l0ZT1TdHJpY3Q7IE1heC1BZ2U9ODY0MDBgO1xuICAgICAgICB0aGlzLmRvY3VtZW50LmNvb2tpZSA9IGNvb2tpZVN0cmluZztcblxuICAgICAgICAvLyBMb2cgd2FybmluZyBhYm91dCBzZWN1cml0eSBsaW1pdGF0aW9uc1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICAn4pqg77iPIFNFQ1VSSVRZIFdBUk5JTkc6IENvb2tpZSBpcyBub3QgaHR0cE9ubHkuIEZvciBtYXhpbXVtIHNlY3VyaXR5LCBiYWNrZW5kIHNob3VsZCBzZXQgaHR0cE9ubHkgY29va2llcy4nXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IGNvb2tpZSB2YWx1ZVxuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0Q29va2llVmFsdWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gYDsgJHt0aGlzLmRvY3VtZW50LmNvb2tpZX1gO1xuICAgICAgICBjb25zdCBwYXJ0cyA9IHZhbHVlLnNwbGl0KGA7ICR7bmFtZX09YCk7XG4gICAgICAgIGlmIChwYXJ0cy5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICAgIHJldHVybiBwYXJ0cy5wb3AoKT8uc3BsaXQoJzsnKS5zaGlmdCgpIHx8IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGVsZXRlIGNvb2tpZVxuICAgICAqL1xuICAgIHByaXZhdGUgZGVsZXRlQ29va2llKG5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLmRvY3VtZW50LmNvb2tpZSA9IGAke25hbWV9PTsgUGF0aD0vOyBleHBpcmVzPVRodSwgMDEgSmFuIDE5NzAgMDA6MDA6MDEgR01UO2A7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW5pdGlhbGl6ZSB0b2tlbnMgZnJvbSBzdG9yYWdlIG9uIHNlcnZpY2Ugc3RhcnR1cFxuICAgICAqL1xuICAgIHByaXZhdGUgaW5pdGlhbGl6ZVRva2VucygpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdG9rZW4gPSB0aGlzLmdldFRva2VuKCk7XG4gICAgICAgIGNvbnN0IGltcGVyc29uYXRlZFRva2VuID0gdGhpcy5nZXRJbXBlcnNvbmF0ZWRUb2tlbigpO1xuICAgICAgICBjb25zdCBwaG9uZWdhcFRva2VuID0gdGhpcy5nZXRQaG9uZWdhcFRva2VuKCk7XG5cbiAgICAgICAgaWYgKHRva2VuKSB7XG4gICAgICAgICAgICB0aGlzLnRva2VuU3ViamVjdC5uZXh0KHRva2VuKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW1wZXJzb25hdGVkVG9rZW4pIHtcbiAgICAgICAgICAgIHRoaXMuaW1wZXJzb25hdGVkVG9rZW5TdWJqZWN0Lm5leHQoaW1wZXJzb25hdGVkVG9rZW4pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwaG9uZWdhcFRva2VuKSB7XG4gICAgICAgICAgICB0aGlzLnBob25lZ2FwVG9rZW5TdWJqZWN0Lm5leHQocGhvbmVnYXBUb2tlbik7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
|