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.
Files changed (37) hide show
  1. package/README.md +247 -0
  2. package/dist/README.md +247 -0
  3. package/dist/bundles/ngx-auto-logout.umd.js +864 -0
  4. package/dist/bundles/ngx-auto-logout.umd.js.map +1 -0
  5. package/dist/bundles/ngx-auto-logout.umd.min.js +16 -0
  6. package/dist/bundles/ngx-auto-logout.umd.min.js.map +1 -0
  7. package/dist/esm2015/lib/auto-logout.component.js +351 -0
  8. package/dist/esm2015/lib/auto-logout.module.js +26 -0
  9. package/dist/esm2015/lib/auto-logout.service.js +384 -0
  10. package/dist/esm2015/lib/models/auto-logout-config.interface.js +10 -0
  11. package/dist/esm2015/lib/models/auto-logout-config.token.js +7 -0
  12. package/dist/esm2015/lib/provide-auto-logout.js +11 -0
  13. package/dist/esm2015/ngx-auto-logout.js +5 -0
  14. package/dist/esm2015/public-api.js +10 -0
  15. package/dist/esm5/lib/auto-logout.component.js +196 -0
  16. package/dist/esm5/lib/auto-logout.module.js +30 -0
  17. package/dist/esm5/lib/auto-logout.service.js +391 -0
  18. package/dist/esm5/lib/models/auto-logout-config.interface.js +10 -0
  19. package/dist/esm5/lib/models/auto-logout-config.token.js +7 -0
  20. package/dist/esm5/lib/provide-auto-logout.js +11 -0
  21. package/dist/esm5/ngx-auto-logout.js +5 -0
  22. package/dist/esm5/public-api.js +10 -0
  23. package/dist/fesm2015/ngx-auto-logout.js +787 -0
  24. package/dist/fesm2015/ngx-auto-logout.js.map +1 -0
  25. package/dist/fesm5/ngx-auto-logout.js +643 -0
  26. package/dist/fesm5/ngx-auto-logout.js.map +1 -0
  27. package/dist/lib/auto-logout.component.d.ts +81 -0
  28. package/dist/lib/auto-logout.module.d.ts +8 -0
  29. package/dist/lib/auto-logout.service.d.ts +108 -0
  30. package/dist/lib/models/auto-logout-config.interface.d.ts +46 -0
  31. package/dist/lib/models/auto-logout-config.token.d.ts +7 -0
  32. package/dist/lib/provide-auto-logout.d.ts +6 -0
  33. package/dist/ngx-auto-logout.d.ts +4 -0
  34. package/dist/ngx-auto-logout.metadata.json +1 -0
  35. package/dist/package.json +41 -0
  36. package/dist/public-api.d.ts +6 -0
  37. package/package.json +53 -0
