@sealant/runtime-client 0.3.0 → 0.4.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/dist/channel.d.ts +84 -0
- package/dist/channel.d.ts.map +1 -0
- package/dist/channel.js +166 -0
- package/dist/channel.js.map +1 -0
- package/dist/client.d.ts +65 -3
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +153 -3
- package/dist/client.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import type { StreamEnd, StreamWindowUpdate } from "@sealant/runtime-protocol";
|
|
2
|
+
/** How a `Channel` writes a frame back to the daemon over the shared connection. The client wires
|
|
3
|
+
* this to its framed-socket writer; the channel never touches the socket directly. */
|
|
4
|
+
export interface ChannelTransport {
|
|
5
|
+
/** Send a `StreamFrame::Data` for this channel. */
|
|
6
|
+
sendData(channelId: string, data: Uint8Array): void;
|
|
7
|
+
/** Send a `StreamFrame::WindowUpdate` (flow-control credits) for this channel. */
|
|
8
|
+
sendWindowUpdate(channelId: string, credits: bigint): void;
|
|
9
|
+
/** Send a `StreamFrame::End` for this channel (half-close from the client side). */
|
|
10
|
+
sendEnd(channelId: string, end?: StreamEnd): void;
|
|
11
|
+
/** Detach this channel from the client's demux table once it is fully closed. */
|
|
12
|
+
release(channelId: string): void;
|
|
13
|
+
}
|
|
14
|
+
/** Why a channel fully closed: a daemon `StreamEnd`, a local `destroy()` teardown, or the
|
|
15
|
+
* connection dying. Note that a half-close via `end()` does NOT resolve `closed` — only the *full*
|
|
16
|
+
* close does, and for a well-behaved peer that arrives as `remote` (the daemon's `StreamEnd`). */
|
|
17
|
+
export type ChannelClose = {
|
|
18
|
+
kind: "remote";
|
|
19
|
+
end: StreamEnd;
|
|
20
|
+
} | {
|
|
21
|
+
kind: "local";
|
|
22
|
+
} | {
|
|
23
|
+
kind: "error";
|
|
24
|
+
error: Error;
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* One demultiplexed byte channel. It is an async-iterable of inbound `Uint8Array` chunks (the bytes
|
|
28
|
+
* the daemon wrote on this `channelId`) and exposes `write`/`windowUpdate`/`end` for outbound bytes.
|
|
29
|
+
*
|
|
30
|
+
* Backpressure-friendly: inbound chunks queue until consumed; `closed` resolves with the close cause.
|
|
31
|
+
*/
|
|
32
|
+
export declare class Channel implements AsyncIterable<Uint8Array> {
|
|
33
|
+
#private;
|
|
34
|
+
/** The daemon-assigned channel id this conduit is bound to. */
|
|
35
|
+
readonly channelId: string;
|
|
36
|
+
/** Resolves with the cause when the channel is *fully* closed (remote End, local `destroy()`, or
|
|
37
|
+
* error). A half-close via `end()` does NOT resolve this — inbound keeps flowing until the remote
|
|
38
|
+
* `StreamEnd`, at which point it resolves as `remote`. */
|
|
39
|
+
readonly closed: Promise<ChannelClose>;
|
|
40
|
+
constructor(channelId: string, transport: ChannelTransport);
|
|
41
|
+
/** True once the channel has been *fully* closed (both halves done). */
|
|
42
|
+
get isClosed(): boolean;
|
|
43
|
+
/** True once the outbound half has been closed via `end()` (or a full close). Inbound may still
|
|
44
|
+
* be flowing while this is true. */
|
|
45
|
+
get isOutboundClosed(): boolean;
|
|
46
|
+
/** The close cause, if the channel is closed; otherwise `undefined`. */
|
|
47
|
+
get closeCause(): ChannelClose | undefined;
|
|
48
|
+
/** Route an inbound `StreamFrame::Data` payload into this channel's byte stream. */
|
|
49
|
+
pushData(data: Uint8Array): void;
|
|
50
|
+
/** Route an inbound `StreamFrame::WindowUpdate`: release outbound writers waiting on credits. */
|
|
51
|
+
pushWindowUpdate(update: StreamWindowUpdate): void;
|
|
52
|
+
/** Route an inbound `StreamFrame::End`: drain queued bytes, then close the iterator. */
|
|
53
|
+
pushEnd(end: StreamEnd): void;
|
|
54
|
+
/** The connection died under us; fail the channel. */
|
|
55
|
+
fail(error: Error): void;
|
|
56
|
+
/** Write bytes to the daemon as a `StreamFrame::Data` on this channel. Throws once the outbound
|
|
57
|
+
* half has been closed (via `end()`/`destroy()`) or the channel is fully closed. */
|
|
58
|
+
write(data: Uint8Array): void;
|
|
59
|
+
/** Grant the daemon `credits` more bytes of send window (`StreamFrame::WindowUpdate`). Throws once
|
|
60
|
+
* the outbound half is closed. (Credits flow with outbound frames; once we have half-closed we no
|
|
61
|
+
* longer issue them.) */
|
|
62
|
+
windowUpdate(credits: bigint): void;
|
|
63
|
+
/** Await the next inbound `WindowUpdate`'s credit count (for outbound flow control). */
|
|
64
|
+
awaitWindow(): Promise<bigint>;
|
|
65
|
+
/**
|
|
66
|
+
* Half-close the outbound direction: send a `StreamFrame::End` to the daemon (our EOF) and reject
|
|
67
|
+
* further `write`/`windowUpdate`. Crucially this does NOT tear down inbound — the channel keeps
|
|
68
|
+
* delivering the daemon's output and stays open until the remote `StreamEnd` arrives (which then
|
|
69
|
+
* resolves `closed` as `remote`). This is the SSH semantics `ssh host cmd` relies on: stdin can
|
|
70
|
+
* hit EOF immediately while stdout/stderr and the exit status are still in flight.
|
|
71
|
+
*
|
|
72
|
+
* Idempotent; a no-op if the outbound half is already closed or the channel is fully closed.
|
|
73
|
+
*/
|
|
74
|
+
end(end?: StreamEnd): void;
|
|
75
|
+
/**
|
|
76
|
+
* Full local teardown: half-close the outbound direction if it is still open, then close inbound
|
|
77
|
+
* too and resolve `closed` as `local`. Use this for a real abort/teardown where you do not intend
|
|
78
|
+
* to keep reading the daemon's remaining output. For normal completion prefer `end()` and let the
|
|
79
|
+
* remote `StreamEnd` close the channel.
|
|
80
|
+
*/
|
|
81
|
+
destroy(end?: StreamEnd): void;
|
|
82
|
+
[Symbol.asyncIterator](): AsyncIterator<Uint8Array>;
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=channel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"channel.d.ts","sourceRoot":"","sources":["../src/channel.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAE/E;sFACsF;AACtF,MAAM,WAAW,gBAAgB;IAC/B,mDAAmD;IACnD,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,IAAI,CAAC;IACpD,kFAAkF;IAClF,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3D,oFAAoF;IACpF,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;IAClD,iFAAiF;IACjF,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC;AAED;;kGAEkG;AAClG,MAAM,MAAM,YAAY,GACpB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,GAAG,EAAE,SAAS,CAAA;CAAE,GAClC;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,GACjB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,KAAK,CAAA;CAAE,CAAC;AAEpC;;;;;GAKG;AACH,qBAAa,OAAQ,YAAW,aAAa,CAAC,UAAU,CAAC;;IACvD,+DAA+D;IAC/D,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAc3B;;8DAE0D;IAC1D,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;gBAE3B,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,gBAAgB;IAQ1D,wEAAwE;IACxE,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED;wCACoC;IACpC,IAAI,gBAAgB,IAAI,OAAO,CAE9B;IAED,wEAAwE;IACxE,IAAI,UAAU,IAAI,YAAY,GAAG,SAAS,CAEzC;IAID,oFAAoF;IACpF,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAUhC,iGAAiG;IACjG,gBAAgB,CAAC,MAAM,EAAE,kBAAkB,GAAG,IAAI;IAKlD,wFAAwF;IACxF,OAAO,CAAC,GAAG,EAAE,SAAS,GAAG,IAAI;IAI7B,sDAAsD;IACtD,IAAI,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAMxB;wFACoF;IACpF,KAAK,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAK7B;;6BAEyB;IACzB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAKnC,wFAAwF;IACxF,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC;IAI9B;;;;;;;;OAQG;IACH,GAAG,CAAC,GAAG,CAAC,EAAE,SAAS,GAAG,IAAI;IAM1B;;;;;OAKG;IACH,OAAO,CAAC,GAAG,CAAC,EAAE,SAAS,GAAG,IAAI;IAW9B,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,aAAa,CAAC,UAAU,CAAC;CA+BpD"}
|
package/dist/channel.js
ADDED
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
// @sealant/runtime-client — channel multiplexing.
|
|
2
|
+
//
|
|
3
|
+
// A `Channel` is one logical byte conduit inside the single length-prefixed control connection
|
|
4
|
+
// (ADR-0012). The daemon addresses frames by `channelId`; the client demuxes inbound
|
|
5
|
+
// `ServerMessage::Stream` frames into the matching `Channel` and the `Channel` muxes outbound bytes
|
|
6
|
+
// back out as `ClientMessage::Stream` frames. This is the substrate the gateway builds SSH channels
|
|
7
|
+
// (session attach, direct-tcpip forwards, SFTP subsystem) on top of.
|
|
8
|
+
/**
|
|
9
|
+
* One demultiplexed byte channel. It is an async-iterable of inbound `Uint8Array` chunks (the bytes
|
|
10
|
+
* the daemon wrote on this `channelId`) and exposes `write`/`windowUpdate`/`end` for outbound bytes.
|
|
11
|
+
*
|
|
12
|
+
* Backpressure-friendly: inbound chunks queue until consumed; `closed` resolves with the close cause.
|
|
13
|
+
*/
|
|
14
|
+
export class Channel {
|
|
15
|
+
/** The daemon-assigned channel id this conduit is bound to. */
|
|
16
|
+
channelId;
|
|
17
|
+
#transport;
|
|
18
|
+
#inbound = [];
|
|
19
|
+
#waiters = [];
|
|
20
|
+
#windowWaiters = [];
|
|
21
|
+
/** Outbound half-closed: we have sent our `StreamEnd`; `write`/`windowUpdate` are now rejected.
|
|
22
|
+
* Inbound delivery is unaffected — this is the SSH-style half-close. */
|
|
23
|
+
#outboundClosed = false;
|
|
24
|
+
/** Fully closed: both halves are done. Inbound iterator completes and `closed` resolves. */
|
|
25
|
+
#closed = false;
|
|
26
|
+
#close;
|
|
27
|
+
#resolveClosed;
|
|
28
|
+
/** Resolves with the cause when the channel is *fully* closed (remote End, local `destroy()`, or
|
|
29
|
+
* error). A half-close via `end()` does NOT resolve this — inbound keeps flowing until the remote
|
|
30
|
+
* `StreamEnd`, at which point it resolves as `remote`. */
|
|
31
|
+
closed;
|
|
32
|
+
constructor(channelId, transport) {
|
|
33
|
+
this.channelId = channelId;
|
|
34
|
+
this.#transport = transport;
|
|
35
|
+
this.closed = new Promise((resolve) => {
|
|
36
|
+
this.#resolveClosed = resolve;
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
/** True once the channel has been *fully* closed (both halves done). */
|
|
40
|
+
get isClosed() {
|
|
41
|
+
return this.#closed;
|
|
42
|
+
}
|
|
43
|
+
/** True once the outbound half has been closed via `end()` (or a full close). Inbound may still
|
|
44
|
+
* be flowing while this is true. */
|
|
45
|
+
get isOutboundClosed() {
|
|
46
|
+
return this.#outboundClosed;
|
|
47
|
+
}
|
|
48
|
+
/** The close cause, if the channel is closed; otherwise `undefined`. */
|
|
49
|
+
get closeCause() {
|
|
50
|
+
return this.#close;
|
|
51
|
+
}
|
|
52
|
+
// --- inbound (demux target; called by the client) -------------------------------------------
|
|
53
|
+
/** Route an inbound `StreamFrame::Data` payload into this channel's byte stream. */
|
|
54
|
+
pushData(data) {
|
|
55
|
+
if (this.#closed)
|
|
56
|
+
return;
|
|
57
|
+
const waiter = this.#waiters.shift();
|
|
58
|
+
if (waiter) {
|
|
59
|
+
waiter({ value: data, done: false });
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
this.#inbound.push(data);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
/** Route an inbound `StreamFrame::WindowUpdate`: release outbound writers waiting on credits. */
|
|
66
|
+
pushWindowUpdate(update) {
|
|
67
|
+
if (this.#closed)
|
|
68
|
+
return;
|
|
69
|
+
for (const w of this.#windowWaiters.splice(0))
|
|
70
|
+
w(update.credits);
|
|
71
|
+
}
|
|
72
|
+
/** Route an inbound `StreamFrame::End`: drain queued bytes, then close the iterator. */
|
|
73
|
+
pushEnd(end) {
|
|
74
|
+
this.#finish({ kind: "remote", end });
|
|
75
|
+
}
|
|
76
|
+
/** The connection died under us; fail the channel. */
|
|
77
|
+
fail(error) {
|
|
78
|
+
this.#finish({ kind: "error", error });
|
|
79
|
+
}
|
|
80
|
+
// --- outbound (mux source; called by the consumer) ------------------------------------------
|
|
81
|
+
/** Write bytes to the daemon as a `StreamFrame::Data` on this channel. Throws once the outbound
|
|
82
|
+
* half has been closed (via `end()`/`destroy()`) or the channel is fully closed. */
|
|
83
|
+
write(data) {
|
|
84
|
+
if (this.#outboundClosed)
|
|
85
|
+
throw new Error(`channel ${this.channelId} outbound is closed`);
|
|
86
|
+
this.#transport.sendData(this.channelId, data);
|
|
87
|
+
}
|
|
88
|
+
/** Grant the daemon `credits` more bytes of send window (`StreamFrame::WindowUpdate`). Throws once
|
|
89
|
+
* the outbound half is closed. (Credits flow with outbound frames; once we have half-closed we no
|
|
90
|
+
* longer issue them.) */
|
|
91
|
+
windowUpdate(credits) {
|
|
92
|
+
if (this.#outboundClosed)
|
|
93
|
+
throw new Error(`channel ${this.channelId} outbound is closed`);
|
|
94
|
+
this.#transport.sendWindowUpdate(this.channelId, credits);
|
|
95
|
+
}
|
|
96
|
+
/** Await the next inbound `WindowUpdate`'s credit count (for outbound flow control). */
|
|
97
|
+
awaitWindow() {
|
|
98
|
+
return new Promise((resolve) => this.#windowWaiters.push(resolve));
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Half-close the outbound direction: send a `StreamFrame::End` to the daemon (our EOF) and reject
|
|
102
|
+
* further `write`/`windowUpdate`. Crucially this does NOT tear down inbound — the channel keeps
|
|
103
|
+
* delivering the daemon's output and stays open until the remote `StreamEnd` arrives (which then
|
|
104
|
+
* resolves `closed` as `remote`). This is the SSH semantics `ssh host cmd` relies on: stdin can
|
|
105
|
+
* hit EOF immediately while stdout/stderr and the exit status are still in flight.
|
|
106
|
+
*
|
|
107
|
+
* Idempotent; a no-op if the outbound half is already closed or the channel is fully closed.
|
|
108
|
+
*/
|
|
109
|
+
end(end) {
|
|
110
|
+
if (this.#outboundClosed || this.#closed)
|
|
111
|
+
return;
|
|
112
|
+
this.#outboundClosed = true;
|
|
113
|
+
this.#transport.sendEnd(this.channelId, end);
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Full local teardown: half-close the outbound direction if it is still open, then close inbound
|
|
117
|
+
* too and resolve `closed` as `local`. Use this for a real abort/teardown where you do not intend
|
|
118
|
+
* to keep reading the daemon's remaining output. For normal completion prefer `end()` and let the
|
|
119
|
+
* remote `StreamEnd` close the channel.
|
|
120
|
+
*/
|
|
121
|
+
destroy(end) {
|
|
122
|
+
if (this.#closed)
|
|
123
|
+
return;
|
|
124
|
+
if (!this.#outboundClosed) {
|
|
125
|
+
this.#outboundClosed = true;
|
|
126
|
+
this.#transport.sendEnd(this.channelId, end);
|
|
127
|
+
}
|
|
128
|
+
this.#finish({ kind: "local" });
|
|
129
|
+
}
|
|
130
|
+
// --- async iteration --------------------------------------------------------------------------
|
|
131
|
+
[Symbol.asyncIterator]() {
|
|
132
|
+
return {
|
|
133
|
+
next: () => {
|
|
134
|
+
const queued = this.#inbound.shift();
|
|
135
|
+
if (queued !== undefined)
|
|
136
|
+
return Promise.resolve({ value: queued, done: false });
|
|
137
|
+
if (this.#closed)
|
|
138
|
+
return Promise.resolve({ value: undefined, done: true });
|
|
139
|
+
return new Promise((resolve) => this.#waiters.push(resolve));
|
|
140
|
+
},
|
|
141
|
+
// The consumer stopped iterating (e.g. `break`): they will read no more inbound bytes, so this
|
|
142
|
+
// is a real teardown, not a half-close. Destroy fully.
|
|
143
|
+
return: () => {
|
|
144
|
+
this.destroy();
|
|
145
|
+
return Promise.resolve({ value: undefined, done: true });
|
|
146
|
+
},
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
/** Internal: mark closed once, drain waiters, resolve `closed`, and detach from the demux table. */
|
|
150
|
+
#finish(cause) {
|
|
151
|
+
if (this.#closed)
|
|
152
|
+
return;
|
|
153
|
+
this.#closed = true;
|
|
154
|
+
// A full close implies the outbound half is closed too (block any late writes).
|
|
155
|
+
this.#outboundClosed = true;
|
|
156
|
+
this.#close = cause;
|
|
157
|
+
for (const waiter of this.#waiters.splice(0)) {
|
|
158
|
+
waiter({ value: undefined, done: true });
|
|
159
|
+
}
|
|
160
|
+
for (const w of this.#windowWaiters.splice(0))
|
|
161
|
+
w(0n);
|
|
162
|
+
this.#transport.release(this.channelId);
|
|
163
|
+
this.#resolveClosed(cause);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
//# sourceMappingURL=channel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"channel.js","sourceRoot":"","sources":["../src/channel.ts"],"names":[],"mappings":"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"}
|
package/dist/client.d.ts
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import type { ChildProcess } from "node:child_process";
|
|
2
2
|
import type { Duplex } from "node:stream";
|
|
3
3
|
import type { MessageInitShape } from "@bufbuild/protobuf";
|
|
4
|
-
import { CommandSchema, ControlErrorCode, type Capabilities, type ControlError, type ControlResponse, type EventEnvelope, type ExecAccepted, type HealthReport, type ProcessList, type RuntimeMetrics } from "@sealant/runtime-protocol";
|
|
4
|
+
import { CommandSchema, ControlErrorCode, AttachMode, type Capabilities, type ControlError, type ControlResponse, type EventEnvelope, type ExecAccepted, type ForwardOpened, type HealthReport, type ProcessAttached, type ProcessList, type RuntimeMetrics, type SftpOpened, type StreamAttached } from "@sealant/runtime-protocol";
|
|
5
|
+
import { Channel } from "./channel.js";
|
|
6
|
+
export { Channel } from "./channel.js";
|
|
7
|
+
export type { ChannelTransport, ChannelClose } from "./channel.js";
|
|
5
8
|
/** Error raised when the daemon returns a typed control error. */
|
|
6
9
|
export declare class SealantError extends Error {
|
|
7
10
|
/** Stable error code (e.g. `ControlErrorCode.PROCESS_START_FAILED`). */
|
|
@@ -53,17 +56,76 @@ export declare class SealantClient {
|
|
|
53
56
|
}>;
|
|
54
57
|
/** Send a command oneof case and await its single (typed) response. */
|
|
55
58
|
request(command: CommandInit): Promise<ControlResponse>;
|
|
59
|
+
/**
|
|
60
|
+
* Register a {@link Channel} for `channelId` so inbound `ServerMessage::Stream` frames demux into
|
|
61
|
+
* it and writes mux back out. Low-level: the high-level openers ({@link SealantClient.attachSession},
|
|
62
|
+
* {@link SealantClient.openForward}, {@link SealantClient.openSftp}, {@link SealantClient.execAttached})
|
|
63
|
+
* call this with the daemon-allocated id from their result. A multiplexing consumer (the gateway)
|
|
64
|
+
* can also call it directly when it already holds a channel id.
|
|
65
|
+
*/
|
|
66
|
+
openChannel(channelId: string): Channel;
|
|
56
67
|
health(): Promise<HealthReport>;
|
|
57
68
|
getCapabilities(): Promise<Capabilities>;
|
|
58
69
|
getMetrics(): Promise<RuntimeMetrics>;
|
|
59
70
|
listProcesses(executionId?: string): Promise<ProcessList>;
|
|
60
71
|
exec(options: ExecOptions): Promise<ExecAccepted>;
|
|
61
|
-
|
|
72
|
+
/**
|
|
73
|
+
* Write input bytes to a process's stdin or an interactive PTY session's input.
|
|
74
|
+
*
|
|
75
|
+
* The daemon's `WriteStdinArgs` carries an exclusive choice of `processId` (non-PTY stdin) OR
|
|
76
|
+
* `sessionId` (PTY input); it routes by whichever is set (see runtime dispatch). The gateway needs
|
|
77
|
+
* the `sessionId` path to deliver SSH PTY keystrokes to a live session.
|
|
78
|
+
*
|
|
79
|
+
* Backward compatible: a bare string `target` is treated as a `processId` (the original signature).
|
|
80
|
+
* Pass `{ sessionId }` to target a session, or `{ processId }` to be explicit.
|
|
81
|
+
*/
|
|
82
|
+
writeStdin(target: string | {
|
|
83
|
+
processId: string;
|
|
84
|
+
} | {
|
|
85
|
+
sessionId: string;
|
|
86
|
+
}, data: Uint8Array): Promise<void>;
|
|
87
|
+
/**
|
|
88
|
+
* Convenience for the gateway's interactive path: deliver `data` to a PTY session's input by
|
|
89
|
+
* `sessionId`. Equivalent to `writeStdin({ sessionId }, data)`.
|
|
90
|
+
*/
|
|
91
|
+
writeSessionInput(sessionId: string, data: Uint8Array): Promise<void>;
|
|
62
92
|
signalProcess(processId: string, signal: number): Promise<void>;
|
|
63
93
|
shutdown(graceMillis?: number): Promise<void>;
|
|
94
|
+
/** Attach to an existing PTY session as a multiplexed channel (interactive by default). */
|
|
95
|
+
attachSession(sessionId: string, mode?: AttachMode): Promise<{
|
|
96
|
+
result: StreamAttached;
|
|
97
|
+
channel: Channel;
|
|
98
|
+
}>;
|
|
99
|
+
/** Detach a previously attached session channel and tear down its local {@link Channel}. */
|
|
100
|
+
detachSession(channelId: string): Promise<void>;
|
|
101
|
+
/** Open a direct-TCP forward to `host:port` as a multiplexed byte channel. */
|
|
102
|
+
openForward(host: string, port: number, executionId?: string): Promise<{
|
|
103
|
+
result: ForwardOpened;
|
|
104
|
+
channel: Channel;
|
|
105
|
+
}>;
|
|
106
|
+
/** Close a forward channel and tear down its local {@link Channel}. */
|
|
107
|
+
closeForward(channelId: string): Promise<void>;
|
|
108
|
+
/** Open an SFTP subsystem channel as a multiplexed byte channel. */
|
|
109
|
+
openSftp(options?: {
|
|
110
|
+
executionId?: string;
|
|
111
|
+
cwd?: string;
|
|
112
|
+
}): Promise<{
|
|
113
|
+
result: SftpOpened;
|
|
114
|
+
channel: Channel;
|
|
115
|
+
}>;
|
|
116
|
+
/** Close an SFTP channel and tear down its local {@link Channel}. */
|
|
117
|
+
closeSftp(channelId: string): Promise<void>;
|
|
118
|
+
/**
|
|
119
|
+
* Exec with `attach=true`: the daemon allocates a byte channel bound to the process's stdio and
|
|
120
|
+
* returns {@link ProcessAttached} with its `channelId`. Returns the typed result plus the open
|
|
121
|
+
* {@link Channel} (stdout/stderr ride inbound frames; stdin rides outbound `write`).
|
|
122
|
+
*/
|
|
123
|
+
execAttached(options: ExecOptions): Promise<{
|
|
124
|
+
result: ProcessAttached;
|
|
125
|
+
channel: Channel;
|
|
126
|
+
}>;
|
|
64
127
|
/** Async iterator over telemetry events (typed `EventEnvelope`; `payload` is a discriminated union). */
|
|
65
128
|
events(): AsyncIterableIterator<EventEnvelope>;
|
|
66
129
|
close(): void;
|
|
67
130
|
}
|
|
68
|
-
export {};
|
|
69
131
|
//# sourceMappingURL=client.d.ts.map
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGvD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE3D,OAAO,EAOL,aAAa,
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/client.js
CHANGED
|
@@ -8,7 +8,9 @@ import net from "node:net";
|
|
|
8
8
|
import { spawn } from "node:child_process";
|
|
9
9
|
import { Buffer } from "node:buffer";
|
|
10
10
|
import { setTimeout as delay } from "node:timers/promises";
|
|
11
|
-
import { create, encodeClient, encodeFrame, FrameDecoder, SCHEMA_VERSION, ClientMessageSchema, CommandSchema, ControlErrorCode, } from "@sealant/runtime-protocol";
|
|
11
|
+
import { create, encodeClient, encodeFrame, FrameDecoder, SCHEMA_VERSION, ClientMessageSchema, CommandSchema, StreamFrameSchema, ControlErrorCode, AttachMode, } from "@sealant/runtime-protocol";
|
|
12
|
+
import { Channel } from "./channel.js";
|
|
13
|
+
export { Channel } from "./channel.js";
|
|
12
14
|
/** Error raised when the daemon returns a typed control error. */
|
|
13
15
|
export class SealantError extends Error {
|
|
14
16
|
/** Stable error code (e.g. `ControlErrorCode.PROCESS_START_FAILED`). */
|
|
@@ -51,8 +53,18 @@ export class SealantClient {
|
|
|
51
53
|
#closed = false;
|
|
52
54
|
#eventQueue = [];
|
|
53
55
|
#eventWaiters = [];
|
|
56
|
+
/** Demux table: channel_id → open `Channel`. Inbound `ServerMessage::Stream` frames route here. */
|
|
57
|
+
#channels = new Map();
|
|
58
|
+
#transport;
|
|
54
59
|
constructor(stream) {
|
|
55
60
|
this.#stream = stream;
|
|
61
|
+
// The transport every Channel uses to mux outbound frames back over this one connection.
|
|
62
|
+
this.#transport = {
|
|
63
|
+
sendData: (channelId, data) => this.#sendStream(channelId, { case: "data", value: data }),
|
|
64
|
+
sendWindowUpdate: (channelId, credits) => this.#sendStream(channelId, { case: "windowUpdate", value: { credits } }),
|
|
65
|
+
sendEnd: (channelId, end) => this.#sendStream(channelId, { case: "end", value: end ?? {} }),
|
|
66
|
+
release: (channelId) => this.#channels.delete(channelId),
|
|
67
|
+
};
|
|
56
68
|
this.#attach(stream);
|
|
57
69
|
}
|
|
58
70
|
/** Wire a transport stream's data/close/end/error events into the client. */
|
|
@@ -132,6 +144,30 @@ export class SealantClient {
|
|
|
132
144
|
});
|
|
133
145
|
});
|
|
134
146
|
}
|
|
147
|
+
/** Mux one outbound `ClientMessage::Stream` frame onto the shared connection. */
|
|
148
|
+
#sendStream(channelId, payload) {
|
|
149
|
+
if (this.#closed)
|
|
150
|
+
throw new Error("client is closed");
|
|
151
|
+
const message = create(ClientMessageSchema, {
|
|
152
|
+
message: { case: "stream", value: { channelId, seq: 0n, payload } },
|
|
153
|
+
});
|
|
154
|
+
this.#stream.write(encodeFrame(encodeClient(message)));
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Register a {@link Channel} for `channelId` so inbound `ServerMessage::Stream` frames demux into
|
|
158
|
+
* it and writes mux back out. Low-level: the high-level openers ({@link SealantClient.attachSession},
|
|
159
|
+
* {@link SealantClient.openForward}, {@link SealantClient.openSftp}, {@link SealantClient.execAttached})
|
|
160
|
+
* call this with the daemon-allocated id from their result. A multiplexing consumer (the gateway)
|
|
161
|
+
* can also call it directly when it already holds a channel id.
|
|
162
|
+
*/
|
|
163
|
+
openChannel(channelId) {
|
|
164
|
+
const existing = this.#channels.get(channelId);
|
|
165
|
+
if (existing)
|
|
166
|
+
return existing;
|
|
167
|
+
const channel = new Channel(channelId, this.#transport);
|
|
168
|
+
this.#channels.set(channelId, channel);
|
|
169
|
+
return channel;
|
|
170
|
+
}
|
|
135
171
|
async health() {
|
|
136
172
|
return resultValue(okResult(await this.request({ case: "runtimeHealth", value: {} })), "health");
|
|
137
173
|
}
|
|
@@ -162,8 +198,30 @@ export class SealantClient {
|
|
|
162
198
|
}));
|
|
163
199
|
return resultValue(result, "execAccepted");
|
|
164
200
|
}
|
|
165
|
-
|
|
166
|
-
|
|
201
|
+
/**
|
|
202
|
+
* Write input bytes to a process's stdin or an interactive PTY session's input.
|
|
203
|
+
*
|
|
204
|
+
* The daemon's `WriteStdinArgs` carries an exclusive choice of `processId` (non-PTY stdin) OR
|
|
205
|
+
* `sessionId` (PTY input); it routes by whichever is set (see runtime dispatch). The gateway needs
|
|
206
|
+
* the `sessionId` path to deliver SSH PTY keystrokes to a live session.
|
|
207
|
+
*
|
|
208
|
+
* Backward compatible: a bare string `target` is treated as a `processId` (the original signature).
|
|
209
|
+
* Pass `{ sessionId }` to target a session, or `{ processId }` to be explicit.
|
|
210
|
+
*/
|
|
211
|
+
async writeStdin(target, data) {
|
|
212
|
+
const value = typeof target === "string"
|
|
213
|
+
? { processId: target, data }
|
|
214
|
+
: "sessionId" in target
|
|
215
|
+
? { sessionId: target.sessionId, data }
|
|
216
|
+
: { processId: target.processId, data };
|
|
217
|
+
okResult(await this.request({ case: "writeStdin", value }));
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Convenience for the gateway's interactive path: deliver `data` to a PTY session's input by
|
|
221
|
+
* `sessionId`. Equivalent to `writeStdin({ sessionId }, data)`.
|
|
222
|
+
*/
|
|
223
|
+
async writeSessionInput(sessionId, data) {
|
|
224
|
+
okResult(await this.request({ case: "writeStdin", value: { sessionId, data } }));
|
|
167
225
|
}
|
|
168
226
|
async signalProcess(processId, signal) {
|
|
169
227
|
okResult(await this.request({ case: "signalProcess", value: { processId, signal } }));
|
|
@@ -172,6 +230,69 @@ export class SealantClient {
|
|
|
172
230
|
const value = graceMillis === undefined ? {} : { graceMillis: BigInt(graceMillis) };
|
|
173
231
|
okResult(await this.request({ case: "runtimeGracefulShutdown", value }));
|
|
174
232
|
}
|
|
233
|
+
// ===================== channel multiplexing =====================
|
|
234
|
+
//
|
|
235
|
+
// Each opener sends its command, reads the daemon-allocated channel_id out of the typed result, and
|
|
236
|
+
// returns an open {@link Channel} already wired into the demux table — an async-iterable of that
|
|
237
|
+
// channel's inbound bytes plus `write`/`windowUpdate`/`end` for outbound bytes.
|
|
238
|
+
/** Attach to an existing PTY session as a multiplexed channel (interactive by default). */
|
|
239
|
+
async attachSession(sessionId, mode = AttachMode.INTERACTIVE) {
|
|
240
|
+
const result = resultValue(okResult(await this.request({ case: "attachSession", value: { sessionId, mode } })), "streamAttached");
|
|
241
|
+
return { result, channel: this.openChannel(result.channelId) };
|
|
242
|
+
}
|
|
243
|
+
/** Detach a previously attached session channel and tear down its local {@link Channel}. */
|
|
244
|
+
async detachSession(channelId) {
|
|
245
|
+
okResult(await this.request({ case: "detachSession", value: { channelId } }));
|
|
246
|
+
// Explicit teardown command: fully close the local channel, don't leave inbound half-open.
|
|
247
|
+
this.#channels.get(channelId)?.destroy();
|
|
248
|
+
}
|
|
249
|
+
/** Open a direct-TCP forward to `host:port` as a multiplexed byte channel. */
|
|
250
|
+
async openForward(host, port, executionId) {
|
|
251
|
+
const result = resultValue(okResult(await this.request({ case: "openForward", value: { host, port, executionId } })), "forwardOpened");
|
|
252
|
+
return { result, channel: this.openChannel(result.channelId) };
|
|
253
|
+
}
|
|
254
|
+
/** Close a forward channel and tear down its local {@link Channel}. */
|
|
255
|
+
async closeForward(channelId) {
|
|
256
|
+
okResult(await this.request({ case: "closeForward", value: { channelId } }));
|
|
257
|
+
// Explicit teardown command: fully close the local channel, don't leave inbound half-open.
|
|
258
|
+
this.#channels.get(channelId)?.destroy();
|
|
259
|
+
}
|
|
260
|
+
/** Open an SFTP subsystem channel as a multiplexed byte channel. */
|
|
261
|
+
async openSftp(options = {}) {
|
|
262
|
+
const result = resultValue(okResult(await this.request({
|
|
263
|
+
case: "openSftp",
|
|
264
|
+
value: { executionId: options.executionId, cwd: options.cwd },
|
|
265
|
+
})), "sftpOpened");
|
|
266
|
+
return { result, channel: this.openChannel(result.channelId) };
|
|
267
|
+
}
|
|
268
|
+
/** Close an SFTP channel and tear down its local {@link Channel}. */
|
|
269
|
+
async closeSftp(channelId) {
|
|
270
|
+
okResult(await this.request({ case: "closeSftp", value: { channelId } }));
|
|
271
|
+
// Explicit teardown command: fully close the local channel, don't leave inbound half-open.
|
|
272
|
+
this.#channels.get(channelId)?.destroy();
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* Exec with `attach=true`: the daemon allocates a byte channel bound to the process's stdio and
|
|
276
|
+
* returns {@link ProcessAttached} with its `channelId`. Returns the typed result plus the open
|
|
277
|
+
* {@link Channel} (stdout/stderr ride inbound frames; stdin rides outbound `write`).
|
|
278
|
+
*/
|
|
279
|
+
async execAttached(options) {
|
|
280
|
+
const result = resultValue(okResult(await this.request({
|
|
281
|
+
case: "exec",
|
|
282
|
+
value: {
|
|
283
|
+
executable: options.executable,
|
|
284
|
+
args: options.args ?? [],
|
|
285
|
+
executionId: options.executionId,
|
|
286
|
+
sessionId: options.sessionId,
|
|
287
|
+
cwd: options.cwd,
|
|
288
|
+
stdin: options.stdin ?? false,
|
|
289
|
+
timeoutMillis: options.timeoutMillis === undefined ? undefined : BigInt(options.timeoutMillis),
|
|
290
|
+
background: options.background ?? false,
|
|
291
|
+
attach: true,
|
|
292
|
+
},
|
|
293
|
+
})), "processAttached");
|
|
294
|
+
return { result, channel: this.openChannel(result.channelId) };
|
|
295
|
+
}
|
|
175
296
|
/** Async iterator over telemetry events (typed `EventEnvelope`; `payload` is a discriminated union). */
|
|
176
297
|
events() {
|
|
177
298
|
const self = this;
|
|
@@ -218,6 +339,30 @@ export class SealantClient {
|
|
|
218
339
|
else if (message.message.case === "event") {
|
|
219
340
|
this.#emitEvent(message.message.value);
|
|
220
341
|
}
|
|
342
|
+
else if (message.message.case === "stream") {
|
|
343
|
+
this.#routeStream(message.message.value);
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
/** Demultiplex one inbound `ServerMessage::Stream` frame into its `Channel` by `channelId`. */
|
|
348
|
+
#routeStream(frame) {
|
|
349
|
+
const channel = this.#channels.get(frame.channelId);
|
|
350
|
+
if (!channel) {
|
|
351
|
+
// Frame for an unknown/already-closed channel: nothing to deliver to. Drop it.
|
|
352
|
+
return;
|
|
353
|
+
}
|
|
354
|
+
switch (frame.payload.case) {
|
|
355
|
+
case "data":
|
|
356
|
+
channel.pushData(frame.payload.value);
|
|
357
|
+
break;
|
|
358
|
+
case "windowUpdate":
|
|
359
|
+
channel.pushWindowUpdate(frame.payload.value);
|
|
360
|
+
break;
|
|
361
|
+
case "end":
|
|
362
|
+
channel.pushEnd(frame.payload.value);
|
|
363
|
+
break;
|
|
364
|
+
default:
|
|
365
|
+
break;
|
|
221
366
|
}
|
|
222
367
|
}
|
|
223
368
|
#emitEvent(event) {
|
|
@@ -238,6 +383,11 @@ export class SealantClient {
|
|
|
238
383
|
pending.reject(new Error("connection closed"));
|
|
239
384
|
}
|
|
240
385
|
this.#pending.clear();
|
|
386
|
+
// Fail every open channel so consumers iterating their bytes/`closed` promise unblock.
|
|
387
|
+
for (const channel of [...this.#channels.values()]) {
|
|
388
|
+
channel.fail(new Error("connection closed"));
|
|
389
|
+
}
|
|
390
|
+
this.#channels.clear();
|
|
241
391
|
}
|
|
242
392
|
}
|
|
243
393
|
function connectOnce(socketPath) {
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sealant/runtime-client",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "Ergonomic, typed TypeScript client for the sealantd runtime daemon.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"repository": {
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
},
|
|
27
27
|
"dependencies": {
|
|
28
28
|
"@bufbuild/protobuf": "^2.12.0",
|
|
29
|
-
"@sealant/runtime-protocol": "^0.
|
|
29
|
+
"@sealant/runtime-protocol": "^0.4.0"
|
|
30
30
|
},
|
|
31
31
|
"scripts": {
|
|
32
32
|
"build": "tsc -p tsconfig.json",
|