@sambath999/localize-token 18.0.3 → 18.0.4

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.
@@ -5,6 +5,9 @@ import { BehaviorSubject } from "rxjs";
5
5
  import * as i0 from "@angular/core";
6
6
  import * as i1 from "@angular/common/http";
7
7
  import * as i2 from "./localize.token.service";
8
+ /**
9
+ * Http method options
10
+ */
8
11
  export var EMethod;
9
12
  (function (EMethod) {
10
13
  EMethod[EMethod["POST"] = 1] = "POST";
@@ -18,42 +21,57 @@ export class LocalizeApiService {
18
21
  localizeTokenService;
19
22
  isRequestingSubject = new BehaviorSubject(false);
20
23
  isResolvedStartupSubject = new BehaviorSubject(false);
24
+ get isRequesting() { return this.isRequestingSubject.value; }
25
+ get isResolvedStartup() { return this.isResolvedStartupSubject.value; }
21
26
  apiConfigs = {};
22
27
  constructor(httpClient, localizeTokenService) {
23
28
  this.httpClient = httpClient;
24
29
  this.localizeTokenService = localizeTokenService;
25
30
  }
26
- get isRequesting() { return this.isRequestingSubject.value; }
27
- get isResolvedStartup() { return this.isResolvedStartupSubject.value; }
31
+ /**
32
+ * Initialize the API service.
33
+ * @param apiConfigs - The API configurations.
34
+ */
28
35
  init(apiConfigs) {
29
36
  this.apiConfigs = apiConfigs;
30
37
  }
38
+ /**
39
+ * A higher-order function that returns a curried function for making API requests.
40
+ *
41
+ * @param baseUrl - The base URL of the API.
42
+ * @returns A curried function that can be used to make API requests.
43
+ */
31
44
  func = (baseUrl) => (path, method = EMethod.GET, value = null, isFormData = false, headers) => this.base(baseUrl, path, method, value, isFormData, headers);
32
45
  async base(baseUrl, path, method = EMethod.GET, value = null, isFormData = false, headers) {
33
46
  await this.ifPromise(this.apiConfigs.onPrepareRequest);
34
47
  const url = `${baseUrl.trim().replace(/\/?$/, '/')}${path.trim().replace(/^\//, '')}`;
35
48
  const httpMethod = EMethod[method].toLowerCase();
36
- const request = { body: value, headers: this.options(isFormData, headers) };
49
+ const request = () => { return { body: value, headers: this.options(isFormData, headers) }; };
50
+ // Wait for previous request to complete
37
51
  await this.toWaitForPreviousRequest();
52
+ // Process request
38
53
  try {
39
- return await this.processRequest(httpMethod, url, request);
54
+ return await this.processRequest(httpMethod, url, request());
40
55
  }
56
+ // Handle unauthorized error if any
41
57
  catch (error) {
42
- if (error.status !== 401)
58
+ if (error.status !== 401) {
43
59
  throw error;
60
+ }
44
61
  return await this.onUnauthorizedError(httpMethod, url, request);
45
62
  }
46
63
  }
47
64
  async onUnauthorizedError(httpMethod, url, request) {
48
65
  await this.revokeToken();
49
66
  if (!this.isResolvedStartup) {
50
- return await this.processRequest(httpMethod, url, request);
67
+ return await this.processRequest(httpMethod, url, request());
51
68
  }
52
69
  }
53
70
  async toWaitForPreviousRequest() {
54
- if (this.localizeTokenService.getIsRevokingToken()) {
55
- await waitUntil(() => !this.localizeTokenService.getIsRevokingToken());
71
+ if (this.localizeTokenService.isRevokingToken) {
72
+ await waitUntil(() => !this.localizeTokenService.isRevokingToken);
56
73
  }
74
+ // to wait for each request in 50ms, even if the request is not completed
57
75
  await waitFor(50, this.isRequesting);
58
76
  }
59
77
  async processRequest(method, url, options) {
@@ -63,19 +81,19 @@ export class LocalizeApiService {
63
81
  return result;
64
82
  }
65
83
  async revokeToken(force = false) {
66
- if (this.localizeTokenService.getIsRevokingToken() && !force) {
67
- await waitUntil(() => !this.localizeTokenService.getIsRevokingToken());
84
+ if (this.localizeTokenService.isRevokingToken && !force) {
85
+ await waitUntil(() => !this.localizeTokenService.isRevokingToken);
68
86
  return;
69
87
  }
70
88
  try {
71
- this.localizeTokenService.setIsRevokingToken(true);
89
+ this.localizeTokenService.isRevokingToken = true;
72
90
  const reqUrl = LocalizeToken.config.revokeTokenUrl;
73
- const reqHeaders = this.options().append(LocalizeToken.httpHeaders.X_REFRESH_TOKEN, `${this.localizeTokenService.getRefreshToken()}`);
91
+ const reqHeaders = this.options().append(LocalizeToken.httpHeaders.X_REFRESH_TOKEN, `${this.localizeTokenService.refreshToken}`);
74
92
  const revokeToken = await new Promise((resolve, reject) => this.httpClient.get(reqUrl, { headers: reqHeaders }).subscribe({ next: resolve, error: reject }));
75
93
  if (revokeToken?.status) {
76
- this.localizeTokenService.setAccessToken(revokeToken.message);
94
+ this.localizeTokenService.accessToken = revokeToken.message;
77
95
  }
78
- else if (!this.localizeTokenService.getRefreshToken()) {
96
+ else if (!this.localizeTokenService.refreshToken) {
79
97
  await this.ifPromise(this.apiConfigs.onAutoLogout);
80
98
  }
81
99
  else {
@@ -86,34 +104,35 @@ export class LocalizeApiService {
86
104
  }
87
105
  }
88
106
  finally {
89
- this.localizeTokenService.setIsRevokingToken(false);
107
+ this.localizeTokenService.isRevokingToken = false;
90
108
  }
91
109
  }
110
+ /** default http request options */
92
111
  options(isFormData = false, headers = {}) {
93
- const defaultHeaders = {
94
- [LocalizeToken.httpHeaders.AUTHORIZATION]: `Bearer ${this.localizeTokenService.getAccessToken()}`
95
- };
112
+ const defaultHeaders = { [LocalizeToken.httpHeaders.AUTHORIZATION]: `Bearer ${this.localizeTokenService.accessToken}`, };
96
113
  if (LocalizeToken.config.needTenant) {
97
- defaultHeaders[LocalizeToken.httpHeaders.X_TENANT] = `${this.localizeTokenService.getTenantToken()}`;
114
+ defaultHeaders[LocalizeToken.httpHeaders.X_TENANT] = `${this.localizeTokenService.tenantToken}`;
98
115
  }
99
116
  if (!isFormData) {
100
117
  defaultHeaders[LocalizeToken.httpHeaders.CONTENT_TYPE] = 'application/json';
101
118
  }
102
- const mergedHeaders = { ...defaultHeaders, ...headers };
119
+ const filteredHeaders = Object.keys(defaultHeaders).filter(key => !Object.keys(headers).includes(key))
120
+ .reduce((acc, key) => ({ ...acc, [key]: defaultHeaders[key] }), {});
121
+ const mergedHeaders = { ...filteredHeaders, ...headers };
103
122
  return new HttpHeaders(mergedHeaders);
104
123
  }
105
124
  async ifPromise(fn) {
106
- if (fn) {
107
- return fn instanceof Promise ? await fn() : fn();
108
- }
125
+ if (!fn)
126
+ return;
127
+ return fn instanceof Promise ? await fn() : fn();
109
128
  }
110
129
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: LocalizeApiService, deps: [{ token: i1.HttpClient }, { token: i2.LocalizeTokenService }], target: i0.ɵɵFactoryTarget.Injectable });
111
130
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: LocalizeApiService, providedIn: 'root' });
112
- }
131
+ } //class
113
132
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: LocalizeApiService, decorators: [{
114
133
  type: Injectable,
115
134
  args: [{
116
135
  providedIn: 'root'
117
136
  }]
118
137
  }], ctorParameters: () => [{ type: i1.HttpClient }, { type: i2.LocalizeTokenService }] });
