Files
d3270/js3270/src/suite3270.ts
2023-05-12 20:58:50 +02:00

252 lines
6.1 KiB
TypeScript

export type CodePage = {
name: string,
aliases?: string[],
}
export type ActionCause =
"command" | "default" | "file-transfer" | "httpd" | "idle" |
"keymap" | "macro" | "none" | "password" | "paste" | "peek" |
"screen-redraw" | "script" | "typeahead" | "ui"
export type ConnectionState =
"not-connected" | "reconnecting" | "resolving" |
"tcp-pending" | "tls-pending" | "telnet-pending" |
"connected-nvt" | "connected-nvt-charmode" |
"connected-3270" | "connected-unbound" |
"connected-e-nvt" | "connected-sscp" |
"connected-tn3270e"
export type IndConnection = {
state: ConnectionState,
host?: string,
cause?: ActionCause,
}
export type ComposeType = "std" | "ge"
export type Color =
"neutralBlack" | "blue" | "red" | "pink" | "green" | "turquoise" |
"yellow" | "neutralWhite" | "black" | "deepBlue" | "orange" | "purple" |
"paleGreen" | "paleTurquoise" | "gray" | "white"
export type IndErase = ({logical_rows: number, logical_cols: number} | {}) &
({fg: Color, bg: Color} | {})
export type IndHello = {version: string, build: string, copyright: string}
export type IndModel = {
model: number,
rows: number,
columns: number,
}
export type OiaCompose = { field: "compose"} &
(
{value: true, char: string, type: ComposeType} |
{value: false}
)
export type OiaInsert = {field: "insert", value: boolean}
export type OiaLock = { field: "lock", value?: string }
export type OiaLu = { field: "lu", value: string, lu?: string }
export type OiaNotUndera = { field: "not-undera", value: boolean }
export type OiaReverseInput = { field: "reverse-input", value: boolean }
export type OiaScreenTrace = { field: "screen-trace", value?: number }
export type OiaScript = { field: "script", value: boolean }
export type OiaTiming = { field: "timing", value?: string }
export type OiaTypeahead = { field: "typeahead", value: boolean }
export type IndOia =
OiaCompose | OiaInsert | OiaLock | OiaLu | OiaNotUndera | OiaReverseInput |
OiaScreenTrace | OiaScript | OiaTiming | OiaTypeahead
export type OiaFieldName = IndOia["field"]
export type IndProxy = {
name: string,
username: boolean,
port?: number,
}
export type IndSetting = {
name: string,
value?: any, // Todo: enhance this
cause?: ActionCause,
}
export type IndScreenMode = {
model: number,
rows: number,
columns: number,
color: boolean,
oversize: boolean,
extended: boolean,
}
export type IndTlsHello = {
supported: boolean,
provider: string,
options?: string[],
}
export type IndTls =
( { secure: true, verified: boolean } | { secure:false } ) &
{
session?: string,
"host-cert"?: string,
}
export type IndConnectAttempt = { "host-ip": string, port: string }
export type Cursor = {enabled: false} | {enabled:true, row: number, column: number }
export type IndFileTransfer = { cause: ActionCause } & (
{ state: "awaiting" } |
{ state: "running", bytes: number } |
{ state: "aborting" } |
{ state: "complete", text: string, success: boolean }
)
export type IndPassthru = {
"p-tag": string,
"parent-r-tag"?: string,
action: string,
args?: string[],
}
export type IndPopup = {
type: "connect-error" | "error" | "info" | "result" | "printer" | "child"
text: string,
// todo: refine
error?: string,
}
export type Change = {
column: number
// TODO: determine if this is a
gr?: string, // there's more structure than this, but can't represent in TS
fg?: Color,
bg?: Color,
} & ({count: number} | {text: string})
export type IndScreen = {
cursor?: Cursor,
rows?: {
row: number,
changes: Change[]
}[]
}
export type IndRunResult = {
"r-tag"?: string,
success: boolean,
text?: string[]
abort?: boolean
time: number
}
export type IndScroll = {
// TODO: refine
fg?: Color,
bg?: Color,
}
export type IndStats = {
"bytes-received": number,
"bytes-sent": number,
"records-received": number,
"records-sent": number,
}
export type IndTerminalName = {
text: string,
override: boolean,
}
export type IndThumb = {
top: number,
shown: number
saved: number
screen: number
back: number
}
export type IndTraceFile = {
name?: string
}
export type IndUiError = {
fatal: boolean
text: string
operation?: string
member?: string
line?: number
column?: number
}
// operations
export type OpRun = {
"r-tag"?: string,
type?: string,
// This is true of d3270, but b3270 offers more options
actions: Action[]
}
export type Action = {
action: string,
args?: string[],
}
export type OpRegister = {
name: string,
"help-text"?: string,
"help-params": string,
}
export type OpResult = {
"p-tag": string,
text?: string[]
}
export type Operation =
{run: OpRun} |
{register: OpRegister} |
{fail: OpResult} |
{succeed: OpResult}
export type Indication =
{bell: {}} |
{connection: IndConnection} |
{"connect-attempt": IndConnectAttempt} |
{erase: IndErase} |
{flipped: {value: boolean}} |
{font: {text: string}} |
{formatted: {state: boolean}} |
{ft: IndFileTransfer} |
{icon: {text: string}} |
{initialize: InitializeIndication[]} |
{oia: IndOia} |
{passthru: IndPassthru} |
{popup: IndPopup} |
{"run-result": IndRunResult} |
{screen: IndScreen} |
{"screen-mode": IndScreenMode} |
{scroll: IndScroll} |
{setting: IndSetting} |
{stats: IndStats} |
{thumb: IndThumb} |
{"trace-file": IndTraceFile} |
{tls: IndTls} |
{"ui-error": IndUiError} |
{"window-title": {text: string}}
export type InitializeIndication =
{"code-pages": CodePage[]} |
{connection: IndConnection} |
{erase: IndErase} |
{hello: IndHello} |
{models: IndModel} |
{oia: IndOia} |
{prefixes: {value: string}} |
{proxies: IndProxy[]} |
{"screen-mode": IndScreenMode} |
{setting: IndSetting} |
{"terminal-name": IndTerminalName} |
{thumb: IndThumb} |
{"tls-hello": IndTlsHello} |
{tls: IndTls} |
{"trace-file": IndTraceFile}