@dontdrinkandroot/ngx-extensions 0.3.1 → 0.4.0

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.
Files changed (56) hide show
  1. package/{esm2020 → esm2022}/src/cookie/cookie.service.mjs +4 -4
  2. package/esm2022/src/ddr-extensions.module.mjs +67 -0
  3. package/{esm2020 → esm2022}/src/http/redirect-to-login-interceptor.service.mjs +4 -4
  4. package/{esm2020 → esm2022}/src/http/with-credentials-interceptor.service.mjs +4 -4
  5. package/{esm2020 → esm2022}/src/image/lazy-image.directive.mjs +4 -4
  6. package/{esm2020 → esm2022}/src/jwt/jwt-interceptor.service.mjs +4 -4
  7. package/{esm2020 → esm2022}/src/jwt/jwt-refresh-token-interceptor.service.mjs +4 -4
  8. package/esm2022/src/jwt/jwt.service.mjs +81 -0
  9. package/esm2022/src/logger/console-logger.service.mjs +43 -0
  10. package/esm2022/src/logger/logger.service.mjs +9 -0
  11. package/{esm2020 → esm2022}/src/oauth/oauth2-access-token-interceptor.service.mjs +4 -4
  12. package/esm2022/src/oauth/oauth2-error.mjs +8 -0
  13. package/{esm2020 → esm2022}/src/oauth/oauth2-refresh-token-interceptor.service.mjs +4 -4
  14. package/{esm2020 → esm2022}/src/oauth/oauth2.module.mjs +5 -5
  15. package/esm2022/src/oauth/oauth2.service.mjs +125 -0
  16. package/{esm2020 → esm2022}/src/oauth/redirect-to-oauth2-login-interceptor.service.mjs +4 -4
  17. package/{esm2020 → esm2022}/src/scroll/bottom-hit.directive.mjs +4 -4
  18. package/{esm2020 → esm2022}/src/scroll/scroll.service.mjs +4 -4
  19. package/esm2022/src/storage/local-storage.service.mjs +53 -0
  20. package/{esm2020 → esm2022}/src/visibility/visibility.service.mjs +4 -4
  21. package/{fesm2020 → fesm2022}/dontdrinkandroot-ngx-extensions.mjs +109 -101
  22. package/fesm2022/dontdrinkandroot-ngx-extensions.mjs.map +1 -0
  23. package/package.json +9 -15
  24. package/src/image/lazy-image.directive.d.ts +1 -1
  25. package/src/jwt/jwt.service.d.ts +3 -1
  26. package/src/logger/console-logger.service.d.ts +8 -8
  27. package/src/logger/logger.service.d.ts +5 -5
  28. package/src/oauth/oauth2.service.d.ts +3 -1
  29. package/src/storage/local-storage.service.d.ts +4 -4
  30. package/src/visibility/visibility.service.d.ts +1 -1
  31. package/esm2020/src/ddr-extensions.module.mjs +0 -67
  32. package/esm2020/src/jwt/jwt.service.mjs +0 -79
  33. package/esm2020/src/logger/console-logger.service.mjs +0 -43
  34. package/esm2020/src/logger/logger.service.mjs +0 -9
  35. package/esm2020/src/oauth/oauth2-error.mjs +0 -8
  36. package/esm2020/src/oauth/oauth2.service.mjs +0 -119
  37. package/esm2020/src/storage/local-storage.service.mjs +0 -53
  38. package/fesm2015/dontdrinkandroot-ngx-extensions.mjs +0 -1126
  39. package/fesm2015/dontdrinkandroot-ngx-extensions.mjs.map +0 -1
  40. package/fesm2020/dontdrinkandroot-ngx-extensions.mjs.map +0 -1
  41. /package/{esm2020 → esm2022}/dontdrinkandroot-ngx-extensions.mjs +0 -0
  42. /package/{esm2020 → esm2022}/public-api.mjs +0 -0
  43. /package/{esm2020 → esm2022}/src/http/url-info.mjs +0 -0
  44. /package/{esm2020 → esm2022}/src/jwt/jwt-token-response.mjs +0 -0
  45. /package/{esm2020 → esm2022}/src/methoddecorator/debounce.mjs +0 -0
  46. /package/{esm2020 → esm2022}/src/methoddecorator/limit.mjs +0 -0
  47. /package/{esm2020 → esm2022}/src/oauth/json-web-token.mjs +0 -0
  48. /package/{esm2020 → esm2022}/src/oauth/oauth2-config.mjs +0 -0
  49. /package/{esm2020 → esm2022}/src/oauth/token-response.mjs +0 -0
  50. /package/{esm2020 → esm2022}/src/storage/storage.service.mjs +0 -0
  51. /package/{esm2020 → esm2022}/src/typeguard/is-non-null.mjs +0 -0
  52. /package/{esm2020 → esm2022}/src/util/collection-utils.mjs +0 -0
  53. /package/{esm2020 → esm2022}/src/util/number-utils.mjs +0 -0
  54. /package/{esm2020 → esm2022}/src/util/object-utils.mjs +0 -0
  55. /package/{esm2020 → esm2022}/src/util/string-utils.mjs +0 -0
  56. /package/{esm2020 → esm2022}/src/util/type-utils.mjs +0 -0
