@goodandready/dsh-lanmode 0.6.0 → 0.6.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/lib/bridge.js +13 -2
- package/package.json +1 -1
package/lib/bridge.js
CHANGED
|
@@ -154,7 +154,17 @@ export function startDirectBridge(ctx, options) {
|
|
|
154
154
|
const lines = ['HTTP/1.1 101 Switching Protocols']
|
|
155
155
|
for (const [key, value] of Object.entries(answer.headers)) lines.push(key + ': ' + value)
|
|
156
156
|
socket.write(lines.join('\r\n') + '\r\n\r\n')
|
|
157
|
-
|
|
157
|
+
// Хвосты рукопожатия — байты, пришедшие в том же пакете, что и ответ. Их
|
|
158
|
+
// надо переложить в ПРОТИВОПОЛОЖНУЮ сторону, и это то место, где мост
|
|
159
|
+
// ошибался с первого выпуска: upstreamHead уходил в socket.unshift, то
|
|
160
|
+
// есть в читающую сторону клиентского сокета. Мост притворялся, будто эти
|
|
161
|
+
// байты прислал браузер, и по конвейеру возвращал их харнессу. Первый
|
|
162
|
+
// кадр — а харнесс шлёт его сразу после рукопожатия — до браузера не
|
|
163
|
+
// доезжал никогда. Снаружи это выглядело так: разговор открыт, сообщение
|
|
164
|
+
// отправлено, а в чате пусто.
|
|
165
|
+
if (upstreamHead && upstreamHead.length) socket.write(upstreamHead)
|
|
166
|
+
if (head && head.length) upstreamSocket.write(head)
|
|
167
|
+
|
|
158
168
|
upstreamSocket.pipe(socket)
|
|
159
169
|
socket.pipe(upstreamSocket)
|
|
160
170
|
const drop = () => { try { upstreamSocket.destroy() } catch (already) { /* уже мертво */ } }
|
|
@@ -162,7 +172,8 @@ export function startDirectBridge(ctx, options) {
|
|
|
162
172
|
socket.on('close', drop)
|
|
163
173
|
})
|
|
164
174
|
upstream.on('error', () => { try { socket.destroy() } catch (already) { /* уже мертво */ } })
|
|
165
|
-
|
|
175
|
+
// head сюда не пишем: это байты уже установленного соединения, а не тело
|
|
176
|
+
// запроса. Их место — в upstreamSocket, сразу после рукопожатия.
|
|
166
177
|
upstream.end()
|
|
167
178
|
}
|
|
168
179
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@goodandready/dsh-lanmode",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.1",
|
|
4
4
|
"description": "LAN and reverse-proxy access for the DeepSeek Harness Web UI: returns the settings service on pages that are not localhost, fills in the Web APIs the browser withholds on plain HTTP, and can open a listener of its own so nothing else is needed.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|