Renovate Bot 5bf582f3ad
All checks were successful
ci/woodpecker/push/push Pipeline was successful
fix(deps): update dependency vue-router to v5 (#12)
This PR contains the following updates:

| Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
| [vue-router](https://router.vuejs.org) ([source](https://github.com/vuejs/router)) | [`^4.4.0` → `^5.0.0`](https://renovatebot.com/diffs/npm/vue-router/4.6.4/5.0.3) | ![age](https://developer.mend.io/api/mc/badges/age/npm/vue-router/5.0.3?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/vue-router/4.6.4/5.0.3?slim=true) |

---

### Release Notes

<details>
<summary>vuejs/router (vue-router)</summary>

### [`v5.0.3`](https://github.com/vuejs/router/releases/tag/v5.0.3)

[Compare Source](https://github.com/vuejs/router/compare/v5.0.2...v5.0.3)

#####    🚨 Breaking Changes

- **experimental**:
  - Make miss() throw internally and return never  -  by [@&#8203;posva](https://github.com/posva) [<samp>(077e1)</samp>](https://github.com/vuejs/router/commit/077e1740)
  - Add reroute() and deprecate NavigationResult  -  by [@&#8203;posva](https://github.com/posva) [<samp>(308db)</samp>](https://github.com/vuejs/router/commit/308db14a)
  - Remove selectNavigationResult  -  by [@&#8203;posva](https://github.com/posva) [<samp>(9e88a)</samp>](https://github.com/vuejs/router/commit/9e88aed4)

#####    🚀 Features

- Support \_parent in nested folders  -  by [@&#8203;posva](https://github.com/posva) [<samp>(0a37f)</samp>](https://github.com/vuejs/router/commit/0a37f474)
- Warn on \_parent conflict  -  by [@&#8203;posva](https://github.com/posva) [<samp>(182fe)</samp>](https://github.com/vuejs/router/commit/182fe03a)
- Set \_parent as non matchable by default  -  by [@&#8203;posva](https://github.com/posva) [<samp>(8f91c)</samp>](https://github.com/vuejs/router/commit/8f91c99f)
- Warn on conflicting components for routes  -  by [@&#8203;posva](https://github.com/posva) [<samp>(34ace)</samp>](https://github.com/vuejs/router/commit/34aceb98)
- Use type module  -  by [@&#8203;posva](https://github.com/posva) [<samp>(dc9ff)</samp>](https://github.com/vuejs/router/commit/dc9ffe81)
- Add deprecation warning for next() callback in navigation guards  -  by [@&#8203;posva](https://github.com/posva) [<samp>(797f5)</samp>](https://github.com/vuejs/router/commit/797f55de)
- Extract alias from definePage  -  by [@&#8203;posva](https://github.com/posva) [<samp>(835df)</samp>](https://github.com/vuejs/router/commit/835df1ff)
- Display aliases in logs  -  by [@&#8203;posva](https://github.com/posva) [<samp>(7aa60)</samp>](https://github.com/vuejs/router/commit/7aa607fc)
- Deprecate new NavigationResult(to) in favor of reroute(to)  -  by [@&#8203;posva](https://github.com/posva) [<samp>(382e3)</samp>](https://github.com/vuejs/router/commit/382e34b4)
- **experimental**:
  - Handle aliasOf in resolvers  -  by [@&#8203;posva](https://github.com/posva) [<samp>(8fe45)</samp>](https://github.com/vuejs/router/commit/8fe453c9)
  - Generate aliases from override in resolver  -  by [@&#8203;posva](https://github.com/posva) [<samp>(a00ac)</samp>](https://github.com/vuejs/router/commit/a00ac355)
  - Warn against non absolute aliases  -  by [@&#8203;posva](https://github.com/posva) [<samp>(476c6)</samp>](https://github.com/vuejs/router/commit/476c6697)

#####    🐞 Bug Fixes

- Avoid non matchable routes in auto-routes ��-  by [@&#8203;posva](https://github.com/posva) [<samp>(48649)</samp>](https://github.com/vuejs/router/commit/48649030)
- Handle quotes in d.ts  -  by [@&#8203;posva](https://github.com/posva) [<samp>(d7764)</samp>](https://github.com/vuejs/router/commit/d7764700)
- Avoid route entry in map for \_parent  -  by [@&#8203;posva](https://github.com/posva) [<samp>(1dfcc)</samp>](https://github.com/vuejs/router/commit/1dfccf82)
- Handle nested groups  -  by [@&#8203;posva](https://github.com/posva) [<samp>(4a4be)</samp>](https://github.com/vuejs/router/commit/4a4bed94)
- Stable route ordering for group folders with same path  -  by [@&#8203;posva](https://github.com/posva) [<samp>(1db94)</samp>](https://github.com/vuejs/router/commit/1db9467c)
- Correct route ordering for group nodes with inflated scores  -  by [@&#8203;posva](https://github.com/posva) [<samp>(515f4)</samp>](https://github.com/vuejs/router/commit/515f4843)
- Cleanup old route overrides  -  by [@&#8203;posva](https://github.com/posva) [<samp>(b28a7)</samp>](https://github.com/vuejs/router/commit/b28a71e2)
- Remove name from \_parent.vue files  -  by [@&#8203;posva](https://github.com/posva) [<samp>(6e8f1)</samp>](https://github.com/vuejs/router/commit/6e8f1a11)
- **ci**:
  - Format sponsor files before change detection  -  by [@&#8203;posva](https://github.com/posva) [<samp>(f68d6)</samp>](https://github.com/vuejs/router/commit/f68d6fad)
  - Use manual git commit in update-sponsors  -  by [@&#8203;posva](https://github.com/posva) [<samp>(8ee99)</samp>](https://github.com/vuejs/router/commit/8ee992cb)
- **experimental**:
  - Resolve TS errors in resolver/router type hierarchy  -  by [@&#8203;posva](https://github.com/posva) [<samp>(a86f1)</samp>](https://github.com/vuejs/router/commit/a86f1f3a)
- **types**:
  - Relax RouteMapGeneric constraint for interface-based RouteNamedMap  -  by [@&#8203;YevheniiKotyrlo](https://github.com/YevheniiKotyrlo) in [#&#8203;2624](https://github.com/vuejs/router/issues/2624) [<samp>(cdf7b)</samp>](https://github.com/vuejs/router/commit/cdf7b442)
- **volar**:
  - Use `ts.getTokenPosOfNode` instead of `node.getStart`  -  by [@&#8203;KazariEX](https://github.com/KazariEX) in [#&#8203;2630](https://github.com/vuejs/router/issues/2630) [<samp>(0b050)</samp>](https://github.com/vuejs/router/commit/0b0504bd)

#####    🏎 Performance

- Avoid merging empty object in record  -  by [@&#8203;posva](https://github.com/posva) [<samp>(4213e)</samp>](https://github.com/vuejs/router/commit/4213eb66)

#####     [View changes on GitHub](https://github.com/vuejs/router/compare/v5.0.2...v5.0.3)

### [`v5.0.2`](https://github.com/vuejs/router/releases/tag/v5.0.2)

[Compare Source](https://github.com/vuejs/router/compare/v5.0.1...v5.0.2)

#####    🐞 Bug Fixes

- Remove devtools from iife build  -  by [@&#8203;posva](https://github.com/posva) [<samp>(58c03)</samp>](https://github.com/vuejs/router/commit/58c033c0)
- Loose version check vue-router  -  by [@&#8203;posva](https://github.com/posva) [<samp>(90e4b)</samp>](https://github.com/vuejs/router/commit/90e4bb80)
- **volar**: Empty options  -  by [@&#8203;posva](https://github.com/posva) [<samp>(02275)</samp>](https://github.com/vuejs/router/commit/022758a7)

#####     [View changes on GitHub](https://github.com/vuejs/router/compare/v5.0.1...v5.0.2)

### [`v5.0.1`](https://github.com/vuejs/router/releases/tag/v5.0.1)

[Compare Source](https://github.com/vuejs/router/compare/v5.0.0...v5.0.1)

#####    🐞 Bug Fixes

- **volar**: Make typed plugin work with vue-tsc  -  by [@&#8203;peter50216](https://github.com/peter50216) in [#&#8203;2607](https://github.com/vuejs/router/issues/2607) [<samp>(7845e)</samp>](https://github.com/vuejs/router/commit/7845e327)

#####     [View changes on GitHub](https://github.com/vuejs/router/compare/v5.0.0...v5.0.1)

### [`v5.0.0`](https://github.com/vuejs/router/releases/tag/v5.0.0)

[Compare Source](https://github.com/vuejs/router/compare/v4.6.4...v5.0.0)

Vue Router 5 is a *boring* release, it merges [unplugin-vue-router](https://uvr.esm.is) into the core package with no breaking changes. The only exception is that the *iife* build no longer includes `@vue/devtools-api` because it has been upgraded to v8 and does not expose an IIFE build itself. You can track that change in [this issue](https://github.com/vuejs/devtools/issues/989). See [the migration guide](https://router.vuejs.org/guide/migration/v4-to-v5.html) for instructions on how to upgrade from unplugin-vue-router to Vue Router 5.

#####    🚀 Features

- **experimental**: Query params are optional by default  -  by [@&#8203;posva](https://github.com/posva) [<samp>(78913)</samp>](https://github.com/vuejs/router/commit/78913551)
- Add volar plugins  -  by [@&#8203;posva](https://github.com/posva) [<samp>(530ac)</samp>](https://github.com/vuejs/router/commit/530ac53e)
- Add data loaders as experimental  -  by [@&#8203;posva](https://github.com/posva) [<samp>(ab895)</samp>](https://github.com/vuejs/router/commit/ab89513d)
- Add route json schema  -  by [@&#8203;posva](https://github.com/posva) [<samp>(20675)</samp>](https://github.com/vuejs/router/commit/2067515a)
- Upgrade devtools-api to v7  -  by [@&#8203;posva](https://github.com/posva) [<samp>(17b84)</samp>](https://github.com/vuejs/router/commit/17b841b8)
- Upgrade devtools to v8  -  by [@&#8203;posva](https://github.com/posva) [<samp>(b8aa2)</samp>](https://github.com/vuejs/router/commit/b8aa2395)
- Runtime error on missing param parsers  -  by [@&#8203;posva](https://github.com/posva) [<samp>(3444b)</samp>](https://github.com/vuejs/router/commit/3444bc94)
- **volar**: Allow rootDir option  -  by [@&#8203;posva](https://github.com/posva) [<samp>(df65a)</samp>](https://github.com/vuejs/router/commit/df65a864)

#####    🐞 Bug Fixes

- Avoid breaking older browsers support  -  by [@&#8203;posva](https://github.com/posva) [<samp>(c7ba4)</samp>](https://github.com/vuejs/router/commit/c7ba4507)
- Trigger navigation guards when keep-alive component is reactivated for different route  -  by [@&#8203;babu-ch](https://github.com/babu-ch) and [@&#8203;posva](https://github.com/posva) in [#&#8203;2604](https://github.com/vuejs/router/issues/2604) [<samp>(c7735)</samp>](https://github.com/vuejs/router/commit/c7735d30)
- Add automatic types for param parsers  -  by [@&#8203;posva](https://github.com/posva) [<samp>(0fb5d)</samp>](https://github.com/vuejs/router/commit/0fb5da34)
- Param parsers when dts is not at root  -  by [@&#8203;posva](https://github.com/posva) [<samp>(16b39)</samp>](https://github.com/vuejs/router/commit/16b39ff7)
- Expose resolveOptions for unplugin  -  by [@&#8203;posva](https://github.com/posva) [<samp>(35543)</samp>](https://github.com/vuejs/router/commit/355431b6)
- Escape tildes in paths  -  by [@&#8203;posva](https://github.com/posva) [<samp>(aac2e)</samp>](https://github.com/vuejs/router/commit/aac2e265)
- **volar**: Upgrade config read  -  by [@&#8203;posva](https://github.com/posva) [<samp>(e3024)</samp>](https://github.com/vuejs/router/commit/e3024d19)

#####     [View changes on GitHub](https://github.com/vuejs/router/compare/v4.6.4...v5.0.0)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4zMS4xIiwidXBkYXRlZEluVmVyIjoiNDMuMzEuMSIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==-->

Reviewed-on: https://git.keligrubb.com/keligrubb/kestrelos/pulls/12
Co-authored-by: Renovate Bot <renovate@keligrubb.com>
Co-committed-by: Renovate Bot <renovate@keligrubb.com>
2026-02-23 03:44:55 +00:00
2026-02-22 20:44:40 +00:00
2026-02-10 23:32:26 -05:00
2026-02-10 23:32:26 -05:00
2026-02-12 19:50:44 +00:00
2026-02-22 20:44:40 +00:00
2026-02-12 19:50:44 +00:00
2026-02-12 19:50:44 +00:00
2026-02-22 03:34:05 +00:00

KestrelOS

Tactical Operations Center (TOC) for OSINT feeds. Map view with offline-capable tiles and clickable camera/feed sources; click a marker to view the live stream.

KestrelOS map UI

Stack

  • Nuxt 4, JavaScript, Tailwind CSS, ESLint, Vitest
  • Leaflet + leaflet.offline (offline map and OSM tile caching)
  • Mediasoup + mediasoup-client (WebRTC live streaming)
  • Docker and Helm for deployment

Setup

npm install
npm run dev

Open http://localhost:3000. The app requires login by default; you will see the login page until you sign in.

HTTPS for local dev (camera / geolocation on your phone)

Camera and geolocation in the browser require a secure context (HTTPS) when you open the app from your phone. To test Share live from a device on your LAN without buying a domain or cert:

  1. Generate a self-signed cert (once). Use your machine's LAN IP so the phone can use it:

    chmod +x scripts/gen-dev-cert.sh
    ./scripts/gen-dev-cert.sh 192.168.1.123
    

    Replace 192.168.1.123 with your server's IP.

  2. Start the dev server (it will use HTTPS if .dev-certs/ exists):

    npm run dev
    
  3. On your phone, open https://192.168.1.123:3000 (same IP you passed above). Accept the browser's "untrusted certificate" warning once (e.g. Advanced → Proceed). Then log in and use Share live; camera and location will work.

Without the certs, npm run dev still runs over HTTP as before.

Note: If you see a warning about NODE_TLS_REJECT_UNAUTHORIZED=0, you can ignore it for local development with self-signed certificates. The server will still work correctly.

WebRTC Live Streaming

The Share live feature uses WebRTC for real-time video streaming from mobile browsers. It requires:

  • HTTPS (for camera/geolocation access on mobile)
  • Mediasoup server (runs automatically in the Nuxt process)
  • mediasoup-client (browser library, included automatically)

Streaming from a phone on your LAN: The server auto-detects your machine's LAN IP (from network interfaces) and uses it for WebRTC. Open https://:3000 on both phone and laptop (same IP as for your dev cert). To override (e.g. Docker or multiple NICs), set MEDIASOUP_ANNOUNCED_IP. Ensure firewall allows UDP/TCP ports 40000-49999 on the server.

See docs/live-streaming.md for setup and usage.

ATAK / CoT (Cursor on Target)

KestrelOS can act as a TAK Server so ATAK and iTAK devices connect and share positions. No plugins: in ATAK, add a Server connection (host = KestrelOS, port 8089 for CoT). Check Use Authentication and enter your KestrelOS username and password (local users use their login password; OIDC users must set an ATAK password once under Account in the web app). Devices relay CoT to each other (team members see each other on the ATAK map) and appear on the KestrelOS web map; they drop off after ~90 seconds if no updates. Optional: set COT_TTL_MS, COT_REQUIRE_AUTH; CoT runs on port 8089 (default).

Scripts

  • npm run dev - development server
  • npm run build - production build
  • npm run test - run tests
  • npm run test:coverage - run tests with coverage (85% threshold)
  • npm run test:e2e - Playwright E2E tests
  • npm run lint - ESLint (zero warnings)

Documentation

Full docs are in the docs/ directory: installation (npm, Docker, Helm), authentication (local login, OIDC), map and cameras (adding IPTV, ALPR, CCTV, NVR, etc.), ATAK and iTAK, and Share live (mobile device as live camera).

Configuration

  • Devices: Manage cameras/devices via the API (/api/devices); see Map and cameras. Each device needs name, device_type, lat, lng, stream_url, and source_type (mjpeg or hls).
  • Environment: No required env vars for basic run. For production, set HOST=0.0.0.0 and expose ports 3000 (web/API) and 8089 (CoT). Set COT_TTL_MS=90000, COT_REQUIRE_AUTH=true. For TLS use .dev-certs/ or set COT_SSL_CERT and COT_SSL_KEY.
  • Authentication: The login page always offers password sign-in (local). Optionally set BOOTSTRAP_EMAIL and BOOTSTRAP_PASSWORD before the first run to create the first admin; otherwise a default admin is created and its credentials are printed in the terminal. To also show an OIDC sign-in button, configure OIDC_ISSUER, OIDC_CLIENT_ID, OIDC_CLIENT_SECRET, and optionally OIDC_LABEL, OIDC_REDIRECT_URI. See docs/auth.md for local login, OIDC config, and sign up.
  • Bootstrap admin (when using local auth): The server initializes the database and runs bootstrap at startup. On first run (no users in the database), it creates the first admin. If you set BOOTSTRAP_EMAIL and BOOTSTRAP_PASSWORD before starting, that account is created. If you don't set them, a default admin is created (identifier: admin) with a random password and the credentials are printed in the terminal-copy them and sign in at /login, then change the password or add users via Members. Use Members to change roles (admin, leader, member). Only admins can change roles; admins and leaders can edit POIs.
  • Database: SQLite file at data/kestrelos.db (created automatically). Contains users, sessions, and POIs.

Docker

docker build -t kestrelos:latest .
docker run -p 3000:3000 -p 8089:8089 kestrelos:latest

Kubernetes (Helm)

From Gitea registry:

helm repo add keligrubb --username YOUR_USER --password YOUR_TOKEN https://git.keligrubb.com/api/packages/keligrubb/helm
helm repo update
helm install kestrelos keligrubb/kestrelos

From source:

helm install kestrelos ./helm/kestrelos

Health: GET /health (overview), GET /health/live (liveness), GET /health/ready (readiness). Probes are configured in the Helm chart. Optional: enable Ingress in helm/kestrelos/values.yaml.

Releases

Merges to main trigger a semver release. Use one of these prefixes in your PR title to set the version bump:

  • major: - breaking changes
  • minor: - new features
  • patch: - bug fixes, docs (default if no prefix)

Example: minor: Add map layer toggle

Security

  • Device data is validated server-side; only valid entries are returned.
  • Stream URLs are sanitized to http:// or https:// only; other protocols are rejected.

License

MIT

Description
No description provided
Readme 2.5 MiB
v1.0.7 Latest
2026-03-06 02:30:45 +00:00
Languages
JavaScript 69.8%
Vue 27.3%
CSS 1.6%
Shell 1.1%
Smarty 0.1%
Other 0.1%