ng-connection-monitor
Version:
A lightweight Angular service to detect real internet connection using a backend ping, not navigator.onLine.
86 lines (71 loc) โข 2.46 kB
Markdown
# ๐ Angular Network Status
A lightweight Angular library to detect actual internet connectivity by pinging a backend endpoint โ **not just relying on `navigator.onLine`**.
## ๐ Why This Library?
- `navigator.onLine` is unreliable โ it only checks local connection, not real internet access.
- This library actively **pings a backend server** to verify actual connectivity.
- Exposes a clean **RxJS Observable** (`isOnline$`) to subscribe from any component or service.
- Fully compatible with **Angular v13 and above**.
---
## ๐ฆ Installation
```bash
npm install ng-connection-monitor
```
## โ๏ธ Setup
### 1. Import HttpClientModule in your AppModule
```bash
import { HttpClientModule } from '@angular/common/http';
export class AppModule {}
`````
### 2. Import NgConnectionMonitorModule in your AppModule
```bash
import { NgConnectionMonitorService } from './ng-connection-monitor.service';
export class NgConnectionMonitorModule { }
````
### 3.Use the NgConnectionMonitorService in your component
```bash
import { NgConnectionMonitorService } from 'ng-connection-monitor'; // library import
export class AppComponent {
title = 'demo';
onlineStatus:any
constructor(private networkStatusService: NgConnectionMonitorService){
this.networkStatusService.isOnline$.subscribe(data=>{
this.onlineStatus = data
console.log("data",data)
});
}
}
```
## ๐งช How It Works
- Starts a timer loop every 3 seconds
- Pings the configured backend endpoint (default: /api/ping)
- If response is 200, emits true, else false
- Keeps emitting changes only when status flips (distinctUntilChanged)
## โ
API
```bash
isOnline$ : Observable<boolean>
```
##### Subscribe to this to get real-time connectivity status.
## ๐ก Roadmap / Future Ideas
- Detect slow internet & emit custom message (e.g., "Slow Connection Detected")
- Support multi-ping strategies
- Angular signals support (v17+)
## ๐ก๏ธ License
Let me know if you want to replace [Sourav](https://github.com/souravion) with your actual GitHub handle or real name.