@@ -0,0 +1,391 @@
1
+ import { __assign, __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
+ var AutoLogoutService = /** @class */ (function () {
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
+ function AutoLogoutService(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 = __assign({}, DEFAULT_AUTO_LOGOUT_CONFIG);
39
+ this.countdownValue = Math.floor(this.currentConfig.timeout);
40
+ this.countdownSubject = new BehaviorSubject(this.countdownValue);
41
+ }
42
+ AutoLogoutService.prototype.getCountdown = function () {
43
+ return this.countdownSubject.asObservable();
44
+ };
45
+ /**
46
+ * 启动自动登出监控
47
+ */
48
+ AutoLogoutService.prototype.startMonitoring = function (config, enableTracking) {
49
+ var _this = this;
50
+ if (enableTracking === void 0) { enableTracking = false; }
51
+ this.stopMonitoring();
52
+ if (config) {
53
+ this.currentConfig = __assign(__assign({}, this.currentConfig), config);
54
+ }
55
+ // 恢复暂停状态
56
+ this.restorePauseState();
57
+ if (this.isPaused) {
58
+ return;
59
+ }
60
+ // 根据模式初始化
61
+ if (this.currentConfig.mode === 'fixed') {
62
+ this.initFixedMode();
63
+ }
64
+ else {
65
+ this.initIdleMode(enableTracking);
66
+ }
67
+ this.warningShown = false;
68
+ // 启动定时器
69
+ this.ngZone.runOutsideAngular(function () {
70
+ _this.timerSubscription = interval(1000).subscribe(function () {
71
+ _this.updateCountdown();
72
+ });
73
+ });
74
+ };
75
+ /**
76
+ * 停止监控
77
+ */
78
+ AutoLogoutService.prototype.stopMonitoring = function () {
79
+ if (this.timerSubscription) {
80
+ this.timerSubscription.unsubscribe();
81
+ this.timerSubscription = null;
82
+ }
83
+ this.removeActivityListeners();
84
+ };
85
+ /**
86
+ * 清除登录时间
87
+ */
88
+ AutoLogoutService.prototype.clearLoginTime = function () {
89
+ localStorage.removeItem(this.LOGIN_TIME_KEY);
90
+ localStorage.removeItem(this.LAST_ACTIVITY_KEY);
91
+ this.resetExtendCount();
92
+ this.clearPauseState();
93
+ };
94
+ /**
95
+ * 延长会话
96
+ */
97
+ AutoLogoutService.prototype.extendSession = function (extendSeconds) {
98
+ if (extendSeconds === void 0) { extendSeconds = 1800; }
99
+ if (this.isMaxExtendReached()) {
100
+ console.warn('已达到最大延长次数');
101
+ return false;
102
+ }
103
+ if (this.currentConfig.mode === 'fixed') {
104
+ this.lastActivityTime -= extendSeconds * 1000;
105
+ }
106
+ else {
107
+ this.resetActivityTimer();
108
+ }
109
+ this.incrementExtendCount();
110
+ if (this.currentConfig.onExtended) {
111
+ this.currentConfig.onExtended(extendSeconds);
112
+ }
113
+ return true;
114
+ };
115
+ /**
116
+ * 检查是否可以延长
117
+ */
118
+ AutoLogoutService.prototype.canExtendSession = function () {
119
+ return !this.isMaxExtendReached() && !this.isPaused;
120
+ };
121
+ /**
122
+ * 获取剩余可延长次数
123
+ */
124
+ AutoLogoutService.prototype.getRemainingExtendTimes = function () {
125
+ if (this.currentConfig.maxExtendTimes === -1 || this.currentConfig.maxExtendTimes === undefined) {
126
+ return -1;
127
+ }
128
+ var usedCount = this.getExtendCount();
129
+ return Math.max(0, this.currentConfig.maxExtendTimes - usedCount);
130
+ };
131
+ /**
132
+ * 获取最后操作时间显示
133
+ */
134
+ AutoLogoutService.prototype.getLastActivityDisplay = function () {
135
+ if (this.currentConfig.mode !== 'idle') {
136
+ return '';
137
+ }
138
+ var lastActivity = this.getLastActivityTime();
139
+ if (!lastActivity) {
140
+ return '';
141
+ }
142
+ var minutesAgo = Math.floor((Date.now() - lastActivity) / 60000);
143
+ if (minutesAgo < 1) {
144
+ return '刚刚操作';
145
+ }
146
+ return minutesAgo + "\u5206\u949F\u524D\u64CD\u4F5C";
147
+ };
148
+ /**
149
+ * 暂停
150
+ */
151
+ AutoLogoutService.prototype.pause = function () {
152
+ if (this.isPaused)
153
+ return;
154
+ this.isPaused = true;
155
+ this.pauseStartTime = Date.now();
156
+ this.pausedRemainingTime = this.countdownValue;
157
+ this.stopMonitoring();
158
+ this.savePauseState();
159
+ if (this.currentConfig.onPaused) {
160
+ this.currentConfig.onPaused();
161
+ }
162
+ };
163
+ /**
164
+ * 恢复
165
+ */
166
+ AutoLogoutService.prototype.resume = function () {
167
+ if (!this.isPaused)
168
+ return;
169
+ var pauseDuration = Date.now() - this.pauseStartTime;
170
+ if (this.currentConfig.mode === 'fixed') {
171
+ this.lastActivityTime += pauseDuration;
172
+ }
173
+ else {
174
+ this.lastActivityTime += pauseDuration;
175
+ this.setLastActivityTime(this.lastActivityTime);
176
+ }
177
+ this.isPaused = false;
178
+ this.pauseStartTime = 0;
179
+ this.pausedRemainingTime = 0;
180
+ this.clearPauseState();
181
+ this.startMonitoring(this.currentConfig, this.enableActivityTracking);
182
+ if (this.currentConfig.onResumed) {
183
+ this.currentConfig.onResumed();
184
+ }
185
+ };
186
+ /**
187
+ * 检查是否暂停
188
+ */
189
+ AutoLogoutService.prototype.isAutoLogoutPaused = function () {
190
+ return this.isPaused;
191
+ };
192
+ /**
193
+ * 格式化倒计时
194
+ */
195
+ AutoLogoutService.prototype.formatCountdown = function (seconds) {
196
+ var mins = Math.floor(seconds / 60);
197
+ var secs = seconds % 60;
198
+ return mins.toString().padStart(2, '0') + ":" + secs.toString().padStart(2, '0');
199
+ };
200
+ /**
201
+ * 判断是否警告状态
202
+ */
203
+ AutoLogoutService.prototype.isWarningState = function (seconds) {
204
+ var warningTime = this.currentConfig.warningTime || 30;
205
+ return seconds <= warningTime && seconds > 0;
206
+ };
207
+ /**
208
+ * 判断是否紧急状态(最后10秒)
209
+ */
210
+ AutoLogoutService.prototype.isUrgentState = function (seconds) {
211
+ return seconds <= 10 && seconds > 0;
212
+ };
213
+ /**
214
+ * 获取当前模式
215
+ */
216
+ AutoLogoutService.prototype.getCurrentMode = function () {
217
+ return this.currentConfig.mode;
218
+ };
219
+ // ==================== 私有方法 ====================
220
+ AutoLogoutService.prototype.initFixedMode = function () {
221
+ var loginTime = this.getLoginTime();
222
+ if (!loginTime) {
223
+ this.setLoginTime(Date.now());
224
+ this.lastActivityTime = Date.now();
225
+ }
226
+ else {
227
+ this.lastActivityTime = loginTime;
228
+ }
229
+ this.updateCountdownValue();
230
+ };
231
+ AutoLogoutService.prototype.initIdleMode = function (enableTracking) {
232
+ this.enableActivityTracking = enableTracking || true;
233
+ var lastActivity = this.getLastActivityTime();
234
+ if (!lastActivity) {
235
+ this.setLastActivityTime(Date.now());
236
+ this.lastActivityTime = Date.now();
237
+ }
238
+ else {
239
+ this.lastActivityTime = lastActivity;
240
+ }
241
+ this.registerActivityListeners();
242
+ this.updateCountdownValue();
243
+ };
244
+ AutoLogoutService.prototype.updateCountdownValue = function () {
245
+ var now = Date.now();
246
+ var elapsed = now - this.lastActivityTime;
247
+ var remaining = Math.max(0, Math.floor((this.currentConfig.timeout * 1000 - elapsed) / 1000));
248
+ this.countdownValue = remaining;
249
+ this.countdownSubject.next(this.countdownValue);
250
+ };
251
+ AutoLogoutService.prototype.updateCountdown = function () {
252
+ var _this = this;
253
+ var now = Date.now();
254
+ var elapsed = now - this.lastActivityTime;
255
+ var remaining = Math.max(0, Math.floor((this.currentConfig.timeout * 1000 - elapsed) / 1000));
256
+ if (remaining !== this.countdownValue) {
257
+ this.countdownValue = remaining;
258
+ this.ngZone.run(function () {
259
+ _this.countdownSubject.next(_this.countdownValue);
260
+ });
261
+ // 警告回调
262
+ var warningTime = this.currentConfig.warningTime || 30;
263
+ if (remaining === warningTime && !this.warningShown) {
264
+ this.warningShown = true;
265
+ if (this.currentConfig.onWarning) {
266
+ this.currentConfig.onWarning(remaining);
267
+ }
268
+ }
269
+ // 超时回调
270
+ if (remaining <= 0) {
271
+ this.performAutoLogout();
272
+ }
273
+ }
274
+ };
275
+ AutoLogoutService.prototype.performAutoLogout = function () {
276
+ this.stopMonitoring();
277
+ this.clearLoginTime();
278
+ if (this.currentConfig.onTimeout) {
279
+ this.currentConfig.onTimeout();
280
+ }
281
+ else {
282
+ // 默认行为:导航到登录页
283
+ // Note: Router navigation removed to avoid DI issues in Angular 9 VE
284
+ // Use onTimeout callback for custom navigation
285
+ console.warn('Auto logout timeout - implement custom navigation via onTimeout callback');
286
+ }
287
+ };
288
+ AutoLogoutService.prototype.registerActivityListeners = function () {
289
+ var _this = this;
290
+ var events = ['mousedown', 'mousemove', 'keypress', 'scroll', 'touchstart', 'click'];
291
+ events.forEach(function (event) {
292
+ var listener = function () { return _this.resetActivityTimer(); };
293
+ document.addEventListener(event, listener, true);
294
+ _this.activityListeners.push({ event: event, listener: listener });
295
+ });
296
+ };
297
+ AutoLogoutService.prototype.removeActivityListeners = function () {
298
+ this.activityListeners.forEach(function (_a) {
299
+ var event = _a.event, listener = _a.listener;
300
+ document.removeEventListener(event, listener, true);
301
+ });
302
+ this.activityListeners = [];
303
+ };
304
+ AutoLogoutService.prototype.resetActivityTimer = function () {
305
+ if (this.currentConfig.mode === 'idle') {
306
+ this.lastActivityTime = Date.now();
307
+ this.setLastActivityTime(this.lastActivityTime);
308
+ this.updateCountdownValue();
309
+ this.warningShown = false;
310
+ }
311
+ };
312
+ AutoLogoutService.prototype.isMaxExtendReached = function () {
313
+ if (this.currentConfig.maxExtendTimes === -1 || this.currentConfig.maxExtendTimes === undefined) {
314
+ return false;
315
+ }
316
+ var usedCount = this.getExtendCount();
317
+ return usedCount >= this.currentConfig.maxExtendTimes;
318
+ };
319
+ AutoLogoutService.prototype.getExtendCount = function () {
320
+ var countStr = localStorage.getItem(this.EXTEND_COUNT_KEY);
321
+ return countStr ? parseInt(countStr, 10) : 0;
322
+ };
323
+ AutoLogoutService.prototype.incrementExtendCount = function () {
324
+ var currentCount = this.getExtendCount();
325
+ localStorage.setItem(this.EXTEND_COUNT_KEY, (currentCount + 1).toString());
326
+ };
327
+ AutoLogoutService.prototype.resetExtendCount = function () {
328
+ localStorage.removeItem(this.EXTEND_COUNT_KEY);
329
+ };
330
+ AutoLogoutService.prototype.getLoginTime = function () {
331
+ var timeStr = localStorage.getItem(this.LOGIN_TIME_KEY);
332
+ return timeStr ? parseInt(timeStr, 10) : null;
333
+ };
334
+ AutoLogoutService.prototype.setLoginTime = function (time) {
335
+ localStorage.setItem(this.LOGIN_TIME_KEY, time.toString());
336
+ };
337
+ AutoLogoutService.prototype.getLastActivityTime = function () {
338
+ var timeStr = localStorage.getItem(this.LAST_ACTIVITY_KEY);
339
+ return timeStr ? parseInt(timeStr, 10) : null;
340
+ };
341
+ AutoLogoutService.prototype.setLastActivityTime = function (time) {
342
+ localStorage.setItem(this.LAST_ACTIVITY_KEY, time.toString());
343
+ };
344
+ AutoLogoutService.prototype.savePauseState = function () {
345
+ var state = {
346
+ isPaused: true,
347
+ pauseStartTime: this.pauseStartTime,
348
+ pausedRemainingTime: this.pausedRemainingTime,
349
+ mode: this.currentConfig.mode,
350
+ lastActivityTime: this.lastActivityTime
351
+ };
352
+ localStorage.setItem(this.PAUSE_STATE_KEY, JSON.stringify(state));
353
+ };
354
+ AutoLogoutService.prototype.clearPauseState = function () {
355
+ localStorage.removeItem(this.PAUSE_STATE_KEY);
356
+ };
357
+ AutoLogoutService.prototype.restorePauseState = function () {
358
+ var stateStr = localStorage.getItem(this.PAUSE_STATE_KEY);
359
+ if (!stateStr)
360
+ return;
361
+ try {
362
+ var state = JSON.parse(stateStr);
363
+ if (state.isPaused) {
364
+ this.isPaused = true;
365
+ this.pauseStartTime = state.pauseStartTime;
366
+ this.pausedRemainingTime = state.pausedRemainingTime;
367
+ this.lastActivityTime = state.lastActivityTime;
368
+ this.currentConfig.mode = state.mode;
369
+ if (this.timerSubscription) {
370
+ this.timerSubscription.unsubscribe();
371
+ this.timerSubscription = null;
372
+ }
373
+ this.removeActivityListeners();
374
+ }
375
+ }
376
+ catch (e) {
377
+ console.error('恢复暂停状态失败:', e);
378
+ this.clearPauseState();
379
+ }
380
+ };
381
+ AutoLogoutService.ctorParameters = function () { return [
382
+ { type: NgZone }
383
+ ]; };
384
+ AutoLogoutService.ɵprov = i0.ɵɵdefineInjectable({ factory: function AutoLogoutService_Factory() { return new AutoLogoutService(i0.ɵɵinject(i0.NgZone)); }, token: AutoLogoutService, providedIn: "root" });
385
+ AutoLogoutService = __decorate([
386
+ Injectable({ providedIn: 'root' })
387
+ ], AutoLogoutService);
388
+ return AutoLogoutService;
389
+ }());
390
+ export { AutoLogoutService };
391
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0by1sb2dvdXQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC1hdXRvLWxvZ291dC8iLCJzb3VyY2VzIjpbImxpYi9hdXRvLWxvZ291dC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZUFBZSxFQUFjLFFBQVEsRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDM0UsT0FBTyxFQUFvQiwwQkFBMEIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDOztBQUVyRzs7O0dBR0c7QUFFSDtJQTRCRTs7OztPQUlHO0lBQ0gsMkJBQW9CLE1BQWM7UUFBZCxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBN0JsQyxXQUFXO1FBQ0gsd0JBQW1CLEdBQUcsS0FBSyxDQUFDO1FBRXBDLGtCQUFrQjtRQUNELG1CQUFjLEdBQUcsc0JBQXNCLENBQUM7UUFDeEMsc0JBQWlCLEdBQUcseUJBQXlCLENBQUM7UUFDOUMscUJBQWdCLEdBQUcsd0JBQXdCLENBQUM7UUFDNUMsb0JBQWUsR0FBRyx1QkFBdUIsQ0FBQztRQUVuRCxxQkFBZ0IsR0FBVyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDdEMsbUJBQWMsR0FBVyxDQUFDLENBQUM7UUFDM0IscUJBQWdCLEdBQTRCLElBQUksZUFBZSxDQUFTLENBQUMsQ0FBQyxDQUFDO1FBQzNFLHNCQUFpQixHQUF3QixJQUFJLENBQUM7UUFDOUMsc0JBQWlCLEdBQVUsRUFBRSxDQUFDO1FBQzlCLGlCQUFZLEdBQVksS0FBSyxDQUFDO1FBRXRDLFdBQVc7UUFDSCwyQkFBc0IsR0FBWSxLQUFLLENBQUM7UUFFaEQsT0FBTztRQUNDLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFDMUIsbUJBQWMsR0FBVyxDQUFDLENBQUM7UUFDM0Isd0JBQW1CLEdBQVcsQ0FBQyxDQUFDO1FBUXRDLDhEQUE4RDtRQUM5RCxJQUFJLENBQUMs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Y2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBOZ1pvbmUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgaW50ZXJ2YWwsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQXV0b0xvZ291dENvbmZpZywgREVGQVVMVF9BVVRPX0xPR09VVF9DT05GSUcgfSBmcm9tICcuL21vZGVscy9hdXRvLWxvZ291dC1jb25maWcuaW50ZXJmYWNlJztcblxuLyoqXG4gKiBBdXRvIGxvZ291dCBzZXJ2aWNlXG4gKiBBbmd1bGFyIDkgY29tcGF0aWJsZTogdXNlIHByb3ZpZGVkSW46ICdyb290JyAob2ZmaWNpYWwgcGF0dGVybilcbiAqL1xuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBBdXRvTG9nb3V0U2VydmljZSB7XG4gIC8vIOW9k+WJjemFjee9rlxuICBwcml2YXRlIGN1cnJlbnRDb25maWc6IEF1dG9Mb2dvdXRDb25maWc7XG5cbiAgLy8g6YWN572u5piv5ZCm5bey5Yid5aeL5YyWXG4gIHByaXZhdGUgaXNDb25maWdJbml0aWFsaXplZCA9IGZhbHNlO1xuXG4gIC8vIGxvY2FsU3RvcmFnZSDplK7lkI1cbiAgcHJpdmF0ZSByZWFkb25seSBMT0dJTl9USU1FX0tFWSA9ICdhdXRvTG9nb3V0X2xvZ2luVGltZSc7XG4gIHByaXZhdGUgcmVhZG9ubHkgTEFTVF9BQ1RJVklUWV9LRVkgPSAnYXV0b0xvZ291dF9sYXN0QWN0aXZpdHknO1xuICBwcml2YXRlIHJlYWRvbmx5IEVYVEVORF9DT1VOVF9LRVkgPSAnYXV0b0xvZ291dF9leHRlbmRDb3VudCc7XG4gIHByaXZhdGUgcmVhZG9ubHkgUEFVU0VfU1RBVEVfS0VZID0gJ2F1dG9Mb2dvdXRfcGF1c2VTdGF0ZSc7XG5cbiAgcHJpdmF0ZSBsYXN0QWN0aXZpdHlUaW1lOiBudW1iZXIgPSBEYXRlLm5vdygpO1xuICBwcml2YXRlIGNvdW50ZG93blZhbHVlOiBudW1iZXIgPSAwO1xuICBwcml2YXRlIGNvdW50ZG93blN1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApO1xuICBwcml2YXRlIHRpbWVyU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBhY3Rpdml0eUxpc3RlbmVyczogYW55W10gPSBbXTtcbiAgcHJpdmF0ZSB3YXJuaW5nU2hvd246IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvLyDmmK/lkKblkK/nlKjmtLvliqjnm5HlkKxcbiAgcHJpdmF0ZSBlbmFibGVBY3Rpdml0eVRyYWNraW5nOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLy8g5pqC5YGc54q25oCBXG4gIHByaXZhdGUgaXNQYXVzZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBwYXVzZVN0YXJ0VGltZTogbnVtYmVyID0gMDtcbiAgcHJpdmF0ZSBwYXVzZWRSZW1haW5pbmdUaW1lOiBudW1iZXIgPSAwO1xuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3RvclxuICAgKiBOb3RlOiBEbyBOT1QgdXNlIEBJbmplY3QoKSBoZXJlLCBpdCBjYXVzZXMgREkgZXJyb3JzIGluIEFuZ3VsYXIgOSBWRVxuICAgKiBDb25maWcgc2hvdWxkIGJlIHBhc3NlZCB2aWEgc3RhcnRNb25pdG9yaW5nKCkgbWV0aG9kIGluc3RlYWRcbiAgICovXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgbmdab25lOiBOZ1pvbmUpIHtcbiAgICAvLyBVc2UgZGVmYXVsdCBjb25maWcsIHdpbGwgYmUgb3ZlcnJpZGRlbiBieSBzdGFydE1vbml0b3JpbmcoKVxuICAgIHRoaXMuY3VycmVudENvbmZpZyA9IHsgLi4uREVGQVVMVF9BVVRPX0xPR09VVF9DT05GSUcgfTtcbiAgICB0aGlzLmNvdW50ZG93blZhbHVlID0gTWF0aC5mbG9vcih0aGlzLmN1cnJlbnRDb25maWcudGltZW91dCk7XG4gICAgdGhpcy5jb3VudGRvd25TdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KHRoaXMuY291bnRkb3duVmFsdWUpO1xuICB9XG4gIGdldENvdW50ZG93bigpOiBPYnNlcnZhYmxlPG51bWJlcj4ge1xuICAgIHJldHVybiB0aGlzLmNvdW50ZG93blN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICAvKipcbiAgICog5ZCv5Yqo6Ieq5Yqo55m75Ye655uR5o6nXG4gICAqL1xuICBzdGFydE1vbml0b3JpbmcoY29uZmlnPzogUGFydGlhbDxBdXRvTG9nb3V0Q29uZmlnPiwgZW5hYmxlVHJhY2tpbmc6IGJvb2xlYW4gPSBmYWxzZSk6IHZvaWQge1xuICAgIHRoaXMuc3RvcE1vbml0b3JpbmcoKTtcblxuICAgIGlmIChjb25maWcpIHtcbiAgICAgIHRoaXMuY3VycmVudENvbmZpZyA9IHsgLi4udGhpcy5jdXJyZW50Q29uZmlnLCAuLi5jb25maWcgfTtcbiAgICB9XG5cbiAgICAvLyDmgaLlpI3mmoLlgZznirbmgIFcbiAgICB0aGlzLnJlc3RvcmVQYXVzZVN0YXRlKCk7XG5cbiAgICBpZiAodGhpcy5pc1BhdXNlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIOagueaNruaooeW8j+WIneWni+WMllxuICAgIGlmICh0aGlzLmN1cnJlbnRDb25maWcubW9kZSA9PT0gJ2ZpeGVkJykge1xuICAgICAgdGhpcy5pbml0Rml4ZWRNb2RlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaW5pdElkbGVNb2RlKGVuYWJsZVRyYWNraW5nKTtcbiAgICB9XG5cbiAgICB0aGlzLndhcm5pbmdTaG93biA9IGZhbHNlO1xuXG4gICAgLy8g5ZCv5Yqo5a6a5pe25ZmoXG4gICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgdGhpcy50aW1lclN1YnNjcmlwdGlvbiA9IGludGVydmFsKDEwMDApLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMudXBkYXRlQ291bnRkb3duKCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiDlgZzmraLnm5HmjqdcbiAgICovXG4gIHN0b3BNb25pdG9yaW5nKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnRpbWVyU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnRpbWVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICB0aGlzLnRpbWVyU3Vic2NyaXB0aW9uID0gbnVsbDtcbiAgICB9XG4gICAgdGhpcy5yZW1vdmVBY3Rpdml0eUxpc3RlbmVycygpO1xuICB9XG5cbiAgLyoqXG4gICAqIOa4hemZpOeZu+W9leaXtumXtFxuICAgKi9cbiAgY2xlYXJMb2dpblRpbWUoKTogdm9pZCB7XG4gICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5MT0dJTl9USU1FX0tFWSk7XG4gICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5MQVNUX0FDVElWSVRZX0tFWSk7XG4gICAgdGhpcy5yZXNldEV4dGVuZENvdW50KCk7XG4gICAgdGhpcy5jbGVhclBhdXNlU3RhdGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDlu7bplb/kvJror51cbiAgICovXG4gIGV4dGVuZFNlc3Npb24oZXh0ZW5kU2Vjb25kczogbnVtYmVyID0gMTgwMCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmlzTWF4RXh0ZW5kUmVhY2hlZCgpKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ+W3sui+vuWIsOacgOWkp+W7tumVv+asoeaVsCcpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmN1cnJlbnRDb25maWcubW9kZSA9PT0gJ2ZpeGVkJykge1xuICAgICAgdGhpcy5sYXN0QWN0aXZpdHlUaW1lIC09IGV4dGVuZFNlY29uZHMgKiAxMDAwO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlc2V0QWN0aXZpdHlUaW1lcigpO1xuICAgIH1cblxuICAgIHRoaXMuaW5jcmVtZW50RXh0ZW5kQ291bnQoKTtcblxuICAgIGlmICh0aGlzLmN1cnJlbnRDb25maWcub25FeHRlbmRlZCkge1xuICAgICAgdGhpcy5jdXJyZW50Q29uZmlnLm9uRXh0ZW5kZWQoZXh0ZW5kU2Vjb25kcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICog5qOA5p+l5piv5ZCm5Y+v5Lul5bu26ZW/XG4gICAqL1xuICBjYW5FeHRlbmRTZXNzaW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5pc01heEV4dGVuZFJlYWNoZWQoKSAmJiAhdGhpcy5pc1BhdXNlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiDojrflj5bliankvZnlj6/lu7bplb/mrKHmlbBcbiAgICovXG4gIGdldFJlbWFpbmluZ0V4dGVuZFRpbWVzKCk6IG51bWJlciB7XG4gICAgaWYgKHRoaXMuY3VycmVudENvbmZpZy5tYXhFeHRlbmRUaW1lcyA9PT0gLTEgfHwgdGhpcy5jdXJyZW50Q29uZmlnLm1heEV4dGVuZFRpbWVzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiAtMTtcbiAgICB9XG4gICAgY29uc3QgdXNlZENvdW50ID0gdGhpcy5nZXRFeHRlbmRDb3VudCgpO1xuICAgIHJldHVybiBNYXRoLm1heCgwLCB0aGlzLmN1cnJlbnRDb25maWcubWF4RXh0ZW5kVGltZXMgLSB1c2VkQ291bnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIOiOt+WPluacgOWQjuaTjeS9nOaXtumXtOaYvuekulxuICAgKi9cbiAgZ2V0TGFzdEFjdGl2aXR5RGlzcGxheSgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLmN1cnJlbnRDb25maWcubW9kZSAhPT0gJ2lkbGUnKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgY29uc3QgbGFzdEFjdGl2aXR5ID0gdGhpcy5nZXRMYXN0QWN0aXZpdHlUaW1lKCk7XG4gICAgaWYgKCFsYXN0QWN0aXZpdHkpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBjb25zdCBtaW51dGVzQWdvID0gTWF0aC5mbG9vcigoRGF0ZS5ub3coKSAtIGxhc3RBY3Rpdml0eSkgLyA2MDAwMCk7XG4gICAgaWYgKG1pbnV0ZXNBZ28gPCAxKSB7XG4gICAgICByZXR1cm4gJ+WImuWImuaTjeS9nCc7XG4gICAgfVxuICAgIHJldHVybiBgJHttaW51dGVzQWdvfeWIhumSn+WJjeaTjeS9nGA7XG4gIH1cblxuICAvKipcbiAgICog5pqC5YGcXG4gICAqL1xuICBwYXVzZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc1BhdXNlZCkgcmV0dXJuO1xuXG4gICAgdGhpcy5pc1BhdXNlZCA9IHRydWU7XG4gICAgdGhpcy5wYXVzZVN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgdGhpcy5wYXVzZWRSZW1haW5pbmdUaW1lID0gdGhpcy5jb3VudGRvd25WYWx1ZTtcblxuICAgIHRoaXMuc3RvcE1vbml0b3JpbmcoKTtcbiAgICB0aGlzLnNhdmVQYXVzZVN0YXRlKCk7XG5cbiAgICBpZiAodGhpcy5jdXJyZW50Q29uZmlnLm9uUGF1c2VkKSB7XG4gICAgICB0aGlzLmN1cnJlbnRDb25maWcub25QYXVzZWQoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICog5oGi5aSNXG4gICAqL1xuICByZXN1bWUoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlzUGF1c2VkKSByZXR1cm47XG5cbiAgICBjb25zdCBwYXVzZUR1cmF0aW9uID0gRGF0ZS5ub3coKSAtIHRoaXMucGF1c2VTdGFydFRpbWU7XG5cbiAgICBpZiAodGhpcy5jdXJyZW50Q29uZmlnLm1vZGUgPT09ICdmaXhlZCcpIHtcbiAgICAgIHRoaXMubGFzdEFjdGl2aXR5VGltZSArPSBwYXVzZUR1cmF0aW9uO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxhc3RBY3Rpdml0eVRpbWUgKz0gcGF1c2VEdXJhdGlvbjtcbiAgICAgIHRoaXMuc2V0TGFzdEFjdGl2aXR5VGltZSh0aGlzLmxhc3RBY3Rpdml0eVRpbWUpO1xuICAgIH1cblxuICAgIHRoaXMuaXNQYXVzZWQgPSBmYWxzZTtcbiAgICB0aGlzLnBhdXNlU3RhcnRUaW1lID0gMDtcbiAgICB0aGlzLnBhdXNlZFJlbWFpbmluZ1RpbWUgPSAwO1xuXG4gICAgdGhpcy5jbGVhclBhdXNlU3RhdGUoKTtcbiAgICB0aGlzLnN0YXJ0TW9uaXRvcmluZyh0aGlzLmN1cnJlbnRDb25maWcsIHRoaXMuZW5hYmxlQWN0aXZpdHlUcmFja2luZyk7XG5cbiAgICBpZiAodGhpcy5jdXJyZW50Q29uZmlnLm9uUmVzdW1lZCkge1xuICAgICAgdGhpcy5jdXJyZW50Q29uZmlnLm9uUmVzdW1lZCgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiDmo4Dmn6XmmK/lkKbmmoLlgZxcbiAgICovXG4gIGlzQXV0b0xvZ291dFBhdXNlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc1BhdXNlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiDmoLzlvI/ljJblgJLorqHml7ZcbiAgICovXG4gIGZvcm1hdENvdW50ZG93bihzZWNvbmRzOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGNvbnN0IG1pbnMgPSBNYXRoLmZsb29yKHNlY29uZHMgLyA2MCk7XG4gICAgY29uc3Qgc2VjcyA9IHNlY29uZHMgJSA2MDtcbiAgICByZXR1cm4gYCR7bWlucy50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyl9OiR7c2Vjcy50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyl9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiDliKTmlq3mmK/lkKborablkYrnirbmgIFcbiAgICovXG4gIGlzV2FybmluZ1N0YXRlKHNlY29uZHM6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHdhcm5pbmdUaW1lID0gdGhpcy5jdXJyZW50Q29uZmlnLndhcm5pbmdUaW1lIHx8IDMwO1xuICAgIHJldHVybiBzZWNvbmRzIDw9IHdhcm5pbmdUaW1lICYmIHNlY29uZHMgPiAwO1xuICB9XG5cbiAgLyoqXG4gICAqIOWIpOaWreaYr+WQpue0p+aApeeKtuaAge+8iOacgOWQjjEw56eS77yJXG4gICAqL1xuICBpc1VyZ2VudFN0YXRlKHNlY29uZHM6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBzZWNvbmRzIDw9IDEwICYmIHNlY29uZHMgPiAwO1xuICB9XG5cbiAgLyoqXG4gICAqIOiOt+WPluW9k+WJjeaooeW8j1xuICAgKi9cbiAgZ2V0Q3VycmVudE1vZGUoKTogJ2ZpeGVkJyB8ICdpZGxlJyB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudENvbmZpZy5tb2RlO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT0g56eB5pyJ5pa55rOVID09PT09PT09PT09PT09PT09PT09XG5cbiAgcHJpdmF0ZSBpbml0Rml4ZWRNb2RlKCk6IHZvaWQge1xuICAgIGNvbnN0IGxvZ2luVGltZSA9IHRoaXMuZ2V0TG9naW5UaW1lKCk7XG4gICAgaWYgKCFsb2dpblRpbWUpIHtcbiAgICAgIHRoaXMuc2V0TG9naW5UaW1lKERhdGUubm93KCkpO1xuICAgICAgdGhpcy5sYXN0QWN0aXZpdHlUaW1lID0gRGF0ZS5ub3coKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5sYXN0QWN0aXZpdHlUaW1lID0gbG9naW5UaW1lO1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZUNvdW50ZG93blZhbHVlKCk7XG4gIH1cblxuICBwcml2YXRlIGluaXRJZGxlTW9kZShlbmFibGVUcmFja2luZzogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZW5hYmxlQWN0aXZpdHlUcmFja2luZyA9IGVuYWJsZVRyYWNraW5nIHx8IHRydWU7XG5cbiAgICBjb25zdCBsYXN0QWN0aXZpdHkgPSB0aGlzLmdldExhc3RBY3Rpdml0eVRpbWUoKTtcbiAgICBpZiAoIWxhc3RBY3Rpdml0eSkge1xuICAgICAgdGhpcy5zZXRMYXN0QWN0aXZpdHlUaW1lKERhdGUubm93KCkpO1xuICAgICAgdGhpcy5sYXN0QWN0aXZpdHlUaW1lID0gRGF0ZS5ub3coKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5sYXN0QWN0aXZpdHlUaW1lID0gbGFzdEFjdGl2aXR5O1xuICAgIH1cblxuICAgIHRoaXMucmVnaXN0ZXJBY3Rpdml0eUxpc3RlbmVycygpO1xuICAgIHRoaXMudXBkYXRlQ291bnRkb3duVmFsdWUoKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlQ291bnRkb3duVmFsdWUoKTogdm9pZCB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBlbGFwc2VkID0gbm93IC0gdGhpcy5sYXN0QWN0aXZpdHlUaW1lO1xuICAgIGNvbnN0IHJlbWFpbmluZyA9IE1hdGgubWF4KDAsIE1hdGguZmxvb3IoKHRoaXMuY3VycmVudENvbmZpZy50aW1lb3V0ICogMTAwMCAtIGVsYXBzZWQpIC8gMTAwMCkpO1xuICAgIHRoaXMuY291bnRkb3duVmFsdWUgPSByZW1haW5pbmc7XG4gICAgdGhpcy5jb3VudGRvd25TdWJqZWN0Lm5leHQodGhpcy5jb3VudGRvd25WYWx1ZSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUNvdW50ZG93bigpOiB2b2lkIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IGVsYXBzZWQgPSBub3cgLSB0aGlzLmxhc3RBY3Rpdml0eVRpbWU7XG4gICAgY29uc3QgcmVtYWluaW5nID0gTWF0aC5tYXgoMCwgTWF0aC5mbG9vcigodGhpcy5jdXJyZW50Q29uZmlnLnRpbWVvdXQgKiAxMDAwIC0gZWxhcHNlZCkgLyAxMDAwKSk7XG5cbiAgICBpZiAocmVtYWluaW5nICE9PSB0aGlzLmNvdW50ZG93blZhbHVlKSB7XG4gICAgICB0aGlzLmNvdW50ZG93blZhbHVlID0gcmVtYWluaW5nO1xuICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgdGhpcy5jb3VudGRvd25TdWJqZWN0Lm5leHQodGhpcy5jb3VudGRvd25WYWx1ZSk7XG4gICAgICB9KTtcblxuICAgICAgLy8g6K2m5ZGK5Zue6LCDXG4gICAgICBjb25zdCB3YXJuaW5nVGltZSA9IHRoaXMuY3VycmVudENvbmZpZy53YXJuaW5nVGltZSB8fCAzMDtcbiAgICAgIGlmIChyZW1haW5pbmcgPT09IHdhcm5pbmdUaW1lICYmICF0aGlzLndhcm5pbmdTaG93bikge1xuICAgICAgICB0aGlzLndhcm5pbmdTaG93biA9IHRydWU7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRDb25maWcub25XYXJuaW5nKSB7XG4gICAgICAgICAgdGhpcy5jdXJyZW50Q29uZmlnLm9uV2FybmluZyhyZW1haW5pbmcpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIOi2heaXtuWbnuiwg1xuICAgICAgaWYgKHJlbWFpbmluZyA8PSAwKSB7XG4gICAgICAgIHRoaXMucGVyZm9ybUF1dG9Mb2dvdXQoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHBlcmZvcm1BdXRvTG9nb3V0KCk6IHZvaWQge1xuICAgIHRoaXMuc3RvcE1vbml0b3JpbmcoKTtcbiAgICB0aGlzLmNsZWFyTG9naW5UaW1lKCk7XG5cbiAgICBpZiAodGhpcy5jdXJyZW50Q29uZmlnLm9uVGltZW91dCkge1xuICAgICAgdGhpcy5jdXJyZW50Q29uZmlnLm9uVGltZW91dCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyDpu5jorqTooYzkuLrvvJrlr7zoiKrliLDnmbvlvZXpobVcbiAgICAgIC8vIE5vdGU6IFJvdXRlciBuYXZpZ2F0aW9uIHJlbW92ZWQgdG8gYXZvaWQgREkgaXNzdWVzIGluIEFuZ3VsYXIgOSBWRVxuICAgICAgLy8gVXNlIG9uVGltZW91dCBjYWxsYmFjayBmb3IgY3VzdG9tIG5hdmlnYXRpb25cbiAgICAgIGNvbnNvbGUud2FybignQXV0byBsb2dvdXQgdGltZW91dCAtIGltcGxlbWVudCBjdXN0b20gbmF2aWdhdGlvbiB2aWEgb25UaW1lb3V0IGNhbGxiYWNrJyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZWdpc3RlckFjdGl2aXR5TGlzdGVuZXJzKCk6IHZvaWQge1xuICAgIGNvbnN0IGV2ZW50cyA9IFsnbW91c2Vkb3duJywgJ21vdXNlbW92ZScsICdrZXlwcmVzcycsICdzY3JvbGwnLCAndG91Y2hzdGFydCcsICdjbGljayddO1xuXG4gICAgZXZlbnRzLmZvckVhY2goKGV2ZW50KSA9PiB7XG4gICAgICBjb25zdCBsaXN0ZW5lciA9ICgpID0+IHRoaXMucmVzZXRBY3Rpdml0eVRpbWVyKCk7XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKGV2ZW50LCBsaXN0ZW5lciwgdHJ1ZSk7XG4gICAgICB0aGlzLmFjdGl2aXR5TGlzdGVuZXJzLnB1c2goeyBldmVudCwgbGlzdGVuZXIgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZUFjdGl2aXR5TGlzdGVuZXJzKCk6IHZvaWQge1xuICAgIHRoaXMuYWN0aXZpdHlMaXN0ZW5lcnMuZm9yRWFjaCgoeyBldmVudCwgbGlzdGVuZXIgfSkgPT4ge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudCwgbGlzdGVuZXIsIHRydWUpO1xuICAgIH0pO1xuICAgIHRoaXMuYWN0aXZpdHlMaXN0ZW5lcnMgPSBbXTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzZXRBY3Rpdml0eVRpbWVyKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmN1cnJlbnRDb25maWcubW9kZSA9PT0gJ2lkbGUnKSB7XG4gICAgICB0aGlzLmxhc3RBY3Rpdml0eVRpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgdGhpcy5zZXRMYXN0QWN0aXZpdHlUaW1lKHRoaXMubGFzdEFjdGl2aXR5VGltZSk7XG4gICAgICB0aGlzLnVwZGF0ZUNvdW50ZG93blZhbHVlKCk7XG4gICAgICB0aGlzLndhcm5pbmdTaG93biA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaXNNYXhFeHRlbmRSZWFjaGVkKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmN1cnJlbnRDb25maWcubWF4RXh0ZW5kVGltZXMgPT09IC0xIHx8IHRoaXMuY3VycmVudENvbmZpZy5tYXhFeHRlbmRUaW1lcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IHVzZWRDb3VudCA9IHRoaXMuZ2V0RXh0ZW5kQ291bnQoKTtcbiAgICByZXR1cm4gdXNlZENvdW50ID49IHRoaXMuY3VycmVudENvbmZpZy5tYXhFeHRlbmRUaW1lcztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RXh0ZW5kQ291bnQoKTogbnVtYmVyIHtcbiAgICBjb25zdCBjb3VudFN0ciA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuRVhURU5EX0NPVU5UX0tFWSk7XG4gICAgcmV0dXJuIGNvdW50U3RyID8gcGFyc2VJbnQoY291bnRTdHIsIDEwKSA6IDA7XG4gIH1cblxuICBwcml2YXRlIGluY3JlbWVudEV4dGVuZENvdW50KCk6IHZvaWQge1xuICAgIGNvbnN0IGN1cnJlbnRDb3VudCA9IHRoaXMuZ2V0RXh0ZW5kQ291bnQoKTtcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLkVYVEVORF9DT1VOVF9LRVksIChjdXJyZW50Q291bnQgKyAxKS50b1N0cmluZygpKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzZXRFeHRlbmRDb3VudCgpOiB2b2lkIHtcbiAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLkVYVEVORF9DT1VOVF9LRVkpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRMb2dpblRpbWUoKTogbnVtYmVyIHwgbnVsbCB7XG4gICAgY29uc3QgdGltZVN0ciA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuTE9HSU5fVElNRV9LRVkpO1xuICAgIHJldHVybiB0aW1lU3RyID8gcGFyc2VJbnQodGltZVN0ciwgMTApIDogbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgc2V0TG9naW5UaW1lKHRpbWU6IG51bWJlcik6IHZvaWQge1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuTE9HSU5fVElNRV9LRVksIHRpbWUudG9TdHJpbmcoKSk7XG4gIH1cblxuICBwcml2YXRlIGdldExhc3RBY3Rpdml0eVRpbWUoKTogbnVtYmVyIHwgbnVsbCB7XG4gICAgY29uc3QgdGltZVN0ciA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuTEFTVF9BQ1RJVklUWV9LRVkpO1xuICAgIHJldHVybiB0aW1lU3RyID8gcGFyc2VJbnQodGltZVN0ciwgMTApIDogbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgc2V0TGFzdEFjdGl2aXR5VGltZSh0aW1lOiBudW1iZXIpOiB2b2lkIHtcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLkxBU1RfQUNUSVZJVFlfS0VZLCB0aW1lLnRvU3RyaW5nKCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBzYXZlUGF1c2VTdGF0ZSgpOiB2b2lkIHtcbiAgICBjb25zdCBzdGF0ZSA9IHtcbiAgICAgIGlzUGF1c2VkOiB0cnVlLFxuICAgICAgcGF1c2VTdGFydFRpbWU6IHRoaXMucGF1c2VTdGFydFRpbWUsXG4gICAgICBwYXVzZWRSZW1haW5pbmdUaW1lOiB0aGlzLnBhdXNlZFJlbWFpbmluZ1RpbWUsXG4gICAgICBtb2RlOiB0aGlzLmN1cnJlbnRDb25maWcubW9kZSxcbiAgICAgIGxhc3RBY3Rpdml0eVRpbWU6IHRoaXMubGFzdEFjdGl2aXR5VGltZVxuICAgIH07XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5QQVVTRV9TVEFURV9LRVksIEpTT04uc3RyaW5naWZ5KHN0YXRlKSk7XG4gIH1cblxuICBwcml2YXRlIGNsZWFyUGF1c2VTdGF0ZSgpOiB2b2lkIHtcbiAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLlBBVVNFX1NUQVRFX0tFWSk7XG4gIH1cblxuICBwcml2YXRlIHJlc3RvcmVQYXVzZVN0YXRlKCk6IHZvaWQge1xuICAgIGNvbnN0IHN0YXRlU3RyID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5QQVVTRV9TVEFURV9LRVkpO1xuICAgIGlmICghc3RhdGVTdHIpIHJldHVybjtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBzdGF0ZSA9IEpTT04ucGFyc2Uoc3RhdGVTdHIpO1xuICAgICAgaWYgKHN0YXRlLmlzUGF1c2VkKSB7XG4gICAgICAgIHRoaXMuaXNQYXVzZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLnBhdXNlU3RhcnRUaW1lID0gc3RhdGUucGF1c2VTdGFydFRpbWU7XG4gICAgICAgIHRoaXMucGF1c2VkUmVtYWluaW5nVGltZSA9IHN0YXRlLnBhdXNlZFJlbWFpbmluZ1RpbWU7XG4gICAgICAgIHRoaXMubGFzdEFjdGl2aXR5VGltZSA9IHN0YXRlLmxhc3RBY3Rpdml0eVRpbWU7XG4gICAgICAgIHRoaXMuY3VycmVudENvbmZpZy5tb2RlID0gc3RhdGUubW9kZTtcblxuICAgICAgICBpZiAodGhpcy50aW1lclN1YnNjcmlwdGlvbikge1xuICAgICAgICAgIHRoaXMudGltZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICB0aGlzLnRpbWVyU3Vic2NyaXB0aW9uID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlbW92ZUFjdGl2aXR5TGlzdGVuZXJzKCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5lcnJvcign5oGi5aSN5pqC5YGc54q25oCB5aSx6LSlOicsIGUpO1xuICAgICAgdGhpcy5jbGVhclBhdXNlU3RhdGUoKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,10 @@
1
+ /**
2
+ * 默认配置
3
+ */
4
+ export var DEFAULT_AUTO_LOGOUT_CONFIG = {
5
+ mode: 'fixed',
6
+ timeout: 300,
7
+ warningTime: 30,
8
+ maxExtendTimes: -1,
9
+ };
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0by1sb2dvdXQtY29uZmlnLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC1hdXRvLWxvZ291dC8iLCJzb3VyY2VzIjpbImxpYi9tb2RlbHMvYXV0by1sb2dvdXQtY29uZmlnLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFtREE7O0dBRUc7QUFDSCxNQUFNLENBQUMsSUFBTSwwQkFBMEIsR0FBcUI7SUFDMUQsSUFBSSxFQUFFLE9BQU87SUFDYixPQUFPLEVBQUUsR0FBRztJQUNaLFdBQVcsRUFBRSxFQUFFO0lBQ2YsY0FBYyxFQUFFLENBQUMsQ0FBQztDQUNuQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiDoh6rliqjnmbvlh7rphY3nva7mjqXlj6NcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBdXRvTG9nb3V0Q29uZmlnIHtcbiAgLyoqXG4gICAqIOaooeW8j++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 var AUTO_LOGOUT_CONFIG = new InjectionToken('AutoLogoutConfig');
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0by1sb2dvdXQtY29uZmlnLnRva2VuLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmd4LWF1dG8tbG9nb3V0LyIsInNvdXJjZXMiOlsibGliL21vZGVscy9hdXRvLWxvZ291dC1jb25maWcudG9rZW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUcvQzs7O0dBR0c7QUFDSCxNQUFNLENBQUMsSUFBTSxrQkFBa0IsR0FBRyxJQUFJLGNBQWMsQ0FBbUIsa0JBQWtCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBdXRvTG9nb3V0Q29uZmlnIH0gZnJvbSAnLi9hdXRvLWxvZ291dC1jb25maWcuaW50ZXJmYWNlJztcblxuLyoqXG4gKiBJbmplY3Rpb25Ub2tlbiBmb3IgYXV0byBsb2dvdXQgY29uZmlndXJhdGlvblxuICogRXh0cmFjdGVkIHRvIGEgc2VwYXJhdGUgZmlsZSB0byBhdm9pZCBBbmd1bGFyIDkgSXZ5IGNvbXBpbGF0aW9uIHNjb3BlIGlzc3Vlc1xuICovXG5leHBvcnQgY29uc3QgQVVUT19MT0dPVVRfQ09ORklHID0gbmV3IEluamVjdGlvblRva2VuPEF1dG9Mb2dvdXRDb25maWc+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==