119
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxpemUuYXBpLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2xvY2FsaXplLmFwaS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFjLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7QUFFdkMsTUFBTSxDQUFOLElBQVksT0FNWDtBQU5ELFdBQVksT0FBTztJQUNqQixxQ0FBUSxDQUFBO0lBQ1IsbUNBQU8sQ0FBQTtJQUNQLG1DQUFPLENBQUE7SUFDUCx5Q0FBVSxDQUFBO0lBQ1YsdUNBQVMsQ0FBQTtBQUNYLENBQUMsRUFOVyxPQUFPLEtBQVAsT0FBTyxRQU1sQjtBQVdELE1BQU0sT0FBTyxrQkFBa0I7SUFNVjtJQUNBO0lBTlYsbUJBQW1CLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7SUFDMUQsd0JBQXdCLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7SUFDaEUsVUFBVSxHQUF3QixFQUFFLENBQUM7SUFFN0MsWUFDbUIsVUFBc0IsRUFDdEIsb0JBQTBDO1FBRDFDLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFzQjtJQUN6RCxDQUFDO0lBRUwsSUFBSSxZQUFZLEtBQUssT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUM3RCxJQUFJLGlCQUFpQixLQUFLLE9BQU8sSUFBSSxDQUFDLHdCQUF3QixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFFdkUsSUFBSSxDQUFDLFVBQStC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QU0sYUFBYSxHQUFHLEVBQUUsR0FBRyxjQUFjLEVBQUUsR0FBRyxPQUFPLEVBQUUsQ0FBQztRQUN4RCxPQUFPLElBQUksV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFTyxLQUFLLENBQUMsU0FBUyxDQUFDLEVBQWE7UUFDbkMsSUFBSSxFQUFFLEVBQUUsQ0FBQztZQUNQLE9BQU8sRUFBRSxZQUFZLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDbkQsQ0FBQztJQUNILENBQUM7d0dBcEhVLGtCQUFrQjs0R0FBbEIsa0JBQWtCLGNBRmpCLE1BQU07OzRGQUVQLGtCQUFrQjtrQkFIOUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgTG9jYWxpemVUb2tlblNlcnZpY2UgfSBmcm9tIFwiLi9sb2NhbGl6ZS50b2tlbi5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBIZWFkZXJzIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XHJcbmltcG9ydCB7IExvY2FsaXplVG9rZW4sIHdhaXRGb3IsIHdhaXRVbnRpbCB9IGZyb20gXCIuL2xvY2FsaXplLnRva2VuXCI7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gXCJyeGpzXCI7XHJcblxyXG5leHBvcnQgZW51bSBFTWV0aG9kIHtcclxuICBQT1NUID0gMSxcclxuICBHRVQgPSAyLFxyXG4gIFBVVCA9IDMsXHJcbiAgREVMRVRFID0gNCxcclxuICBQQVRDSCA9IDVcclxufVxyXG5cclxuaW50ZXJmYWNlIElMb2NhbGl6ZUFwaUNvbmZpZ3Mge1xyXG4gIG9uUHJlcGFyZVJlcXVlc3Q/OiAoKSA9PiBhbnk7XHJcbiAgb25BdXRvTG9nb3V0PzogKCkgPT4gYW55O1xyXG4gIG9uUmV2b2tlVW5hdXRob3JpemVkPzogKCkgPT4gYW55O1xyXG59XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBMb2NhbGl6ZUFwaVNlcnZpY2Uge1xyXG4gIHJlYWRvbmx5IGlzUmVxdWVzdGluZ1N1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICByZWFkb25seSBpc1Jlc29sdmVkU3RhcnR1cFN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICBwcml2YXRlIGFwaUNvbmZpZ3M6IElMb2NhbGl6ZUFwaUNvbmZpZ3MgPSB7fTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGh0dHBDbGllbnQ6IEh0dHBDbGllbnQsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGxvY2FsaXplVG9rZW5TZXJ2aWNlOiBMb2NhbGl6ZVRva2VuU2VydmljZVxyXG4gICkgeyB9XHJcblxyXG4gIGdldCBpc1JlcXVlc3RpbmcoKSB7IHJldHVybiB0aGlzLmlzUmVxdWVzdGluZ1N1YmplY3QudmFsdWU7IH1cclxuICBnZXQgaXNSZXNvbHZlZFN0YXJ0dXAoKSB7IHJldHVybiB0aGlzLmlzUmVzb2x2ZWRTdGFydHVwU3ViamVjdC52YWx1ZTsgfVxyXG5cclxuICBpbml0KGFwaUNvbmZpZ3M6IElMb2NhbGl6ZUFwaUNvbmZpZ3MpIHtcclxuICAgIHRoaXMuYXBpQ29uZmlncyA9IGFwaUNvbmZpZ3M7XHJcbiAgfVxyXG5cclxuICBmdW5jID0gKGJhc2VVcmw6IHN0cmluZykgPT5cclxuICAgIChwYXRoOiBzdHJpbmcsIG1ldGhvZDogRU1ldGhvZCA9IEVNZXRob2QuR0VULCB2YWx1ZTogYW55ID0gbnVsbCwgaXNGb3JtRGF0YTogYm9vbGVhbiA9IGZhbHNlLCBoZWFkZXJzPzogeyBbeDogc3RyaW5nXTogc3RyaW5nIH0pID0+XHJcbiAgICAgIHRoaXMuYmFzZShiYXNlVXJsLCBwYXRoLCBtZXRob2QsIHZhbHVlLCBpc0Zvcm1EYXRhLCBoZWFkZXJzKVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGJhc2UoXHJcbiAgICBiYXNlVXJsOiBzdHJpbmcsXHJcbiAgICBwYXRoOiBzdHJpbmcsXHJcbiAgICBtZXRob2Q6IEVNZXRob2QgPSBFTWV0aG9kLkdFVCxcclxuICAgIHZhbHVlOiBhbnkgPSBudWxsLFxyXG4gICAgaXNGb3JtRGF0YTogYm9vbGVhbiA9IGZhbHNlLFxyXG4gICAgaGVhZGVycz86IHsgW3g6IHN0cmluZ106IHN0cmluZyB9XHJcbiAgKSB7XHJcbiAgICBhd2FpdCB0aGlzLmlmUHJvbWlzZSh0aGlzLmFwaUNvbmZpZ3Mub25QcmVwYXJlUmVxdWVzdCk7XHJcblxyXG4gICAgY29uc3QgdXJsID0gYCR7YmFzZVVybC50cmltKCkucmVwbGFjZSgvXFwvPyQvLCAnLycpfSR7cGF0aC50cmltKCkucmVwbGFjZSgvXlxcLy8sICcnKX1gO1xyXG4gICAgY29uc3QgaHR0cE1ldGhvZCA9IEVNZXRob2RbbWV0aG9kXS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgY29uc3QgcmVxdWVzdCA9IHsgYm9keTogdmFsdWUsIGhlYWRlcnM6IHRoaXMub3B0aW9ucyhpc0Zvcm1EYXRhLCBoZWFkZXJzKSB9O1xyXG5cclxuICAgIGF3YWl0IHRoaXMudG9XYWl0Rm9yUHJldmlvdXNSZXF1ZXN0KCk7XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMucHJvY2Vzc1JlcXVlc3QoaHR0cE1ldGhvZCwgdXJsLCByZXF1ZXN0KTtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGlmICgoZXJyb3IgYXMgYW55KS5zdGF0dXMgIT09IDQwMSkgdGhyb3cgZXJyb3I7XHJcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLm9uVW5hdXRob3JpemVkRXJyb3IoaHR0cE1ldGhvZCwgdXJsLCByZXF1ZXN0KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgb25VbmF1dGhvcml6ZWRFcnJvcihodHRwTWV0aG9kOiBzdHJpbmcsIHVybDogc3RyaW5nLCByZXF1ZXN0OiBhbnkpIHtcclxuICAgIGF3YWl0IHRoaXMucmV2b2tlVG9rZW4oKTtcclxuICAgIGlmICghdGhpcy5pc1Jlc29sdmVkU3RhcnR1cCkge1xyXG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5wcm9jZXNzUmVxdWVzdChodHRwTWV0aG9kLCB1cmwsIHJlcXVlc3QpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyB0b1dhaXRGb3JQcmV2aW91c1JlcXVlc3QoKSB7XHJcbiAgICBpZiAodGhpcy5sb2NhbGl6ZVRva2VuU2VydmljZS5nZXRJc1Jldm9raW5nVG9rZW4oKSkge1xyXG4gICAgICBhd2FpdCB3YWl0VW50aWwoKCkgPT4gIXRoaXMubG9jYWxpemVUb2tlblNlcnZpY2UuZ2V0SXNSZXZva2luZ1Rva2VuKCkpO1xyXG4gICAgfVxyXG4gICAgYXdhaXQgd2FpdEZvcig1MCwgdGhpcy5pc1JlcXVlc3RpbmcpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBwcm9jZXNzUmVxdWVzdChtZXRob2Q6IHN0cmluZywgdXJsOiBzdHJpbmcsIG9wdGlvbnM6IGFueSk6IFByb21pc2U8YW55PiB7XHJcbiAgICB0aGlzLmlzUmVxdWVzdGluZ1N1YmplY3QubmV4dCh0cnVlKTtcclxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+XHJcbiAgICAgIHRoaXMuaHR0cENsaWVudC5yZXF1ZXN0PGFueT4obWV0aG9kLCB1cmwsIG9wdGlvbnMpLnN1YnNjcmliZSh7IG5leHQ6IHJlc29sdmUsIGVycm9yOiByZWplY3QgfSkpO1xyXG4gICAgdGhpcy5pc1JlcXVlc3RpbmdTdWJqZWN0Lm5leHQoZmFsc2UpO1xyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgcmV2b2tlVG9rZW4oZm9yY2U6IGJvb2xlYW4gPSBmYWxzZSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKHRoaXMubG9jYWxpemVUb2tlblNlcnZpY2UuZ2V0SXNSZXZva2luZ1Rva2VuKCkgJiYgIWZvcmNlKSB7XHJcbiAgICAgIGF3YWl0IHdhaXRVbnRpbCgoKSA9PiAhdGhpcy5sb2NhbGl6ZVRva2VuU2VydmljZS5nZXRJc1Jldm9raW5nVG9rZW4oKSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0cnkge1xyXG4gICAgICB0aGlzLmxvY2FsaXplVG9rZW5TZXJ2aWNlLnNldElzUmV2b2tpbmdUb2tlbih0cnVlKTtcclxuICAgICAgY29uc3QgcmVxVXJsID0gTG9jYWxpemVUb2tlbi5jb25maWcucmV2b2tlVG9rZW5Vcmw7XHJcbiAgICAgIGNvbnN0IHJlcUhlYWRlcnMgPSB0aGlzLm9wdGlvbnMoKS5hcHBlbmQoTG9jYWxpemVUb2tlbi5odHRwSGVhZGVycy5YX1JFRlJFU0hfVE9LRU4sIGAke3RoaXMubG9jYWxpemVUb2tlblNlcnZpY2UuZ2V0UmVmcmVzaFRva2VuKCl9YCk7XHJcbiAgICAgIGNvbnN0IHJldm9rZVRva2VuOiBhbnkgPSBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PlxyXG4gICAgICAgIHRoaXMuaHR0cENsaWVudC5nZXQ8YW55PihyZXFVcmwhLCB7IGhlYWRlcnM6IHJlcUhlYWRlcnMgfSkuc3Vic2NyaWJlKHsgbmV4dDogcmVzb2x2ZSwgZXJyb3I6IHJlamVjdCB9KSk7XHJcblxyXG4gICAgICBpZiAocmV2b2tlVG9rZW4/LnN0YXR1cykge1xyXG4gICAgICAgIHRoaXMubG9jYWxpemVUb2tlblNlcnZpY2Uuc2V0QWNjZXNzVG9rZW4ocmV2b2tlVG9rZW4ubWVzc2FnZSk7XHJcbiAgICAgIH0gZWxzZSBpZiAoIXRoaXMubG9jYWxpemVUb2tlblNlcnZpY2UuZ2V0UmVmcmVzaFRva2VuKCkpIHtcclxuICAgICAgICBhd2FpdCB0aGlzLmlmUHJvbWlzZSh0aGlzLmFwaUNvbmZpZ3Mub25BdXRvTG9nb3V0KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAodGhpcy5hcGlDb25maWdzLm9uUmV2b2tlVW5hdXRob3JpemVkKSB7XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLmlmUHJvbWlzZSh0aGlzLmFwaUNvbmZpZ3Mub25SZXZva2VVbmF1dGhvcml6ZWQpO1xyXG4gICAgICAgICAgYXdhaXQgdGhpcy5yZXZva2VUb2tlbih0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZmluYWxseSB7XHJcbiAgICAgIHRoaXMubG9jYWxpemVUb2tlblNlcnZpY2Uuc2V0SXNSZXZva2luZ1Rva2VuKGZhbHNlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgb3B0aW9ucyhpc0Zvcm1EYXRhOiBib29sZWFuID0gZmFsc2UsIGhlYWRlcnM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fSk6IEh0dHBIZWFkZXJzIHtcclxuICAgIGNvbnN0IGRlZmF1bHRIZWFkZXJzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge1xyXG4gICAgICBbTG9jYWxpemVUb2tlbi5odHRwSGVhZGVycy5BVVRIT1JJWkFUSU9OXTogYEJlYXJlciAke3RoaXMubG9jYWxpemVUb2tlblNlcnZpY2UuZ2V0QWNjZXNzVG9rZW4oKX1gXHJcbiAgICB9O1xyXG5cclxuICAgIGlmIChMb2NhbGl6ZVRva2VuLmNvbmZpZy5uZWVkVGVuYW50KSB7XHJcbiAgICAgIGRlZmF1bHRIZWFkZXJzW0xvY2FsaXplVG9rZW4uaHR0cEhlYWRlcnMuWF9URU5BTlRdID0gYCR7dGhpcy5sb2NhbGl6ZVRva2VuU2VydmljZS5nZXRUZW5hbnRUb2tlbigpfWA7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFpc0Zvcm1EYXRhKSB7XHJcbiAgICAgIGRlZmF1bHRIZWFkZXJzW0xvY2FsaXplVG9rZW4uaHR0cEhlYWRlcnMuQ09OVEVOVF9UWVBFXSA9ICdhcHBsaWNhdGlvbi9qc29uJztcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBtZXJnZWRIZWFkZXJzID0geyAuLi5kZWZhdWx0SGVhZGVycywgLi4uaGVhZGVycyB9O1xyXG4gICAgcmV0dXJuIG5ldyBIdHRwSGVhZGVycyhtZXJnZWRIZWFkZXJzKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgaWZQcm9taXNlKGZuPzogRnVuY3Rpb24pIHtcclxuICAgIGlmIChmbikge1xyXG4gICAgICByZXR1cm4gZm4gaW5zdGFuY2VvZiBQcm9taXNlID8gYXdhaXQgZm4oKSA6IGZuKCk7XHJcbiAgICB9XHJcbiAgfVxyXG59Il19
138
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxpemUuYXBpLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2xvY2FsaXplLmFwaS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFjLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7QUFFdkM7O0dBRUc7QUFDSCxNQUFNLENBQU4sSUFBWSxPQU1YO0FBTkQsV0FBWSxPQUFPO0lBQ2pCLHFDQUFRLENBQUE7SUFDUixtQ0FBTyxDQUFBO0lBQ1AsbUNBQU8sQ0FBQTtJQUNQLHlDQUFVLENBQUE7SUFDVix1Q0FBUyxDQUFBO0FBQ1gsQ0FBQyxFQU5XLE9BQU8sS0FBUCxPQUFPLFFBTWxCO0FBbUJELE1BQU0sT0FBTyxrQkFBa0I7SUFTUjtJQUNGO0lBUlYsbUJBQW1CLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7SUFDMUQsd0JBQXdCLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7SUFDeEUsSUFBSSxZQUFZLEtBQUssT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUM3RCxJQUFJLGlCQUFpQixLQUFLLE9BQU8sSUFBSSxDQUFDLHdCQUF3QixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFFL0QsVUFBVSxHQUF3QixFQUFFLENBQUM7SUFFN0MsWUFBcUIsVUFBc0IsRUFDeEIsb0JBQTBDO1FBRHhDLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDeEIseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFzQjtJQUN6RCxDQUFDO0lBRUw7OztPQUdHO0lBQ0gsSUFBSSxDQUFDLFVBQStCO1FBQ2xDLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO0lBQy9CLENBQUM7SUFHRDs7Ozs7T0FLRztJQUNILElBQUksR0FBRyxDQUFDLE9BQWUsRUFBRSxFQUFFLENBQ3pCLENBQUMsSUFBWSxFQUFFLFNBQWtCLE9BQU8sQ0FBQyxHQUFHLEVBQUUsUUFBYSxJQUFJLEVBQUUsYUFBc0IsS0FBSyxFQUFFLE9BQWlDLEVBQUUsRUFBRSxDQUNqSSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUE7SUFFeEQsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFlLEVBQ2hDLElBQVksRUFDWixTQUFrQixPQUFPLENBQUMsR0FBRyxFQUM3QixRQUFhLElBQUksRUFDakIsYUFBc0IsS0FBSyxFQUMzQixPQUFpQztRQUVqQyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBRXZELE1BQU0sR0FBRyxHQUFHLEdBQUcsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUN0RixNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDakQsTUFBTSxPQUFPLEdBQUcsR0FBRyxFQUFFLEdBQUcsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUEsQ0FBQyxDQUFDLENBQUM7UUFFN0Ysd0NBQXdDO1FBQ3hDLE1BQU0sSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7UUFFdEMsa0JBQWtCO1FBQ2xCLElBQUksQ0FBQztZQUFDLE9BQU8sTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQTtRQUFDLENBQUM7UUFDcEUsbUNBQW1DO1FBQ25DLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDYixJQUFLLEtBQWEsQ0FBQyxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUM7Z0JBQUMsTUFBTSxLQUFLLENBQUM7WUFBQyxDQUFDO1lBQ25ELE9BQU8sTUFBTSxJQUFJLENBQUMsbUJBQW1CLENBQUMsVUFBVSxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNsRSxDQUFDO0lBQ0gsQ0FBQztJQUVPLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxVQUFrQixFQUFFLEdBQVcsRUFBRSxPQUFpQjtRQUNsRixNQUFNLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDNUIsT0FBTyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQy9ELENBQUM7SUFDSCxDQUFDO0lBRU8sS0FBSyxDQUFDLHdCQUF3QjtRQUNwQyxJQUFJLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUM5QyxNQUFNLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUNwRSxDQUFDO1FBQ0QseUVBQXlFO1FBQ3pFLE1BQU0sT0FBTyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVPLEtBQUssQ0FBQyxjQUFjLENBQUMsTUFBYyxFQUFFLEdBQVcsRUFBRSxPQUFZO1FBQ3BFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEMsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUNuRCxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBTSxNQUFNLEVBQUUsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQTtRQUNqRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JDLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFTyxLQUFLLENBQUMsV0FBVyxDQUFDLFFBQWlCLEtBQUs7UUFFOUMsSUFBSSxJQUFJLENBQUMsb0JBQW9CLENBQUMsZUFBZSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDeEQsTUFBTSxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsZUFBZSxDQUFDLENBQUE7WUFDakUsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLENBQUM7WUFDSCxJQUFJLENBQUMsb0JBQW9CLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztZQUNqRCxNQUFNLE1BQU0sR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQztZQUNuRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsZUFBZSxFQUFFLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7WUFDakksTUFBTSxXQUFXLEdBQVEsTUFBTSxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUM3RCxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBTSxNQUFPLEVBQUUsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUE7WUFFekcsSUFBSSxXQUFXLEVBQUUsTUFBTSxFQUFFLENBQUM7Z0JBQ3hCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQztZQUM5RCxDQUFDO2lCQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ25ELE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFBO1lBQ3BELENBQUM7aUJBQU0sQ0FBQztnQkFDTixJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztvQkFDekMsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsb0JBQW9CLENBQUMsQ0FBQztvQkFDM0QsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUMvQixDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7Z0JBQVMsQ0FBQztZQUNULElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO1FBQ3BELENBQUM7SUFDSCxDQUFDO0lBRUQsbUNBQW1DO0lBQzNCLE9BQU8sQ0FBQyxhQUFzQixLQUFLLEVBQUUsVUFBcUMsRUFBRTtRQUNsRixNQUFNLGNBQWMsR0FBRyxFQUFFLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsRUFBRSxVQUFVLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDO1FBQ3pILElBQUksYUFBYSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNwQyxjQUFjLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNsRyxDQUFDO1FBRUQsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ2hCLGNBQWMsQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxHQUFHLGtCQUFrQixDQUFDO1FBQzlFLENBQUM7UUFFRCxNQUFNLGVBQWUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDbkcsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQTtRQUNyRSxNQUFNLGFBQWEsR0FBRyxFQUFFLEdBQUcsZUFBZSxFQUFFLEdBQUcsT0FBTyxFQUFFLENBQUM7UUFDekQsT0FBTyxJQUFJLFdBQVcsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRU8sS0FBSyxDQUFDLFNBQVMsQ0FBQyxFQUFhO1FBQ25DLElBQUksQ0FBQyxFQUFFO1lBQUUsT0FBTztRQUNoQixPQUFPLEVBQUUsWUFBWSxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0lBQ25ELENBQUM7d0dBaklVLGtCQUFrQjs0R0FBbEIsa0JBQWtCLGNBRmpCLE1BQU07RUFxSW5CLE9BQU87NEZBbklLLGtCQUFrQjtrQkFIOUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgTG9jYWxpemVUb2tlblNlcnZpY2UgfSBmcm9tIFwiLi9sb2NhbGl6ZS50b2tlbi5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBIZWFkZXJzIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XHJcbmltcG9ydCB7IExvY2FsaXplVG9rZW4sIHdhaXRGb3IsIHdhaXRVbnRpbCB9IGZyb20gXCIuL2xvY2FsaXplLnRva2VuXCI7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gXCJyeGpzXCI7XHJcblxyXG4vKipcclxuICogSHR0cCBtZXRob2Qgb3B0aW9uc1xyXG4gKi9cclxuZXhwb3J0IGVudW0gRU1ldGhvZCB7XHJcbiAgUE9TVCA9IDEsXHJcbiAgR0VUID0gMixcclxuICBQVVQgPSAzLFxyXG4gIERFTEVURSA9IDQsXHJcbiAgUEFUQ0ggPSA1XHJcbn1cclxuXHJcbmludGVyZmFjZSBJTG9jYWxpemVBcGlDb25maWdzIHtcclxuICBvblByZXBhcmVSZXF1ZXN0PzogKCkgPT4gYW55O1xyXG4gIC8qKlxyXG4gICAqICBBIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHdoZW4gcmVmcmVzaCB0b2tlbiBpcyBtaXNzaW5nIHRoZW4gcGVyZm9ybSB0aGUgYXV0byBsb2dvdXQuXHJcbiAgICogQHJldHVybnMgLSBUaGUgYmFzZSBVUkwgb2YgdGhlIEFQSS5cclxuICAgKi9cclxuICBvbkF1dG9Mb2dvdXQ/OiAoKSA9PiBhbnk7XHJcbiAgLyoqXHJcbiAgICogQSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aGVuIHJlcXVlc3QgcmV2b2tpbmcgdG9rZW4gdW5hdXRob3JpemVkLlxyXG4gICAqIEByZXR1cm5zIC0gVGhlIGxvZ2luIGRpYWxvZyBzZXJ2aWNlLlxyXG4gICAqL1xyXG4gIG9uUmV2b2tlVW5hdXRob3JpemVkPzogKCkgPT4gYW55O1xyXG59XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBMb2NhbGl6ZUFwaVNlcnZpY2Uge1xyXG5cclxuICByZWFkb25seSBpc1JlcXVlc3RpbmdTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgcmVhZG9ubHkgaXNSZXNvbHZlZFN0YXJ0dXBTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgZ2V0IGlzUmVxdWVzdGluZygpIHsgcmV0dXJuIHRoaXMuaXNSZXF1ZXN0aW5nU3ViamVjdC52YWx1ZTsgfVxyXG4gIGdldCBpc1Jlc29sdmVkU3RhcnR1cCgpIHsgcmV0dXJuIHRoaXMuaXNSZXNvbHZlZFN0YXJ0dXBTdWJqZWN0LnZhbHVlOyB9XHJcblxyXG4gIHByaXZhdGUgYXBpQ29uZmlnczogSUxvY2FsaXplQXBpQ29uZmlncyA9IHt9O1xyXG5cclxuICBjb25zdHJ1Y3RvcihyZWFkb25seSBodHRwQ2xpZW50OiBIdHRwQ2xpZW50LFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBsb2NhbGl6ZVRva2VuU2VydmljZTogTG9jYWxpemVUb2tlblNlcnZpY2VcclxuICApIHsgfVxyXG5cclxuICAvKipcclxuICAgKiBJbml0aWFsaXplIHRoZSBBUEkgc2VydmljZS5cclxuICAgKiBAcGFyYW0gYXBpQ29uZmlncyAtIFRoZSBBUEkgY29uZmlndXJhdGlvbnMuXHJcbiAgICovXHJcbiAgaW5pdChhcGlDb25maWdzOiBJTG9jYWxpemVBcGlDb25maWdzKSB7XHJcbiAgICB0aGlzLmFwaUNvbmZpZ3MgPSBhcGlDb25maWdzO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIEEgaGlnaGVyLW9yZGVyIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGN1cnJpZWQgZnVuY3Rpb24gZm9yIG1ha2luZyBBUEkgcmVxdWVzdHMuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gYmFzZVVybCAtIFRoZSBiYXNlIFVSTCBvZiB0aGUgQVBJLlxyXG4gICAqIEByZXR1cm5zIEEgY3VycmllZCBmdW5jdGlvbiB0aGF0IGNhbiBiZSB1c2VkIHRvIG1ha2UgQVBJIHJlcXVlc3RzLlxyXG4gICAqL1xyXG4gIGZ1bmMgPSAoYmFzZVVybDogc3RyaW5nKSA9PlxyXG4gICAgKHBhdGg6IHN0cmluZywgbWV0aG9kOiBFTWV0aG9kID0gRU1ldGhvZC5HRVQsIHZhbHVlOiBhbnkgPSBudWxsLCBpc0Zvcm1EYXRhOiBib29sZWFuID0gZmFsc2UsIGhlYWRlcnM/OiB7IFt4OiBzdHJpbmddOiBzdHJpbmcgfSkgPT5cclxuICAgICAgdGhpcy5iYXNlKGJhc2VVcmwsIHBhdGgsIG1ldGhvZCwgdmFsdWUsIGlzRm9ybURhdGEsIGhlYWRlcnMpXHJcblxyXG4gIHByaXZhdGUgYXN5bmMgYmFzZShiYXNlVXJsOiBzdHJpbmcsXHJcbiAgICBwYXRoOiBzdHJpbmcsXHJcbiAgICBtZXRob2Q6IEVNZXRob2QgPSBFTWV0aG9kLkdFVCxcclxuICAgIHZhbHVlOiBhbnkgPSBudWxsLFxyXG4gICAgaXNGb3JtRGF0YTogYm9vbGVhbiA9IGZhbHNlLFxyXG4gICAgaGVhZGVycz86IHsgW3g6IHN0cmluZ106IHN0cmluZyB9KSB7XHJcblxyXG4gICAgYXdhaXQgdGhpcy5pZlByb21pc2UodGhpcy5hcGlDb25maWdzLm9uUHJlcGFyZVJlcXVlc3QpO1xyXG5cclxuICAgIGNvbnN0IHVybCA9IGAke2Jhc2VVcmwudHJpbSgpLnJlcGxhY2UoL1xcLz8kLywgJy8nKX0ke3BhdGgudHJpbSgpLnJlcGxhY2UoL15cXC8vLCAnJyl9YDtcclxuICAgIGNvbnN0IGh0dHBNZXRob2QgPSBFTWV0aG9kW21ldGhvZF0udG9Mb3dlckNhc2UoKTtcclxuICAgIGNvbnN0IHJlcXVlc3QgPSAoKSA9PiB7IHJldHVybiB7IGJvZHk6IHZhbHVlLCBoZWFkZXJzOiB0aGlzLm9wdGlvbnMoaXNGb3JtRGF0YSwgaGVhZGVycykgfSB9O1xyXG5cclxuICAgIC8vIFdhaXQgZm9yIHByZXZpb3VzIHJlcXVlc3QgdG8gY29tcGxldGVcclxuICAgIGF3YWl0IHRoaXMudG9XYWl0Rm9yUHJldmlvdXNSZXF1ZXN0KCk7XHJcblxyXG4gICAgLy8gUHJvY2VzcyByZXF1ZXN0XHJcbiAgICB0cnkgeyByZXR1cm4gYXdhaXQgdGhpcy5wcm9jZXNzUmVxdWVzdChodHRwTWV0aG9kLCB1cmwsIHJlcXVlc3QoKSkgfVxyXG4gICAgLy8gSGFuZGxlIHVuYXV0aG9yaXplZCBlcnJvciBpZiBhbnlcclxuICAgIGNhdGNoIChlcnJvcikge1xyXG4gICAgICBpZiAoKGVycm9yIGFzIGFueSkuc3RhdHVzICE9PSA0MDEpIHsgdGhyb3cgZXJyb3I7IH1cclxuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMub25VbmF1dGhvcml6ZWRFcnJvcihodHRwTWV0aG9kLCB1cmwsIHJlcXVlc3QpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBvblVuYXV0aG9yaXplZEVycm9yKGh0dHBNZXRob2Q6IHN0cmluZywgdXJsOiBzdHJpbmcsIHJlcXVlc3Q6IEZ1bmN0aW9uKSB7XHJcbiAgICBhd2FpdCB0aGlzLnJldm9rZVRva2VuKCk7XHJcbiAgICBpZiAoIXRoaXMuaXNSZXNvbHZlZFN0YXJ0dXApIHtcclxuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMucHJvY2Vzc1JlcXVlc3QoaHR0cE1ldGhvZCwgdXJsLCByZXF1ZXN0KCkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyB0b1dhaXRGb3JQcmV2aW91c1JlcXVlc3QoKSB7XHJcbiAgICBpZiAodGhpcy5sb2NhbGl6ZVRva2VuU2VydmljZS5pc1Jldm9raW5nVG9rZW4pIHtcclxuICAgICAgYXdhaXQgd2FpdFVudGlsKCgpID0+ICF0aGlzLmxvY2FsaXplVG9rZW5TZXJ2aWNlLmlzUmV2b2tpbmdUb2tlbik7XHJcbiAgICB9XHJcbiAgICAvLyB0byB3YWl0IGZvciBlYWNoIHJlcXVlc3QgaW4gNTBtcywgZXZlbiBpZiB0aGUgcmVxdWVzdCBpcyBub3QgY29tcGxldGVkXHJcbiAgICBhd2FpdCB3YWl0Rm9yKDUwLCB0aGlzLmlzUmVxdWVzdGluZyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIHByb2Nlc3NSZXF1ZXN0KG1ldGhvZDogc3RyaW5nLCB1cmw6IHN0cmluZywgb3B0aW9uczogYW55KTogUHJvbWlzZTxhbnk+IHtcclxuICAgIHRoaXMuaXNSZXF1ZXN0aW5nU3ViamVjdC5uZXh0KHRydWUpO1xyXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT5cclxuICAgICAgdGhpcy5odHRwQ2xpZW50LnJlcXVlc3Q8YW55PihtZXRob2QsIHVybCwgb3B0aW9ucykuc3Vic2NyaWJlKHsgbmV4dDogcmVzb2x2ZSwgZXJyb3I6IHJlamVjdCB9KSlcclxuICAgIHRoaXMuaXNSZXF1ZXN0aW5nU3ViamVjdC5uZXh0KGZhbHNlKTtcclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIHJldm9rZVRva2VuKGZvcmNlOiBib29sZWFuID0gZmFsc2UpOiBQcm9taXNlPHZvaWQ+IHtcclxuXHJcbiAgICBpZiAodGhpcy5sb2NhbGl6ZVRva2VuU2VydmljZS5pc1Jldm9raW5nVG9rZW4gJiYgIWZvcmNlKSB7XHJcbiAgICAgIGF3YWl0IHdhaXRVbnRpbCgoKSA9PiAhdGhpcy5sb2NhbGl6ZVRva2VuU2VydmljZS5pc1Jldm9raW5nVG9rZW4pXHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0cnkge1xyXG4gICAgICB0aGlzLmxvY2FsaXplVG9rZW5TZXJ2aWNlLmlzUmV2b2tpbmdUb2tlbiA9IHRydWU7XHJcbiAgICAgIGNvbnN0IHJlcVVybCA9IExvY2FsaXplVG9rZW4uY29uZmlnLnJldm9rZVRva2VuVXJsO1xyXG4gICAgICBjb25zdCByZXFIZWFkZXJzID0gdGhpcy5vcHRpb25zKCkuYXBwZW5kKExvY2FsaXplVG9rZW4uaHR0cEhlYWRlcnMuWF9SRUZSRVNIX1RPS0VOLCBgJHt0aGlzLmxvY2FsaXplVG9rZW5TZXJ2aWNlLnJlZnJlc2hUb2tlbn1gKTtcclxuICAgICAgY29uc3QgcmV2b2tlVG9rZW46IGFueSA9IGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+XHJcbiAgICAgICAgdGhpcy5odHRwQ2xpZW50LmdldDxhbnk+KHJlcVVybCEsIHsgaGVhZGVyczogcmVxSGVhZGVycyB9KS5zdWJzY3JpYmUoeyBuZXh0OiByZXNvbHZlLCBlcnJvcjogcmVqZWN0IH0pKVxyXG5cclxuICAgICAgaWYgKHJldm9rZVRva2VuPy5zdGF0dXMpIHtcclxuICAgICAgICB0aGlzLmxvY2FsaXplVG9rZW5TZXJ2aWNlLmFjY2Vzc1Rva2VuID0gcmV2b2tlVG9rZW4ubWVzc2FnZTtcclxuICAgICAgfSBlbHNlIGlmICghdGhpcy5sb2NhbGl6ZVRva2VuU2VydmljZS5yZWZyZXNoVG9rZW4pIHtcclxuICAgICAgICBhd2FpdCB0aGlzLmlmUHJvbWlzZSh0aGlzLmFwaUNvbmZpZ3Mub25BdXRvTG9nb3V0KVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmICh0aGlzLmFwaUNvbmZpZ3Mub25SZXZva2VVbmF1dGhvcml6ZWQpIHtcclxuICAgICAgICAgIGF3YWl0IHRoaXMuaWZQcm9taXNlKHRoaXMuYXBpQ29uZmlncy5vblJldm9rZVVuYXV0aG9yaXplZCk7XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLnJldm9rZVRva2VuKHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBmaW5hbGx5IHtcclxuICAgICAgdGhpcy5sb2NhbGl6ZVRva2VuU2VydmljZS5pc1Jldm9raW5nVG9rZW4gPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKiBkZWZhdWx0IGh0dHAgcmVxdWVzdCBvcHRpb25zICovXHJcbiAgcHJpdmF0ZSBvcHRpb25zKGlzRm9ybURhdGE6IGJvb2xlYW4gPSBmYWxzZSwgaGVhZGVyczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9KTogSHR0cEhlYWRlcnMge1xyXG4gICAgY29uc3QgZGVmYXVsdEhlYWRlcnMgPSB7IFtMb2NhbGl6ZVRva2VuLmh0dHBIZWFkZXJzLkFVVEhPUklaQVRJT05dOiBgQmVhcmVyICR7dGhpcy5sb2NhbGl6ZVRva2VuU2VydmljZS5hY2Nlc3NUb2tlbn1gLCB9O1xyXG4gICAgaWYgKExvY2FsaXplVG9rZW4uY29uZmlnLm5lZWRUZW5hbnQpIHtcclxuICAgICAgZGVmYXVsdEhlYWRlcnNbTG9jYWxpemVUb2tlbi5odHRwSGVhZGVycy5YX1RFTkFOVF0gPSBgJHt0aGlzLmxvY2FsaXplVG9rZW5TZXJ2aWNlLnRlbmFudFRva2VufWA7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFpc0Zvcm1EYXRhKSB7XHJcbiAgICAgIGRlZmF1bHRIZWFkZXJzW0xvY2FsaXplVG9rZW4uaHR0cEhlYWRlcnMuQ09OVEVOVF9UWVBFXSA9ICdhcHBsaWNhdGlvbi9qc29uJztcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBmaWx0ZXJlZEhlYWRlcnMgPSBPYmplY3Qua2V5cyhkZWZhdWx0SGVhZGVycykuZmlsdGVyKGtleSA9PiAhT2JqZWN0LmtleXMoaGVhZGVycykuaW5jbHVkZXMoa2V5KSlcclxuICAgICAgLnJlZHVjZSgoYWNjLCBrZXkpID0+ICh7IC4uLmFjYywgW2tleV06IGRlZmF1bHRIZWFkZXJzW2tleV0gfSksIHt9KVxyXG4gICAgY29uc3QgbWVyZ2VkSGVhZGVycyA9IHsgLi4uZmlsdGVyZWRIZWFkZXJzLCAuLi5oZWFkZXJzIH07XHJcbiAgICByZXR1cm4gbmV3IEh0dHBIZWFkZXJzKG1lcmdlZEhlYWRlcnMpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBpZlByb21pc2UoZm4/OiBGdW5jdGlvbikge1xyXG4gICAgaWYgKCFmbikgcmV0dXJuO1xyXG4gICAgcmV0dXJuIGZuIGluc3RhbmNlb2YgUHJvbWlzZSA/IGF3YWl0IGZuKCkgOiBmbigpO1xyXG4gIH1cclxuXHJcbn0vL2NsYXNzXHJcbiJdfQ==
@@ -5,30 +5,27 @@ import * as jwt_decode from 'jwt-decode';
5
5
  import * as i0 from "@angular/core";
