@microsoft/windows-admin-center-sdk
Version:
Microsoft - Windows Admin Center Shell
67 lines • 8.69 kB
JavaScript
import { Injectable } from '@angular/core';
import { Router } from '@angular/router';
import { RpcObservableAliveClient } from '@microsoft/windows-admin-center-sdk/core/rpc/alive/rpc-observable-alive-client';
import { fromEvent, merge, of } from 'rxjs';
import { debounceTime, filter, map, switchMap } from 'rxjs/operators';
import { RpcService } from './rpc.service';
import * as i0 from "@angular/core";
import * as i1 from "@angular/router";
import * as i2 from "./rpc.service";
export class UserAliveService extends RpcObservableAliveClient {
/**
* Initializes a new instance of the UserAliveService class.
*
* @param router the router object.
* @param rpc the rpc object.
*/
constructor(router, rpc) {
super(rpc);
this.router = router;
}
/**
* Starts monitoring user activity to report the shell.
*/
start() {
const waitTime = 10000;
if (this.rpc.isShell) {
return;
}
let last = 0;
let debounce = 0;
this.subscription = merge(of(0), this.router.events, fromEvent(document, 'focusin'))
// 00 15 30 => 00 15 30 (waitTime exceeds)
// 00 05 10 => 00 10 (debounce 05 is ignored)
// 00 15 20 => 00 15 30 (20 is debounce 10 seconds)
.pipe(switchMap(() => {
const now = Date.now();
// emit when the first and exceeds waitTime.
if (last === 0 || now - last >= waitTime) {
last = now;
return this.alive().pipe(map(() => true));
}
// send down to debounceTime.
debounce = now;
return of(true);
}), filter(state => state), debounceTime(waitTime), switchMap((() => {
// only send if debounce is newer than last.
if (debounce > last) {
last = debounce;
return this.alive();
}
return of(null);
})))
.subscribe();
}
/**
* Stop monitoring the user activity.
*/
stop() {
this.subscription?.unsubscribe();
}
}
/** @nocollapse */ UserAliveService.ɵfac = function UserAliveService_Factory(t) { return new (t || UserAliveService)(i0.ɵɵinject(i1.Router), i0.ɵɵinject(i2.RpcService)); };
/** @nocollapse */ UserAliveService.ɵprov = /** @pureOrBreakMyCode */ i0.ɵɵdefineInjectable({ token: UserAliveService, factory: UserAliveService.ɵfac });
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(UserAliveService, [{
type: Injectable
}], function () { return [{ type: i1.Router }, { type: i2.RpcService }]; }, null); })();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1hbGl2ZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vYW5ndWxhci9zcmMvc2VydmljZS91c2VyLWFsaXZlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sZ0ZBQWdGLENBQUM7QUFDMUgsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUMxRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7OztBQUczQyxNQUFNLE9BQU8sZ0JBQWlCLFNBQVEsd0JBQXdCO0lBRzFEOzs7OztPQUtHO0lBQ0gsWUFBb0IsTUFBYyxFQUFFLEdBQWU7UUFDL0MsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBREssV0FBTSxHQUFOLE1BQU0sQ0FBUTtJQUVsQyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxLQUFLO1FBQ1IsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUU7WUFDbEIsT0FBTztTQUNWO1FBRUQsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQ2IsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDO1FBQ2pCLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUNqQixFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQ0wsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQ2xCLFNBQVMsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQ2pDO1lBQ0QsMENBQTBDO1lBQzFDLDZDQUE2QztZQUM3QyxtREFBbUQ7YUFDbEQsSUFBSSxDQUNELFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDWCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7WUFFdkIsNENBQTRDO1lBQzVDLElBQUksSUFBSSxLQUFLLENBQUMsSUFBSSxHQUFHLEdBQUcsSUFBSSxJQUFJLFFBQVEsRUFBRTtnQkFDdEMsSUFBSSxHQUFHLEdBQUcsQ0FBQztnQkFDWCxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7YUFDN0M7WUFFRCw2QkFBNkI7WUFDN0IsUUFBUSxHQUFHLEdBQUcsQ0FBQztZQUNmLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BCLENBQUMsQ0FBQyxFQUNGLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUN0QixZQUFZLENBQUMsUUFBUSxDQUFDLEVBQ3RCLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRTtZQUNaLDRDQUE0QztZQUM1QyxJQUFJLFFBQVEsR0FBRyxJQUFJLEVBQUU7Z0JBQ2pCLElBQUksR0FBRyxRQUFRLENBQUM7Z0JBQ2hCLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2FBQ3ZCO1lBRUQsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEIsQ0FBQyxDQUFDLENBQUMsQ0FDTjthQUNBLFNBQVMsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFRDs7T0FFRztJQUNJLElBQUk7UUFDUCxJQUFJLENBQUMsWUFBWSxFQUFFLFdBQVcsRUFBRSxDQUFDO0lBQ3JDLENBQUM7O21HQWxFUSxnQkFBZ0I7cUdBQWhCLGdCQUFnQixXQUFoQixnQkFBZ0I7dUZBQWhCLGdCQUFnQjtjQUQ1QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBScGNPYnNlcnZhYmxlQWxpdmVDbGllbnQgfSBmcm9tICdAbWljcm9zb2Z0L3dpbmRvd3MtYWRtaW4tY2VudGVyLXNkay9jb3JlL3JwYy9hbGl2ZS9ycGMtb2JzZXJ2YWJsZS1hbGl2ZS1jbGllbnQnO1xyXG5pbXBvcnQgeyBmcm9tRXZlbnQsIG1lcmdlLCBvZiwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZmlsdGVyLCBtYXAsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgUnBjU2VydmljZSB9IGZyb20gJy4vcnBjLnNlcnZpY2UnO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgVXNlckFsaXZlU2VydmljZSBleHRlbmRzIFJwY09ic2VydmFibGVBbGl2ZUNsaWVudCB7XHJcbiAgICBwcml2YXRlIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5pdGlhbGl6ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIFVzZXJBbGl2ZVNlcnZpY2UgY2xhc3MuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHJvdXRlciB0aGUgcm91dGVyIG9iamVjdC5cclxuICAgICAqIEBwYXJhbSBycGMgdGhlIHJwYyBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsIHJwYzogUnBjU2VydmljZSkge1xyXG4gICAgICAgIHN1cGVyKHJwYyk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTdGFydHMgbW9uaXRvcmluZyB1c2VyIGFjdGl2aXR5IHRvIHJlcG9ydCB0aGUgc2hlbGwuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGFydCgpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCB3YWl0VGltZSA9IDEwMDAwO1xyXG4gICAgICAgIGlmICh0aGlzLnJwYy5pc1NoZWxsKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBsYXN0ID0gMDtcclxuICAgICAgICBsZXQgZGVib3VuY2UgPSAwO1xyXG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gbWVyZ2UoXHJcbiAgICAgICAgICAgICAgICBvZigwKSxcclxuICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLmV2ZW50cyxcclxuICAgICAgICAgICAgICAgIGZyb21FdmVudChkb2N1bWVudCwgJ2ZvY3VzaW4nKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIC8vIDAwIDE1IDMwID0+IDAwIDE1IDMwICh3YWl0VGltZSBleGNlZWRzKVxyXG4gICAgICAgICAgICAvLyAwMCAwNSAxMCA9PiAwMCAxMCAoZGVib3VuY2UgMDUgaXMgaWdub3JlZClcclxuICAgICAgICAgICAgLy8gMDAgMTUgMjAgPT4gMDAgMTUgMzAgKDIwIGlzIGRlYm91bmNlIDEwIHNlY29uZHMpXHJcbiAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBlbWl0IHdoZW4gdGhlIGZpcnN0IGFuZCBleGNlZWRzIHdhaXRUaW1lLlxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChsYXN0ID09PSAwIHx8IG5vdyAtIGxhc3QgPj0gd2FpdFRpbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGFzdCA9IG5vdztcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWxpdmUoKS5waXBlKG1hcCgoKSA9PiB0cnVlKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBzZW5kIGRvd24gdG8gZGVib3VuY2VUaW1lLlxyXG4gICAgICAgICAgICAgICAgICAgIGRlYm91bmNlID0gbm93O1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvZih0cnVlKTtcclxuICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgZmlsdGVyKHN0YXRlID0+IHN0YXRlKSxcclxuICAgICAgICAgICAgICAgIGRlYm91bmNlVGltZSh3YWl0VGltZSksXHJcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBvbmx5IHNlbmQgaWYgZGVib3VuY2UgaXMgbmV3ZXIgdGhhbiBsYXN0LlxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChkZWJvdW5jZSA+IGxhc3QpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGFzdCA9IGRlYm91bmNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hbGl2ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xyXG4gICAgICAgICAgICAgICAgfSkpXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3RvcCBtb25pdG9yaW5nIHRoZSB1c2VyIGFjdGl2aXR5LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RvcCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxufVxyXG4iXX0=