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,351 @@
1
+ import { __decorate } from "tslib";
2
+ import { Component, Input, Output, EventEmitter } from '@angular/core';
3
+ import { AutoLogoutService } from './auto-logout.service';
4
+ let AutoLogoutComponent = class AutoLogoutComponent {
5
+ constructor(autoLogout) {
6
+ this.autoLogout = autoLogout;
7
+ // ==================== 输入属性 ====================
8
+ /**
9
+ * 是否显示延长按钮
10
+ */
11
+ this.showExtendButton = true;
12
+ /**
13
+ * 是否显示暂停按钮
14
+ */
15
+ this.showPauseButton = true;
16
+ /**
17
+ * 延长的秒数(默认30分钟)
18
+ */
19
+ this.extendSeconds = 1800;
20
+ // ==================== 输出事件 ====================
21
+ /**
22
+ * 警告事件
23
+ */
24
+ this.onWarning = new EventEmitter();
25
+ /**
26
+ * 超时事件
27
+ */
28
+ this.onTimeout = new EventEmitter();
29
+ /**
30
+ * 延长成功事件
31
+ */
32
+ this.onExtended = new EventEmitter();
33
+ /**
34
+ * 暂停事件
35
+ */
36
+ this.onPaused = new EventEmitter();
37
+ /**
38
+ * 恢复事件
39
+ */
40
+ this.onResumed = new EventEmitter();
41
+ // ==================== 内部状态 ====================
42
+ this.subscription = null;
43
+ this.countdown = '00:00';
44
+ this.isWarning = false;
45
+ this.isUrgent = false;
46
+ this.isPaused = false;
47
+ this.canExtend = true;
48
+ this.remainingExtends = -1;
49
+ }
50
+ ngOnInit() {
51
+ // 如果提供了自定义配置,启动监控
52
+ if (this.config) {
53
+ this.autoLogout.startMonitoring(this.config);
54
+ }
55
+ // 订阅倒计时
56
+ this.subscription = this.autoLogout.getCountdown().subscribe((seconds) => {
57
+ var _a;
58
+ this.countdown = this.autoLogout.formatCountdown(seconds);
59
+ this.isWarning = this.autoLogout.isWarningState(seconds);
60
+ this.isUrgent = this.autoLogout.isUrgentState(seconds);
61
+ // 触发警告事件
62
+ const warningTime = ((_a = this.config) === null || _a === void 0 ? void 0 : _a.warningTime) || 30;
63
+ if (seconds === warningTime) {
64
+ this.onWarning.emit(seconds);
65
+ }
66
+ // 触发超时事件
67
+ if (seconds <= 0) {
68
+ this.onTimeout.emit();
69
+ }
70
+ });
71
+ // 定期检查状态
72
+ setInterval(() => {
73
+ this.updateStatus();
74
+ }, 1000);
75
+ this.updateStatus();
76
+ }
77
+ ngOnDestroy() {
78
+ if (this.subscription) {
79
+ this.subscription.unsubscribe();
80
+ }
81
+ }
82
+ // ==================== 公开方法 ====================
83
+ /**
84
+ * 延长会话
85
+ */
86
+ extendSession() {
87
+ this.handleExtend();
88
+ }
89
+ /**
90
+ * 暂停
91
+ */
92
+ pause() {
93
+ this.handleTogglePause();
94
+ }
95
+ /**
96
+ * 恢复
97
+ */
98
+ resume() {
99
+ this.handleTogglePause();
100
+ }
101
+ /**
102
+ * 获取模板上下文(用于自定义模板)
103
+ */
104
+ get templateContext() {
105
+ return {
106
+ countdown: this.countdown,
107
+ isWarning: this.isWarning,
108
+ isUrgent: this.isUrgent,
109
+ isPaused: this.isPaused,
110
+ canExtend: this.canExtend,
111
+ remainingExtends: this.remainingExtends,
112
+ extendSession: () => this.handleExtend(),
113
+ togglePause: () => this.handleTogglePause(),
114
+ formatCountdown: (seconds) => this.autoLogout.formatCountdown(seconds)
115
+ };
116
+ }
117
+ // ==================== 内部方法 ====================
118
+ updateStatus() {
119
+ this.isPaused = this.autoLogout.isAutoLogoutPaused();
120
+ this.canExtend = this.autoLogout.canExtendSession();
121
+ this.remainingExtends = this.autoLogout.getRemainingExtendTimes();
122
+ }
123
+ /**
124
+ * 处理延长会话(模板调用)
125
+ */
126
+ handleExtend() {
127
+ const success = this.autoLogout.extendSession(this.extendSeconds);
128
+ if (success) {
129
+ this.onExtended.emit(this.extendSeconds);
130
+ }
131
+ this.updateStatus();
132
+ }
133
+ /**
134
+ * 处理暂停/恢复切换(模板调用)
135
+ */
136
+ handleTogglePause() {
137
+ if (this.isPaused) {
138
+ this.autoLogout.resume();
139
+ this.onResumed.emit();
140
+ }
141
+ else {
142
+ this.autoLogout.pause();
143
+ this.onPaused.emit();
144
+ }
145
+ this.updateStatus();
146
+ }
147
+ };
148
+ AutoLogoutComponent.ctorParameters = () => [
149
+ { type: AutoLogoutService }
150
+ ];
151
+ __decorate([
152
+ Input()
153
+ ], AutoLogoutComponent.prototype, "showExtendButton", void 0);
154
+ __decorate([
155
+ Input()
156
+ ], AutoLogoutComponent.prototype, "showPauseButton", void 0);
157
+ __decorate([
158
+ Input()
159
+ ], AutoLogoutComponent.prototype, "extendSeconds", void 0);
160
+ __decorate([
161
+ Input()
162
+ ], AutoLogoutComponent.prototype, "config", void 0);
163
+ __decorate([
164
+ Input()
165
+ ], AutoLogoutComponent.prototype, "customTemplate", void 0);
166
+ __decorate([
167
+ Output()
168
+ ], AutoLogoutComponent.prototype, "onWarning", void 0);
169
+ __decorate([
170
+ Output()
171
+ ], AutoLogoutComponent.prototype, "onTimeout", void 0);
172
+ __decorate([
173
+ Output()
174
+ ], AutoLogoutComponent.prototype, "onExtended", void 0);
175
+ __decorate([
176
+ Output()
177
+ ], AutoLogoutComponent.prototype, "onPaused", void 0);
178
+ __decorate([
179
+ Output()
180
+ ], AutoLogoutComponent.prototype, "onResumed", void 0);
181
+ AutoLogoutComponent = __decorate([
182
+ Component({
183
+ selector: 'ngx-auto-logout',
184
+ template: `
185
+ <!-- 默认UI模式(傻瓜模式) -->
186
+ <div *ngIf="!customTemplate" class="ngx-auto-logout-container">
187
+ <!-- 倒计时显示 -->
188
+ <div class="countdown-display" [class.warning]="isWarning" [class.urgent]="isUrgent" [class.paused]="isPaused">
189
+ <span class="icon">{{ isPaused ? '⏸️' : '⏱️' }}</span>
190
+ <span class="time">{{ countdown }}</span>
191
+ <span *ngIf="isPaused" class="pause-label">(已暂停)</span>
192
+ </div>
193
+
194
+ <!-- 控制按钮 -->
195
+ <div class="controls">
196
+ <!-- 延长会话按钮 -->
197
+ <button *ngIf="showExtendButton && canExtend" class="btn btn-extend" (click)="handleExtend()" [disabled]="!canExtend" title="延长30分钟">
198
+ ➕ 延长
199
+ <span *ngIf="remainingExtends !== -1" class="extend-count"> ({{ remainingExtends }}) </span>
200
+ </button>
201
+
202
+ <!-- 暂停/恢复按钮 -->
203
+ <button
204
+ *ngIf="showPauseButton"
205
+ class="btn btn-pause"
206
+ [class.paused]="isPaused"
207
+ (click)="handleTogglePause()"
208
+ [title]="isPaused ? '恢复自动登出' : '暂停自动登出'"
209
+ >
210
+ {{ isPaused ? '▶️ 恢复' : '⏸️ 暂停' }}
211
+ </button>
212
+ </div>
213
+ </div>
214
+
215
+ <!-- 自定义模板模式(专家模式) -->
216
+ <ng-container *ngIf="customTemplate">
217
+ <ng-container [ngTemplateOutlet]="customTemplate" [ngTemplateOutletContext]="templateContext"></ng-container>
218
+ </ng-container>
219
+ `,
220
+ styles: [`
221
+ .ngx-auto-logout-container {
222
+ display: inline-flex;
223
+ align-items: center;
224
+ gap: 12px;
225
+ padding: 8px 12px;
226
+ background: #f8f9fa;
227
+ border-radius: 6px;
228
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
229
+ }
230
+
231
+ .countdown-display {
232
+ display: flex;
233
+ align-items: center;
234
+ gap: 8px;
235
+ padding: 6px 12px;
236
+ background: white;
237
+ border-radius: 4px;
238
+ font-weight: bold;
239
+ font-size: 16px;
240
+ transition: all 0.3s ease;
241
+ }
242
+
243
+ .countdown-display.warning {
244
+ background: #fff3cd;
245
+ color: #856404;
246
+ animation: blink-warning 1s ease-in-out infinite;
247
+ }
248
+
249
+ .countdown-display.urgent {
250
+ background: #f8d7da;
251
+ color: #721c24;
252
+ animation: blink-urgent 0.5s ease-in-out infinite;
253
+ }
254
+
255
+ .countdown-display.paused {
256
+ opacity: 0.6;
257
+ background: #e9ecef;
258
+ }
259
+
260
+ .icon {
261
+ font-size: 18px;
262
+ }
263
+
264
+ .time {
265
+ min-width: 50px;
266
+ text-align: center;
267
+ }
268
+
269
+ .pause-label {
270
+ font-size: 12px;
271
+ color: #6c757d;
272
+ font-weight: normal;
273
+ }
274
+
275
+ .controls {
276
+ display: flex;
277
+ gap: 8px;
278
+ }
279
+
280
+ .btn {
281
+ padding: 6px 12px;
282
+ font-size: 13px;
283
+ border: none;
284
+ border-radius: 4px;
285
+ cursor: pointer;
286
+ transition: all 0.2s;
287
+ font-weight: 500;
288
+ }
289
+
290
+ .btn-extend {
291
+ background: #28a745;
292
+ color: white;
293
+ }
294
+
295
+ .btn-extend:hover:not(:disabled) {
296
+ background: #218838;
297
+ transform: translateY(-1px);
298
+ }
299
+
300
+ .btn-extend:disabled {
301
+ background: #ccc;
302
+ cursor: not-allowed;
303
+ opacity: 0.6;
304
+ }
305
+
306
+ .btn-pause {
307
+ background: #007bff;
308
+ color: white;
309
+ }
310
+
311
+ .btn-pause:hover {
312
+ background: #0056b3;
313
+ transform: translateY(-1px);
314
+ }
315
+
316
+ .btn-pause.paused {
317
+ background: #ffc107;
318
+ color: #212529;
319
+ }
320
+
321
+ .extend-count {
322
+ font-size: 11px;
323
+ opacity: 0.9;
324
+ }
325
+
326
+ @keyframes blink-warning {
327
+ 0%,
328
+ 100% {
329
+ opacity: 1;
330
+ }
331
+ 50% {
332
+ opacity: 0.7;
333
+ }
334
+ }
335
+
336
+ @keyframes blink-urgent {
337
+ 0%,
338
+ 100% {
339
+ opacity: 1;
340
+ transform: scale(1);
341
+ }
342
+ 50% {
343
+ opacity: 0.6;
344
+ transform: scale(1.05);
345
+ }
346
+ }
347
+ `]
348
+ })
349
+ ], AutoLogoutComponent);
350
+ export { AutoLogoutComponent };
351
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0by1sb2dvdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmd4LWF1dG8tbG9nb3V0LyIsInNvdXJjZXMiOlsibGliL2F1dG8tbG9nb3V0LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBa0MsTUFBTSxlQUFlLENBQUM7QUFDdkcsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUE2SzFELElBQWEsbUJBQW1CLEdBQWhDLE1BQWEsbUJBQW1CO0lBaUU5QixZQUFvQixVQUE2QjtRQUE3QixlQUFVLEdBQVYsVUFBVSxDQUFtQjtRQWhFakQsaURBQWlEO1FBRWpEOztXQUVHO1FBQ00scUJBQWdCLEdBQUcsSUFBSSxDQUFDO1FBRWpDOztXQUVHO1FBQ00sb0JBQWUsR0FBRyxJQUFJLENBQUM7UUFFaEM7O1dBRUc7UUFDTSxrQkFBYSxHQUFHLElBQUksQ0FBQztRQVk5QixpREFBaUQ7UUFFakQ7O1dBRUc7UUFDTyxjQUFTLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUVqRDs7V0FFRztRQUNPLGNBQVMsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBRS9DOztXQUVHO1FBQ08sZUFBVSxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFFbEQ7O1dBRUc7UUFDTyxhQUFRLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUU5Qzs7V0FFRztRQUNPLGNBQVMsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBRS9DLGlEQUFpRDtRQUV6QyxpQkFBWSxHQUF3QixJQUFJLENBQUM7UUFDakQsY0FBUyxHQUFHLE9BQU8sQ0FBQztRQUNwQixjQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ2xCLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFDakIsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUNqQixjQUFTLEdBQUcsSUFBSSxDQUFDO1FB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QjtRQUMzQixRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUNUO2lCQUVDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0tBK0hDO0tBRUosQ0FBQztHQUNXLG1CQUFtQixDQWlML0I7U0FqTFksbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIE9uSW5pdCwgT25EZXN0cm95LCBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQXV0b0xvZ291dFNlcnZpY2UgfSBmcm9tICcuL2F1dG8tbG9nb3V0LnNlcnZpY2UnO1xuaW1wb3J0IHsgQXV0b0xvZ291dENvbmZpZyB9IGZyb20gJy4vbW9kZWxzL2F1dG8tbG9nb3V0LWNvbmZpZy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25neC1hdXRvLWxvZ291dCcsXG4gIHRlbXBsYXRlOiBgXG4gICAgPCEtLSDpu5jorqRVSeaooeW8j++8iOWCu+eTnOaooeW8j++8iSAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwiIWN1c3RvbVRlbXBsYXRlXCIgY2xhc3M9XCJuZ3gtYXV0by1sb2dvdXQtY29udGFpbmVyXCI+XG4gICAgICA8IS0tIOWAkuiuoeaXtuaYvuekuiAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb3VudGRvd24tZGlzcGxheVwiIFtjbGFzcy53YXJuaW5nXT1cImlzV2FybmluZ1wiIFtjbGFzcy51cmdlbnRdPVwiaXNVcmdlbnRcIiBbY2xhc3MucGF1c2VkXT1cImlzUGF1c2VkXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiaWNvblwiPnt7IGlzUGF1c2VkID8gJ+KPuO+4jycgOiAn4o+x77iPJyB9fTwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ0aW1lXCI+e3sgY291bnRkb3duIH19PC9zcGFuPlxuICAgICAgICA8c3BhbiAqbmdJZj1cImlzUGF1c2VkXCIgY2xhc3M9XCJwYXVzZS1sYWJlbFwiPijlt7LmmoLlgZwpPC9zcGFuPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0g5o6n5Yi25oyJ6ZKuIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbnRyb2xzXCI+XG4gICAgICAgIDwhLS0g5bu26ZW/5Lya6K+d5oyJ6ZKuIC0tPlxuICAgICAgICA8YnV0dG9uICpuZ0lmPVwic2hvd0V4dGVuZEJ1dHRvbiAmJiBjYW5FeHRlbmRcIiBjbGFzcz1cImJ0biBidG4tZXh0ZW5kXCIgKGNsaWNrKT1cImhhbmRsZUV4dGVuZCgpXCIgW2Rpc2FibGVkXT1cIiFjYW5FeHRlbmRcIiB0aXRsZT1cIuW7tumVvzMw5YiG6ZKfXCI+XG4gICAgICAgICAg4p6VIOW7tumVv1xuICAgICAgICAgIDxzcGFuICpuZ0lmPVwicmVtYWluaW5nRXh0ZW5kcyAhPT0gLTFcIiBjbGFzcz1cImV4dGVuZC1jb3VudFwiPiAoe3sgcmVtYWluaW5nRXh0ZW5kcyB9fSkgPC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICA8IS0tIOaaguWBnC/mgaLlpI3mjInpkq4gLS0+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAqbmdJZj1cInNob3dQYXVzZUJ1dHRvblwiXG4gICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXBhdXNlXCJcbiAgICAgICAgICBbY2xhc3MucGF1c2VkXT1cImlzUGF1c2VkXCJcbiAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlVG9nZ2xlUGF1c2UoKVwiXG4gICAgICAgICAgW3RpdGxlXT1cImlzUGF1c2VkID8gJ+aBouWkjeiHquWKqOeZu+WHuicgOiAn5pqC5YGc6Ieq5Yqo55m75Ye6J1wiXG4gICAgICAgID5cbiAgICAgICAgICB7eyBpc1BhdXNlZCA/ICfilrbvuI8g5oGi5aSNJyA6ICfij7jvuI8g5pqC5YGcJyB9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSDoh6rlrprkuYnmqKHmnb/mqKHlvI/vvIjkuJPlrrbmqKHlvI/vvIkgLS0+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImN1c3RvbVRlbXBsYXRlXCI+XG4gICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImN1c3RvbVRlbXBsYXRlXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInRlbXBsYXRlQ29udGV4dFwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuICBgLFxuICBzdHlsZXM6IFtcbiAgICBgXG4gICAgICAubmd4LWF1dG8tbG9nb3V0LWNvbnRhaW5lciB7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBnYXA6IDEycHg7XG4gICAgICAgIHBhZGRpbmc6IDhweCAxMnB4O1xuICAgICAgICBiYWNrZ3JvdW5kOiAjZjhmOWZhO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7XG4gICAgICAgIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICdTZWdvZSBVSScsIFJvYm90bywgc2Fucy1zZXJpZjtcbiAgICAgIH1cblxuICAgICAgLmNvdW50ZG93bi1kaXNwbGF5IHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgZ2FwOiA4cHg7XG4gICAgICAgIHBhZGRpbmc6IDZweCAxMnB4O1xuICAgICAgICBiYWNrZ3JvdW5kOiB3aGl0ZTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgICAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlO1xuICAgICAgfVxuXG4gICAgICAuY291bnRkb3duLWRpc3BsYXkud2FybmluZyB7XG4gICAgICAgIGJhY2tncm91bmQ6ICNmZmYzY2Q7XG4gICAgICAgIGNvbG9yOiAjODU2NDA0O1xuICAgICAgICBhbmltYXRpb246IGJsaW5rLXdhcm5pbmcgMXMgZWFzZS1pbi1vdXQgaW5maW5pdGU7XG4gICAgICB9XG5cbiAgICAgIC5jb3VudGRvd24tZGlzcGxheS51cmdlbnQge1xuICAgICAgICBiYWNrZ3JvdW5kOiAjZjhkN2RhO1xuICAgICAgICBjb2xvcjogIzcyMWMyNDtcbiAgICAgICAgYW5pbWF0aW9uOiBibGluay11cmdlbnQgMC41cyBlYXNlLWluLW91dCBpbmZpbml0ZTtcbiAgICAgIH1cblxuICAgICAgLmNvdW50ZG93bi1kaXNwbGF5LnBhdXNlZCB7XG4gICAgICAgIG9wYWNpdHk6IDAuNjtcbiAgICAgICAgYmFja2dyb3VuZDogI2U5ZWNlZjtcbiAgICAgIH1cblxuICAgICAgLmljb24ge1xuICAgICAgICBmb250LXNpemU6IDE4cHg7XG4gICAgICB9XG5cbiAgICAgIC50aW1lIHtcbiAgICAgICAgbWluLXdpZHRoOiA1MHB4O1xuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICB9XG5cbiAgICAgIC5wYXVzZS1sYWJlbCB7XG4gICAgICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICAgICAgY29sb3I6ICM2Yzc1N2Q7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gICAgICB9XG5cbiAgICAgIC5jb250cm9scyB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGdhcDogOHB4O1xuICAgICAgfVxuXG4gICAgICAuYnRuIHtcbiAgICAgICAgcGFkZGluZzogNnB4IDEycHg7XG4gICAgICAgIGZvbnQtc2l6ZTogMTNweDtcbiAgICAgICAgYm9yZGVyOiBub25lO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnM7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICB9XG5cbiAgICAgIC5idG4tZXh0ZW5kIHtcbiAgICAgICAgYmFja2dyb3VuZDogIzI4YTc0NTtcbiAgICAgICAgY29sb3I6IHdoaXRlO1xuICAgICAgfVxuXG4gICAgICAuYnRuLWV4dGVuZDpob3Zlcjpub3QoOmRpc2FibGVkKSB7XG4gICAgICAgIGJhY2tncm91bmQ6ICMyMTg4Mzg7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMXB4KTtcbiAgICAgIH1cblxuICAgICAgLmJ0bi1leHRlbmQ6ZGlzYWJsZWQge1xuICAgICAgICBiYWNrZ3JvdW5kOiAjY2NjO1xuICAgICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xuICAgICAgICBvcGFjaXR5OiAwLjY7XG4gICAgICB9XG5cbiAgICAgIC5idG4tcGF1c2Uge1xuICAgICAgICBiYWNrZ3JvdW5kOiAjMDA3YmZmO1xuICAgICAgICBjb2xvcjogd2hpdGU7XG4gICAgICB9XG5cbiAgICAgIC5idG4tcGF1c2U6aG92ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kOiAjMDA1NmIzO1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTFweCk7XG4gICAgICB9XG5cbiAgICAgIC5idG4tcGF1c2UucGF1c2VkIHtcbiAgICAgICAgYmFja2dyb3VuZDogI2ZmYzEwNztcbiAgICAgICAgY29sb3I6ICMyMTI1Mjk7XG4gICAgICB9XG5cbiAgICAgIC5leHRlbmQtY291bnQge1xuICAgICAgICBmb250LXNpemU6IDExcHg7XG4gICAgICAgIG9wYWNpdHk6IDAuOTtcbiAgICAgIH1cblxuICAgICAgQGtleWZyYW1lcyBibGluay13YXJuaW5nIHtcbiAgICAgICAgMCUsXG4gICAgICAgIDEwMCUge1xuICAgICAgICAgIG9wYWNpdHk6IDE7XG4gICAgICAgIH1cbiAgICAgICAgNTAlIHtcbiAgICAgICAgICBvcGFjaXR5OiAwLjc7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgQGtleWZyYW1lcyBibGluay11cmdlbnQge1xuICAgICAgICAwJSxcbiAgICAgICAgMTAwJSB7XG4gICAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICAgICAgICB9XG4gICAgICAgIDUwJSB7XG4gICAgICAgICAgb3BhY2l0eTogMC42O1xuICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMS4wNSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICBgXG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgQXV0b0xvZ291dENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgLy8gPT09PT09PT09PT09PT09PT09PT0g6L6T5YWl5bGe5oCnID09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIOaYr+WQpuaYvuekuuW7tumVv+aMiemSrlxuICAgKi9cbiAgQElucHV0KCkgc2hvd0V4dGVuZEJ1dHRvbiA9IHRydWU7XG5cbiAgLyoqXG4gICAqIOaYr+WQpuaYvuekuuaaguWBnOaMiemSrlxuICAgKi9cbiAgQElucHV0KCkgc2hvd1BhdXNlQnV0dG9uID0gdHJ1ZTtcblxuICAvKipcbiAgICog5bu26ZW/55qE56eS5pWw77yI6buY6K6kMzDliIbpkp/vvIlcbiAgICovXG4gIEBJbnB1dCgpIGV4dGVuZFNlY29uZHMgPSAxODAwO1xuXG4gIC8qKlxuICAgKiDoh6rlrprkuYnphY3nva7vvIjkvJropobnm5bmqKHlnZfphY3nva7vvIlcbiAgICovXG4gIEBJbnB1dCgpIGNvbmZpZz86IFBhcnRpYWw8QXV0b0xvZ291dENvbmZpZz47XG5cbiAgLyoqXG4gICAqIOiHquWumuS5ieaooeadv++8iOS4k+WutuaooeW8j++8iVxuICAgKi9cbiAgQElucHV0KCkgY3VzdG9tVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09IOi+k+WHuuS6i+S7tiA9PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiDorablkYrkuovku7ZcbiAgICovXG4gIEBPdXRwdXQoKSBvbldhcm5pbmcgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcblxuICAvKipcbiAgICog6LaF5pe25LqL5Lu2XG4gICAqL1xuICBAT3V0cHV0KCkgb25UaW1lb3V0ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIC8qKlxuICAgKiDlu7bplb/miJDlip/kuovku7ZcbiAgICovXG4gIEBPdXRwdXQoKSBvbkV4dGVuZGVkID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG5cbiAgLyoqXG4gICAqIOaaguWBnOS6i+S7tlxuICAgKi9cbiAgQE91dHB1dCgpIG9uUGF1c2VkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIC8qKlxuICAgKiDmgaLlpI3kuovku7ZcbiAgICovXG4gIEBPdXRwdXQoKSBvblJlc3VtZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT0g5YaF6YOo54q25oCBID09PT09PT09PT09PT09PT09PT09XG5cbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IG51bGwgPSBudWxsO1xuICBjb3VudGRvd24gPSAnMDA6MDAnO1xuICBpc1dhcm5pbmcgPSBmYWxzZTtcbiAgaXNVcmdlbnQgPSBmYWxzZTtcbiAgaXNQYXVzZWQgPSBmYWxzZTtcbiAgY2FuRXh0ZW5kID0gdHJ1ZTtcbiAgcmVtYWluaW5nRXh0ZW5kcyA9IC0xO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgYXV0b0xvZ291dDogQXV0b0xvZ291dFNlcnZpY2UpIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgLy8g5aaC5p6c5o+Q5L6b5LqG6Ieq5a6a5LmJ6YWN572u77yM5ZCv5Yqo55uR5o6nXG4gICAgaWYgKHRoaXMuY29uZmlnKSB7XG4gICAgICB0aGlzLmF1dG9Mb2dvdXQuc3RhcnRNb25pdG9yaW5nKHRoaXMuY29uZmlnKTtcbiAgICB9XG5cbiAgICAvLyDorqLpmIXlgJLorqHml7ZcbiAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IHRoaXMuYXV0b0xvZ291dC5nZXRDb3VudGRvd24oKS5zdWJzY3JpYmUoKHNlY29uZHMpID0+IHtcbiAgICAgIHRoaXMuY291bnRkb3duID0gdGhpcy5hdXRvTG9nb3V0LmZvcm1hdENvdW50ZG93bihzZWNvbmRzKTtcbiAgICAgIHRoaXMuaXNXYXJuaW5nID0gdGhpcy5hdXRvTG9nb3V0LmlzV2FybmluZ1N0YXRlKHNlY29uZHMpO1xuICAgICAgdGhpcy5pc1VyZ2VudCA9IHRoaXMuYXV0b0xvZ291dC5pc1VyZ2VudFN0YXRlKHNlY29uZHMpO1xuXG4gICAgICAvLyDop6blj5HorablkYrkuovku7ZcbiAgICAgIGNvbnN0IHdhcm5pbmdUaW1lID0gdGhpcy5jb25maWc/Lndhcm5pbmdUaW1lIHx8IDMwO1xuICAgICAgaWYgKHNlY29uZHMgPT09IHdhcm5pbmdUaW1lKSB7XG4gICAgICAgIHRoaXMub25XYXJuaW5nLmVtaXQoc2Vjb25kcyk7XG4gICAgICB9XG5cbiAgICAgIC8vIOinpuWPkei2heaXtuS6i+S7tlxuICAgICAgaWYgKHNlY29uZHMgPD0gMCkge1xuICAgICAgICB0aGlzLm9uVGltZW91dC5lbWl0KCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyDlrprmnJ/mo4Dmn6XnirbmgIFcbiAgICBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZVN0YXR1cygpO1xuICAgIH0sIDEwMDApO1xuXG4gICAgdGhpcy51cGRhdGVTdGF0dXMoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PSDlhazlvIDmlrnms5UgPT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICog5bu26ZW/5Lya6K+dXG4gICAqL1xuICBleHRlbmRTZXNzaW9uKCk6IHZvaWQge1xuICAgIHRoaXMuaGFuZGxlRXh0ZW5kKCk7XG4gIH1cblxuICAvKipcbiAgICog5pqC5YGcXG4gICAqL1xuICBwYXVzZSgpOiB2b2lkIHtcbiAgICB0aGlzLmhhbmRsZVRvZ2dsZVBhdXNlKCk7XG4gIH1cblxuICAvKipcbiAgICog5oGi5aSNXG4gICAqL1xuICByZXN1bWUoKTogdm9pZCB7XG4gICAgdGhpcy5oYW5kbGVUb2dnbGVQYXVzZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIOiOt+WPluaooeadv+S4iuS4i+aWh++8iOeUqOS6juiHquWumuS5ieaooeadv++8iVxuICAgKi9cbiAgZ2V0IHRlbXBsYXRlQ29udGV4dCgpOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICBjb3VudGRvd246IHRoaXMuY291bnRkb3duLFxuICAgICAgaXNXYXJuaW5nOiB0aGlzLmlzV2FybmluZyxcbiAgICAgIGlzVXJnZW50OiB0aGlzLmlzVXJnZW50LFxuICAgICAgaXNQYXVzZWQ6IHRoaXMuaXNQYXVzZWQsXG4gICAgICBjYW5FeHRlbmQ6IHRoaXMuY2FuRXh0ZW5kLFxuICAgICAgcmVtYWluaW5nRXh0ZW5kczogdGhpcy5yZW1haW5pbmdFeHRlbmRzLFxuICAgICAgZXh0ZW5kU2Vzc2lvbjogKCkgPT4gdGhpcy5oYW5kbGVFeHRlbmQoKSxcbiAgICAgIHRvZ2dsZVBhdXNlOiAoKSA9PiB0aGlzLmhhbmRsZVRvZ2dsZVBhdXNlKCksXG4gICAgICBmb3JtYXRDb3VudGRvd246IChzZWNvbmRzOiBudW1iZXIpID0+IHRoaXMuYXV0b0xvZ291dC5mb3JtYXRDb3VudGRvd24oc2Vjb25kcylcbiAgICB9O1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT0g5YaF6YOo5pa55rOVID09PT09PT09PT09PT09PT09PT09XG5cbiAgcHJpdmF0ZSB1cGRhdGVTdGF0dXMoKTogdm9pZCB7XG4gICAgdGhpcy5pc1BhdXNlZCA9IHRoaXMuYXV0b0xvZ291dC5pc0F1dG9Mb2dvdXRQYXVzZWQoKTtcbiAgICB0aGlzLmNhbkV4dGVuZCA9IHRoaXMuYXV0b0xvZ291dC5jYW5FeHRlbmRTZXNzaW9uKCk7XG4gICAgdGhpcy5yZW1haW5pbmdFeHRlbmRzID0gdGhpcy5hdXRvTG9nb3V0LmdldFJlbWFpbmluZ0V4dGVuZFRpbWVzKCk7XG4gIH1cblxuICAvKipcbiAgICog5aSE55CG5bu26ZW/5Lya6K+d77yI5qih5p2/6LCD55So77yJXG4gICAqL1xuICBoYW5kbGVFeHRlbmQoKTogdm9pZCB7XG4gICAgY29uc3Qgc3VjY2VzcyA9IHRoaXMuYXV0b0xvZ291dC5leHRlbmRTZXNzaW9uKHRoaXMuZXh0ZW5kU2Vjb25kcyk7XG4gICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgIHRoaXMub25FeHRlbmRlZC5lbWl0KHRoaXMuZXh0ZW5kU2Vjb25kcyk7XG4gICAgfVxuICAgIHRoaXMudXBkYXRlU3RhdHVzKCk7XG4gIH1cblxuICAvKipcbiAgICog5aSE55CG5pqC5YGcL+aBouWkjeWIh+aNou+8iOaooeadv+iwg+eUqO+8iVxuICAgKi9cbiAgaGFuZGxlVG9nZ2xlUGF1c2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNQYXVzZWQpIHtcbiAgICAgIHRoaXMuYXV0b0xvZ291dC5yZXN1bWUoKTtcbiAgICAgIHRoaXMub25SZXN1bWVkLmVtaXQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hdXRvTG9nb3V0LnBhdXNlKCk7XG4gICAgICB0aGlzLm9uUGF1c2VkLmVtaXQoKTtcbiAgICB9XG4gICAgdGhpcy51cGRhdGVTdGF0dXMoKTtcbiAgfVxufVxuIl19
@@ -0,0 +1,26 @@
1
+ var AutoLogoutModule_1;
2
+ import { __decorate } from "tslib";
3
+ import { NgModule } from '@angular/core';
4
+ import { CommonModule } from '@angular/common';
5
+ import { AutoLogoutComponent } from './auto-logout.component';
6
+ /**
7
+ * Auto logout module
8
+ * Note: Service uses providedIn: 'root', module only declares/exports component
9
+ */
10
+ let AutoLogoutModule = AutoLogoutModule_1 = class AutoLogoutModule {
11
+ static forRoot() {
12
+ return {
13
+ ngModule: AutoLogoutModule_1,
14
+ providers: []
15
+ };
16
+ }
17
+ };
18
+ AutoLogoutModule = AutoLogoutModule_1 = __decorate([
19
+ NgModule({
20
+ declarations: [AutoLogoutComponent],
21
+ imports: [CommonModule],
22
+ exports: [AutoLogoutComponent]
23
+ })
24
+ ], AutoLogoutModule);
25
+ export { AutoLogoutModule };
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0by1sb2dvdXQubW9kdWxlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmd4LWF1dG8tbG9nb3V0LyIsInNvdXJjZXMiOlsibGliL2F1dG8tbG9nb3V0Lm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQXVCLE1BQU0sZUFBZSxDQUFDO0FBQzlELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUU5RDs7O0dBR0c7QUFNSCxJQUFhLGdCQUFnQix3QkFBN0IsTUFBYSxnQkFBZ0I7SUFDM0IsTUFBTSxDQUFDLE9BQU87UUFDWixPQUFPO1lBQ0wsUUFBUSxFQUFFLGtCQUFnQjtZQUMxQixTQUFTLEVBQUUsRUFBRTtTQUNkLENBQUM7SUFDSixDQUFDO0NBQ0YsQ0FBQTtBQVBZLGdCQUFnQjtJQUw1QixRQUFRLENBQUM7UUFDUixZQUFZLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQztRQUNuQyxPQUFPLEVBQUUsQ0FBQyxZQUFZLENBQUM7UUFDdkIsT0FBTyxFQUFFLENBQUMsbUJBQW1CLENBQUM7S0FDL0IsQ0FBQztHQUNXLGdCQUFnQixDQU81QjtTQVBZLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlLCBNb2R1bGVXaXRoUHJvdmlkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQXV0b0xvZ291dENvbXBvbmVudCB9IGZyb20gJy4vYXV0by1sb2dvdXQuY29tcG9uZW50JztcblxuLyoqXG4gKiBBdXRvIGxvZ291dCBtb2R1bGVcbiAqIE5vdGU6IFNlcnZpY2UgdXNlcyBwcm92aWRlZEluOiAncm9vdCcsIG1vZHVsZSBvbmx5IGRlY2xhcmVzL2V4cG9ydHMgY29tcG9uZW50XG4gKi9cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW0F1dG9Mb2dvdXRDb21wb25lbnRdLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcbiAgZXhwb3J0czogW0F1dG9Mb2dvdXRDb21wb25lbnRdXG59KVxuZXhwb3J0IGNsYXNzIEF1dG9Mb2dvdXRNb2R1bGUge1xuICBzdGF0aWMgZm9yUm9vdCgpOiBNb2R1bGVXaXRoUHJvdmlkZXJzPEF1dG9Mb2dvdXRNb2R1bGU+IHtcbiAgICByZXR1cm4ge1xuICAgICAgbmdNb2R1bGU6IEF1dG9Mb2dvdXRNb2R1bGUsXG4gICAgICBwcm92aWRlcnM6IFtdXG4gICAgfTtcbiAgfVxufVxuIl19