6
6
  export class LocalizeTokenService {
7
7
  isRevokingTokenSubject = new BehaviorSubject(false);
8
- getAuthToken() { return this.storageGet(); }
9
- setAuthToken(value) {
8
+ get authToken() { return this.storageGet(); }
9
+ set authToken(value) {
10
10
  value
11
11
  ? this.storageSet(value)
12
12
  : LocalizeToken.storage.delete(LocalizeToken.config.authTokenName);
13
13
  }
14
- getRefreshToken() { return LocalizeToken.storage.get(LocalizeToken.config.refreshTokenName); }
15
- getAccessToken() { return this.getAuthToken()?.token; }
16
- setAccessToken(value) {
14
+ get refreshToken() { return LocalizeToken.storage.get(LocalizeToken.config.refreshTokenName); }
15
+ get accessToken() { return this.authToken?.token; }
16
+ set accessToken(value) {
17
17
  if (value) {
18
- this.setAuthToken({ token: value, revoke: false });
18
+ this.authToken = { token: value, revoke: false };
19
19
  }
20
20
  }
21
- getIsRevokingToken() { return this.isRevokingTokenSubject.value; }
22
- setIsRevokingToken(value) {
21
+ get isRevokingToken() { return this.isRevokingTokenSubject.value; /* this.authToken?.revoke ?? false */ }
22
+ set isRevokingToken(value) {
23
23
  this.isRevokingTokenSubject.next(value);
24
- if (this.getAuthToken()) {
25
- const authToken = this.getAuthToken();
26
- if (authToken) {
27
- this.setAuthToken({ ...authToken, revoke: value });
28
- }
24
+ if (this.authToken) {
25
+ this.authToken = { ...this.authToken, revoke: value };
29
26
  }
30
27
  }
31
- getTenantToken() { return LocalizeToken.storage.get(LocalizeToken.config.tenantTokenName); }
28
+ get tenantToken() { return LocalizeToken.storage.get(LocalizeToken.config.tenantTokenName); }
32
29
  constructor() { }
33
30
  storageGet() {
34
31
  try {
@@ -45,10 +42,10 @@ export class LocalizeTokenService {
45
42
  LocalizeToken.storage.set(LocalizeToken.config.authTokenName, base64);
46
43
  }
47
44
  tokensValid() {
48
- return this.getRefreshToken()?.length && (!LocalizeToken.config.needTenant || this.getTenantToken()?.length);
45
+ return this.refreshToken?.length && (!LocalizeToken.config.needTenant || this.tenantToken?.length);
49
46
  }
50
47
  decodeToken = (token) => jwt_decode.jwtDecode(token);
51
- getDecodeRefreshToken() {
48
+ get decodeRefreshToken() {
52
49
  const token = LocalizeToken.storage.get(LocalizeToken.config.refreshTokenName);
53
50
  if (!token)
54
51
  return null;
@@ -61,4 +58,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImpo
61
58
  type: Injectable,
62
59
  args: [{ providedIn: 'root' }]
63
60
  }], ctorParameters: () => [] });
64
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxpemUudG9rZW4uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvbG9jYWxpemUudG9rZW4uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3ZDLE9BQU8sS0FBSyxVQUFVLE1BQU0sWUFBWSxDQUFDOztBQWdCekMsTUFBTSxPQUFPLG9CQUFvQjtJQUNwQixzQkFBc0IsR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztJQUU5RCxZQUFZLEtBQUssT0FBTyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzVDLFlBQVksQ0FBQyxLQUE2QjtRQUM5QyxLQUFLO1lBQ0QsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDO1lBQ3hCLENBQUMsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFFRCxlQUFlLEtBQUssT0FBTyxhQUFhLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlGLGNBQWMsS0FBSyxPQUFPLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBRXZELGNBQWMsQ0FBQyxLQUF5QjtRQUNwQyxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ1IsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDdkQsQ0FBQztJQUNMLENBQUM7SUFFRCxrQkFBa0IsS0FBSyxPQUFPLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ2xFLGtCQUFrQixDQUFDLEtBQWM7UUFDN0IsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4QyxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDO1lBQ3RCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN0QyxJQUFJLFNBQVMsRUFBRSxDQUFDO2dCQUNaLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxHQUFHLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUN2RCxDQUFDO1FBQ0wsQ0FBQztJQUNMLENBQUM7SUFFRCxjQUFjLEtBQUssT0FBTyxhQUFhLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUU1RixnQkFBZ0IsQ0FBQztJQUVULFVBQVU7UUFDZCxJQUFJLENBQUM7WUFDRCxNQUFNLE9BQU8sR0FBRyxhQUFhLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQzlFLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDLENBQUM7WUFDcEMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBZSxDQUFDO1FBQzdDLENBQUM7UUFBQyxNQUFNLENBQUM7WUFDTCxPQUFPLFNBQVMsQ0FBQztRQUNyQixDQUFDO0lBQ0wsQ0FBQztJQUVPLFVBQVUsQ0FBQyxLQUFpQjtRQUNoQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQzNDLGFBQWEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzFFLENBQUM7SUFFRCxXQUFXO1FBQ1AsT0FBTyxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUUsTUFBTSxJQUFJLENBQUMsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDakgsQ0FBQztJQUVELFdBQVcsR0FBRyxDQUFDLEtBQWEsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBYSxLQUFLLENBQUMsQ0FBQztJQUN6RSxxQkFBcUI7UUFDakIsTUFBTSxLQUFLLEdBQUcsYUFBYSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQy9FLElBQUksQ0FBQyxLQUFLO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDeEIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ25DLENBQUM7d0dBMURRLG9CQUFvQjs0R0FBcEIsb0JBQW9CLGNBRFAsTUFBTTs7NEZBQ25CLG9CQUFvQjtrQkFEaEMsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IExvY2FsaXplVG9rZW4gfSBmcm9tICcuL2xvY2FsaXplLnRva2VuJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCAqIGFzIGp3dF9kZWNvZGUgZnJvbSAnand0LWRlY29kZSc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEp3dFBheWxvYWQgZXh0ZW5kcyBqd3RfZGVjb2RlLkp3dFBheWxvYWQge1xyXG4gICAgZW1haWw6IHN0cmluZztcclxuICAgIHN1Yjogc3RyaW5nO1xyXG4gICAgbmFtZTogc3RyaW5nO1xyXG4gICAgaWF0OiBudW1iZXI7XHJcbiAgICBleHA6IG51bWJlcjtcclxufVxyXG5cclxuaW50ZXJmYWNlIElBdXRoVG9rZW4ge1xyXG4gICAgdG9rZW46IHN0cmluZztcclxuICAgIHJldm9rZTogYm9vbGVhbjtcclxufVxyXG5cclxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcclxuZXhwb3J0IGNsYXNzIExvY2FsaXplVG9rZW5TZXJ2aWNlIHtcclxuICAgIHJlYWRvbmx5IGlzUmV2b2tpbmdUb2tlblN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuXHJcbiAgICBwcml2YXRlIGdldEF1dGhUb2tlbigpIHsgcmV0dXJuIHRoaXMuc3RvcmFnZUdldCgpOyB9XHJcbiAgICBwcml2YXRlIHNldEF1dGhUb2tlbih2YWx1ZTogSUF1dGhUb2tlbiB8IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHZhbHVlXHJcbiAgICAgICAgICAgID8gdGhpcy5zdG9yYWdlU2V0KHZhbHVlKVxyXG4gICAgICAgICAgICA6IExvY2FsaXplVG9rZW4uc3RvcmFnZS5kZWxldGUoTG9jYWxpemVUb2tlbi5jb25maWcuYXV0aFRva2VuTmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0UmVmcmVzaFRva2VuKCkgeyByZXR1cm4gTG9jYWxpemVUb2tlbi5zdG9yYWdlLmdldChMb2NhbGl6ZVRva2VuLmNvbmZpZy5yZWZyZXNoVG9rZW5OYW1lKTsgfVxyXG4gICAgZ2V0QWNjZXNzVG9rZW4oKSB7IHJldHVybiB0aGlzLmdldEF1dGhUb2tlbigpPy50b2tlbjsgfVxyXG5cclxuICAgIHNldEFjY2Vzc1Rva2VuKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcclxuICAgICAgICBpZiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRBdXRoVG9rZW4oeyB0b2tlbjogdmFsdWUsIHJldm9rZTogZmFsc2UgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldElzUmV2b2tpbmdUb2tlbigpIHsgcmV0dXJuIHRoaXMuaXNSZXZva2luZ1Rva2VuU3ViamVjdC52YWx1ZTsgfVxyXG4gICAgc2V0SXNSZXZva2luZ1Rva2VuKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICAgICAgdGhpcy5pc1Jldm9raW5nVG9rZW5TdWJqZWN0Lm5leHQodmFsdWUpO1xyXG4gICAgICAgIGlmICh0aGlzLmdldEF1dGhUb2tlbigpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGF1dGhUb2tlbiA9IHRoaXMuZ2V0QXV0aFRva2VuKCk7XHJcbiAgICAgICAgICAgIGlmIChhdXRoVG9rZW4pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0QXV0aFRva2VuKHsgLi4uYXV0aFRva2VuLCByZXZva2U6IHZhbHVlIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldFRlbmFudFRva2VuKCkgeyByZXR1cm4gTG9jYWxpemVUb2tlbi5zdG9yYWdlLmdldChMb2NhbGl6ZVRva2VuLmNvbmZpZy50ZW5hbnRUb2tlbk5hbWUpOyB9XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7IH1cclxuXHJcbiAgICBwcml2YXRlIHN0b3JhZ2VHZXQoKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgZW5jb2RlZCA9IExvY2FsaXplVG9rZW4uc3RvcmFnZS5nZXQoTG9jYWxpemVUb2tlbi5jb25maWcuYXV0aFRva2VuTmFtZSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGRlY29kZWQgPSBhdG9iKGVuY29kZWQgfHwgJycpO1xyXG4gICAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShkZWNvZGVkKSBhcyBJQXV0aFRva2VuO1xyXG4gICAgICAgIH0gY2F0Y2gge1xyXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHN0b3JhZ2VTZXQodmFsdWU6IElBdXRoVG9rZW4pIHtcclxuICAgICAgICBjb25zdCBiYXNlNjQgPSBidG9hKEpTT04uc3RyaW5naWZ5KHZhbHVlKSk7XHJcbiAgICAgICAgTG9jYWxpemVUb2tlbi5zdG9yYWdlLnNldChMb2NhbGl6ZVRva2VuLmNvbmZpZy5hdXRoVG9rZW5OYW1lLCBiYXNlNjQpO1xyXG4gICAgfVxyXG5cclxuICAgIHRva2Vuc1ZhbGlkKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldFJlZnJlc2hUb2tlbigpPy5sZW5ndGggJiYgKCFMb2NhbGl6ZVRva2VuLmNvbmZpZy5uZWVkVGVuYW50IHx8IHRoaXMuZ2V0VGVuYW50VG9rZW4oKT8ubGVuZ3RoKTtcclxuICAgIH1cclxuXHJcbiAgICBkZWNvZGVUb2tlbiA9ICh0b2tlbjogc3RyaW5nKSA9PiBqd3RfZGVjb2RlLmp3dERlY29kZTxKd3RQYXlsb2FkPih0b2tlbik7XHJcbiAgICBnZXREZWNvZGVSZWZyZXNoVG9rZW4oKSB7XHJcbiAgICAgICAgY29uc3QgdG9rZW4gPSBMb2NhbGl6ZVRva2VuLnN0b3JhZ2UuZ2V0KExvY2FsaXplVG9rZW4uY29uZmlnLnJlZnJlc2hUb2tlbk5hbWUpO1xyXG4gICAgICAgIGlmICghdG9rZW4pIHJldHVybiBudWxsO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRlY29kZVRva2VuKHRva2VuKTtcclxuICAgIH1cclxufSJdfQ==
61
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxpemUudG9rZW4uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvbG9jYWxpemUudG9rZW4uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3ZDLE9BQU8sS0FBSyxVQUFVLE1BQU0sWUFBWSxDQUFDOztBQWlCekMsTUFBTSxPQUFPLG9CQUFvQjtJQUNwQixzQkFBc0IsR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztJQUV0RSxJQUFZLFNBQVMsS0FBSyxPQUFPLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQSxDQUFDLENBQUM7SUFDcEQsSUFBWSxTQUFTLENBQUMsS0FBNkI7UUFDL0MsS0FBSztZQUNELENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQztZQUN4QixDQUFDLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBRUQsSUFBSSxZQUFZLEtBQUssT0FBTyxhQUFhLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUEsQ0FBQyxDQUFDO0lBQzlGLElBQUksV0FBVyxLQUFLLE9BQU8sSUFBSSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUEsQ0FBQyxDQUFDO0lBRWxELElBQUksV0FBVyxDQUFDLEtBQXlCO1FBQ3JDLElBQUksS0FBSyxFQUFFLENBQUM7WUFDUixJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUE7UUFDcEQsQ0FBQztJQUNMLENBQUM7SUFFRCxJQUFJLGVBQWUsS0FBSyxPQUFPLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLENBQUEsQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDO0lBQ3hHLElBQUksZUFBZSxDQUFDLEtBQWM7UUFDOUIsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4QyxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNqQixJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQztRQUMxRCxDQUFDO0lBQ0wsQ0FBQztJQUVELElBQUksV0FBVyxLQUFLLE9BQU8sYUFBYSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQSxDQUFDLENBQUM7SUFFNUYsZ0JBQWdCLENBQUM7SUFFVCxVQUFVO1FBQ2QsSUFBSSxDQUFDO1lBQ0QsTUFBTSxPQUFPLEdBQUcsYUFBYSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUM5RSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ3BDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQWUsQ0FBQztRQUM3QyxDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ0wsT0FBTyxTQUFTLENBQUE7UUFDcEIsQ0FBQztJQUNMLENBQUM7SUFFTyxVQUFVLENBQUMsS0FBaUI7UUFDaEMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUMzQyxhQUFhLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUMxRSxDQUFDO0lBRUQsV0FBVztRQUNQLE9BQU8sSUFBSSxDQUFDLFlBQVksRUFBRSxNQUFNLElBQUksQ0FBQyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDdkcsQ0FBQztJQUVELFdBQVcsR0FBRyxDQUFDLEtBQWEsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBYSxLQUFLLENBQUMsQ0FBQztJQUN6RSxJQUFJLGtCQUFrQjtRQUNsQixNQUFNLEtBQUssR0FBRyxhQUFhLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDL0UsSUFBSSxDQUFDLEtBQUs7WUFBRSxPQUFPLElBQUksQ0FBQztRQUN4QixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkMsQ0FBQzt3R0F2RFEsb0JBQW9COzRHQUFwQixvQkFBb0IsY0FEUCxNQUFNOzs0RkFDbkIsb0JBQW9CO2tCQURoQyxVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTG9jYWxpemVUb2tlbiB9IGZyb20gJy4vbG9jYWxpemUudG9rZW4nO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0ICogYXMgand0X2RlY29kZSBmcm9tICdqd3QtZGVjb2RlJztcclxuZXhwb3J0IGludGVyZmFjZSBKd3RQYXlsb2FkIGV4dGVuZHMgand0X2RlY29kZS5Kd3RQYXlsb2FkIHtcclxuICAgIC8vIERlZmluZSB0aGUgc3RydWN0dXJlIG9mIHlvdXIgSldUIHBheWxvYWQgaGVyZVxyXG4gICAgZW1haWw6IHN0cmluZztcclxuICAgIHN1Yjogc3RyaW5nO1xyXG4gICAgbmFtZTogc3RyaW5nO1xyXG4gICAgaWF0OiBudW1iZXI7XHJcbiAgICBleHA6IG51bWJlcjtcclxuICAgIC8vIEFkZCBvdGhlciBmaWVsZHMgYXMgbmVlZGVkXHJcbn1cclxuXHJcbmludGVyZmFjZSBJQXV0aFRva2VuIHtcclxuICAgIHRva2VuOiBzdHJpbmc7XHJcbiAgICByZXZva2U6IGJvb2xlYW47XHJcbn1cclxuXHJcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXHJcbmV4cG9ydCBjbGFzcyBMb2NhbGl6ZVRva2VuU2VydmljZSB7XHJcbiAgICByZWFkb25seSBpc1Jldm9raW5nVG9rZW5TdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gICAgcHJpdmF0ZSBnZXQgYXV0aFRva2VuKCkgeyByZXR1cm4gdGhpcy5zdG9yYWdlR2V0KCkgfVxyXG4gICAgcHJpdmF0ZSBzZXQgYXV0aFRva2VuKHZhbHVlOiBJQXV0aFRva2VuIHwgdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgdmFsdWVcclxuICAgICAgICAgICAgPyB0aGlzLnN0b3JhZ2VTZXQodmFsdWUpXHJcbiAgICAgICAgICAgIDogTG9jYWxpemVUb2tlbi5zdG9yYWdlLmRlbGV0ZShMb2NhbGl6ZVRva2VuLmNvbmZpZy5hdXRoVG9rZW5OYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgcmVmcmVzaFRva2VuKCkgeyByZXR1cm4gTG9jYWxpemVUb2tlbi5zdG9yYWdlLmdldChMb2NhbGl6ZVRva2VuLmNvbmZpZy5yZWZyZXNoVG9rZW5OYW1lKSB9XHJcbiAgICBnZXQgYWNjZXNzVG9rZW4oKSB7IHJldHVybiB0aGlzLmF1dGhUb2tlbj8udG9rZW4gfVxyXG5cclxuICAgIHNldCBhY2Nlc3NUb2tlbih2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXV0aFRva2VuID0geyB0b2tlbjogdmFsdWUsIHJldm9rZTogZmFsc2UgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXQgaXNSZXZva2luZ1Rva2VuKCkgeyByZXR1cm4gdGhpcy5pc1Jldm9raW5nVG9rZW5TdWJqZWN0LnZhbHVlIC8qIHRoaXMuYXV0aFRva2VuPy5yZXZva2UgPz8gZmFsc2UgKi8gfVxyXG4gICAgc2V0IGlzUmV2b2tpbmdUb2tlbih2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgICAgIHRoaXMuaXNSZXZva2luZ1Rva2VuU3ViamVjdC5uZXh0KHZhbHVlKTtcclxuICAgICAgICBpZiAodGhpcy5hdXRoVG9rZW4pIHtcclxuICAgICAgICAgICAgdGhpcy5hdXRoVG9rZW4gPSB7IC4uLnRoaXMuYXV0aFRva2VuLCByZXZva2U6IHZhbHVlIH07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldCB0ZW5hbnRUb2tlbigpIHsgcmV0dXJuIExvY2FsaXplVG9rZW4uc3RvcmFnZS5nZXQoTG9jYWxpemVUb2tlbi5jb25maWcudGVuYW50VG9rZW5OYW1lKSB9XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7IH1cclxuXHJcbiAgICBwcml2YXRlIHN0b3JhZ2VHZXQoKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgZW5jb2RlZCA9IExvY2FsaXplVG9rZW4uc3RvcmFnZS5nZXQoTG9jYWxpemVUb2tlbi5jb25maWcuYXV0aFRva2VuTmFtZSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGRlY29kZWQgPSBhdG9iKGVuY29kZWQgfHwgJycpO1xyXG4gICAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShkZWNvZGVkKSBhcyBJQXV0aFRva2VuO1xyXG4gICAgICAgIH0gY2F0Y2gge1xyXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc3RvcmFnZVNldCh2YWx1ZTogSUF1dGhUb2tlbikge1xyXG4gICAgICAgIGNvbnN0IGJhc2U2NCA9IGJ0b2EoSlNPTi5zdHJpbmdpZnkodmFsdWUpKTtcclxuICAgICAgICBMb2NhbGl6ZVRva2VuLnN0b3JhZ2Uuc2V0KExvY2FsaXplVG9rZW4uY29uZmlnLmF1dGhUb2tlbk5hbWUsIGJhc2U2NCk7XHJcbiAgICB9XHJcblxyXG4gICAgdG9rZW5zVmFsaWQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVmcmVzaFRva2VuPy5sZW5ndGggJiYgKCFMb2NhbGl6ZVRva2VuLmNvbmZpZy5uZWVkVGVuYW50IHx8IHRoaXMudGVuYW50VG9rZW4/Lmxlbmd0aCk7XHJcbiAgICB9XHJcblxyXG4gICAgZGVjb2RlVG9rZW4gPSAodG9rZW46IHN0cmluZykgPT4gand0X2RlY29kZS5qd3REZWNvZGU8Snd0UGF5bG9hZD4odG9rZW4pO1xyXG4gICAgZ2V0IGRlY29kZVJlZnJlc2hUb2tlbigpIHtcclxuICAgICAgICBjb25zdCB0b2tlbiA9IExvY2FsaXplVG9rZW4uc3RvcmFnZS5nZXQoTG9jYWxpemVUb2tlbi5jb25maWcucmVmcmVzaFRva2VuTmFtZSk7XHJcbiAgICAgICAgaWYgKCF0b2tlbikgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVjb2RlVG9rZW4odG9rZW4pO1xyXG4gICAgfVxyXG5cclxufVxyXG4iXX0=
@@ -1,4 +1,3 @@
1
- import { LocalizeToken } from "./localize.token";
2
1
  /**
3
2
  * Assembly of @package ng2-cookies @see https://www.npmjs.com/package/ng2-cookies
4
3
  *
@@ -57,7 +56,20 @@ export class LocalizeTokenStorageHelper {
57
56
  }
58
57
  return cookies;
59
58
  }
60
- get defaultOptions() { return LocalizeToken.cookieOptions; }
59
+ get defaultOptions() {
60
+ const getMainDomain = (subdomain) => {
61
+ const parts = subdomain.split('.');
62
+ return parts.length > 2 ? parts.slice(-2).join('.') : subdomain;
63
+ };
64
+ const mainDomain = getMainDomain(window.location.hostname);
65
+ return {
66
+ path: '/',
67
+ domain: mainDomain,
68
+ secure: true,
69
+ // samesite: SameSiteType.strict,
70
+ expires: 1
71
+ };
72
+ }
61
73
  set(name, value, options) {
62
74
  options ??= this.defaultOptions;
63
75
  const { expires, path, domain, secure, samesite } = options;
@@ -98,4 +110,4 @@ export var ISameSiteType;
98
110
  ISameSiteType["lax"] = "lax";
99
111
  ISameSiteType["none"] = "none";
100
112
  })(ISameSiteType || (ISameSiteType = {}));
101
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxpemUudG9rZW4uc3RvcmFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvbG9jYWxpemUudG9rZW4uc3RvcmFnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFHakQ7Ozs7Ozs7Ozs7OztFQVlFO0FBQ0YsTUFBTSxPQUFPLDBCQUEwQjtJQUVyQzs7Ozs7T0FLRztJQUNILEtBQUssQ0FBQyxJQUFZO1FBQ2hCLElBQUksT0FBTyxRQUFRLEtBQUssV0FBVztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQ2xELElBQUksR0FBRyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoQyxNQUFNLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsSUFBSSxHQUFHLFFBQVEsR0FBRyxJQUFJLEdBQUcsZ0JBQWdCLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDbkYsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxHQUFHLENBQUMsSUFBWTtRQUNkLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztZQUFFLE9BQU8sU0FBUyxDQUFDO1FBRXhDLElBQUksR0FBRyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoQyxNQUFNLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsSUFBSSxHQUFHLFFBQVEsR0FBRyxJQUFJLEdBQUcsZ0JBQWdCLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDbkYsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDNUMsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENB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TSxDQUFDLENBQUM7UUFDeEMsQ0FBQztJQUNILENBQUM7Q0FFRjtBQUVELE1BQU0sQ0FBTixJQUFZLGFBSVg7QUFKRCxXQUFZLGFBQWE7SUFDdkIsa0NBQWlCLENBQUE7SUFDakIsNEJBQVcsQ0FBQTtJQUNYLDhCQUFhLENBQUE7QUFDZixDQUFDLEVBSlcsYUFBYSxLQUFiLGFBQWEsUUFJeEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBMb2NhbGl6ZVRva2VuIH0gZnJvbSBcIi4vbG9jYWxpemUudG9rZW5cIjtcclxuXHJcblxyXG4vKipcclxuKiBBc3NlbWJseSBvZiBAcGFja2FnZSBuZzItY29va2llcyBAc2VlIGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL25nMi1jb29raWVzXHJcbipcclxuKiBSZWFzc2VtYmxlZCBieVxyXG4qIEBhdXRob3Igc2FtYmF0aDk5OVxyXG4qIEBkYXRlXzI5XzA5XzIwMjFcclxuKiBVcGRhdGVkIGZyb20gcmF3IHBhcmFtZXRlcnMgdG9cclxuKiBAcGFyYW0ge0lDb29raWVPcHRpb25zfSBvcHRpb25zIGFuZCBhZGRlZCBhbm90aGVyIG5ld2VyIGNvb2tpZSBmbGFnXHJcbiogQHBhcmFtIHtzdHJpbmd9IHNhbWVzaXRlXHJcbiogQHBhcmFtIHtjb25zdGFudH0gU2FtZVNpdGVUeXBlcywgQHBhcmFtIHtzdHJpbmd9IHN0cmljdCBcInN0cmljdFwiLCBAcGFyYW0ge3N0cmluZ30gbGF4IFwibGF4XCIsIEBwYXJhbSB7c3RyaW5nfSBub25lIFwibm9uZVwiXHJcbipcclxuKiBAZW51bVxyXG4qL1xyXG5leHBvcnQgY2xhc3MgTG9jYWxpemVUb2tlblN0b3JhZ2VIZWxwZXIge1xyXG5cclxuICAvKipcclxuICAgKiBDaGVja3MgdGhlIGV4aXN0ZW5jZSBvZiBhIHNpbmdsZSBjb29raWUgYnkgaXQncyBuYW1lXHJcbiAgICpcclxuICAgKiBAcGFyYW0gIHtzdHJpbmd9IG5hbWUgSWRlbnRpZmljYXRpb24gb2YgdGhlIGNvb2tpZVxyXG4gICAqIEByZXR1cm5zIGV4aXN0ZW5jZSBvZiB0aGUgY29va2llXHJcbiAgICovXHJcbiAgY2hlY2sobmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gZmFsc2U7XHJcbiAgICBuYW1lID0gZW5jb2RlVVJJQ29tcG9uZW50KG5hbWUpO1xyXG4gICAgY29uc3QgcmVnZXhwID0gbmV3IFJlZ0V4cCgnKD86XicgKyBuYW1lICsgJ3w7XFxcXHMqJyArIG5hbWUgKyAnKT0oLio/KSg/Ojt8JCknLCAnZycpO1xyXG4gICAgcmV0dXJuIHJlZ2V4cC50ZXN0KGRvY3VtZW50LmNvb2tpZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXRyaWV2ZXMgYSBzaW5nbGUgY29va2llIGJ5IGl0J3MgbmFtZVxyXG4gICAqXHJcbiAgICogQHBhcmFtICB7c3RyaW5nfSBuYW1lIElkZW50aWZpY2F0aW9uIG9mIHRoZSBDb29raWVcclxuICAgKiBAcmV0dXJucyBUaGUgQ29va2llJ3MgdmFsdWVcclxuICAgKi9cclxuICBnZXQobmFtZTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAgIGlmICghdGhpcy5jaGVjayhuYW1lKSkgcmV0dXJuIHVuZGVmaW5lZDtcclxuXHJcbiAgICBuYW1lID0gZW5jb2RlVVJJQ29tcG9uZW50KG5hbWUpO1xyXG4gICAgY29uc3QgcmVnZXhwID0gbmV3IFJlZ0V4cCgnKD86XicgKyBuYW1lICsgJ3w7XFxcXHMqJyArIG5hbWUgKyAnKT0oLio/KSg/Ojt8JCknLCAnZycpO1xyXG4gICAgY29uc3QgcmVzdWx0ID0gcmVnZXhwLmV4ZWMoZG9jdW1lbnQuY29va2llKTtcclxuICAgIHJldHVybiByZXN1bHQgPyBkZWNvZGVVUklDb21wb25lbnQocmVzdWx0WzFdKSA6IHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHJpZXZlcyBhIGEgbGlzdCBvZiBhbGwgY29va2llIGF2YWlhYmxlXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyBPYmplY3Qgd2l0aCBhbGwgQ29va2llc1xyXG4gICAqL1xyXG4gIGdldEFsbCgpOiBhbnkge1xyXG4gICAgY29uc3QgY29va2llczogYW55ID0ge307XHJcblxyXG4gICAgaWYgKGRvY3VtZW50LmNvb2tpZSkge1xyXG4gICAgICBjb25zdCBzcGxpdCA9IGRvY3VtZW50LmNvb2tpZS5zcGxpdCgnOycpO1xyXG4gICAgICBmb3IgKGNvbnN0IHMgb2Ygc3BsaXQpIHtcclxuICAgICAgICBjb25zdCBjdXJyQ29va2llID0gcy5zcGxpdCgnPScpO1xyXG4gICAgICAgIGN1cnJDb29raWVbMF0gPSBjdXJyQ29va2llWzBdLnRyaW0oKTtcclxuICAgICAgICBjb29raWVzW2RlY29kZVVSSUNvbXBvbmVudChjdXJyQ29va2llWzBdKV0gPSBkZWNvZGVVUklDb21wb25lbnQoY3VyckNvb2tpZVsxXSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY29va2llcztcclxuICB9XHJcblxyXG4gIGdldCBkZWZhdWx0T3B0aW9ucygpOiBJQ29va2llT3B0aW9ucyB7IHJldHVybiBMb2NhbGl6ZVRva2VuLmNvb2tpZU9wdGlvbnMgfVxyXG5cclxuXHJcbiAgc2V0KG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZywgb3B0aW9ucz86IElDb29raWVPcHRpb25zKSB7XHJcbiAgICBvcHRpb25zID8/PSB0aGlzLmRlZmF1bHRPcHRpb25zO1xyXG4gICAgY29uc3QgeyBleHBpcmVzLCBwYXRoLCBkb21haW4sIHNlY3VyZSwgc2FtZXNpdGUgfSA9IG9wdGlvbnM7XHJcbiAgICBsZXQgY29va2llU3RyID0gYCR7ZW5jb2RlVVJJQ29tcG9uZW50KG5hbWUpfT0ke2VuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSl9O2A7XHJcblxyXG4gICAgaWYgKGV4cGlyZXMpIHtcclxuICAgICAgY29uc3QgZHRFeHBpcmVzID0gdHlwZW9mIGV4cGlyZXMgPT09ICdudW1iZXInID8gbmV3IERhdGUoRGF0ZS5ub3coKSArIGV4cGlyZXMgKiA4NjRlNSkgOiBleHBpcmVzO1xyXG4gICAgICBjb29raWVTdHIgKz0gYGV4cGlyZXM9JHtkdEV4cGlyZXMudG9VVENTdHJpbmcoKX07YDtcclxuICAgIH1cclxuXHJcbiAgICBjb29raWVTdHIgKz0gcGF0aCA/IGBwYXRoPSR7cGF0aH07YCA6ICcnO1xyXG4gICAgY29va2llU3RyICs9IGRvbWFpbiA/IGBkb21haW49JHtkb21haW59O2AgOiAnJztcclxuICAgIGNvb2tpZVN0ciArPSBzZWN1cmUgPyAnc2VjdXJlOycgOiAnJztcclxuICAgIGNvb2tpZVN0ciArPSBzYW1lc2l0ZSA/IGBzYW1lc2l0ZT0ke3NhbWVzaXRlfTtgIDogJyc7XHJcblxyXG4gICAgZG9jdW1lbnQuY29va2llID0gY29va2llU3RyO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVtb3ZlcyBzcGVjaWZpZWQgQ29va2llXHJcbiAgICpcclxuICAgKiBAcGFyYW0gIHtzdHJpbmd9IG5hbWUgQ29va2llJ3MgaWRlbnRpZmljYXRpb25cclxuICAgKiBAcGFyYW0gIHtzdHJpbmd9IHBhdGggUGF0aCByZWxhdGl2ZSB0byB0aGUgZG9tYWluIHdoZXJlIHRoZSBjb29raWUgc2hvdWxkIGJlIGF2YWlhYmxlLiBEZWZhdWx0IC9cclxuICAgKiBAcGFyYW0gIHtzdHJpbmd9IGRvbWFpbiBEb21haW4gd2hlcmUgdGhlIGNvb2tpZSBzaG91bGQgYmUgYXZhaWFibGUuIERlZmF1bHQgY3VycmVudCBkb21haW5cclxuICAgKi9cclxuICBkZWxldGUobmFtZTogc3RyaW5nLCBwYXRoOiBzdHJpbmcgPSAnLycsIGRvbWFpbjogc3RyaW5nID0gd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lKTogdm9pZCB7XHJcbiAgICB0aGlzLnNldChuYW1lLCAnJywgeyBwYXRoLCBkb21haW4sIGV4cGlyZXM6IC0xIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGVsZXRlIGFsbCBjb29raWUgYXZhaWFibGVcclxuICAgKi9cclxuICBkZWxldGVBbGwocGF0aD86IHN0cmluZywgZG9tYWluPzogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBjb25zdCBjb29raWVzID0gdGhpcy5nZXRBbGwoKTtcclxuXHJcbiAgICBmb3IgKGNvbnN0IGNvb2tpZU5hbWUgb2YgT2JqZWN0LmtleXMoY29va2llcykpIHtcclxuICAgICAgdGhpcy5kZWxldGUoY29va2llTmFtZSwgcGF0aCwgZG9tYWluKTtcclxuICAgIH1cclxuICB9XHJcblxyXG59XHJcblxyXG5leHBvcnQgZW51bSBJU2FtZVNpdGVUeXBlIHtcclxuICBzdHJpY3QgPSBcInN0cmljdFwiLFxyXG4gIGxheCA9IFwibGF4XCIsXHJcbiAgbm9uZSA9IFwibm9uZVwiXHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUNvb2tpZU9wdGlvbnMge1xyXG4gIGV4cGlyZXM/OiBudW1iZXIgfCBEYXRlO1xyXG4gIHBhdGg/OiBzdHJpbmc7XHJcbiAgZG9tYWluPzogc3RyaW5nO1xyXG4gIHNlY3VyZT86IGJvb2xlYW47XHJcbiAgc2FtZXNpdGU/OiBzdHJpbmdcclxufVxyXG4iXX0=
113
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxpemUudG9rZW4uc3RvcmFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvbG9jYWxpemUudG9rZW4uc3RvcmFnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7O0VBWUU7QUFDRixNQUFNLE9BQU8sMEJBQTBCO0lBRXJDOzs7OztPQUtHO0lBQ0gsS0FBSyxDQUFDLElBQVk7UUFDaEIsSUFBSSxPQUFPLFFBQVEsS0FBSyxXQUFXO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDbEQsSUFBSSxHQUFHLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hDLE1BQU0sTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxJQUFJLEdBQUcsUUFBUSxHQUFHLElBQUksR0FBRyxnQkFBZ0IsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNuRixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILEdBQUcsQ0FBQyxJQUFZO1FBQ2QsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO1lBQUUsT0FBTyxTQUFTLENBQUM7UUFFeEMsSUFBSSxHQUFHLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hDLE1BQU0sTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxJQUFJLEdBQUcsUUFBUSxHQUFHLElBQUksR0FBRyxnQkFBZ0IsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNuRixNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM1QyxPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUM1RCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILE1BQU07UUFDSixNQUFNLE9BQU8sR0FBUSxFQUFFLENBQUM7UUFFeEIsSUFBSSxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDcEIsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDekMsS0FBSyxNQUFNLENBQUMsSUFBSSxLQUFLLEVBQUUsQ0FBQztnQkFDdEIsTUFBTSxVQUFVLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDaEMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDckMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsa0JBQWtCLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDakYsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRUQsSUFBSSxjQUFjO1FBQ2hCLE1BQU0sYUFBYSxHQUFHLENBQUMsU0FBaUIsRUFBVSxFQUFFO1lBQ2xELE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDbkMsT0FBTyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ2xFLENBQUMsQ0FBQztRQUVGLE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzNELE9BQU87WUFDTCxJQUFJLEVBQUUsR0FBRztZQUNULE1BQU0sRUFBRSxVQUFVO1lBQ2xCLE1BQU0sRUFBRSxJQUFJO1lBQ1osaUNBQWlDO1lBQ2pDLE9BQU8sRUFBRSxDQUFDO1NBQ1gsQ0FBQTtJQUNILENBQUM7SUFFRCxHQUFHLENBQUMsSUFBWSxFQUFFLEtBQWEsRUFBRSxPQUF3QjtRQUN2RCxPQUFPLEtBQUssSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUNoQyxNQUFNLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxHQUFHLE9BQU8sQ0FBQztRQUM1RCxJQUFJLFNBQVMsR0FBRyxHQUFHLGtCQUFrQixDQUFDLElBQUksQ0FBQyxJQUFJLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUM7UUFFNUUsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNaLE1BQU0sU0FBUyxHQUFHLE9BQU8sT0FBTyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLE9BQU8sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1lBQ2pHLFNBQVMsSUFBSSxXQUFXLFNBQVMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDO1FBQ3JELENBQUM7UUFFRCxTQUFTLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDekMsU0FBUyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsVUFBVSxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQy9DLFNBQVMsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3JDLFNBQVMsSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLFlBQVksUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUVyRCxRQUFRLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQztJQUM5QixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsTUFBTSxDQUFDLElBQVksRUFBRSxPQUFlLEdBQUcsRUFBRSxTQUFpQixNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVE7UUFDaEYsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFRDs7T0FFRztJQUNILFNBQVMsQ0FBQyxJQUFhLEVBQUUsTUFBZTtRQUN0QyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFFOUIsS0FBSyxNQUFNLFVBQVUsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDOUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3hDLENBQUM7SUFDSCxDQUFDO0NBRUY7QUFFRCxNQUFNLENBQU4sSUFBWSxhQUlYO0FBSkQsV0FBWSxhQUFhO0lBQ3ZCLGtDQUFpQixDQUFBO0lBQ2pCLDRCQUFXLENBQUE7SUFDWCw4QkFBYSxDQUFBO0FBQ2YsQ0FBQyxFQUpXLGFBQWEsS0FBYixhQUFhLFFBSXhCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiogQXNzZW1ibHkgb2YgQHBhY2thZ2UgbmcyLWNvb2tpZXMgQHNlZSBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9uZzItY29va2llc1xyXG4qXHJcbiogUmVhc3NlbWJsZWQgYnlcclxuKiBAYXV0aG9yIHNhbWJhdGg5OTlcclxuKiBAZGF0ZV8yOV8wOV8yMDIxXHJcbiogVXBkYXRlZCBmcm9tIHJhdyBwYXJhbWV0ZXJzIHRvXHJcbiogQHBhcmFtIHtJQ29va2llT3B0aW9uc30gb3B0aW9ucyBhbmQgYWRkZWQgYW5vdGhlciBuZXdlciBjb29raWUgZmxhZ1xyXG4qIEBwYXJhbSB7c3RyaW5nfSBzYW1lc2l0ZVxyXG4qIEBwYXJhbSB7Y29uc3RhbnR9IFNhbWVTaXRlVHlwZXMsIEBwYXJhbSB7c3RyaW5nfSBzdHJpY3QgXCJzdHJpY3RcIiwgQHBhcmFtIHtzdHJpbmd9IGxheCBcImxheFwiLCBAcGFyYW0ge3N0cmluZ30gbm9uZSBcIm5vbmVcIlxyXG4qXHJcbiogQGVudW1cclxuKi9cclxuZXhwb3J0IGNsYXNzIExvY2FsaXplVG9rZW5TdG9yYWdlSGVscGVyIHtcclxuXHJcbiAgLyoqXHJcbiAgICogQ2hlY2tzIHRoZSBleGlzdGVuY2Ugb2YgYSBzaW5nbGUgY29va2llIGJ5IGl0J3MgbmFtZVxyXG4gICAqXHJcbiAgICogQHBhcmFtICB7c3RyaW5nfSBuYW1lIElkZW50aWZpY2F0aW9uIG9mIHRoZSBjb29raWVcclxuICAgKiBAcmV0dXJucyBleGlzdGVuY2Ugb2YgdGhlIGNvb2tpZVxyXG4gICAqL1xyXG4gIGNoZWNrKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuIGZhbHNlO1xyXG4gICAgbmFtZSA9IGVuY29kZVVSSUNvbXBvbmVudChuYW1lKTtcclxuICAgIGNvbnN0IHJlZ2V4cCA9IG5ldyBSZWdFeHAoJyg/Ol4nICsgbmFtZSArICd8O1xcXFxzKicgKyBuYW1lICsgJyk9KC4qPykoPzo7fCQpJywgJ2cnKTtcclxuICAgIHJldHVybiByZWdleHAudGVzdChkb2N1bWVudC5jb29raWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0cmlldmVzIGEgc2luZ2xlIGNvb2tpZSBieSBpdCdzIG5hbWVcclxuICAgKlxyXG4gICAqIEBwYXJhbSAge3N0cmluZ30gbmFtZSBJZGVudGlmaWNhdGlvbiBvZiB0aGUgQ29va2llXHJcbiAgICogQHJldHVybnMgVGhlIENvb2tpZSdzIHZhbHVlXHJcbiAgICovXHJcbiAgZ2V0KG5hbWU6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XHJcbiAgICBpZiAoIXRoaXMuY2hlY2sobmFtZSkpIHJldHVybiB1bmRlZmluZWQ7XHJcblxyXG4gICAgbmFtZSA9IGVuY29kZVVSSUNvbXBvbmVudChuYW1lKTtcclxuICAgIGNvbnN0IHJlZ2V4cCA9IG5ldyBSZWdFeHAoJyg/Ol4nICsgbmFtZSArICd8O1xcXFxzKicgKyBuYW1lICsgJyk9KC4qPykoPzo7fCQpJywgJ2cnKTtcclxuICAgIGNvbnN0IHJlc3VsdCA9IHJlZ2V4cC5leGVjKGRvY3VtZW50LmNvb2tpZSk7XHJcbiAgICByZXR1cm4gcmVzdWx0ID8gZGVjb2RlVVJJQ29tcG9uZW50KHJlc3VsdFsxXSkgOiB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXRyaWV2ZXMgYSBhIGxpc3Qgb2YgYWxsIGNvb2tpZSBhdmFpYWJsZVxyXG4gICAqXHJcbiAgICogQHJldHVybnMgT2JqZWN0IHdpdGggYWxsIENvb2tpZXNcclxuICAgKi9cclxuICBnZXRBbGwoKTogYW55IHtcclxuICAgIGNvbnN0IGNvb2tpZXM6IGFueSA9IHt9O1xyXG5cclxuICAgIGlmIChkb2N1bWVudC5jb29raWUpIHtcclxuICAgICAgY29uc3Qgc3BsaXQgPSBkb2N1bWVudC5jb29raWUuc3BsaXQoJzsnKTtcclxuICAgICAgZm9yIChjb25zdCBzIG9mIHNwbGl0KSB7XHJcbiAgICAgICAgY29uc3QgY3VyckNvb2tpZSA9IHMuc3BsaXQoJz0nKTtcclxuICAgICAgICBjdXJyQ29va2llWzBdID0gY3VyckNvb2tpZVswXS50cmltKCk7XHJcbiAgICAgICAgY29va2llc1tkZWNvZGVVUklDb21wb25lbnQoY3VyckNvb2tpZVswXSldID0gZGVjb2RlVVJJQ29tcG9uZW50KGN1cnJDb29raWVbMV0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGNvb2tpZXM7XHJcbiAgfVxyXG5cclxuICBnZXQgZGVmYXVsdE9wdGlvbnMoKTogSUNvb2tpZU9wdGlvbnMge1xyXG4gICAgY29uc3QgZ2V0TWFpbkRvbWFpbiA9IChzdWJkb21haW46IHN0cmluZyk6IHN0cmluZyA9PiB7XHJcbiAgICAgIGNvbnN0IHBhcnRzID0gc3ViZG9tYWluLnNwbGl0KCcuJyk7XHJcbiAgICAgIHJldHVybiBwYXJ0cy5sZW5ndGggPiAyID8gcGFydHMuc2xpY2UoLTIpLmpvaW4oJy4nKSA6IHN1YmRvbWFpbjtcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgbWFpbkRvbWFpbiA9IGdldE1haW5Eb21haW4od2luZG93LmxvY2F0aW9uLmhvc3RuYW1lKTtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHBhdGg6ICcvJyxcclxuICAgICAgZG9tYWluOiBtYWluRG9tYWluLFxyXG4gICAgICBzZWN1cmU6IHRydWUsXHJcbiAgICAgIC8vIHNhbWVzaXRlOiBTYW1lU2l0ZVR5cGUuc3RyaWN0LFxyXG4gICAgICBleHBpcmVzOiAxXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXQobmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nLCBvcHRpb25zPzogSUNvb2tpZU9wdGlvbnMpIHtcclxuICAgIG9wdGlvbnMgPz89IHRoaXMuZGVmYXVsdE9wdGlvbnM7XHJcbiAgICBjb25zdCB7IGV4cGlyZXMsIHBhdGgsIGRvbWFpbiwgc2VjdXJlLCBzYW1lc2l0ZSB9ID0gb3B0aW9ucztcclxuICAgIGxldCBjb29raWVTdHIgPSBgJHtlbmNvZGVVUklDb21wb25lbnQobmFtZSl9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKX07YDtcclxuXHJcbiAgICBpZiAoZXhwaXJlcykge1xyXG4gICAgICBjb25zdCBkdEV4cGlyZXMgPSB0eXBlb2YgZXhwaXJlcyA9PT0gJ251bWJlcicgPyBuZXcgRGF0ZShEYXRlLm5vdygpICsgZXhwaXJlcyAqIDg2NGU1KSA6IGV4cGlyZXM7XHJcbiAgICAgIGNvb2tpZVN0ciArPSBgZXhwaXJlcz0ke2R0RXhwaXJlcy50b1VUQ1N0cmluZygpfTtgO1xyXG4gICAgfVxyXG5cclxuICAgIGNvb2tpZVN0ciArPSBwYXRoID8gYHBhdGg9JHtwYXRofTtgIDogJyc7XHJcbiAgICBjb29raWVTdHIgKz0gZG9tYWluID8gYGRvbWFpbj0ke2RvbWFpbn07YCA6ICcnO1xyXG4gICAgY29va2llU3RyICs9IHNlY3VyZSA/ICdzZWN1cmU7JyA6ICcnO1xyXG4gICAgY29va2llU3RyICs9IHNhbWVzaXRlID8gYHNhbWVzaXRlPSR7c2FtZXNpdGV9O2AgOiAnJztcclxuXHJcbiAgICBkb2N1bWVudC5jb29raWUgPSBjb29raWVTdHI7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZW1vdmVzIHNwZWNpZmllZCBDb29raWVcclxuICAgKlxyXG4gICAqIEBwYXJhbSAge3N0cmluZ30gbmFtZSBDb29raWUncyBpZGVudGlmaWNhdGlvblxyXG4gICAqIEBwYXJhbSAge3N0cmluZ30gcGF0aCBQYXRoIHJlbGF0aXZlIHRvIHRoZSBkb21haW4gd2hlcmUgdGhlIGNvb2tpZSBzaG91bGQgYmUgYXZhaWFibGUuIERlZmF1bHQgL1xyXG4gICAqIEBwYXJhbSAge3N0cmluZ30gZG9tYWluIERvbWFpbiB3aGVyZSB0aGUgY29va2llIHNob3VsZCBiZSBhdmFpYWJsZS4gRGVmYXVsdCBjdXJyZW50IGRvbWFpblxyXG4gICAqL1xyXG4gIGRlbGV0ZShuYW1lOiBzdHJpbmcsIHBhdGg6IHN0cmluZyA9ICcvJywgZG9tYWluOiBzdHJpbmcgPSB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUpOiB2b2lkIHtcclxuICAgIHRoaXMuc2V0KG5hbWUsICcnLCB7IHBhdGgsIGRvbWFpbiwgZXhwaXJlczogLTEgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEZWxldGUgYWxsIGNvb2tpZSBhdmFpYWJsZVxyXG4gICAqL1xyXG4gIGRlbGV0ZUFsbChwYXRoPzogc3RyaW5nLCBkb21haW4/OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNvbnN0IGNvb2tpZXMgPSB0aGlzLmdldEFsbCgpO1xyXG5cclxuICAgIGZvciAoY29uc3QgY29va2llTmFtZSBvZiBPYmplY3Qua2V5cyhjb29raWVzKSkge1xyXG4gICAgICB0aGlzLmRlbGV0ZShjb29raWVOYW1lLCBwYXRoLCBkb21haW4pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbn1cclxuXHJcbmV4cG9ydCBlbnVtIElTYW1lU2l0ZVR5cGUge1xyXG4gIHN0cmljdCA9IFwic3RyaWN0XCIsXHJcbiAgbGF4ID0gXCJsYXhcIixcclxuICBub25lID0gXCJub25lXCJcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJQ29va2llT3B0aW9ucyB7XHJcbiAgZXhwaXJlcz86IG51bWJlciB8IERhdGU7XHJcbiAgcGF0aD86IHN0cmluZztcclxuICBkb21haW4/OiBzdHJpbmc7XHJcbiAgc2VjdXJlPzogYm9vbGVhbjtcclxuICBzYW1lc2l0ZT86IHN0cmluZ1xyXG59XHJcbiJdfQ==
@@ -63,7 +63,20 @@ class LocalizeTokenStorageHelper {
63
63
  }
64
64
  return cookies;
65
65
  }
66
- get defaultOptions() { return LocalizeToken.cookieOptions; }
66
+ get defaultOptions() {
67
+ const getMainDomain = (subdomain) => {
68
+ const parts = subdomain.split('.');
69
+ return parts.length > 2 ? parts.slice(-2).join('.') : subdomain;
70
+ };
71
+ const mainDomain = getMainDomain(window.location.hostname);
72
+ return {
73
+ path: '/',
74
+ domain: mainDomain,
75
+ secure: true,
76
+ // samesite: SameSiteType.strict,
77
+ expires: 1
78
+ };
79
+ }
67
80
  set(name, value, options) {
68
81
  options ??= this.defaultOptions;
69
82
  const { expires, path, domain, secure, samesite } = options;
@@ -160,30 +173,27 @@ async function waitUntil(when, intervalNumber = 50) {
160
173
 
161
174
  class LocalizeTokenService {
162
175
  isRevokingTokenSubject = new BehaviorSubject(false);
163
- getAuthToken() { return this.storageGet(); }
164
- setAuthToken(value) {
176
+ get authToken() { return this.storageGet(); }
177
+ set authToken(value) {
165
178
  value
166
179
  ? this.storageSet(value)
167
180
  : LocalizeToken.storage.delete(LocalizeToken.config.authTokenName);
168
181
  }
169
- getRefreshToken() { return LocalizeToken.storage.get(LocalizeToken.config.refreshTokenName); }
170
- getAccessToken() { return this.getAuthToken()?.token; }
171
- setAccessToken(value) {
182
+ get refreshToken() { return LocalizeToken.storage.get(LocalizeToken.config.refreshTokenName); }
183
+ get accessToken() { return this.authToken?.token; }
184
+ set accessToken(value) {
172
185
  if (value) {
173
- this.setAuthToken({ token: value, revoke: false });
186
+ this.authToken = { token: value, revoke: false };
174
187
  }
175
188
  }
176
- getIsRevokingToken() { return this.isRevokingTokenSubject.value; }
177
- setIsRevokingToken(value) {
189
+ get isRevokingToken() { return this.isRevokingTokenSubject.value; /* this.authToken?.revoke ?? false */ }
190
+ set isRevokingToken(value) {
178
191
  this.isRevokingTokenSubject.next(value);
179
- if (this.getAuthToken()) {
180
- const authToken = this.getAuthToken();
181
- if (authToken) {
182
- this.setAuthToken({ ...authToken, revoke: value });
183
- }
192
+ if (this.authToken) {
193
+ this.authToken = { ...this.authToken, revoke: value };
184
194
  }
185
195
  }
186
- getTenantToken() { return LocalizeToken.storage.get(LocalizeToken.config.tenantTokenName); }
196
+ get tenantToken() { return LocalizeToken.storage.get(LocalizeToken.config.tenantTokenName); }
187
197
  constructor() { }
188
198
  storageGet() {
189
199
  try {
@@ -200,10 +210,10 @@ class LocalizeTokenService {
200
210
  LocalizeToken.storage.set(LocalizeToken.config.authTokenName, base64);
201
211
  }
202
212
  tokensValid() {
203
- return this.getRefreshToken()?.length && (!LocalizeToken.config.needTenant || this.getTenantToken()?.length);
213
+ return this.refreshToken?.length && (!LocalizeToken.config.needTenant || this.tenantToken?.length);
204
214
  }
205
215
  decodeToken = (token) => jwt_decode.jwtDecode(token);
206
- getDecodeRefreshToken() {
216
+ get decodeRefreshToken() {
207
217
  const token = LocalizeToken.storage.get(LocalizeToken.config.refreshTokenName);
208
218
  if (!token)
209
219
  return null;
@@ -217,6 +227,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImpo
217
227
  args: [{ providedIn: 'root' }]
218
228
  }], ctorParameters: () => [] });
219
229
 
230
+ /**
231
+ * Http method options
232
+ */
220
233
  var EMethod;
221
234
  (function (EMethod) {
222
235
  EMethod[EMethod["POST"] = 1] = "POST";
@@ -230,42 +243,57 @@ class LocalizeApiService {
230
243
  localizeTokenService;
231
244
  isRequestingSubject = new BehaviorSubject(false);
232
245
  isResolvedStartupSubject = new BehaviorSubject(false);
246
+ get isRequesting() { return this.isRequestingSubject.value; }
247
+ get isResolvedStartup() { return this.isResolvedStartupSubject.value; }
233
248
  apiConfigs = {};
234
249
  constructor(httpClient, localizeTokenService) {
235
250
  this.httpClient = httpClient;
236
251
  this.localizeTokenService = localizeTokenService;
237
252
  }
238
- get isRequesting() { return this.isRequestingSubject.value; }
239
- get isResolvedStartup() { return this.isResolvedStartupSubject.value; }
253
+ /**
254
+ * Initialize the API service.
255
+ * @param apiConfigs - The API configurations.
256
+ */
240
257
  init(apiConfigs) {
241
258
  this.apiConfigs = apiConfigs;
242
259
  }
260
+ /**
261
+ * A higher-order function that returns a curried function for making API requests.
262
+ *
263
+ * @param baseUrl - The base URL of the API.
264
+ * @returns A curried function that can be used to make API requests.
265
+ */
243
266
  func = (baseUrl) => (path, method = EMethod.GET, value = null, isFormData = false, headers) => this.base(baseUrl, path, method, value, isFormData, headers);
244
267
  async base(baseUrl, path, method = EMethod.GET, value = null, isFormData = false, headers) {
245
268
  await this.ifPromise(this.apiConfigs.onPrepareRequest);
246
269
  const url = `${baseUrl.trim().replace(/\/?$/, '/')}${path.trim().replace(/^\//, '')}`;
247
270
  const httpMethod = EMethod[method].toLowerCase();
248
- const request = { body: value, headers: this.options(isFormData, headers) };
271
+ const request = () => { return { body: value, headers: this.options(isFormData, headers) }; };
272
+ // Wait for previous request to complete
249
273
  await this.toWaitForPreviousRequest();
274
+ // Process request
250
275
  try {
251
- return await this.processRequest(httpMethod, url, request);
276
+ return await this.processRequest(httpMethod, url, request());
252
277
  }
278
+ // Handle unauthorized error if any
253
279
  catch (error) {
254
- if (error.status !== 401)
280
+ if (error.status !== 401) {
255
281
  throw error;
282
+ }
256
283
  return await this.onUnauthorizedError(httpMethod, url, request);
257
284
  }
258
285
  }
259
286
  async onUnauthorizedError(httpMethod, url, request) {
260
287
  await this.revokeToken();
261
288
  if (!this.isResolvedStartup) {
262
- return await this.processRequest(httpMethod, url, request);
289
+ return await this.processRequest(httpMethod, url, request());
263
290
  }
264
291
  }
265
292
  async toWaitForPreviousRequest() {
266
- if (this.localizeTokenService.getIsRevokingToken()) {
267
- await waitUntil(() => !this.localizeTokenService.getIsRevokingToken());
293
+ if (this.localizeTokenService.isRevokingToken) {
294
+ await waitUntil(() => !this.localizeTokenService.isRevokingToken);
268
295
  }
296
+ // to wait for each request in 50ms, even if the request is not completed
269
297
  await waitFor(50, this.isRequesting);
270
298
  }
271
299
  async processRequest(method, url, options) {
@@ -275,19 +303,19 @@ class LocalizeApiService {
275
303
  return result;
276
304
  }
277
305
  async revokeToken(force = false) {
278
- if (this.localizeTokenService.getIsRevokingToken() && !force) {
279
- await waitUntil(() => !this.localizeTokenService.getIsRevokingToken());
306
+ if (this.localizeTokenService.isRevokingToken && !force) {
307
+ await waitUntil(() => !this.localizeTokenService.isRevokingToken);
280
308
  return;
281
309
  }
282
310
  try {
283
- this.localizeTokenService.setIsRevokingToken(true);
311
+ this.localizeTokenService.isRevokingToken = true;
284
312
  const reqUrl = LocalizeToken.config.revokeTokenUrl;
285
- const reqHeaders = this.options().append(LocalizeToken.httpHeaders.X_REFRESH_TOKEN, `${this.localizeTokenService.getRefreshToken()}`);
313
+ const reqHeaders = this.options().append(LocalizeToken.httpHeaders.X_REFRESH_TOKEN, `${this.localizeTokenService.refreshToken}`);
286
314
  const revokeToken = await new Promise((resolve, reject) => this.httpClient.get(reqUrl, { headers: reqHeaders }).subscribe({ next: resolve, error: reject }));
287
315
  if (revokeToken?.status) {
288
- this.localizeTokenService.setAccessToken(revokeToken.message);
316
+ this.localizeTokenService.accessToken = revokeToken.message;
289
317
  }
290
- else if (!this.localizeTokenService.getRefreshToken()) {
318
+ else if (!this.localizeTokenService.refreshToken) {
291
319
  await this.ifPromise(this.apiConfigs.onAutoLogout);
292
320
  }
293
321
  else {
@@ -298,30 +326,31 @@ class LocalizeApiService {
298
326
  }
299
327
  }
300
328
  finally {
301
- this.localizeTokenService.setIsRevokingToken(false);
329
+ this.localizeTokenService.isRevokingToken = false;
302
330
  }
303
331
  }
332
+ /** default http request options */
304
333
  options(isFormData = false, headers = {}) {
305
- const defaultHeaders = {
306
- [LocalizeToken.httpHeaders.AUTHORIZATION]: `Bearer ${this.localizeTokenService.getAccessToken()}`
307
- };
334
+ const defaultHeaders = { [LocalizeToken.httpHeaders.AUTHORIZATION]: `Bearer ${this.localizeTokenService.accessToken}`, };
308
335
  if (LocalizeToken.config.needTenant) {
309
- defaultHeaders[LocalizeToken.httpHeaders.X_TENANT] = `${this.localizeTokenService.getTenantToken()}`;
336
+ defaultHeaders[LocalizeToken.httpHeaders.X_TENANT] = `${this.localizeTokenService.tenantToken}`;
310
337
  }
311
338
  if (!isFormData) {
312
339
  defaultHeaders[LocalizeToken.httpHeaders.CONTENT_TYPE] = 'application/json';
313
340
  }
314
- const mergedHeaders = { ...defaultHeaders, ...headers };
341
+ const filteredHeaders = Object.keys(defaultHeaders).filter(key => !Object.keys(headers).includes(key))
342
+ .reduce((acc, key) => ({ ...acc, [key]: defaultHeaders[key] }), {});
343
+ const mergedHeaders = { ...filteredHeaders, ...headers };
315
344
  return new HttpHeaders(mergedHeaders);
316
345
  }
317
346
  async ifPromise(fn) {
318
- if (fn) {
319
- return fn instanceof Promise ? await fn() : fn();
320
- }
347
+ if (!fn)
348
+ return;
349
+ return fn instanceof Promise ? await fn() : fn();
321
350
  }
322
351
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: LocalizeApiService, deps: [{ token: i1.HttpClient }, { token: LocalizeTokenService }], target: i0.ɵɵFactoryTarget.Injectable });
323
352
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: LocalizeApiService, providedIn: 'root' });
324
- }
353
+ } //class
325
354
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: LocalizeApiService, decorators: [{
326
355
  type: Injectable,
327
356
  args: [{
@@ -1 +1 @@
1
- {"version":3,"file":"sambath999-localize-token.mjs","sources":["../../src/lib/localize.token.storage.ts","../../src/lib/localize.token.ts","../../src/lib/localize.token.service.ts","../../src/lib/localize.api.service.ts","../../src/lib/localize.token.module.ts","../../src/sambath999-localize-token.ts"],"sourcesContent":["import { LocalizeToken } from \"./localize.token\";\r\n\r\n\r\n/**\r\n* Assembly of @package ng2-cookies @see https://www.npmjs.com/package/ng2-cookies\r\n*\r\n* Reassembled by\r\n* @author sambath999\r\n* @date_29_09_2021\r\n* Updated from raw parameters to\r\n* @param {ICookieOptions} options and added another newer cookie flag\r\n* @param {string} samesite\r\n* @param {constant} SameSiteTypes, @param {string} strict \"strict\", @param {string} lax \"lax\", @param {string} none \"none\"\r\n*\r\n* @enum\r\n*/\r\nexport class LocalizeTokenStorageHelper {\r\n\r\n /**\r\n * Checks the existence of a single cookie by it's name\r\n *\r\n * @param {string} name Identification of the cookie\r\n * @returns existence of the cookie\r\n */\r\n check(name: string): boolean {\r\n if (typeof document === \"undefined\") return false;\r\n name = encodeURIComponent(name);\r\n const regexp = new RegExp('(?:^' + name + '|;\\\\s*' + name + ')=(.*?)(?:;|$)', 'g');\r\n return regexp.test(document.cookie);\r\n }\r\n\r\n /**\r\n * Retrieves a single cookie by it's name\r\n *\r\n * @param {string} name Identification of the Cookie\r\n * @returns The Cookie's value\r\n */\r\n get(name: string): string | undefined {\r\n if (!this.check(name)) return undefined;\r\n\r\n name = encodeURIComponent(name);\r\n const regexp = new RegExp('(?:^' + name + '|;\\\\s*' + name + ')=(.*?)(?:;|$)', 'g');\r\n const result = regexp.exec(document.cookie);\r\n return result ? decodeURIComponent(result[1]) : undefined;\r\n }\r\n\r\n /**\r\n * Retrieves a a list of all cookie avaiable\r\n *\r\n * @returns Object with all Cookies\r\n */\r\n getAll(): any {\r\n const cookies: any = {};\r\n\r\n if (document.cookie) {\r\n const split = document.cookie.split(';');\r\n for (const s of split) {\r\n const currCookie = s.split('=');\r\n currCookie[0] = currCookie[0].trim();\r\n cookies[decodeURIComponent(currCookie[0])] = decodeURIComponent(currCookie[1]);\r\n }\r\n }\r\n\r\n return cookies;\r\n }\r\n\r\n get defaultOptions(): ICookieOptions { return LocalizeToken.cookieOptions }\r\n\r\n\r\n set(name: string, value: string, options?: ICookieOptions) {\r\n options ??= this.defaultOptions;\r\n const { expires, path, domain, secure, samesite } = options;\r\n let cookieStr = `${encodeURIComponent(name)}=${encodeURIComponent(value)};`;\r\n\r\n if (expires) {\r\n const dtExpires = typeof expires === 'number' ? new Date(Date.now() + expires * 864e5) : expires;\r\n cookieStr += `expires=${dtExpires.toUTCString()};`;\r\n }\r\n\r\n cookieStr += path ? `path=${path};` : '';\r\n cookieStr += domain ? `domain=${domain};` : '';\r\n cookieStr += secure ? 'secure;' : '';\r\n cookieStr += samesite ? `samesite=${samesite};` : '';\r\n\r\n document.cookie = cookieStr;\r\n }\r\n\r\n /**\r\n * Removes specified Cookie\r\n *\r\n * @param {string} name Cookie's identification\r\n * @param {string} path Path relative to the domain where the cookie should be avaiable. Default /\r\n * @param {string} domain Domain where the cookie should be avaiable. Default current domain\r\n */\r\n delete(name: string, path: string = '/', domain: string = window.location.hostname): void {\r\n this.set(name, '', { path, domain, expires: -1 });\r\n }\r\n\r\n /**\r\n * Delete all cookie avaiable\r\n */\r\n deleteAll(path?: string, domain?: string): void {\r\n const cookies = this.getAll();\r\n\r\n for (const cookieName of Object.keys(cookies)) {\r\n this.delete(cookieName, path, domain);\r\n }\r\n }\r\n\r\n}\r\n\r\nexport enum ISameSiteType {\r\n strict = \"strict\",\r\n lax = \"lax\",\r\n none = \"none\"\r\n}\r\n\r\nexport interface ICookieOptions {\r\n expires?: number | Date;\r\n path?: string;\r\n domain?: string;\r\n secure?: boolean;\r\n samesite?: string\r\n}\r\n","import { ICookieOptions, LocalizeTokenStorageHelper } from \"./localize.token.storage\";\r\ninterface ILocalizeTokenConfig {\r\n mainDomain: string;\r\n authTokenName: string;\r\n tenantTokenName: string;\r\n refreshTokenName: string;\r\n needTenant: boolean;\r\n isProduction: boolean;\r\n revokeTokenUrl?: string;\r\n}\r\nexport class LocalizeToken {\r\n static config: ILocalizeTokenConfig = {\r\n mainDomain: location.hostname,\r\n authTokenName: 'auth-token',\r\n tenantTokenName: 'tenant-token',\r\n refreshTokenName: 'refresh-token',\r\n needTenant: false,\r\n isProduction: false,\r\n }\r\n\r\n static cookieOptions: ICookieOptions = {\r\n path: '/',\r\n domain: LocalizeToken.config.mainDomain,\r\n secure: true,\r\n // samesite: SameSiteType.strict,\r\n expires: 1\r\n }\r\n static readonly storage = new LocalizeTokenStorageHelper();\r\n\r\n static readonly httpHeaders = {\r\n AUTHORIZATION: 'Authorization',\r\n X_TENANT: 'X-Tenant',\r\n X_REFRESH_TOKEN: 'X-RefreshToken',\r\n CONTENT_TYPE: 'Content-Type',\r\n }\r\n}\r\n\r\n\r\n/**\r\n * Waits for a specified amount of time.\r\n * @param milliseconds - The milliseconds to wait.\r\n * @param when - The condition to wait for. Default is true.\r\n * @returns - Promise<void>\r\n */\r\nexport async function waitFor(milliseconds: number, when: boolean = true) {\r\n if (!when) return;\r\n await new Promise(resolve => setTimeout(resolve, milliseconds));\r\n }\r\n \r\n /**\r\n * Waits until the condition is met.\r\n * @param when - The condition to wait for.\r\n * @param intervalNumber - The interval number in milliseconds to check the condition. Default is 50.\r\n */\r\n export async function waitUntil(when: () => any, intervalNumber: number = 50) {\r\n await new Promise(resolve => {\r\n const interval = setInterval(async () => {\r\n const cond = when();\r\n const result = cond instanceof Promise ? await cond : cond;\r\n if (result) {\r\n clearInterval(interval);\r\n resolve(true);\r\n }\r\n }, intervalNumber);\r\n });\r\n }","import { Injectable } from '@angular/core';\r\nimport { LocalizeToken } from './localize.token';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport * as jwt_decode from 'jwt-decode';\r\n\r\nexport interface JwtPayload extends jwt_decode.JwtPayload {\r\n email: string;\r\n sub: string;\r\n name: string;\r\n iat: number;\r\n exp: number;\r\n}\r\n\r\ninterface IAuthToken {\r\n token: string;\r\n revoke: boolean;\r\n}\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class LocalizeTokenService {\r\n readonly isRevokingTokenSubject = new BehaviorSubject<boolean>(false);\r\n\r\n private getAuthToken() { return this.storageGet(); }\r\n private setAuthToken(value: IAuthToken | undefined) {\r\n value\r\n ? this.storageSet(value)\r\n : LocalizeToken.storage.delete(LocalizeToken.config.authTokenName);\r\n }\r\n\r\n getRefreshToken() { return LocalizeToken.storage.get(LocalizeToken.config.refreshTokenName); }\r\n getAccessToken() { return this.getAuthToken()?.token; }\r\n\r\n setAccessToken(value: string | undefined) {\r\n if (value) {\r\n this.setAuthToken({ token: value, revoke: false });\r\n }\r\n }\r\n\r\n getIsRevokingToken() { return this.isRevokingTokenSubject.value; }\r\n setIsRevokingToken(value: boolean) {\r\n this.isRevokingTokenSubject.next(value);\r\n if (this.getAuthToken()) {\r\n const authToken = this.getAuthToken();\r\n if (authToken) {\r\n this.setAuthToken({ ...authToken, revoke: value });\r\n }\r\n }\r\n }\r\n\r\n getTenantToken() { return LocalizeToken.storage.get(LocalizeToken.config.tenantTokenName); }\r\n\r\n constructor() { }\r\n\r\n private storageGet() {\r\n try {\r\n const encoded = LocalizeToken.storage.get(LocalizeToken.config.authTokenName);\r\n const decoded = atob(encoded || '');\r\n return JSON.parse(decoded) as IAuthToken;\r\n } catch {\r\n return undefined;\r\n }\r\n }\r\n\r\n private storageSet(value: IAuthToken) {\r\n const base64 = btoa(JSON.stringify(value));\r\n LocalizeToken.storage.set(LocalizeToken.config.authTokenName, base64);\r\n }\r\n\r\n tokensValid() {\r\n return this.getRefreshToken()?.length && (!LocalizeToken.config.needTenant || this.getTenantToken()?.length);\r\n }\r\n\r\n decodeToken = (token: string) => jwt_decode.jwtDecode<JwtPayload>(token);\r\n getDecodeRefreshToken() {\r\n const token = LocalizeToken.storage.get(LocalizeToken.config.refreshTokenName);\r\n if (!token) return null;\r\n return this.decodeToken(token);\r\n }\r\n}","import { Injectable } from \"@angular/core\";\r\nimport { LocalizeTokenService } from \"./localize.token.service\";\r\nimport { HttpClient, HttpHeaders } from \"@angular/common/http\";\r\nimport { LocalizeToken, waitFor, waitUntil } from \"./localize.token\";\r\nimport { BehaviorSubject } from \"rxjs\";\r\n\r\nexport enum EMethod {\r\n POST = 1,\r\n GET = 2,\r\n PUT = 3,\r\n DELETE = 4,\r\n PATCH = 5\r\n}\r\n\r\ninterface ILocalizeApiConfigs {\r\n onPrepareRequest?: () => any;\r\n onAutoLogout?: () => any;\r\n onRevokeUnauthorized?: () => any;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class LocalizeApiService {\r\n readonly isRequestingSubject = new BehaviorSubject<boolean>(false);\r\n readonly isResolvedStartupSubject = new BehaviorSubject<boolean>(false);\r\n private apiConfigs: ILocalizeApiConfigs = {};\r\n\r\n constructor(\r\n private readonly httpClient: HttpClient,\r\n private readonly localizeTokenService: LocalizeTokenService\r\n ) { }\r\n\r\n get isRequesting() { return this.isRequestingSubject.value; }\r\n get isResolvedStartup() { return this.isResolvedStartupSubject.value; }\r\n\r\n init(apiConfigs: ILocalizeApiConfigs) {\r\n this.apiConfigs = apiConfigs;\r\n }\r\n\r\n func = (baseUrl: string) =>\r\n (path: string, method: EMethod = EMethod.GET, value: any = null, isFormData: boolean = false, headers?: { [x: string]: string }) =>\r\n this.base(baseUrl, path, method, value, isFormData, headers)\r\n\r\n private async base(\r\n baseUrl: string,\r\n path: string,\r\n method: EMethod = EMethod.GET,\r\n value: any = null,\r\n isFormData: boolean = false,\r\n headers?: { [x: string]: string }\r\n ) {\r\n await this.ifPromise(this.apiConfigs.onPrepareRequest);\r\n\r\n const url = `${baseUrl.trim().replace(/\\/?$/, '/')}${path.trim().replace(/^\\//, '')}`;\r\n const httpMethod = EMethod[method].toLowerCase();\r\n const request = { body: value, headers: this.options(isFormData, headers) };\r\n\r\n await this.toWaitForPreviousRequest();\r\n\r\n try {\r\n return await this.processRequest(httpMethod, url, request);\r\n } catch (error) {\r\n if ((error as any).status !== 401) throw error;\r\n return await this.onUnauthorizedError(httpMethod, url, request);\r\n }\r\n }\r\n\r\n private async onUnauthorizedError(httpMethod: string, url: string, request: any) {\r\n await this.revokeToken();\r\n if (!this.isResolvedStartup) {\r\n return await this.processRequest(httpMethod, url, request);\r\n }\r\n }\r\n\r\n private async toWaitForPreviousRequest() {\r\n if (this.localizeTokenService.getIsRevokingToken()) {\r\n await waitUntil(() => !this.localizeTokenService.getIsRevokingToken());\r\n }\r\n await waitFor(50, this.isRequesting);\r\n }\r\n\r\n private async processRequest(method: string, url: string, options: any): Promise<any> {\r\n this.isRequestingSubject.next(true);\r\n const result = await new Promise((resolve, reject) =>\r\n this.httpClient.request<any>(method, url, options).subscribe({ next: resolve, error: reject }));\r\n this.isRequestingSubject.next(false);\r\n return result;\r\n }\r\n\r\n private async revokeToken(force: boolean = false): Promise<void> {\r\n if (this.localizeTokenService.getIsRevokingToken() && !force) {\r\n await waitUntil(() => !this.localizeTokenService.getIsRevokingToken());\r\n return;\r\n }\r\n\r\n try {\r\n this.localizeTokenService.setIsRevokingToken(true);\r\n const reqUrl = LocalizeToken.config.revokeTokenUrl;\r\n const reqHeaders = this.options().append(LocalizeToken.httpHeaders.X_REFRESH_TOKEN, `${this.localizeTokenService.getRefreshToken()}`);\r\n const revokeToken: any = await new Promise((resolve, reject) =>\r\n this.httpClient.get<any>(reqUrl!, { headers: reqHeaders }).subscribe({ next: resolve, error: reject }));\r\n\r\n if (revokeToken?.status) {\r\n this.localizeTokenService.setAccessToken(revokeToken.message);\r\n } else if (!this.localizeTokenService.getRefreshToken()) {\r\n await this.ifPromise(this.apiConfigs.onAutoLogout);\r\n } else {\r\n if (this.apiConfigs.onRevokeUnauthorized) {\r\n await this.ifPromise(this.apiConfigs.onRevokeUnauthorized);\r\n await this.revokeToken(true);\r\n }\r\n }\r\n } finally {\r\n this.localizeTokenService.setIsRevokingToken(false);\r\n }\r\n }\r\n\r\n private options(isFormData: boolean = false, headers: { [key: string]: string } = {}): HttpHeaders {\r\n const defaultHeaders: { [key: string]: string } = {\r\n [LocalizeToken.httpHeaders.AUTHORIZATION]: `Bearer ${this.localizeTokenService.getAccessToken()}`\r\n };\r\n\r\n if (LocalizeToken.config.needTenant) {\r\n defaultHeaders[LocalizeToken.httpHeaders.X_TENANT] = `${this.localizeTokenService.getTenantToken()}`;\r\n }\r\n\r\n if (!isFormData) {\r\n defaultHeaders[LocalizeToken.httpHeaders.CONTENT_TYPE] = 'application/json';\r\n }\r\n\r\n const mergedHeaders = { ...defaultHeaders, ...headers };\r\n return new HttpHeaders(mergedHeaders);\r\n }\r\n\r\n private async ifPromise(fn?: Function) {\r\n if (fn) {\r\n return fn instanceof Promise ? await fn() : fn();\r\n }\r\n }\r\n}","import { NgModule } from '@angular/core';\r\nimport { LocalizeTokenService } from './localize.token.service';\r\nimport { LocalizeApiService } from './localize.api.service';\r\n\r\n@NgModule({\r\n providers: [\r\n LocalizeTokenService,\r\n LocalizeApiService\r\n ],\r\n})\r\nexport class LocalizeTokenModule { }","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2.LocalizeTokenService"],"mappings":"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"}
1
+ {"version":3,"file":"sambath999-localize-token.mjs","sources":["../../src/lib/localize.token.storage.ts","../../src/lib/localize.token.ts","../../src/lib/localize.token.service.ts","../../src/lib/localize.api.service.ts","../../src/lib/localize.token.module.ts","../../src/sambath999-localize-token.ts"],"sourcesContent":["/**\r\n* Assembly of @package ng2-cookies @see https://www.npmjs.com/package/ng2-cookies\r\n*\r\n* Reassembled by\r\n* @author sambath999\r\n* @date_29_09_2021\r\n* Updated from raw parameters to\r\n* @param {ICookieOptions} options and added another newer cookie flag\r\n* @param {string} samesite\r\n* @param {constant} SameSiteTypes, @param {string} strict \"strict\", @param {string} lax \"lax\", @param {string} none \"none\"\r\n*\r\n* @enum\r\n*/\r\nexport class LocalizeTokenStorageHelper {\r\n\r\n /**\r\n * Checks the existence of a single cookie by it's name\r\n *\r\n * @param {string} name Identification of the cookie\r\n * @returns existence of the cookie\r\n */\r\n check(name: string): boolean {\r\n if (typeof document === \"undefined\") return false;\r\n name = encodeURIComponent(name);\r\n const regexp = new RegExp('(?:^' + name + '|;\\\\s*' + name + ')=(.*?)(?:;|$)', 'g');\r\n return regexp.test(document.cookie);\r\n }\r\n\r\n /**\r\n * Retrieves a single cookie by it's name\r\n *\r\n * @param {string} name Identification of the Cookie\r\n * @returns The Cookie's value\r\n */\r\n get(name: string): string | undefined {\r\n if (!this.check(name)) return undefined;\r\n\r\n name = encodeURIComponent(name);\r\n const regexp = new RegExp('(?:^' + name + '|;\\\\s*' + name + ')=(.*?)(?:;|$)', 'g');\r\n const result = regexp.exec(document.cookie);\r\n return result ? decodeURIComponent(result[1]) : undefined;\r\n }\r\n\r\n /**\r\n * Retrieves a a list of all cookie avaiable\r\n *\r\n * @returns Object with all Cookies\r\n */\r\n getAll(): any {\r\n const cookies: any = {};\r\n\r\n if (document.cookie) {\r\n const split = document.cookie.split(';');\r\n for (const s of split) {\r\n const currCookie = s.split('=');\r\n currCookie[0] = currCookie[0].trim();\r\n cookies[decodeURIComponent(currCookie[0])] = decodeURIComponent(currCookie[1]);\r\n }\r\n }\r\n\r\n return cookies;\r\n }\r\n\r\n get defaultOptions(): ICookieOptions {\r\n const getMainDomain = (subdomain: string): string => {\r\n const parts = subdomain.split('.');\r\n return parts.length > 2 ? parts.slice(-2).join('.') : subdomain;\r\n };\r\n\r\n const mainDomain = getMainDomain(window.location.hostname);\r\n return {\r\n path: '/',\r\n domain: mainDomain,\r\n secure: true,\r\n // samesite: SameSiteType.strict,\r\n expires: 1\r\n }\r\n }\r\n\r\n set(name: string, value: string, options?: ICookieOptions) {\r\n options ??= this.defaultOptions;\r\n const { expires, path, domain, secure, samesite } = options;\r\n let cookieStr = `${encodeURIComponent(name)}=${encodeURIComponent(value)};`;\r\n\r\n if (expires) {\r\n const dtExpires = typeof expires === 'number' ? new Date(Date.now() + expires * 864e5) : expires;\r\n cookieStr += `expires=${dtExpires.toUTCString()};`;\r\n }\r\n\r\n cookieStr += path ? `path=${path};` : '';\r\n cookieStr += domain ? `domain=${domain};` : '';\r\n cookieStr += secure ? 'secure;' : '';\r\n cookieStr += samesite ? `samesite=${samesite};` : '';\r\n\r\n document.cookie = cookieStr;\r\n }\r\n\r\n /**\r\n * Removes specified Cookie\r\n *\r\n * @param {string} name Cookie's identification\r\n * @param {string} path Path relative to the domain where the cookie should be avaiable. Default /\r\n * @param {string} domain Domain where the cookie should be avaiable. Default current domain\r\n */\r\n delete(name: string, path: string = '/', domain: string = window.location.hostname): void {\r\n this.set(name, '', { path, domain, expires: -1 });\r\n }\r\n\r\n /**\r\n * Delete all cookie avaiable\r\n */\r\n deleteAll(path?: string, domain?: string): void {\r\n const cookies = this.getAll();\r\n\r\n for (const cookieName of Object.keys(cookies)) {\r\n this.delete(cookieName, path, domain);\r\n }\r\n }\r\n\r\n}\r\n\r\nexport enum ISameSiteType {\r\n strict = \"strict\",\r\n lax = \"lax\",\r\n none = \"none\"\r\n}\r\n\r\nexport interface ICookieOptions {\r\n expires?: number | Date;\r\n path?: string;\r\n domain?: string;\r\n secure?: boolean;\r\n samesite?: string\r\n}\r\n","import { ICookieOptions, LocalizeTokenStorageHelper } from \"./localize.token.storage\";\r\ninterface ILocalizeTokenConfig {\r\n mainDomain: string;\r\n authTokenName: string;\r\n tenantTokenName: string;\r\n refreshTokenName: string;\r\n needTenant: boolean;\r\n isProduction: boolean;\r\n revokeTokenUrl?: string;\r\n}\r\nexport class LocalizeToken {\r\n static config: ILocalizeTokenConfig = {\r\n mainDomain: location.hostname,\r\n authTokenName: 'auth-token',\r\n tenantTokenName: 'tenant-token',\r\n refreshTokenName: 'refresh-token',\r\n needTenant: false,\r\n isProduction: false,\r\n }\r\n\r\n static cookieOptions: ICookieOptions = {\r\n path: '/',\r\n domain: LocalizeToken.config.mainDomain,\r\n secure: true,\r\n // samesite: SameSiteType.strict,\r\n expires: 1\r\n }\r\n static readonly storage = new LocalizeTokenStorageHelper();\r\n\r\n static readonly httpHeaders = {\r\n AUTHORIZATION: 'Authorization',\r\n X_TENANT: 'X-Tenant',\r\n X_REFRESH_TOKEN: 'X-RefreshToken',\r\n CONTENT_TYPE: 'Content-Type',\r\n }\r\n}\r\n\r\n\r\n/**\r\n * Waits for a specified amount of time.\r\n * @param milliseconds - The milliseconds to wait.\r\n * @param when - The condition to wait for. Default is true.\r\n * @returns - Promise<void>\r\n */\r\nexport async function waitFor(milliseconds: number, when: boolean = true) {\r\n if (!when) return;\r\n await new Promise(resolve => setTimeout(resolve, milliseconds));\r\n }\r\n \r\n /**\r\n * Waits until the condition is met.\r\n * @param when - The condition to wait for.\r\n * @param intervalNumber - The interval number in milliseconds to check the condition. Default is 50.\r\n */\r\n export async function waitUntil(when: () => any, intervalNumber: number = 50) {\r\n await new Promise(resolve => {\r\n const interval = setInterval(async () => {\r\n const cond = when();\r\n const result = cond instanceof Promise ? await cond : cond;\r\n if (result) {\r\n clearInterval(interval);\r\n resolve(true);\r\n }\r\n }, intervalNumber);\r\n });\r\n }","import { Injectable } from '@angular/core';\r\nimport { LocalizeToken } from './localize.token';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport * as jwt_decode from 'jwt-decode';\r\nexport interface JwtPayload extends jwt_decode.JwtPayload {\r\n // Define the structure of your JWT payload here\r\n email: string;\r\n sub: string;\r\n name: string;\r\n iat: number;\r\n exp: number;\r\n // Add other fields as needed\r\n}\r\n\r\ninterface IAuthToken {\r\n token: string;\r\n revoke: boolean;\r\n}\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class LocalizeTokenService {\r\n readonly isRevokingTokenSubject = new BehaviorSubject<boolean>(false);\r\n\r\n private get authToken() { return this.storageGet() }\r\n private set authToken(value: IAuthToken | undefined) {\r\n value\r\n ? this.storageSet(value)\r\n : LocalizeToken.storage.delete(LocalizeToken.config.authTokenName);\r\n }\r\n\r\n get refreshToken() { return LocalizeToken.storage.get(LocalizeToken.config.refreshTokenName) }\r\n get accessToken() { return this.authToken?.token }\r\n\r\n set accessToken(value: string | undefined) {\r\n if (value) {\r\n this.authToken = { token: value, revoke: false }\r\n }\r\n }\r\n\r\n get isRevokingToken() { return this.isRevokingTokenSubject.value /* this.authToken?.revoke ?? false */ }\r\n set isRevokingToken(value: boolean) {\r\n this.isRevokingTokenSubject.next(value);\r\n if (this.authToken) {\r\n this.authToken = { ...this.authToken, revoke: value };\r\n }\r\n }\r\n\r\n get tenantToken() { return LocalizeToken.storage.get(LocalizeToken.config.tenantTokenName) }\r\n\r\n constructor() { }\r\n\r\n private storageGet() {\r\n try {\r\n const encoded = LocalizeToken.storage.get(LocalizeToken.config.authTokenName);\r\n const decoded = atob(encoded || '');\r\n return JSON.parse(decoded) as IAuthToken;\r\n } catch {\r\n return undefined\r\n }\r\n }\r\n\r\n private storageSet(value: IAuthToken) {\r\n const base64 = btoa(JSON.stringify(value));\r\n LocalizeToken.storage.set(LocalizeToken.config.authTokenName, base64);\r\n }\r\n\r\n tokensValid() {\r\n return this.refreshToken?.length && (!LocalizeToken.config.needTenant || this.tenantToken?.length);\r\n }\r\n\r\n decodeToken = (token: string) => jwt_decode.jwtDecode<JwtPayload>(token);\r\n get decodeRefreshToken() {\r\n const token = LocalizeToken.storage.get(LocalizeToken.config.refreshTokenName);\r\n if (!token) return null;\r\n return this.decodeToken(token);\r\n }\r\n\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { LocalizeTokenService } from \"./localize.token.service\";\r\nimport { HttpClient, HttpHeaders } from \"@angular/common/http\";\r\nimport { LocalizeToken, waitFor, waitUntil } from \"./localize.token\";\r\nimport { BehaviorSubject } from \"rxjs\";\r\n\r\n/**\r\n * Http method options\r\n */\r\nexport enum EMethod {\r\n POST = 1,\r\n GET = 2,\r\n PUT = 3,\r\n DELETE = 4,\r\n PATCH = 5\r\n}\r\n\r\ninterface ILocalizeApiConfigs {\r\n onPrepareRequest?: () => any;\r\n /**\r\n * A function that is called when refresh token is missing then perform the auto logout.\r\n * @returns - The base URL of the API.\r\n */\r\n onAutoLogout?: () => any;\r\n /**\r\n * A function that is called when request revoking token unauthorized.\r\n * @returns - The login dialog service.\r\n */\r\n onRevokeUnauthorized?: () => any;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class LocalizeApiService {\r\n\r\n readonly isRequestingSubject = new BehaviorSubject<boolean>(false);\r\n readonly isResolvedStartupSubject = new BehaviorSubject<boolean>(false);\r\n get isRequesting() { return this.isRequestingSubject.value; }\r\n get isResolvedStartup() { return this.isResolvedStartupSubject.value; }\r\n\r\n private apiConfigs: ILocalizeApiConfigs = {};\r\n\r\n constructor(readonly httpClient: HttpClient,\r\n private readonly localizeTokenService: LocalizeTokenService\r\n ) { }\r\n\r\n /**\r\n * Initialize the API service.\r\n * @param apiConfigs - The API configurations.\r\n */\r\n init(apiConfigs: ILocalizeApiConfigs) {\r\n this.apiConfigs = apiConfigs;\r\n }\r\n\r\n\r\n /**\r\n * A higher-order function that returns a curried function for making API requests.\r\n *\r\n * @param baseUrl - The base URL of the API.\r\n * @returns A curried function that can be used to make API requests.\r\n */\r\n func = (baseUrl: string) =>\r\n (path: string, method: EMethod = EMethod.GET, value: any = null, isFormData: boolean = false, headers?: { [x: string]: string }) =>\r\n this.base(baseUrl, path, method, value, isFormData, headers)\r\n\r\n private async base(baseUrl: string,\r\n path: string,\r\n method: EMethod = EMethod.GET,\r\n value: any = null,\r\n isFormData: boolean = false,\r\n headers?: { [x: string]: string }) {\r\n\r\n await this.ifPromise(this.apiConfigs.onPrepareRequest);\r\n\r\n const url = `${baseUrl.trim().replace(/\\/?$/, '/')}${path.trim().replace(/^\\//, '')}`;\r\n const httpMethod = EMethod[method].toLowerCase();\r\n const request = () => { return { body: value, headers: this.options(isFormData, headers) } };\r\n\r\n // Wait for previous request to complete\r\n await this.toWaitForPreviousRequest();\r\n\r\n // Process request\r\n try { return await this.processRequest(httpMethod, url, request()) }\r\n // Handle unauthorized error if any\r\n catch (error) {\r\n if ((error as any).status !== 401) { throw error; }\r\n return await this.onUnauthorizedError(httpMethod, url, request);\r\n }\r\n }\r\n\r\n private async onUnauthorizedError(httpMethod: string, url: string, request: Function) {\r\n await this.revokeToken();\r\n if (!this.isResolvedStartup) {\r\n return await this.processRequest(httpMethod, url, request());\r\n }\r\n }\r\n\r\n private async toWaitForPreviousRequest() {\r\n if (this.localizeTokenService.isRevokingToken) {\r\n await waitUntil(() => !this.localizeTokenService.isRevokingToken);\r\n }\r\n // to wait for each request in 50ms, even if the request is not completed\r\n await waitFor(50, this.isRequesting);\r\n }\r\n\r\n private async processRequest(method: string, url: string, options: any): Promise<any> {\r\n this.isRequestingSubject.next(true);\r\n const result = await new Promise((resolve, reject) =>\r\n this.httpClient.request<any>(method, url, options).subscribe({ next: resolve, error: reject }))\r\n this.isRequestingSubject.next(false);\r\n return result;\r\n }\r\n\r\n private async revokeToken(force: boolean = false): Promise<void> {\r\n\r\n if (this.localizeTokenService.isRevokingToken && !force) {\r\n await waitUntil(() => !this.localizeTokenService.isRevokingToken)\r\n return;\r\n }\r\n\r\n try {\r\n this.localizeTokenService.isRevokingToken = true;\r\n const reqUrl = LocalizeToken.config.revokeTokenUrl;\r\n const reqHeaders = this.options().append(LocalizeToken.httpHeaders.X_REFRESH_TOKEN, `${this.localizeTokenService.refreshToken}`);\r\n const revokeToken: any = await new Promise((resolve, reject) =>\r\n this.httpClient.get<any>(reqUrl!, { headers: reqHeaders }).subscribe({ next: resolve, error: reject }))\r\n\r\n if (revokeToken?.status) {\r\n this.localizeTokenService.accessToken = revokeToken.message;\r\n } else if (!this.localizeTokenService.refreshToken) {\r\n await this.ifPromise(this.apiConfigs.onAutoLogout)\r\n } else {\r\n if (this.apiConfigs.onRevokeUnauthorized) {\r\n await this.ifPromise(this.apiConfigs.onRevokeUnauthorized);\r\n await this.revokeToken(true);\r\n }\r\n }\r\n } finally {\r\n this.localizeTokenService.isRevokingToken = false;\r\n }\r\n }\r\n\r\n /** default http request options */\r\n private options(isFormData: boolean = false, headers: { [key: string]: string } = {}): HttpHeaders {\r\n const defaultHeaders = { [LocalizeToken.httpHeaders.AUTHORIZATION]: `Bearer ${this.localizeTokenService.accessToken}`, };\r\n if (LocalizeToken.config.needTenant) {\r\n defaultHeaders[LocalizeToken.httpHeaders.X_TENANT] = `${this.localizeTokenService.tenantToken}`;\r\n }\r\n\r\n if (!isFormData) {\r\n defaultHeaders[LocalizeToken.httpHeaders.CONTENT_TYPE] = 'application/json';\r\n }\r\n\r\n const filteredHeaders = Object.keys(defaultHeaders).filter(key => !Object.keys(headers).includes(key))\r\n .reduce((acc, key) => ({ ...acc, [key]: defaultHeaders[key] }), {})\r\n const mergedHeaders = { ...filteredHeaders, ...headers };\r\n return new HttpHeaders(mergedHeaders);\r\n }\r\n\r\n private async ifPromise(fn?: Function) {\r\n if (!fn) return;\r\n return fn instanceof Promise ? await fn() : fn();\r\n }\r\n\r\n}//class\r\n","import { NgModule } from '@angular/core';\r\nimport { LocalizeTokenService } from './localize.token.service';\r\nimport { LocalizeApiService } from './localize.api.service';\r\n\r\n@NgModule({\r\n providers: [\r\n LocalizeTokenService,\r\n LocalizeApiService\r\n ],\r\n})\r\nexport class LocalizeTokenModule { }","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2.LocalizeTokenService"],"mappings":"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"}
@@ -2,6 +2,9 @@ import { LocalizeTokenService } from "./localize.token.service";
2
2
  import { HttpClient } from "@angular/common/http";
3
3
  import { BehaviorSubject } from "rxjs";
4
4
  import * as i0 from "@angular/core";
5
+ /**
6
+ * Http method options
7
+ */
5
8
  export declare enum EMethod {
6
9
  POST = 1,
7
10
  GET = 2,
@@ -11,19 +14,37 @@ export declare enum EMethod {
11
14
  }
12
15
  interface ILocalizeApiConfigs {
13
16
  onPrepareRequest?: () => any;
17
+ /**
18
+ * A function that is called when refresh token is missing then perform the auto logout.
19
+ * @returns - The base URL of the API.
20
+ */
14
21
  onAutoLogout?: () => any;
22
+ /**
23
+ * A function that is called when request revoking token unauthorized.
24
+ * @returns - The login dialog service.
25
+ */
15
26
  onRevokeUnauthorized?: () => any;
16
27
  }
17
28
  export declare class LocalizeApiService {
18
- private readonly httpClient;
29
+ readonly httpClient: HttpClient;
19
30
  private readonly localizeTokenService;
20
31
  readonly isRequestingSubject: BehaviorSubject<boolean>;
21
32
  readonly isResolvedStartupSubject: BehaviorSubject<boolean>;
22
- private apiConfigs;
23
- constructor(httpClient: HttpClient, localizeTokenService: LocalizeTokenService);
24
33
  get isRequesting(): boolean;
25
34
  get isResolvedStartup(): boolean;
35
+ private apiConfigs;
36
+ constructor(httpClient: HttpClient, localizeTokenService: LocalizeTokenService);
37
+ /**
38
+ * Initialize the API service.
39
+ * @param apiConfigs - The API configurations.
40
+ */
26
41
  init(apiConfigs: ILocalizeApiConfigs): void;
42
+ /**
43
+ * A higher-order function that returns a curried function for making API requests.
44
+ *
45
+ * @param baseUrl - The base URL of the API.
46
+ * @returns A curried function that can be used to make API requests.
47
+ */
27
48
  func: (baseUrl: string) => (path: string, method?: EMethod, value?: any, isFormData?: boolean, headers?: {
28
49
  [x: string]: string;
29
50
  }) => Promise<any>;
@@ -32,6 +53,7 @@ export declare class LocalizeApiService {
32
53
  private toWaitForPreviousRequest;
33
54
  private processRequest;
34
55
  private revokeToken;
56
+ /** default http request options */
35
57
  private options;
36
58
  private ifPromise;
37
59
  static ɵfac: i0.ɵɵFactoryDeclaration<LocalizeApiService, never>;
@@ -10,20 +10,20 @@ export interface JwtPayload extends jwt_decode.JwtPayload {
10
10
  }
11
11
  export declare class LocalizeTokenService {
12
12
  readonly isRevokingTokenSubject: BehaviorSubject<boolean>;
13
- private getAuthToken;
14
- private setAuthToken;
15
- getRefreshToken(): string;
16
- getAccessToken(): string;
17
- setAccessToken(value: string | undefined): void;
18
- getIsRevokingToken(): boolean;
19
- setIsRevokingToken(value: boolean): void;
20
- getTenantToken(): string;
13
+ private get authToken();
14
+ private set authToken(value);
15
+ get refreshToken(): string;
16
+ get accessToken(): string | undefined;
17
+ set accessToken(value: string | undefined);
18
+ get isRevokingToken(): boolean;
19
+ set isRevokingToken(value: boolean);
20
+ get tenantToken(): string;
21
21
  constructor();
22
22
  private storageGet;
23
23
  private storageSet;
24
24
  tokensValid(): number | boolean;
25
25
  decodeToken: (token: string) => JwtPayload;
26
- getDecodeRefreshToken(): JwtPayload;
26
+ get decodeRefreshToken(): JwtPayload;
27
27
  static ɵfac: i0.ɵɵFactoryDeclaration<LocalizeTokenService, never>;
28
28
  static ɵprov: i0.ɵɵInjectableDeclaration<LocalizeTokenService>;
29
29
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sambath999/localize-token",
3
- "version": "18.0.3",
3
+ "version": "18.0.4",
4
4
  "description": "localize token client app",
5
5
  "type": "module",
6
6
  "esm2022": "lib/esm2022/sambath999-localize-token.js",