@sambath999/localize-token 12.3.3 → 12.3.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,16 +1,32 @@
1
1
  import { Injectable } from '@angular/core';
2
- import { LocalizeToken } from './localize.token';
2
+ import { extractMainDomain, LocalizeToken } from './localize.token';
3
3
  import { BehaviorSubject } from 'rxjs';
4
4
  import * as jwt_decode from 'jwt-decode';
5
5
  import * as i0 from "@angular/core";
6
6
  export class LocalizeTokenService {
7
7
  constructor() {
8
+ this.configSubject = new BehaviorSubject({});
8
9
  this.isRevokingTokenSubject = new BehaviorSubject(false);
10
+ this.defaultConfig = {
11
+ mainDomain: extractMainDomain(),
12
+ authTokenName: 'auth-token',
13
+ refreshTokenName: '_lze_rftkp_',
14
+ };
15
+ this.isInitialized = false;
9
16
  this.decodeToken = (token) => jwt_decode.jwtDecode(token);
10
- if (!LocalizeToken.config.authTokenName || !LocalizeToken.config.refreshTokenName) {
11
- throw new Error('authTokenName and refreshTokenName must be defined in LocalizeToken.config');
12
- }
13
- this.config = LocalizeToken.config;
17
+ }
18
+ get config() {
19
+ this.throwIfNotInitialized();
20
+ return this.configSubject.value;
21
+ }
22
+ init(config) {
23
+ console.log('LocalizeTokenService is initialized.');
24
+ this.configSubject.next(Object.assign(Object.assign({}, this.defaultConfig), config));
25
+ this.isInitialized = true;
26
+ }
27
+ ngOnDestroy() {
28
+ // this.configSubject.complete();
29
+ // this.isRevokingTokenSubject.complete();
14
30
  }
15
31
  get authToken() { return this.storageGet(); }
16
32
  set authToken(value) {
@@ -21,16 +37,12 @@ export class LocalizeTokenService {
21
37
  get refreshToken() { return LocalizeToken.storage.get(this.config.refreshTokenName); }
22
38
  get accessToken() { var _a; return (_a = this.authToken) === null || _a === void 0 ? void 0 : _a.token; }
23
39
  set accessToken(value) {
24
- if (value) {
25
- this.authToken = { token: value, revoke: false };
26
- }
40
+ value && (this.authToken = { token: value, revoke: false });
27
41
  }
28
42
  get isRevokingToken() { return this.isRevokingTokenSubject.value; /* this.authToken?.revoke ?? false */ }
29
43
  set isRevokingToken(value) {
30
44
  this.isRevokingTokenSubject.next(value);
31
- if (this.authToken) {
32
- this.authToken = Object.assign(Object.assign({}, this.authToken), { revoke: value });
33
- }
45
+ this.authToken && (this.authToken = Object.assign(Object.assign({}, this.authToken), { revoke: value }));
34
46
  }
35
47
  tenantToken(name) {
36
48
  if (!name)
@@ -58,14 +70,16 @@ export class LocalizeTokenService {
58
70
  }
59
71
  get decodeRefreshToken() {
60
72
  const token = LocalizeToken.storage.get(this.config.refreshTokenName);
61
- if (!token)
62
- return null;
63
- return this.decodeToken(token);
73
+ return !token ? null : this.decodeToken(token);
74
+ }
75
+ throwIfNotInitialized() {
76
+ if (!this.isInitialized) {
77
+ throw new Error('LocalizeTokenService is not initialized. Call init() method before using it.');
78
+ }
64
79
  }
65
80
  }
66
81
  LocalizeTokenService.ɵprov = i0.ɵɵdefineInjectable({ factory: function LocalizeTokenService_Factory() { return new LocalizeTokenService(); }, token: LocalizeTokenService, providedIn: "root" });
67
82
  LocalizeTokenService.decorators = [
68
83
  { type: Injectable, args: [{ providedIn: 'root' },] }
69
84
  ];
70
- LocalizeTokenService.ctorParameters = () => [];
71
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxpemUudG9rZW4uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9sb2NhbGl6ZS10b2tlbi9sb2NhbGl6ZS50b2tlbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUF3QixhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN2RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3ZDLE9BQU8sS0FBSyxVQUFVLE1BQU0sWUFBWSxDQUFDOztBQWlCekMsTUFBTSxPQUFPLG9CQUFvQjtJQUk3QjtRQUhTLDJCQUFzQixHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBMkR0RSxnQkFBVyxHQUFHLENBQUMsS0FBYSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFhLEtBQUssQ0FBQyxDQUFDO1FBdkRyRSxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxhQUFhLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLGdCQUFnQixFQUFFO1lBQy9FLE1BQU0sSUFBSSxLQUFLLENBQUMsNEVBQTRFLENBQUMsQ0FBQTtTQUNoRztRQUNELElBQUksQ0FBQyxNQUFNLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQztJQUN2QyxDQUFDO0lBRUQsSUFBWSxTQUFTLEtBQUssT0FBTyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUEsQ0FBQyxDQUFDO0lBQ3BELElBQVksU0FBUyxDQUFDLEtBQTZCO1FBQy9DLEtBQUs7WUFDRCxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUM7WUFDeEIsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYyxDQUFDLENBQUM7SUFDbkUsQ0FBQztJQUVELElBQUksWUFBWSxLQUFLLE9BQU8sYUFBYSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBaUIsQ0FBQyxDQUFBLENBQUMsQ0FBQztJQUN0RixJQUFJLFdBQVcsYUFBSyxPQUFPLE1BQUEsSUFBSSxDQUFDLFNBQVMsMENBQUUsS0FBSyxDQUFBLENBQUMsQ0FBQztJQUVsRCxJQUFJLFdBQVcsQ0FBQyxLQUF5QjtRQUNyQyxJQUFJLEtBQUssRUFBRTtZQUNQLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQTtTQUNuRDtJQUNMLENBQUM7SUFFRCxJQUFJLGVBQWUsS0FBSyxPQUFPLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLENBQUEsQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDO0lBQ3hHLElBQUksZUFBZSxDQUFDLEtBQWM7UUFDOUIsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4QyxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDaEIsSUFBSSxDQUFDLFNBQVMsbUNBQVEsSUFBSSxDQUFDLFNBQVMsS0FBRSxNQUFNLEVBQUUsS0FBSyxHQUFFLENBQUM7U0FDekQ7SUFDTCxDQUFDO0lBRUQsV0FBVyxDQUFDLElBQXdCO1FBQ2hDLElBQUksQ0FBQyxJQUFJO1lBQUUsT0FBTyxTQUFTLENBQUM7UUFDNUIsT0FBTyxhQUFhLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUMxQyxDQUFDO0lBRU8sVUFBVTtRQUNkLElBQUk7WUFDQSxNQUFNLE9BQU8sR0FBRyxhQUFhLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWMsQ0FBQyxDQUFDO1lBQ3RFLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDLENBQUM7WUFDcEMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBZSxDQUFDO1NBQzVDO1FBQUMsV0FBTTtZQUNKLE9BQU8sU0FBUyxDQUFBO1NBQ25CO0lBQ0wsQ0FBQztJQUVPLFVBQVUsQ0FBQyxLQUFpQjtRQUNoQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQzNDLGFBQWEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFRCxXQUFXLENBQUMsZUFBd0I7O1FBQ2hDLE9BQU8sQ0FBQyxDQUFDLENBQUEsTUFBQSxJQUFJLENBQUMsWUFBWSwwQ0FBRSxNQUFNLENBQUE7ZUFDM0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxJQUFJLENBQUMsQ0FBQyxDQUFBLE1BQUEsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsMENBQUUsTUFBTSxDQUFBLENBQUMsQ0FBQztJQUNwRixDQUFDO0lBR0QsSUFBSSxrQkFBa0I7UUFDbEIsTUFBTSxLQUFLLEdBQUcsYUFBYSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBaUIsQ0FBQyxDQUFDO1FBQ3ZFLElBQUksQ0FBQyxLQUFLO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDeEIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ25DLENBQUM7Ozs7WUFsRUosVUFBVSxTQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgSUxvY2FsaXplVG9rZW5Db25maWcsIExvY2FsaXplVG9rZW4gfSBmcm9tICcuL2xvY2FsaXplLnRva2VuJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCAqIGFzIGp3dF9kZWNvZGUgZnJvbSAnand0LWRlY29kZSc7XHJcbmV4cG9ydCBpbnRlcmZhY2UgSnd0UGF5bG9hZCBleHRlbmRzIGp3dF9kZWNvZGUuSnd0UGF5bG9hZCB7XHJcbiAgICAvLyBEZWZpbmUgdGhlIHN0cnVjdHVyZSBvZiB5b3VyIEpXVCBwYXlsb2FkIGhlcmVcclxuICAgIGVtYWlsOiBzdHJpbmc7XHJcbiAgICBzdWI6IHN0cmluZztcclxuICAgIG5hbWU6IHN0cmluZztcclxuICAgIGlhdDogbnVtYmVyO1xyXG4gICAgZXhwOiBudW1iZXI7XHJcbiAgICAvLyBBZGQgb3RoZXIgZmllbGRzIGFzIG5lZWRlZFxyXG59XHJcblxyXG5pbnRlcmZhY2UgSUF1dGhUb2tlbiB7XHJcbiAgICB0b2tlbjogc3RyaW5nO1xyXG4gICAgcmV2b2tlOiBib29sZWFuO1xyXG59XHJcblxyXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxyXG5leHBvcnQgY2xhc3MgTG9jYWxpemVUb2tlblNlcnZpY2Uge1xyXG4gICAgcmVhZG9ubHkgaXNSZXZva2luZ1Rva2VuU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSBjb25maWc6IElMb2NhbGl6ZVRva2VuQ29uZmlnXHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgaWYgKCFMb2NhbGl6ZVRva2VuLmNvbmZpZy5hdXRoVG9rZW5OYW1lIHx8ICFMb2NhbGl6ZVRva2VuLmNvbmZpZy5yZWZyZXNoVG9rZW5OYW1lKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignYXV0aFRva2VuTmFtZSBhbmQgcmVmcmVzaFRva2VuTmFtZSBtdXN0IGJlIGRlZmluZWQgaW4gTG9jYWxpemVUb2tlbi5jb25maWcnKVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNvbmZpZyA9IExvY2FsaXplVG9rZW4uY29uZmlnO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0IGF1dGhUb2tlbigpIHsgcmV0dXJuIHRoaXMuc3RvcmFnZUdldCgpIH1cclxuICAgIHByaXZhdGUgc2V0IGF1dGhUb2tlbih2YWx1ZTogSUF1dGhUb2tlbiB8IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHZhbHVlXHJcbiAgICAgICAgICAgID8gdGhpcy5zdG9yYWdlU2V0KHZhbHVlKVxyXG4gICAgICAgICAgICA6IExvY2FsaXplVG9rZW4uc3RvcmFnZS5kZWxldGUodGhpcy5jb25maWcuYXV0aFRva2VuTmFtZSEpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCByZWZyZXNoVG9rZW4oKSB7IHJldHVybiBMb2NhbGl6ZVRva2VuLnN0b3JhZ2UuZ2V0KHRoaXMuY29uZmlnLnJlZnJlc2hUb2tlbk5hbWUhKSB9XHJcbiAgICBnZXQgYWNjZXNzVG9rZW4oKSB7IHJldHVybiB0aGlzLmF1dGhUb2tlbj8udG9rZW4gfVxyXG5cclxuICAgIHNldCBhY2Nlc3NUb2tlbih2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXV0aFRva2VuID0geyB0b2tlbjogdmFsdWUsIHJldm9rZTogZmFsc2UgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXQgaXNSZXZva2luZ1Rva2VuKCkgeyByZXR1cm4gdGhpcy5pc1Jldm9raW5nVG9rZW5TdWJqZWN0LnZhbHVlIC8qIHRoaXMuYXV0aFRva2VuPy5yZXZva2UgPz8gZmFsc2UgKi8gfVxyXG4gICAgc2V0IGlzUmV2b2tpbmdUb2tlbih2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgICAgIHRoaXMuaXNSZXZva2luZ1Rva2VuU3ViamVjdC5uZXh0KHZhbHVlKTtcclxuICAgICAgICBpZiAodGhpcy5hdXRoVG9rZW4pIHtcclxuICAgICAgICAgICAgdGhpcy5hdXRoVG9rZW4gPSB7IC4uLnRoaXMuYXV0aFRva2VuLCByZXZva2U6IHZhbHVlIH07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRlbmFudFRva2VuKG5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGlmICghbmFtZSkgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICByZXR1cm4gTG9jYWxpemVUb2tlbi5zdG9yYWdlLmdldChuYW1lKVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc3RvcmFnZUdldCgpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCBlbmNvZGVkID0gTG9jYWxpemVUb2tlbi5zdG9yYWdlLmdldCh0aGlzLmNvbmZpZy5hdXRoVG9rZW5OYW1lISk7XHJcbiAgICAgICAgICAgIGNvbnN0IGRlY29kZWQgPSBhdG9iKGVuY29kZWQgfHwgJycpO1xyXG4gICAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShkZWNvZGVkKSBhcyBJQXV0aFRva2VuO1xyXG4gICAgICAgIH0gY2F0Y2gge1xyXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc3RvcmFnZVNldCh2YWx1ZTogSUF1dGhUb2tlbikge1xyXG4gICAgICAgIGNvbnN0IGJhc2U2NCA9IGJ0b2EoSlNPTi5zdHJpbmdpZnkodmFsdWUpKTtcclxuICAgICAgICBMb2NhbGl6ZVRva2VuLnN0b3JhZ2Uuc2V0KHRoaXMuY29uZmlnLmF1dGhUb2tlbk5hbWUhLCBiYXNlNjQpO1xyXG4gICAgfVxyXG5cclxuICAgIHRva2Vuc1ZhbGlkKHRlbmFudFRva2VuTmFtZT86IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAhIXRoaXMucmVmcmVzaFRva2VuPy5sZW5ndGhcclxuICAgICAgICAgICAgJiYgKCF0aGlzLmNvbmZpZy5uZWVkVGVuYW50IHx8ICEhdGhpcy50ZW5hbnRUb2tlbih0ZW5hbnRUb2tlbk5hbWUpPy5sZW5ndGgpO1xyXG4gICAgfVxyXG5cclxuICAgIGRlY29kZVRva2VuID0gKHRva2VuOiBzdHJpbmcpID0+IGp3dF9kZWNvZGUuand0RGVjb2RlPEp3dFBheWxvYWQ+KHRva2VuKTtcclxuICAgIGdldCBkZWNvZGVSZWZyZXNoVG9rZW4oKSB7XHJcbiAgICAgICAgY29uc3QgdG9rZW4gPSBMb2NhbGl6ZVRva2VuLnN0b3JhZ2UuZ2V0KHRoaXMuY29uZmlnLnJlZnJlc2hUb2tlbk5hbWUhKTtcclxuICAgICAgICBpZiAoIXRva2VuKSByZXR1cm4gbnVsbDtcclxuICAgICAgICByZXR1cm4gdGhpcy5kZWNvZGVUb2tlbih0b2tlbik7XHJcbiAgICB9XHJcblxyXG59XHJcbiJdfQ==
85
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxpemUudG9rZW4uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9sb2NhbGl6ZS10b2tlbi9sb2NhbGl6ZS50b2tlbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDdEQsT0FBTyxFQUFFLGlCQUFpQixFQUF3QixhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMxRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3ZDLE9BQU8sS0FBSyxVQUFVLE1BQU0sWUFBWSxDQUFDOztBQWlCekMsTUFBTSxPQUFPLG9CQUFvQjtJQURqQztRQUVxQixrQkFBYSxHQUFHLElBQUksZUFBZSxDQUFnQyxFQUFFLENBQUMsQ0FBQztRQUMvRSwyQkFBc0IsR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUNyRCxrQkFBYSxHQUFrQztZQUM1RCxVQUFVLEVBQUUsaUJBQWlCLEVBQUU7WUFDL0IsYUFBYSxFQUFFLFlBQVk7WUFDM0IsZ0JBQWdCLEVBQUUsYUFBYTtTQUNsQyxDQUFBO1FBT08sa0JBQWEsR0FBRyxLQUFLLENBQUM7UUEyRDlCLGdCQUFXLEdBQUcsQ0FBQyxLQUFhLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQWEsS0FBSyxDQUFDLENBQUM7S0FZNUU7SUE1RUcsSUFBSSxNQUFNO1FBQ04sSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDN0IsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQTZCLENBQUM7SUFDNUQsQ0FBQztJQUlELElBQUksQ0FBQyxNQUE0QjtRQUM3QixPQUFPLENBQUMsR0FBRyxDQUFDLHNDQUFzQyxDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLGlDQUFNLElBQUksQ0FBQyxhQUFhLEdBQUssTUFBTSxFQUFHLENB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QUFDO1FBQ3ZFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRU8scUJBQXFCO1FBQ3pCLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ3JCLE1BQU0sSUFBSSxLQUFLLENBQUMsOEVBQThFLENBQUMsQ0FBQztTQUNuRztJQUNMLENBQUM7Ozs7WUFwRkosVUFBVSxTQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBleHRyYWN0TWFpbkRvbWFpbiwgSUxvY2FsaXplVG9rZW5Db25maWcsIExvY2FsaXplVG9rZW4gfSBmcm9tICcuL2xvY2FsaXplLnRva2VuJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCAqIGFzIGp3dF9kZWNvZGUgZnJvbSAnand0LWRlY29kZSc7XHJcbmV4cG9ydCBpbnRlcmZhY2UgSnd0UGF5bG9hZCBleHRlbmRzIGp3dF9kZWNvZGUuSnd0UGF5bG9hZCB7XHJcbiAgICAvLyBEZWZpbmUgdGhlIHN0cnVjdHVyZSBvZiB5b3VyIEpXVCBwYXlsb2FkIGhlcmVcclxuICAgIGVtYWlsOiBzdHJpbmc7XHJcbiAgICBzdWI6IHN0cmluZztcclxuICAgIG5hbWU6IHN0cmluZztcclxuICAgIGlhdDogbnVtYmVyO1xyXG4gICAgZXhwOiBudW1iZXI7XHJcbiAgICAvLyBBZGQgb3RoZXIgZmllbGRzIGFzIG5lZWRlZFxyXG59XHJcblxyXG5pbnRlcmZhY2UgSUF1dGhUb2tlbiB7XHJcbiAgICB0b2tlbjogc3RyaW5nO1xyXG4gICAgcmV2b2tlOiBib29sZWFuO1xyXG59XHJcblxyXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxyXG5leHBvcnQgY2xhc3MgTG9jYWxpemVUb2tlblNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSBjb25maWdTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxQYXJ0aWFsPElMb2NhbGl6ZVRva2VuQ29uZmlnPj4oe30pO1xyXG4gICAgcmVhZG9ubHkgaXNSZXZva2luZ1Rva2VuU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSBkZWZhdWx0Q29uZmlnOiBQYXJ0aWFsPElMb2NhbGl6ZVRva2VuQ29uZmlnPiA9IHtcclxuICAgICAgICBtYWluRG9tYWluOiBleHRyYWN0TWFpbkRvbWFpbigpLFxyXG4gICAgICAgIGF1dGhUb2tlbk5hbWU6ICdhdXRoLXRva2VuJyxcclxuICAgICAgICByZWZyZXNoVG9rZW5OYW1lOiAnX2x6ZV9yZnRrcF8nLFxyXG4gICAgfVxyXG5cclxuICAgIGdldCBjb25maWcoKTogSUxvY2FsaXplVG9rZW5Db25maWcge1xyXG4gICAgICAgIHRoaXMudGhyb3dJZk5vdEluaXRpYWxpemVkKCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uZmlnU3ViamVjdC52YWx1ZSBhcyBJTG9jYWxpemVUb2tlbkNvbmZpZztcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGlzSW5pdGlhbGl6ZWQgPSBmYWxzZTtcclxuXHJcbiAgICBpbml0KGNvbmZpZzogSUxvY2FsaXplVG9rZW5Db25maWcpIHtcclxuICAgICAgICBjb25zb2xlLmxvZygnTG9jYWxpemVUb2tlblNlcnZpY2UgaXMgaW5pdGlhbGl6ZWQuJyk7XHJcbiAgICAgICAgdGhpcy5jb25maWdTdWJqZWN0Lm5leHQoeyAuLi50aGlzLmRlZmF1bHRDb25maWcsIC4uLmNvbmZpZyB9KTtcclxuICAgICAgICB0aGlzLmlzSW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgICAgIC8vIHRoaXMuY29uZmlnU3ViamVjdC5jb21wbGV0ZSgpO1xyXG4gICAgICAgIC8vIHRoaXMuaXNSZXZva2luZ1Rva2VuU3ViamVjdC5jb21wbGV0ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0IGF1dGhUb2tlbigpIHsgcmV0dXJuIHRoaXMuc3RvcmFnZUdldCgpIH1cclxuICAgIHByaXZhdGUgc2V0IGF1dGhUb2tlbih2YWx1ZTogSUF1dGhUb2tlbiB8IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHZhbHVlXHJcbiAgICAgICAgICAgID8gdGhpcy5zdG9yYWdlU2V0KHZhbHVlKVxyXG4gICAgICAgICAgICA6IExvY2FsaXplVG9rZW4uc3RvcmFnZS5kZWxldGUodGhpcy5jb25maWcuYXV0aFRva2VuTmFtZSEpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCByZWZyZXNoVG9rZW4oKSB7IHJldHVybiBMb2NhbGl6ZVRva2VuLnN0b3JhZ2UuZ2V0KHRoaXMuY29uZmlnLnJlZnJlc2hUb2tlbk5hbWUhKSB9XHJcbiAgICBnZXQgYWNjZXNzVG9rZW4oKSB7IHJldHVybiB0aGlzLmF1dGhUb2tlbj8udG9rZW4gfVxyXG5cclxuICAgIHNldCBhY2Nlc3NUb2tlbih2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgdmFsdWUgJiYgKHRoaXMuYXV0aFRva2VuID0geyB0b2tlbjogdmFsdWUsIHJldm9rZTogZmFsc2UgfSlcclxuICAgIH1cclxuXHJcbiAgICBnZXQgaXNSZXZva2luZ1Rva2VuKCkgeyByZXR1cm4gdGhpcy5pc1Jldm9raW5nVG9rZW5TdWJqZWN0LnZhbHVlIC8qIHRoaXMuYXV0aFRva2VuPy5yZXZva2UgPz8gZmFsc2UgKi8gfVxyXG5cclxuICAgIHNldCBpc1Jldm9raW5nVG9rZW4odmFsdWU6IGJvb2xlYW4pIHtcclxuICAgICAgICB0aGlzLmlzUmV2b2tpbmdUb2tlblN1YmplY3QubmV4dCh2YWx1ZSk7XHJcbiAgICAgICAgdGhpcy5hdXRoVG9rZW4gJiYgKHRoaXMuYXV0aFRva2VuID0geyAuLi50aGlzLmF1dGhUb2tlbiwgcmV2b2tlOiB2YWx1ZSB9KVxyXG4gICAgfVxyXG5cclxuICAgIHRlbmFudFRva2VuKG5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGlmICghbmFtZSkgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICByZXR1cm4gTG9jYWxpemVUb2tlbi5zdG9yYWdlLmdldChuYW1lKVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc3RvcmFnZUdldCgpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCBlbmNvZGVkID0gTG9jYWxpemVUb2tlbi5zdG9yYWdlLmdldCh0aGlzLmNvbmZpZy5hdXRoVG9rZW5OYW1lISk7XHJcbiAgICAgICAgICAgIGNvbnN0IGRlY29kZWQgPSBhdG9iKGVuY29kZWQgfHwgJycpO1xyXG4gICAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShkZWNvZGVkKSBhcyBJQXV0aFRva2VuO1xyXG4gICAgICAgIH0gY2F0Y2gge1xyXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc3RvcmFnZVNldCh2YWx1ZTogSUF1dGhUb2tlbikge1xyXG4gICAgICAgIGNvbnN0IGJhc2U2NCA9IGJ0b2EoSlNPTi5zdHJpbmdpZnkodmFsdWUpKTtcclxuICAgICAgICBMb2NhbGl6ZVRva2VuLnN0b3JhZ2Uuc2V0KHRoaXMuY29uZmlnLmF1dGhUb2tlbk5hbWUhLCBiYXNlNjQpO1xyXG4gICAgfVxyXG5cclxuICAgIHRva2Vuc1ZhbGlkKHRlbmFudFRva2VuTmFtZT86IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAhIXRoaXMucmVmcmVzaFRva2VuPy5sZW5ndGhcclxuICAgICAgICAgICAgJiYgKCF0aGlzLmNvbmZpZy5uZWVkVGVuYW50IHx8ICEhdGhpcy50ZW5hbnRUb2tlbih0ZW5hbnRUb2tlbk5hbWUpPy5sZW5ndGgpO1xyXG4gICAgfVxyXG5cclxuICAgIGRlY29kZVRva2VuID0gKHRva2VuOiBzdHJpbmcpID0+IGp3dF9kZWNvZGUuand0RGVjb2RlPEp3dFBheWxvYWQ+KHRva2VuKTtcclxuICAgIGdldCBkZWNvZGVSZWZyZXNoVG9rZW4oKSB7XHJcbiAgICAgICAgY29uc3QgdG9rZW4gPSBMb2NhbGl6ZVRva2VuLnN0b3JhZ2UuZ2V0KHRoaXMuY29uZmlnLnJlZnJlc2hUb2tlbk5hbWUhKTtcclxuICAgICAgICByZXR1cm4gIXRva2VuID8gbnVsbCA6IHRoaXMuZGVjb2RlVG9rZW4odG9rZW4pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdGhyb3dJZk5vdEluaXRpYWxpemVkKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5pc0luaXRpYWxpemVkKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTG9jYWxpemVUb2tlblNlcnZpY2UgaXMgbm90IGluaXRpYWxpemVkLiBDYWxsIGluaXQoKSBtZXRob2QgYmVmb3JlIHVzaW5nIGl0LicpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbn1cclxuIl19
@@ -121,18 +121,7 @@ class LocalizeTokenStorage {
121
121
  }
122
122
 
123
123
  class LocalizeToken {
124
- static init(config) {
125
- LocalizeToken.config = Object.assign(Object.assign({}, LocalizeToken.config), config);
126
- }
127
124
  }
128
- LocalizeToken.config = {
129
- mainDomain: extractMainDomain(),
130
- authTokenName: 'auth-token',
131
- refreshTokenName: '_lze_rftkp_',
132
- needTenant: false,
133
- isProduction: false,
134
- revokeTokenUrl: ''
135
- };
136
125
  LocalizeToken.storage = new LocalizeTokenStorage();
137
126
  LocalizeToken.httpHeaders = {
138
127
  AUTHORIZATION: 'Authorization',
@@ -180,12 +169,28 @@ function extractMainDomain(subdomain) {
180
169
 
181
170
  class LocalizeTokenService {
182
171
  constructor() {
172
+ this.configSubject = new BehaviorSubject({});
183
173
  this.isRevokingTokenSubject = new BehaviorSubject(false);
174
+ this.defaultConfig = {
175
+ mainDomain: extractMainDomain(),
176
+ authTokenName: 'auth-token',
177
+ refreshTokenName: '_lze_rftkp_',
178
+ };
179
+ this.isInitialized = false;
184
180
  this.decodeToken = (token) => jwt_decode.jwtDecode(token);
185
- if (!LocalizeToken.config.authTokenName || !LocalizeToken.config.refreshTokenName) {
186
- throw new Error('authTokenName and refreshTokenName must be defined in LocalizeToken.config');
187
- }
188
- this.config = LocalizeToken.config;
181
+ }
182
+ get config() {
183
+ this.throwIfNotInitialized();
184
+ return this.configSubject.value;
185
+ }
186
+ init(config) {
187
+ console.log('LocalizeTokenService is initialized.');
188
+ this.configSubject.next(Object.assign(Object.assign({}, this.defaultConfig), config));
189
+ this.isInitialized = true;
190
+ }
191
+ ngOnDestroy() {
192
+ // this.configSubject.complete();
193
+ // this.isRevokingTokenSubject.complete();
189
194
  }
190
195
  get authToken() { return this.storageGet(); }
191
196
  set authToken(value) {
@@ -196,16 +201,12 @@ class LocalizeTokenService {
196
201
  get refreshToken() { return LocalizeToken.storage.get(this.config.refreshTokenName); }
197
202
  get accessToken() { var _a; return (_a = this.authToken) === null || _a === void 0 ? void 0 : _a.token; }
198
203
  set accessToken(value) {
199
- if (value) {
200
- this.authToken = { token: value, revoke: false };
201
- }
204
+ value && (this.authToken = { token: value, revoke: false });
202
205
  }
203
206
  get isRevokingToken() { return this.isRevokingTokenSubject.value; /* this.authToken?.revoke ?? false */ }
204
207
  set isRevokingToken(value) {
205
208
  this.isRevokingTokenSubject.next(value);
206
- if (this.authToken) {
207
- this.authToken = Object.assign(Object.assign({}, this.authToken), { revoke: value });
208
- }
209
+ this.authToken && (this.authToken = Object.assign(Object.assign({}, this.authToken), { revoke: value }));
209
210
  }
210
211
  tenantToken(name) {
211
212
  if (!name)
@@ -233,16 +234,18 @@ class LocalizeTokenService {
233
234
  }
234
235
  get decodeRefreshToken() {
235
236
  const token = LocalizeToken.storage.get(this.config.refreshTokenName);
236
- if (!token)
237
- return null;
238
- return this.decodeToken(token);
237
+ return !token ? null : this.decodeToken(token);
238
+ }
239
+ throwIfNotInitialized() {
240
+ if (!this.isInitialized) {
241
+ throw new Error('LocalizeTokenService is not initialized. Call init() method before using it.');
242
+ }
239
243
  }
240
244
  }
241
245
  LocalizeTokenService.ɵprov = i0.ɵɵdefineInjectable({ factory: function LocalizeTokenService_Factory() { return new LocalizeTokenService(); }, token: LocalizeTokenService, providedIn: "root" });
242
246
  LocalizeTokenService.decorators = [
243
247
  { type: Injectable, args: [{ providedIn: 'root' },] }
244
- ];
245
- LocalizeTokenService.ctorParameters = () => [];
248
+ ];
246
249
 
247
250
  /**
248
251
  * Http method options
@@ -378,15 +381,6 @@ class LocalizeApiHelper {
378
381
  }
379
382
  });
380
383
  }
381
- validateConfig(config) {
382
- var _a;
383
- if (LocalizeToken.config.needTenant && !((_a = config.tenantTokenName) === null || _a === void 0 ? void 0 : _a.trim().length)) {
384
- throw Error('Tenant token is required but tenantTokenName is not configured');
385
- }
386
- if (!LocalizeToken.config.revokeTokenUrl.trim().length) {
387
- throw Error('Revoke token URL is not configured - token refresh will not work');
388
- }
389
- }
390
384
  screenBlocker(optons, error, add = true) {
391
385
  var _a, _b, _c, _d;
392
386
  if (!((_a = optons.connectionError) === null || _a === void 0 ? void 0 : _a.blockScreen))
@@ -528,10 +522,10 @@ class LocalizeApiService {
528
522
  this.httpClient = httpClient;
529
523
  this.localizeTokenService = localizeTokenService;
530
524
  this.destroy$ = new Subject();
525
+ this.configSubject = new BehaviorSubject({});
531
526
  this.isRequestingSubject = new BehaviorSubject(false);
532
- this.isResolvedStartupSubject = new BehaviorSubject(false);
533
- this.needTenant = LocalizeToken.config.needTenant;
534
- this.config = {
527
+ this.isResolvingStartupSubject = new BehaviorSubject(false);
528
+ this.defaultConfig = {
535
529
  waitEachRequest: { milliseconds: 0 },
536
530
  enableRequestCancellation: true,
537
531
  retryOptions: {
@@ -552,7 +546,8 @@ class LocalizeApiService {
552
546
  */
553
547
  this.func = (baseUrl) => (path, method = EMethod.GET, reqBody = null, reqHeaders) => this.request(baseUrl, path, method, reqBody, reqHeaders);
554
548
  }
555
- get isResolvedStartup() { return this.isResolvedStartupSubject.value; }
549
+ get isResolvingStartup() { return this.isResolvingStartupSubject.value; }
550
+ get needTenant() { return this.localizeTokenService.config.needTenant; }
556
551
  get isRequesting() { return this.isRequestingSubject.value; }
557
552
  get isRevokingToken() { return this.localizeTokenService.isRevokingToken; }
558
553
  set isRevokingToken(value) { this.localizeTokenService.isRevokingToken = value; }
@@ -560,13 +555,17 @@ class LocalizeApiService {
560
555
  set accessToken(value) { this.localizeTokenService.accessToken = value; }
561
556
  get refreshToken() { return this.localizeTokenService.refreshToken; }
562
557
  get tenantToken() { return this.localizeTokenService.tenantToken(this.config.tenantTokenName); }
558
+ get config() {
559
+ this.validateConfig(this.config);
560
+ return this.configSubject.value;
561
+ }
563
562
  /**
564
563
  * Initialize the API service.
565
564
  * @param apiConfigs - The API configurations.
566
565
  */
567
566
  init(apiConfigs) {
568
- this.config = Object.assign(Object.assign({}, this.config), apiConfigs);
569
- ApiHelper.validateConfig(this.config);
567
+ console.log('LocalizeApiService is initialized.');
568
+ this.configSubject.next(Object.assign(Object.assign({}, this.defaultConfig), apiConfigs));
570
569
  }
571
570
  cancelPendingRequests() {
572
571
  this.config.enableRequestCancellation
@@ -575,9 +574,13 @@ class LocalizeApiService {
575
574
  ngOnDestroy() {
576
575
  this.destroy$.next();
577
576
  this.destroy$.complete();
577
+ // this.isResolvingStartupSubject.complete();
578
+ // this.isRequestingSubject.complete();
579
+ // this.configSubject.complete();
578
580
  }
579
581
  request(baseUrl, path, method = EMethod.GET, reqBody = null, reqHeaders) {
580
582
  return __awaiter(this, void 0, void 0, function* () {
583
+ yield waitUntil(() => !this.isResolvingStartup, 500);
581
584
  yield ApiHelper.invokeHook(this.config.onPrepareRequest);
582
585
  const apiOptions = this.buildApiOptions(baseUrl, path, method, reqBody, reqHeaders);
583
586
  try {
@@ -591,8 +594,9 @@ class LocalizeApiService {
591
594
  }
592
595
  handleOnRequestError(error, options) {
593
596
  return __awaiter(this, void 0, void 0, function* () {
594
- if (error.status !== 401 || this.isResolvedStartup)
597
+ if (error.status !== 401)
595
598
  throw error;
599
+ yield waitUntil(() => !this.isResolvingStartup, 500);
596
600
  return yield ApiHelper.performRetry({
597
601
  maxRetries: () => 1000,
598
602
  delay: 500,
@@ -629,7 +633,7 @@ class LocalizeApiService {
629
633
  if (yield this.interceptRevokeToken())
630
634
  return;
631
635
  this.isRevokingToken = true;
632
- const apiOptions = Object.assign(Object.assign({}, this.buildApiOptions(LocalizeToken.config.revokeTokenUrl)), { refreshToken: true });
636
+ const apiOptions = Object.assign(Object.assign({}, this.buildApiOptions(this.localizeTokenService.config.revokeTokenUrl)), { refreshToken: true });
633
637
  // const revokeToken = await this.performRequest(apiOptions);
634
638
  const revokeToken = yield ApiHelper.performRequestWithRetry(apiOptions, this.config, this.performRequest.bind(this));
635
639
  yield this.handleOnTokenRevoked(revokeToken);
@@ -694,6 +698,15 @@ class LocalizeApiService {
694
698
  return false;
695
699
  });
696
700
  }
701
+ validateConfig(config) {
702
+ var _a;
703
+ if (this.localizeTokenService.config.needTenant && !((_a = config.tenantTokenName) === null || _a === void 0 ? void 0 : _a.trim().length)) {
704
+ throw Error('Tenant token is required but tenantTokenName is not configured');
705
+ }
706
+ if (!this.localizeTokenService.config.revokeTokenUrl.trim().length) {
707
+ throw Error('Revoke token URL is not configured - token refresh will not work');
708
+ }
709
+ }
697
710
  }
698
711
  LocalizeApiService.ɵprov = i0.ɵɵdefineInjectable({ factory: function LocalizeApiService_Factory() { return new LocalizeApiService(i0.ɵɵinject(i1.HttpClient), i0.ɵɵinject(LocalizeTokenService)); }, token: LocalizeApiService, providedIn: "root" });
699
712
  LocalizeApiService.decorators = [
@@ -729,12 +742,12 @@ class LocalizeLogindlgComponent {
729
742
  this.messageKey = "$login-dlg";
730
743
  this.loading = false;
731
744
  this.success = false;
732
- this.config = LocalizeToken.config;
733
745
  this.clickLogout = () => { var _a; return (_a = this.logout) === null || _a === void 0 ? void 0 : _a.call(this); };
734
746
  this.decodeToken = this.tokenService.decodeRefreshToken;
735
747
  this.loginConfig = this.dlgConfig.data.loginConfig;
736
748
  this.properties = this.loginConfig.properties;
737
749
  }
750
+ get config() { return this.tokenService.config; }
738
751
  ngOnInit() {
739
752
  this.dlgConfig.closable = false;
740
753
  this.logout = this.loginConfig.logoutFunc;