@frontegg/angular 6.7.0-alpha.6655826001 → 6.7.0-alpha.6655897396

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,5 @@
1
1
  import { BehaviorSubject } from 'rxjs';
2
2
  import { Injectable } from '@angular/core';
3
- import { getPermissionEntitlements, getFeatureEntitlements, getEntitlements, } from '@frontegg/redux-store';
4
3
  import * as i0 from "@angular/core";
5
4
  import * as i1 from "./frontegg-app.service";
6
5
  /**
@@ -12,13 +11,13 @@ import * as i1 from "./frontegg-app.service";
12
11
  export class FronteggEntitlementsService {
13
12
  constructor(fronteggAppService) {
14
13
  this.fronteggAppService = fronteggAppService;
15
- this.entitlementsStateSubject = new BehaviorSubject(undefined);
14
+ this.userStateSubject = new BehaviorSubject(undefined);
16
15
  const state = this.fronteggAppService.fronteggApp.store.getState();
17
- this.updateEntitlementsStateIfNeeded(state.auth);
16
+ this.updateUserStateIfNeeded(state.auth);
18
17
  // Memoized entitlements State
19
18
  this.fronteggAppService.fronteggApp.store.subscribe(() => {
20
19
  const newState = this.fronteggAppService.fronteggApp.store.getState();
21
- this.updateEntitlementsStateIfNeeded(newState.auth);
20
+ this.updateUserStateIfNeeded(newState.auth);
22
21
  });
23
22
  }
24
23
  /**
@@ -26,64 +25,66 @@ export class FronteggEntitlementsService {
26
25
  * No need for deep equal because we already check it internally
27
26
  * @param authState
28
27
  */
