@floegence/floeterm-terminal-web 0.5.24 → 0.6.0
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 +20 -0
- package/dist/core/PagedTerminalOutputCoordinator.js +3 -4
- package/dist/core/PagedTerminalOutputCoordinator.js.map +1 -1
- package/dist/core/TerminalCore.d.ts +3 -0
- package/dist/core/TerminalCore.d.ts.map +1 -1
- package/dist/core/TerminalCore.js +96 -21
- package/dist/core/TerminalCore.js.map +1 -1
- package/dist/core/TerminalOutputPipeline.js +2 -2
- package/dist/core/TerminalOutputPipeline.js.map +1 -1
- package/dist/entries/live.d.ts +7 -0
- package/dist/entries/live.d.ts.map +1 -0
- package/dist/entries/live.js +4 -0
- package/dist/entries/live.js.map +1 -0
- package/dist/fabric/BeamtermFabricRenderer.d.ts +11 -4
- package/dist/fabric/BeamtermFabricRenderer.d.ts.map +1 -1
- package/dist/fabric/BeamtermFabricRenderer.js +259 -47
- package/dist/fabric/BeamtermFabricRenderer.js.map +1 -1
- package/dist/fabric/TerminalFabricCoordinator.d.ts +1 -1
- package/dist/fabric/TerminalFabricCoordinator.d.ts.map +1 -1
- package/dist/fabric/TerminalFabricCoordinator.js +4 -7
- package/dist/fabric/TerminalFabricCoordinator.js.map +1 -1
- package/dist/fabric/TerminalLiveFabric.d.ts +3 -43
- package/dist/fabric/TerminalLiveFabric.d.ts.map +1 -1
- package/dist/fabric/TerminalLiveFabric.js +3 -97
- package/dist/fabric/TerminalLiveFabric.js.map +1 -1
- package/dist/fabric/types.d.ts +41 -3
- package/dist/fabric/types.d.ts.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/internal/BeamtermResourceLoader.d.ts +1 -1
- package/dist/internal/BeamtermResourceLoader.d.ts.map +1 -1
- package/dist/internal/BeamtermResourceLoader.js +1 -1
- package/dist/internal/BeamtermResourceLoader.js.map +1 -1
- package/dist/internal/SequenceBuffer.d.ts +7 -11
- package/dist/internal/SequenceBuffer.d.ts.map +1 -1
- package/dist/internal/SequenceBuffer.js +52 -103
- package/dist/internal/SequenceBuffer.js.map +1 -1
- package/dist/live/client.d.ts +62 -0
- package/dist/live/client.d.ts.map +1 -0
- package/dist/live/client.js +326 -0
- package/dist/live/client.js.map +1 -0
- package/dist/live/codec.d.ts +97 -0
- package/dist/live/codec.d.ts.map +1 -0
- package/dist/live/codec.js +386 -0
- package/dist/live/codec.js.map +1 -0
- package/dist/live/transport.d.ts +37 -0
- package/dist/live/transport.d.ts.map +1 -0
- package/dist/live/transport.js +194 -0
- package/dist/live/transport.js.map +1 -0
- package/dist/manager/TerminalInstanceController.d.ts +11 -0
- package/dist/manager/TerminalInstanceController.d.ts.map +1 -1
- package/dist/manager/TerminalInstanceController.js +265 -38
- package/dist/manager/TerminalInstanceController.js.map +1 -1
- package/dist/types.d.ts +41 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +6 -2
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
export declare const StreamKind = "terminal/live_v1";
|
|
2
|
+
export declare const FRAME_HEADER_BYTES = 8;
|
|
3
|
+
export declare const MAX_FRAME_PAYLOAD_BYTES: number;
|
|
4
|
+
export declare const MAX_INPUT_BYTES: number;
|
|
5
|
+
export declare const MAX_OUTPUT_BATCH_BYTES: number;
|
|
6
|
+
export declare const MAX_OUTPUT_BATCH_CHUNKS = 256;
|
|
7
|
+
export declare const MAX_IDENTIFIER_BYTES = 256;
|
|
8
|
+
export declare enum TerminalLiveFrameType {
|
|
9
|
+
Attach = 1,
|
|
10
|
+
Input = 2,
|
|
11
|
+
Resize = 3,
|
|
12
|
+
Detach = 4,
|
|
13
|
+
Attached = 129,
|
|
14
|
+
OutputBatch = 130,
|
|
15
|
+
ResizeApplied = 131,
|
|
16
|
+
SessionClosed = 132,
|
|
17
|
+
GeometryChanged = 133,
|
|
18
|
+
Error = 255
|
|
19
|
+
}
|
|
20
|
+
export type TerminalLiveFrame = Readonly<{
|
|
21
|
+
type: TerminalLiveFrameType;
|
|
22
|
+
flags: number;
|
|
23
|
+
payload: Uint8Array;
|
|
24
|
+
}>;
|
|
25
|
+
export type Attach = Readonly<{
|
|
26
|
+
attachGeneration: bigint;
|
|
27
|
+
cols: number;
|
|
28
|
+
rows: number;
|
|
29
|
+
sessionId: string;
|
|
30
|
+
connectionId: string;
|
|
31
|
+
}>;
|
|
32
|
+
export type Input = Readonly<{
|
|
33
|
+
sequence: bigint;
|
|
34
|
+
data: Uint8Array;
|
|
35
|
+
}>;
|
|
36
|
+
export type Resize = Readonly<{
|
|
37
|
+
sequence: bigint;
|
|
38
|
+
cols: number;
|
|
39
|
+
rows: number;
|
|
40
|
+
}>;
|
|
41
|
+
export type Attached = Readonly<{
|
|
42
|
+
historyBoundarySequence: bigint;
|
|
43
|
+
historyGeneration: bigint;
|
|
44
|
+
historyStartSequence: bigint;
|
|
45
|
+
geometryGeneration: bigint;
|
|
46
|
+
cols: number;
|
|
47
|
+
rows: number;
|
|
48
|
+
}>;
|
|
49
|
+
export type ResizeApplied = Readonly<{
|
|
50
|
+
sequence: bigint;
|
|
51
|
+
geometryGeneration: bigint;
|
|
52
|
+
outputSequenceBoundary: bigint;
|
|
53
|
+
cols: number;
|
|
54
|
+
rows: number;
|
|
55
|
+
}>;
|
|
56
|
+
export type OutputRecord = Readonly<{
|
|
57
|
+
sequence: bigint;
|
|
58
|
+
timestampMs: bigint;
|
|
59
|
+
data: Uint8Array;
|
|
60
|
+
}>;
|
|
61
|
+
export type OutputBatch = Readonly<{
|
|
62
|
+
geometryGeneration: bigint;
|
|
63
|
+
cols: number;
|
|
64
|
+
rows: number;
|
|
65
|
+
records: readonly OutputRecord[];
|
|
66
|
+
}>;
|
|
67
|
+
export type GeometryChanged = Readonly<{
|
|
68
|
+
generation: bigint;
|
|
69
|
+
outputSequenceBoundary: bigint;
|
|
70
|
+
cols: number;
|
|
71
|
+
rows: number;
|
|
72
|
+
}>;
|
|
73
|
+
export type ProtocolError = Readonly<{
|
|
74
|
+
code: number;
|
|
75
|
+
message: string;
|
|
76
|
+
}>;
|
|
77
|
+
export declare class TerminalLiveDecoder {
|
|
78
|
+
private buffer;
|
|
79
|
+
push(chunk: Uint8Array): TerminalLiveFrame[];
|
|
80
|
+
}
|
|
81
|
+
export declare const encodeAttach: (value: Attach) => Uint8Array;
|
|
82
|
+
export declare const decodeAttach: (value: TerminalLiveFrame) => Attach;
|
|
83
|
+
export declare const encodeInput: (value: Input) => Uint8Array;
|
|
84
|
+
export declare const decodeInput: (value: TerminalLiveFrame) => Input;
|
|
85
|
+
export declare const encodeResize: (value: Resize) => Uint8Array;
|
|
86
|
+
export declare const decodeResize: (value: TerminalLiveFrame) => Resize;
|
|
87
|
+
export declare const encodeAttached: (value: Attached) => Uint8Array;
|
|
88
|
+
export declare const decodeAttached: (value: TerminalLiveFrame) => Attached;
|
|
89
|
+
export declare const encodeResizeApplied: (value: ResizeApplied) => Uint8Array;
|
|
90
|
+
export declare const decodeResizeApplied: (value: TerminalLiveFrame) => ResizeApplied;
|
|
91
|
+
export declare const encodeGeometryChanged: (value: GeometryChanged) => Uint8Array;
|
|
92
|
+
export declare const decodeGeometryChanged: (value: TerminalLiveFrame) => GeometryChanged;
|
|
93
|
+
export declare const encodeOutputBatch: (value: OutputBatch) => Uint8Array;
|
|
94
|
+
export declare const decodeOutputBatch: (value: TerminalLiveFrame) => OutputBatch;
|
|
95
|
+
export declare const decodeProtocolError: (value: TerminalLiveFrame) => ProtocolError;
|
|
96
|
+
export declare const decodeUtf8: (value: Uint8Array) => string;
|
|
97
|
+
//# sourceMappingURL=codec.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codec.d.ts","sourceRoot":"","sources":["../../src/live/codec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,386 @@
|
|
|
1
|
+
export const StreamKind = 'terminal/live_v1';
|
|
2
|
+
export const FRAME_HEADER_BYTES = 8;
|
|
3
|
+
export const MAX_FRAME_PAYLOAD_BYTES = 256 * 1024;
|
|
4
|
+
export const MAX_INPUT_BYTES = 64 * 1024;
|
|
5
|
+
export const MAX_OUTPUT_BATCH_BYTES = 64 * 1024;
|
|
6
|
+
export const MAX_OUTPUT_BATCH_CHUNKS = 256;
|
|
7
|
+
export const MAX_IDENTIFIER_BYTES = 256;
|
|
8
|
+
export var TerminalLiveFrameType;
|
|
9
|
+
(function (TerminalLiveFrameType) {
|
|
10
|
+
TerminalLiveFrameType[TerminalLiveFrameType["Attach"] = 1] = "Attach";
|
|
11
|
+
TerminalLiveFrameType[TerminalLiveFrameType["Input"] = 2] = "Input";
|
|
12
|
+
TerminalLiveFrameType[TerminalLiveFrameType["Resize"] = 3] = "Resize";
|
|
13
|
+
TerminalLiveFrameType[TerminalLiveFrameType["Detach"] = 4] = "Detach";
|
|
14
|
+
TerminalLiveFrameType[TerminalLiveFrameType["Attached"] = 129] = "Attached";
|
|
15
|
+
TerminalLiveFrameType[TerminalLiveFrameType["OutputBatch"] = 130] = "OutputBatch";
|
|
16
|
+
TerminalLiveFrameType[TerminalLiveFrameType["ResizeApplied"] = 131] = "ResizeApplied";
|
|
17
|
+
TerminalLiveFrameType[TerminalLiveFrameType["SessionClosed"] = 132] = "SessionClosed";
|
|
18
|
+
TerminalLiveFrameType[TerminalLiveFrameType["GeometryChanged"] = 133] = "GeometryChanged";
|
|
19
|
+
TerminalLiveFrameType[TerminalLiveFrameType["Error"] = 255] = "Error";
|
|
20
|
+
})(TerminalLiveFrameType || (TerminalLiveFrameType = {}));
|
|
21
|
+
const encoder = new TextEncoder();
|
|
22
|
+
const decoder = new TextDecoder('utf-8', { fatal: true });
|
|
23
|
+
const isFrameType = (value) => Object.values(TerminalLiveFrameType)
|
|
24
|
+
.some(candidate => typeof candidate === 'number' && candidate === value);
|
|
25
|
+
const frame = (type, payload) => {
|
|
26
|
+
if (!isFrameType(type))
|
|
27
|
+
throw new Error('unknown terminal live frame type');
|
|
28
|
+
if (payload.byteLength > MAX_FRAME_PAYLOAD_BYTES)
|
|
29
|
+
throw new Error('terminal live frame payload is too large');
|
|
30
|
+
const out = new Uint8Array(FRAME_HEADER_BYTES + payload.byteLength);
|
|
31
|
+
const view = new DataView(out.buffer);
|
|
32
|
+
out[0] = type;
|
|
33
|
+
view.setUint32(4, payload.byteLength, false);
|
|
34
|
+
out.set(payload, FRAME_HEADER_BYTES);
|
|
35
|
+
return out;
|
|
36
|
+
};
|
|
37
|
+
export class TerminalLiveDecoder {
|
|
38
|
+
constructor() {
|
|
39
|
+
this.buffer = new Uint8Array();
|
|
40
|
+
}
|
|
41
|
+
push(chunk) {
|
|
42
|
+
if (chunk.byteLength > 0) {
|
|
43
|
+
const joined = new Uint8Array(this.buffer.byteLength + chunk.byteLength);
|
|
44
|
+
joined.set(this.buffer);
|
|
45
|
+
joined.set(chunk, this.buffer.byteLength);
|
|
46
|
+
this.buffer = joined;
|
|
47
|
+
}
|
|
48
|
+
const frames = [];
|
|
49
|
+
let offset = 0;
|
|
50
|
+
while (this.buffer.byteLength - offset >= FRAME_HEADER_BYTES) {
|
|
51
|
+
const view = new DataView(this.buffer.buffer, this.buffer.byteOffset + offset);
|
|
52
|
+
const type = this.buffer[offset];
|
|
53
|
+
if (!isFrameType(type))
|
|
54
|
+
throw new Error('unknown terminal live frame type');
|
|
55
|
+
if (this.buffer[offset + 1] !== 0 || view.getUint16(2, false) !== 0) {
|
|
56
|
+
throw new Error('terminal live frame reserved bits are non-zero');
|
|
57
|
+
}
|
|
58
|
+
const payloadLength = view.getUint32(4, false);
|
|
59
|
+
if (payloadLength > MAX_FRAME_PAYLOAD_BYTES)
|
|
60
|
+
throw new Error('terminal live frame payload is too large');
|
|
61
|
+
const frameLength = FRAME_HEADER_BYTES + payloadLength;
|
|
62
|
+
if (this.buffer.byteLength - offset < frameLength)
|
|
63
|
+
break;
|
|
64
|
+
frames.push({
|
|
65
|
+
type,
|
|
66
|
+
flags: 0,
|
|
67
|
+
payload: this.buffer.slice(offset + FRAME_HEADER_BYTES, offset + frameLength),
|
|
68
|
+
});
|
|
69
|
+
offset += frameLength;
|
|
70
|
+
}
|
|
71
|
+
this.buffer = offset === this.buffer.byteLength ? new Uint8Array() : this.buffer.slice(offset);
|
|
72
|
+
return frames;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
const assertPositiveUint32 = (value, name) => {
|
|
76
|
+
if (!Number.isSafeInteger(value) || value <= 0 || value > 0xffffffff) {
|
|
77
|
+
throw new Error(`${name} must be a positive uint32`);
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
const assertPositiveUint64 = (value, name) => {
|
|
81
|
+
if (value <= 0n || value > 0xffffffffffffffffn)
|
|
82
|
+
throw new Error(`${name} must be a positive uint64`);
|
|
83
|
+
};
|
|
84
|
+
const assertUint64 = (value, name) => {
|
|
85
|
+
if (value < 0n || value > 0xffffffffffffffffn)
|
|
86
|
+
throw new Error(`${name} must be a uint64`);
|
|
87
|
+
};
|
|
88
|
+
const writeString = (value) => {
|
|
89
|
+
const encoded = encoder.encode(value);
|
|
90
|
+
if (encoded.byteLength === 0 || encoded.byteLength > MAX_IDENTIFIER_BYTES) {
|
|
91
|
+
throw new Error('terminal live identifier has an invalid length');
|
|
92
|
+
}
|
|
93
|
+
const out = new Uint8Array(2 + encoded.byteLength);
|
|
94
|
+
new DataView(out.buffer).setUint16(0, encoded.byteLength, false);
|
|
95
|
+
out.set(encoded, 2);
|
|
96
|
+
return out;
|
|
97
|
+
};
|
|
98
|
+
const readString = (payload, offset) => {
|
|
99
|
+
if (offset < 0 || offset + 2 > payload.byteLength) {
|
|
100
|
+
throw new Error('invalid terminal live identifier payload');
|
|
101
|
+
}
|
|
102
|
+
const length = new DataView(payload.buffer, payload.byteOffset + offset, 2).getUint16(0, false);
|
|
103
|
+
if (length === 0 || length > MAX_IDENTIFIER_BYTES || offset + 2 + length > payload.byteLength) {
|
|
104
|
+
throw new Error('terminal live identifier has an invalid length');
|
|
105
|
+
}
|
|
106
|
+
const nextOffset = offset + 2 + length;
|
|
107
|
+
return { value: decoder.decode(payload.subarray(offset + 2, nextOffset)), nextOffset };
|
|
108
|
+
};
|
|
109
|
+
export const encodeAttach = (value) => {
|
|
110
|
+
assertPositiveUint64(value.attachGeneration, 'attachGeneration');
|
|
111
|
+
assertPositiveUint32(value.cols, 'cols');
|
|
112
|
+
assertPositiveUint32(value.rows, 'rows');
|
|
113
|
+
const session = writeString(value.sessionId);
|
|
114
|
+
const connection = writeString(value.connectionId);
|
|
115
|
+
const payload = new Uint8Array(16 + session.byteLength + connection.byteLength);
|
|
116
|
+
const view = new DataView(payload.buffer);
|
|
117
|
+
view.setBigUint64(0, value.attachGeneration, false);
|
|
118
|
+
view.setUint32(8, value.cols, false);
|
|
119
|
+
view.setUint32(12, value.rows, false);
|
|
120
|
+
payload.set(session, 16);
|
|
121
|
+
payload.set(connection, 16 + session.byteLength);
|
|
122
|
+
return frame(TerminalLiveFrameType.Attach, payload);
|
|
123
|
+
};
|
|
124
|
+
export const decodeAttach = (value) => {
|
|
125
|
+
if (value.type !== TerminalLiveFrameType.Attach)
|
|
126
|
+
throw new Error('unexpected terminal live frame type');
|
|
127
|
+
if (value.payload.byteLength < 22)
|
|
128
|
+
throw new Error('invalid terminal live attach payload');
|
|
129
|
+
const view = new DataView(value.payload.buffer, value.payload.byteOffset);
|
|
130
|
+
const attachGeneration = view.getBigUint64(0, false);
|
|
131
|
+
const cols = view.getUint32(8, false);
|
|
132
|
+
const rows = view.getUint32(12, false);
|
|
133
|
+
assertPositiveUint64(attachGeneration, 'attachGeneration');
|
|
134
|
+
assertPositiveUint32(cols, 'cols');
|
|
135
|
+
assertPositiveUint32(rows, 'rows');
|
|
136
|
+
const session = readString(value.payload, 16);
|
|
137
|
+
const connection = readString(value.payload, session.nextOffset);
|
|
138
|
+
if (connection.nextOffset !== value.payload.byteLength)
|
|
139
|
+
throw new Error('invalid terminal live attach payload');
|
|
140
|
+
return {
|
|
141
|
+
attachGeneration,
|
|
142
|
+
cols,
|
|
143
|
+
rows,
|
|
144
|
+
sessionId: session.value,
|
|
145
|
+
connectionId: connection.value,
|
|
146
|
+
};
|
|
147
|
+
};
|
|
148
|
+
export const encodeInput = (value) => {
|
|
149
|
+
assertPositiveUint64(value.sequence, 'sequence');
|
|
150
|
+
if (value.data.byteLength === 0 || value.data.byteLength > MAX_INPUT_BYTES) {
|
|
151
|
+
throw new Error('terminal live input payload has an invalid length');
|
|
152
|
+
}
|
|
153
|
+
const payload = new Uint8Array(8 + value.data.byteLength);
|
|
154
|
+
new DataView(payload.buffer).setBigUint64(0, value.sequence, false);
|
|
155
|
+
payload.set(value.data, 8);
|
|
156
|
+
return frame(TerminalLiveFrameType.Input, payload);
|
|
157
|
+
};
|
|
158
|
+
export const decodeInput = (value) => {
|
|
159
|
+
if (value.type !== TerminalLiveFrameType.Input)
|
|
160
|
+
throw new Error('unexpected terminal live frame type');
|
|
161
|
+
if (value.payload.byteLength <= 8 || value.payload.byteLength - 8 > MAX_INPUT_BYTES) {
|
|
162
|
+
throw new Error('invalid terminal live input payload');
|
|
163
|
+
}
|
|
164
|
+
const sequence = new DataView(value.payload.buffer, value.payload.byteOffset).getBigUint64(0, false);
|
|
165
|
+
assertPositiveUint64(sequence, 'sequence');
|
|
166
|
+
return { sequence, data: value.payload.slice(8) };
|
|
167
|
+
};
|
|
168
|
+
export const encodeResize = (value) => {
|
|
169
|
+
assertPositiveUint64(value.sequence, 'sequence');
|
|
170
|
+
assertPositiveUint32(value.cols, 'cols');
|
|
171
|
+
assertPositiveUint32(value.rows, 'rows');
|
|
172
|
+
const payload = new Uint8Array(16);
|
|
173
|
+
const view = new DataView(payload.buffer);
|
|
174
|
+
view.setBigUint64(0, value.sequence, false);
|
|
175
|
+
view.setUint32(8, value.cols, false);
|
|
176
|
+
view.setUint32(12, value.rows, false);
|
|
177
|
+
return frame(TerminalLiveFrameType.Resize, payload);
|
|
178
|
+
};
|
|
179
|
+
export const decodeResize = (value) => {
|
|
180
|
+
if (value.type !== TerminalLiveFrameType.Resize)
|
|
181
|
+
throw new Error('unexpected terminal live frame type');
|
|
182
|
+
if (value.payload.byteLength !== 16)
|
|
183
|
+
throw new Error('invalid terminal live resize payload');
|
|
184
|
+
const view = new DataView(value.payload.buffer, value.payload.byteOffset);
|
|
185
|
+
const sequence = view.getBigUint64(0, false);
|
|
186
|
+
const cols = view.getUint32(8, false);
|
|
187
|
+
const rows = view.getUint32(12, false);
|
|
188
|
+
assertPositiveUint64(sequence, 'sequence');
|
|
189
|
+
assertPositiveUint32(cols, 'cols');
|
|
190
|
+
assertPositiveUint32(rows, 'rows');
|
|
191
|
+
return { sequence, cols, rows };
|
|
192
|
+
};
|
|
193
|
+
export const encodeAttached = (value) => {
|
|
194
|
+
assertPositiveUint64(value.historyGeneration, 'historyGeneration');
|
|
195
|
+
assertPositiveUint64(value.historyStartSequence, 'historyStartSequence');
|
|
196
|
+
assertPositiveUint64(value.geometryGeneration, 'geometryGeneration');
|
|
197
|
+
assertPositiveUint32(value.cols, 'cols');
|
|
198
|
+
assertPositiveUint32(value.rows, 'rows');
|
|
199
|
+
if (value.historyStartSequence > value.historyBoundarySequence + 1n) {
|
|
200
|
+
throw new Error('historyStartSequence exceeds the attached history boundary');
|
|
201
|
+
}
|
|
202
|
+
const payload = new Uint8Array(40);
|
|
203
|
+
const view = new DataView(payload.buffer);
|
|
204
|
+
view.setBigUint64(0, value.historyBoundarySequence, false);
|
|
205
|
+
view.setBigUint64(8, value.historyGeneration, false);
|
|
206
|
+
view.setBigUint64(16, value.historyStartSequence, false);
|
|
207
|
+
view.setBigUint64(24, value.geometryGeneration, false);
|
|
208
|
+
view.setUint32(32, value.cols, false);
|
|
209
|
+
view.setUint32(36, value.rows, false);
|
|
210
|
+
return frame(TerminalLiveFrameType.Attached, payload);
|
|
211
|
+
};
|
|
212
|
+
export const decodeAttached = (value) => {
|
|
213
|
+
if (value.type !== TerminalLiveFrameType.Attached)
|
|
214
|
+
throw new Error('unexpected terminal live frame type');
|
|
215
|
+
if (value.payload.byteLength !== 40)
|
|
216
|
+
throw new Error('invalid terminal live attached payload');
|
|
217
|
+
const view = new DataView(value.payload.buffer, value.payload.byteOffset);
|
|
218
|
+
const attached = {
|
|
219
|
+
historyBoundarySequence: view.getBigUint64(0, false),
|
|
220
|
+
historyGeneration: view.getBigUint64(8, false),
|
|
221
|
+
historyStartSequence: view.getBigUint64(16, false),
|
|
222
|
+
geometryGeneration: view.getBigUint64(24, false),
|
|
223
|
+
cols: view.getUint32(32, false),
|
|
224
|
+
rows: view.getUint32(36, false),
|
|
225
|
+
};
|
|
226
|
+
assertPositiveUint64(attached.historyGeneration, 'historyGeneration');
|
|
227
|
+
assertPositiveUint64(attached.historyStartSequence, 'historyStartSequence');
|
|
228
|
+
assertPositiveUint64(attached.geometryGeneration, 'geometryGeneration');
|
|
229
|
+
assertPositiveUint32(attached.cols, 'cols');
|
|
230
|
+
assertPositiveUint32(attached.rows, 'rows');
|
|
231
|
+
if (attached.historyStartSequence > attached.historyBoundarySequence + 1n) {
|
|
232
|
+
throw new Error('historyStartSequence exceeds the attached history boundary');
|
|
233
|
+
}
|
|
234
|
+
return attached;
|
|
235
|
+
};
|
|
236
|
+
export const encodeResizeApplied = (value) => {
|
|
237
|
+
assertPositiveUint64(value.sequence, 'sequence');
|
|
238
|
+
assertPositiveUint64(value.geometryGeneration, 'geometryGeneration');
|
|
239
|
+
assertUint64(value.outputSequenceBoundary, 'outputSequenceBoundary');
|
|
240
|
+
assertPositiveUint32(value.cols, 'cols');
|
|
241
|
+
assertPositiveUint32(value.rows, 'rows');
|
|
242
|
+
const payload = new Uint8Array(32);
|
|
243
|
+
const view = new DataView(payload.buffer);
|
|
244
|
+
view.setBigUint64(0, value.sequence, false);
|
|
245
|
+
view.setBigUint64(8, value.geometryGeneration, false);
|
|
246
|
+
view.setBigUint64(16, value.outputSequenceBoundary, false);
|
|
247
|
+
view.setUint32(24, value.cols, false);
|
|
248
|
+
view.setUint32(28, value.rows, false);
|
|
249
|
+
return frame(TerminalLiveFrameType.ResizeApplied, payload);
|
|
250
|
+
};
|
|
251
|
+
export const decodeResizeApplied = (value) => {
|
|
252
|
+
if (value.type !== TerminalLiveFrameType.ResizeApplied)
|
|
253
|
+
throw new Error('unexpected terminal live frame type');
|
|
254
|
+
if (value.payload.byteLength !== 32)
|
|
255
|
+
throw new Error('invalid terminal live resize applied payload');
|
|
256
|
+
const view = new DataView(value.payload.buffer, value.payload.byteOffset);
|
|
257
|
+
const sequence = view.getBigUint64(0, false);
|
|
258
|
+
const geometryGeneration = view.getBigUint64(8, false);
|
|
259
|
+
const outputSequenceBoundary = view.getBigUint64(16, false);
|
|
260
|
+
const cols = view.getUint32(24, false);
|
|
261
|
+
const rows = view.getUint32(28, false);
|
|
262
|
+
assertPositiveUint64(sequence, 'sequence');
|
|
263
|
+
assertPositiveUint64(geometryGeneration, 'geometryGeneration');
|
|
264
|
+
assertUint64(outputSequenceBoundary, 'outputSequenceBoundary');
|
|
265
|
+
assertPositiveUint32(cols, 'cols');
|
|
266
|
+
assertPositiveUint32(rows, 'rows');
|
|
267
|
+
return { sequence, geometryGeneration, outputSequenceBoundary, cols, rows };
|
|
268
|
+
};
|
|
269
|
+
export const encodeGeometryChanged = (value) => {
|
|
270
|
+
assertPositiveUint64(value.generation, 'geometryGeneration');
|
|
271
|
+
assertUint64(value.outputSequenceBoundary, 'outputSequenceBoundary');
|
|
272
|
+
assertPositiveUint32(value.cols, 'cols');
|
|
273
|
+
assertPositiveUint32(value.rows, 'rows');
|
|
274
|
+
const payload = new Uint8Array(24);
|
|
275
|
+
const view = new DataView(payload.buffer);
|
|
276
|
+
view.setBigUint64(0, value.generation, false);
|
|
277
|
+
view.setBigUint64(8, value.outputSequenceBoundary, false);
|
|
278
|
+
view.setUint32(16, value.cols, false);
|
|
279
|
+
view.setUint32(20, value.rows, false);
|
|
280
|
+
return frame(TerminalLiveFrameType.GeometryChanged, payload);
|
|
281
|
+
};
|
|
282
|
+
export const decodeGeometryChanged = (value) => {
|
|
283
|
+
if (value.type !== TerminalLiveFrameType.GeometryChanged)
|
|
284
|
+
throw new Error('unexpected terminal live frame type');
|
|
285
|
+
if (value.payload.byteLength !== 24)
|
|
286
|
+
throw new Error('invalid terminal live geometry payload');
|
|
287
|
+
const view = new DataView(value.payload.buffer, value.payload.byteOffset);
|
|
288
|
+
const generation = view.getBigUint64(0, false);
|
|
289
|
+
const outputSequenceBoundary = view.getBigUint64(8, false);
|
|
290
|
+
const cols = view.getUint32(16, false);
|
|
291
|
+
const rows = view.getUint32(20, false);
|
|
292
|
+
assertPositiveUint64(generation, 'geometryGeneration');
|
|
293
|
+
assertUint64(outputSequenceBoundary, 'outputSequenceBoundary');
|
|
294
|
+
assertPositiveUint32(cols, 'cols');
|
|
295
|
+
assertPositiveUint32(rows, 'rows');
|
|
296
|
+
return { generation, outputSequenceBoundary, cols, rows };
|
|
297
|
+
};
|
|
298
|
+
export const encodeOutputBatch = (value) => {
|
|
299
|
+
assertPositiveUint64(value.geometryGeneration, 'geometryGeneration');
|
|
300
|
+
assertPositiveUint32(value.cols, 'cols');
|
|
301
|
+
assertPositiveUint32(value.rows, 'rows');
|
|
302
|
+
if (value.records.length === 0 || value.records.length > MAX_OUTPUT_BATCH_CHUNKS) {
|
|
303
|
+
throw new Error('invalid terminal live output record count');
|
|
304
|
+
}
|
|
305
|
+
let dataBytes = 0;
|
|
306
|
+
let payloadBytes = 18;
|
|
307
|
+
for (const record of value.records) {
|
|
308
|
+
assertPositiveUint64(record.sequence, 'sequence');
|
|
309
|
+
if (record.data.byteLength === 0)
|
|
310
|
+
throw new Error('invalid terminal live output data');
|
|
311
|
+
dataBytes += record.data.byteLength;
|
|
312
|
+
payloadBytes += 20 + record.data.byteLength;
|
|
313
|
+
}
|
|
314
|
+
if (dataBytes > MAX_OUTPUT_BATCH_BYTES)
|
|
315
|
+
throw new Error('terminal live output batch is too large');
|
|
316
|
+
const payload = new Uint8Array(payloadBytes);
|
|
317
|
+
const view = new DataView(payload.buffer);
|
|
318
|
+
view.setBigUint64(0, value.geometryGeneration, false);
|
|
319
|
+
view.setUint32(8, value.cols, false);
|
|
320
|
+
view.setUint32(12, value.rows, false);
|
|
321
|
+
view.setUint16(16, value.records.length, false);
|
|
322
|
+
let offset = 18;
|
|
323
|
+
for (const record of value.records) {
|
|
324
|
+
view.setBigUint64(offset, record.sequence, false);
|
|
325
|
+
view.setBigUint64(offset + 8, record.timestampMs, false);
|
|
326
|
+
view.setUint32(offset + 16, record.data.byteLength, false);
|
|
327
|
+
payload.set(record.data, offset + 20);
|
|
328
|
+
offset += 20 + record.data.byteLength;
|
|
329
|
+
}
|
|
330
|
+
return frame(TerminalLiveFrameType.OutputBatch, payload);
|
|
331
|
+
};
|
|
332
|
+
export const decodeOutputBatch = (value) => {
|
|
333
|
+
if (value.type !== TerminalLiveFrameType.OutputBatch)
|
|
334
|
+
throw new Error('unexpected terminal live frame type');
|
|
335
|
+
if (value.payload.byteLength < 18)
|
|
336
|
+
throw new Error('invalid terminal live output payload');
|
|
337
|
+
const view = new DataView(value.payload.buffer, value.payload.byteOffset);
|
|
338
|
+
const geometryGeneration = view.getBigUint64(0, false);
|
|
339
|
+
const cols = view.getUint32(8, false);
|
|
340
|
+
const rows = view.getUint32(12, false);
|
|
341
|
+
assertPositiveUint64(geometryGeneration, 'geometryGeneration');
|
|
342
|
+
assertPositiveUint32(cols, 'cols');
|
|
343
|
+
assertPositiveUint32(rows, 'rows');
|
|
344
|
+
const count = view.getUint16(16, false);
|
|
345
|
+
if (count === 0 || count > MAX_OUTPUT_BATCH_CHUNKS)
|
|
346
|
+
throw new Error('invalid terminal live output record count');
|
|
347
|
+
const records = [];
|
|
348
|
+
let offset = 18;
|
|
349
|
+
let dataBytes = 0;
|
|
350
|
+
for (let index = 0; index < count; index += 1) {
|
|
351
|
+
if (value.payload.byteLength - offset < 20)
|
|
352
|
+
throw new Error('invalid terminal live output payload');
|
|
353
|
+
const size = view.getUint32(offset + 16, false);
|
|
354
|
+
if (size === 0 || size > value.payload.byteLength - offset - 20)
|
|
355
|
+
throw new Error('invalid terminal live output payload');
|
|
356
|
+
dataBytes += size;
|
|
357
|
+
if (dataBytes > MAX_OUTPUT_BATCH_BYTES)
|
|
358
|
+
throw new Error('terminal live output batch is too large');
|
|
359
|
+
const sequence = view.getBigUint64(offset, false);
|
|
360
|
+
assertPositiveUint64(sequence, 'sequence');
|
|
361
|
+
records.push({
|
|
362
|
+
sequence,
|
|
363
|
+
timestampMs: view.getBigUint64(offset + 8, false),
|
|
364
|
+
data: value.payload.slice(offset + 20, offset + 20 + size),
|
|
365
|
+
});
|
|
366
|
+
offset += 20 + size;
|
|
367
|
+
}
|
|
368
|
+
if (offset !== value.payload.byteLength)
|
|
369
|
+
throw new Error('invalid terminal live output payload');
|
|
370
|
+
return { geometryGeneration, cols, rows, records };
|
|
371
|
+
};
|
|
372
|
+
export const decodeProtocolError = (value) => {
|
|
373
|
+
if (value.type !== TerminalLiveFrameType.Error)
|
|
374
|
+
throw new Error('unexpected terminal live frame type');
|
|
375
|
+
if (value.payload.byteLength < 4)
|
|
376
|
+
throw new Error('invalid terminal live error payload');
|
|
377
|
+
const view = new DataView(value.payload.buffer, value.payload.byteOffset);
|
|
378
|
+
const code = view.getUint16(0, false);
|
|
379
|
+
const size = view.getUint16(2, false);
|
|
380
|
+
if (code === 0 || size === 0 || size > MAX_IDENTIFIER_BYTES || size !== value.payload.byteLength - 4) {
|
|
381
|
+
throw new Error('invalid terminal live error payload');
|
|
382
|
+
}
|
|
383
|
+
return { code, message: decodeUtf8(value.payload.subarray(4)) };
|
|
384
|
+
};
|
|
385
|
+
export const decodeUtf8 = (value) => decoder.decode(value);
|
|
386
|
+
//# sourceMappingURL=codec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codec.js","sourceRoot":"","sources":["../../src/live/codec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { TerminalAtomicAttachResult, TerminalAtomicTransport, TerminalDataChunk, TerminalEventSource, TerminalID, TerminalSessionInfo, TerminalHistoryPage } from '../types.js';
|
|
2
|
+
import { type ConnectTerminalLiveOptions, type TerminalByteStream } from './client.js';
|
|
3
|
+
import { StreamKind } from './codec.js';
|
|
4
|
+
export type TerminalLiveControlPlane = Readonly<{
|
|
5
|
+
history(sessionId: TerminalID, startSeq: number, endSeq: number): Promise<TerminalDataChunk[]>;
|
|
6
|
+
historyPage(sessionId: TerminalID, startSequence: number, endSequence: number, historyGeneration: number): Promise<TerminalHistoryPage>;
|
|
7
|
+
clear(sessionId: TerminalID): Promise<void>;
|
|
8
|
+
listSessions?(): Promise<TerminalSessionInfo[]>;
|
|
9
|
+
createSession?(name?: string, workingDir?: string, cols?: number, rows?: number): Promise<TerminalSessionInfo>;
|
|
10
|
+
deleteSession?(sessionId: TerminalID): Promise<void>;
|
|
11
|
+
renameSession?(sessionId: TerminalID, newName: string): Promise<void>;
|
|
12
|
+
}>;
|
|
13
|
+
export type TerminalLiveAttachResult = TerminalAtomicAttachResult & Readonly<{
|
|
14
|
+
runtimeAttachGeneration: number;
|
|
15
|
+
}>;
|
|
16
|
+
export type TerminalLiveTransport = Omit<TerminalAtomicTransport, 'attachWithHistoryBoundary'> & Readonly<{
|
|
17
|
+
attachWithHistoryBoundary(sessionId: TerminalID, cols: number, rows: number): Promise<TerminalLiveAttachResult>;
|
|
18
|
+
forgetSession(sessionId: string): void;
|
|
19
|
+
syncConnectionEpoch(key: object | null): void;
|
|
20
|
+
dispose(): void;
|
|
21
|
+
}>;
|
|
22
|
+
export type CreateTerminalLiveTransportOptions = Readonly<{
|
|
23
|
+
connectionId: string;
|
|
24
|
+
openStream: ConnectTerminalLiveOptions['openStream'];
|
|
25
|
+
control: TerminalLiveControlPlane;
|
|
26
|
+
controlEvents?: TerminalEventSource;
|
|
27
|
+
onError?: (sessionId: string, error: Error) => void;
|
|
28
|
+
}>;
|
|
29
|
+
export type TerminalLiveTransportBundle = Readonly<{
|
|
30
|
+
transport: TerminalLiveTransport;
|
|
31
|
+
eventSource: TerminalEventSource;
|
|
32
|
+
}>;
|
|
33
|
+
export declare const createTerminalLiveTransport: (options: CreateTerminalLiveTransportOptions) => TerminalLiveTransportBundle;
|
|
34
|
+
export type OpenTerminalLiveStream = (kind: typeof StreamKind, options?: Readonly<{
|
|
35
|
+
signal?: AbortSignal;
|
|
36
|
+
}>) => Promise<TerminalByteStream>;
|
|
37
|
+
//# sourceMappingURL=transport.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../src/live/transport.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,0BAA0B,EAC1B,uBAAuB,EACvB,iBAAiB,EAEjB,mBAAmB,EACnB,UAAU,EAEV,mBAAmB,EACnB,mBAAmB,EAEpB,MAAM,aAAa,CAAC;AACrB,OAAO,EAEL,KAAK,0BAA0B,EAC/B,KAAK,kBAAkB,EAExB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,MAAM,MAAM,wBAAwB,GAAG,QAAQ,CAAC;IAC9C,OAAO,CAAC,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC;IAC/F,WAAW,CACT,SAAS,EAAE,UAAU,EACrB,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,MAAM,EACnB,iBAAiB,EAAE,MAAM,GACxB,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAChC,KAAK,CAAC,SAAS,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5C,YAAY,CAAC,IAAI,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAAC;IAChD,aAAa,CAAC,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAC/G,aAAa,CAAC,CAAC,SAAS,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrD,aAAa,CAAC,CAAC,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACvE,CAAC,CAAC;AAEH,MAAM,MAAM,wBAAwB,GAAG,0BAA0B,GAAG,QAAQ,CAAC;IAC3E,uBAAuB,EAAE,MAAM,CAAC;CACjC,CAAC,CAAC;AAEH,MAAM,MAAM,qBAAqB,GAAG,IAAI,CAAC,uBAAuB,EAAE,2BAA2B,CAAC,GAAG,QAAQ,CAAC;IACxG,yBAAyB,CAAC,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,wBAAwB,CAAC,CAAC;IAChH,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC;IAC9C,OAAO,IAAI,IAAI,CAAC;CACjB,CAAC,CAAC;AAEH,MAAM,MAAM,kCAAkC,GAAG,QAAQ,CAAC;IACxD,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,0BAA0B,CAAC,YAAY,CAAC,CAAC;IACrD,OAAO,EAAE,wBAAwB,CAAC;IAClC,aAAa,CAAC,EAAE,mBAAmB,CAAC;IACpC,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CACrD,CAAC,CAAC;AAEH,MAAM,MAAM,2BAA2B,GAAG,QAAQ,CAAC;IACjD,SAAS,EAAE,qBAAqB,CAAC;IACjC,WAAW,EAAE,mBAAmB,CAAC;CAClC,CAAC,CAAC;AASH,eAAO,MAAM,2BAA2B,GAAI,SAAS,kCAAkC,KAAG,2BA6LzF,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG,CACnC,IAAI,EAAE,OAAO,UAAU,EACvB,OAAO,CAAC,EAAE,QAAQ,CAAC;IAAE,MAAM,CAAC,EAAE,WAAW,CAAA;CAAE,CAAC,KACzC,OAAO,CAAC,kBAAkB,CAAC,CAAC"}
|