@@ -1,119 +0,0 @@
1
- import { Inject, Injectable } from '@angular/core';
2
- import { throwError } from 'rxjs';
3
- import { HttpParams } from '@angular/common/http';
4
- import { catchError, map, shareReplay } from 'rxjs/operators';
5
- import { DDR_OAUTH2_CONFIG } from './oauth2-config';
6
- import { OAuth2Error } from './oauth2-error';
7
- import { TypeUtils } from '../util/type-utils';
8
- import { StringUtils } from '../util/string-utils';
9
- import * as i0 from "@angular/core";
10
- import * as i1 from "@angular/router";
11
- import * as i2 from "@angular/common/http";
12
- import * as i3 from "./oauth2-config";
13
- export class OAuth2Service {
14
- constructor(route, httpClient, config) {
15
- this.route = route;
16
- this.httpClient = httpClient;
17
- this.config = config;
18
- this.accessTokenString = null;
19
- this.accessToken = null;
20
- this.REFRESH_MARGIN_SECONDS = 60 * 10;
21
- this.refreshTokenRequest$ = null;
22
- }
23
- redirectToLogin() {
24
- const challenge = this.createChallenge();
25
- localStorage.setItem(OAuth2Service.STORAGE_KEY_CHALLENGE, challenge);
26
- const params = new HttpParams()
27
- .set('client_id', this.config.clientId)
28
- .set('response_type', 'code')
29
- .set('redirect_uri', this.config.redirectUri)
30
- .set('code_challenge', challenge)
31
- .set('code_challenge_method', 'plain');
32
- window.location.href = this.config.authorizeUri + '?' + params.toString();
33
- }
34
- handleCode() {
35
- if (this.route.snapshot.queryParamMap.has('error')) {
36
- const error = this.route.snapshot.queryParamMap.get('error');
37
- return throwError(() => new OAuth2Error(error ?? 'Unknown error'));
38
- }
39
- if (!this.route.snapshot.queryParamMap.has('code')) {
40
- return throwError(() => new OAuth2Error(OAuth2Error.CODE_NOT_FOUND));
41
- }
42
- const code = TypeUtils.notNull(this.route.snapshot.queryParamMap.get('code'));
43
- const params = new HttpParams()
44
- .set('grant_type', 'authorization_code')
45
- .set('code', code)
46
- .set('redirect_uri', this.config.redirectUri)
47
- .set('code_verifier', TypeUtils.notNull(localStorage.getItem(OAuth2Service.STORAGE_KEY_CHALLENGE)))
48
- .set('client_id', this.config.clientId);
49
- return this.httpClient.post(this.config.tokenUri, params).pipe(map(tokenResponse => this.processTokenResponse(tokenResponse)));
50
- }
51
- createChallenge() {
52
- return StringUtils.createRandomString(64, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890-._~');
53
- }
54
- getRefreshToken() {
55
- return localStorage.getItem(OAuth2Service.STORAGE_KEY_REFRESH_TOKEN);
56
- }
57
- getAccessTokenString() {
58
- return this.accessTokenString;
59
- }
60
- isAccessTokenExpired() {
61
- return (null == this.accessToken
62
- || this.accessToken.exp * 1000 < Date.now());
63
- }
64
- isRefreshPossibleAndRequired(req = null) {
65
- return ((null == req || !req.url.endsWith(this.config.tokenUri))
66
- && null != this.getRefreshToken()
67
- && (null == this.accessToken
68
- || (this.accessToken.exp - this.REFRESH_MARGIN_SECONDS) * 1000 < Date.now()));
69
- }
70
- performRefresh() {
71
- if (null == this.refreshTokenRequest$) {
72
- console.log('Performing token refesh');
73
- const params = new HttpParams()
74
- .set('grant_type', 'refresh_token')
75
- .set('refresh_token', TypeUtils.notNull(this.getRefreshToken()))
76
- .set('client_id', this.config.clientId);
77
- this.refreshTokenRequest$ = this.httpClient.post(this.config.tokenUri, params).pipe(map(tokenResponse => this.processTokenResponse(tokenResponse)), catchError(error => {
78
- this.accessTokenString = null;
79
- this.accessToken = null;
80
- localStorage.removeItem(OAuth2Service.STORAGE_KEY_REFRESH_TOKEN);
81
- this.refreshTokenRequest$ = null;
82
- return throwError(error);
83
- }), shareReplay(1));
84
- }
85
- return this.refreshTokenRequest$;
86
- }
87
- processTokenResponse(tokenResponse) {
88
- localStorage.removeItem(OAuth2Service.STORAGE_KEY_CHALLENGE);
89
- this.accessTokenString = tokenResponse.access_token;
90
- this.accessToken = JSON.parse(atob(tokenResponse.access_token.split('.')[1]));
91
- console.log('Access Token Expiry', new Date(this.accessToken.exp * 1000));
92
- localStorage.setItem(OAuth2Service.STORAGE_KEY_REFRESH_TOKEN, tokenResponse.refresh_token);
93
- return this.accessToken;
94
- }
95
- clear() {
96
- this.accessToken = null;
97
- this.accessTokenString = null;
98
- localStorage.removeItem(OAuth2Service.STORAGE_KEY_REFRESH_TOKEN);
99
- localStorage.removeItem(OAuth2Service.STORAGE_KEY_RETURN_URL);
100
- }
101
- setReturnUrl(url) {
102
- localStorage.setItem(OAuth2Service.STORAGE_KEY_RETURN_URL, url);
103
- }
104
- getReturnUrl() {
105
- return localStorage.getItem(OAuth2Service.STORAGE_KEY_RETURN_URL);
106
- }
107
- }
108
- OAuth2Service.STORAGE_KEY_CHALLENGE = 'ddr_oauth2_challenge';
109
- OAuth2Service.STORAGE_KEY_REFRESH_TOKEN = 'ddr_oauth2_refresh_token';
110
- OAuth2Service.STORAGE_KEY_RETURN_URL = 'ddr_oauth2_return_url';
111
- OAuth2Service.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: OAuth2Service, deps: [{ token: i1.ActivatedRoute }, { token: i2.HttpClient }, { token: DDR_OAUTH2_CONFIG }], target: i0.ɵɵFactoryTarget.Injectable });
112
- OAuth2Service.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: OAuth2Service });
113
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: OAuth2Service, decorators: [{
114
- type: Injectable
115
- }], ctorParameters: function () { return [{ type: i1.ActivatedRoute }, { type: i2.HttpClient }, { type: i3.OAuth2Config, decorators: [{
116
- type: Inject,
117
- args: [DDR_OAUTH2_CONFIG]
118
- }] }]; } });
119
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2F1dGgyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvb2F1dGgvb2F1dGgyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFakQsT0FBTyxFQUFhLFVBQVUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUM1QyxPQUFPLEVBQWEsVUFBVSxFQUFjLE1BQU0sc0JBQXNCLENBQUM7QUFDekUsT0FBTyxFQUFDLFVBQVUsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFHNUQsT0FBTyxFQUFDLGlCQUFpQixFQUFlLE1BQU0saUJBQWlCLENBQUM7QUFDaEUsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUM3QyxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sc0JBQXNCLENBQUM7Ozs7O0FBR2pELE1BQU0sT0FBTyxhQUFhO0lBZ0J0QixZQUNZLEtBQXFCLEVBQ3JCLFVBQXNCLEVBQ0ssTUFBb0I7UUFGL0MsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFDckIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUNLLFdBQU0sR0FBTixNQUFNLENBQWM7UUFYbkQsc0JBQWlCLEdBQWtCLElBQUksQ0FBQztRQUV4QyxnQkFBVyxHQUF3QixJQUFJLENBQUM7UUFFL0IsMkJBQXNCLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztRQUUxQyx5QkFBb0IsR0FBb0MsSUFBSSxDQUFDO0lBUXJFLENBQUM7SUFFTSxlQUFlO1FBRWxCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN6QyxZQUFZLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxxQkFBcUIsRUFBRSxTQUFTLENBQUMsQ0FB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SUFDbEUsQ0FBQztJQUVNLFlBQVksQ0FBQyxHQUFXO1FBRTNCLFlBQVksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLHNCQUFzQixFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3BFLENBQUM7SUFFTSxZQUFZO1FBRWYsT0FBTyxZQUFZLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7O0FBckpjLG1DQUFxQixHQUFHLHNCQUFzQixDQUFDO0FBRS9DLHVDQUF5QixHQUFHLDBCQUEwQixDQUFDO0FBRXhELG9DQUFzQixHQUFHLHVCQUF1QixDQUFDOzBHQU50RCxhQUFhLDBFQW1CVixpQkFBaUI7OEdBbkJwQixhQUFhOzJGQUFiLGFBQWE7a0JBRHpCLFVBQVU7OzBCQW9CRixNQUFNOzJCQUFDLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0LCBJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QWN0aXZhdGVkUm91dGV9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge09ic2VydmFibGUsIHRocm93RXJyb3J9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtIdHRwQ2xpZW50LCBIdHRwUGFyYW1zLCBIdHRwUmVxdWVzdH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHtjYXRjaEVycm9yLCBtYXAsIHNoYXJlUmVwbGF5fSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1Rva2VuUmVzcG9uc2V9IGZyb20gJy4vdG9rZW4tcmVzcG9uc2UnO1xuaW1wb3J0IHtKc29uV2ViVG9rZW59IGZyb20gJy4vanNvbi13ZWItdG9rZW4nO1xuaW1wb3J0IHtERFJfT0FVVEgyX0NPTkZJRywgT0F1dGgyQ29uZmlnfSBmcm9tICcuL29hdXRoMi1jb25maWcnO1xuaW1wb3J0IHtPQXV0aDJFcnJvcn0gZnJvbSAnLi9vYXV0aDItZXJyb3InO1xuaW1wb3J0IHtUeXBlVXRpbHN9IGZyb20gJy4uL3V0aWwvdHlwZS11dGlscyc7XG5pbXBvcnQge1N0cmluZ1V0aWxzfSBmcm9tICcuLi91dGlsL3N0cmluZy11dGlscyc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBPQXV0aDJTZXJ2aWNlXG57XG4gICAgcHJpdmF0ZSBzdGF0aWMgU1RPUkFHRV9LRVlfQ0hBTExFTkdFID0gJ2Rkcl9vYXV0aDJfY2hhbGxlbmdlJztcblxuICAgIHByaXZhdGUgc3RhdGljIFNUT1JBR0VfS0VZX1JFRlJFU0hfVE9LRU4gPSAnZGRyX29hdXRoMl9yZWZyZXNoX3Rva2VuJztcblxuICAgIHB1YmxpYyBzdGF0aWMgU1RPUkFHRV9LRVlfUkVUVVJOX1VSTCA9ICdkZHJfb2F1dGgyX3JldHVybl91cmwnO1xuXG4gICAgcHJpdmF0ZSBhY2Nlc3NUb2tlblN0cmluZzogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgICBwcml2YXRlIGFjY2Vzc1Rva2VuOiBKc29uV2ViVG9rZW4gfCBudWxsID0gbnVsbDtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgUkVGUkVTSF9NQVJHSU5fU0VDT05EUyA9IDYwICogMTA7XG5cbiAgICBwcml2YXRlIHJlZnJlc2hUb2tlblJlcXVlc3QkOiBPYnNlcnZhYmxlPEpzb25XZWJUb2tlbj4gfCBudWxsID0gbnVsbDtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICAgICAgcHJpdmF0ZSBodHRwQ2xpZW50OiBIdHRwQ2xpZW50LFxuICAgICAgICBASW5qZWN0KEREUl9PQVVUSDJfQ09ORklHKSBwcml2YXRlIGNvbmZpZzogT0F1dGgyQ29uZmlnXG4gICAgKVxuICAgIHtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVkaXJlY3RUb0xvZ2luKClcbiAgICB7XG4gICAgICAgIGNvbnN0IGNoYWxsZW5nZSA9IHRoaXMuY3JlYXRlQ2hhbGxlbmdlKCk7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKE9BdXRoMlNlcnZpY2UuU1RPUkFHRV9LRVlfQ0hBTExFTkdFLCBjaGFsbGVuZ2UpO1xuXG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKClcbiAgICAgICAgICAgIC5zZXQoJ2NsaWVudF9pZCcsIHRoaXMuY29uZmlnLmNsaWVudElkKVxuICAgICAgICAgICAgLnNldCgncmVzcG9uc2VfdHlwZScsICdjb2RlJylcbiAgICAgICAgICAgIC5zZXQoJ3JlZGlyZWN0X3VyaScsIHRoaXMuY29uZmlnLnJlZGlyZWN0VXJpKVxuICAgICAgICAgICAgLnNldCgnY29kZV9jaGFsbGVuZ2UnLCBjaGFsbGVuZ2UpXG4gICAgICAgICAgICAuc2V0KCdjb2RlX2NoYWxsZW5nZV9tZXRob2QnLCAncGxhaW4nKTtcblxuICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHRoaXMuY29uZmlnLmF1dGhvcml6ZVVyaSArICc/JyArIHBhcmFtcy50b1N0cmluZygpO1xuICAgIH1cblxuICAgIHB1YmxpYyBoYW5kbGVDb2RlKCk6IE9ic2VydmFibGU8SnNvbldlYlRva2VuPlxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMucm91dGUuc25hcHNob3QucXVlcnlQYXJhbU1hcC5oYXMoJ2Vycm9yJykpIHtcbiAgICAgICAgICAgIGNvbnN0IGVycm9yID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtTWFwLmdldCgnZXJyb3InKTtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IG5ldyBPQXV0aDJFcnJvcihlcnJvciA/PyAnVW5rbm93biBlcnJvcicpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtTWFwLmhhcygnY29kZScpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBuZXcgT0F1dGgyRXJyb3IoT0F1dGgyRXJyb3IuQ09ERV9OT1RfRk9VTkQpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvZGUgPSBUeXBlVXRpbHMubm90TnVsbCh0aGlzLnJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1NYXAuZ2V0KCdjb2RlJykpO1xuICAgICAgICBjb25zdCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpXG4gICAgICAgICAgICAuc2V0KCdncmFudF90eXBlJywgJ2F1dGhvcml6YXRpb25fY29kZScpXG4gICAgICAgICAgICAuc2V0KCdjb2RlJywgY29kZSlcbiAgICAgICAgICAgIC5zZXQoJ3JlZGlyZWN0X3VyaScsIHRoaXMuY29uZmlnLnJlZGlyZWN0VXJpKVxuICAgICAgICAgICAgLnNldCgnY29kZV92ZXJpZmllcicsIFR5cGVVdGlscy5ub3ROdWxsKGxvY2FsU3RvcmFnZS5nZXRJdGVtKE9BdXRoMlNlcnZpY2UuU1RPUkFHRV9LRVlfQ0hBTExFTkdFKSkpXG4gICAgICAgICAgICAuc2V0KCdjbGllbnRfaWQnLCB0aGlzLmNvbmZpZy5jbGllbnRJZCk7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdDxUb2tlblJlc3BvbnNlPih0aGlzLmNvbmZpZy50b2tlblVyaSwgcGFyYW1zKS5waXBlKFxuICAgICAgICAgICAgbWFwKHRva2VuUmVzcG9uc2UgPT4gdGhpcy5wcm9jZXNzVG9rZW5SZXNwb25zZSh0b2tlblJlc3BvbnNlKSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZUNoYWxsZW5nZSgpXG4gICAge1xuICAgICAgICByZXR1cm4gU3RyaW5nVXRpbHMuY3JlYXRlUmFuZG9tU3RyaW5nKDY0LCAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoxMjM0NTY3ODkwLS5fficpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0UmVmcmVzaFRva2VuKCk6IHN0cmluZyB8IG51bGxcbiAgICB7XG4gICAgICAgIHJldHVybiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShPQXV0aDJTZXJ2aWNlLlNUT1JBR0VfS0VZX1JFRlJFU0hfVE9LRU4pO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRBY2Nlc3NUb2tlblN0cmluZygpOiBzdHJpbmcgfCBudWxsXG4gICAge1xuICAgICAgICByZXR1cm4gdGhpcy5hY2Nlc3NUb2tlblN0cmluZztcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNBY2Nlc3NUb2tlbkV4cGlyZWQoKTogYm9vbGVhblxuICAgIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIG51bGwgPT0gdGhpcy5hY2Nlc3NUb2tlblxuICAgICAgICAgICAgfHwgdGhpcy5hY2Nlc3NUb2tlbi5leHAgKiAxMDAwIDwgRGF0ZS5ub3coKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc1JlZnJlc2hQb3NzaWJsZUFuZFJlcXVpcmVkKHJlcTogSHR0cFJlcXVlc3Q8YW55PiB8IG51bGwgPSBudWxsKTogYm9vbGVhblxuICAgIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChudWxsID09IHJlcSB8fCAhcmVxLnVybC5lbmRzV2l0aCh0aGlzLmNvbmZpZy50b2tlblVyaSkpXG4gICAgICAgICAgICAmJiBudWxsICE9IHRoaXMuZ2V0UmVmcmVzaFRva2VuKClcbiAgICAgICAgICAgICYmIChcbiAgICAgICAgICAgICAgICBudWxsID09IHRoaXMuYWNjZXNzVG9rZW5cbiAgICAgICAgICAgICAgICB8fCAodGhpcy5hY2Nlc3NUb2tlbi5leHAgLSB0aGlzLlJFRlJFU0hfTUFSR0lOX1NFQ09ORFMpICogMTAwMCA8IERhdGUubm93KClcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcGVyZm9ybVJlZnJlc2goKTogT2JzZXJ2YWJsZTxKc29uV2ViVG9rZW4+XG4gICAge1xuICAgICAgICBpZiAobnVsbCA9PSB0aGlzLnJlZnJlc2hUb2tlblJlcXVlc3QkKSB7XG5cbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdQZXJmb3JtaW5nIHRva2VuIHJlZmVzaCcpO1xuXG4gICAgICAgICAgICBjb25zdCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpXG4gICAgICAgICAgICAgICAgLnNldCgnZ3JhbnRfdHlwZScsICdyZWZyZXNoX3Rva2VuJylcbiAgICAgICAgICAgICAgICAuc2V0KCdyZWZyZXNoX3Rva2VuJywgVHlwZVV0aWxzLm5vdE51bGwodGhpcy5nZXRSZWZyZXNoVG9rZW4oKSkpXG4gICAgICAgICAgICAgICAgLnNldCgnY2xpZW50X2lkJywgdGhpcy5jb25maWcuY2xpZW50SWQpO1xuXG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hUb2tlblJlcXVlc3QkID0gdGhpcy5odHRwQ2xpZW50LnBvc3Q8VG9rZW5SZXNwb25zZT4odGhpcy5jb25maWcudG9rZW5VcmksIHBhcmFtcykucGlwZShcbiAgICAgICAgICAgICAgICBtYXAodG9rZW5SZXNwb25zZSA9PiB0aGlzLnByb2Nlc3NUb2tlblJlc3BvbnNlKHRva2VuUmVzcG9uc2UpKSxcbiAgICAgICAgICAgICAgICBjYXRjaEVycm9yKGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY2Nlc3NUb2tlblN0cmluZyA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWNjZXNzVG9rZW4gPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShPQXV0aDJTZXJ2aWNlLlNUT1JBR0VfS0VZX1JFRlJFU0hfVE9LRU4pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZnJlc2hUb2tlblJlcXVlc3QkID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMucmVmcmVzaFRva2VuUmVxdWVzdCQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwcm9jZXNzVG9rZW5SZXNwb25zZSh0b2tlblJlc3BvbnNlOiBUb2tlblJlc3BvbnNlKTogSnNvbldlYlRva2VuXG4gICAge1xuICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShPQXV0aDJTZXJ2aWNlLlNUT1JBR0VfS0VZX0NIQUxMRU5HRSk7XG4gICAgICAgIHRoaXMuYWNjZXNzVG9rZW5TdHJpbmcgPSB0b2tlblJlc3BvbnNlLmFjY2Vzc190b2tlbjtcbiAgICAgICAgdGhpcy5hY2Nlc3NUb2tlbiA9IEpTT04ucGFyc2UoYXRvYih0b2tlblJlc3BvbnNlLmFjY2Vzc190b2tlbi5zcGxpdCgnLicpWzFdKSk7XG4gICAgICAgIGNvbnNvbGUubG9nKCdBY2Nlc3MgVG9rZW4gRXhwaXJ5JywgbmV3IERhdGUodGhpcy5hY2Nlc3NUb2tlbiEuZXhwICogMTAwMCkpO1xuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShPQXV0aDJTZXJ2aWNlLlNUT1JBR0VfS0VZX1JFRlJFU0hfVE9LRU4sIHRva2VuUmVzcG9uc2UucmVmcmVzaF90b2tlbik7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuYWNjZXNzVG9rZW4hO1xuICAgIH1cblxuICAgIHB1YmxpYyBjbGVhcigpXG4gICAge1xuICAgICAgICB0aGlzLmFjY2Vzc1Rva2VuID0gbnVsbDtcbiAgICAgICAgdGhpcy5hY2Nlc3NUb2tlblN0cmluZyA9IG51bGw7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKE9BdXRoMlNlcnZpY2UuU1RPUkFHRV9LRVlfUkVGUkVTSF9UT0tFTik7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKE9BdXRoMlNlcnZpY2UuU1RPUkFHRV9LRVlfUkVUVVJOX1VSTCk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldFJldHVyblVybCh1cmw6IHN0cmluZylcbiAgICB7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKE9BdXRoMlNlcnZpY2UuU1RPUkFHRV9LRVlfUkVUVVJOX1VSTCwgdXJsKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0UmV0dXJuVXJsKCk6IHN0cmluZyB8IG51bGxcbiAgICB7XG4gICAgICAgIHJldHVybiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShPQXV0aDJTZXJ2aWNlLlNUT1JBR0VfS0VZX1JFVFVSTl9VUkwpO1xuICAgIH1cbn1cbiJdfQ==
@@ -1,53 +0,0 @@
1
- import { DDR_STORAGE_PREFIX, StorageService } from "./storage.service";
2
- import { Inject, Injectable } from "@angular/core";
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "../logger/logger.service";
5
- export class LocalStorageService extends StorageService {
6
- constructor(storagePrefix, logger) {
7
- super();
8
- this.storagePrefix = storagePrefix;
9
- this.logger = logger;
10
- }
11
- /**
12
- * @override
13
- */
14
- retrieve(key, defaultValue = null) {
15
- let fullKey = this.getFullKey(key);
16
- let valueJson = localStorage.getItem(fullKey);
17
- if (null == valueJson) {
18
- return defaultValue;
19
- }
20
- try {
21
- return JSON.parse(valueJson);
22
- }
23
- catch (e) {
24
- this.logger.warn('Could not parse json value', valueJson, e);
25
- localStorage.removeItem(fullKey);
26
- return null;
27
- }
28
- }
29
- /**
30
- * @override
31
- */
32
- store(key, value) {
33
- localStorage.setItem(this.getFullKey(key), JSON.stringify(value));
34
- }
35
- /**
36
- * @override
37
- */
38
- remove(key) {
39
- localStorage.removeItem(this.getFullKey(key));
40
- }
41
- getFullKey(key) {
42
- return this.storagePrefix + '.' + key;
43
- }
44
- }
45
- LocalStorageService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: LocalStorageService, deps: [{ token: DDR_STORAGE_PREFIX }, { token: i1.LoggerService }], target: i0.ɵɵFactoryTarget.Injectable });
46
- LocalStorageService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: LocalStorageService });
47
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: LocalStorageService, decorators: [{
48
- type: Injectable
49
- }], ctorParameters: function () { return [{ type: undefined, decorators: [{
50
- type: Inject,
51
- args: [DDR_STORAGE_PREFIX]
52
- }] }, { type: i1.LoggerService }]; } });
53
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwtc3RvcmFnZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3N0b3JhZ2UvbG9jYWwtc3RvcmFnZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxrQkFBa0IsRUFBRSxjQUFjLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUNyRSxPQUFPLEVBQUMsTUFBTSxFQUFFLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQzs7O0FBSWpELE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxjQUFjO0lBRW5ELFlBQzBDLGFBQXFCLEVBQ2pELE1BQXFCO1FBRy9CLEtBQUssRUFBRSxDQUFDO1FBSjhCLGtCQUFhLEdBQWIsYUFBYSxDQUFRO1FBQ2pELFdBQU0sR0FBTixNQUFNLENBQWU7SUFJbkMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksUUFBUSxDQUFJLEdBQVcsRUFBRSxlQUF5QixJQUFJO1FBRXpELElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbkMsSUFBSSxTQUFTLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM5QyxJQUFJLElBQUksSUFBSSxTQUFTLEVBQUU7WUFDbkIsT0FBTyxZQUFZLENBQUM7U0FDdkI7UUFFRCxJQUFJO1lBQ0EsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQ2hDO1FBQUMsT0FBTyxDQUFDLEVBQUU7WUFDUixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyw0QkFBNEIsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDN0QsWUFBWSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNqQyxPQUFPLElBQUksQ0FBQztTQUNmO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0ksS0FBSyxDQUFJLEdBQVcsRUFBRSxLQUFRO1FBRWpDLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUVEOztPQUVHO0lBQ0ksTUFBTSxDQUFDLEdBQVc7UUFFckIsWUFBWSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVTLFVBQVUsQ0FBQyxHQUFXO1FBRTVCLE9BQU8sSUFBSSxDQUFDLGFBQWEsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQzFDLENBQUM7O2dIQWpEUSxtQkFBbUIsa0JBR2hCLGtCQUFrQjtvSEFIckIsbUJBQW1COzJGQUFuQixtQkFBbUI7a0JBRC9CLFVBQVU7OzBCQUlGLE1BQU07MkJBQUMsa0JBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtERFJfU1RPUkFHRV9QUkVGSVgsIFN0b3JhZ2VTZXJ2aWNlfSBmcm9tIFwiLi9zdG9yYWdlLnNlcnZpY2VcIjtcbmltcG9ydCB7SW5qZWN0LCBJbmplY3RhYmxlfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHtMb2dnZXJTZXJ2aWNlfSBmcm9tIFwiLi4vbG9nZ2VyL2xvZ2dlci5zZXJ2aWNlXCI7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBMb2NhbFN0b3JhZ2VTZXJ2aWNlIGV4dGVuZHMgU3RvcmFnZVNlcnZpY2VcbntcbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgQEluamVjdChERFJfU1RPUkFHRV9QUkVGSVgpIHByb3RlY3RlZCBzdG9yYWdlUHJlZml4OiBzdHJpbmcsXG4gICAgICAgIHByb3RlY3RlZCBsb2dnZXI6IExvZ2dlclNlcnZpY2VcbiAgICApXG4gICAge1xuICAgICAgICBzdXBlcigpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBvdmVycmlkZVxuICAgICAqL1xuICAgIHB1YmxpYyByZXRyaWV2ZTxUPihrZXk6IHN0cmluZywgZGVmYXVsdFZhbHVlOiBUIHwgbnVsbCA9IG51bGwpOiBUIHwgbnVsbFxuICAgIHtcbiAgICAgICAgbGV0IGZ1bGxLZXkgPSB0aGlzLmdldEZ1bGxLZXkoa2V5KTtcbiAgICAgICAgbGV0IHZhbHVlSnNvbiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKGZ1bGxLZXkpO1xuICAgICAgICBpZiAobnVsbCA9PSB2YWx1ZUpzb24pIHtcbiAgICAgICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UodmFsdWVKc29uKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgdGhpcy5sb2dnZXIud2FybignQ291bGQgbm90IHBhcnNlIGpzb24gdmFsdWUnLCB2YWx1ZUpzb24sIGUpO1xuICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oZnVsbEtleSk7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBvdmVycmlkZVxuICAgICAqL1xuICAgIHB1YmxpYyBzdG9yZTxUPihrZXk6IHN0cmluZywgdmFsdWU6IFQpOiB2b2lkXG4gICAge1xuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLmdldEZ1bGxLZXkoa2V5KSwgSlNPTi5zdHJpbmdpZnkodmFsdWUpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAb3ZlcnJpZGVcbiAgICAgKi9cbiAgICBwdWJsaWMgcmVtb3ZlKGtleTogc3RyaW5nKVxuICAgIHtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5nZXRGdWxsS2V5KGtleSkpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXRGdWxsS2V5KGtleTogc3RyaW5nKTogc3RyaW5nXG4gICAge1xuICAgICAgICByZXR1cm4gdGhpcy5zdG9yYWdlUHJlZml4ICsgJy4nICsga2V5O1xuICAgIH1cbn1cbiJdfQ==