@cause-911/core
Version:
Run `npm install @cause-911/core --save` to add this library to your project
103 lines • 7.74 kB
JavaScript
/**
* @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=