@techextensor/tab-sdk 0.0.6 → 0.0.8

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.
@@ -39,7 +39,9 @@ export class UiService {
39
39
  ...(options.title && { title: options.title }),
40
40
  ...(options.width && { width: options.width }),
41
41
  ...(options.height && { height: options.height }),
42
- ...(options.customClass && { customClass: options.customClass })
42
+ ...(options.customClass && { customClass: options.customClass }),
43
+ ...(options.refresher && { refresher: options.refresher }),
44
+ ...(options.closer && { closer: options.closer })
43
45
  };
44
46
  TabSdk.util?.openScreen(ScreenDisplayMode.Sidebar, options.screenId, options.reqtokens || undefined, options.submission || undefined, Object.keys(otherConfiguration).length > 0 ? otherConfiguration : undefined);
45
47
  }
@@ -53,7 +55,9 @@ export class UiService {
53
55
  ...(options.title && { title: options.title }),
54
56
  ...(options.width && { width: options.width }),
55
57
  ...(options.height && { height: options.height }),
56
- ...(options.customClass && { customClass: options.customClass })
58
+ ...(options.customClass && { customClass: options.customClass }),
59
+ ...(options.refresher && { refresher: options.refresher }),
60
+ ...(options.closer && { closer: options.closer })
57
61
  };
58
62
  TabSdk.util?.openScreen(ScreenDisplayMode.Popup, options.screenId, options.reqtokens || undefined, options.submission || undefined, Object.keys(otherConfiguration).length > 0 ? otherConfiguration : undefined);
59
63
  }
