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.
Files changed (65) hide show
  1. package/README.md +138 -20
  2. package/dist/cli.js +1 -1
  3. package/package.json +4 -4
  4. package/web/assets/{index-DmYG3adw.js → index-BV7xpt-1.js} +4 -4
  5. package/web/assets/{index-CTz5i-Zo.css → index-BidjmEXU.css} +1 -1
  6. package/web/index.html +2 -2
  7. package/web/assets/inter-cyrillic-400-normal-HOLc17fK.woff +0 -0
  8. package/web/assets/inter-cyrillic-500-normal-CxZf_p3X.woff +0 -0
  9. package/web/assets/inter-cyrillic-600-normal-4D_pXhcN.woff +0 -0
  10. package/web/assets/inter-cyrillic-700-normal-DrXBdSj3.woff +0 -0
  11. package/web/assets/inter-cyrillic-ext-400-normal-DQukG94-.woff +0 -0
  12. package/web/assets/inter-cyrillic-ext-500-normal-BmqWE9Dz.woff +0 -0
  13. package/web/assets/inter-cyrillic-ext-600-normal-Bcila6Z-.woff +0 -0
  14. package/web/assets/inter-cyrillic-ext-700-normal-LO58E6JB.woff +0 -0
  15. package/web/assets/inter-greek-400-normal-q2sYcFCs.woff +0 -0
  16. package/web/assets/inter-greek-500-normal-Xzm54t5V.woff +0 -0
  17. package/web/assets/inter-greek-600-normal-BZpKdvQh.woff +0 -0
  18. package/web/assets/inter-greek-700-normal-BUv2fZ6O.woff +0 -0
  19. package/web/assets/inter-greek-ext-400-normal-KugGGMne.woff +0 -0
  20. package/web/assets/inter-greek-ext-500-normal-2j5mBUwD.woff +0 -0
  21. package/web/assets/inter-greek-ext-600-normal-B8X0CLgF.woff +0 -0
  22. package/web/assets/inter-greek-ext-700-normal-BoQ6DsYi.woff +0 -0
  23. package/web/assets/inter-latin-400-normal-CyCys3Eg.woff +0 -0
  24. package/web/assets/inter-latin-500-normal-BL9OpVg8.woff +0 -0
  25. package/web/assets/inter-latin-600-normal-CiBQ2DWP.woff +0 -0
  26. package/web/assets/inter-latin-700-normal-BLAVimhd.woff +0 -0
  27. package/web/assets/inter-latin-ext-400-normal-77YHD8bZ.woff +0 -0
  28. package/web/assets/inter-latin-ext-500-normal-BxGbmqWO.woff +0 -0
  29. package/web/assets/inter-latin-ext-600-normal-CIVaiw4L.woff +0 -0
  30. package/web/assets/inter-latin-ext-700-normal-TidjK2hL.woff +0 -0
  31. package/web/assets/inter-tight-cyrillic-500-normal-CRXauZSq.woff +0 -0
  32. package/web/assets/inter-tight-cyrillic-600-normal-BeTasGgk.woff +0 -0
  33. package/web/assets/inter-tight-cyrillic-700-normal-DDZiLR3d.woff +0 -0
  34. package/web/assets/inter-tight-cyrillic-ext-500-normal-Dy1ZB9JY.woff +0 -0
  35. package/web/assets/inter-tight-cyrillic-ext-600-normal-_3ga77Eo.woff +0 -0
  36. package/web/assets/inter-tight-cyrillic-ext-700-normal-BFcoPt71.woff +0 -0
  37. package/web/assets/inter-tight-greek-500-normal-Ca-cFdRH.woff +0 -0
  38. package/web/assets/inter-tight-greek-600-normal-67HAlfW-.woff +0 -0
  39. package/web/assets/inter-tight-greek-700-normal-DU8XoIeX.woff +0 -0
  40. package/web/assets/inter-tight-greek-ext-500-normal-BEGGcu3x.woff +0 -0
  41. package/web/assets/inter-tight-greek-ext-600-normal-5gKW7MDU.woff +0 -0
  42. package/web/assets/inter-tight-greek-ext-700-normal-mW3dmpoD.woff +0 -0
  43. package/web/assets/inter-tight-latin-500-normal-pobXraBK.woff +0 -0
  44. package/web/assets/inter-tight-latin-600-normal-D7bG6gX1.woff +0 -0
  45. package/web/assets/inter-tight-latin-700-normal-DvYAVZQd.woff +0 -0
  46. package/web/assets/inter-tight-latin-ext-500-normal-_hLDZz_3.woff +0 -0
  47. package/web/assets/inter-tight-latin-ext-600-normal-BvYdOF2O.woff +0 -0
  48. package/web/assets/inter-tight-latin-ext-700-normal-CrlzIQ10.woff +0 -0
  49. package/web/assets/inter-tight-vietnamese-500-normal-CO4EMNTO.woff +0 -0
  50. package/web/assets/inter-tight-vietnamese-600-normal-BCXZ1BbA.woff +0 -0
  51. package/web/assets/inter-tight-vietnamese-700-normal-DwHBAXeT.woff +0 -0
  52. package/web/assets/inter-vietnamese-400-normal-Bbgyi5SW.woff +0 -0
  53. package/web/assets/inter-vietnamese-500-normal-mJboJaSs.woff +0 -0
  54. package/web/assets/inter-vietnamese-600-normal-BuLX-rYi.woff +0 -0
  55. package/web/assets/inter-vietnamese-700-normal-BZaoP0fm.woff +0 -0
  56. package/web/assets/jetbrains-mono-cyrillic-400-normal-ugxPyKxw.woff +0 -0
  57. package/web/assets/jetbrains-mono-cyrillic-500-normal-DJqRU3vO.woff +0 -0
  58. package/web/assets/jetbrains-mono-greek-400-normal-B9oWc5Lo.woff +0 -0
  59. package/web/assets/jetbrains-mono-greek-500-normal-D7SFKleX.woff +0 -0
  60. package/web/assets/jetbrains-mono-latin-400-normal-6-qcROiO.woff +0 -0
  61. package/web/assets/jetbrains-mono-latin-500-normal-CJOVTJB7.woff +0 -0
  62. package/web/assets/jetbrains-mono-latin-ext-400-normal-fXTG6kC5.woff +0 -0
  63. package/web/assets/jetbrains-mono-latin-ext-500-normal-ckzbgY84.woff +0 -0
  64. package/web/assets/jetbrains-mono-vietnamese-400-normal-CqNFfHCs.woff +0 -0
  65. package/web/assets/jetbrains-mono-vietnamese-500-normal-DNRqzVM1.woff +0 -0