29
- updateEntitlementsStateIfNeeded(authState) {
30
- var _a;
31
- const entitlementsState = (_a = authState.user) === null || _a === void 0 ? void 0 : _a.entitlements;
32
- if (this.entitlementsStateSubject.value === entitlementsState) {
28
+ updateUserStateIfNeeded(authState) {
29
+ const entitlementsState = authState.user;
30
+ if (this.userStateSubject.value === entitlementsState) {
33
31
  return;
34
32
  }
35
- this.entitlementsStateSubject.next(entitlementsState);
33
+ this.userStateSubject.next(entitlementsState);
36
34
  }
37
35
  /**
38
- * The function gives the ability to return a manipulated data of the entitlements state as a subscription.
36
+ * The function gives the ability to return a manipulated data of the user state as a subscription.
39
37
  *
40
- * @param dataManipulator Manipulator function that receives entitlements state and returns a manipulated data
38
+ * @param dataManipulator Manipulator function that receives user state and returns a manipulated data
41
39
  * @param observer For receiving manipulated data result
42
40
  * @returns a subscription to be able to unsubscribe
43
41
  */
44
- getEntitlementsManipulatorSubscription(dataManipulator, observer) {
42
+ getUserManipulatorSubscription(dataManipulator, observer) {
45
43
  // used for computing the entitlements result because we don't return the state itself, but a calculated one
46
- const entitlementsSubject = new BehaviorSubject(undefined);
47
- const stateSubscription = this.entitlementsStateSubject.subscribe(entitlements => {
48
- entitlementsSubject.next(dataManipulator(entitlements));
44
+ const userSubject = new BehaviorSubject(undefined);
45
+ const stateSubscription = this.userStateSubject.subscribe(user => {
46
+ userSubject.next(dataManipulator(user));
49
47
  });
50
48
  // subscribing the consumer observer
51
- const entitlementsResultSubscription = entitlementsSubject.asObservable().subscribe(observer);
52
- // monkey patched to manage both un-subscriptions: state and entitlements manipulated result
53
- const originalUnsubscribe = entitlementsResultSubscription.unsubscribe.bind(entitlementsResultSubscription);
54
- entitlementsResultSubscription.unsubscribe = () => {
49
+ const userResultSubscription = userSubject.asObservable().subscribe(observer);
50
+ // monkey patched to manage both un-subscriptions: state and user manipulated result
51
+ const originalUnsubscribe = userResultSubscription.unsubscribe.bind(userResultSubscription);
52
+ userResultSubscription.unsubscribe = () => {
55
53
  originalUnsubscribe();
56
54
  stateSubscription.unsubscribe();
57
55
  };
58
- return entitlementsResultSubscription;
56
+ return userResultSubscription;
59
57
  }
60
58
  /**
61
59
  * @param feature
62
60
  * @param observer For receiving the feature entitlements result including if the user is entitled to the given feature.
63
61
  * Attaching the justification if not entitled
62
+ * @param customAttributes consumer attributes
64
63
  * @returns a subscription to be able to unsubscribe
65
64
  * @throws when entitlement is not enabled via frontegg options
66
65
  */
67
- featureEntitlements$(feature, observer) {
68
- return this.getEntitlementsManipulatorSubscription((entitlements) => getFeatureEntitlements(entitlements, feature), observer);
66
+ featureEntitlements$(feature, observer, customAttributes) {
67
+ return this.getUserManipulatorSubscription(() => { return this.fronteggAppService.fronteggApp.getFeatureEntitlements(feature, customAttributes); }, observer);
69
68
  }
70
69
  /**
71
70
  * @param permission
72
71
  * @param observer For receiving the permission entitlements result including if the user is entitled to the given permission.
73
72
  * Attaching the justification if not entitled
73
+ * @param customAttributes consumer attributes
74
74
  * @returns a subscription to be able to unsubscribe
75
75
  */
76
- permissionEntitlements$(permission, observer) {
77
- return this.getEntitlementsManipulatorSubscription((entitlements) => getPermissionEntitlements(entitlements, permission), observer);
76
+ permissionEntitlements$(permission, observer, customAttributes) {
77
+ return this.getUserManipulatorSubscription(() => this.fronteggAppService.fronteggApp.getPermissionEntitlements(permission, customAttributes), observer);
78
78
  }
79
79
  /**
80
80
  * @param options permissionKey or featureKey in an options object
81
81
  * @param observer For receiving the permission entitlements result including if the user is entitled to the given permission.
82
82
  * Attaching the justification if not entitled
83
+ * @param customAttributes consumer attributes
83
84
  * @returns a subscription to be able to unsubscribe
84
85
  */
85
- entitlements$(options, observer) {
86
- return this.getEntitlementsManipulatorSubscription((entitlements) => getEntitlements(entitlements, options), observer);
86
+ entitlements$(options, observer, customAttributes) {
87
+ return this.getUserManipulatorSubscription(() => this.fronteggAppService.fronteggApp.getEntitlements(options, customAttributes), observer);
87
88
  }
88
89
  /**
89
90
  * Load entitlements data on demand
@@ -101,4 +102,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
101
102
  providedIn: 'root',
102
103
  }]
103
104
  }], ctorParameters: function () { return [{ type: i1.FronteggAppService }]; } });
104
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJvbnRlZ2ctZW50aXRsZW1lbnRzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mcm9udGVnZy1hcHAvc3JjL2xpYi9mcm9udGVnZy1lbnRpdGxlbWVudHMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlDLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUV0RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzNDLE9BQU8sRUFFTCx5QkFBeUIsRUFDekIsc0JBQXNCLEVBQ3RCLGVBQWUsR0FDaEIsTUFBTSx1QkFBdUIsQ0FBQzs7O0FBRy9COzs7OztHQUtHO0FBSUgsTUFBTSxPQUFPLDJCQUEyQjtJQUd0QyxZQUFvQixrQkFBc0M7UUFBdEMsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQUZsRCw2QkFBd0IsR0FBRyxJQUFJLGVBQWUsQ0FBTSxTQUFTLENBQUMsQ0FBQztRQUdyRSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQW1CLENBQUM7UUFDcEYsSUFBSSxDQUFDLCtCQUErQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVqRCw4QkFBOEI7UUFDOUIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUN2RCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQW1CLENBQUM7WUFDdkYsSUFBSSxDQUFDLCtCQUErQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0RCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ssK0JBQStCLENBQUMsU0FBb0I7O1FBQzFELE1BQU0saUJBQWlCLEdBQUcsTUFBQSxTQUFTLENBQUMsSUFBSSwwQ0FBRSxZQUFtQixDQUFDO1FBQzlELElBQUksSUFBSSxDQUFDLHdCQUF3QixDQUFDLEtBQUssS0FBSyxpQkFBaUIsRUFBRTtZQUM3RCxPQUFPO1NBQ1I7UUFFRCxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNLLHNDQUFzQyxDQUM1QyxlQUE4QyxFQUM5QyxRQUFpQztRQUVqQyw0R0FBNEc7UUFDNUcsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLGVBQWUsQ0FBUyxTQUE4QixDQUFDLENBQUM7UUFFeEYsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsd0JBQXdCLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxFQUFFO1lBQy9FLG1CQUFtQixDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztRQUMxRCxDQUFDLENBQUMsQ0FBQztRQUVILG9DQUFvQztRQUNwQyxNQUFNLDhCQUE4QixHQUFHLG1CQUFtQixDQUFDLFlBQVksRUFBRSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUU3Riw0RkFBNEY7UUFDNUYsTUFBTSxtQkFBbUIsR0FBRyw4QkFBOEIsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLDhCQUE4QixDQUFDLENBQUM7UUFFNUcsOEJBQThCLENBQUMsV0FBVyxHQUFHLEdBQUUsRUFBRTtZQUMvQyxtQkFBbUIsRUFBRSxDQUFDO1lBQ3RCLGlCQUFpQixDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ2xDLENBQUMsQ0FBQztRQUVGLE9BQU8sOEJBQThCLENBQUM7SUFDeEMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLG9CQUFvQixDQUFDLE9BQWUsRUFBRSxRQUFzQztRQUNqRixPQUFPLElBQUksQ0FBQyxzQ0FBc0MsQ0FDaEQsQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDLHNCQUFzQixDQUFDLFlBQVksRUFBRSxPQUFPLENBQUMsRUFDL0QsUUFBUSxDQUNULENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSx1QkFBdUIsQ0FBQyxVQUFrQixFQUFFLFFBQXNDO1FBQ3ZGLE9BQU8sSUFBSSxDQUFDLHNDQUFzQyxDQUNoRCxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMseUJBQXlCLENBQUMsWUFBWSxFQUFFLFVBQVUsQ0FBQyxFQUNyRSxRQUFRLENBQ1QsQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLGFBQWEsQ0FBQyxPQUEwQixFQUFFLFFBQXNDO1FBQ3JGLE9BQU8sSUFBSSxDQUFDLHNDQUFzQyxDQUNoRCxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsZUFBZSxDQUFDLFlBQVksRUFBRSxPQUFPLENBQUMsRUFDeEQsUUFBUSxDQUNULENBQUM7SUFDSixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksZ0JBQWdCLENBQUMsUUFBbUM7UUFDekQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNqRSxDQUFDOzt5SEExR1UsMkJBQTJCOzZIQUEzQiwyQkFBMkIsY0FGMUIsTUFBTTs0RkFFUCwyQkFBMkI7a0JBSHZDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU3Vic2NyaXB0aW9uLCBQYXJ0aWFsT2JzZXJ2ZXIsIEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQXV0aFN0YXRlIH0gZnJvbSAnQGZyb250ZWdnL3JlZHV4LXN0b3JlJztcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEVudGl0bGVtZW50LCBMb2FkRW50aXRsZW1lbnRzQ2FsbGJhY2ssIEVudGl0bGVkVG9PcHRpb25zIH0gZnJvbSAnQGZyb250ZWdnL3R5cGVzJztcblxuaW1wb3J0IHtcbiAgRnJvbnRlZ2dTdGF0ZSxcbiAgZ2V0UGVybWlzc2lvbkVudGl0bGVtZW50cyxcbiAgZ2V0RmVhdHVyZUVudGl0bGVtZW50cyxcbiAgZ2V0RW50aXRsZW1lbnRzLFxufSBmcm9tICdAZnJvbnRlZ2cvcmVkdXgtc3RvcmUnO1xuaW1wb3J0IHsgRnJvbnRlZ2dBcHBTZXJ2aWNlIH0gZnJvbSAnLi9mcm9udGVnZy1hcHAuc2VydmljZSc7XG5cbi8qKlxuICogQW4gZW50aXRsZW1lbnRzIHNlcnZpY2UgZm9yOiBcbiAqICAgMS4gTWFuYWdpbmcgc3RhdGUgc3Vic2NyaXB0aW9uLlxuICogICAyLiBRdWVyeWluZyBhYm91dCBmZWF0dXJlIGFuZCBwZXJtaXNzaW9uIGVudGl0bGVtZW50cyBzdGF0ZS5cbiAqICAgMy4gTG9hZCBlbnRpdGxlbWVudHMgb24gZGVtYW5kLlxuICovXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgRnJvbnRlZ2dFbnRpdGxlbWVudHNTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBlbnRpdGxlbWVudHNTdGF0ZVN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4odW5kZWZpbmVkKTtcbiAgXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZnJvbnRlZ2dBcHBTZXJ2aWNlOiBGcm9udGVnZ0FwcFNlcnZpY2UpIHtcbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMuZnJvbnRlZ2dBcHBTZXJ2aWNlLmZyb250ZWdnQXBwLnN0b3JlLmdldFN0YXRlKCkgYXMgRnJvbnRlZ2dTdGF0ZTtcbiAgICB0aGlzLnVwZGF0ZUVudGl0bGVtZW50c1N0YXRlSWZOZWVkZWQoc3RhdGUuYXV0aCk7XG5cbiAgICAvLyBNZW1vaXplZCBlbnRpdGxlbWVudHMgU3RhdGVcbiAgICB0aGlzLmZyb250ZWdnQXBwU2VydmljZS5mcm9udGVnZ0FwcC5zdG9yZS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgY29uc3QgbmV3U3RhdGUgPSB0aGlzLmZyb250ZWdnQXBwU2VydmljZS5mcm9udGVnZ0FwcC5zdG9yZS5nZXRTdGF0ZSgpIGFzIEZyb250ZWdnU3RhdGU7XG4gICAgICB0aGlzLnVwZGF0ZUVudGl0bGVtZW50c1N0YXRlSWZOZWVkZWQobmV3U3RhdGUuYXV0aCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVHJpZ2dlciBlbnRpdGxlbWVudHMgc3ViamVjdCBjaGFuZ2UgZXZlbnQgaWYgdGhlIGVudGl0bGVtZW50cyByZWZlcmVuY2UgY2hhbmdlc1xuICAgKiBObyBuZWVkIGZvciBkZWVwIGVxdWFsIGJlY2F1c2Ugd2UgYWxyZWFkeSBjaGVjayBpdCBpbnRlcm5hbGx5XG4gICAqIEBwYXJhbSBhdXRoU3RhdGVcbiAgICovXG4gIHByaXZhdGUgdXBkYXRlRW50aXRsZW1lbnRzU3RhdGVJZk5lZWRlZChhdXRoU3RhdGU6IEF1dGhTdGF0ZSk6IHZvaWQge1xuICAgIGNvbnN0IGVudGl0bGVtZW50c1N0YXRlID0gYXV0aFN0YXRlLnVzZXI/LmVudGl0bGVtZW50cyBhcyBhbnk7XG4gICAgaWYgKHRoaXMuZW50aXRsZW1lbnRzU3RhdGVTdWJqZWN0LnZhbHVlID09PSBlbnRpdGxlbWVudHNTdGF0ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuZW50aXRsZW1lbnRzU3RhdGVTdWJqZWN0Lm5leHQoZW50aXRsZW1lbnRzU3RhdGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBmdW5jdGlvbiBnaXZlcyB0aGUgYWJpbGl0eSB0byByZXR1cm4gYSBtYW5pcHVsYXRlZCBkYXRhIG9mIHRoZSBlbnRpdGxlbWVudHMgc3RhdGUgYXMgYSBzdWJzY3JpcHRpb24uXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhTWFuaXB1bGF0b3IgTWFuaXB1bGF0b3IgZnVuY3Rpb24gdGhhdCByZWNlaXZlcyBlbnRpdGxlbWVudHMgc3RhdGUgYW5kIHJldHVybnMgYSBtYW5pcHVsYXRlZCBkYXRhXG4gICAqIEBwYXJhbSBvYnNlcnZlciBGb3IgcmVjZWl2aW5nIG1hbmlwdWxhdGVkIGRhdGEgcmVzdWx0XG4gICAqIEByZXR1cm5zIGEgc3Vic2NyaXB0aW9uIHRvIGJlIGFibGUgdG8gdW5zdWJzY3JpYmVcbiAgICovXG4gIHByaXZhdGUgZ2V0RW50aXRsZW1lbnRzTWFuaXB1bGF0b3JTdWJzY3JpcHRpb248UmVzdWx0PihcbiAgICBkYXRhTWFuaXB1bGF0b3I6IChlbnRpdGxlbWVudHM6IGFueSkgPT4gUmVzdWx0LCBcbiAgICBvYnNlcnZlcjogUGFydGlhbE9ic2VydmVyPFJlc3VsdD5cbiAgKTogU3Vic2NyaXB0aW9uIHtcbiAgICAvLyB1c2VkIGZvciBjb21wdXRpbmcgdGhlIGVudGl0bGVtZW50cyByZXN1bHQgYmVjYXVzZSB3ZSBkb24ndCByZXR1cm4gdGhlIHN0YXRlIGl0c2VsZiwgYnV0IGEgY2FsY3VsYXRlZCBvbmVcbiAgICBjb25zdCBlbnRpdGxlbWVudHNTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxSZXN1bHQ+KHVuZGVmaW5lZCBhcyB1bmtub3duIGFzIFJlc3VsdCk7XG4gICAgXG4gICAgY29uc3Qgc3RhdGVTdWJzY3JpcHRpb24gPSB0aGlzLmVudGl0bGVtZW50c1N0YXRlU3ViamVjdC5zdWJzY3JpYmUoZW50aXRsZW1lbnRzID0+IHtcbiAgICAgIGVudGl0bGVtZW50c1N1YmplY3QubmV4dChkYXRhTWFuaXB1bGF0b3IoZW50aXRsZW1lbnRzKSk7XG4gICAgfSk7XG4gICAgXG4gICAgLy8gc3Vic2NyaWJpbmcgdGhlIGNvbnN1bWVyIG9ic2VydmVyXG4gICAgY29uc3QgZW50aXRsZW1lbnRzUmVzdWx0U3Vic2NyaXB0aW9uID0gZW50aXRsZW1lbnRzU3ViamVjdC5hc09ic2VydmFibGUoKS5zdWJzY3JpYmUob2JzZXJ2ZXIpXG5cbiAgICAvLyBtb25rZXkgcGF0Y2hlZCB0byBtYW5hZ2UgYm90aCB1bi1zdWJzY3JpcHRpb25zOiBzdGF0ZSBhbmQgZW50aXRsZW1lbnRzIG1hbmlwdWxhdGVkIHJlc3VsdFxuICAgIGNvbnN0IG9yaWdpbmFsVW5zdWJzY3JpYmUgPSBlbnRpdGxlbWVudHNSZXN1bHRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUuYmluZChlbnRpdGxlbWVudHNSZXN1bHRTdWJzY3JpcHRpb24pO1xuXG4gICAgZW50aXRsZW1lbnRzUmVzdWx0U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlID0gKCk9PntcbiAgICAgIG9yaWdpbmFsVW5zdWJzY3JpYmUoKTtcbiAgICAgIHN0YXRlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfTtcblxuICAgIHJldHVybiBlbnRpdGxlbWVudHNSZXN1bHRTdWJzY3JpcHRpb247XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIGZlYXR1cmVcbiAgICogQHBhcmFtIG9ic2VydmVyIEZvciByZWNlaXZpbmcgdGhlIGZlYXR1cmUgZW50aXRsZW1lbnRzIHJlc3VsdCBpbmNsdWRpbmcgaWYgdGhlIHVzZXIgaXMgZW50aXRsZWQgdG8gdGhlIGdpdmVuIGZlYXR1cmUuXG4gICAqICAgICAgICAgICAgICAgICBBdHRhY2hpbmcgdGhlIGp1c3RpZmljYXRpb24gaWYgbm90IGVudGl0bGVkXG4gICAqIEByZXR1cm5zIGEgc3Vic2NyaXB0aW9uIHRvIGJlIGFibGUgdG8gdW5zdWJzY3JpYmVcbiAgICogQHRocm93cyB3aGVuIGVudGl0bGVtZW50IGlzIG5vdCBlbmFibGVkIHZpYSBmcm9udGVnZyBvcHRpb25zXG4gICAqL1xuICBwdWJsaWMgZmVhdHVyZUVudGl0bGVtZW50cyQoZmVhdHVyZTogc3RyaW5nLCBvYnNlcnZlcjogUGFydGlhbE9ic2VydmVyPEVudGl0bGVtZW50Pik6IFN1YnNjcmlwdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0RW50aXRsZW1lbnRzTWFuaXB1bGF0b3JTdWJzY3JpcHRpb248RW50aXRsZW1lbnQ+KFxuICAgICAgKGVudGl0bGVtZW50cykgPT4gZ2V0RmVhdHVyZUVudGl0bGVtZW50cyhlbnRpdGxlbWVudHMsIGZlYXR1cmUpLFxuICAgICAgb2JzZXJ2ZXJcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBwZXJtaXNzaW9uXG4gICAqIEBwYXJhbSBvYnNlcnZlciBGb3IgcmVjZWl2aW5nIHRoZSBwZXJtaXNzaW9uIGVudGl0bGVtZW50cyByZXN1bHQgaW5jbHVkaW5nIGlmIHRoZSB1c2VyIGlzIGVudGl0bGVkIHRvIHRoZSBnaXZlbiBwZXJtaXNzaW9uLlxuICAgKiAgICAgICAgICAgICAgICAgQXR0YWNoaW5nIHRoZSBqdXN0aWZpY2F0aW9uIGlmIG5vdCBlbnRpdGxlZFxuICAgKiBAcmV0dXJucyBhIHN1YnNjcmlwdGlvbiB0byBiZSBhYmxlIHRvIHVuc3Vic2NyaWJlXG4gICAqL1xuICBwdWJsaWMgcGVybWlzc2lvbkVudGl0bGVtZW50cyQocGVybWlzc2lvbjogc3RyaW5nLCBvYnNlcnZlcjogUGFydGlhbE9ic2VydmVyPEVudGl0bGVtZW50Pik6IFN1YnNjcmlwdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0RW50aXRsZW1lbnRzTWFuaXB1bGF0b3JTdWJzY3JpcHRpb248RW50aXRsZW1lbnQ+KFxuICAgICAgKGVudGl0bGVtZW50cykgPT4gZ2V0UGVybWlzc2lvbkVudGl0bGVtZW50cyhlbnRpdGxlbWVudHMsIHBlcm1pc3Npb24pLFxuICAgICAgb2JzZXJ2ZXJcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBvcHRpb25zIHBlcm1pc3Npb25LZXkgb3IgZmVhdHVyZUtleSBpbiBhbiBvcHRpb25zIG9iamVjdFxuICAgKiBAcGFyYW0gb2JzZXJ2ZXIgRm9yIHJlY2VpdmluZyB0aGUgcGVybWlzc2lvbiBlbnRpdGxlbWVudHMgcmVzdWx0IGluY2x1ZGluZyBpZiB0aGUgdXNlciBpcyBlbnRpdGxlZCB0byB0aGUgZ2l2ZW4gcGVybWlzc2lvbi5cbiAgICogICAgICAgICAgICAgICAgIEF0dGFjaGluZyB0aGUganVzdGlmaWNhdGlvbiBpZiBub3QgZW50aXRsZWRcbiAgICogQHJldHVybnMgYSBzdWJzY3JpcHRpb24gdG8gYmUgYWJsZSB0byB1bnN1YnNjcmliZVxuICAgKi9cbiAgcHVibGljIGVudGl0bGVtZW50cyQob3B0aW9uczogRW50aXRsZWRUb09wdGlvbnMsIG9ic2VydmVyOiBQYXJ0aWFsT2JzZXJ2ZXI8RW50aXRsZW1lbnQ+KTogU3Vic2NyaXB0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5nZXRFbnRpdGxlbWVudHNNYW5pcHVsYXRvclN1YnNjcmlwdGlvbjxFbnRpdGxlbWVudD4oXG4gICAgICAoZW50aXRsZW1lbnRzKSA9PiBnZXRFbnRpdGxlbWVudHMoZW50aXRsZW1lbnRzLCBvcHRpb25zKSxcbiAgICAgIG9ic2VydmVyXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkIGVudGl0bGVtZW50cyBkYXRhIG9uIGRlbWFuZFxuICAgKiBAcGFyYW0gY2FsbGJhY2sgY2FsbGVkIG9uIHJlcXVlc3QgY29tcGxldGVkIHdpdGggdHJ1ZSBpZiBzdWNjZWVkZWQsIGZhbHNlIGlmIGZhaWxlZFxuICAgKi9cbiAgcHVibGljIGxvYWRFbnRpdGxlbWVudHMoY2FsbGJhY2s/OiBMb2FkRW50aXRsZW1lbnRzQ2FsbGJhY2spOiB2b2lkIHtcbiAgICB0aGlzLmZyb250ZWdnQXBwU2VydmljZS5mcm9udGVnZ0FwcC5sb2FkRW50aXRsZW1lbnRzKGNhbGxiYWNrKTtcbiAgfVxufVxuIl19
105
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJvbnRlZ2ctZW50aXRsZW1lbnRzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mcm9udGVnZy1hcHAvc3JjL2xpYi9mcm9udGVnZy1lbnRpdGxlbWVudHMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlDLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUV0RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7QUFRM0M7Ozs7O0dBS0c7QUFJSCxNQUFNLE9BQU8sMkJBQTJCO0lBR3RDLFlBQW9CLGtCQUFzQztRQUF0Qyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBRmxELHFCQUFnQixHQUFHLElBQUksZUFBZSxDQUFNLFNBQVMsQ0FBQyxDQUFDO1FBRzdELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBbUIsQ0FBQztRQUNwRixJQUFJLENBQUMsdUJBQXVCLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXpDLDhCQUE4QjtRQUM5QixJQUFJLENBQUMsa0JBQWtCLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ3ZELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBbUIsQ0FBQztZQUN2RixJQUFJLENBQUMsdUJBQXVCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzlDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7O09BSUc7SUFDSyx1QkFBdUIsQ0FBQyxTQUFvQjtRQUNsRCxNQUFNLGlCQUFpQixHQUFHLFNBQVMsQ0FBQyxJQUFZLENBQUM7UUFDakQsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxLQUFLLGlCQUFpQixFQUFFO1lBQ3JELE9BQU87U0FDUjtRQUVELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ssOEJBQThCLENBQ3BDLGVBQXVDLEVBQ3ZDLFFBQWlDO1FBRWpDLDRHQUE0RztRQUM1RyxNQUFNLFdBQVcsR0FBRyxJQUFJLGVBQWUsQ0FBUyxTQUE4QixDQUFDLENBQUM7UUFFaEYsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQy9ELFdBQVcsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDMUMsQ0FBQyxDQUFDLENBQUM7UUFFSCxvQ0FBb0M7UUFDcEMsTUFBTSxzQkFBc0IsR0FBRyxXQUFXLENBQUMsWUFBWSxFQUFFLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBRTdFLG9GQUFvRjtRQUNwRixNQUFNLG1CQUFtQixHQUFHLHNCQUFzQixDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUU1RixzQkFBc0IsQ0FBQyxXQUFXLEdBQUcsR0FBRSxFQUFFO1lBQ3ZDLG1CQUFtQixFQUFFLENBQUM7WUFDdEIsaUJBQWlCLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbEMsQ0FBQyxDQUFDO1FBRUYsT0FBTyxzQkFBc0IsQ0FBQztJQUNoQyxDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNJLG9CQUFvQixDQUFDLE9BQWUsRUFBRSxRQUFzQyxFQUFFLGdCQUFtQztRQUN0SCxPQUFPLElBQUksQ0FBQyw4QkFBOEIsQ0FDeEMsR0FBRyxFQUFFLEdBQUcsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsV0FBVyxDQUFDLHNCQUFzQixDQUFDLE9BQU8sRUFBRSxnQkFBZ0IsQ0FBQyxDQUFBLENBQUEsQ0FBQyxFQUNyRyxRQUFRLENBQ1QsQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSx1QkFBdUIsQ0FBQyxVQUFrQixFQUFFLFFBQXNDLEVBQUUsZ0JBQW1DO1FBQzVILE9BQU8sSUFBSSxDQUFDLDhCQUE4QixDQUN4QyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsV0FBVyxDQUFDLHlCQUF5QixDQUFDLFVBQVUsRUFBRSxnQkFBZ0IsQ0FBQyxFQUNqRyxRQUFRLENBQ1QsQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxhQUFhLENBQUMsT0FBMEIsRUFBRSxRQUFzQyxFQUFFLGdCQUFtQztRQUMxSCxPQUFPLElBQUksQ0FBQyw4QkFBOEIsQ0FDeEMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFLGdCQUFnQixDQUFDLEVBQ3BGLFFBQVEsQ0FDVCxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7T0FHRztJQUNJLGdCQUFnQixDQUFDLFFBQW1DO1FBQ3pELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDakUsQ0FBQzs7eUhBN0dVLDJCQUEyQjs2SEFBM0IsMkJBQTJCLGNBRjFCLE1BQU07NEZBRVAsMkJBQTJCO2tCQUh2QyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFN1YnNjcmlwdGlvbiwgUGFydGlhbE9ic2VydmVyLCBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEF1dGhTdGF0ZSB9IGZyb20gJ0Bmcm9udGVnZy9yZWR1eC1zdG9yZSc7XG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBFbnRpdGxlbWVudCwgTG9hZEVudGl0bGVtZW50c0NhbGxiYWNrLCBFbnRpdGxlZFRvT3B0aW9ucywgQ3VzdG9tQXR0cmlidXRlcyB9IGZyb20gJ0Bmcm9udGVnZy90eXBlcyc7XG5cbmltcG9ydCB7IEZyb250ZWdnU3RhdGUgfSBmcm9tICdAZnJvbnRlZ2cvcmVkdXgtc3RvcmUnO1xuaW1wb3J0IHsgRnJvbnRlZ2dBcHBTZXJ2aWNlIH0gZnJvbSAnLi9mcm9udGVnZy1hcHAuc2VydmljZSc7XG5cbnR5cGUgVXNlciA9IEZyb250ZWdnU3RhdGVbJ2F1dGgnXVsndXNlciddO1xuXG4vKipcbiAqIEFuIGVudGl0bGVtZW50cyBzZXJ2aWNlIGZvcjogXG4gKiAgIDEuIE1hbmFnaW5nIHN0YXRlIHN1YnNjcmlwdGlvbi5cbiAqICAgMi4gUXVlcnlpbmcgYWJvdXQgZmVhdHVyZSBhbmQgcGVybWlzc2lvbiBlbnRpdGxlbWVudHMgc3RhdGUuXG4gKiAgIDMuIExvYWQgZW50aXRsZW1lbnRzIG9uIGRlbWFuZC5cbiAqL1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEZyb250ZWdnRW50aXRsZW1lbnRzU2VydmljZSB7XG4gIHByaXZhdGUgdXNlclN0YXRlU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55Pih1bmRlZmluZWQpO1xuICBcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBmcm9udGVnZ0FwcFNlcnZpY2U6IEZyb250ZWdnQXBwU2VydmljZSkge1xuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5mcm9udGVnZ0FwcFNlcnZpY2UuZnJvbnRlZ2dBcHAuc3RvcmUuZ2V0U3RhdGUoKSBhcyBGcm9udGVnZ1N0YXRlO1xuICAgIHRoaXMudXBkYXRlVXNlclN0YXRlSWZOZWVkZWQoc3RhdGUuYXV0aCk7XG5cbiAgICAvLyBNZW1vaXplZCBlbnRpdGxlbWVudHMgU3RhdGVcbiAgICB0aGlzLmZyb250ZWdnQXBwU2VydmljZS5mcm9udGVnZ0FwcC5zdG9yZS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgY29uc3QgbmV3U3RhdGUgPSB0aGlzLmZyb250ZWdnQXBwU2VydmljZS5mcm9udGVnZ0FwcC5zdG9yZS5nZXRTdGF0ZSgpIGFzIEZyb250ZWdnU3RhdGU7XG4gICAgICB0aGlzLnVwZGF0ZVVzZXJTdGF0ZUlmTmVlZGVkKG5ld1N0YXRlLmF1dGgpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyaWdnZXIgZW50aXRsZW1lbnRzIHN1YmplY3QgY2hhbmdlIGV2ZW50IGlmIHRoZSBlbnRpdGxlbWVudHMgcmVmZXJlbmNlIGNoYW5nZXNcbiAgICogTm8gbmVlZCBmb3IgZGVlcCBlcXVhbCBiZWNhdXNlIHdlIGFscmVhZHkgY2hlY2sgaXQgaW50ZXJuYWxseVxuICAgKiBAcGFyYW0gYXV0aFN0YXRlXG4gICAqL1xuICBwcml2YXRlIHVwZGF0ZVVzZXJTdGF0ZUlmTmVlZGVkKGF1dGhTdGF0ZTogQXV0aFN0YXRlKTogdm9pZCB7XG4gICAgY29uc3QgZW50aXRsZW1lbnRzU3RhdGUgPSBhdXRoU3RhdGUudXNlciBhcyBVc2VyO1xuICAgIGlmICh0aGlzLnVzZXJTdGF0ZVN1YmplY3QudmFsdWUgPT09IGVudGl0bGVtZW50c1N0YXRlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy51c2VyU3RhdGVTdWJqZWN0Lm5leHQoZW50aXRsZW1lbnRzU3RhdGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBmdW5jdGlvbiBnaXZlcyB0aGUgYWJpbGl0eSB0byByZXR1cm4gYSBtYW5pcHVsYXRlZCBkYXRhIG9mIHRoZSB1c2VyIHN0YXRlIGFzIGEgc3Vic2NyaXB0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gZGF0YU1hbmlwdWxhdG9yIE1hbmlwdWxhdG9yIGZ1bmN0aW9uIHRoYXQgcmVjZWl2ZXMgdXNlciBzdGF0ZSBhbmQgcmV0dXJucyBhIG1hbmlwdWxhdGVkIGRhdGFcbiAgICogQHBhcmFtIG9ic2VydmVyIEZvciByZWNlaXZpbmcgbWFuaXB1bGF0ZWQgZGF0YSByZXN1bHRcbiAgICogQHJldHVybnMgYSBzdWJzY3JpcHRpb24gdG8gYmUgYWJsZSB0byB1bnN1YnNjcmliZVxuICAgKi9cbiAgcHJpdmF0ZSBnZXRVc2VyTWFuaXB1bGF0b3JTdWJzY3JpcHRpb248UmVzdWx0PihcbiAgICBkYXRhTWFuaXB1bGF0b3I6ICh1c2VyOiBVc2VyKSA9PiBSZXN1bHQsIFxuICAgIG9ic2VydmVyOiBQYXJ0aWFsT2JzZXJ2ZXI8UmVzdWx0PlxuICApOiBTdWJzY3JpcHRpb24ge1xuICAgIC8vIHVzZWQgZm9yIGNvbXB1dGluZyB0aGUgZW50aXRsZW1lbnRzIHJlc3VsdCBiZWNhdXNlIHdlIGRvbid0IHJldHVybiB0aGUgc3RhdGUgaXRzZWxmLCBidXQgYSBjYWxjdWxhdGVkIG9uZVxuICAgIGNvbnN0IHVzZXJTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxSZXN1bHQ+KHVuZGVmaW5lZCBhcyB1bmtub3duIGFzIFJlc3VsdCk7XG4gICAgXG4gICAgY29uc3Qgc3RhdGVTdWJzY3JpcHRpb24gPSB0aGlzLnVzZXJTdGF0ZVN1YmplY3Quc3Vic2NyaWJlKHVzZXIgPT4ge1xuICAgICAgdXNlclN1YmplY3QubmV4dChkYXRhTWFuaXB1bGF0b3IodXNlcikpO1xuICAgIH0pO1xuICAgIFxuICAgIC8vIHN1YnNjcmliaW5nIHRoZSBjb25zdW1lciBvYnNlcnZlclxuICAgIGNvbnN0IHVzZXJSZXN1bHRTdWJzY3JpcHRpb24gPSB1c2VyU3ViamVjdC5hc09ic2VydmFibGUoKS5zdWJzY3JpYmUob2JzZXJ2ZXIpXG5cbiAgICAvLyBtb25rZXkgcGF0Y2hlZCB0byBtYW5hZ2UgYm90aCB1bi1zdWJzY3JpcHRpb25zOiBzdGF0ZSBhbmQgdXNlciBtYW5pcHVsYXRlZCByZXN1bHRcbiAgICBjb25zdCBvcmlnaW5hbFVuc3Vic2NyaWJlID0gdXNlclJlc3VsdFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZS5iaW5kKHVzZXJSZXN1bHRTdWJzY3JpcHRpb24pO1xuXG4gICAgdXNlclJlc3VsdFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSA9ICgpPT57XG4gICAgICBvcmlnaW5hbFVuc3Vic2NyaWJlKCk7XG4gICAgICBzdGF0ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH07XG5cbiAgICByZXR1cm4gdXNlclJlc3VsdFN1YnNjcmlwdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gZmVhdHVyZVxuICAgKiBAcGFyYW0gb2JzZXJ2ZXIgRm9yIHJlY2VpdmluZyB0aGUgZmVhdHVyZSBlbnRpdGxlbWVudHMgcmVzdWx0IGluY2x1ZGluZyBpZiB0aGUgdXNlciBpcyBlbnRpdGxlZCB0byB0aGUgZ2l2ZW4gZmVhdHVyZS5cbiAgICogICAgICAgICAgICAgICAgIEF0dGFjaGluZyB0aGUganVzdGlmaWNhdGlvbiBpZiBub3QgZW50aXRsZWRcbiAgICogQHBhcmFtIGN1c3RvbUF0dHJpYnV0ZXMgY29uc3VtZXIgYXR0cmlidXRlc1xuICAgKiBAcmV0dXJucyBhIHN1YnNjcmlwdGlvbiB0byBiZSBhYmxlIHRvIHVuc3Vic2NyaWJlXG4gICAqIEB0aHJvd3Mgd2hlbiBlbnRpdGxlbWVudCBpcyBub3QgZW5hYmxlZCB2aWEgZnJvbnRlZ2cgb3B0aW9uc1xuICAgKi9cbiAgcHVibGljIGZlYXR1cmVFbnRpdGxlbWVudHMkKGZlYXR1cmU6IHN0cmluZywgb2JzZXJ2ZXI6IFBhcnRpYWxPYnNlcnZlcjxFbnRpdGxlbWVudD4sIGN1c3RvbUF0dHJpYnV0ZXM/OiBDdXN0b21BdHRyaWJ1dGVzKTogU3Vic2NyaXB0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5nZXRVc2VyTWFuaXB1bGF0b3JTdWJzY3JpcHRpb248RW50aXRsZW1lbnQ+KFxuICAgICAgKCkgPT4geyByZXR1cm4gdGhpcy5mcm9udGVnZ0FwcFNlcnZpY2UuZnJvbnRlZ2dBcHAuZ2V0RmVhdHVyZUVudGl0bGVtZW50cyhmZWF0dXJlLCBjdXN0b21BdHRyaWJ1dGVzKX0sXG4gICAgICBvYnNlcnZlclxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHBlcm1pc3Npb25cbiAgICogQHBhcmFtIG9ic2VydmVyIEZvciByZWNlaXZpbmcgdGhlIHBlcm1pc3Npb24gZW50aXRsZW1lbnRzIHJlc3VsdCBpbmNsdWRpbmcgaWYgdGhlIHVzZXIgaXMgZW50aXRsZWQgdG8gdGhlIGdpdmVuIHBlcm1pc3Npb24uXG4gICAqICAgICAgICAgICAgICAgICBBdHRhY2hpbmcgdGhlIGp1c3RpZmljYXRpb24gaWYgbm90IGVudGl0bGVkXG4gICAqIEBwYXJhbSBjdXN0b21BdHRyaWJ1dGVzIGNvbnN1bWVyIGF0dHJpYnV0ZXNcbiAgICogQHJldHVybnMgYSBzdWJzY3JpcHRpb24gdG8gYmUgYWJsZSB0byB1bnN1YnNjcmliZVxuICAgKi9cbiAgcHVibGljIHBlcm1pc3Npb25FbnRpdGxlbWVudHMkKHBlcm1pc3Npb246IHN0cmluZywgb2JzZXJ2ZXI6IFBhcnRpYWxPYnNlcnZlcjxFbnRpdGxlbWVudD4sIGN1c3RvbUF0dHJpYnV0ZXM/OiBDdXN0b21BdHRyaWJ1dGVzKTogU3Vic2NyaXB0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5nZXRVc2VyTWFuaXB1bGF0b3JTdWJzY3JpcHRpb248RW50aXRsZW1lbnQ+KFxuICAgICAgKCkgPT4gdGhpcy5mcm9udGVnZ0FwcFNlcnZpY2UuZnJvbnRlZ2dBcHAuZ2V0UGVybWlzc2lvbkVudGl0bGVtZW50cyhwZXJtaXNzaW9uLCBjdXN0b21BdHRyaWJ1dGVzKSxcbiAgICAgIG9ic2VydmVyXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gb3B0aW9ucyBwZXJtaXNzaW9uS2V5IG9yIGZlYXR1cmVLZXkgaW4gYW4gb3B0aW9ucyBvYmplY3RcbiAgICogQHBhcmFtIG9ic2VydmVyIEZvciByZWNlaXZpbmcgdGhlIHBlcm1pc3Npb24gZW50aXRsZW1lbnRzIHJlc3VsdCBpbmNsdWRpbmcgaWYgdGhlIHVzZXIgaXMgZW50aXRsZWQgdG8gdGhlIGdpdmVuIHBlcm1pc3Npb24uXG4gICAqICAgICAgICAgICAgICAgICBBdHRhY2hpbmcgdGhlIGp1c3RpZmljYXRpb24gaWYgbm90IGVudGl0bGVkXG4gICAqIEBwYXJhbSBjdXN0b21BdHRyaWJ1dGVzIGNvbnN1bWVyIGF0dHJpYnV0ZXNcbiAgICogQHJldHVybnMgYSBzdWJzY3JpcHRpb24gdG8gYmUgYWJsZSB0byB1bnN1YnNjcmliZVxuICAgKi9cbiAgcHVibGljIGVudGl0bGVtZW50cyQob3B0aW9uczogRW50aXRsZWRUb09wdGlvbnMsIG9ic2VydmVyOiBQYXJ0aWFsT2JzZXJ2ZXI8RW50aXRsZW1lbnQ+LCBjdXN0b21BdHRyaWJ1dGVzPzogQ3VzdG9tQXR0cmlidXRlcyk6IFN1YnNjcmlwdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VXNlck1hbmlwdWxhdG9yU3Vic2NyaXB0aW9uPEVudGl0bGVtZW50PihcbiAgICAgICgpID0+IHRoaXMuZnJvbnRlZ2dBcHBTZXJ2aWNlLmZyb250ZWdnQXBwLmdldEVudGl0bGVtZW50cyhvcHRpb25zLCBjdXN0b21BdHRyaWJ1dGVzKSxcbiAgICAgIG9ic2VydmVyXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkIGVudGl0bGVtZW50cyBkYXRhIG9uIGRlbWFuZFxuICAgKiBAcGFyYW0gY2FsbGJhY2sgY2FsbGVkIG9uIHJlcXVlc3QgY29tcGxldGVkIHdpdGggdHJ1ZSBpZiBzdWNjZWVkZWQsIGZhbHNlIGlmIGZhaWxlZFxuICAgKi9cbiAgcHVibGljIGxvYWRFbnRpdGxlbWVudHMoY2FsbGJhY2s/OiBMb2FkRW50aXRsZW1lbnRzQ2FsbGJhY2spOiB2b2lkIHtcbiAgICB0aGlzLmZyb250ZWdnQXBwU2VydmljZS5mcm9udGVnZ0FwcC5sb2FkRW50aXRsZW1lbnRzKGNhbGxiYWNrKTtcbiAgfVxufVxuIl19
@@ -4,7 +4,7 @@ import { CommonModule } from '@angular/common';
4
4
  import * as i1 from '@angular/router';
5
5
  import { DefaultUrlSerializer, RouterModule } from '@angular/router';
6
6
  import { initialize } from '@frontegg/js';
7
- import { isAuthRoute, authStoreName, subscriptionsStoreName, getFeatureEntitlements, getPermissionEntitlements, getEntitlements } from '@frontegg/redux-store';
7
+ import { isAuthRoute, authStoreName, subscriptionsStoreName } from '@frontegg/redux-store';
8
8
  import { BehaviorSubject, Observable } from 'rxjs';
9
9
  import { FronteggFrameworks, ContextHolder } from '@frontegg/rest-api';
10
10
  export { ContextHolder } from '@frontegg/rest-api';
@@ -706,13 +706,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
706
706
  class FronteggEntitlementsService {
707
707
  constructor(fronteggAppService) {
708
708
  this.fronteggAppService = fronteggAppService;
709
- this.entitlementsStateSubject = new BehaviorSubject(undefined);
709
+ this.userStateSubject = new BehaviorSubject(undefined);
710
710
  const state = this.fronteggAppService.fronteggApp.store.getState();
711
- this.updateEntitlementsStateIfNeeded(state.auth);
711
+ this.updateUserStateIfNeeded(state.auth);
712
712
  // Memoized entitlements State
713
713
  this.fronteggAppService.fronteggApp.store.subscribe(() => {
714
714
  const newState = this.fronteggAppService.fronteggApp.store.getState();
715
- this.updateEntitlementsStateIfNeeded(newState.auth);
715
+ this.updateUserStateIfNeeded(newState.auth);
716
716
  });
717
717
  }
718
718
  /**
@@ -720,64 +720,66 @@ class FronteggEntitlementsService {
720
720
  * No need for deep equal because we already check it internally
721
721
  * @param authState
722
722
  */
723
- updateEntitlementsStateIfNeeded(authState) {
724
- var _a;
725
- const entitlementsState = (_a = authState.user) === null || _a === void 0 ? void 0 : _a.entitlements;
726
- if (this.entitlementsStateSubject.value === entitlementsState) {
723
+ updateUserStateIfNeeded(authState) {
724
+ const entitlementsState = authState.user;
725
+ if (this.userStateSubject.value === entitlementsState) {
727
726
  return;
728
727
  }
729
- this.entitlementsStateSubject.next(entitlementsState);
728
+ this.userStateSubject.next(entitlementsState);
730
729
  }
731
730
  /**
732
- * The function gives the ability to return a manipulated data of the entitlements state as a subscription.
731
+ * The function gives the ability to return a manipulated data of the user state as a subscription.
733
732
  *
734
- * @param dataManipulator Manipulator function that receives entitlements state and returns a manipulated data
733
+ * @param dataManipulator Manipulator function that receives user state and returns a manipulated data
735
734
  * @param observer For receiving manipulated data result
736
735
  * @returns a subscription to be able to unsubscribe
737
736
  */
738
- getEntitlementsManipulatorSubscription(dataManipulator, observer) {
737
+ getUserManipulatorSubscription(dataManipulator, observer) {
739
738
  // used for computing the entitlements result because we don't return the state itself, but a calculated one
740
- const entitlementsSubject = new BehaviorSubject(undefined);
741
- const stateSubscription = this.entitlementsStateSubject.subscribe(entitlements => {
742
- entitlementsSubject.next(dataManipulator(entitlements));
739
+ const userSubject = new BehaviorSubject(undefined);
740
+ const stateSubscription = this.userStateSubject.subscribe(user => {
741
+ userSubject.next(dataManipulator(user));
743
742
  });
744
743
  // subscribing the consumer observer
745
- const entitlementsResultSubscription = entitlementsSubject.asObservable().subscribe(observer);
746
- // monkey patched to manage both un-subscriptions: state and entitlements manipulated result
747
- const originalUnsubscribe = entitlementsResultSubscription.unsubscribe.bind(entitlementsResultSubscription);
748
- entitlementsResultSubscription.unsubscribe = () => {
744
+ const userResultSubscription = userSubject.asObservable().subscribe(observer);
745
+ // monkey patched to manage both un-subscriptions: state and user manipulated result
746
+ const originalUnsubscribe = userResultSubscription.unsubscribe.bind(userResultSubscription);
747
+ userResultSubscription.unsubscribe = () => {
749
748
  originalUnsubscribe();
750
749
  stateSubscription.unsubscribe();
751
750
  };
752
- return entitlementsResultSubscription;
751
+ return userResultSubscription;
753
752
  }
754
753
  /**
755
754
  * @param feature
756
755
  * @param observer For receiving the feature entitlements result including if the user is entitled to the given feature.
757
756
  * Attaching the justification if not entitled
757
+ * @param customAttributes consumer attributes
758
758
  * @returns a subscription to be able to unsubscribe
759
759
  * @throws when entitlement is not enabled via frontegg options
760
760
  */
761
- featureEntitlements$(feature, observer) {
762
- return this.getEntitlementsManipulatorSubscription((entitlements) => getFeatureEntitlements(entitlements, feature), observer);
761
+ featureEntitlements$(feature, observer, customAttributes) {
762
+ return this.getUserManipulatorSubscription(() => { return this.fronteggAppService.fronteggApp.getFeatureEntitlements(feature, customAttributes); }, observer);
763
763
  }
764
764
  /**
765
765
  * @param permission
766
766
  * @param observer For receiving the permission entitlements result including if the user is entitled to the given permission.
767
767
  * Attaching the justification if not entitled
768
+ * @param customAttributes consumer attributes
768
769
  * @returns a subscription to be able to unsubscribe
769
770
  */
770
- permissionEntitlements$(permission, observer) {
771
- return this.getEntitlementsManipulatorSubscription((entitlements) => getPermissionEntitlements(entitlements, permission), observer);
771
+ permissionEntitlements$(permission, observer, customAttributes) {
772
+ return this.getUserManipulatorSubscription(() => this.fronteggAppService.fronteggApp.getPermissionEntitlements(permission, customAttributes), observer);
772
773
  }
773
774
  /**
774
775
  * @param options permissionKey or featureKey in an options object
775
776
  * @param observer For receiving the permission entitlements result including if the user is entitled to the given permission.
776
777
  * Attaching the justification if not entitled
778
+ * @param customAttributes consumer attributes
777
779
  * @returns a subscription to be able to unsubscribe
778
780
  */
779
- entitlements$(options, observer) {
780
- return this.getEntitlementsManipulatorSubscription((entitlements) => getEntitlements(entitlements, options), observer);
781
+ entitlements$(options, observer, customAttributes) {
782
+ return this.getUserManipulatorSubscription(() => this.fronteggAppService.fronteggApp.getEntitlements(options, customAttributes), observer);
781
783
  }
782
784
  /**
783
785
  * Load entitlements data on demand