@@ -78,9 +82,9 @@ export class UiService {
78
82
  *
79
83
  * @param url - The URL to navigate to.
80
84
  */
81
- navigateToUrl(url) {
82
- TabSdk.util?.navigateToUrl({
83
- url,
85
+ navigateToUrl(params) {
86
+ TabSdk.util?.navigateTo({
87
+ ...params,
84
88
  type: NavigationType.NavigateToUrl
85
89
  });
86
90
  }
@@ -90,9 +94,9 @@ export class UiService {
90
94
  * @param options - The options for navigation, including subDomain, appCode, and url.
91
95
  */
92
96
  navigateToSubdomain(options) {
93
- TabSdk.util?.navigateToUrl({
97
+ TabSdk.util?.navigateTo({
94
98
  ...options,
95
- type: NavigationType.NavigateToUrl
99
+ type: NavigationType.NavigateToSubdomain
96
100
  });
97
101
  }
98
102
  /**
@@ -101,20 +105,43 @@ export class UiService {
101
105
  * @returns The screen ID if present in the URL, otherwise undefined.
102
106
  */
103
107
  getActiveUrlScreenId() {
104
- // Split the URL pathname using the app name and '/screen/' as delimiters
105
- const urlParts = window?.location?.pathname?.split(TabSdk.store.appName + '/screen/');
108
+ // Split the URL pathname into parts using the '/' character as a delimiter
109
+ const urlParts = window?.location?.pathname?.split('/');
106
110
  // Extract the screen ID part and remove any query parameters
107
- const screenId = urlParts?.[1]?.split('?')[0];
111
+ const screenId = urlParts?.length > 1 ? urlParts?.[urlParts?.length - 1]?.split('?')[0] : undefined;
108
112
  // Return the screen ID or undefined if not found
109
113
  return screenId;
110
114
  }
115
+ /**
116
+ * Retrieves the active redirect URL by combining the active screen ID and any query parameters.
117
+ *
118
+ * @returns The constructed redirect URL or undefined if no screen ID is present.
119
+ */
120
+ getActiveRedirectUrl() {
121
+ // Get the active screen ID from the current URL
122
+ const screenId = this.getActiveUrlScreenId();
123
+ let redirectURL;
124
+ // Check if the current URL contains a screen ID
125
+ if (screenId) {
126
+ // Initialize the redirect URL with the screen ID
127
+ redirectURL = screenId;
128
+ // Parse the current URL's query parameters
129
+ const queryParams = new URLSearchParams(window.location.search);
130
+ // If there are query parameters, append them to the redirect URL
131
+ if (queryParams.toString()) {
132
+ redirectURL += `&${queryParams.toString()}`;
133
+ }
134
+ }
135
+ // Return the constructed redirect URL or undefined
136
+ return redirectURL;
137
+ }
111
138
  /**
112
139
  * Show a notification to the user.
113
140
  *
114
141
  * @param options The options for the notification.
115
142
  */
116
143
  notify(options) {
117
- this._notificationService.notify({
144
+ return this._notificationService.notify({
118
145
  type: options.type,
119
146
  message: TabSdk.translator.translate(options.message),
120
147
  ...(options?.title ? { title: TabSdk.translator.translate(options.title) } : {}),
@@ -127,7 +154,7 @@ export class UiService {
127
154
  * @param options - The options for the notification, including message, title, and configuration.
128
155
  */
129
156
  showSuccess(options) {
130
- this.notify({
157
+ return this.notify({
131
158
  ...options,
132
159
  type: NotificationType.Success,
133
160
  title: options?.title ?? 'Success'
@@ -139,7 +166,7 @@ export class UiService {
139
166
  * @param options - The options for the notification, including message, title, and configuration.
140
167
  */
141
168
  showWarning(options) {
142
- this.notify({
169
+ return this.notify({
143
170
  ...options,
144
171
  type: NotificationType.Warning,
145
172
  title: options?.title ?? 'Warning'
@@ -151,7 +178,7 @@ export class UiService {
151
178
  * @param options - The options for the notification, including message, title, and configuration.
152
179
  */
153
180
  showInfo(options) {
154
- this.notify({
181
+ return this.notify({
155
182
  ...options,
156
183
  type: NotificationType.Info,
157
184
  title: options?.title ?? 'Info'
@@ -163,12 +190,21 @@ export class UiService {
163
190
  * @param options - The options for the notification, including message, title, and configuration.
164
191
  */
165
192
  showError(options) {
166
- this.notify({
193
+ return this.notify({
167
194
  ...options,
168
195
  type: NotificationType.Error,
169
196
  title: options?.title ?? 'Error'
170
197
  });
171
198
  }
199
+ /**
200
+ * Clears a notification by ID.
201
+ *
202
+ * @param notificationId - The ID of the notification to clear.
203
+ * @returns The cleared notification, or null if the notification doesn't exist.
204
+ */
205
+ clearNotification(notificationId) {
206
+ return this._notificationService.clearNotification(notificationId);
207
+ }
172
208
  /**
173
209
  * Displays a confirmation dialog to the user and returns a promise that resolves
174
210
  * to a boolean indicating whether the user confirmed the action.
@@ -305,4 +341,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
305
341
  providedIn: 'root'
306
342
  }]
307
343
  }] });
308
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhYi1zZGsvc3JjL2xpYi91aS91aS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBT25ELE9BQU8sRUFBRSxjQUFjLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDNUMsT0FBTyxFQUFnRCxtQkFBbUIsRUFBdUIsbUJBQW1CLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQzs7QUFLL0ssTUFBTSxPQUFPLFNBQVM7SUFDRCxvQkFBb0IsR0FBd0IsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDeEUsb0JBQW9CLEdBQXdCLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBRXpGOzs7OztPQUtHO0lBQ0gsVUFBVSxDQUFDLE9BQTBCO1FBQ2pDLE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLEdBQUcsT0FBTyxDQUFDO1FBRTdGLFFBQVEsSUFBSSxFQUFFLENBQUM7WUFDWCxLQUFLLGlCQUFpQixDQUFDLE9BQU87Z0JBQzFCLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO2dCQUN6RixNQUFNO1lBRVYsS0FBSyxpQkFBaUIsQ0FBQyxLQUFLO2dCQUN4QixJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFF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cnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gICAgU2NyZWVuT3Blbk9wdGlvbnMsXG4gICAgTmF2aWdhdGlvbk9wdGlvbnMsXG4gICAgQmFzZVNjcmVlbk9wdGlvbnMsXG4gICAgTmF2aWdhdGVUb1N1YmRvbWFpbk9wdGlvbnNcbn0gZnJvbSAnLi4vaW50ZXJmYWNlL3VpLmludGVyZmFjZSc7XG5pbXBvcnQgeyBOYXZpZ2F0aW9uVHlwZSwgU2NyZWVuRGlzcGxheU1vZGUgfSBmcm9tICcuLi9lbnVtL3VpLmVudW0nO1xuaW1wb3J0IHsgVGFiU2RrIH0gZnJvbSAnLi4vdGFiLXNkay5zZXJ2aWNlJztcbmltcG9ydCB7IEJhc2VOb3RpZmljYXRpb25PcHRpb25zLCBDb25maXJtYXRpb25PcHRpb25zLCBDb25maXJtYXRpb25TZXJ2aWNlLCBOb3RpZmljYXRpb25PcHRpb25zLCBOb3RpZmljYXRpb25TZXJ2aWNlLCBOb3RpZmljYXRpb25UeXBlIH0gZnJvbSAnQHRlY2hleHRlbnNvci90YWItY29yZS11dGlsaXR5JztcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBVaVNlcnZpY2Uge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX25vdGlmaWNhdGlvblNlcnZpY2U6IE5vdGlmaWNhdGlvblNlcnZpY2UgPSBpbmplY3QoTm90aWZpY2F0aW9uU2VydmljZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfY29uZmlybWF0aW9uU2VydmljZTogQ29uZmlybWF0aW9uU2VydmljZSA9IGluamVjdChDb25maXJtYXRpb25TZXJ2aWNlKTtcblxuICAgIC8qKlxuICAgICAqIE9wZW4gYSBzY3JlZW4gd2l0aCB0aGUgZ2l2ZW4gb3B0aW9ucy4gVGhlIG1vZGUgZGV0ZXJtaW5lcyBob3cgdGhlIHNjcmVlbiBpc1xuICAgICAqIGRpc3BsYXllZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIGZvciBvcGVuaW5nIHRoZSBzY3JlZW4uXG4gICAgICovXG4gICAgb3BlblNjcmVlbihvcHRpb25zOiBTY3JlZW5PcGVuT3B0aW9ucyk6IHZvaWQge1xuICAgICAgICBjb25zdCB7IG1vZGUsIHNjcmVlbklkLCByZXF0b2tlbnMsIHN1Ym1pc3Npb24sIHRpdGxlLCB3aWR0aCwgaGVpZ2h0LCBjdXN0b21DbGFzcyB9ID0gb3B0aW9ucztcblxuICAgICAgICBzd2l0Y2ggKG1vZGUpIHtcbiAgICAgICAgICAgIGNhc2UgU2NyZWVuRGlzcGxheU1vZGUuU2lkZWJhcjpcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dTaWRlYmFyKHsgc2NyZWVuSWQsIHJlcXRva2Vucywgc3VibWlzc2lvbiwgdGl0bGUsIHdpZHRoLCBoZWlnaHQsIGN1c3RvbUNsYXNzIH0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIFNjcmVlbkRpc3BsYXlNb2RlLlBvcHVwOlxuICAgICAgICAgICAgICAgIHRoaXMuc2hvd0RpYWxvZyh7IHNjcmVlbklkLCByZXF0b2tlbnMsIHN1Ym1pc3Npb24sIHRpdGxlLCB3aWR0aCwgaGVpZ2h0LCBjdXN0b21DbGFzcyB9KTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSBTY3JlZW5EaXNwbGF5TW9kZS5TYW1lVGFiOlxuICAgICAgICAgICAgICAgIHRoaXMubmF2aWdhdGVUbyh7IHNjcmVlbklkLCByZXF0b2tlbnMgfSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgU2NyZWVuRGlzcGxheU1vZGUuTmV3VGFiOlxuICAgICAgICAgICAgICAgIHRoaXMub3BlbkluTmV3VGFiKHsgc2NyZWVuSWQsIHJlcXRva2VucyB9KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE9wZW5zIGEgc2NyZWVuIGluIGEgc2lkZWJhci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIGZvciBvcGVuaW5nIHRoZSBzaWRlYmFyLlxuICAgICAqL1xuICAgIHNob3dTaWRlYmFyKG9wdGlvbnM6IEJhc2VTY3JlZW5PcHRpb25zKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG90aGVyQ29uZmlndXJhdGlvbiA9IHtcbiAgICAgICAgICAgIC4uLihvcHRpb25zLnRpdGxlICYmIHsgdGl0bGU6IG9wdGlvbnMudGl0bGUgfSksXG4gICAgICAgICAgICAuLi4ob3B0aW9ucy53aWR0aCAmJiB7IHdpZHRoOiBvcHRpb25zLndpZHRoIH0pLFxuICAgICAgICAgICAgLi4uKG9wdGlvbnMuaGVpZ2h0ICYmIHsgaGVpZ2h0OiBvcHRpb25zLmhlaWdodCB9KSxcbiAgICAgICAgICAgIC4uLihvcHRpb25zLmN1c3RvbUNsYXNzICYmIHsgY3VzdG9tQ2xhc3M6IG9wdGlvbnMuY3VzdG9tQ2xhc3MgfSlcbiAgICAgICAgfTtcblxuICAgICAgICBUYWJTZGsudXRpbD8ub3BlblNjcmVlbihcbiAgICAgICAgICAgIFNjcmVlbkRpc3BsYXlNb2RlLlNpZGViYXIsXG4gICAgICAgICAgICBvcHRpb25zLnNjcmVlbklkLFxuICAgICAgICAgICAgb3B0aW9ucy5yZXF0b2tlbnMgfHwgdW5kZWZpbmVkLFxuICAgICAgICAgICAgb3B0aW9ucy5zdWJtaXNzaW9uIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKG90aGVyQ29uZmlndXJhdGlvbikubGVuZ3RoID4gMCA/IG90aGVyQ29uZmlndXJhdGlvbiA6IHVuZGVmaW5lZFxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE9wZW5zIGEgc2NyZWVuIGluIGEgcG9wdXAgZGlhbG9nLlxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgZm9yIG9wZW5pbmcgdGhlIGRpYWxvZy5cbiAgICAgKi9cbiAgICBzaG93RGlhbG9nKG9wdGlvbnM6IEJhc2VTY3JlZW5PcHRpb25zKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG90aGVyQ29uZmlndXJhdGlvbiA9IHtcbiAgICAgICAgICAgIC4uLihvcHRpb25zLnRpdGxlICYmIHsgdGl0bGU6IG9wdGlvbnMudGl0bGUgfSksXG4gICAgICAgICAgICAuLi4ob3B0aW9ucy53aWR0aCAmJiB7IHdpZHRoOiBvcHRpb25zLndpZHRoIH0pLFxuICAgICAgICAgICAgLi4uKG9wdGlvbnMuaGVpZ2h0ICYmIHsgaGVpZ2h0OiBvcHRpb25zLmhlaWdodCB9KSxcbiAgICAgICAgICAgIC4uLihvcHRpb25zLmN1c3RvbUNsYXNzICYmIHsgY3VzdG9tQ2xhc3M6IG9wdGlvbnMuY3VzdG9tQ2xhc3MgfSlcbiAgICAgICAgfTtcblxuICAgICAgICBUYWJTZGsudXRpbD8ub3BlblNjcmVlbihcbiAgICAgICAgICAgIFNjcmVlbkRpc3BsYXlNb2RlLlBvcHVwLFxuICAgICAgICAgICAgb3B0aW9ucy5zY3JlZW5JZCxcbiAgICAgICAgICAgIG9wdGlvbnMucmVxdG9rZW5zIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIG9wdGlvbnMuc3VibWlzc2lvbiB8fCB1bmRlZmluZWQsXG4gICAgICAgICAgICBPYmplY3Qua2V5cyhvdGhlckNvbmZpZ3VyYXRpb24pLmxlbmd0aCA+IDAgPyBvdGhlckNvbmZpZ3VyYXRpb24gOiB1bmRlZmluZWRcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBOYXZpZ2F0ZXMgdG8gYSBzY3JlZW4gd2l0aGluIHRoZSBzYW1lIHRhYi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIG5hdmlnYXRpb24sIGluY2x1ZGluZyBzY3JlZW5JZCBhbmQgb3B0aW9uYWwgcmVxdG9rZW5zLlxuICAgICAqL1xuICAgIG5hdmlnYXRlVG8ob3B0aW9uczogTmF2aWdhdGlvbk9wdGlvbnMpOiB2b2lkIHtcbiAgICAgICAgVGFiU2RrLnV0aWw/Lm9wZW5TY3JlZW4oXG4gICAgICAgICAgICBTY3JlZW5EaXNwbGF5TW9kZS5TYW1lVGFiLFxuICAgICAgICAgICAgb3B0aW9ucy5zY3JlZW5JZCxcbiAgICAgICAgICAgIG9wdGlvbnMucmVxdG9rZW5zIHx8IHVuZGVmaW5lZFxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE5hdmlnYXRlcyB0byBhIHNjcmVlbiBpbiBhIG5ldyB0YWIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBmb3IgbmF2aWdhdGlvbiwgaW5jbHVkaW5nIHNjcmVlbklkIGFuZCBvcHRpb25hbCByZXF0b2tlbnMuXG4gICAgICovXG4gICAgb3BlbkluTmV3VGFiKG9wdGlvbnM6IE5hdmlnYXRpb25PcHRpb25zKTogdm9pZCB7XG4gICAgICAgIFRhYlNkay51dGlsPy5vcGVuU2NyZWVuKFxuICAgICAgICAgICAgU2NyZWVuRGlzcGxheU1vZGUuTmV3VGFiLFxuICAgICAgICAgICAgb3B0aW9ucy5zY3JlZW5JZCxcbiAgICAgICAgICAgIG9wdGlvbnMucmVxdG9rZW5zIHx8IHVuZGVmaW5lZFxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE5hdmlnYXRlcyB0byB0aGUgc3BlY2lmaWVkIFVSTC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB1cmwgLSBUaGUgVVJMIHRvIG5hdmlnYXRlIHRvLlxuICAgICAqL1xuICAgIG5hdmlnYXRlVG9VcmwodXJsOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgVGFiU2RrLnV0aWw/Lm5hdmlnYXRlVG9Vcmwoe1xuICAgICAgICAgICAgdXJsLFxuICAgICAgICAgICAgdHlwZTogTmF2aWdhdGlvblR5cGUuTmF2aWdhdGVUb1VybFxuICAgICAgICB9KVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE5hdmlnYXRlcyB0byBhIHNwZWNpZmllZCBzdWJkb21haW4gdXNpbmcgdGhlIHByb3ZpZGVkIG9wdGlvbnMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIGZvciBuYXZpZ2F0aW9uLCBpbmNsdWRpbmcgc3ViRG9tYWluLCBhcHBDb2RlLCBhbmQgdXJsLlxuICAgICAqL1xuICAgIG5hdmlnYXRlVG9TdWJkb21haW4ob3B0aW9uczogTmF2aWdhdGVUb1N1YmRvbWFpbk9wdGlvbnMpOiB2b2lkIHtcbiAgICAgICAgVGFiU2RrLnV0aWw/Lm5hdmlnYXRlVG9Vcmwoe1xuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgIHR5cGU6IE5hdmlnYXRpb25UeXBlLk5hdmlnYXRlVG9VcmxcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXRyaWV2ZXMgdGhlIGFjdGl2ZSBzY3JlZW4gSUQgZnJvbSB0aGUgY3VycmVudCBVUkwuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBUaGUgc2NyZWVuIElEIGlmIHByZXNlbnQgaW4gdGhlIFVSTCwgb3RoZXJ3aXNlIHVuZGVmaW5lZC5cbiAgICAgKi9cbiAgICBnZXRBY3RpdmVVcmxTY3JlZW5JZCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgICAgICAvLyBTcGxpdCB0aGUgVVJMIHBhdGhuYW1lIHVzaW5nIHRoZSBhcHAgbmFtZSBhbmQgJy9zY3JlZW4vJyBhcyBkZWxpbWl0ZXJzXG4gICAgICAgIGNvbnN0IHVybFBhcnRzID0gd2luZG93Py5sb2NhdGlvbj8ucGF0aG5hbWU/LnNwbGl0KFRhYlNkay5zdG9yZS5hcHBOYW1lICsgJy9zY3JlZW4vJyk7XG4gICAgICAgIC8vIEV4dHJhY3QgdGhlIHNjcmVlbiBJRCBwYXJ0IGFuZCByZW1vdmUgYW55IHF1ZXJ5IHBhcmFtZXRlcnNcbiAgICAgICAgY29uc3Qgc2NyZWVuSWQgPSB1cmxQYXJ0cz8uWzFdPy5zcGxpdCgnPycpWzBdO1xuICAgICAgICAvLyBSZXR1cm4gdGhlIHNjcmVlbiBJRCBvciB1bmRlZmluZWQgaWYgbm90IGZvdW5kXG4gICAgICAgIHJldHVybiBzY3JlZW5JZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTaG93IGEgbm90aWZpY2F0aW9uIHRvIHRoZSB1c2VyLlxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgZm9yIHRoZSBub3RpZmljYXRpb24uXG4gICAgICovXG4gICAgbm90aWZ5KG9wdGlvbnM6IE5vdGlmaWNhdGlvbk9wdGlvbnMpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fbm90aWZpY2F0aW9uU2VydmljZS5ub3RpZnkoe1xuICAgICAgICAgICAgdHlwZTogb3B0aW9ucy50eXBlLFxuICAgICAgICAgICAgbWVzc2FnZTogVGFiU2RrLnRyYW5zbGF0b3IudHJhbnNsYXRlKG9wdGlvbnMubWVzc2FnZSksXG4gICAgICAgICAgICAuLi4ob3B0aW9ucz8udGl0bGUgPyB7IHRpdGxlOiBUYWJTZGsudHJhbnNsYXRvci50cmFuc2xhdGUob3B0aW9ucy50aXRsZSkgfSA6IHt9KSxcbiAgICAgICAgICAgIC4uLihvcHRpb25zPy5jb25maWd1cmF0aW9uID8geyBjb25maWd1cmF0aW9uOiBvcHRpb25zLmNvbmZpZ3VyYXRpb24gfSA6IHt9KSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGlzcGxheXMgYSBzdWNjZXNzIG5vdGlmaWNhdGlvbiB0byB0aGUgdXNlci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIHRoZSBub3RpZmljYXRpb24sIGluY2x1ZGluZyBtZXNzYWdlLCB0aXRsZSwgYW5kIGNvbmZpZ3VyYXRpb24uXG4gICAgICovXG4gICAgc2hvd1N1Y2Nlc3Mob3B0aW9uczogQmFzZU5vdGlmaWNhdGlvbk9wdGlvbnMpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgIHR5cGU6IE5vdGlmaWNhdGlvblR5cGUuU3VjY2VzcyxcbiAgICAgICAgICAgIHRpdGxlOiBvcHRpb25zPy50aXRsZSA/PyAnU3VjY2VzcydcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGlzcGxheXMgYSB3YXJuaW5nIG5vdGlmaWNhdGlvbiB0byB0aGUgdXNlci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIHRoZSBub3RpZmljYXRpb24sIGluY2x1ZGluZyBtZXNzYWdlLCB0aXRsZSwgYW5kIGNvbmZpZ3VyYXRpb24uXG4gICAgICovXG4gICAgc2hvd1dhcm5pbmcob3B0aW9uczogQmFzZU5vdGlmaWNhdGlvbk9wdGlvbnMpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgIHR5cGU6IE5vdGlmaWNhdGlvblR5cGUuV2FybmluZyxcbiAgICAgICAgICAgIHRpdGxlOiBvcHRpb25zPy50aXRsZSA/PyAnV2FybmluZydcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGlzcGxheXMgYW4gaW5mbyBub3RpZmljYXRpb24gdG8gdGhlIHVzZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIGZvciB0aGUgbm90aWZpY2F0aW9uLCBpbmNsdWRpbmcgbWVzc2FnZSwgdGl0bGUsIGFuZCBjb25maWd1cmF0aW9uLlxuICAgICAqL1xuICAgIHNob3dJbmZvKG9wdGlvbnM6IEJhc2VOb3RpZmljYXRpb25PcHRpb25zKTogdm9pZCB7XG4gICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICB0eXBlOiBOb3RpZmljYXRpb25UeXBlLkluZm8sXG4gICAgICAgICAgICB0aXRsZTogb3B0aW9ucz8udGl0bGUgPz8gJ0luZm8nXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERpc3BsYXlzIGFuIGVycm9yIG5vdGlmaWNhdGlvbiB0byB0aGUgdXNlci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIHRoZSBub3RpZmljYXRpb24sIGluY2x1ZGluZyBtZXNzYWdlLCB0aXRsZSwgYW5kIGNvbmZpZ3VyYXRpb24uXG4gICAgICovXG4gICAgc2hvd0Vycm9yKG9wdGlvbnM6IEJhc2VOb3RpZmljYXRpb25PcHRpb25zKTogdm9pZCB7XG4gICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICB0eXBlOiBOb3RpZmljYXRpb25UeXBlLkVycm9yLFxuICAgICAgICAgICAgdGl0bGU6IG9wdGlvbnM/LnRpdGxlID8/ICdFcnJvcidcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGlzcGxheXMgYSBjb25maXJtYXRpb24gZGlhbG9nIHRvIHRoZSB1c2VyIGFuZCByZXR1cm5zIGEgcHJvbWlzZSB0aGF0IHJlc29sdmVzXG4gICAgICogdG8gYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgdXNlciBjb25maXJtZWQgdGhlIGFjdGlvbi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIHRoZSBjb25maXJtYXRpb24gZGlhbG9nLCBpbmNsdWRpbmcgdGl0bGUsIG1lc3NhZ2UsXG4gICAgICogY29uZmlybVRleHQsIGNhbmNlbFRleHQsIGFuZCB2aXNpYmlsaXR5IG9mIGJ1dHRvbnMuXG4gICAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdHJ1ZSBpZiB0aGUgdXNlciBjb25maXJtcywgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgICAqL1xuICAgIGNvbmZpcm0ob3B0aW9ucz86IENvbmZpcm1hdGlvbk9wdGlvbnMpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9jb25maXJtYXRpb25TZXJ2aWNlLmNvbmZpcm0ob3B0aW9ucylcbiAgICAgICAgICAgICAgICA/LnN1YnNjcmliZSgoaXNDb25maXJtZWQ6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShpc0NvbmZpcm1lZCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERpc3BsYXlzIGEgY29uZmlybWF0aW9uIGRpYWxvZyB0byB0aGUgdXNlciB3aXRoIGEgdGl0bGUgYW5kIG1lc3NhZ2UgdGhhdCBpbmRpY2F0ZXNcbiAgICAgKiB0aGUgdXNlciBpcyBhYm91dCB0byBkZWxldGUgYW4gaXRlbS4gVGhlIGNvbmZpcm1hdGlvbiBkaWFsb2cgaGFzIGEgXCJEZWxldGVcIiBhbmQgXCJDYW5jZWxcIlxuICAgICAqIGJ1dHRvbi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIHRoZSBjb25maXJtYXRpb24gZGlhbG9nLCBpbmNsdWRpbmcgdGhlIGl0ZW0gbmFtZSBhbmRcbiAgICAgKiBvcHRpb25hbCBtZXNzYWdlLlxuICAgICAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIHRydWUgaWYgdGhlIHVzZXIgY29uZmlybXMsIGZhbHNlIG90aGVyd2lzZS5cbiAgICAgKi9cbiAgICBjb25maXJtRGVsZXRlKG9wdGlvbnM/OiBDb25maXJtYXRpb25PcHRpb25zKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbmZpcm0oe1xuICAgICAgICAgICAgdGl0bGU6IG9wdGlvbnM/LnRpdGxlID8/IGBBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgcmVjb3JkYCxcbiAgICAgICAgICAgIG1lc3NhZ2U6IG9wdGlvbnM/Lm1lc3NhZ2UgPz8gYFlvdSBhcmUgYWJvdXQgdG8gZGVsZXRlIHRoZSBzZWxlY3RlZCByZWNvcmQuIEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBwcm9jZWVkP2AsXG4gICAgICAgICAgICBwcmltYXJ5T3B0aW9uOiAnRGVsZXRlJyxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGlzcGxheXMgYSBjb25maXJtYXRpb24gZGlhbG9nIHRvIHRoZSB1c2VyIHdpdGggYSB0aXRsZSBhbmQgbWVzc2FnZSB0aGF0IGluZGljYXRlc1xuICAgICAqIHRoZSB1c2VyIGlzIGFib3V0IHRvIGRpc2NhcmQgY2hhbmdlcyB0byBhbiBpdGVtLiBUaGUgY29uZmlybWF0aW9uIGRpYWxvZyBoYXMgYSBcIkRpc2NhcmRcIlxuICAgICAqIGFuZCBcIkNhbmNlbFwiIGJ1dHRvbi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIHRoZSBjb25maXJtYXRpb24gZGlhbG9nLCBpbmNsdWRpbmcgdGhlIGl0ZW0gbmFtZSBhbmRcbiAgICAgKiBvcHRpb25hbCBtZXNzYWdlLlxuICAgICAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIHRydWUgaWYgdGhlIHVzZXIgY29uZmlybXMsIGZhbHNlIG90aGVyd2lzZS5cbiAgICAgKi9cbiAgICBjb25maXJtRGlzY2FyZChvcHRpb25zPzogQ29uZmlybWF0aW9uT3B0aW9ucyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jb25maXJtKHtcbiAgICAgICAgICAgIHRpdGxlOiBgQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRpc2NhcmQgeW91ciBjaGFuZ2VzYCxcbiAgICAgICAgICAgIG1lc3NhZ2U6IG9wdGlvbnM/Lm1lc3NhZ2UgPz8gYFlvdSBhcmUgYWJvdXQgdG8gZGlzY2FyZCB5b3VyIGNoYW5nZXMuIEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBwcm9jZWVkP2AsXG4gICAgICAgICAgICBwcmltYXJ5T3B0aW9uOiAnRGlzY2FyZCcsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENsb3NlcyB0aGUgY29uZmlybWF0aW9uIGRpYWxvZy5cbiAgICAgKlxuICAgICAqIFRoaXMgbWV0aG9kIGNhbiBiZSB1c2VkIHRvIG1hbnVhbGx5IGNsb3NlIHRoZSBjb25maXJtYXRpb24gZGlhbG9nLlxuICAgICAqL1xuICAgIGNsb3NlQ29uZmlybWF0aW9uRGlhbG9nKCkge1xuICAgICAgICAvLyBDbG9zZSB0aGUgY29uZmlybWF0aW9uIGRpYWxvZ1xuICAgICAgICB0aGlzLl9jb25maXJtYXRpb25TZXJ2aWNlLmNsb3NlRGlhbG9nKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0cmlldmVzIHRoZSBjb25maXJtYXRpb24gZW1pdHRlciBmcm9tIHRoZSBjb25maXJtYXRpb24gc2VydmljZS5cbiAgICAgKiBcbiAgICAgKiBAcmV0dXJucyBUaGUgY29uZmlybWF0aW9uIGVtaXR0ZXIgdXNlZCBmb3IgZW1pdHRpbmcgY29uZmlybWF0aW9uIGV2ZW50cy5cbiAgICAgKi9cbiAgICBnZXRDb25mb3JtYXRpb25FbWl0dGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29uZmlybWF0aW9uU2VydmljZS5nZXRDb25mb3JtYXRpb25FbWl0dGVyKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0cmlldmVzIHRoZSBkaWFsb2cgZW1pdHRlciBmcm9tIHRoZSBjb25maXJtYXRpb24gc2VydmljZS5cbiAgICAgKlxuICAgICAqIFRoZSBkaWFsb2cgZW1pdHRlciBpcyBhbiBSeEpTIFN1YmplY3QgdGhhdCBlbWl0cyB3aGVuZXZlciBhIGNvbmZpcm1hdGlvbiBkaWFsb2cgaXNcbiAgICAgKiBvcGVuZWQgb3IgY2xvc2VkLiBUaGUgdmFsdWUgZW1pdHRlZCBpcyBhIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIGEgZGlhbG9nIGlzXG4gICAgICogY3VycmVudGx5IG9wZW4uXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBUaGUgZGlhbG9nIGVtaXR0ZXIgdXNlZCBmb3IgZW1pdHRpbmcgY29uZmlybWF0aW9uIGRpYWxvZyBldmVudHMuXG4gICAgICovXG4gICAgZ2V0RGlhbG9nRW1pdHRlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbmZpcm1hdGlvblNlcnZpY2UuZ2V0RGlhbG9nRW1pdHRlcigpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHJpZXZlcyB0aGUgcmVtb3ZlIGVtaXR0ZXIgZnJvbSB0aGUgY29uZmlybWF0aW9uIHNlcnZpY2UuXG4gICAgICogXG4gICAgICogVGhlIHJlbW92ZSBlbWl0dGVyIGlzIGFuIFJ4SlMgU3ViamVjdCB0aGF0IGVtaXRzIHdoZW5ldmVyIGEgcmVtb3ZhbCBjb25maXJtYXRpb25cbiAgICAgKiBkaWFsb2cgaXMgb3BlbmVkIG9yIGNsb3NlZC4gVGhlIHZhbHVlIGVtaXR0ZWQgaXMgYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBhXG4gICAgICogcmVtb3ZhbCBkaWFsb2cgaXMgY3VycmVudGx5IG9wZW4uXG4gICAgICogXG4gICAgICogQHJldHVybnMgVGhlIHJlbW92ZSBlbWl0dGVyIHVzZWQgZm9yIGVtaXR0aW5nIHJlbW92YWwgY29uZmlybWF0aW9uIGRpYWxvZyBldmVudHMuXG4gICAgICovXG4gICAgZ2V0UmVtb3ZlRW1pdHRlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbmZpcm1hdGlvblNlcnZpY2UuZ2V0UmVtb3ZlRW1pdHRlcigpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvcGllcyB0aGUgcHJvdmlkZWQgdGV4dCB0byB0aGUgY2xpcGJvYXJkIGFuZCBkaXNwbGF5cyBhIHN1Y2Nlc3Mgbm90aWZpY2F0aW9uLlxuICAgICAqXG4gICAgICogQHBhcmFtIHRleHQgLSBUaGUgdGV4dCB0byBiZSBjb3BpZWQgdG8gdGhlIGNsaXBib2FyZC5cbiAgICAgKi9cbiAgICBjb3B5VG9DbGlwYm9hcmQodGV4dDogc3RyaW5nKSB7XG4gICAgICAgIC8vIENyZWF0ZSBhIHRlbXBvcmFyeSBpbnB1dCBlbGVtZW50IHRvIGhvbGQgdGhlIHRleHRcbiAgICAgICAgY29uc3QgdGVtcElucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xuXG4gICAgICAgIC8vIFNldCB0aGUgaW5wdXQncyB2YWx1ZSB0byB0aGUgdGV4dCB0byBiZSBjb3BpZWRcbiAgICAgICAgdGVtcElucHV0LnZhbHVlID0gdGV4dDtcblxuICAgICAgICAvLyBBcHBlbmQgdGhlIHRlbXBvcmFyeSBpbnB1dCB0byB0aGUgZG9jdW1lbnQgYm9keVxuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRlbXBJbnB1dCk7XG5cbiAgICAgICAgLy8gU2VsZWN0IHRoZSB0ZXh0IGluIHRoZSBpbnB1dCBlbGVtZW50XG4gICAgICAgIHRlbXBJbnB1dC5zZWxlY3QoKTtcblxuICAgICAgICAvLyBFeGVjdXRlIHRoZSBjb3B5IGNvbW1hbmRcbiAgICAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoXCJjb3B5XCIpO1xuXG4gICAgICAgIC8vIFJlbW92ZSB0aGUgdGVtcG9yYXJ5IGlucHV0IGZyb20gdGhlIGRvY3VtZW50IGJvZHlcbiAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh0ZW1wSW5wdXQpO1xuXG4gICAgICAgIC8vIFNob3cgYSBzdWNjZXNzIG5vdGlmaWNhdGlvblxuICAgICAgICB0aGlzLnNob3dTdWNjZXNzKHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IFwiXCIsXG4gICAgICAgICAgICB0aXRsZTogXCJDb3BpZWQgdG8gY2xpcGJvYXJkIVwiLFxuICAgICAgICAgICAgY29uZmlndXJhdGlvbjoge1xuICAgICAgICAgICAgICAgIHRpbWVPdXQ6IDEwMDAsXG4gICAgICAgICAgICAgICAgcG9zaXRpb25DbGFzczogJ3RvYXN0LXRvcC1jZW50ZXInLFxuICAgICAgICAgICAgICAgIGVhc2luZzogJ2Vhc2UtaW4nLFxuICAgICAgICAgICAgICAgIGVhc2VUaW1lOiAzMDAsXG4gICAgICAgICAgICAgICAgZXh0ZW5kZWRUaW1lT3V0OiAyMDAwLFxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb3BpZXMgdGhlIGN1cnJlbnQgVVJMIHRvIHRoZSBjbGlwYm9hcmQgYW5kIGRpc3BsYXlzIGEgc3VjY2VzcyBub3RpZmljYXRpb24uXG4gICAgICovXG4gICAgY29weUN1cnJlbnRVcmxUb0NsaXBib2FyZCgpIHtcbiAgICAgICAgLy8gVXNlIHRoZSBjb3B5VG9DbGlwYm9hcmQgbWV0aG9kIHRvIGNvcHkgdGhlIGN1cnJlbnQgd2luZG93IFVSTFxuICAgICAgICB0aGlzLmNvcHlUb0NsaXBib2FyZCh3aW5kb3cubG9jYXRpb24uaHJlZik7XG4gICAgfVxufSJdfQ==
344
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhYi1zZGsvc3JjL2xpYi91aS91aS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBT25ELE9BQU8sRUFBRSxjQUFjLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDNUMsT0FBTyxFQUFnRCxtQkFBbUIsRUFBdUIsbUJBQW1CLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQzs7QUFLL0ssTUFBTSxPQUFPLFNBQVM7SUFDRCxvQkFBb0IsR0FBd0IsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDeEUsb0JBQW9CLEdBQXdCLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBRXpGOzs7OztPQUtHO0lBQ0gsVUFBVSxDQUFDLE9BQTBCO1FBQ2pDLE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLEdBQUcsT0FBTyxDQUFDO1FBRTdGLFFBQVEsSUFBSSxFQUFFLENBQUM7WUFDWCxLQUFLLGlCQUFpQixDQUFDLE9BQU87Z0JBQzFCLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO2dCQUN6RixNQUFNO1lBRVYsS0FBSyxpQkFBaUIsQ0FBQyxLQUFLO2dCQUN4QixJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFF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QU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICAgIFNjcmVlbk9wZW5PcHRpb25zLFxuICAgIE5hdmlnYXRpb25PcHRpb25zLFxuICAgIEJhc2VTY3JlZW5PcHRpb25zLFxuICAgIE5hdmlnYXRlVG9TdWJkb21haW5PcHRpb25zXG59IGZyb20gJy4uL2ludGVyZmFjZS91aS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgTmF2aWdhdGlvblR5cGUsIFNjcmVlbkRpc3BsYXlNb2RlIH0gZnJvbSAnLi4vZW51bS91aS5lbnVtJztcbmltcG9ydCB7IFRhYlNkayB9IGZyb20gJy4uL3RhYi1zZGsuc2VydmljZSc7XG5pbXBvcnQgeyBCYXNlTm90aWZpY2F0aW9uT3B0aW9ucywgQ29uZmlybWF0aW9uT3B0aW9ucywgQ29uZmlybWF0aW9uU2VydmljZSwgTm90aWZpY2F0aW9uT3B0aW9ucywgTm90aWZpY2F0aW9uU2VydmljZSwgTm90aWZpY2F0aW9uVHlwZSB9IGZyb20gJ0B0ZWNoZXh0ZW5zb3IvdGFiLWNvcmUtdXRpbGl0eSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgVWlTZXJ2aWNlIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9ub3RpZmljYXRpb25TZXJ2aWNlOiBOb3RpZmljYXRpb25TZXJ2aWNlID0gaW5qZWN0KE5vdGlmaWNhdGlvblNlcnZpY2UpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2NvbmZpcm1hdGlvblNlcnZpY2U6IENvbmZpcm1hdGlvblNlcnZpY2UgPSBpbmplY3QoQ29uZmlybWF0aW9uU2VydmljZSk7XG5cbiAgICAvKipcbiAgICAgKiBPcGVuIGEgc2NyZWVuIHdpdGggdGhlIGdpdmVuIG9wdGlvbnMuIFRoZSBtb2RlIGRldGVybWluZXMgaG93IHRoZSBzY3JlZW4gaXNcbiAgICAgKiBkaXNwbGF5ZWQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBmb3Igb3BlbmluZyB0aGUgc2NyZWVuLlxuICAgICAqL1xuICAgIG9wZW5TY3JlZW4ob3B0aW9uczogU2NyZWVuT3Blbk9wdGlvbnMpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgeyBtb2RlLCBzY3JlZW5JZCwgcmVxdG9rZW5zLCBzdWJtaXNzaW9uLCB0aXRsZSwgd2lkdGgsIGhlaWdodCwgY3VzdG9tQ2xhc3MgfSA9IG9wdGlvbnM7XG5cbiAgICAgICAgc3dpdGNoIChtb2RlKSB7XG4gICAgICAgICAgICBjYXNlIFNjcmVlbkRpc3BsYXlNb2RlLlNpZGViYXI6XG4gICAgICAgICAgICAgICAgdGhpcy5zaG93U2lkZWJhcih7IHNjcmVlbklkLCByZXF0b2tlbnMsIHN1Ym1pc3Npb24sIHRpdGxlLCB3aWR0aCwgaGVpZ2h0LCBjdXN0b21DbGFzcyB9KTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSBTY3JlZW5EaXNwbGF5TW9kZS5Qb3B1cDpcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dEaWFsb2coeyBzY3JlZW5JZCwgcmVxdG9rZW5zLCBzdWJtaXNzaW9uLCB0aXRsZSwgd2lkdGgsIGhlaWdodCwgY3VzdG9tQ2xhc3MgfSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgU2NyZWVuRGlzcGxheU1vZGUuU2FtZVRhYjpcbiAgICAgICAgICAgICAgICB0aGlzLm5hdmlnYXRlVG8oeyBzY3JlZW5JZCwgcmVxdG9rZW5zIH0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIFNjcmVlbkRpc3BsYXlNb2RlLk5ld1RhYjpcbiAgICAgICAgICAgICAgICB0aGlzLm9wZW5Jbk5ld1RhYih7IHNjcmVlbklkLCByZXF0b2tlbnMgfSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBPcGVucyBhIHNjcmVlbiBpbiBhIHNpZGViYXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBmb3Igb3BlbmluZyB0aGUgc2lkZWJhci5cbiAgICAgKi9cbiAgICBzaG93U2lkZWJhcihvcHRpb25zOiBCYXNlU2NyZWVuT3B0aW9ucyk6IHZvaWQge1xuICAgICAgICBjb25zdCBvdGhlckNvbmZpZ3VyYXRpb24gPSB7XG4gICAgICAgICAgICAuLi4ob3B0aW9ucy50aXRsZSAmJiB7IHRpdGxlOiBvcHRpb25zLnRpdGxlIH0pLFxuICAgICAgICAgICAgLi4uKG9wdGlvbnMud2lkdGggJiYgeyB3aWR0aDogb3B0aW9ucy53aWR0aCB9KSxcbiAgICAgICAgICAgIC4uLihvcHRpb25zLmhlaWdodCAmJiB7IGhlaWdodDogb3B0aW9ucy5oZWlnaHQgfSksXG4gICAgICAgICAgICAuLi4ob3B0aW9ucy5jdXN0b21DbGFzcyAmJiB7IGN1c3RvbUNsYXNzOiBvcHRpb25zLmN1c3RvbUNsYXNzIH0pLFxuICAgICAgICAgICAgLi4uKG9wdGlvbnMucmVmcmVzaGVyICYmIHsgcmVmcmVzaGVyOiBvcHRpb25zLnJlZnJlc2hlciB9KSxcbiAgICAgICAgICAgIC4uLihvcHRpb25zLmNsb3NlciAmJiB7IGNsb3Nlcjogb3B0aW9ucy5jbG9zZXIgfSlcbiAgICAgICAgfTtcblxuICAgICAgICBUYWJTZGsudXRpbD8ub3BlblNjcmVlbihcbiAgICAgICAgICAgIFNjcmVlbkRpc3BsYXlNb2RlLlNpZGViYXIsXG4gICAgICAgICAgICBvcHRpb25zLnNjcmVlbklkLFxuICAgICAgICAgICAgb3B0aW9ucy5yZXF0b2tlbnMgfHwgdW5kZWZpbmVkLFxuICAgICAgICAgICAgb3B0aW9ucy5zdWJtaXNzaW9uIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKG90aGVyQ29uZmlndXJhdGlvbikubGVuZ3RoID4gMCA/IG90aGVyQ29uZmlndXJhdGlvbiA6IHVuZGVmaW5lZFxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE9wZW5zIGEgc2NyZWVuIGluIGEgcG9wdXAgZGlhbG9nLlxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgZm9yIG9wZW5pbmcgdGhlIGRpYWxvZy5cbiAgICAgKi9cbiAgICBzaG93RGlhbG9nKG9wdGlvbnM6IEJhc2VTY3JlZW5PcHRpb25zKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG90aGVyQ29uZmlndXJhdGlvbiA9IHtcbiAgICAgICAgICAgIC4uLihvcHRpb25zLnRpdGxlICYmIHsgdGl0bGU6IG9wdGlvbnMudGl0bGUgfSksXG4gICAgICAgICAgICAuLi4ob3B0aW9ucy53aWR0aCAmJiB7IHdpZHRoOiBvcHRpb25zLndpZHRoIH0pLFxuICAgICAgICAgICAgLi4uKG9wdGlvbnMuaGVpZ2h0ICYmIHsgaGVpZ2h0OiBvcHRpb25zLmhlaWdodCB9KSxcbiAgICAgICAgICAgIC4uLihvcHRpb25zLmN1c3RvbUNsYXNzICYmIHsgY3VzdG9tQ2xhc3M6IG9wdGlvbnMuY3VzdG9tQ2xhc3MgfSksXG4gICAgICAgICAgICAuLi4ob3B0aW9ucy5yZWZyZXNoZXIgJiYgeyByZWZyZXNoZXI6IG9wdGlvbnMucmVmcmVzaGVyIH0pLFxuICAgICAgICAgICAgLi4uKG9wdGlvbnMuY2xvc2VyICYmIHsgY2xvc2VyOiBvcHRpb25zLmNsb3NlciB9KVxuICAgICAgICB9O1xuXG4gICAgICAgIFRhYlNkay51dGlsPy5vcGVuU2NyZWVuKFxuICAgICAgICAgICAgU2NyZWVuRGlzcGxheU1vZGUuUG9wdXAsXG4gICAgICAgICAgICBvcHRpb25zLnNjcmVlbklkLFxuICAgICAgICAgICAgb3B0aW9ucy5yZXF0b2tlbnMgfHwgdW5kZWZpbmVkLFxuICAgICAgICAgICAgb3B0aW9ucy5zdWJtaXNzaW9uIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKG90aGVyQ29uZmlndXJhdGlvbikubGVuZ3RoID4gMCA/IG90aGVyQ29uZmlndXJhdGlvbiA6IHVuZGVmaW5lZFxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE5hdmlnYXRlcyB0byBhIHNjcmVlbiB3aXRoaW4gdGhlIHNhbWUgdGFiLlxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgbmF2aWdhdGlvbiwgaW5jbHVkaW5nIHNjcmVlbklkIGFuZCBvcHRpb25hbCByZXF0b2tlbnMuXG4gICAgICovXG4gICAgbmF2aWdhdGVUbyhvcHRpb25zOiBOYXZpZ2F0aW9uT3B0aW9ucyk6IHZvaWQge1xuICAgICAgICBUYWJTZGsudXRpbD8ub3BlblNjcmVlbihcbiAgICAgICAgICAgIFNjcmVlbkRpc3BsYXlNb2RlLlNhbWVUYWIsXG4gICAgICAgICAgICBvcHRpb25zLnNjcmVlbklkLFxuICAgICAgICAgICAgb3B0aW9ucy5yZXF0b2tlbnMgfHwgdW5kZWZpbmVkXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTmF2aWdhdGVzIHRvIGEgc2NyZWVuIGluIGEgbmV3IHRhYi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIGZvciBuYXZpZ2F0aW9uLCBpbmNsdWRpbmcgc2NyZWVuSWQgYW5kIG9wdGlvbmFsIHJlcXRva2Vucy5cbiAgICAgKi9cbiAgICBvcGVuSW5OZXdUYWIob3B0aW9uczogTmF2aWdhdGlvbk9wdGlvbnMpOiB2b2lkIHtcbiAgICAgICAgVGFiU2RrLnV0aWw/Lm9wZW5TY3JlZW4oXG4gICAgICAgICAgICBTY3JlZW5EaXNwbGF5TW9kZS5OZXdUYWIsXG4gICAgICAgICAgICBvcHRpb25zLnNjcmVlbklkLFxuICAgICAgICAgICAgb3B0aW9ucy5yZXF0b2tlbnMgfHwgdW5kZWZpbmVkXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTmF2aWdhdGVzIHRvIHRoZSBzcGVjaWZpZWQgVVJMLlxuICAgICAqXG4gICAgICogQHBhcmFtIHVybCAtIFRoZSBVUkwgdG8gbmF2aWdhdGUgdG8uXG4gICAgICovXG4gICAgbmF2aWdhdGVUb1VybChwYXJhbXM6IHsgdXJsOiBzdHJpbmcsIGV4dHJhcz86IGFueSwgcmVwbGFjZVVybD86IGJvb2xlYW4gfSk6IHZvaWQge1xuICAgICAgICBUYWJTZGsudXRpbD8ubmF2aWdhdGVUbyh7XG4gICAgICAgICAgICAuLi5wYXJhbXMsXG4gICAgICAgICAgICB0eXBlOiBOYXZpZ2F0aW9uVHlwZS5OYXZpZ2F0ZVRvVXJsXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTmF2aWdhdGVzIHRvIGEgc3BlY2lmaWVkIHN1YmRvbWFpbiB1c2luZyB0aGUgcHJvdmlkZWQgb3B0aW9ucy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIG5hdmlnYXRpb24sIGluY2x1ZGluZyBzdWJEb21haW4sIGFwcENvZGUsIGFuZCB1cmwuXG4gICAgICovXG4gICAgbmF2aWdhdGVUb1N1YmRvbWFpbihvcHRpb25zOiBOYXZpZ2F0ZVRvU3ViZG9tYWluT3B0aW9ucyk6IHZvaWQge1xuICAgICAgICBUYWJTZGsudXRpbD8ubmF2aWdhdGVUbyh7XG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgdHlwZTogTmF2aWdhdGlvblR5cGUuTmF2aWdhdGVUb1N1YmRvbWFpblxuICAgICAgICB9KVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHJpZXZlcyB0aGUgYWN0aXZlIHNjcmVlbiBJRCBmcm9tIHRoZSBjdXJyZW50IFVSTC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIFRoZSBzY3JlZW4gSUQgaWYgcHJlc2VudCBpbiB0aGUgVVJMLCBvdGhlcndpc2UgdW5kZWZpbmVkLlxuICAgICAqL1xuICAgIGdldEFjdGl2ZVVybFNjcmVlbklkKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgICAgIC8vIFNwbGl0IHRoZSBVUkwgcGF0aG5hbWUgaW50byBwYXJ0cyB1c2luZyB0aGUgJy8nIGNoYXJhY3RlciBhcyBhIGRlbGltaXRlclxuICAgICAgICBjb25zdCB1cmxQYXJ0cyA9IHdpbmRvdz8ubG9jYXRpb24/LnBhdGhuYW1lPy5zcGxpdCgnLycpO1xuICAgICAgICAvLyBFeHRyYWN0IHRoZSBzY3JlZW4gSUQgcGFydCBhbmQgcmVtb3ZlIGFueSBxdWVyeSBwYXJhbWV0ZXJzXG4gICAgICAgIGNvbnN0IHNjcmVlbklkID0gdXJsUGFydHM/Lmxlbmd0aCA+IDEgPyB1cmxQYXJ0cz8uW3VybFBhcnRzPy5sZW5ndGggLSAxXT8uc3BsaXQoJz8nKVswXSA6IHVuZGVmaW5lZDtcbiAgICAgICAgLy8gUmV0dXJuIHRoZSBzY3JlZW4gSUQgb3IgdW5kZWZpbmVkIGlmIG5vdCBmb3VuZFxuICAgICAgICByZXR1cm4gc2NyZWVuSWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0cmlldmVzIHRoZSBhY3RpdmUgcmVkaXJlY3QgVVJMIGJ5IGNvbWJpbmluZyB0aGUgYWN0aXZlIHNjcmVlbiBJRCBhbmQgYW55IHF1ZXJ5IHBhcmFtZXRlcnMuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBUaGUgY29uc3RydWN0ZWQgcmVkaXJlY3QgVVJMIG9yIHVuZGVmaW5lZCBpZiBubyBzY3JlZW4gSUQgaXMgcHJlc2VudC5cbiAgICAgKi9cbiAgICBnZXRBY3RpdmVSZWRpcmVjdFVybCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgICAgICAvLyBHZXQgdGhlIGFjdGl2ZSBzY3JlZW4gSUQgZnJvbSB0aGUgY3VycmVudCBVUkxcbiAgICAgICAgY29uc3Qgc2NyZWVuSWQgPSB0aGlzLmdldEFjdGl2ZVVybFNjcmVlbklkKCk7XG4gICAgICAgIGxldCByZWRpcmVjdFVSTDtcblxuICAgICAgICAvLyBDaGVjayBpZiB0aGUgY3VycmVudCBVUkwgY29udGFpbnMgYSBzY3JlZW4gSURcbiAgICAgICAgaWYgKHNjcmVlbklkKSB7XG4gICAgICAgICAgICAvLyBJbml0aWFsaXplIHRoZSByZWRpcmVjdCBVUkwgd2l0aCB0aGUgc2NyZWVuIElEXG4gICAgICAgICAgICByZWRpcmVjdFVSTCA9IHNjcmVlbklkO1xuXG4gICAgICAgICAgICAvLyBQYXJzZSB0aGUgY3VycmVudCBVUkwncyBxdWVyeSBwYXJhbWV0ZXJzXG4gICAgICAgICAgICBjb25zdCBxdWVyeVBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCk7XG5cbiAgICAgICAgICAgIC8vIElmIHRoZXJlIGFyZSBxdWVyeSBwYXJhbWV0ZXJzLCBhcHBlbmQgdGhlbSB0byB0aGUgcmVkaXJlY3QgVVJMXG4gICAgICAgICAgICBpZiAocXVlcnlQYXJhbXMudG9TdHJpbmcoKSkge1xuICAgICAgICAgICAgICAgIHJlZGlyZWN0VVJMICs9IGAmJHtxdWVyeVBhcmFtcy50b1N0cmluZygpfWA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBSZXR1cm4gdGhlIGNvbnN0cnVjdGVkIHJlZGlyZWN0IFVSTCBvciB1bmRlZmluZWRcbiAgICAgICAgcmV0dXJuIHJlZGlyZWN0VVJMO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNob3cgYSBub3RpZmljYXRpb24gdG8gdGhlIHVzZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBmb3IgdGhlIG5vdGlmaWNhdGlvbi5cbiAgICAgKi9cbiAgICBub3RpZnkob3B0aW9uczogTm90aWZpY2F0aW9uT3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5fbm90aWZpY2F0aW9uU2VydmljZS5ub3RpZnkoe1xuICAgICAgICAgICAgdHlwZTogb3B0aW9ucy50eXBlLFxuICAgICAgICAgICAgbWVzc2FnZTogVGFiU2RrLnRyYW5zbGF0b3IudHJhbnNsYXRlKG9wdGlvbnMubWVzc2FnZSksXG4gICAgICAgICAgICAuLi4ob3B0aW9ucz8udGl0bGUgPyB7IHRpdGxlOiBUYWJTZGsudHJhbnNsYXRvci50cmFuc2xhdGUob3B0aW9ucy50aXRsZSkgfSA6IHt9KSxcbiAgICAgICAgICAgIC4uLihvcHRpb25zPy5jb25maWd1cmF0aW9uID8geyBjb25maWd1cmF0aW9uOiBvcHRpb25zLmNvbmZpZ3VyYXRpb24gfSA6IHt9KSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGlzcGxheXMgYSBzdWNjZXNzIG5vdGlmaWNhdGlvbiB0byB0aGUgdXNlci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIHRoZSBub3RpZmljYXRpb24sIGluY2x1ZGluZyBtZXNzYWdlLCB0aXRsZSwgYW5kIGNvbmZpZ3VyYXRpb24uXG4gICAgICovXG4gICAgc2hvd1N1Y2Nlc3Mob3B0aW9uczogQmFzZU5vdGlmaWNhdGlvbk9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICB0eXBlOiBOb3RpZmljYXRpb25UeXBlLlN1Y2Nlc3MsXG4gICAgICAgICAgICB0aXRsZTogb3B0aW9ucz8udGl0bGUgPz8gJ1N1Y2Nlc3MnXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERpc3BsYXlzIGEgd2FybmluZyBub3RpZmljYXRpb24gdG8gdGhlIHVzZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIGZvciB0aGUgbm90aWZpY2F0aW9uLCBpbmNsdWRpbmcgbWVzc2FnZSwgdGl0bGUsIGFuZCBjb25maWd1cmF0aW9uLlxuICAgICAqL1xuICAgIHNob3dXYXJuaW5nKG9wdGlvbnM6IEJhc2VOb3RpZmljYXRpb25PcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgdHlwZTogTm90aWZpY2F0aW9uVHlwZS5XYXJuaW5nLFxuICAgICAgICAgICAgdGl0bGU6IG9wdGlvbnM/LnRpdGxlID8/ICdXYXJuaW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEaXNwbGF5cyBhbiBpbmZvIG5vdGlmaWNhdGlvbiB0byB0aGUgdXNlci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIHRoZSBub3RpZmljYXRpb24sIGluY2x1ZGluZyBtZXNzYWdlLCB0aXRsZSwgYW5kIGNvbmZpZ3VyYXRpb24uXG4gICAgICovXG4gICAgc2hvd0luZm8ob3B0aW9uczogQmFzZU5vdGlmaWNhdGlvbk9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICB0eXBlOiBOb3RpZmljYXRpb25UeXBlLkluZm8sXG4gICAgICAgICAgICB0aXRsZTogb3B0aW9ucz8udGl0bGUgPz8gJ0luZm8nXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERpc3BsYXlzIGFuIGVycm9yIG5vdGlmaWNhdGlvbiB0byB0aGUgdXNlci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIHRoZSBub3RpZmljYXRpb24sIGluY2x1ZGluZyBtZXNzYWdlLCB0aXRsZSwgYW5kIGNvbmZpZ3VyYXRpb24uXG4gICAgICovXG4gICAgc2hvd0Vycm9yKG9wdGlvbnM6IEJhc2VOb3RpZmljYXRpb25PcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgdHlwZTogTm90aWZpY2F0aW9uVHlwZS5FcnJvcixcbiAgICAgICAgICAgIHRpdGxlOiBvcHRpb25zPy50aXRsZSA/PyAnRXJyb3InXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENsZWFycyBhIG5vdGlmaWNhdGlvbiBieSBJRC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBub3RpZmljYXRpb25JZCAtIFRoZSBJRCBvZiB0aGUgbm90aWZpY2F0aW9uIHRvIGNsZWFyLlxuICAgICAqIEByZXR1cm5zIFRoZSBjbGVhcmVkIG5vdGlmaWNhdGlvbiwgb3IgbnVsbCBpZiB0aGUgbm90aWZpY2F0aW9uIGRvZXNuJ3QgZXhpc3QuXG4gICAgICovXG4gICAgY2xlYXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uSWQ6IG51bWJlcikge1xuICAgICAgICByZXR1cm4gdGhpcy5fbm90aWZpY2F0aW9uU2VydmljZS5jbGVhck5vdGlmaWNhdGlvbihub3RpZmljYXRpb25JZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGlzcGxheXMgYSBjb25maXJtYXRpb24gZGlhbG9nIHRvIHRoZSB1c2VyIGFuZCByZXR1cm5zIGEgcHJvbWlzZSB0aGF0IHJlc29sdmVzXG4gICAgICogdG8gYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgdXNlciBjb25maXJtZWQgdGhlIGFjdGlvbi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIHRoZSBjb25maXJtYXRpb24gZGlhbG9nLCBpbmNsdWRpbmcgdGl0bGUsIG1lc3NhZ2UsXG4gICAgICogY29uZmlybVRleHQsIGNhbmNlbFRleHQsIGFuZCB2aXNpYmlsaXR5IG9mIGJ1dHRvbnMuXG4gICAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdHJ1ZSBpZiB0aGUgdXNlciBjb25maXJtcywgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgICAqL1xuICAgIGNvbmZpcm0ob3B0aW9ucz86IENvbmZpcm1hdGlvbk9wdGlvbnMpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9jb25maXJtYXRpb25TZXJ2aWNlLmNvbmZpcm0ob3B0aW9ucylcbiAgICAgICAgICAgICAgICA/LnN1YnNjcmliZSgoaXNDb25maXJtZWQ6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShpc0NvbmZpcm1lZCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERpc3BsYXlzIGEgY29uZmlybWF0aW9uIGRpYWxvZyB0byB0aGUgdXNlciB3aXRoIGEgdGl0bGUgYW5kIG1lc3NhZ2UgdGhhdCBpbmRpY2F0ZXNcbiAgICAgKiB0aGUgdXNlciBpcyBhYm91dCB0byBkZWxldGUgYW4gaXRlbS4gVGhlIGNvbmZpcm1hdGlvbiBkaWFsb2cgaGFzIGEgXCJEZWxldGVcIiBhbmQgXCJDYW5jZWxcIlxuICAgICAqIGJ1dHRvbi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIHRoZSBjb25maXJtYXRpb24gZGlhbG9nLCBpbmNsdWRpbmcgdGhlIGl0ZW0gbmFtZSBhbmRcbiAgICAgKiBvcHRpb25hbCBtZXNzYWdlLlxuICAgICAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIHRydWUgaWYgdGhlIHVzZXIgY29uZmlybXMsIGZhbHNlIG90aGVyd2lzZS5cbiAgICAgKi9cbiAgICBjb25maXJtRGVsZXRlKG9wdGlvbnM/OiBDb25maXJtYXRpb25PcHRpb25zKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbmZpcm0oe1xuICAgICAgICAgICAgdGl0bGU6IG9wdGlvbnM/LnRpdGxlID8/IGBBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgcmVjb3JkYCxcbiAgICAgICAgICAgIG1lc3NhZ2U6IG9wdGlvbnM/Lm1lc3NhZ2UgPz8gYFlvdSBhcmUgYWJvdXQgdG8gZGVsZXRlIHRoZSBzZWxlY3RlZCByZWNvcmQuIEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBwcm9jZWVkP2AsXG4gICAgICAgICAgICBwcmltYXJ5T3B0aW9uOiAnRGVsZXRlJyxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGlzcGxheXMgYSBjb25maXJtYXRpb24gZGlhbG9nIHRvIHRoZSB1c2VyIHdpdGggYSB0aXRsZSBhbmQgbWVzc2FnZSB0aGF0IGluZGljYXRlc1xuICAgICAqIHRoZSB1c2VyIGlzIGFib3V0IHRvIGRpc2NhcmQgY2hhbmdlcyB0byBhbiBpdGVtLiBUaGUgY29uZmlybWF0aW9uIGRpYWxvZyBoYXMgYSBcIkRpc2NhcmRcIlxuICAgICAqIGFuZCBcIkNhbmNlbFwiIGJ1dHRvbi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIHRoZSBjb25maXJtYXRpb24gZGlhbG9nLCBpbmNsdWRpbmcgdGhlIGl0ZW0gbmFtZSBhbmRcbiAgICAgKiBvcHRpb25hbCBtZXNzYWdlLlxuICAgICAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIHRydWUgaWYgdGhlIHVzZXIgY29uZmlybXMsIGZhbHNlIG90aGVyd2lzZS5cbiAgICAgKi9cbiAgICBjb25maXJtRGlzY2FyZChvcHRpb25zPzogQ29uZmlybWF0aW9uT3B0aW9ucyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jb25maXJtKHtcbiAgICAgICAgICAgIHRpdGxlOiBgQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRpc2NhcmQgeW91ciBjaGFuZ2VzYCxcbiAgICAgICAgICAgIG1lc3NhZ2U6IG9wdGlvbnM/Lm1lc3NhZ2UgPz8gYFlvdSBhcmUgYWJvdXQgdG8gZGlzY2FyZCB5b3VyIGNoYW5nZXMuIEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBwcm9jZWVkP2AsXG4gICAgICAgICAgICBwcmltYXJ5T3B0aW9uOiAnRGlzY2FyZCcsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENsb3NlcyB0aGUgY29uZmlybWF0aW9uIGRpYWxvZy5cbiAgICAgKlxuICAgICAqIFRoaXMgbWV0aG9kIGNhbiBiZSB1c2VkIHRvIG1hbnVhbGx5IGNsb3NlIHRoZSBjb25maXJtYXRpb24gZGlhbG9nLlxuICAgICAqL1xuICAgIGNsb3NlQ29uZmlybWF0aW9uRGlhbG9nKCkge1xuICAgICAgICAvLyBDbG9zZSB0aGUgY29uZmlybWF0aW9uIGRpYWxvZ1xuICAgICAgICB0aGlzLl9jb25maXJtYXRpb25TZXJ2aWNlLmNsb3NlRGlhbG9nKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0cmlldmVzIHRoZSBjb25maXJtYXRpb24gZW1pdHRlciBmcm9tIHRoZSBjb25maXJtYXRpb24gc2VydmljZS5cbiAgICAgKiBcbiAgICAgKiBAcmV0dXJucyBUaGUgY29uZmlybWF0aW9uIGVtaXR0ZXIgdXNlZCBmb3IgZW1pdHRpbmcgY29uZmlybWF0aW9uIGV2ZW50cy5cbiAgICAgKi9cbiAgICBnZXRDb25mb3JtYXRpb25FbWl0dGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29uZmlybWF0aW9uU2VydmljZS5nZXRDb25mb3JtYXRpb25FbWl0dGVyKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0cmlldmVzIHRoZSBkaWFsb2cgZW1pdHRlciBmcm9tIHRoZSBjb25maXJtYXRpb24gc2VydmljZS5cbiAgICAgKlxuICAgICAqIFRoZSBkaWFsb2cgZW1pdHRlciBpcyBhbiBSeEpTIFN1YmplY3QgdGhhdCBlbWl0cyB3aGVuZXZlciBhIGNvbmZpcm1hdGlvbiBkaWFsb2cgaXNcbiAgICAgKiBvcGVuZWQgb3IgY2xvc2VkLiBUaGUgdmFsdWUgZW1pdHRlZCBpcyBhIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIGEgZGlhbG9nIGlzXG4gICAgICogY3VycmVudGx5IG9wZW4uXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBUaGUgZGlhbG9nIGVtaXR0ZXIgdXNlZCBmb3IgZW1pdHRpbmcgY29uZmlybWF0aW9uIGRpYWxvZyBldmVudHMuXG4gICAgICovXG4gICAgZ2V0RGlhbG9nRW1pdHRlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbmZpcm1hdGlvblNlcnZpY2UuZ2V0RGlhbG9nRW1pdHRlcigpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHJpZXZlcyB0aGUgcmVtb3ZlIGVtaXR0ZXIgZnJvbSB0aGUgY29uZmlybWF0aW9uIHNlcnZpY2UuXG4gICAgICogXG4gICAgICogVGhlIHJlbW92ZSBlbWl0dGVyIGlzIGFuIFJ4SlMgU3ViamVjdCB0aGF0IGVtaXRzIHdoZW5ldmVyIGEgcmVtb3ZhbCBjb25maXJtYXRpb25cbiAgICAgKiBkaWFsb2cgaXMgb3BlbmVkIG9yIGNsb3NlZC4gVGhlIHZhbHVlIGVtaXR0ZWQgaXMgYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBhXG4gICAgICogcmVtb3ZhbCBkaWFsb2cgaXMgY3VycmVudGx5IG9wZW4uXG4gICAgICogXG4gICAgICogQHJldHVybnMgVGhlIHJlbW92ZSBlbWl0dGVyIHVzZWQgZm9yIGVtaXR0aW5nIHJlbW92YWwgY29uZmlybWF0aW9uIGRpYWxvZyBldmVudHMuXG4gICAgICovXG4gICAgZ2V0UmVtb3ZlRW1pdHRlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbmZpcm1hdGlvblNlcnZpY2UuZ2V0UmVtb3ZlRW1pdHRlcigpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvcGllcyB0aGUgcHJvdmlkZWQgdGV4dCB0byB0aGUgY2xpcGJvYXJkIGFuZCBkaXNwbGF5cyBhIHN1Y2Nlc3Mgbm90aWZpY2F0aW9uLlxuICAgICAqXG4gICAgICogQHBhcmFtIHRleHQgLSBUaGUgdGV4dCB0byBiZSBjb3BpZWQgdG8gdGhlIGNsaXBib2FyZC5cbiAgICAgKi9cbiAgICBjb3B5VG9DbGlwYm9hcmQodGV4dDogc3RyaW5nKSB7XG4gICAgICAgIC8vIENyZWF0ZSBhIHRlbXBvcmFyeSBpbnB1dCBlbGVtZW50IHRvIGhvbGQgdGhlIHRleHRcbiAgICAgICAgY29uc3QgdGVtcElucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xuXG4gICAgICAgIC8vIFNldCB0aGUgaW5wdXQncyB2YWx1ZSB0byB0aGUgdGV4dCB0byBiZSBjb3BpZWRcbiAgICAgICAgdGVtcElucHV0LnZhbHVlID0gdGV4dDtcblxuICAgICAgICAvLyBBcHBlbmQgdGhlIHRlbXBvcmFyeSBpbnB1dCB0byB0aGUgZG9jdW1lbnQgYm9keVxuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRlbXBJbnB1dCk7XG5cbiAgICAgICAgLy8gU2VsZWN0IHRoZSB0ZXh0IGluIHRoZSBpbnB1dCBlbGVtZW50XG4gICAgICAgIHRlbXBJbnB1dC5zZWxlY3QoKTtcblxuICAgICAgICAvLyBFeGVjdXRlIHRoZSBjb3B5IGNvbW1hbmRcbiAgICAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoXCJjb3B5XCIpO1xuXG4gICAgICAgIC8vIFJlbW92ZSB0aGUgdGVtcG9yYXJ5IGlucHV0IGZyb20gdGhlIGRvY3VtZW50IGJvZHlcbiAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh0ZW1wSW5wdXQpO1xuXG4gICAgICAgIC8vIFNob3cgYSBzdWNjZXNzIG5vdGlmaWNhdGlvblxuICAgICAgICB0aGlzLnNob3dTdWNjZXNzKHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IFwiXCIsXG4gICAgICAgICAgICB0aXRsZTogXCJDb3BpZWQgdG8gY2xpcGJvYXJkIVwiLFxuICAgICAgICAgICAgY29uZmlndXJhdGlvbjoge1xuICAgICAgICAgICAgICAgIHRpbWVPdXQ6IDEwMDAsXG4gICAgICAgICAgICAgICAgcG9zaXRpb25DbGFzczogJ3RvYXN0LXRvcC1jZW50ZXInLFxuICAgICAgICAgICAgICAgIGVhc2luZzogJ2Vhc2UtaW4nLFxuICAgICAgICAgICAgICAgIGVhc2VUaW1lOiAzMDAsXG4gICAgICAgICAgICAgICAgZXh0ZW5kZWRUaW1lT3V0OiAyMDAwLFxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb3BpZXMgdGhlIGN1cnJlbnQgVVJMIHRvIHRoZSBjbGlwYm9hcmQgYW5kIGRpc3BsYXlzIGEgc3VjY2VzcyBub3RpZmljYXRpb24uXG4gICAgICovXG4gICAgY29weUN1cnJlbnRVcmxUb0NsaXBib2FyZCgpIHtcbiAgICAgICAgLy8gVXNlIHRoZSBjb3B5VG9DbGlwYm9hcmQgbWV0aG9kIHRvIGNvcHkgdGhlIGN1cnJlbnQgd2luZG93IFVSTFxuICAgICAgICB0aGlzLmNvcHlUb0NsaXBib2FyZCh3aW5kb3cubG9jYXRpb24uaHJlZik7XG4gICAgfVxufSJdfQ==
@@ -1,5 +1,9 @@
1
- /*
2
- * Public API Surface of tab-sdk
3
- */
1
+ // SDK
4
2
  export * from './lib/tab-sdk.service';
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL3RhYi1zZGsvc3JjL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLHVCQUF1QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIFB1YmxpYyBBUEkgU3VyZmFjZSBvZiB0YWItc2RrXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9saWIvdGFiLXNkay5zZXJ2aWNlJztcbiJdfQ==
3
+ // Enums
4
+ export * from './lib/enum/ui.enum';
5
+ export * from './lib/enum/store.enum';
6
+ // Interfaces
7
+ export * from './lib/interface/ui.interface';
8
+ export * from './lib/interface/http.interface';
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL3RhYi1zZGsvc3JjL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTTtBQUNOLGNBQWMsdUJBQXVCLENBQUM7QUFFdEMsUUFBUTtBQUNSLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyx1QkFBdUIsQ0FBQztBQUV0QyxhQUFhO0FBQ2IsY0FBYyw4QkFBOEIsQ0FBQztBQUM3QyxjQUFjLGdDQUFnQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gU0RLXG5leHBvcnQgKiBmcm9tICcuL2xpYi90YWItc2RrLnNlcnZpY2UnO1xuXG4vLyBFbnVtc1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZW51bS91aS5lbnVtJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2VudW0vc3RvcmUuZW51bSc7XG5cbi8vIEludGVyZmFjZXNcbmV4cG9ydCAqIGZyb20gJy4vbGliL2ludGVyZmFjZS91aS5pbnRlcmZhY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvaW50ZXJmYWNlL2h0dHAuaW50ZXJmYWNlJzsiXX0=
@@ -1,6 +1,6 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { inject, Injectable } from '@angular/core';
3
- import { NotificationService, ConfirmationService, NotificationType, AuthService, TabFormioService, TemplateHelper, TabBlueprintService, AppHelper, MediaUploadHelper, TabReleaseService, TranslationService, TabCrudService, TabGetService, LocalStorageService, SessionStorageService, StorageConstants, MetadataHelper } from '@techextensor/tab-core-utility';
3
+ import { NotificationService, ConfirmationService, NotificationType, AuthService, TabFormioService, TemplateHelper, TabBlueprintService, AppHelper, MediaUploadHelper, ApiService, TabReleaseService, TranslationService, TabCrudService, TabGetService, LocalStorageService, SessionStorageService, StorageConstants, MetadataHelper } from '@techextensor/tab-core-utility';
4
4
  import { firstValueFrom } from 'rxjs';
5
5
 
6
6
  var ScreenDisplayMode;
@@ -52,7 +52,9 @@ class UiService {
52
52
  ...(options.title && { title: options.title }),
53
53
  ...(options.width && { width: options.width }),
54
54
  ...(options.height && { height: options.height }),
55
- ...(options.customClass && { customClass: options.customClass })
55
+ ...(options.customClass && { customClass: options.customClass }),
56
+ ...(options.refresher && { refresher: options.refresher }),
57
+ ...(options.closer && { closer: options.closer })
56
58
  };
57
59
  TabSdk.util?.openScreen(ScreenDisplayMode.Sidebar, options.screenId, options.reqtokens || undefined, options.submission || undefined, Object.keys(otherConfiguration).length > 0 ? otherConfiguration : undefined);
58
60
  }
@@ -66,7 +68,9 @@ class UiService {
66
68
  ...(options.title && { title: options.title }),
67
69
  ...(options.width && { width: options.width }),
68
70
  ...(options.height && { height: options.height }),
69
- ...(options.customClass && { customClass: options.customClass })
71
+ ...(options.customClass && { customClass: options.customClass }),
72
+ ...(options.refresher && { refresher: options.refresher }),
73
+ ...(options.closer && { closer: options.closer })
70
74
  };
71
75
  TabSdk.util?.openScreen(ScreenDisplayMode.Popup, options.screenId, options.reqtokens || undefined, options.submission || undefined, Object.keys(otherConfiguration).length > 0 ? otherConfiguration : undefined);
72
76
  }
@@ -91,9 +95,9 @@ class UiService {
91
95
  *
92
96
  * @param url - The URL to navigate to.
93
97
  */
94
- navigateToUrl(url) {
95
- TabSdk.util?.navigateToUrl({
96
- url,
98
+ navigateToUrl(params) {
99
+ TabSdk.util?.navigateTo({
100
+ ...params,
97
101
  type: NavigationType.NavigateToUrl
98
102
  });
99
103
  }
@@ -103,9 +107,9 @@ class UiService {
103
107
  * @param options - The options for navigation, including subDomain, appCode, and url.
104
108
  */
105
109
  navigateToSubdomain(options) {
106
- TabSdk.util?.navigateToUrl({
110
+ TabSdk.util?.navigateTo({
107
111
  ...options,
108
- type: NavigationType.NavigateToUrl
112
+ type: NavigationType.NavigateToSubdomain
109
113
  });
110
114
  }
111
115
  /**
@@ -114,20 +118,43 @@ class UiService {
114
118
  * @returns The screen ID if present in the URL, otherwise undefined.
115
119
  */
116
120
  getActiveUrlScreenId() {
117
- // Split the URL pathname using the app name and '/screen/' as delimiters
118
- const urlParts = window?.location?.pathname?.split(TabSdk.store.appName + '/screen/');
121
+ // Split the URL pathname into parts using the '/' character as a delimiter
122
+ const urlParts = window?.location?.pathname?.split('/');
119
123
  // Extract the screen ID part and remove any query parameters
120
- const screenId = urlParts?.[1]?.split('?')[0];
124
+ const screenId = urlParts?.length > 1 ? urlParts?.[urlParts?.length - 1]?.split('?')[0] : undefined;
121
125
  // Return the screen ID or undefined if not found
122
126
  return screenId;
123
127
  }
128
+ /**
129
+ * Retrieves the active redirect URL by combining the active screen ID and any query parameters.
130
+ *
131
+ * @returns The constructed redirect URL or undefined if no screen ID is present.
132
+ */
133
+ getActiveRedirectUrl() {
134
+ // Get the active screen ID from the current URL
135
+ const screenId = this.getActiveUrlScreenId();
136
+ let redirectURL;
137
+ // Check if the current URL contains a screen ID
138
+ if (screenId) {
139
+ // Initialize the redirect URL with the screen ID
140
+ redirectURL = screenId;
141
+ // Parse the current URL's query parameters
142
+ const queryParams = new URLSearchParams(window.location.search);
143
+ // If there are query parameters, append them to the redirect URL
144
+ if (queryParams.toString()) {
145
+ redirectURL += `&${queryParams.toString()}`;
146
+ }
147
+ }
148
+ // Return the constructed redirect URL or undefined
149
+ return redirectURL;
150
+ }
124
151
  /**
125
152
  * Show a notification to the user.
126
153
  *
127
154
  * @param options The options for the notification.
128
155
  */
129
156
  notify(options) {
130
- this._notificationService.notify({
157
+ return this._notificationService.notify({
131
158
  type: options.type,
132
159
  message: TabSdk.translator.translate(options.message),
133
160
  ...(options?.title ? { title: TabSdk.translator.translate(options.title) } : {}),
@@ -140,7 +167,7 @@ class UiService {
140
167
  * @param options - The options for the notification, including message, title, and configuration.
141
168
  */
142
169
  showSuccess(options) {
143
- this.notify({
170
+ return this.notify({
144
171
  ...options,
145
172
  type: NotificationType.Success,
146
173
  title: options?.title ?? 'Success'
@@ -152,7 +179,7 @@ class UiService {
152
179
  * @param options - The options for the notification, including message, title, and configuration.
153
180
  */
154
181
  showWarning(options) {
155
- this.notify({
182
+ return this.notify({
156
183
  ...options,
157
184
  type: NotificationType.Warning,
158
185
  title: options?.title ?? 'Warning'
@@ -164,7 +191,7 @@ class UiService {
164
191
  * @param options - The options for the notification, including message, title, and configuration.
165
192
  */
166
193
  showInfo(options) {
167
- this.notify({
194
+ return this.notify({
168
195
  ...options,
169
196
  type: NotificationType.Info,
170
197
  title: options?.title ?? 'Info'
@@ -176,12 +203,21 @@ class UiService {
176
203
  * @param options - The options for the notification, including message, title, and configuration.
177
204
  */
178
205
  showError(options) {
179
- this.notify({
206
+ return this.notify({
180
207
  ...options,
181
208
  type: NotificationType.Error,
182
209
  title: options?.title ?? 'Error'
183
210
  });
184
211
  }
212
+ /**
213
+ * Clears a notification by ID.
214
+ *
215
+ * @param notificationId - The ID of the notification to clear.
216
+ * @returns The cleared notification, or null if the notification doesn't exist.
217
+ */
218
+ clearNotification(notificationId) {
219
+ return this._notificationService.clearNotification(notificationId);
220
+ }
185
221
  /**
186
222
  * Displays a confirmation dialog to the user and returns a promise that resolves
187
223
  * to a boolean indicating whether the user confirmed the action.
@@ -663,6 +699,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
663
699
 
664
700
  class FileService {
665
701
  _mediaUploadHelper = inject(MediaUploadHelper);
702
+ apiService = inject(ApiService);
666
703
  /**
667
704
  * Uploads media files using the provided payload and optional headers.
668
705
  *
@@ -688,6 +725,47 @@ class FileService {
688
725
  // Return the response from the server
689
726
  return response;
690
727
  }
728
+ /**
729
+ * Processes an FTP URL and returns a processed URL.
730
+ *
731
+ * @param params - The parameters containing data, an optional defaultHeader, and an optional imgElement.
732
+ * @returns A promise that resolves to the processed URL or null if an error occurs.
733
+ */
734
+ async processFtpUrl(params) {
735
+ // Return null if the data is invalid
736
+ if (!params?.data || params?.data === 'null' || params?.data === 'undefined')
737
+ return null;
738
+ try {
739
+ let url = params.data;
740
+ // Extract the value from a JSON string if it contains 'value'
741
+ if (url?.includes('value')) {
742
+ url = JSON.parse(url).value;
743
+ }
744
+ // Check if the URL is an image from the FileManager service
745
+ if (url.includes('FileManager/GetImage')) {
746
+ const options = { responseType: 'blob' };
747
+ // Add default headers if specified
748
+ if (params.defaultHeader) {
749
+ options.headers = TabSdk.util?.getDefaultAppHeaders();
750
+ }
751
+ // Fetch the image as a blob
752
+ const blob = await firstValueFrom(this.apiService.getByUrl(url, options));
753
+ // Create an object URL from the blob
754
+ url = URL.createObjectURL(blob);
755
+ }
756
+ // Set the image element's source to the processed URL
757
+ if (params.imgElement) {
758
+ params.imgElement.src = url;
759
+ params.imgElement.onload = null;
760
+ }
761
+ return url;
762
+ }
763
+ catch (e) {
764
+ // Log any errors that occur during processing
765
+ console.error("Error processing FTP", e);
766
+ return null;
767
+ }
768
+ }
691
769
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FileService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
692
770
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FileService, providedIn: 'root' });
693
771
  }
@@ -1180,6 +1258,34 @@ class StoreService {
1180
1258
  // Save the updated organization info back to storage
1181
1259
  this.setOrgInfo(orgInfo);
1182
1260
  }
1261
+ /**
1262
+ * Retrieves the locale settings from the organization info.
1263
+ *
1264
+ * @returns The locale settings if they exist, otherwise `null`.
1265
+ */
1266
+ get orgLocaleSettings() {
1267
+ // Retrieve the locale settings from the organization info
1268
+ let localSettings = this.getOrgInfo()?.LocaleSettings;
1269
+ // If the locale settings are a string, parse them as JSON
1270
+ if (typeof localSettings === 'string') {
1271
+ localSettings = JSON.parse(localSettings);
1272
+ }
1273
+ // Return the locale settings
1274
+ return localSettings;
1275
+ }
1276
+ /**
1277
+ * Sets the locale settings in the organization info.
1278
+ *
1279
+ * @param value - The locale settings to set.
1280
+ */
1281
+ set orgLocaleSettings(value) {
1282
+ // Retrieve the existing organization info or initialize a new object
1283
+ const orgInfo = this.getOrgInfo() || {};
1284
+ // Update the locale settings value
1285
+ orgInfo.LocaleSettings = value;
1286
+ // Save the updated organization info back to storage
1287
+ this.setOrgInfo(orgInfo);
1288
+ }
1183
1289
  /**
1184
1290
  * Retrieves the app ID from the app info.
1185
1291
  *
@@ -1945,13 +2051,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
1945
2051
  }]
1946
2052
  }] });
1947
2053
 
1948
- /*
1949
- * Public API Surface of tab-sdk
1950
- */
2054
+ // SDK
1951
2055
 
1952
2056
  /**
1953
2057
  * Generated bundle index. Do not edit.
1954
2058
  */
1955
2059
 
1956
- export { TabSdk };
2060
+ export { NavigationType, ScreenDisplayMode, StorageType, TabSdk };
1957
2061
  //# sourceMappingURL=techextensor-tab-sdk.mjs.map