package/README.md CHANGED
@@ -1,39 +1,157 @@
1
- # lg-dev-manager-bridge
1
+ # 📺 LG Dev Manager
2
2
 
3
- The local bridge for **[LG Dev Manager](https://lg.scoty.uk)** — manage LG webOS TVs (rooted or in Developer
4
- Mode) from your browser: install and update apps, the webOS Homebrew repository, files, a shell, logs and more.
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
- Browsers can't speak SSH, so this small program does it for the web app, on your own computer.
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
+ ![Adding the Living Room TV with the wizard, installing Moonfin 2.8.2 from an IPK file and updating it to 2.9.0 from the Homebrew repository](https://raw.githubusercontent.com/Scoty/lg-dev-manager/main/docs/demo-basic.webp)
20
+
21
+ ### 🐞 Debug tools on a rooted TV
22
+
23
+ ![Switching to the Bedroom TV and going through the system log, log levels, kernel log, crash reports and the luna monitor](https://raw.githubusercontent.com/Scoty/lg-dev-manager/main/docs/demo-advanced.webp)
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
- Then open **https://lg.scoty.uk** (or the local copy at **http://localhost:5199**), go to **Bridge** and paste the
13
- pairing token it printed. Needs Node.js 22 or newer.
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
- ## Safety
77
+ ## ✨ What it does
16
78
 
17
- - Listens on `127.0.0.1` only; other devices on your network can't reach it.
18
- - Accepts connections only from the app's own pages, and only with the pairing token (kept in
19
- `~/.lg-dev-manager/bridge.json`, readable only by you).
20
- - Stores nothing else: your TVs' addresses, keys and passwords stay in your browser and are sent with each request.
21
- - Offers fixed operations (list apps, install, read a log…), never a general network tunnel.
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
- ## Options
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
- Source, documentation and the from-source instructions: https://github.com/Scoty/lg-dev-manager
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 — see LICENSE and NOTICE (credits the original
37
- [dev-manager-desktop](https://github.com/webosbrew/dev-manager-desktop) and Adminator).
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
@@ -837,7 +837,7 @@ import { platform } from "os";
837
837
  import { randomUUID as randomUUID2 } from "crypto";
838
838
 
839
839
  // src/version.ts
840
- var BRIDGE_VERSION = "1.0.0";
840
+ var BRIDGE_VERSION = "1.0.1";
841
841
 
842
842
  // src/ssh/logged.ts
843
843
  import { randomUUID } from "crypto";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lg-dev-manager-bridge",
3
- "version": "1.0.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.0",
53
- "@lgdm/protocol": "1.0.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",