ngx-auto-logout 1.0.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.
- package/README.md +247 -0
- package/dist/README.md +247 -0
- package/dist/bundles/ngx-auto-logout.umd.js +864 -0
- package/dist/bundles/ngx-auto-logout.umd.js.map +1 -0
- package/dist/bundles/ngx-auto-logout.umd.min.js +16 -0
- package/dist/bundles/ngx-auto-logout.umd.min.js.map +1 -0
- package/dist/esm2015/lib/auto-logout.component.js +351 -0
- package/dist/esm2015/lib/auto-logout.module.js +26 -0
- package/dist/esm2015/lib/auto-logout.service.js +384 -0
- package/dist/esm2015/lib/models/auto-logout-config.interface.js +10 -0
- package/dist/esm2015/lib/models/auto-logout-config.token.js +7 -0
- package/dist/esm2015/lib/provide-auto-logout.js +11 -0
- package/dist/esm2015/ngx-auto-logout.js +5 -0
- package/dist/esm2015/public-api.js +10 -0
- package/dist/esm5/lib/auto-logout.component.js +196 -0
- package/dist/esm5/lib/auto-logout.module.js +30 -0
- package/dist/esm5/lib/auto-logout.service.js +391 -0
- package/dist/esm5/lib/models/auto-logout-config.interface.js +10 -0
- package/dist/esm5/lib/models/auto-logout-config.token.js +7 -0
- package/dist/esm5/lib/provide-auto-logout.js +11 -0
- package/dist/esm5/ngx-auto-logout.js +5 -0
- package/dist/esm5/public-api.js +10 -0
- package/dist/fesm2015/ngx-auto-logout.js +787 -0
- package/dist/fesm2015/ngx-auto-logout.js.map +1 -0
- package/dist/fesm5/ngx-auto-logout.js +643 -0
- package/dist/fesm5/ngx-auto-logout.js.map +1 -0
- package/dist/lib/auto-logout.component.d.ts +81 -0
- package/dist/lib/auto-logout.module.d.ts +8 -0
- package/dist/lib/auto-logout.service.d.ts +108 -0
- package/dist/lib/models/auto-logout-config.interface.d.ts +46 -0
- package/dist/lib/models/auto-logout-config.token.d.ts +7 -0
- package/dist/lib/provide-auto-logout.d.ts +6 -0
- package/dist/ngx-auto-logout.d.ts +4 -0
- package/dist/ngx-auto-logout.metadata.json +1 -0
- package/dist/package.json +41 -0
- package/dist/public-api.d.ts +6 -0
- package/package.json +53 -0
|
@@ -0,0 +1,384 @@
|
|
|
1
|
+
import { __decorate } from "tslib";
|
|
2
|
+
import { Injectable, NgZone } from '@angular/core';
|
|
3
|
+
import { BehaviorSubject, interval } from 'rxjs';
|
|
4
|
+
import { DEFAULT_AUTO_LOGOUT_CONFIG } from './models/auto-logout-config.interface';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
/**
|
|
7
|
+
* Auto logout service
|
|
8
|
+
* Angular 9 compatible: use providedIn: 'root' (official pattern)
|
|
9
|
+
*/
|
|
10
|
+
let AutoLogoutService = class AutoLogoutService {
|
|
11
|
+
/**
|
|
12
|
+
* Constructor
|
|
13
|
+
* Note: Do NOT use @Inject() here, it causes DI errors in Angular 9 VE
|
|
14
|
+
* Config should be passed via startMonitoring() method instead
|
|
15
|
+
*/
|
|
16
|
+
constructor(ngZone) {
|
|
17
|
+
this.ngZone = ngZone;
|
|
18
|
+
// 配置是否已初始化
|
|
19
|
+
this.isConfigInitialized = false;
|
|
20
|
+
// localStorage 键名
|
|
21
|
+
this.LOGIN_TIME_KEY = 'autoLogout_loginTime';
|
|
22
|
+
this.LAST_ACTIVITY_KEY = 'autoLogout_lastActivity';
|
|
23
|
+
this.EXTEND_COUNT_KEY = 'autoLogout_extendCount';
|
|
24
|
+
this.PAUSE_STATE_KEY = 'autoLogout_pauseState';
|
|
25
|
+
this.lastActivityTime = Date.now();
|
|
26
|
+
this.countdownValue = 0;
|
|
27
|
+
this.countdownSubject = new BehaviorSubject(0);
|
|
28
|
+
this.timerSubscription = null;
|
|
29
|
+
this.activityListeners = [];
|
|
30
|
+
this.warningShown = false;
|
|
31
|
+
// 是否启用活动监听
|
|
32
|
+
this.enableActivityTracking = false;
|
|
33
|
+
// 暂停状态
|
|
34
|
+
this.isPaused = false;
|
|
35
|
+
this.pauseStartTime = 0;
|
|
36
|
+
this.pausedRemainingTime = 0;
|
|
37
|
+
// Use default config, will be overridden by startMonitoring()
|
|
38
|
+
this.currentConfig = Object.assign({}, DEFAULT_AUTO_LOGOUT_CONFIG);
|
|
39
|
+
this.countdownValue = Math.floor(this.currentConfig.timeout);
|
|
40
|
+
this.countdownSubject = new BehaviorSubject(this.countdownValue);
|
|
41
|
+
}
|
|
42
|
+
getCountdown() {
|
|
43
|
+
return this.countdownSubject.asObservable();
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* 启动自动登出监控
|
|
47
|
+
*/
|
|
48
|
+
startMonitoring(config, enableTracking = false) {
|
|
49
|
+
this.stopMonitoring();
|
|
50
|
+
if (config) {
|
|
51
|
+
this.currentConfig = Object.assign(Object.assign({}, this.currentConfig), config);
|
|
52
|
+
}
|
|
53
|
+
// 恢复暂停状态
|
|
54
|
+
this.restorePauseState();
|
|
55
|
+
if (this.isPaused) {
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
// 根据模式初始化
|
|
59
|
+
if (this.currentConfig.mode === 'fixed') {
|
|
60
|
+
this.initFixedMode();
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
this.initIdleMode(enableTracking);
|
|
64
|
+
}
|
|
65
|
+
this.warningShown = false;
|
|
66
|
+
// 启动定时器
|
|
67
|
+
this.ngZone.runOutsideAngular(() => {
|
|
68
|
+
this.timerSubscription = interval(1000).subscribe(() => {
|
|
69
|
+
this.updateCountdown();
|
|
70
|
+
});
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* 停止监控
|
|
75
|
+
*/
|
|
76
|
+
stopMonitoring() {
|
|
77
|
+
if (this.timerSubscription) {
|
|
78
|
+
this.timerSubscription.unsubscribe();
|
|
79
|
+
this.timerSubscription = null;
|
|
80
|
+
}
|
|
81
|
+
this.removeActivityListeners();
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* 清除登录时间
|
|
85
|
+
*/
|
|
86
|
+
clearLoginTime() {
|
|
87
|
+
localStorage.removeItem(this.LOGIN_TIME_KEY);
|
|
88
|
+
localStorage.removeItem(this.LAST_ACTIVITY_KEY);
|
|
89
|
+
this.resetExtendCount();
|
|
90
|
+
this.clearPauseState();
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* 延长会话
|
|
94
|
+
*/
|
|
95
|
+
extendSession(extendSeconds = 1800) {
|
|
96
|
+
if (this.isMaxExtendReached()) {
|
|
97
|
+
console.warn('已达到最大延长次数');
|
|
98
|
+
return false;
|
|
99
|
+
}
|
|
100
|
+
if (this.currentConfig.mode === 'fixed') {
|
|
101
|
+
this.lastActivityTime -= extendSeconds * 1000;
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
this.resetActivityTimer();
|
|
105
|
+
}
|
|
106
|
+
this.incrementExtendCount();
|
|
107
|
+
if (this.currentConfig.onExtended) {
|
|
108
|
+
this.currentConfig.onExtended(extendSeconds);
|
|
109
|
+
}
|
|
110
|
+
return true;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* 检查是否可以延长
|
|
114
|
+
*/
|
|
115
|
+
canExtendSession() {
|
|
116
|
+
return !this.isMaxExtendReached() && !this.isPaused;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* 获取剩余可延长次数
|
|
120
|
+
*/
|
|
121
|
+
getRemainingExtendTimes() {
|
|
122
|
+
if (this.currentConfig.maxExtendTimes === -1 || this.currentConfig.maxExtendTimes === undefined) {
|
|
123
|
+
return -1;
|
|
124
|
+
}
|
|
125
|
+
const usedCount = this.getExtendCount();
|
|
126
|
+
return Math.max(0, this.currentConfig.maxExtendTimes - usedCount);
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* 获取最后操作时间显示
|
|
130
|
+
*/
|
|
131
|
+
getLastActivityDisplay() {
|
|
132
|
+
if (this.currentConfig.mode !== 'idle') {
|
|
133
|
+
return '';
|
|
134
|
+
}
|
|
135
|
+
const lastActivity = this.getLastActivityTime();
|
|
136
|
+
if (!lastActivity) {
|
|
137
|
+
return '';
|
|
138
|
+
}
|
|
139
|
+
const minutesAgo = Math.floor((Date.now() - lastActivity) / 60000);
|
|
140
|
+
if (minutesAgo < 1) {
|
|
141
|
+
return '刚刚操作';
|
|
142
|
+
}
|
|
143
|
+
return `${minutesAgo}分钟前操作`;
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* 暂停
|
|
147
|
+
*/
|
|
148
|
+
pause() {
|
|
149
|
+
if (this.isPaused)
|
|
150
|
+
return;
|
|
151
|
+
this.isPaused = true;
|
|
152
|
+
this.pauseStartTime = Date.now();
|
|
153
|
+
this.pausedRemainingTime = this.countdownValue;
|
|
154
|
+
this.stopMonitoring();
|
|
155
|
+
this.savePauseState();
|
|
156
|
+
if (this.currentConfig.onPaused) {
|
|
157
|
+
this.currentConfig.onPaused();
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* 恢复
|
|
162
|
+
*/
|
|
163
|
+
resume() {
|
|
164
|
+
if (!this.isPaused)
|
|
165
|
+
return;
|
|
166
|
+
const pauseDuration = Date.now() - this.pauseStartTime;
|
|
167
|
+
if (this.currentConfig.mode === 'fixed') {
|
|
168
|
+
this.lastActivityTime += pauseDuration;
|
|
169
|
+
}
|
|
170
|
+
else {
|
|
171
|
+
this.lastActivityTime += pauseDuration;
|
|
172
|
+
this.setLastActivityTime(this.lastActivityTime);
|
|
173
|
+
}
|
|
174
|
+
this.isPaused = false;
|
|
175
|
+
this.pauseStartTime = 0;
|
|
176
|
+
this.pausedRemainingTime = 0;
|
|
177
|
+
this.clearPauseState();
|
|
178
|
+
this.startMonitoring(this.currentConfig, this.enableActivityTracking);
|
|
179
|
+
if (this.currentConfig.onResumed) {
|
|
180
|
+
this.currentConfig.onResumed();
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* 检查是否暂停
|
|
185
|
+
*/
|
|
186
|
+
isAutoLogoutPaused() {
|
|
187
|
+
return this.isPaused;
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* 格式化倒计时
|
|
191
|
+
*/
|
|
192
|
+
formatCountdown(seconds) {
|
|
193
|
+
const mins = Math.floor(seconds / 60);
|
|
194
|
+
const secs = seconds % 60;
|
|
195
|
+
return `${mins.toString().padStart(2, '0')}:${secs.toString().padStart(2, '0')}`;
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* 判断是否警告状态
|
|
199
|
+
*/
|
|
200
|
+
isWarningState(seconds) {
|
|
201
|
+
const warningTime = this.currentConfig.warningTime || 30;
|
|
202
|
+
return seconds <= warningTime && seconds > 0;
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* 判断是否紧急状态(最后10秒)
|
|
206
|
+
*/
|
|
207
|
+
isUrgentState(seconds) {
|
|
208
|
+
return seconds <= 10 && seconds > 0;
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* 获取当前模式
|
|
212
|
+
*/
|
|
213
|
+
getCurrentMode() {
|
|
214
|
+
return this.currentConfig.mode;
|
|
215
|
+
}
|
|
216
|
+
// ==================== 私有方法 ====================
|
|
217
|
+
initFixedMode() {
|
|
218
|
+
const loginTime = this.getLoginTime();
|
|
219
|
+
if (!loginTime) {
|
|
220
|
+
this.setLoginTime(Date.now());
|
|
221
|
+
this.lastActivityTime = Date.now();
|
|
222
|
+
}
|
|
223
|
+
else {
|
|
224
|
+
this.lastActivityTime = loginTime;
|
|
225
|
+
}
|
|
226
|
+
this.updateCountdownValue();
|
|
227
|
+
}
|
|
228
|
+
initIdleMode(enableTracking) {
|
|
229
|
+
this.enableActivityTracking = enableTracking || true;
|
|
230
|
+
const lastActivity = this.getLastActivityTime();
|
|
231
|
+
if (!lastActivity) {
|
|
232
|
+
this.setLastActivityTime(Date.now());
|
|
233
|
+
this.lastActivityTime = Date.now();
|
|
234
|
+
}
|
|
235
|
+
else {
|
|
236
|
+
this.lastActivityTime = lastActivity;
|
|
237
|
+
}
|
|
238
|
+
this.registerActivityListeners();
|
|
239
|
+
this.updateCountdownValue();
|
|
240
|
+
}
|
|
241
|
+
updateCountdownValue() {
|
|
242
|
+
const now = Date.now();
|
|
243
|
+
const elapsed = now - this.lastActivityTime;
|
|
244
|
+
const remaining = Math.max(0, Math.floor((this.currentConfig.timeout * 1000 - elapsed) / 1000));
|
|
245
|
+
this.countdownValue = remaining;
|
|
246
|
+
this.countdownSubject.next(this.countdownValue);
|
|
247
|
+
}
|
|
248
|
+
updateCountdown() {
|
|
249
|
+
const now = Date.now();
|
|
250
|
+
const elapsed = now - this.lastActivityTime;
|
|
251
|
+
const remaining = Math.max(0, Math.floor((this.currentConfig.timeout * 1000 - elapsed) / 1000));
|
|
252
|
+
if (remaining !== this.countdownValue) {
|
|
253
|
+
this.countdownValue = remaining;
|
|
254
|
+
this.ngZone.run(() => {
|
|
255
|
+
this.countdownSubject.next(this.countdownValue);
|
|
256
|
+
});
|
|
257
|
+
// 警告回调
|
|
258
|
+
const warningTime = this.currentConfig.warningTime || 30;
|
|
259
|
+
if (remaining === warningTime && !this.warningShown) {
|
|
260
|
+
this.warningShown = true;
|
|
261
|
+
if (this.currentConfig.onWarning) {
|
|
262
|
+
this.currentConfig.onWarning(remaining);
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
// 超时回调
|
|
266
|
+
if (remaining <= 0) {
|
|
267
|
+
this.performAutoLogout();
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
performAutoLogout() {
|
|
272
|
+
this.stopMonitoring();
|
|
273
|
+
this.clearLoginTime();
|
|
274
|
+
if (this.currentConfig.onTimeout) {
|
|
275
|
+
this.currentConfig.onTimeout();
|
|
276
|
+
}
|
|
277
|
+
else {
|
|
278
|
+
// 默认行为:导航到登录页
|
|
279
|
+
// Note: Router navigation removed to avoid DI issues in Angular 9 VE
|
|
280
|
+
// Use onTimeout callback for custom navigation
|
|
281
|
+
console.warn('Auto logout timeout - implement custom navigation via onTimeout callback');
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
registerActivityListeners() {
|
|
285
|
+
const events = ['mousedown', 'mousemove', 'keypress', 'scroll', 'touchstart', 'click'];
|
|
286
|
+
events.forEach((event) => {
|
|
287
|
+
const listener = () => this.resetActivityTimer();
|
|
288
|
+
document.addEventListener(event, listener, true);
|
|
289
|
+
this.activityListeners.push({ event, listener });
|
|
290
|
+
});
|
|
291
|
+
}
|
|
292
|
+
removeActivityListeners() {
|
|
293
|
+
this.activityListeners.forEach(({ event, listener }) => {
|
|
294
|
+
document.removeEventListener(event, listener, true);
|
|
295
|
+
});
|
|
296
|
+
this.activityListeners = [];
|
|
297
|
+
}
|
|
298
|
+
resetActivityTimer() {
|
|
299
|
+
if (this.currentConfig.mode === 'idle') {
|
|
300
|
+
this.lastActivityTime = Date.now();
|
|
301
|
+
this.setLastActivityTime(this.lastActivityTime);
|
|
302
|
+
this.updateCountdownValue();
|
|
303
|
+
this.warningShown = false;
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
isMaxExtendReached() {
|
|
307
|
+
if (this.currentConfig.maxExtendTimes === -1 || this.currentConfig.maxExtendTimes === undefined) {
|
|
308
|
+
return false;
|
|
309
|
+
}
|
|
310
|
+
const usedCount = this.getExtendCount();
|
|
311
|
+
return usedCount >= this.currentConfig.maxExtendTimes;
|
|
312
|
+
}
|
|
313
|
+
getExtendCount() {
|
|
314
|
+
const countStr = localStorage.getItem(this.EXTEND_COUNT_KEY);
|
|
315
|
+
return countStr ? parseInt(countStr, 10) : 0;
|
|
316
|
+
}
|
|
317
|
+
incrementExtendCount() {
|
|
318
|
+
const currentCount = this.getExtendCount();
|
|
319
|
+
localStorage.setItem(this.EXTEND_COUNT_KEY, (currentCount + 1).toString());
|
|
320
|
+
}
|
|
321
|
+
resetExtendCount() {
|
|
322
|
+
localStorage.removeItem(this.EXTEND_COUNT_KEY);
|
|
323
|
+
}
|
|
324
|
+
getLoginTime() {
|
|
325
|
+
const timeStr = localStorage.getItem(this.LOGIN_TIME_KEY);
|
|
326
|
+
return timeStr ? parseInt(timeStr, 10) : null;
|
|
327
|
+
}
|
|
328
|
+
setLoginTime(time) {
|
|
329
|
+
localStorage.setItem(this.LOGIN_TIME_KEY, time.toString());
|
|
330
|
+
}
|
|
331
|
+
getLastActivityTime() {
|
|
332
|
+
const timeStr = localStorage.getItem(this.LAST_ACTIVITY_KEY);
|
|
333
|
+
return timeStr ? parseInt(timeStr, 10) : null;
|
|
334
|
+
}
|
|
335
|
+
setLastActivityTime(time) {
|
|
336
|
+
localStorage.setItem(this.LAST_ACTIVITY_KEY, time.toString());
|
|
337
|
+
}
|
|
338
|
+
savePauseState() {
|
|
339
|
+
const state = {
|
|
340
|
+
isPaused: true,
|
|
341
|
+
pauseStartTime: this.pauseStartTime,
|
|
342
|
+
pausedRemainingTime: this.pausedRemainingTime,
|
|
343
|
+
mode: this.currentConfig.mode,
|
|
344
|
+
lastActivityTime: this.lastActivityTime
|
|
345
|
+
};
|
|
346
|
+
localStorage.setItem(this.PAUSE_STATE_KEY, JSON.stringify(state));
|
|
347
|
+
}
|
|
348
|
+
clearPauseState() {
|
|
349
|
+
localStorage.removeItem(this.PAUSE_STATE_KEY);
|
|
350
|
+
}
|
|
351
|
+
restorePauseState() {
|
|
352
|
+
const stateStr = localStorage.getItem(this.PAUSE_STATE_KEY);
|
|
353
|
+
if (!stateStr)
|
|
354
|
+
return;
|
|
355
|
+
try {
|
|
356
|
+
const state = JSON.parse(stateStr);
|
|
357
|
+
if (state.isPaused) {
|
|
358
|
+
this.isPaused = true;
|
|
359
|
+
this.pauseStartTime = state.pauseStartTime;
|
|
360
|
+
this.pausedRemainingTime = state.pausedRemainingTime;
|
|
361
|
+
this.lastActivityTime = state.lastActivityTime;
|
|
362
|
+
this.currentConfig.mode = state.mode;
|
|
363
|
+
if (this.timerSubscription) {
|
|
364
|
+
this.timerSubscription.unsubscribe();
|
|
365
|
+
this.timerSubscription = null;
|
|
366
|
+
}
|
|
367
|
+
this.removeActivityListeners();
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
catch (e) {
|
|
371
|
+
console.error('恢复暂停状态失败:', e);
|
|
372
|
+
this.clearPauseState();
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
};
|
|
376
|
+
AutoLogoutService.ctorParameters = () => [
|
|
377
|
+
{ type: NgZone }
|
|
378
|
+
];
|
|
379
|
+
AutoLogoutService.ɵprov = i0.ɵɵdefineInjectable({ factory: function AutoLogoutService_Factory() { return new AutoLogoutService(i0.ɵɵinject(i0.NgZone)); }, token: AutoLogoutService, providedIn: "root" });
|
|
380
|
+
AutoLogoutService = __decorate([
|
|
381
|
+
Injectable({ providedIn: 'root' })
|
|
382
|
+
], AutoLogoutService);
|
|
383
|
+
export { AutoLogoutService };
|
|
384
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0by1sb2dvdXQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC1hdXRvLWxvZ291dC8iLCJzb3VyY2VzIjpbImxpYi9hdXRvLWxvZ291dC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZUFBZSxFQUFjLFFBQVEsRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDM0UsT0FBTyxFQUFvQiwwQkFBMEIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDOztBQUVyRzs7O0dBR0c7QUFFSCxJQUFhLGlCQUFpQixHQUE5QixNQUFhLGlCQUFpQjtJQTRCNUI7Ozs7T0FJRztJQUNILFlBQW9CLE1BQWM7UUFBZCxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBN0JsQyxXQUFXO1FBQ0gsd0JBQW1CLEdBQUcsS0FBSyxDQUFDO1FBRXBDLGtCQUFrQjtRQUNELG1CQUFjLEdBQUcsc0JBQXNCLENBQUM7UUFDeEMsc0JBQWlCLEdBQUcseUJBQXlCLENBQUM7UUFDOUMscUJBQWdCLEdBQUcsd0JBQXdCLENBQUM7UUFDNUMsb0JBQWUsR0FBRyx1QkFBdUIsQ0FBQztRQUVuRCxxQkFBZ0IsR0FBVyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDdEMsbUJBQWMsR0FBVyxDQUFDLENBQUM7UUFDM0IscUJBQWdCLEdBQTRCLElBQUksZUFBZSxDQUFTLENBQUMsQ0FBQyxDQUFDO1FBQzNFLHNCQUFpQixHQUF3QixJQUFJLENBQUM7UUFDOUMsc0JBQWlCLEdBQVUsRUFBRSxDQUFDO1FBQzlCLGlCQUFZLEdBQVksS0FBSyxDQUFDO1FBRXRDLFdBQVc7UUFDSCwyQkFBc0IsR0FBWSxLQUFLLENBQUM7UUFFaEQsT0FBTztRQUNDLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFDMUIsbUJBQWMsR0FBVyxDQUFDLENBQUM7UUFDM0Isd0JBQW1CLEdBQVcsQ0FBQyxDQUFD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QztZQUNuQyxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUU7Z0JBQ2xCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO2dCQUNyQixJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQyxjQUFjLENBQUM7Z0JBQzNDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxLQUFLLENBQUMsbUJBQW1CLENBQUM7Z0JBQ3JELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUMsZ0JBQWdCLENBQUM7Z0JBQy9DLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7Z0JBRXJDLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFO29CQUMxQixJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxFQUFFLENBQUM7b0JBQ3JDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7aUJBQy9CO2dCQUNELElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO2FBQ2hDO1NBQ0Y7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNWLE9BQU8sQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzlCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztTQUN4QjtJQUNILENBQUM7Q0FDRixDQUFBOztZQXhZNkIsTUFBTTs7O0FBakN2QixpQkFBaUI7SUFEN0IsVUFBVSxDQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxDQUFDO0dBQ3RCLGlCQUFpQixDQXlhN0I7U0F6YVksaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgTmdab25lIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIGludGVydmFsLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEF1dG9Mb2dvdXRDb25maWcsIERFRkFVTFRfQVVUT19MT0dPVVRfQ09ORklHIH0gZnJvbSAnLi9tb2RlbHMvYXV0by1sb2dvdXQtY29uZmlnLmludGVyZmFjZSc7XG5cbi8qKlxuICogQXV0byBsb2dvdXQgc2VydmljZVxuICogQW5ndWxhciA5IGNvbXBhdGlibGU6IHVzZSBwcm92aWRlZEluOiAncm9vdCcgKG9mZmljaWFsIHBhdHRlcm4pXG4gKi9cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgQXV0b0xvZ291dFNlcnZpY2Uge1xuICAvLyDlvZPliY3phY3nva5cbiAgcHJpdmF0ZSBjdXJyZW50Q29uZmlnOiBBdXRvTG9nb3V0Q29uZmlnO1xuXG4gIC8vIOmFjee9ruaYr+WQpuW3suWIneWni+WMllxuICBwcml2YXRlIGlzQ29uZmlnSW5pdGlhbGl6ZWQgPSBmYWxzZTtcblxuICAvLyBsb2NhbFN0b3JhZ2Ug6ZSu5ZCNXG4gIHByaXZhdGUgcmVhZG9ubHkgTE9HSU5fVElNRV9LRVkgPSAnYXV0b0xvZ291dF9sb2dpblRpbWUnO1xuICBwcml2YXRlIHJlYWRvbmx5IExBU1RfQUNUSVZJVFlfS0VZID0gJ2F1dG9Mb2dvdXRfbGFzdEFjdGl2aXR5JztcbiAgcHJpdmF0ZSByZWFkb25seSBFWFRFTkRfQ09VTlRfS0VZID0gJ2F1dG9Mb2dvdXRfZXh0ZW5kQ291bnQnO1xuICBwcml2YXRlIHJlYWRvbmx5IFBBVVNFX1NUQVRFX0tFWSA9ICdhdXRvTG9nb3V0X3BhdXNlU3RhdGUnO1xuXG4gIHByaXZhdGUgbGFzdEFjdGl2aXR5VGltZTogbnVtYmVyID0gRGF0ZS5ub3coKTtcbiAgcHJpdmF0ZSBjb3VudGRvd25WYWx1ZTogbnVtYmVyID0gMDtcbiAgcHJpdmF0ZSBjb3VudGRvd25TdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKTtcbiAgcHJpdmF0ZSB0aW1lclN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgYWN0aXZpdHlMaXN0ZW5lcnM6IGFueVtdID0gW107XG4gIHByaXZhdGUgd2FybmluZ1Nob3duOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLy8g5piv5ZCm5ZCv55So5rS75Yqo55uR5ZCsXG4gIHByaXZhdGUgZW5hYmxlQWN0aXZpdHlUcmFja2luZzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8vIOaaguWBnOeKtuaAgVxuICBwcml2YXRlIGlzUGF1c2VkOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgcGF1c2VTdGFydFRpbWU6IG51bWJlciA9IDA7XG4gIHByaXZhdGUgcGF1c2VkUmVtYWluaW5nVGltZTogbnVtYmVyID0gMDtcblxuICAvKipcbiAgICogQ29uc3RydWN0b3JcbiAgICogTm90ZTogRG8gTk9UIHVzZSBASW5qZWN0KCkgaGVyZSwgaXQgY2F1c2VzIERJIGVycm9ycyBpbiBBbmd1bGFyIDkgVkVcbiAgICogQ29uZmlnIHNob3VsZCBiZSBwYXNzZWQgdmlhIHN0YXJ0TW9uaXRvcmluZygpIG1ldGhvZCBpbnN0ZWFkXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIG5nWm9uZTogTmdab25lKSB7XG4gICAgLy8gVXNlIGRlZmF1bHQgY29uZmlnLCB3aWxsIGJlIG92ZXJyaWRkZW4gYnkgc3RhcnRNb25pdG9yaW5nKClcbiAgICB0aGlzLmN1cnJlbnRDb25maWcgPSB7IC4uLkRFRkFVTFRfQVVUT19MT0dPVVRfQ09ORklHIH07XG4gICAgdGhpcy5jb3VudGRvd25WYWx1ZSA9IE1hdGguZmxvb3IodGhpcy5jdXJyZW50Q29uZmlnLnRpbWVvdXQpO1xuICAgIHRoaXMuY291bnRkb3duU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPih0aGlzLmNvdW50ZG93blZhbHVlKTtcbiAgfVxuICBnZXRDb3VudGRvd24oKTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcbiAgICByZXR1cm4gdGhpcy5jb3VudGRvd25TdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIOWQr+WKqOiHquWKqOeZu+WHuuebkeaOp1xuICAgKi9cbiAgc3RhcnRNb25pdG9yaW5nKGNvbmZpZz86IFBhcnRpYWw8QXV0b0xvZ291dENvbmZpZz4sIGVuYWJsZVRyYWNraW5nOiBib29sZWFuID0gZmFsc2UpOiB2b2lkIHtcbiAgICB0aGlzLnN0b3BNb25pdG9yaW5nKCk7XG5cbiAgICBpZiAoY29uZmlnKSB7XG4gICAgICB0aGlzLmN1cnJlbnRDb25maWcgPSB7IC4uLnRoaXMuY3VycmVudENvbmZpZywgLi4uY29uZmlnIH07XG4gICAgfVxuXG4gICAgLy8g5oGi5aSN5pqC5YGc54q25oCBXG4gICAgdGhpcy5yZXN0b3JlUGF1c2VTdGF0ZSgpO1xuXG4gICAgaWYgKHRoaXMuaXNQYXVzZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyDmoLnmja7mqKHlvI/liJ3lp4vljJZcbiAgICBpZiAodGhpcy5jdXJyZW50Q29uZmlnLm1vZGUgPT09ICdmaXhlZCcpIHtcbiAgICAgIHRoaXMuaW5pdEZpeGVkTW9kZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmluaXRJZGxlTW9kZShlbmFibGVUcmFja2luZyk7XG4gICAgfVxuXG4gICAgdGhpcy53YXJuaW5nU2hvd24gPSBmYWxzZTtcblxuICAgIC8vIOWQr+WKqOWumuaXtuWZqFxuICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgIHRoaXMudGltZXJTdWJzY3JpcHRpb24gPSBpbnRlcnZhbCgxMDAwKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLnVwZGF0ZUNvdW50ZG93bigpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICog5YGc5q2i55uR5o6nXG4gICAqL1xuICBzdG9wTW9uaXRvcmluZygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy50aW1lclN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy50aW1lclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgdGhpcy50aW1lclN1YnNjcmlwdGlvbiA9IG51bGw7XG4gICAgfVxuICAgIHRoaXMucmVtb3ZlQWN0aXZpdHlMaXN0ZW5lcnMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDmuIXpmaTnmbvlvZXml7bpl7RcbiAgICovXG4gIGNsZWFyTG9naW5UaW1lKCk6IHZvaWQge1xuICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuTE9HSU5fVElNRV9LRVkpO1xuICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuTEFTVF9BQ1RJVklUWV9LRVkpO1xuICAgIHRoaXMucmVzZXRFeHRlbmRDb3VudCgpO1xuICAgIHRoaXMuY2xlYXJQYXVzZVN0YXRlKCk7XG4gIH1cblxuICAvKipcbiAgICog5bu26ZW/5Lya6K+dXG4gICAqL1xuICBleHRlbmRTZXNzaW9uKGV4dGVuZFNlY29uZHM6IG51bWJlciA9IDE4MDApOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5pc01heEV4dGVuZFJlYWNoZWQoKSkge1xuICAgICAgY29uc29sZS53YXJuKCflt7Lovr7liLDmnIDlpKflu7bplb/mrKHmlbAnKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jdXJyZW50Q29uZmlnLm1vZGUgPT09ICdmaXhlZCcpIHtcbiAgICAgIHRoaXMubGFzdEFjdGl2aXR5VGltZSAtPSBleHRlbmRTZWNvbmRzICogMTAwMDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZXNldEFjdGl2aXR5VGltZXIoKTtcbiAgICB9XG5cbiAgICB0aGlzLmluY3JlbWVudEV4dGVuZENvdW50KCk7XG5cbiAgICBpZiAodGhpcy5jdXJyZW50Q29uZmlnLm9uRXh0ZW5kZWQpIHtcbiAgICAgIHRoaXMuY3VycmVudENvbmZpZy5vbkV4dGVuZGVkKGV4dGVuZFNlY29uZHMpO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIOajgOafpeaYr+WQpuWPr+S7peW7tumVv1xuICAgKi9cbiAgY2FuRXh0ZW5kU2Vzc2lvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMuaXNNYXhFeHRlbmRSZWFjaGVkKCkgJiYgIXRoaXMuaXNQYXVzZWQ7XG4gIH1cblxuICAvKipcbiAgICog6I635Y+W5Ymp5L2Z5Y+v5bu26ZW/5qyh5pWwXG4gICAqL1xuICBnZXRSZW1haW5pbmdFeHRlbmRUaW1lcygpOiBudW1iZXIge1xuICAgIGlmICh0aGlzLmN1cnJlbnRDb25maWcubWF4RXh0ZW5kVGltZXMgPT09IC0xIHx8IHRoaXMuY3VycmVudENvbmZpZy5tYXhFeHRlbmRUaW1lcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gLTE7XG4gICAgfVxuICAgIGNvbnN0IHVzZWRDb3VudCA9IHRoaXMuZ2V0RXh0ZW5kQ291bnQoKTtcbiAgICByZXR1cm4gTWF0aC5tYXgoMCwgdGhpcy5jdXJyZW50Q29uZmlnLm1heEV4dGVuZFRpbWVzIC0gdXNlZENvdW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiDojrflj5bmnIDlkI7mk43kvZzml7bpl7TmmL7npLpcbiAgICovXG4gIGdldExhc3RBY3Rpdml0eURpc3BsYXkoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5jdXJyZW50Q29uZmlnLm1vZGUgIT09ICdpZGxlJykge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGNvbnN0IGxhc3RBY3Rpdml0eSA9IHRoaXMuZ2V0TGFzdEFjdGl2aXR5VGltZSgpO1xuICAgIGlmICghbGFzdEFjdGl2aXR5KSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgY29uc3QgbWludXRlc0FnbyA9IE1hdGguZmxvb3IoKERhdGUubm93KCkgLSBsYXN0QWN0aXZpdHkpIC8gNjAwMDApO1xuICAgIGlmIChtaW51dGVzQWdvIDwgMSkge1xuICAgICAgcmV0dXJuICfliJrliJrmk43kvZwnO1xuICAgIH1cbiAgICByZXR1cm4gYCR7bWludXRlc0Fnb33liIbpkp/liY3mk43kvZxgO1xuICB9XG5cbiAgLyoqXG4gICAqIOaaguWBnFxuICAgKi9cbiAgcGF1c2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNQYXVzZWQpIHJldHVybjtcblxuICAgIHRoaXMuaXNQYXVzZWQgPSB0cnVlO1xuICAgIHRoaXMucGF1c2VTdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgIHRoaXMucGF1c2VkUmVtYWluaW5nVGltZSA9IHRoaXMuY291bnRkb3duVmFsdWU7XG5cbiAgICB0aGlzLnN0b3BNb25pdG9yaW5nKCk7XG4gICAgdGhpcy5zYXZlUGF1c2VTdGF0ZSgpO1xuXG4gICAgaWYgKHRoaXMuY3VycmVudENvbmZpZy5vblBhdXNlZCkge1xuICAgICAgdGhpcy5jdXJyZW50Q29uZmlnLm9uUGF1c2VkKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIOaBouWkjVxuICAgKi9cbiAgcmVzdW1lKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc1BhdXNlZCkgcmV0dXJuO1xuXG4gICAgY29uc3QgcGF1c2VEdXJhdGlvbiA9IERhdGUubm93KCkgLSB0aGlzLnBhdXNlU3RhcnRUaW1lO1xuXG4gICAgaWYgKHRoaXMuY3VycmVudENvbmZpZy5tb2RlID09PSAnZml4ZWQnKSB7XG4gICAgICB0aGlzLmxhc3RBY3Rpdml0eVRpbWUgKz0gcGF1c2VEdXJhdGlvbjtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5sYXN0QWN0aXZpdHlUaW1lICs9IHBhdXNlRHVyYXRpb247XG4gICAgICB0aGlzLnNldExhc3RBY3Rpdml0eVRpbWUodGhpcy5sYXN0QWN0aXZpdHlUaW1lKTtcbiAgICB9XG5cbiAgICB0aGlzLmlzUGF1c2VkID0gZmFsc2U7XG4gICAgdGhpcy5wYXVzZVN0YXJ0VGltZSA9IDA7XG4gICAgdGhpcy5wYXVzZWRSZW1haW5pbmdUaW1lID0gMDtcblxuICAgIHRoaXMuY2xlYXJQYXVzZVN0YXRlKCk7XG4gICAgdGhpcy5zdGFydE1vbml0b3JpbmcodGhpcy5jdXJyZW50Q29uZmlnLCB0aGlzLmVuYWJsZUFjdGl2aXR5VHJhY2tpbmcpO1xuXG4gICAgaWYgKHRoaXMuY3VycmVudENvbmZpZy5vblJlc3VtZWQpIHtcbiAgICAgIHRoaXMuY3VycmVudENvbmZpZy5vblJlc3VtZWQoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICog5qOA5p+l5piv5ZCm5pqC5YGcXG4gICAqL1xuICBpc0F1dG9Mb2dvdXRQYXVzZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNQYXVzZWQ7XG4gIH1cblxuICAvKipcbiAgICog5qC85byP5YyW5YCS6K6h5pe2XG4gICAqL1xuICBmb3JtYXRDb3VudGRvd24oc2Vjb25kczogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBjb25zdCBtaW5zID0gTWF0aC5mbG9vcihzZWNvbmRzIC8gNjApO1xuICAgIGNvbnN0IHNlY3MgPSBzZWNvbmRzICUgNjA7XG4gICAgcmV0dXJuIGAke21pbnMudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpfToke3NlY3MudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpfWA7XG4gIH1cblxuICAvKipcbiAgICog5Yik5pat5piv5ZCm6K2m5ZGK54q25oCBXG4gICAqL1xuICBpc1dhcm5pbmdTdGF0ZShzZWNvbmRzOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBjb25zdCB3YXJuaW5nVGltZSA9IHRoaXMuY3VycmVudENvbmZpZy53YXJuaW5nVGltZSB8fCAzMDtcbiAgICByZXR1cm4gc2Vjb25kcyA8PSB3YXJuaW5nVGltZSAmJiBzZWNvbmRzID4gMDtcbiAgfVxuXG4gIC8qKlxuICAgKiDliKTmlq3mmK/lkKbntKfmgKXnirbmgIHvvIjmnIDlkI4xMOenku+8iVxuICAgKi9cbiAgaXNVcmdlbnRTdGF0ZShzZWNvbmRzOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gc2Vjb25kcyA8PSAxMCAmJiBzZWNvbmRzID4gMDtcbiAgfVxuXG4gIC8qKlxuICAgKiDojrflj5blvZPliY3mqKHlvI9cbiAgICovXG4gIGdldEN1cnJlbnRNb2RlKCk6ICdmaXhlZCcgfCAnaWRsZScge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnRDb25maWcubW9kZTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09IOengeacieaWueazlSA9PT09PT09PT09PT09PT09PT09PVxuXG4gIHByaXZhdGUgaW5pdEZpeGVkTW9kZSgpOiB2b2lkIHtcbiAgICBjb25zdCBsb2dpblRpbWUgPSB0aGlzLmdldExvZ2luVGltZSgpO1xuICAgIGlmICghbG9naW5UaW1lKSB7XG4gICAgICB0aGlzLnNldExvZ2luVGltZShEYXRlLm5vdygpKTtcbiAgICAgIHRoaXMubGFzdEFjdGl2aXR5VGltZSA9IERhdGUubm93KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubGFzdEFjdGl2aXR5VGltZSA9IGxvZ2luVGltZTtcbiAgICB9XG4gICAgdGhpcy51cGRhdGVDb3VudGRvd25WYWx1ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0SWRsZU1vZGUoZW5hYmxlVHJhY2tpbmc6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmVuYWJsZUFjdGl2aXR5VHJhY2tpbmcgPSBlbmFibGVUcmFja2luZyB8fCB0cnVlO1xuXG4gICAgY29uc3QgbGFzdEFjdGl2aXR5ID0gdGhpcy5nZXRMYXN0QWN0aXZpdHlUaW1lKCk7XG4gICAgaWYgKCFsYXN0QWN0aXZpdHkpIHtcbiAgICAgIHRoaXMuc2V0TGFzdEFjdGl2aXR5VGltZShEYXRlLm5vdygpKTtcbiAgICAgIHRoaXMubGFzdEFjdGl2aXR5VGltZSA9IERhdGUubm93KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubGFzdEFjdGl2aXR5VGltZSA9IGxhc3RBY3Rpdml0eTtcbiAgICB9XG5cbiAgICB0aGlzLnJlZ2lzdGVyQWN0aXZpdHlMaXN0ZW5lcnMoKTtcbiAgICB0aGlzLnVwZGF0ZUNvdW50ZG93blZhbHVlKCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUNvdW50ZG93blZhbHVlKCk6IHZvaWQge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3QgZWxhcHNlZCA9IG5vdyAtIHRoaXMubGFzdEFjdGl2aXR5VGltZTtcbiAgICBjb25zdCByZW1haW5pbmcgPSBNYXRoLm1heCgwLCBNYXRoLmZsb29yKCh0aGlzLmN1cnJlbnRDb25maWcudGltZW91dCAqIDEwMDAgLSBlbGFwc2VkKSAvIDEwMDApKTtcbiAgICB0aGlzLmNvdW50ZG93blZhbHVlID0gcmVtYWluaW5nO1xuICAgIHRoaXMuY291bnRkb3duU3ViamVjdC5uZXh0KHRoaXMuY291bnRkb3duVmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVDb3VudGRvd24oKTogdm9pZCB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBlbGFwc2VkID0gbm93IC0gdGhpcy5sYXN0QWN0aXZpdHlUaW1lO1xuICAgIGNvbnN0IHJlbWFpbmluZyA9IE1hdGgubWF4KDAsIE1hdGguZmxvb3IoKHRoaXMuY3VycmVudENvbmZpZy50aW1lb3V0ICogMTAwMCAtIGVsYXBzZWQpIC8gMTAwMCkpO1xuXG4gICAgaWYgKHJlbWFpbmluZyAhPT0gdGhpcy5jb3VudGRvd25WYWx1ZSkge1xuICAgICAgdGhpcy5jb3VudGRvd25WYWx1ZSA9IHJlbWFpbmluZztcbiAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgIHRoaXMuY291bnRkb3duU3ViamVjdC5uZXh0KHRoaXMuY291bnRkb3duVmFsdWUpO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIOitpuWRiuWbnuiwg1xuICAgICAgY29uc3Qgd2FybmluZ1RpbWUgPSB0aGlzLmN1cnJlbnRDb25maWcud2FybmluZ1RpbWUgfHwgMzA7XG4gICAgICBpZiAocmVtYWluaW5nID09PSB3YXJuaW5nVGltZSAmJiAhdGhpcy53YXJuaW5nU2hvd24pIHtcbiAgICAgICAgdGhpcy53YXJuaW5nU2hvd24gPSB0cnVlO1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50Q29uZmlnLm9uV2FybmluZykge1xuICAgICAgICAgIHRoaXMuY3VycmVudENvbmZpZy5vbldhcm5pbmcocmVtYWluaW5nKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyDotoXml7blm57osINcbiAgICAgIGlmIChyZW1haW5pbmcgPD0gMCkge1xuICAgICAgICB0aGlzLnBlcmZvcm1BdXRvTG9nb3V0KCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBwZXJmb3JtQXV0b0xvZ291dCgpOiB2b2lkIHtcbiAgICB0aGlzLnN0b3BNb25pdG9yaW5nKCk7XG4gICAgdGhpcy5jbGVhckxvZ2luVGltZSgpO1xuXG4gICAgaWYgKHRoaXMuY3VycmVudENvbmZpZy5vblRpbWVvdXQpIHtcbiAgICAgIHRoaXMuY3VycmVudENvbmZpZy5vblRpbWVvdXQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8g6buY6K6k6KGM5Li677ya5a+86Iiq5Yiw55m75b2V6aG1XG4gICAgICAvLyBOb3RlOiBSb3V0ZXIgbmF2aWdhdGlvbiByZW1vdmVkIHRvIGF2b2lkIERJIGlzc3VlcyBpbiBBbmd1bGFyIDkgVkVcbiAgICAgIC8vIFVzZSBvblRpbWVvdXQgY2FsbGJhY2sgZm9yIGN1c3RvbSBuYXZpZ2F0aW9uXG4gICAgICBjb25zb2xlLndhcm4oJ0F1dG8gbG9nb3V0IHRpbWVvdXQgLSBpbXBsZW1lbnQgY3VzdG9tIG5hdmlnYXRpb24gdmlhIG9uVGltZW91dCBjYWxsYmFjaycpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVnaXN0ZXJBY3Rpdml0eUxpc3RlbmVycygpOiB2b2lkIHtcbiAgICBjb25zdCBldmVudHMgPSBbJ21vdXNlZG93bicsICdtb3VzZW1vdmUnLCAna2V5cHJlc3MnLCAnc2Nyb2xsJywgJ3RvdWNoc3RhcnQnLCAnY2xpY2snXTtcblxuICAgIGV2ZW50cy5mb3JFYWNoKChldmVudCkgPT4ge1xuICAgICAgY29uc3QgbGlzdGVuZXIgPSAoKSA9PiB0aGlzLnJlc2V0QWN0aXZpdHlUaW1lcigpO1xuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihldmVudCwgbGlzdGVuZXIsIHRydWUpO1xuICAgICAgdGhpcy5hY3Rpdml0eUxpc3RlbmVycy5wdXNoKHsgZXZlbnQsIGxpc3RlbmVyIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVBY3Rpdml0eUxpc3RlbmVycygpOiB2b2lkIHtcbiAgICB0aGlzLmFjdGl2aXR5TGlzdGVuZXJzLmZvckVhY2goKHsgZXZlbnQsIGxpc3RlbmVyIH0pID0+IHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnQsIGxpc3RlbmVyLCB0cnVlKTtcbiAgICB9KTtcbiAgICB0aGlzLmFjdGl2aXR5TGlzdGVuZXJzID0gW107XG4gIH1cblxuICBwcml2YXRlIHJlc2V0QWN0aXZpdHlUaW1lcigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jdXJyZW50Q29uZmlnLm1vZGUgPT09ICdpZGxlJykge1xuICAgICAgdGhpcy5sYXN0QWN0aXZpdHlUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgIHRoaXMuc2V0TGFzdEFjdGl2aXR5VGltZSh0aGlzLmxhc3RBY3Rpdml0eVRpbWUpO1xuICAgICAgdGhpcy51cGRhdGVDb3VudGRvd25WYWx1ZSgpO1xuICAgICAgdGhpcy53YXJuaW5nU2hvd24gPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGlzTWF4RXh0ZW5kUmVhY2hlZCgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5jdXJyZW50Q29uZmlnLm1heEV4dGVuZFRpbWVzID09PSAtMSB8fCB0aGlzLmN1cnJlbnRDb25maWcubWF4RXh0ZW5kVGltZXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCB1c2VkQ291bnQgPSB0aGlzLmdldEV4dGVuZENvdW50KCk7XG4gICAgcmV0dXJuIHVzZWRDb3VudCA+PSB0aGlzLmN1cnJlbnRDb25maWcubWF4RXh0ZW5kVGltZXM7XG4gIH1cblxuICBwcml2YXRlIGdldEV4dGVuZENvdW50KCk6IG51bWJlciB7XG4gICAgY29uc3QgY291bnRTdHIgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLkVYVEVORF9DT1VOVF9LRVkpO1xuICAgIHJldHVybiBjb3VudFN0ciA/IHBhcnNlSW50KGNvdW50U3RyLCAxMCkgOiAwO1xuICB9XG5cbiAgcHJpdmF0ZSBpbmNyZW1lbnRFeHRlbmRDb3VudCgpOiB2b2lkIHtcbiAgICBjb25zdCBjdXJyZW50Q291bnQgPSB0aGlzLmdldEV4dGVuZENvdW50KCk7XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5FWFRFTkRfQ09VTlRfS0VZLCAoY3VycmVudENvdW50ICsgMSkudG9TdHJpbmcoKSk7XG4gIH1cblxuICBwcml2YXRlIHJlc2V0RXh0ZW5kQ291bnQoKTogdm9pZCB7XG4gICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5FWFRFTkRfQ09VTlRfS0VZKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TG9naW5UaW1lKCk6IG51bWJlciB8IG51bGwge1xuICAgIGNvbnN0IHRpbWVTdHIgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLkxPR0lOX1RJTUVfS0VZKTtcbiAgICByZXR1cm4gdGltZVN0ciA/IHBhcnNlSW50KHRpbWVTdHIsIDEwKSA6IG51bGw7XG4gIH1cblxuICBwcml2YXRlIHNldExvZ2luVGltZSh0aW1lOiBudW1iZXIpOiB2b2lkIHtcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLkxPR0lOX1RJTUVfS0VZLCB0aW1lLnRvU3RyaW5nKCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRMYXN0QWN0aXZpdHlUaW1lKCk6IG51bWJlciB8IG51bGwge1xuICAgIGNvbnN0IHRpbWVTdHIgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLkxBU1RfQUNUSVZJVFlfS0VZKTtcbiAgICByZXR1cm4gdGltZVN0ciA/IHBhcnNlSW50KHRpbWVTdHIsIDEwKSA6IG51bGw7XG4gIH1cblxuICBwcml2YXRlIHNldExhc3RBY3Rpdml0eVRpbWUodGltZTogbnVtYmVyKTogdm9pZCB7XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5MQVNUX0FDVElWSVRZX0tFWSwgdGltZS50b1N0cmluZygpKTtcbiAgfVxuXG4gIHByaXZhdGUgc2F2ZVBhdXNlU3RhdGUoKTogdm9pZCB7XG4gICAgY29uc3Qgc3RhdGUgPSB7XG4gICAgICBpc1BhdXNlZDogdHJ1ZSxcbiAgICAgIHBhdXNlU3RhcnRUaW1lOiB0aGlzLnBhdXNlU3RhcnRUaW1lLFxuICAgICAgcGF1c2VkUmVtYWluaW5nVGltZTogdGhpcy5wYXVzZWRSZW1haW5pbmdUaW1lLFxuICAgICAgbW9kZTogdGhpcy5jdXJyZW50Q29uZmlnLm1vZGUsXG4gICAgICBsYXN0QWN0aXZpdHlUaW1lOiB0aGlzLmxhc3RBY3Rpdml0eVRpbWVcbiAgICB9O1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuUEFVU0VfU1RBVEVfS0VZLCBKU09OLnN0cmluZ2lmeShzdGF0ZSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhclBhdXNlU3RhdGUoKTogdm9pZCB7XG4gICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5QQVVTRV9TVEFURV9LRVkpO1xuICB9XG5cbiAgcHJpdmF0ZSByZXN0b3JlUGF1c2VTdGF0ZSgpOiB2b2lkIHtcbiAgICBjb25zdCBzdGF0ZVN0ciA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuUEFVU0VfU1RBVEVfS0VZKTtcbiAgICBpZiAoIXN0YXRlU3RyKSByZXR1cm47XG5cbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3RhdGUgPSBKU09OLnBhcnNlKHN0YXRlU3RyKTtcbiAgICAgIGlmIChzdGF0ZS5pc1BhdXNlZCkge1xuICAgICAgICB0aGlzLmlzUGF1c2VkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5wYXVzZVN0YXJ0VGltZSA9IHN0YXRlLnBhdXNlU3RhcnRUaW1lO1xuICAgICAgICB0aGlzLnBhdXNlZFJlbWFpbmluZ1RpbWUgPSBzdGF0ZS5wYXVzZWRSZW1haW5pbmdUaW1lO1xuICAgICAgICB0aGlzLmxhc3RBY3Rpdml0eVRpbWUgPSBzdGF0ZS5sYXN0QWN0aXZpdHlUaW1lO1xuICAgICAgICB0aGlzLmN1cnJlbnRDb25maWcubW9kZSA9IHN0YXRlLm1vZGU7XG5cbiAgICAgICAgaWYgKHRoaXMudGltZXJTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICB0aGlzLnRpbWVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgdGhpcy50aW1lclN1YnNjcmlwdGlvbiA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZW1vdmVBY3Rpdml0eUxpc3RlbmVycygpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ+aBouWkjeaaguWBnOeKtuaAgeWksei0pTonLCBlKTtcbiAgICAgIHRoaXMuY2xlYXJQYXVzZVN0YXRlKCk7XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 默认配置
|
|
3
|
+
*/
|
|
4
|
+
export const DEFAULT_AUTO_LOGOUT_CONFIG = {
|
|
5
|
+
mode: 'fixed',
|
|
6
|
+
timeout: 300,
|
|
7
|
+
warningTime: 30,
|
|
8
|
+
maxExtendTimes: -1,
|
|
9
|
+
};
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0by1sb2dvdXQtY29uZmlnLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC1hdXRvLWxvZ291dC8iLCJzb3VyY2VzIjpbImxpYi9tb2RlbHMvYXV0by1sb2dvdXQtY29uZmlnLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFtREE7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBcUI7SUFDMUQsSUFBSSxFQUFFLE9BQU87SUFDYixPQUFPLEVBQUUsR0FBRztJQUNaLFdBQVcsRUFBRSxFQUFFO0lBQ2YsY0FBYyxFQUFFLENBQUMsQ0FBQztDQUNuQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiDoh6rliqjnmbvlh7rphY3nva7mjqXlj6NcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBdXRvTG9nb3V0Q29uZmlnIHtcbiAgLyoqXG4gICAqIOaooeW8j++8mmZpeGVkPeWbuuWumuaXtumXtCwgaWRsZT3nqbrpl7LotoXml7ZcbiAgICovXG4gIG1vZGU6ICdmaXhlZCcgfCAnaWRsZSc7XG5cbiAgLyoqXG4gICAqIOi2heaXtuaXtumXtO+8iOenku+8iVxuICAgKi9cbiAgdGltZW91dDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiDorablkYrml7bpl7TvvIjnp5LvvInvvIzpu5jorqQzMFxuICAgKi9cbiAgd2FybmluZ1RpbWU/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIOacgOWkp+W7tumVv+asoeaVsO+8jC0xPeaXoOmZkOWItu+8jDA95LiN5YWB6K6477yMPjA95YW35L2T5qyh5pWwXG4gICAqL1xuICBtYXhFeHRlbmRUaW1lcz86IG51bWJlcjtcblxuICAvKipcbiAgICog6K2m5ZGK5Zue6LCD5Ye95pWw77yI5pu/5LujVG9hc3TvvIlcbiAgICogQHBhcmFtIHNlY29uZHMg5Ymp5L2Z56eS5pWwXG4gICAqL1xuICBvbldhcm5pbmc/OiAoc2Vjb25kczogbnVtYmVyKSA9PiB2b2lkO1xuXG4gIC8qKlxuICAgKiDotoXml7blm57osIPlh73mlbDvvIjmiafooYznmbvlh7rmk43kvZzvvIlcbiAgICovXG4gIG9uVGltZW91dD86ICgpID0+IHZvaWQ7XG5cbiAgLyoqXG4gICAqIOW7tumVv+S8muivneaIkOWKn+Wbnuiwg1xuICAgKi9cbiAgb25FeHRlbmRlZD86IChzZWNvbmRzOiBudW1iZXIpID0+IHZvaWQ7XG5cbiAgLyoqXG4gICAqIOaaguWBnOWbnuiwg1xuICAgKi9cbiAgb25QYXVzZWQ/OiAoKSA9PiB2b2lkO1xuXG4gIC8qKlxuICAgKiDmgaLlpI3lm57osINcbiAgICovXG4gIG9uUmVzdW1lZD86ICgpID0+IHZvaWQ7XG59XG5cbi8qKlxuICog6buY6K6k6YWN572uXG4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX0FVVE9fTE9HT1VUX0NPTkZJRzogQXV0b0xvZ291dENvbmZpZyA9IHtcbiAgbW9kZTogJ2ZpeGVkJyxcbiAgdGltZW91dDogMzAwLCAvLyA15YiG6ZKfXG4gIHdhcm5pbmdUaW1lOiAzMCxcbiAgbWF4RXh0ZW5kVGltZXM6IC0xLFxufTtcbiJdfQ==
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { InjectionToken } from '@angular/core';
|
|
2
|
+
/**
|
|
3
|
+
* InjectionToken for auto logout configuration
|
|
4
|
+
* Extracted to a separate file to avoid Angular 9 Ivy compilation scope issues
|
|
5
|
+
*/
|
|
6
|
+
export const AUTO_LOGOUT_CONFIG = new InjectionToken('AutoLogoutConfig');
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0by1sb2dvdXQtY29uZmlnLnRva2VuLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmd4LWF1dG8tbG9nb3V0LyIsInNvdXJjZXMiOlsibGliL21vZGVscy9hdXRvLWxvZ291dC1jb25maWcudG9rZW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUcvQzs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLGNBQWMsQ0FBbUIsa0JBQWtCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBdXRvTG9nb3V0Q29uZmlnIH0gZnJvbSAnLi9hdXRvLWxvZ291dC1jb25maWcuaW50ZXJmYWNlJztcblxuLyoqXG4gKiBJbmplY3Rpb25Ub2tlbiBmb3IgYXV0byBsb2dvdXQgY29uZmlndXJhdGlvblxuICogRXh0cmFjdGVkIHRvIGEgc2VwYXJhdGUgZmlsZSB0byBhdm9pZCBBbmd1bGFyIDkgSXZ5IGNvbXBpbGF0aW9uIHNjb3BlIGlzc3Vlc1xuICovXG5leHBvcnQgY29uc3QgQVVUT19MT0dPVVRfQ09ORklHID0gbmV3IEluamVjdGlvblRva2VuPEF1dG9Mb2dvdXRDb25maWc+KCdBdXRvTG9nb3V0Q29uZmlnJyk7XG4iXX0=
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { AUTO_LOGOUT_CONFIG } from './models/auto-logout-config.token';
|
|
2
|
+
/**
|
|
3
|
+
* 提供自动登出配置(Angular 15+ Standalone)
|
|
4
|
+
*/
|
|
5
|
+
export function provideAutoLogout(config) {
|
|
6
|
+
return {
|
|
7
|
+
provide: AUTO_LOGOUT_CONFIG,
|
|
8
|
+
useValue: config
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZS1hdXRvLWxvZ291dC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC1hdXRvLWxvZ291dC8iLCJzb3VyY2VzIjpbImxpYi9wcm92aWRlLWF1dG8tbG9nb3V0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBR3ZFOztHQUVHO0FBQ0gsTUFBTSxVQUFVLGlCQUFpQixDQUFDLE1BQXdCO0lBQ3hELE9BQU87UUFDTCxPQUFPLEVBQUUsa0JBQWtCO1FBQzNCLFFBQVEsRUFBRSxNQUFNO0tBQ2pCLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUHJvdmlkZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFVVE9fTE9HT1VUX0NPTkZJRyB9IGZyb20gJy4vbW9kZWxzL2F1dG8tbG9nb3V0LWNvbmZpZy50b2tlbic7XG5pbXBvcnQgeyBBdXRvTG9nb3V0Q29uZmlnIH0gZnJvbSAnLi9tb2RlbHMvYXV0by1sb2dvdXQtY29uZmlnLmludGVyZmFjZSc7XG5cbi8qKlxuICog5o+Q5L6b6Ieq5Yqo55m75Ye66YWN572u77yIQW5ndWxhciAxNSsgU3RhbmRhbG9uZe+8iVxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZUF1dG9Mb2dvdXQoY29uZmlnOiBBdXRvTG9nb3V0Q29uZmlnKTogUHJvdmlkZXIge1xuICByZXR1cm4ge1xuICAgIHByb3ZpZGU6IEFVVE9fTE9HT1VUX0NPTkZJRyxcbiAgICB1c2VWYWx1ZTogY29uZmlnXG4gIH07XG59XG4iXX0=
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './public-api';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWF1dG8tbG9nb3V0LmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmd4LWF1dG8tbG9nb3V0LyIsInNvdXJjZXMiOlsibmd4LWF1dG8tbG9nb3V0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxjQUFjLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vcHVibGljLWFwaSc7XG4iXX0=
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Public API Surface of auto-logout
|
|
3
|
+
*/
|
|
4
|
+
export { DEFAULT_AUTO_LOGOUT_CONFIG } from './lib/models/auto-logout-config.interface';
|
|
5
|
+
export { AUTO_LOGOUT_CONFIG } from './lib/models/auto-logout-config.token';
|
|
6
|
+
export { AutoLogoutService } from './lib/auto-logout.service';
|
|
7
|
+
export { AutoLogoutModule } from './lib/auto-logout.module';
|
|
8
|
+
export { AutoLogoutComponent } from './lib/auto-logout.component';
|
|
9
|
+
export { provideAutoLogout } from './lib/provide-auto-logout';
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC1hdXRvLWxvZ291dC8iLCJzb3VyY2VzIjpbInB1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxPQUFPLEVBQW9CLDBCQUEwQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDekcsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDNUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMkJBQTJCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogUHVibGljIEFQSSBTdXJmYWNlIG9mIGF1dG8tbG9nb3V0XG4gKi9cblxuZXhwb3J0IHsgQXV0b0xvZ291dENvbmZpZywgREVGQVVMVF9BVVRPX0xPR09VVF9DT05GSUcgfSBmcm9tICcuL2xpYi9tb2RlbHMvYXV0by1sb2dvdXQtY29uZmlnLmludGVyZmFjZSc7XG5leHBvcnQgeyBBVVRPX0xPR09VVF9DT05GSUcgfSBmcm9tICcuL2xpYi9tb2RlbHMvYXV0by1sb2dvdXQtY29uZmlnLnRva2VuJztcbmV4cG9ydCB7IEF1dG9Mb2dvdXRTZXJ2aWNlIH0gZnJvbSAnLi9saWIvYXV0by1sb2dvdXQuc2VydmljZSc7XG5leHBvcnQgeyBBdXRvTG9nb3V0TW9kdWxlIH0gZnJvbSAnLi9saWIvYXV0by1sb2dvdXQubW9kdWxlJztcbmV4cG9ydCB7IEF1dG9Mb2dvdXRDb21wb25lbnQgfSBmcm9tICcuL2xpYi9hdXRvLWxvZ291dC5jb21wb25lbnQnO1xuZXhwb3J0IHsgcHJvdmlkZUF1dG9Mb2dvdXQgfSBmcm9tICcuL2xpYi9wcm92aWRlLWF1dG8tbG9nb3V0JztcbiJdfQ==
|