lg-dev-manager-bridge 1.0.0 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +138 -20
- package/dist/cli.js +1 -1
- package/package.json +4 -4
- package/web/assets/{index-DmYG3adw.js → index-BV7xpt-1.js} +4 -4
- package/web/assets/{index-CTz5i-Zo.css → index-BidjmEXU.css} +1 -1
- package/web/index.html +2 -2
- package/web/assets/inter-cyrillic-400-normal-HOLc17fK.woff +0 -0
- package/web/assets/inter-cyrillic-500-normal-CxZf_p3X.woff +0 -0
- package/web/assets/inter-cyrillic-600-normal-4D_pXhcN.woff +0 -0
- package/web/assets/inter-cyrillic-700-normal-DrXBdSj3.woff +0 -0
- package/web/assets/inter-cyrillic-ext-400-normal-DQukG94-.woff +0 -0
- package/web/assets/inter-cyrillic-ext-500-normal-BmqWE9Dz.woff +0 -0
- package/web/assets/inter-cyrillic-ext-600-normal-Bcila6Z-.woff +0 -0
- package/web/assets/inter-cyrillic-ext-700-normal-LO58E6JB.woff +0 -0
- package/web/assets/inter-greek-400-normal-q2sYcFCs.woff +0 -0
- package/web/assets/inter-greek-500-normal-Xzm54t5V.woff +0 -0
- package/web/assets/inter-greek-600-normal-BZpKdvQh.woff +0 -0
- package/web/assets/inter-greek-700-normal-BUv2fZ6O.woff +0 -0
- package/web/assets/inter-greek-ext-400-normal-KugGGMne.woff +0 -0
- package/web/assets/inter-greek-ext-500-normal-2j5mBUwD.woff +0 -0
- package/web/assets/inter-greek-ext-600-normal-B8X0CLgF.woff +0 -0
- package/web/assets/inter-greek-ext-700-normal-BoQ6DsYi.woff +0 -0
- package/web/assets/inter-latin-400-normal-CyCys3Eg.woff +0 -0
- package/web/assets/inter-latin-500-normal-BL9OpVg8.woff +0 -0
- package/web/assets/inter-latin-600-normal-CiBQ2DWP.woff +0 -0
- package/web/assets/inter-latin-700-normal-BLAVimhd.woff +0 -0
- package/web/assets/inter-latin-ext-400-normal-77YHD8bZ.woff +0 -0
- package/web/assets/inter-latin-ext-500-normal-BxGbmqWO.woff +0 -0
- package/web/assets/inter-latin-ext-600-normal-CIVaiw4L.woff +0 -0
- package/web/assets/inter-latin-ext-700-normal-TidjK2hL.woff +0 -0
- package/web/assets/inter-tight-cyrillic-500-normal-CRXauZSq.woff +0 -0
- package/web/assets/inter-tight-cyrillic-600-normal-BeTasGgk.woff +0 -0
- package/web/assets/inter-tight-cyrillic-700-normal-DDZiLR3d.woff +0 -0
- package/web/assets/inter-tight-cyrillic-ext-500-normal-Dy1ZB9JY.woff +0 -0
- package/web/assets/inter-tight-cyrillic-ext-600-normal-_3ga77Eo.woff +0 -0
- package/web/assets/inter-tight-cyrillic-ext-700-normal-BFcoPt71.woff +0 -0
- package/web/assets/inter-tight-greek-500-normal-Ca-cFdRH.woff +0 -0
- package/web/assets/inter-tight-greek-600-normal-67HAlfW-.woff +0 -0
- package/web/assets/inter-tight-greek-700-normal-DU8XoIeX.woff +0 -0
- package/web/assets/inter-tight-greek-ext-500-normal-BEGGcu3x.woff +0 -0
- package/web/assets/inter-tight-greek-ext-600-normal-5gKW7MDU.woff +0 -0
- package/web/assets/inter-tight-greek-ext-700-normal-mW3dmpoD.woff +0 -0
- package/web/assets/inter-tight-latin-500-normal-pobXraBK.woff +0 -0
- package/web/assets/inter-tight-latin-600-normal-D7bG6gX1.woff +0 -0
- package/web/assets/inter-tight-latin-700-normal-DvYAVZQd.woff +0 -0
- package/web/assets/inter-tight-latin-ext-500-normal-_hLDZz_3.woff +0 -0
- package/web/assets/inter-tight-latin-ext-600-normal-BvYdOF2O.woff +0 -0
- package/web/assets/inter-tight-latin-ext-700-normal-CrlzIQ10.woff +0 -0
- package/web/assets/inter-tight-vietnamese-500-normal-CO4EMNTO.woff +0 -0
- package/web/assets/inter-tight-vietnamese-600-normal-BCXZ1BbA.woff +0 -0
- package/web/assets/inter-tight-vietnamese-700-normal-DwHBAXeT.woff +0 -0
- package/web/assets/inter-vietnamese-400-normal-Bbgyi5SW.woff +0 -0
- package/web/assets/inter-vietnamese-500-normal-mJboJaSs.woff +0 -0
- package/web/assets/inter-vietnamese-600-normal-BuLX-rYi.woff +0 -0
- package/web/assets/inter-vietnamese-700-normal-BZaoP0fm.woff +0 -0
- package/web/assets/jetbrains-mono-cyrillic-400-normal-ugxPyKxw.woff +0 -0
- package/web/assets/jetbrains-mono-cyrillic-500-normal-DJqRU3vO.woff +0 -0
- package/web/assets/jetbrains-mono-greek-400-normal-B9oWc5Lo.woff +0 -0
- package/web/assets/jetbrains-mono-greek-500-normal-D7SFKleX.woff +0 -0
- package/web/assets/jetbrains-mono-latin-400-normal-6-qcROiO.woff +0 -0
- package/web/assets/jetbrains-mono-latin-500-normal-CJOVTJB7.woff +0 -0
- package/web/assets/jetbrains-mono-latin-ext-400-normal-fXTG6kC5.woff +0 -0
- package/web/assets/jetbrains-mono-latin-ext-500-normal-ckzbgY84.woff +0 -0
- package/web/assets/jetbrains-mono-vietnamese-400-normal-CqNFfHCs.woff +0 -0
- package/web/assets/jetbrains-mono-vietnamese-500-normal-DNRqzVM1.woff +0 -0
package/README.md
CHANGED
|
@@ -1,39 +1,157 @@
|
|
|
1
|
-
#
|
|
1
|
+
# 📺 LG Dev Manager
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
Manage LG webOS TVs from your browser — rooted (Homebrew Channel) or in Developer Mode. Install apps from the
|
|
4
|
+
webOS Homebrew repository or from an IPK file, update them, install any build of [Litefin](#litefin-in-one-click)
|
|
5
|
+
in one click, browse the TV's files, open a shell, take screenshots, renew the Dev Mode session and dig into logs and
|
|
6
|
+
the luna bus.
|
|
5
7
|
|
|
6
|
-
|
|
8
|
+
🌐 **Open it:** https://lg.scoty.uk — then run the bridge on your computer (one command, below).
|
|
9
|
+
|
|
10
|
+
A web rebuild of [webosbrew/dev-manager-desktop](https://github.com/webosbrew/dev-manager-desktop), styled after
|
|
11
|
+
[Adminator](https://github.com/puikinsh/adminator-admin-dashboard).
|
|
12
|
+
|
|
13
|
+
> ⚠️ **Note:** LG Dev Manager is an independent, community project. It is not affiliated with, endorsed by or supported
|
|
14
|
+
> by LG Electronics. LG and webOS are trademarks of LG Electronics. Rooting a TV or using Developer Mode is at your own
|
|
15
|
+
> risk.
|
|
16
|
+
|
|
17
|
+
### 🎬 Add a TV, install an app and update it
|
|
18
|
+
|
|
19
|
+

|
|
20
|
+
|
|
21
|
+
### 🐞 Debug tools on a rooted TV
|
|
22
|
+
|
|
23
|
+

|
|
24
|
+
|
|
25
|
+
## 🚀 Get started
|
|
26
|
+
|
|
27
|
+
**You need [Node.js](https://nodejs.org) 22.12 or newer** (any current LTS — 22 or 24). The same version works
|
|
28
|
+
for npx and for running from the source code.
|
|
29
|
+
|
|
30
|
+
1. Install Node.js if you don't have it (`node --version` shows yours).
|
|
31
|
+
2. In a terminal, start the bridge:
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
npx lg-dev-manager-bridge@latest
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
It prints a **pairing token**. Keep the terminal open while you use the app (Ctrl+C stops it).
|
|
38
|
+
3. Open **https://lg.scoty.uk**, or the local page the bridge serves at **http://localhost:5199** — they are the
|
|
39
|
+
same app. On the **Bridge** page, paste the token.
|
|
40
|
+
4. On **Devices → Add a TV**, pick your TV from the scan. Rooted TVs log in as root (Homebrew Channel's SSH server);
|
|
41
|
+
other TVs use the Developer Mode app and its passphrase.
|
|
42
|
+
|
|
43
|
+
🍎 On macOS, the first time the bridge looks for your TV, the system asks whether your terminal may find devices on the
|
|
44
|
+
local network — choose **Allow**. 📱 Phones and tablets aren't supported: the bridge has to run on the same computer
|
|
45
|
+
as the browser.
|
|
46
|
+
|
|
47
|
+
Which page to use is up to you. 🌐 **lg.scoty.uk** always has the latest version and needs nothing installed besides the
|
|
48
|
+
bridge. 🏠 **http://localhost:5199** is served from your computer by the bridge itself, so it works even when the
|
|
49
|
+
website can't be reached. Each keeps its own list of TVs (browsers store them per site); use **Export backup** / **Import backup** on
|
|
50
|
+
the Devices page to move them.
|
|
51
|
+
|
|
52
|
+
## 🔧 How it works
|
|
53
|
+
|
|
54
|
+
Browsers can't open SSH connections, so the app comes in two parts:
|
|
7
55
|
|
|
8
|
-
```bash
|
|
9
|
-
npx lg-dev-manager-bridge@latest
|
|
10
56
|
```
|
|
57
|
+
Browser (lg.scoty.uk or localhost:5199) Your computer Your TV
|
|
58
|
+
┌──────────────────────────────────┐ WebSocket ┌────────────────────┐ SSH / SFTP ┌──────────────┐
|
|
59
|
+
│ Web app — your TVs, keys and │ ────────────▶ │ Bridge │ ─────────────▶ │ webOS │
|
|
60
|
+
│ passwords are stored only here │ 127.0.0.1 │ (npx …, Node.js) │ │ (port 22 or │
|
|
61
|
+
└──────────────────────────────────┘ + token └────────────────────┘ │ 9922) │
|
|
62
|
+
└──────────────┘
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
- 🖥️ **The web app** is a static site. Saved TVs — names, addresses, keys and passwords — live only in your browser's
|
|
66
|
+
storage. They are never sent to the website; each request sends them to your own bridge, and only to it.
|
|
67
|
+
- 🌉 **The bridge** is a small Node.js program that does the SSH, SFTP and HTTP work the browser can't. It listens on
|
|
68
|
+
`127.0.0.1` only (nothing else on your network can reach it), accepts only the app's own pages, needs the pairing
|
|
69
|
+
token, and keeps nothing on disk except that token. It offers fixed operations — list apps, install, read a log —
|
|
70
|
+
never a general "connect anywhere" tunnel.
|
|
71
|
+
- 📦 **Homebrew repository and Litefin releases** are fetched by the bridge, so the site itself talks to no one but your
|
|
72
|
+
bridge. Downloads are checked against their published SHA-256 whenever one is published.
|
|
11
73
|
|
|
12
|
-
|
|
13
|
-
|
|
74
|
+
🔄 The bridge tells the site its version; when a newer one is out, the app says so. Update by running
|
|
75
|
+
`npx lg-dev-manager-bridge@latest` again.
|
|
14
76
|
|
|
15
|
-
##
|
|
77
|
+
## ✨ What it does
|
|
16
78
|
|
|
17
|
-
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
79
|
+
- 📡 **Devices** — network scan, add rooted or Developer Mode TVs (key fetched from the TV's key server, or a new key
|
|
80
|
+
made for it), edit, test, export / import.
|
|
81
|
+
- 📦 **Apps** — installed apps with update badges; install IPK files (drag and drop); the webOS **Homebrew repository**
|
|
82
|
+
with search, details, install and update; the **Litefin repo** with every webOS build of the latest releases
|
|
83
|
+
(see [below](#litefin-in-one-click)).
|
|
84
|
+
- 📁 **Files** — browse, upload, download, preview, rename, delete over SFTP.
|
|
85
|
+
- 💻 **Terminal** — full shell in tabs, plus a simple mode for TVs without a terminal.
|
|
86
|
+
- ℹ️ **Device info** — model, webOS and firmware, Homebrew Channel status and update, screenshots, Dev Mode session
|
|
87
|
+
countdown and renewal.
|
|
88
|
+
- 🐞 **Debug** — live system log and kernel log, PmLog levels, crash reports, luna bus monitor (rooted TVs).
|
|
89
|
+
- 🧾 **Console** — every command the bridge runs on the TV, live, with the option to type your own.
|
|
22
90
|
|
|
23
|
-
|
|
91
|
+
🌗 Light and dark themes, a command palette (⌘K / Ctrl K), and no analytics or tracking.
|
|
92
|
+
|
|
93
|
+
<a id="litefin-in-one-click"></a>
|
|
94
|
+
|
|
95
|
+
## 🍿 Litefin in one click
|
|
96
|
+
|
|
97
|
+
This app started with one itch. [Litefin](https://github.com/MoazSalem/litefin), a lightweight Jellyfin client for
|
|
98
|
+
LG TVs, publishes a separate IPK for each generation of webOS (Modern, Normal, Legacy, Ultra Legacy) on every
|
|
99
|
+
release, and the Homebrew repository carries only one of them. Updating used to mean opening the GitHub releases,
|
|
100
|
+
downloading the right IPK by hand and installing it through the desktop webOS Dev Manager.
|
|
101
|
+
|
|
102
|
+
👉 **Apps → Litefin repo** does all of that in one click:
|
|
103
|
+
|
|
104
|
+
- It lists the last five Litefin releases with every webOS build side by side, read straight from GitHub by the
|
|
105
|
+
bridge (pre-releases are skipped).
|
|
106
|
+
- It suggests the right build for the active TV from its webOS version, and shows which version is installed and
|
|
107
|
+
whether a newer one is out.
|
|
108
|
+
- **Install** downloads that build, checks it against GitHub's SHA-256 when one is published, and installs it on the TV
|
|
109
|
+
— through Homebrew Channel on a rooted TV, or the Developer Mode installer otherwise. All builds are the same app,
|
|
110
|
+
so switching builds or versions simply replaces it.
|
|
111
|
+
|
|
112
|
+
## 🛠️ Run the bridge from the source code
|
|
113
|
+
|
|
114
|
+
Prefer not to use npx? Run it from a clone — it's the same bridge, and it serves the local page too:
|
|
115
|
+
|
|
116
|
+
```bash
|
|
117
|
+
git clone https://github.com/Scoty/lg-dev-manager.git
|
|
118
|
+
cd lg-dev-manager
|
|
119
|
+
corepack enable # once, to get pnpm
|
|
120
|
+
pnpm install
|
|
121
|
+
pnpm build
|
|
122
|
+
pnpm bridge # same as: node apps/bridge/dist/cli.js
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
This needs Node.js 22.12 or newer, the same as npx (the project itself is developed on Node 24, see `.nvmrc`).
|
|
126
|
+
To update: `git pull`, `pnpm install`, `pnpm build`, then `pnpm bridge`.
|
|
127
|
+
|
|
128
|
+
Bridge options (`npx lg-dev-manager-bridge --help`):
|
|
24
129
|
|
|
25
130
|
| Option | |
|
|
26
131
|
|---|---|
|
|
27
132
|
| `--port <n>` | Port to listen on (default 5199) |
|
|
28
133
|
| `--no-ui` | Don't serve the local page |
|
|
29
|
-
| `--web-root <dir>` | Serve the web app from another folder |
|
|
30
134
|
| `--allow-origin <url>` | Also accept another origin, e.g. a self-hosted copy of the web app |
|
|
31
135
|
| `--reset-token` | Make a new pairing token (un-pairs every browser) |
|
|
32
|
-
| `--version`, `--help` | |
|
|
33
136
|
|
|
34
|
-
|
|
137
|
+
## 🧪 Development
|
|
138
|
+
|
|
139
|
+
```bash
|
|
140
|
+
pnpm install
|
|
141
|
+
pnpm dev # web app (Vite, http://localhost:5173) + bridge with --dev
|
|
142
|
+
pnpm test # unit and integration tests (against a mock TV)
|
|
143
|
+
pnpm e2e # Playwright: built app + real bridge + mock TVs + fake Homebrew repo
|
|
144
|
+
pnpm dev:rig # the same rig to try by hand: http://127.0.0.1:5299, token e2e-token
|
|
145
|
+
pnpm lint && pnpm typecheck
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
`tools/mock-tv` fakes webOS TVs (SSH, luna-send, key server, logs) so everything can be tested without a TV.
|
|
149
|
+
Contributors, human or AI: read [AGENTS.md](https://github.com/Scoty/lg-dev-manager/blob/main/AGENTS.md) and [PLAN.md](https://github.com/Scoty/lg-dev-manager/blob/main/PLAN.md) first.
|
|
150
|
+
|
|
151
|
+
## 📄 License
|
|
35
152
|
|
|
36
|
-
Apache-2.0
|
|
37
|
-
[
|
|
153
|
+
[Apache-2.0](https://github.com/Scoty/lg-dev-manager/blob/main/LICENSE). You may use, change and share the app and its code freely, including commercially, as long
|
|
154
|
+
as you keep the license and the [NOTICE](https://github.com/Scoty/lg-dev-manager/blob/main/NOTICE) file that credits its authors — this project, the original
|
|
155
|
+
[dev-manager-desktop](https://github.com/webosbrew/dev-manager-desktop) by the webOS Homebrew team, and Adminator.
|
|
38
156
|
|
|
39
157
|
Not affiliated with or endorsed by LG Electronics. LG and webOS are trademarks of LG Electronics.
|
package/dist/cli.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lg-dev-manager-bridge",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.1",
|
|
4
4
|
"description": "Local bridge for LG Dev Manager: lets the web app at lg.scoty.uk (or its local copy) manage LG webOS TVs over SSH",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"author": "Scoty (https://github.com/Scoty)",
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
"README.md"
|
|
35
35
|
],
|
|
36
36
|
"engines": {
|
|
37
|
-
"node": ">=22"
|
|
37
|
+
"node": ">=22.12"
|
|
38
38
|
},
|
|
39
39
|
"dependencies": {
|
|
40
40
|
"ssh2": "^1.17.0",
|
|
@@ -49,8 +49,8 @@
|
|
|
49
49
|
"tsx": "^4.20.0",
|
|
50
50
|
"typescript": "^5.9.0",
|
|
51
51
|
"vitest": "^4.1.11",
|
|
52
|
-
"@lgdm/mock-tv": "1.0.
|
|
53
|
-
"@lgdm/protocol": "1.0.
|
|
52
|
+
"@lgdm/mock-tv": "1.0.1",
|
|
53
|
+
"@lgdm/protocol": "1.0.1"
|
|
54
54
|
},
|
|
55
55
|
"scripts": {
|
|
56
56
|
"dev": "tsx watch src/cli.ts --dev",
|