@floegence/floeterm-terminal-web 0.5.24 → 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/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 +4 -0
- package/dist/core/TerminalCore.d.ts.map +1 -1
- package/dist/core/TerminalCore.js +109 -22
- 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/internal/TerminalResourceLoader.d.ts +8 -0
- package/dist/internal/TerminalResourceLoader.d.ts.map +1 -1
- package/dist/internal/TerminalResourceLoader.js +44 -5
- package/dist/internal/TerminalResourceLoader.js.map +1 -1
- package/dist/internal/UnicodeSafeUrlProvider.d.ts +17 -0
- package/dist/internal/UnicodeSafeUrlProvider.d.ts.map +1 -0
- package/dist/internal/UnicodeSafeUrlProvider.js +32 -0
- package/dist/internal/UnicodeSafeUrlProvider.js.map +1 -0
- 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,326 @@
|
|
|
1
|
+
import { MAX_INPUT_BYTES, StreamKind, TerminalLiveDecoder, TerminalLiveFrameType, decodeAttached, decodeGeometryChanged, decodeOutputBatch, decodeProtocolError, decodeResizeApplied, encodeAttach, encodeInput, encodeResize, } from './codec.js';
|
|
2
|
+
export const MAX_QUEUED_INPUT_BYTES = 8 * 1024 * 1024;
|
|
3
|
+
export var TerminalLiveErrorCode;
|
|
4
|
+
(function (TerminalLiveErrorCode) {
|
|
5
|
+
TerminalLiveErrorCode[TerminalLiveErrorCode["ProtocolViolation"] = 1] = "ProtocolViolation";
|
|
6
|
+
TerminalLiveErrorCode[TerminalLiveErrorCode["PermissionDenied"] = 2] = "PermissionDenied";
|
|
7
|
+
TerminalLiveErrorCode[TerminalLiveErrorCode["SessionNotFound"] = 3] = "SessionNotFound";
|
|
8
|
+
TerminalLiveErrorCode[TerminalLiveErrorCode["ActivationFailed"] = 4] = "ActivationFailed";
|
|
9
|
+
TerminalLiveErrorCode[TerminalLiveErrorCode["SlowConsumer"] = 5] = "SlowConsumer";
|
|
10
|
+
TerminalLiveErrorCode[TerminalLiveErrorCode["Internal"] = 6] = "Internal";
|
|
11
|
+
})(TerminalLiveErrorCode || (TerminalLiveErrorCode = {}));
|
|
12
|
+
export class TerminalLiveServerError extends Error {
|
|
13
|
+
constructor(code, serverMessage) {
|
|
14
|
+
super(`terminal live server error ${code}: ${serverMessage}`);
|
|
15
|
+
this.name = 'TerminalLiveServerError';
|
|
16
|
+
this.code = code;
|
|
17
|
+
this.serverMessage = serverMessage;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
class FrameReader {
|
|
21
|
+
constructor(stream) {
|
|
22
|
+
this.stream = stream;
|
|
23
|
+
this.decoder = new TerminalLiveDecoder();
|
|
24
|
+
this.pending = [];
|
|
25
|
+
}
|
|
26
|
+
async read() {
|
|
27
|
+
while (this.pending.length === 0) {
|
|
28
|
+
const chunk = await this.stream.read();
|
|
29
|
+
if (chunk == null)
|
|
30
|
+
return null;
|
|
31
|
+
this.pending = this.decoder.push(chunk);
|
|
32
|
+
}
|
|
33
|
+
return this.pending.shift() ?? null;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
const toSafeNumber = (value, name) => {
|
|
37
|
+
const number = Number(value);
|
|
38
|
+
if (!Number.isSafeInteger(number) || number < 0)
|
|
39
|
+
throw new Error(`${name} exceeds JavaScript safe integer range`);
|
|
40
|
+
return number;
|
|
41
|
+
};
|
|
42
|
+
class TerminalLiveConnectionImpl {
|
|
43
|
+
constructor(stream, reader, attached, onOutputBatch, onGeometry, onClosed, onError) {
|
|
44
|
+
this.stream = stream;
|
|
45
|
+
this.reader = reader;
|
|
46
|
+
this.onOutputBatch = onOutputBatch;
|
|
47
|
+
this.onGeometry = onGeometry;
|
|
48
|
+
this.onClosed = onClosed;
|
|
49
|
+
this.onError = onError;
|
|
50
|
+
this.inputSequence = 0n;
|
|
51
|
+
this.resizeSequence = 0n;
|
|
52
|
+
this.queuedInputBytes = 0;
|
|
53
|
+
this.pendingGeometries = [];
|
|
54
|
+
this.writeTail = Promise.resolve();
|
|
55
|
+
this.resizeWaiters = new Map();
|
|
56
|
+
this.closed = false;
|
|
57
|
+
this.failed = false;
|
|
58
|
+
this.attached = {
|
|
59
|
+
historyBoundarySequence: toSafeNumber(attached.historyBoundarySequence, 'historyBoundarySequence'),
|
|
60
|
+
historyGeneration: toSafeNumber(attached.historyGeneration, 'historyGeneration'),
|
|
61
|
+
historyStartSequence: toSafeNumber(attached.historyStartSequence, 'historyStartSequence'),
|
|
62
|
+
geometryGeneration: toSafeNumber(attached.geometryGeneration, 'geometryGeneration'),
|
|
63
|
+
cols: attached.cols,
|
|
64
|
+
rows: attached.rows,
|
|
65
|
+
};
|
|
66
|
+
this.geometry = {
|
|
67
|
+
generation: this.attached.geometryGeneration,
|
|
68
|
+
outputSequenceBoundary: this.attached.historyBoundarySequence,
|
|
69
|
+
cols: this.attached.cols,
|
|
70
|
+
rows: this.attached.rows,
|
|
71
|
+
};
|
|
72
|
+
this.nextOutputSequence = attached.historyBoundarySequence + 1n;
|
|
73
|
+
this.lastOutputSequence = attached.historyBoundarySequence;
|
|
74
|
+
this.onGeometry?.(this.geometry);
|
|
75
|
+
}
|
|
76
|
+
start() {
|
|
77
|
+
void this.readLoop();
|
|
78
|
+
}
|
|
79
|
+
async sendInput(data) {
|
|
80
|
+
if (this.closed)
|
|
81
|
+
throw new Error('terminal live connection is closed');
|
|
82
|
+
if (data.byteLength === 0)
|
|
83
|
+
return;
|
|
84
|
+
if (data.byteLength > MAX_QUEUED_INPUT_BYTES || this.queuedInputBytes + data.byteLength > MAX_QUEUED_INPUT_BYTES) {
|
|
85
|
+
throw new Error('terminal live input queue limit exceeded');
|
|
86
|
+
}
|
|
87
|
+
const frameCount = Math.ceil(data.byteLength / MAX_INPUT_BYTES);
|
|
88
|
+
const firstSequence = this.inputSequence + 1n;
|
|
89
|
+
this.inputSequence += BigInt(frameCount);
|
|
90
|
+
this.queuedInputBytes += data.byteLength;
|
|
91
|
+
try {
|
|
92
|
+
await this.enqueueWrite(async () => {
|
|
93
|
+
// Encode one frame at a time only when the byte stream is ready for it.
|
|
94
|
+
// A maximum-size paste therefore retains the caller's byte buffer plus
|
|
95
|
+
// one 64 KiB wire frame instead of another full paste-sized frame set.
|
|
96
|
+
for (let frameIndex = 0, offset = 0; offset < data.byteLength; frameIndex += 1, offset += MAX_INPUT_BYTES) {
|
|
97
|
+
const encoded = encodeInput({
|
|
98
|
+
sequence: firstSequence + BigInt(frameIndex),
|
|
99
|
+
data: data.subarray(offset, Math.min(data.byteLength, offset + MAX_INPUT_BYTES)),
|
|
100
|
+
});
|
|
101
|
+
await this.stream.write(encoded);
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
finally {
|
|
106
|
+
this.queuedInputBytes -= data.byteLength;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
async resize(cols, rows) {
|
|
110
|
+
if (this.closed)
|
|
111
|
+
throw new Error('terminal live connection is closed');
|
|
112
|
+
this.resizeSequence += 1n;
|
|
113
|
+
const sequence = this.resizeSequence;
|
|
114
|
+
const applied = new Promise((resolve, reject) => {
|
|
115
|
+
this.resizeWaiters.set(sequence, { resolve, reject });
|
|
116
|
+
});
|
|
117
|
+
try {
|
|
118
|
+
await this.enqueueWrite(() => this.stream.write(encodeResize({ sequence, cols, rows })));
|
|
119
|
+
}
|
|
120
|
+
catch (error) {
|
|
121
|
+
this.resizeWaiters.delete(sequence);
|
|
122
|
+
throw error;
|
|
123
|
+
}
|
|
124
|
+
return await applied;
|
|
125
|
+
}
|
|
126
|
+
async close() {
|
|
127
|
+
if (this.closed)
|
|
128
|
+
return;
|
|
129
|
+
this.closed = true;
|
|
130
|
+
const error = new Error('terminal live connection is closed');
|
|
131
|
+
this.rejectResizeWaiters(error);
|
|
132
|
+
await this.stream.close();
|
|
133
|
+
}
|
|
134
|
+
enqueueWrite(operation) {
|
|
135
|
+
const run = this.writeTail.then(operation);
|
|
136
|
+
this.writeTail = run.catch(() => undefined);
|
|
137
|
+
return run;
|
|
138
|
+
}
|
|
139
|
+
async readLoop() {
|
|
140
|
+
try {
|
|
141
|
+
while (!this.closed) {
|
|
142
|
+
const frame = await this.reader.read();
|
|
143
|
+
if (frame == null) {
|
|
144
|
+
this.closed = true;
|
|
145
|
+
this.rejectResizeWaiters(new Error('terminal live stream ended'));
|
|
146
|
+
this.onClosed?.('stream_ended');
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
switch (frame.type) {
|
|
150
|
+
case TerminalLiveFrameType.OutputBatch:
|
|
151
|
+
{
|
|
152
|
+
const batch = decodeOutputBatch(frame);
|
|
153
|
+
const records = batch.records;
|
|
154
|
+
for (const record of records) {
|
|
155
|
+
if (record.sequence !== this.nextOutputSequence) {
|
|
156
|
+
throw new Error(`expected output sequence ${this.nextOutputSequence}, received ${record.sequence}`);
|
|
157
|
+
}
|
|
158
|
+
this.nextOutputSequence += 1n;
|
|
159
|
+
}
|
|
160
|
+
this.applyGeometry({
|
|
161
|
+
generation: toSafeNumber(batch.geometryGeneration, 'geometryGeneration'),
|
|
162
|
+
outputSequenceBoundary: toSafeNumber(records[0].sequence - 1n, 'outputSequenceBoundary'),
|
|
163
|
+
cols: batch.cols,
|
|
164
|
+
rows: batch.rows,
|
|
165
|
+
});
|
|
166
|
+
this.onOutputBatch(records);
|
|
167
|
+
if (records.length > 0)
|
|
168
|
+
this.lastOutputSequence = records[records.length - 1].sequence;
|
|
169
|
+
this.flushPendingGeometries();
|
|
170
|
+
break;
|
|
171
|
+
}
|
|
172
|
+
case TerminalLiveFrameType.ResizeApplied: {
|
|
173
|
+
const applied = decodeResizeApplied(frame);
|
|
174
|
+
const waiter = this.resizeWaiters.get(applied.sequence);
|
|
175
|
+
if (!waiter)
|
|
176
|
+
throw new Error('unexpected terminal live resize acknowledgement');
|
|
177
|
+
this.queueGeometry({
|
|
178
|
+
generation: toSafeNumber(applied.geometryGeneration, 'geometryGeneration'),
|
|
179
|
+
outputSequenceBoundary: toSafeNumber(applied.outputSequenceBoundary, 'outputSequenceBoundary'),
|
|
180
|
+
cols: applied.cols,
|
|
181
|
+
rows: applied.rows,
|
|
182
|
+
}, applied.outputSequenceBoundary, applied.sequence);
|
|
183
|
+
break;
|
|
184
|
+
}
|
|
185
|
+
case TerminalLiveFrameType.GeometryChanged: {
|
|
186
|
+
const geometry = decodeGeometryChanged(frame);
|
|
187
|
+
this.queueGeometry({
|
|
188
|
+
generation: toSafeNumber(geometry.generation, 'geometryGeneration'),
|
|
189
|
+
outputSequenceBoundary: toSafeNumber(geometry.outputSequenceBoundary, 'outputSequenceBoundary'),
|
|
190
|
+
cols: geometry.cols,
|
|
191
|
+
rows: geometry.rows,
|
|
192
|
+
}, geometry.outputSequenceBoundary);
|
|
193
|
+
break;
|
|
194
|
+
}
|
|
195
|
+
case TerminalLiveFrameType.SessionClosed:
|
|
196
|
+
if (frame.payload.byteLength !== 0)
|
|
197
|
+
throw new Error('invalid terminal live session closed payload');
|
|
198
|
+
this.closed = true;
|
|
199
|
+
this.rejectResizeWaiters(new Error('terminal session closed'));
|
|
200
|
+
this.onClosed?.('session_closed');
|
|
201
|
+
await this.stream.close();
|
|
202
|
+
return;
|
|
203
|
+
case TerminalLiveFrameType.Error: {
|
|
204
|
+
const protocolError = decodeProtocolError(frame);
|
|
205
|
+
throw new TerminalLiveServerError(protocolError.code, protocolError.message);
|
|
206
|
+
}
|
|
207
|
+
default:
|
|
208
|
+
throw new Error(`invalid terminal live server frame: 0x${frame.type.toString(16)}`);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
catch (value) {
|
|
213
|
+
const error = value instanceof Error ? value : new Error(String(value));
|
|
214
|
+
await this.fail(error);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
rejectResizeWaiters(error) {
|
|
218
|
+
for (const waiter of this.resizeWaiters.values())
|
|
219
|
+
waiter.reject(error);
|
|
220
|
+
this.resizeWaiters.clear();
|
|
221
|
+
this.pendingGeometries = [];
|
|
222
|
+
}
|
|
223
|
+
queueGeometry(geometry, outputSequenceBoundary, resizeSequence) {
|
|
224
|
+
this.pendingGeometries.push({ geometry, outputSequenceBoundary, resizeSequence });
|
|
225
|
+
this.flushPendingGeometries();
|
|
226
|
+
}
|
|
227
|
+
flushPendingGeometries() {
|
|
228
|
+
if (this.pendingGeometries.length === 0)
|
|
229
|
+
return;
|
|
230
|
+
const ready = [];
|
|
231
|
+
const waiting = [];
|
|
232
|
+
for (const pending of this.pendingGeometries) {
|
|
233
|
+
(pending.outputSequenceBoundary <= this.lastOutputSequence ? ready : waiting).push(pending);
|
|
234
|
+
}
|
|
235
|
+
this.pendingGeometries = waiting;
|
|
236
|
+
ready.sort((left, right) => (left.outputSequenceBoundary === right.outputSequenceBoundary
|
|
237
|
+
? left.geometry.generation - right.geometry.generation
|
|
238
|
+
: left.outputSequenceBoundary < right.outputSequenceBoundary ? -1 : 1));
|
|
239
|
+
for (const pending of ready) {
|
|
240
|
+
this.applyGeometry(pending.geometry);
|
|
241
|
+
if (pending.resizeSequence !== undefined) {
|
|
242
|
+
const waiter = this.resizeWaiters.get(pending.resizeSequence);
|
|
243
|
+
if (!waiter)
|
|
244
|
+
continue;
|
|
245
|
+
this.resizeWaiters.delete(pending.resizeSequence);
|
|
246
|
+
waiter.resolve();
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
applyGeometry(next) {
|
|
251
|
+
if (next.generation < this.geometry.generation)
|
|
252
|
+
return;
|
|
253
|
+
if (next.generation === this.geometry.generation) {
|
|
254
|
+
if (next.cols !== this.geometry.cols || next.rows !== this.geometry.rows) {
|
|
255
|
+
throw new Error('terminal live geometry changed without advancing its generation');
|
|
256
|
+
}
|
|
257
|
+
if (next.outputSequenceBoundary > this.geometry.outputSequenceBoundary) {
|
|
258
|
+
this.geometry = next;
|
|
259
|
+
}
|
|
260
|
+
return;
|
|
261
|
+
}
|
|
262
|
+
this.geometry = next;
|
|
263
|
+
this.onGeometry?.(next);
|
|
264
|
+
}
|
|
265
|
+
async fail(error) {
|
|
266
|
+
if (this.failed)
|
|
267
|
+
return;
|
|
268
|
+
this.failed = true;
|
|
269
|
+
this.closed = true;
|
|
270
|
+
this.rejectResizeWaiters(error);
|
|
271
|
+
this.onError?.(error);
|
|
272
|
+
try {
|
|
273
|
+
if (this.stream.reset)
|
|
274
|
+
await this.stream.reset(error);
|
|
275
|
+
else
|
|
276
|
+
await this.stream.close();
|
|
277
|
+
}
|
|
278
|
+
catch {
|
|
279
|
+
// The original protocol error is authoritative.
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
export const connectTerminalLive = async (options) => {
|
|
284
|
+
let stream = null;
|
|
285
|
+
try {
|
|
286
|
+
stream = await options.openStream(StreamKind, options.signal ? { signal: options.signal } : undefined);
|
|
287
|
+
await stream.write(encodeAttach({
|
|
288
|
+
sessionId: options.attach.sessionId,
|
|
289
|
+
connectionId: options.attach.connectionId,
|
|
290
|
+
attachGeneration: BigInt(options.attach.attachGeneration),
|
|
291
|
+
cols: options.attach.cols,
|
|
292
|
+
rows: options.attach.rows,
|
|
293
|
+
}));
|
|
294
|
+
const reader = new FrameReader(stream);
|
|
295
|
+
const first = await reader.read();
|
|
296
|
+
if (first == null)
|
|
297
|
+
throw new Error('terminal live stream ended before attach acknowledgement');
|
|
298
|
+
if (first.type === TerminalLiveFrameType.Error) {
|
|
299
|
+
const protocolError = decodeProtocolError(first);
|
|
300
|
+
throw new TerminalLiveServerError(protocolError.code, protocolError.message);
|
|
301
|
+
}
|
|
302
|
+
if (first.type !== TerminalLiveFrameType.Attached) {
|
|
303
|
+
throw new Error(`invalid terminal live server frame before attach: 0x${first.type.toString(16)}`);
|
|
304
|
+
}
|
|
305
|
+
const connection = new TerminalLiveConnectionImpl(stream, reader, decodeAttached(first), options.onOutputBatch, options.onGeometry, options.onClosed, options.onError);
|
|
306
|
+
connection.start();
|
|
307
|
+
return connection;
|
|
308
|
+
}
|
|
309
|
+
catch (value) {
|
|
310
|
+
const error = value instanceof Error ? value : new Error(String(value));
|
|
311
|
+
options.onError?.(error);
|
|
312
|
+
if (stream) {
|
|
313
|
+
try {
|
|
314
|
+
if (stream.reset)
|
|
315
|
+
await stream.reset(error);
|
|
316
|
+
else
|
|
317
|
+
await stream.close();
|
|
318
|
+
}
|
|
319
|
+
catch {
|
|
320
|
+
// The attach error is authoritative.
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
throw error;
|
|
324
|
+
}
|
|
325
|
+
};
|
|
326
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/live/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -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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"}
|