UNPKG

@cause-911/core

Version:

Run `npm install @cause-911/core --save` to add this library to your project

103 lines 7.74 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { EventEmitter, Injectable, Output } from '@angular/core'; import { Observable } from 'rxjs'; import { NetworkEstimates } from '../classes/network-estimates'; import * as i0 from "@angular/core"; export class NetworkInformationService { constructor() { this.estimates = new NetworkEstimates(); this.statusChange = new EventEmitter(); window.addEventListener('online', (/** * @return {?} */ () => this.onStatusChange(true))); window.addEventListener('offline', (/** * @return {?} */ () => this.onStatusChange(false))); } /** * @return {?} */ getConnectionSpeed() { return new Observable((/** * @param {?} observer * @return {?} */ observer => { if (navigator && 'connection' in navigator) { observer.next(`${navigator['connection']['downlink']} Mb/s`); observer.complete(); } else { this.estimateDownlink(observer); } })); } /** * @private * @param {?} observer * @return {?} */ estimateDownlink(observer) { /** @type {?} */ const startTime = (new Date()).getTime(); /** @type {?} */ const download = new Image(); download.onload = (/** * @return {?} */ () => { /** @type {?} */ const duration = ((new Date()).getTime() - startTime) / 1000; /** @type {?} */ const downloadSize = 104857600; /** @type {?} */ const bitsLoaded = downloadSize * 8; /** @type {?} */ const speedBps = (bitsLoaded / duration); observer.next(this.estimates.estimate(speedBps)); observer.complete(); }); download.onerror = (/** * @param {?} error * @return {?} */ (error) => { observer.error(error); }); download.src = 'https://speed.hetzner.de/100MB.bin?_=' + startTime; } /** * @private * @param {?} online * @return {?} */ onStatusChange(online) { this.statusChange.emit(online); } } NetworkInformationService.decorators = [ { type: Injectable, args: [{ providedIn: 'root' },] } ]; /** @nocollapse */ NetworkInformationService.ctorParameters = () => []; NetworkInformationService.propDecorators = { statusChange: [{ type: Output }] }; /** @nocollapse */ NetworkInformationService.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function NetworkInformationService_Factory() { return new NetworkInformationService(); }, token: NetworkInformationService, providedIn: "root" }); if (false) { /** * @type {?} * @private */ NetworkInformationService.prototype.estimates; /** @type {?} */ NetworkInformationService.prototype.statusChange; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0d29yay1pbmZvcm1hdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGNhdXNlLTkxMS9jb3JlLyIsInNvdXJjZXMiOlsibGliL3NoYXJlZC9zZXJ2aWNlcy9uZXR3b3JrLWluZm9ybWF0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBQyxZQUFZLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUMvRCxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ2hDLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLDhCQUE4QixDQUFDOztBQUs5RCxNQUFNLE9BQU8seUJBQXlCO0lBS3BDO1FBSlEsY0FBUyxHQUFxQixJQUFJLGdCQUFnQixFQUFFLENBQUM7UUFFNUMsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBR2pELE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFROzs7UUFDNUIsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFDbEMsQ0FBQztRQUNGLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTOzs7UUFDN0IsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsRUFDbkMsQ0FBQztJQUNKLENBQUM7Ozs7SUFFTSxrQkFBa0I7UUFDdkIsT0FBTyxJQUFJLFVBQVU7Ozs7UUFBQyxRQUFRLENBQUMsRUFBRTtZQUMvQixJQUFJLFNBQVMsSUFBSSxZQUFZLElBQUksU0FBUyxFQUFFO2dCQUMxQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDN0QsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO2FBQ3JCO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUNqQztRQUNILENBQUMsRUFBQyxDQUFDO0lBQ0wsQ0FBQzs7Ozs7O0lBRU8sZ0JBQWdCLENBQUMsUUFBUTs7Y0FDekIsU0FBUyxHQUFHLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRTs7Y0FDbEMsUUFBUSxHQUFHLElBQUksS0FBSyxFQUFFO1FBRTVCLFFBQVEsQ0FBQyxNQUFNOzs7UUFBRyxHQUFHLEVBQUU7O2tCQUNmLFFBQVEsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxHQUFHLFNBQVMsQ0FBQyxHQUFHLElBQUk7O2tCQUN0RCxZQUFZLEdBQUcsU0FBUzs7a0JBQ3hCLFVBQVUsR0FBRyxZQUFZLEdBQUcsQ0FBQzs7a0JBQzdCLFFBQVEsR0FBRyxDQUFDLFVBQVUsR0FBRyxRQUFRLENBQUM7WUFFeEMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQ2pELFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN0QixDQUFDLENBQUEsQ0FBQztRQUNGLFFBQVEsQ0FBQyxPQUFPOzs7O1FBQUcsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUMzQixRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hCLENBQUMsQ0FBQSxDQUFDO1FBQ0YsUUFBUSxDQUFDLEdBQUcsR0FBRyx1Q0FBdUMsR0FBRyxTQUFTLENBQUM7SUFDckUsQ0FBQzs7Ozs7O0lBRU8sY0FBYyxDQUFDLE1BQWU7UUFDcEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDakMsQ0FBQzs7O1lBakRGLFVBQVUsU0FBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQjs7Ozs7MkJBSUUsTUFBTTs7Ozs7Ozs7SUFGUCw4Q0FBNkQ7O0lBRTdELGlEQUFtRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RXZlbnRFbWl0dGVyLCBJbmplY3RhYmxlLCBPdXRwdXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcbmltcG9ydCB7TmV0d29ya0VzdGltYXRlc30gZnJvbSAnLi4vY2xhc3Nlcy9uZXR3b3JrLWVzdGltYXRlcyc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIE5ldHdvcmtJbmZvcm1hdGlvblNlcnZpY2Uge1xuICBwcml2YXRlIGVzdGltYXRlczogTmV0d29ya0VzdGltYXRlcyA9IG5ldyBOZXR3b3JrRXN0aW1hdGVzKCk7XG5cbiAgQE91dHB1dCgpIHB1YmxpYyBzdGF0dXNDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ29ubGluZScsXG4gICAgICAgICgpID0+IHRoaXMub25TdGF0dXNDaGFuZ2UodHJ1ZSlcbiAgICApO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdvZmZsaW5lJyxcbiAgICAgICAgKCkgPT4gdGhpcy5vblN0YXR1c0NoYW5nZShmYWxzZSlcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGdldENvbm5lY3Rpb25TcGVlZCgpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShvYnNlcnZlciA9PiB7XG4gICAgICBpZiAobmF2aWdhdG9yICYmICdjb25uZWN0aW9uJyBpbiBuYXZpZ2F0b3IpIHtcbiAgICAgICAgb2JzZXJ2ZXIubmV4dChgJHtuYXZpZ2F0b3JbJ2Nvbm5lY3Rpb24nXVsnZG93bmxpbmsnXX0gTWIvc2ApO1xuICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5lc3RpbWF0ZURvd25saW5rKG9ic2VydmVyKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZXN0aW1hdGVEb3dubGluayhvYnNlcnZlcik6IHZvaWQge1xuICAgIGNvbnN0IHN0YXJ0VGltZSA9IChuZXcgRGF0ZSgpKS5nZXRUaW1lKCk7XG4gICAgY29uc3QgZG93bmxvYWQgPSBuZXcgSW1hZ2UoKTtcblxuICAgIGRvd25sb2FkLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGR1cmF0aW9uID0gKChuZXcgRGF0ZSgpKS5nZXRUaW1lKCkgLSBzdGFydFRpbWUpIC8gMTAwMDtcbiAgICAgIGNvbnN0IGRvd25sb2FkU2l6ZSA9IDEwNDg1NzYwMDtcbiAgICAgIGNvbnN0IGJpdHNMb2FkZWQgPSBkb3dubG9hZFNpemUgKiA4O1xuICAgICAgY29uc3Qgc3BlZWRCcHMgPSAoYml0c0xvYWRlZCAvIGR1cmF0aW9uKTtcblxuICAgICAgb2JzZXJ2ZXIubmV4dCh0aGlzLmVzdGltYXRlcy5lc3RpbWF0ZShzcGVlZEJwcykpO1xuICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICB9O1xuICAgIGRvd25sb2FkLm9uZXJyb3IgPSAoZXJyb3IpID0+IHtcbiAgICAgIG9ic2VydmVyLmVycm9yKGVycm9yKTtcbiAgICB9O1xuICAgIGRvd25sb2FkLnNyYyA9ICdodHRwczovL3NwZWVkLmhldHpuZXIuZGUvMTAwTUIuYmluP189JyArIHN0YXJ0VGltZTtcbiAgfVxuXG4gIHByaXZhdGUgb25TdGF0dXNDaGFuZ2Uob25saW5lOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5zdGF0dXNDaGFuZ2UuZW1pdChvbmxpbmUpO1xuICB9XG59XG4iXX0=