green-screen-proxy 1.2.2 → 1.2.3
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/dist/controller.d.ts +7 -0
- package/dist/controller.d.ts.map +1 -1
- package/dist/controller.js +26 -3
- package/dist/controller.js.map +1 -1
- package/dist/protocols/tn5250-handler.d.ts +29 -5
- package/dist/protocols/tn5250-handler.d.ts.map +1 -1
- package/dist/protocols/tn5250-handler.js +170 -92
- package/dist/protocols/tn5250-handler.js.map +1 -1
- package/dist/routes.d.ts.map +1 -1
- package/dist/routes.js +42 -9
- package/dist/routes.js.map +1 -1
- package/dist/session.d.ts +16 -0
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +48 -0
- package/dist/session.js.map +1 -1
- package/dist/tn5250/parser.d.ts +10 -4
- package/dist/tn5250/parser.d.ts.map +1 -1
- package/dist/tn5250/parser.js +177 -28
- package/dist/tn5250/parser.js.map +1 -1
- package/dist/tn5250/screen.d.ts +4 -0
- package/dist/tn5250/screen.d.ts.map +1 -1
- package/dist/tn5250/screen.js.map +1 -1
- package/dist/websocket.d.ts +12 -0
- package/dist/websocket.d.ts.map +1 -1
- package/dist/websocket.js +117 -10
- package/dist/websocket.js.map +1 -1
- package/package.json +1 -1
package/dist/routes.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Router } from 'express';
|
|
2
|
-
import { createSession, getSession, getDefaultSession, destroySession, } from './session.js';
|
|
2
|
+
import { createSession, getSession, getDefaultSession, destroySession, gracefullyDestroySession, } from './session.js';
|
|
3
3
|
import { TN5250Handler } from './protocols/index.js';
|
|
4
|
-
import { broadcastScreenToSession } from './websocket.js';
|
|
4
|
+
import { broadcastScreenToSession, destroyWsSession } from './websocket.js';
|
|
5
5
|
const router = Router();
|
|
6
6
|
/** Resolve session from header, query param, or default. Resets idle timer on access. */
|
|
7
7
|
function resolveSession(req) {
|
|
@@ -42,13 +42,20 @@ router.post('/connect', async (req, res) => {
|
|
|
42
42
|
await session.connect(host, port, Object.keys(options).length > 0 ? options : undefined);
|
|
43
43
|
// Auto-sign-in if credentials provided and handler supports it
|
|
44
44
|
if (username && password && session.handler instanceof TN5250Handler) {
|
|
45
|
-
const
|
|
46
|
-
if (
|
|
47
|
-
|
|
45
|
+
const result = await session.handler.performAutoSignIn(username, password);
|
|
46
|
+
if (result) {
|
|
47
|
+
if (result.authenticated) {
|
|
48
|
+
session.markAuthenticated(username);
|
|
49
|
+
}
|
|
50
|
+
// On failed sign-in (host still showing the sign-on screen, e.g.
|
|
51
|
+
// wrong password or CPF1220 device-session-limit), DO NOT mark
|
|
52
|
+
// as authenticated. The caller still receives the screen so the
|
|
53
|
+
// error message is visible to the user, but gracefulDestroy will
|
|
54
|
+
// not attempt a futile SIGNOFF on the sign-on screen.
|
|
48
55
|
return res.json({
|
|
49
56
|
success: true,
|
|
50
57
|
sessionId: session.id,
|
|
51
|
-
...screen,
|
|
58
|
+
...result.screen,
|
|
52
59
|
});
|
|
53
60
|
}
|
|
54
61
|
}
|
|
@@ -68,8 +75,9 @@ router.post('/connect', async (req, res) => {
|
|
|
68
75
|
});
|
|
69
76
|
}
|
|
70
77
|
});
|
|
71
|
-
// POST /disconnect
|
|
72
|
-
|
|
78
|
+
// POST /disconnect — graceful teardown: SIGNOFF + TCP close for
|
|
79
|
+
// authenticated sessions, plain destroy otherwise.
|
|
80
|
+
router.post('/disconnect', async (req, res) => {
|
|
73
81
|
const requestedId = req.headers['x-session-id'] || '(none)';
|
|
74
82
|
const session = resolveSession(req);
|
|
75
83
|
if (!session) {
|
|
@@ -77,9 +85,34 @@ router.post('/disconnect', (req, res) => {
|
|
|
77
85
|
return res.json({ success: true }); // Already disconnected
|
|
78
86
|
}
|
|
79
87
|
console.log(`[disconnect] Destroying session ${session.id.slice(0, 8)} (requested=${requestedId.slice(0, 8)})`);
|
|
80
|
-
|
|
88
|
+
await gracefullyDestroySession(session.id);
|
|
81
89
|
res.json({ success: true });
|
|
82
90
|
});
|
|
91
|
+
// POST /disconnect-beacon — unload-friendly teardown endpoint for
|
|
92
|
+
// `navigator.sendBeacon`. Accepts a sessionId in the JSON body (beacon
|
|
93
|
+
// requests can't set custom headers reliably) and tears down the session
|
|
94
|
+
// whether it was created via REST or WebSocket. Fire-and-forget from the
|
|
95
|
+
// client's perspective; the response is primarily for manual testing.
|
|
96
|
+
router.post('/disconnect-beacon', async (req, res) => {
|
|
97
|
+
const sessionId = (req.body && typeof req.body.sessionId === 'string' ? req.body.sessionId : undefined)
|
|
98
|
+
|| req.query.sessionId;
|
|
99
|
+
if (!sessionId) {
|
|
100
|
+
return res.status(400).json({ success: false, error: 'sessionId is required' });
|
|
101
|
+
}
|
|
102
|
+
console.log(`[disconnect-beacon] Tearing down session ${sessionId.slice(0, 8)}`);
|
|
103
|
+
try {
|
|
104
|
+
// Run both teardown paths — each is a no-op if the session isn't in
|
|
105
|
+
// that registry. WS-created sessions are NOT in the REST store.
|
|
106
|
+
await Promise.allSettled([
|
|
107
|
+
gracefullyDestroySession(sessionId),
|
|
108
|
+
destroyWsSession(sessionId),
|
|
109
|
+
]);
|
|
110
|
+
res.json({ success: true });
|
|
111
|
+
}
|
|
112
|
+
catch (err) {
|
|
113
|
+
res.status(500).json({ success: false, error: err.message || 'Beacon teardown failed' });
|
|
114
|
+
}
|
|
115
|
+
});
|
|
83
116
|
// POST /reconnect
|
|
84
117
|
router.post('/reconnect', async (req, res) => {
|
|
85
118
|
const session = resolveSession(req);
|
package/dist/routes.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routes.js","sourceRoot":"","sources":["../src/routes.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"routes.js","sourceRoot":"","sources":["../src/routes.ts"],"names":[],"mappings":"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"}
|
package/dist/session.d.ts
CHANGED
|
@@ -48,10 +48,26 @@ export declare class Session extends EventEmitter {
|
|
|
48
48
|
screen: ScreenData;
|
|
49
49
|
}>;
|
|
50
50
|
destroy(): void;
|
|
51
|
+
/**
|
|
52
|
+
* Graceful teardown for user-initiated disconnects. When the session is
|
|
53
|
+
* authenticated and the protocol supports SIGNOFF (TN5250), type SIGNOFF
|
|
54
|
+
* into the command line and wait briefly for the host to end the
|
|
55
|
+
* interactive job before dropping the TCP socket. Falls back to a plain
|
|
56
|
+
* destroy() for non-authenticated sessions and other protocols. Callers
|
|
57
|
+
* MUST still call destroySession() after awaiting this method — the
|
|
58
|
+
* store entry is not removed here.
|
|
59
|
+
*/
|
|
60
|
+
gracefulDestroy(timeoutMs?: number): Promise<void>;
|
|
51
61
|
}
|
|
52
62
|
export declare function createSession(protocol?: ProtocolType): Session;
|
|
53
63
|
export declare function getSession(id: string): Session | undefined;
|
|
54
64
|
export declare function destroySession(id: string): void;
|
|
65
|
+
/**
|
|
66
|
+
* User-initiated graceful disconnect — tries to sign off at the host
|
|
67
|
+
* before closing the TCP socket, then removes the store entry. Used by
|
|
68
|
+
* the REST /disconnect endpoint and the WebSocket 'disconnect' message.
|
|
69
|
+
*/
|
|
70
|
+
export declare function gracefullyDestroySession(id: string, timeoutMs?: number): Promise<void>;
|
|
55
71
|
export declare function getDefaultSession(): Session | undefined;
|
|
56
72
|
export declare function getAllSessions(): Session[];
|
|
57
73
|
//# sourceMappingURL=session.d.ts.map
|
package/dist/session.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,eAAe,EAAyB,MAAM,sBAAsB,CAAC;AAC9E,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACtF,OAAO,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAGvE,qBAAa,OAAQ,SAAQ,YAAY;IACvC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;IAClC,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC;IAEhC,OAAO,CAAC,OAAO,CAAkE;IACjF,OAAO,CAAC,KAAK,CAAc;IAC3B,OAAO,CAAC,KAAK,CAAc;IAC3B,OAAO,CAAC,UAAU,CAA8C;IAChE,OAAO,CAAC,aAAa,CAAsB;IAE3C,oFAAoF;IACpF,aAAa,EAAE,MAAM,CAAQ;IAE7B;4FACwF;IACxF,MAAM,CAAC,YAAY,SAAiB;gBAExB,QAAQ,GAAE,YAAuB;
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,eAAe,EAAyB,MAAM,sBAAsB,CAAC;AAC9E,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACtF,OAAO,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAGvE,qBAAa,OAAQ,SAAQ,YAAY;IACvC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;IAClC,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC;IAEhC,OAAO,CAAC,OAAO,CAAkE;IACjF,OAAO,CAAC,KAAK,CAAc;IAC3B,OAAO,CAAC,KAAK,CAAc;IAC3B,OAAO,CAAC,UAAU,CAA8C;IAChE,OAAO,CAAC,aAAa,CAAsB;IAE3C,oFAAoF;IACpF,aAAa,EAAE,MAAM,CAAQ;IAE7B;4FACwF;IACxF,MAAM,CAAC,YAAY,SAAiB;gBAExB,QAAQ,GAAE,YAAuB;IA4B7C,kFAAkF;IAClF,KAAK,IAAI,IAAI;IAIb,kEAAkE;IAClE,cAAc,IAAI,IAAI;IAUtB,2BAA2B;IAC3B,aAAa,IAAI,IAAI;IAOrB,IAAI,MAAM,IAAI,gBAAgB,CAE7B;IAED,yEAAyE;IACzE,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IASnC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAcnF,UAAU,IAAI,IAAI;IAOZ,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAKhC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI/B,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAIjC,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO;IAI5C,aAAa;IAIb;mFAC+E;IAC/E,eAAe,CAAC,YAAY,GAAE,OAAc,GAAG,UAAU,EAAE;IAK3D,qFAAqF;IACrF,uBAAuB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAKlF,mFAAmF;IACnF,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAUrD;;2CAEuC;IACvC,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,UAAU,CAAA;KAAE,CAAC;IAwBhG,OAAO,IAAI,IAAI;IAMf;;;;;;;;OAQG;IACG,eAAe,CAAC,SAAS,GAAE,MAAa,GAAG,OAAO,CAAC,IAAI,CAAC;CAa/D;AAMD,wBAAgB,aAAa,CAAC,QAAQ,GAAE,YAAuB,GAAG,OAAO,CAIxE;AAED,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAE1D;AAED,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAO/C;AAED;;;;GAIG;AACH,wBAAsB,wBAAwB,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,GAAE,MAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CASlG;AAED,wBAAgB,iBAAiB,IAAI,OAAO,GAAG,SAAS,CAMvD;AAED,wBAAgB,cAAc,IAAI,OAAO,EAAE,CAE1C"}
|
package/dist/session.js
CHANGED
|
@@ -35,6 +35,14 @@ export class Session extends EventEmitter {
|
|
|
35
35
|
this._status = { connected: false, status: 'error', protocol: this.protocol, host: this._host, error: err.message };
|
|
36
36
|
this.emit('statusChange', this._status);
|
|
37
37
|
sessionLifecycle.emit('session.lost', this.id, this._status);
|
|
38
|
+
// Close the upstream TCP socket on unrecoverable protocol errors.
|
|
39
|
+
// Without this, a parser exception would leak the half-open 5250
|
|
40
|
+
// session on the host until the 5-min idle timeout — and on IBM i
|
|
41
|
+
// with LMTDEVSSN=*YES that counts against the user's session quota.
|
|
42
|
+
try {
|
|
43
|
+
this.handler.disconnect();
|
|
44
|
+
}
|
|
45
|
+
catch { /* ignore */ }
|
|
38
46
|
});
|
|
39
47
|
}
|
|
40
48
|
/** Reset idle timer — called on any API activity (screen read, key send, etc.) */
|
|
@@ -152,6 +160,29 @@ export class Session extends EventEmitter {
|
|
|
152
160
|
this.handler.destroy();
|
|
153
161
|
this.removeAllListeners();
|
|
154
162
|
}
|
|
163
|
+
/**
|
|
164
|
+
* Graceful teardown for user-initiated disconnects. When the session is
|
|
165
|
+
* authenticated and the protocol supports SIGNOFF (TN5250), type SIGNOFF
|
|
166
|
+
* into the command line and wait briefly for the host to end the
|
|
167
|
+
* interactive job before dropping the TCP socket. Falls back to a plain
|
|
168
|
+
* destroy() for non-authenticated sessions and other protocols. Callers
|
|
169
|
+
* MUST still call destroySession() after awaiting this method — the
|
|
170
|
+
* store entry is not removed here.
|
|
171
|
+
*/
|
|
172
|
+
async gracefulDestroy(timeoutMs = 1500) {
|
|
173
|
+
this.stopIdleTimer();
|
|
174
|
+
const isAuth = this._status.status === 'authenticated';
|
|
175
|
+
if (isAuth && typeof this.handler.attemptSignOff === 'function') {
|
|
176
|
+
try {
|
|
177
|
+
await this.handler.attemptSignOff(timeoutMs);
|
|
178
|
+
}
|
|
179
|
+
catch {
|
|
180
|
+
// best-effort — fall through to hard disconnect
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
this.handler.destroy();
|
|
184
|
+
this.removeAllListeners();
|
|
185
|
+
}
|
|
155
186
|
}
|
|
156
187
|
// Session manager — delegates to the active SessionStore (default
|
|
157
188
|
// in-memory). Integrators can swap the store via setSessionStore() before
|
|
@@ -172,6 +203,23 @@ export function destroySession(id) {
|
|
|
172
203
|
store.delete(id);
|
|
173
204
|
}
|
|
174
205
|
}
|
|
206
|
+
/**
|
|
207
|
+
* User-initiated graceful disconnect — tries to sign off at the host
|
|
208
|
+
* before closing the TCP socket, then removes the store entry. Used by
|
|
209
|
+
* the REST /disconnect endpoint and the WebSocket 'disconnect' message.
|
|
210
|
+
*/
|
|
211
|
+
export async function gracefullyDestroySession(id, timeoutMs = 1500) {
|
|
212
|
+
const store = getSessionStore();
|
|
213
|
+
const session = store.get(id);
|
|
214
|
+
if (!session)
|
|
215
|
+
return;
|
|
216
|
+
try {
|
|
217
|
+
await session.gracefulDestroy(timeoutMs);
|
|
218
|
+
}
|
|
219
|
+
finally {
|
|
220
|
+
store.delete(id);
|
|
221
|
+
}
|
|
222
|
+
}
|
|
175
223
|
export function getDefaultSession() {
|
|
176
224
|
const store = getSessionStore();
|
|
177
225
|
if (store.size() === 1) {
|
package/dist/session.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.js","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAmB,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAG9E,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEvE,MAAM,OAAO,OAAQ,SAAQ,YAAY;IAC9B,EAAE,CAAS;IACX,OAAO,CAAkB;IACzB,QAAQ,CAAe;IAExB,OAAO,GAAqB,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;IACzE,KAAK,GAAW,EAAE,CAAC;IACnB,KAAK,GAAW,EAAE,CAAC;IACnB,UAAU,GAAyC,IAAI,CAAC;IACxD,aAAa,GAAW,IAAI,CAAC,GAAG,EAAE,CAAC;IAE3C,oFAAoF;IACpF,aAAa,GAAW,IAAI,CAAC;IAE7B;4FACwF;IACxF,MAAM,CAAC,YAAY,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;IAEpC,YAAY,WAAyB,QAAQ;QAC3C,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,EAAE,GAAG,UAAU,EAAE,CAAC;QACvB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,OAAO,GAAG,qBAAqB,CAAC,QAAQ,CAAC,CAAC;QAE/C,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,cAAc,EAAE,CAAC,UAAsB,EAAE,EAAE;YACzD,IAAI,CAAC,KAAK,EAAE,CAAC;YACb,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,cAAc,EAAE,GAAG,EAAE;YACnC,IAAI,CAAC,OAAO,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;YACvG,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YACxC,gBAAgB,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAC/D,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAU,EAAE,EAAE;YACtC,IAAI,CAAC,OAAO,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;YACpH,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YACxC,gBAAgB,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"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"}
|
package/dist/tn5250/parser.d.ts
CHANGED
|
@@ -25,10 +25,16 @@ export declare class TN5250Parser {
|
|
|
25
25
|
private tryParseRawData;
|
|
26
26
|
/**
|
|
27
27
|
* Handle records with non-standard framing (e.g. opcode 0x04 from
|
|
28
|
-
* pub400.com). These records contain valid commands (CLEAR_UNIT, WTD
|
|
29
|
-
* but with extra sub-record marker bytes (0x04) between
|
|
30
|
-
* and the actual commands. We scan for the first known
|
|
31
|
-
* skipping 0x04 markers, and hand off to parseCommands.
|
|
28
|
+
* pub400.com). These records contain valid commands (CLEAR_UNIT, WTD,
|
|
29
|
+
* READ_*, etc.) but with extra sub-record marker bytes (0x04) between
|
|
30
|
+
* the GDS header and the actual commands. We scan for the first known
|
|
31
|
+
* command byte, skipping 0x04 markers, and hand off to parseCommands.
|
|
32
|
+
*
|
|
33
|
+
* CRITICAL: the recognition list MUST include every command the host
|
|
34
|
+
* may send alone in its own record. Missing READ_* here would cause a
|
|
35
|
+
* bare Read record to be silently dropped, leaving the keyboard locked
|
|
36
|
+
* indefinitely (stuck "X SYSTEM" / "X II" on the client) because the
|
|
37
|
+
* Read handler is the only path that clears `keyboardLocked`.
|
|
32
38
|
*/
|
|
33
39
|
private parseCommandsFromOffset;
|
|
34
40
|
/** Parse one or more 5250 commands starting at offset */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/tn5250/parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAqB,MAAM,aAAa,CAAC;AAK9D;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAe;IAC7B,mEAAmE;IACnE,OAAO,CAAC,kBAAkB,CAAS;IACnC,6EAA6E;IAC7E,iBAAiB,UAAS;IAC1B;2EACuE;IACvE,OAAO,CAAC,SAAS,CAAS;IAC1B;oEACgE;IAChE,SAAS,SAAK;IACd,SAAS,SAAK;gBAEF,MAAM,EAAE,YAAY;IAIhC;;;OAGG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAyFpC,8DAA8D;IAC9D,OAAO,CAAC,eAAe;IAOvB
|
|
1
|
+
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/tn5250/parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAqB,MAAM,aAAa,CAAC;AAK9D;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAe;IAC7B,mEAAmE;IACnE,OAAO,CAAC,kBAAkB,CAAS;IACnC,6EAA6E;IAC7E,iBAAiB,UAAS;IAC1B;2EACuE;IACvE,OAAO,CAAC,SAAS,CAAS;IAC1B;oEACgE;IAChE,SAAS,SAAK;IACd,SAAS,SAAK;gBAEF,MAAM,EAAE,YAAY;IAIhC;;;OAGG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAyFpC,8DAA8D;IAC9D,OAAO,CAAC,eAAe;IAOvB;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,uBAAuB;IA8B/B,yDAAyD;IACzD,OAAO,CAAC,aAAa;IA2PrB;;;OAGG;IACH,OAAO,CAAC,WAAW;IA+anB;;;;OAIG;IACH,OAAO,CAAC,mBAAmB;IAqC3B;;;;;;;;OAQG;IACH,OAAO,CAAC,eAAe;IAgJvB;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,iBAAiB;IAWzB;;;;OAIG;IACH,OAAO,CAAC,iBAAiB;IAqEzB;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,yBAAyB;IAuEjC;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,oBAAoB;IA8C5B;;;;OAIG;IACH,OAAO,CAAC,UAAU;IAmDlB;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,SAAS;IAkBjB,+EAA+E;IAC/E,OAAO,CAAC,oBAAoB;IAO5B;;;OAGG;IACH,qBAAqB,IAAI,IAAI;CAyK9B"}
|
package/dist/tn5250/parser.js
CHANGED
|
@@ -111,10 +111,16 @@ export class TN5250Parser {
|
|
|
111
111
|
}
|
|
112
112
|
/**
|
|
113
113
|
* Handle records with non-standard framing (e.g. opcode 0x04 from
|
|
114
|
-
* pub400.com). These records contain valid commands (CLEAR_UNIT, WTD
|
|
115
|
-
* but with extra sub-record marker bytes (0x04) between
|
|
116
|
-
* and the actual commands. We scan for the first known
|
|
117
|
-
* skipping 0x04 markers, and hand off to parseCommands.
|
|
114
|
+
* pub400.com). These records contain valid commands (CLEAR_UNIT, WTD,
|
|
115
|
+
* READ_*, etc.) but with extra sub-record marker bytes (0x04) between
|
|
116
|
+
* the GDS header and the actual commands. We scan for the first known
|
|
117
|
+
* command byte, skipping 0x04 markers, and hand off to parseCommands.
|
|
118
|
+
*
|
|
119
|
+
* CRITICAL: the recognition list MUST include every command the host
|
|
120
|
+
* may send alone in its own record. Missing READ_* here would cause a
|
|
121
|
+
* bare Read record to be silently dropped, leaving the keyboard locked
|
|
122
|
+
* indefinitely (stuck "X SYSTEM" / "X II" on the client) because the
|
|
123
|
+
* Read handler is the only path that clears `keyboardLocked`.
|
|
118
124
|
*/
|
|
119
125
|
parseCommandsFromOffset(data, start) {
|
|
120
126
|
for (let i = start; i < data.length; i++) {
|
|
@@ -122,12 +128,23 @@ export class TN5250Parser {
|
|
|
122
128
|
if (data[i] === 0x04)
|
|
123
129
|
continue;
|
|
124
130
|
// Known command bytes — hand off to normal parsing
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
+
const b = data[i];
|
|
132
|
+
if (b === CMD.WRITE_TO_DISPLAY ||
|
|
133
|
+
b === CMD.CLEAR_UNIT ||
|
|
134
|
+
b === CMD.CLEAR_UNIT_ALT ||
|
|
135
|
+
b === CMD.CLEAR_FORMAT_TABLE ||
|
|
136
|
+
b === CMD.WRITE_STRUCTURED_FIELD ||
|
|
137
|
+
b === CMD.WRITE_ERROR_CODE ||
|
|
138
|
+
b === CMD.WRITE_ERROR_CODE_WIN ||
|
|
139
|
+
b === CMD.READ_INPUT_FIELDS ||
|
|
140
|
+
b === CMD.READ_MDT_FIELDS ||
|
|
141
|
+
b === CMD.READ_MDT_FIELDS_ALT ||
|
|
142
|
+
b === CMD.READ_SCREEN_IMMEDIATE ||
|
|
143
|
+
b === CMD.READ_IMMEDIATE ||
|
|
144
|
+
b === CMD.READ_IMMEDIATE_ALT ||
|
|
145
|
+
b === CMD.SAVE_SCREEN ||
|
|
146
|
+
b === CMD.RESTORE_SCREEN ||
|
|
147
|
+
b === CMD.ROLL) {
|
|
131
148
|
return this.parseCommands(data, i);
|
|
132
149
|
}
|
|
133
150
|
}
|
|
@@ -436,10 +453,19 @@ export class TN5250Parser {
|
|
|
436
453
|
};
|
|
437
454
|
while (pos < data.length) {
|
|
438
455
|
const byte = data[pos];
|
|
439
|
-
// Within a WTD,
|
|
440
|
-
//
|
|
441
|
-
//
|
|
442
|
-
//
|
|
456
|
+
// Within a WTD, most bytes are orders or EBCDIC data. One exception:
|
|
457
|
+
// 0x04 (ESC, also the 5250 sub-record marker) terminates the order
|
|
458
|
+
// stream and hands control back to the command loop so it can
|
|
459
|
+
// dispatch the next command in the same record (e.g. a trailing
|
|
460
|
+
// READ_MDT_FIELDS = 0x52 after a WTD). Per lib5250 session.c:964-967
|
|
461
|
+
// — on ESC, the order loop un-gets the byte and returns. Without
|
|
462
|
+
// this, the trailing `04 52 00 00` of every WTD reply is mis-parsed:
|
|
463
|
+
// 0x04 as an EBCDIC control char written to the buffer, then 0x52
|
|
464
|
+
// (the real READ_MDT_FIELDS command) decoded via cp37 → U+00EA (ê)
|
|
465
|
+
// and painted into the screen wherever the cursor happened to land.
|
|
466
|
+
if (byte === 0x04) {
|
|
467
|
+
return pos; // hand back to parseCommands to handle the next cmd
|
|
468
|
+
}
|
|
443
469
|
switch (byte) {
|
|
444
470
|
case ORDER.SBA: {
|
|
445
471
|
// Set Buffer Address: 2 bytes follow (row, col) — 1-based from host
|
|
@@ -734,8 +760,28 @@ export class TN5250Parser {
|
|
|
734
760
|
break;
|
|
735
761
|
}
|
|
736
762
|
default: {
|
|
737
|
-
// Field attribute bytes (0x20-0x3F)
|
|
738
|
-
|
|
763
|
+
// Field attribute bytes (0x20-0x3F) are 5250 display attributes.
|
|
764
|
+
// Per lib5250 model (dbuffer_addch + char_map_attribute_p at
|
|
765
|
+
// render time), every byte in this range terminates the current
|
|
766
|
+
// display-attribute run and starts a new one — whether it
|
|
767
|
+
// immediately follows an SBA or appears mid-stream between text.
|
|
768
|
+
// Each attribute byte itself occupies one cell (rendered as a
|
|
769
|
+
// blank space) and governs the cells that come after it until
|
|
770
|
+
// the next attribute byte.
|
|
771
|
+
//
|
|
772
|
+
// IBM i list screens (WRKACTJOB, DSPMSG, …) rely on mid-stream
|
|
773
|
+
// attribute pairs to decorate the scroll indicator: the host
|
|
774
|
+
// writes SBA(row,col) + 0x2f (NON_DISPLAY) + filler + 0x22
|
|
775
|
+
// (HIGH_INTENSITY) + " More..." so the leading filler cells are
|
|
776
|
+
// invisible and the indicator text itself is bright. Without
|
|
777
|
+
// mid-stream attribute recognition the initial 0x2f span
|
|
778
|
+
// swallows the whole row (our parser's synthetic field extends
|
|
779
|
+
// to the next SBA) and "More..." never shows up.
|
|
780
|
+
//
|
|
781
|
+
// DBCS mode (after SO / before SI) is different — byte pairs
|
|
782
|
+
// can legitimately land in 0x20-0x3F, so we still let the DBCS
|
|
783
|
+
// branch below handle them.
|
|
784
|
+
if (!dbcsMode && byte >= 0x20 && byte <= 0x3F) {
|
|
739
785
|
pos = this.parseFieldAttribute(data, pos, currentAddr, currentAttr);
|
|
740
786
|
currentAddr++; // attribute byte occupies one screen position
|
|
741
787
|
}
|
|
@@ -819,6 +865,7 @@ export class TN5250Parser {
|
|
|
819
865
|
attribute: fieldDisplayAttr,
|
|
820
866
|
rawAttrByte: attrByte,
|
|
821
867
|
modified: false,
|
|
868
|
+
synthetic: true, // Bare SBA+attribute, not an explicit SF order
|
|
822
869
|
};
|
|
823
870
|
this.clearStaleFieldsOnce();
|
|
824
871
|
this.screen.fields.push(field);
|
|
@@ -1348,12 +1395,89 @@ export class TN5250Parser {
|
|
|
1348
1395
|
if (current.length <= 0)
|
|
1349
1396
|
current.length = 1;
|
|
1350
1397
|
}
|
|
1398
|
+
// Validate synthetic input fields (from bare SBA+attribute) against
|
|
1399
|
+
// same-row termination. A real 5250 input field is bounded by a closing
|
|
1400
|
+
// attribute byte on the SAME row — in the sorted field list that closing
|
|
1401
|
+
// attribute shows up as the next field at the same row. If the next field
|
|
1402
|
+
// is on a different row, this synthetic field is an unbounded visual
|
|
1403
|
+
// decoration (WRKSPLF separators, underlined headers, fake input boxes on
|
|
1404
|
+
// menus) and must be demoted to protected so it is not rendered or tabbed
|
|
1405
|
+
// into as an input. Real inputs on sign-on, WRKSPLF opt column, menu
|
|
1406
|
+
// command lines, etc. are always bounded and pass this check.
|
|
1407
|
+
// Validate synthetic input fields (from bare SBA+attribute) against two
|
|
1408
|
+
// signals that together distinguish real interactive inputs from visual
|
|
1409
|
+
// decoration runs (coloured title text, separator lines, etc.):
|
|
1410
|
+
//
|
|
1411
|
+
// (a) same-row termination: a real bare-SBA input field is closed by a
|
|
1412
|
+
// subsequent attribute byte on the SAME row — in the sorted field
|
|
1413
|
+
// list that shows up as the next field sharing the same row.
|
|
1414
|
+
//
|
|
1415
|
+
// (b) empty content: a real input field is awaiting user input, so
|
|
1416
|
+
// its buffer cells are all spaces. Colour runs on title rows
|
|
1417
|
+
// contain the actual visible text (letters, punctuation), so any
|
|
1418
|
+
// non-space cell disqualifies the field as interactive.
|
|
1419
|
+
//
|
|
1420
|
+
// NON_DISPLAY (attribute type 7) needs screen-context handling. Real
|
|
1421
|
+
// password fields appear only on the sign-on screen; on every other
|
|
1422
|
+
// screen IBM i may emit UIM "artifact" NON_DISPLAY fields (e.g. a
|
|
1423
|
+
// wide span on row 1 of the main menu) that are NOT interactive and
|
|
1424
|
+
// must never become tab targets or render as input boxes. We detect
|
|
1425
|
+
// sign-on screens by the "Sign On" title text — if present, keep all
|
|
1426
|
+
// NON_DISPLAY fields as input; otherwise demote them.
|
|
1427
|
+
let onSignOnScreen = false;
|
|
1428
|
+
{
|
|
1429
|
+
const cols = this.screen.cols;
|
|
1430
|
+
for (let r = 0; r < Math.min(3, this.screen.rows); r++) {
|
|
1431
|
+
const line = this.screen.buffer.slice(r * cols, r * cols + cols).join('');
|
|
1432
|
+
if (line.includes('Sign On')) {
|
|
1433
|
+
onSignOnScreen = true;
|
|
1434
|
+
break;
|
|
1435
|
+
}
|
|
1436
|
+
}
|
|
1437
|
+
}
|
|
1438
|
+
const sortedFields = this.screen.fields; // already sorted by position above
|
|
1439
|
+
for (let i = 0; i < sortedFields.length; i++) {
|
|
1440
|
+
const f = sortedFields[i];
|
|
1441
|
+
if (!f.synthetic)
|
|
1442
|
+
continue;
|
|
1443
|
+
if ((f.ffw1 & 0x20) !== 0)
|
|
1444
|
+
continue; // already protected
|
|
1445
|
+
if ((f.rawAttrByte & 0x07) === 0x07) {
|
|
1446
|
+
// NON_DISPLAY: keep on sign-on screens, demote everywhere else.
|
|
1447
|
+
if (!onSignOnScreen)
|
|
1448
|
+
f.ffw1 |= 0x20;
|
|
1449
|
+
continue;
|
|
1450
|
+
}
|
|
1451
|
+
// (a) Same-row termination check
|
|
1452
|
+
const next = sortedFields[i + 1];
|
|
1453
|
+
const sameRowTerminated = !!next && next.row === f.row;
|
|
1454
|
+
// (b) Empty-content check
|
|
1455
|
+
let empty = true;
|
|
1456
|
+
const start = this.screen.offset(f.row, f.col);
|
|
1457
|
+
const end = Math.min(start + f.length, this.screen.size);
|
|
1458
|
+
for (let k = start; k < end; k++) {
|
|
1459
|
+
const ch = this.screen.buffer[k];
|
|
1460
|
+
if (ch && ch !== ' ' && ch !== '') {
|
|
1461
|
+
empty = false;
|
|
1462
|
+
break;
|
|
1463
|
+
}
|
|
1464
|
+
}
|
|
1465
|
+
if (!sameRowTerminated || !empty) {
|
|
1466
|
+
f.ffw1 |= 0x20; // demote to protected
|
|
1467
|
+
}
|
|
1468
|
+
}
|
|
1351
1469
|
// Cursor homing per lib5250 display.c:614-635 (set_cursor_home):
|
|
1352
1470
|
// 1. If cursor is inside a field (input or protected) — trust it.
|
|
1353
|
-
// 2. If cursor is outside all fields, nudge to the first
|
|
1354
|
-
//
|
|
1355
|
-
//
|
|
1356
|
-
//
|
|
1471
|
+
// 2. If cursor is outside all fields, nudge to the first input
|
|
1472
|
+
// field in spatial order (matches lib5250 dbuffer_first_non_bypass).
|
|
1473
|
+
// 3. If no input fields exist, leave cursor where IC put it.
|
|
1474
|
+
//
|
|
1475
|
+
// NOTE: the "hasNativeUnderscore" restriction that used to guard step 2
|
|
1476
|
+
// against UIM NON_DISPLAY artifacts is now redundant — those artifacts
|
|
1477
|
+
// are demoted to protected earlier in calculateFieldLengths. Requiring
|
|
1478
|
+
// native underscore also skipped legitimate command-line fields whose
|
|
1479
|
+
// raw attribute byte is 0x20 (normal), leaving IBM i main menu users
|
|
1480
|
+
// with a cursor stuck at (0,0) on screen load.
|
|
1357
1481
|
{
|
|
1358
1482
|
const cursorAddr = this.screen.offset(this.screen.cursorRow, this.screen.cursorCol);
|
|
1359
1483
|
const cursorInField = fields.some(f => {
|
|
@@ -1361,20 +1485,45 @@ export class TN5250Parser {
|
|
|
1361
1485
|
return cursorAddr >= start && cursorAddr < start + f.length;
|
|
1362
1486
|
});
|
|
1363
1487
|
if (!cursorInField) {
|
|
1364
|
-
const
|
|
1365
|
-
if (
|
|
1366
|
-
this.screen.cursorRow =
|
|
1367
|
-
this.screen.cursorCol =
|
|
1488
|
+
const firstInput = fields.find(f => this.screen.isInputField(f));
|
|
1489
|
+
if (firstInput) {
|
|
1490
|
+
this.screen.cursorRow = firstInput.row;
|
|
1491
|
+
this.screen.cursorCol = firstInput.col;
|
|
1368
1492
|
}
|
|
1369
|
-
// If no
|
|
1370
|
-
// may not have interactive input (e.g. DSPMSG with only
|
|
1493
|
+
// If no input fields exist, leave cursor at IC position — the
|
|
1494
|
+
// screen may not have interactive input (e.g. DSPMSG with only
|
|
1495
|
+
// F-key actions).
|
|
1371
1496
|
}
|
|
1372
1497
|
}
|
|
1373
|
-
// Deduplicate fields at the same position
|
|
1498
|
+
// Deduplicate fields at the same position. When an SF (non-synthetic)
|
|
1499
|
+
// field and a synthetic bare-SBA field coincide at the same row+col,
|
|
1500
|
+
// the SF order is authoritative — it carries real FFW and field
|
|
1501
|
+
// length from the host, whereas the synthetic entry is just an
|
|
1502
|
+
// attribute-byte artifact with a guessed length. Dropping the SF in
|
|
1503
|
+
// favor of the synthetic would hide real input fields (e.g. the
|
|
1504
|
+
// 2-char WRKSPLF Opt column is an SF field at (11,1) that the host
|
|
1505
|
+
// also colors with an overlapping synthetic underscored list field).
|
|
1374
1506
|
const seen = new Map();
|
|
1375
1507
|
for (let i = 0; i < fields.length; i++) {
|
|
1376
1508
|
const key = `${fields[i].row},${fields[i].col}`;
|
|
1377
|
-
seen.
|
|
1509
|
+
const prevIdx = seen.get(key);
|
|
1510
|
+
if (prevIdx === undefined) {
|
|
1511
|
+
seen.set(key, i);
|
|
1512
|
+
continue;
|
|
1513
|
+
}
|
|
1514
|
+
const prev = fields[prevIdx];
|
|
1515
|
+
const cur = fields[i];
|
|
1516
|
+
// Prefer non-synthetic (SF order) over synthetic (bare-SBA).
|
|
1517
|
+
if (prev.synthetic && !cur.synthetic) {
|
|
1518
|
+
seen.set(key, i);
|
|
1519
|
+
}
|
|
1520
|
+
else if (!prev.synthetic && cur.synthetic) {
|
|
1521
|
+
// keep prev
|
|
1522
|
+
}
|
|
1523
|
+
else {
|
|
1524
|
+
// Both same kind — keep the later one (legacy behaviour).
|
|
1525
|
+
seen.set(key, i);
|
|
1526
|
+
}
|
|
1378
1527
|
}
|
|
1379
1528
|
if (seen.size < fields.length) {
|
|
1380
1529
|
const keep = new Set(seen.values());
|