@sealant/runtime-client 0.1.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/client.d.ts +63 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +243 -0
- package/dist/client.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/package.json +37 -0
package/dist/client.d.ts
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import net from "node:net";
|
|
2
|
+
import type { ChildProcess } from "node:child_process";
|
|
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";
|
|
5
|
+
/** Error raised when the daemon returns a typed control error. */
|
|
6
|
+
export declare class SealantError extends Error {
|
|
7
|
+
/** Stable error code (e.g. `ControlErrorCode.PROCESS_START_FAILED`). */
|
|
8
|
+
readonly code: ControlErrorCode;
|
|
9
|
+
/** Optional machine-readable detail JSON. */
|
|
10
|
+
readonly detailJson?: string;
|
|
11
|
+
constructor(error: ControlError);
|
|
12
|
+
}
|
|
13
|
+
/** The init shape of the `Command` oneof (what callers pass to {@link SealantClient.request}). */
|
|
14
|
+
type CommandInit = MessageInitShape<typeof CommandSchema>["command"];
|
|
15
|
+
/** Options for {@link SealantClient.exec} (a subset of the wire `ExecArgs`). */
|
|
16
|
+
export interface ExecOptions {
|
|
17
|
+
executable: string;
|
|
18
|
+
args?: string[];
|
|
19
|
+
executionId?: string;
|
|
20
|
+
sessionId?: string;
|
|
21
|
+
cwd?: string;
|
|
22
|
+
stdin?: boolean;
|
|
23
|
+
timeoutMillis?: number;
|
|
24
|
+
background?: boolean;
|
|
25
|
+
}
|
|
26
|
+
/** A connected, typed control client for one sealantd instance. */
|
|
27
|
+
export declare class SealantClient {
|
|
28
|
+
#private;
|
|
29
|
+
constructor(socket: net.Socket);
|
|
30
|
+
static connect(socketPath: string, options?: {
|
|
31
|
+
retries?: number;
|
|
32
|
+
delayMs?: number;
|
|
33
|
+
}): Promise<SealantClient>;
|
|
34
|
+
static spawn(options: {
|
|
35
|
+
binPath: string;
|
|
36
|
+
socketPath: string;
|
|
37
|
+
workspace?: string;
|
|
38
|
+
sandboxId?: string;
|
|
39
|
+
executionId?: string;
|
|
40
|
+
spoolDir?: string;
|
|
41
|
+
watchFilesystem?: boolean;
|
|
42
|
+
networkProxy?: boolean;
|
|
43
|
+
logLevel?: string;
|
|
44
|
+
}): Promise<{
|
|
45
|
+
client: SealantClient;
|
|
46
|
+
child: ChildProcess;
|
|
47
|
+
}>;
|
|
48
|
+
/** Send a command oneof case and await its single (typed) response. */
|
|
49
|
+
request(command: CommandInit): Promise<ControlResponse>;
|
|
50
|
+
health(): Promise<HealthReport>;
|
|
51
|
+
getCapabilities(): Promise<Capabilities>;
|
|
52
|
+
getMetrics(): Promise<RuntimeMetrics>;
|
|
53
|
+
listProcesses(executionId?: string): Promise<ProcessList>;
|
|
54
|
+
exec(options: ExecOptions): Promise<ExecAccepted>;
|
|
55
|
+
writeStdin(processId: string, data: Uint8Array): Promise<void>;
|
|
56
|
+
signalProcess(processId: string, signal: number): Promise<void>;
|
|
57
|
+
shutdown(graceMillis?: number): Promise<void>;
|
|
58
|
+
/** Async iterator over telemetry events (typed `EventEnvelope`; `payload` is a discriminated union). */
|
|
59
|
+
events(): AsyncIterableIterator<EventEnvelope>;
|
|
60
|
+
close(): void;
|
|
61
|
+
}
|
|
62
|
+
export {};
|
|
63
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/client.js
ADDED
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
// @sealant/runtime-client
|
|
2
|
+
//
|
|
3
|
+
// Ergonomic, typed TypeScript client for sealantd over the Protobuf wire (ADR-0012). Uses IPC (a Unix
|
|
4
|
+
// domain socket) as the language boundary — never in-process FFI (plan §19). Built on the
|
|
5
|
+
// Buf-generated protobuf-es types from @sealant/runtime-protocol, so commands, responses, and events
|
|
6
|
+
// are fully typed (discriminated unions + TS enums).
|
|
7
|
+
import net from "node:net";
|
|
8
|
+
import { spawn } from "node:child_process";
|
|
9
|
+
import { Buffer } from "node:buffer";
|
|
10
|
+
import { setTimeout as delay } from "node:timers/promises";
|
|
11
|
+
import { create, encodeClient, encodeFrame, FrameDecoder, SCHEMA_VERSION, ClientMessageSchema, CommandSchema, ControlErrorCode, } from "@sealant/runtime-protocol";
|
|
12
|
+
/** Error raised when the daemon returns a typed control error. */
|
|
13
|
+
export class SealantError extends Error {
|
|
14
|
+
/** Stable error code (e.g. `ControlErrorCode.PROCESS_START_FAILED`). */
|
|
15
|
+
code;
|
|
16
|
+
/** Optional machine-readable detail JSON. */
|
|
17
|
+
detailJson;
|
|
18
|
+
constructor(error) {
|
|
19
|
+
super(error.message || "control error");
|
|
20
|
+
this.name = "SealantError";
|
|
21
|
+
this.code = error.code;
|
|
22
|
+
this.detailJson = error.detailJson;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
/** Throw on an error outcome; otherwise return the `CommandResult`. */
|
|
26
|
+
function okResult(response) {
|
|
27
|
+
// ControlResponse.outcome is a ResponseOutcome message whose `outcome` oneof is ok | error.
|
|
28
|
+
const outcome = response.outcome?.outcome;
|
|
29
|
+
if (outcome?.case === "error") {
|
|
30
|
+
throw new SealantError(outcome.value);
|
|
31
|
+
}
|
|
32
|
+
if (outcome?.case === "ok") {
|
|
33
|
+
return outcome.value;
|
|
34
|
+
}
|
|
35
|
+
throw new Error("response had no outcome");
|
|
36
|
+
}
|
|
37
|
+
/** Assert the `CommandResult` is a specific result case and return its (untyped) value. The caller
|
|
38
|
+
* casts to the exact result type — the public method signatures are the typed contract. */
|
|
39
|
+
function resultValue(result, kase) {
|
|
40
|
+
if (result.result.case !== kase) {
|
|
41
|
+
throw new Error(`expected result ${kase}, got ${String(result.result.case)}`);
|
|
42
|
+
}
|
|
43
|
+
return result.result.value;
|
|
44
|
+
}
|
|
45
|
+
/** A connected, typed control client for one sealantd instance. */
|
|
46
|
+
export class SealantClient {
|
|
47
|
+
#socket;
|
|
48
|
+
#decoder = new FrameDecoder();
|
|
49
|
+
#pending = new Map();
|
|
50
|
+
#counter = 0;
|
|
51
|
+
#closed = false;
|
|
52
|
+
#eventQueue = [];
|
|
53
|
+
#eventWaiters = [];
|
|
54
|
+
constructor(socket) {
|
|
55
|
+
this.#socket = socket;
|
|
56
|
+
this.#socket.on("data", (chunk) => this.#onData(chunk));
|
|
57
|
+
this.#socket.on("close", () => this.#onClose());
|
|
58
|
+
this.#socket.on("error", () => { });
|
|
59
|
+
}
|
|
60
|
+
static async connect(socketPath, options = {}) {
|
|
61
|
+
const retries = options.retries ?? 100;
|
|
62
|
+
const delayMs = options.delayMs ?? 20;
|
|
63
|
+
let lastError;
|
|
64
|
+
for (let attempt = 0; attempt < retries; attempt++) {
|
|
65
|
+
try {
|
|
66
|
+
return new SealantClient(await connectOnce(socketPath));
|
|
67
|
+
}
|
|
68
|
+
catch (error) {
|
|
69
|
+
lastError = error;
|
|
70
|
+
await delay(delayMs);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
throw lastError instanceof Error ? lastError : new Error("connection failed");
|
|
74
|
+
}
|
|
75
|
+
static async spawn(options) {
|
|
76
|
+
const args = ["--socket", options.socketPath, "--log-level", options.logLevel ?? "off"];
|
|
77
|
+
if (options.workspace)
|
|
78
|
+
args.push("--workspace", options.workspace);
|
|
79
|
+
if (options.sandboxId)
|
|
80
|
+
args.push("--sandbox-id", options.sandboxId);
|
|
81
|
+
if (options.executionId)
|
|
82
|
+
args.push("--execution-id", options.executionId);
|
|
83
|
+
if (options.spoolDir)
|
|
84
|
+
args.push("--spool-dir", options.spoolDir);
|
|
85
|
+
if (options.watchFilesystem)
|
|
86
|
+
args.push("--watch-filesystem");
|
|
87
|
+
if (options.networkProxy)
|
|
88
|
+
args.push("--network-proxy");
|
|
89
|
+
const child = spawn(options.binPath, args, { stdio: ["ignore", "ignore", "inherit"] });
|
|
90
|
+
try {
|
|
91
|
+
return { client: await SealantClient.connect(options.socketPath), child };
|
|
92
|
+
}
|
|
93
|
+
catch (error) {
|
|
94
|
+
child.kill("SIGKILL");
|
|
95
|
+
throw error;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
/** Send a command oneof case and await its single (typed) response. */
|
|
99
|
+
request(command) {
|
|
100
|
+
if (this.#closed) {
|
|
101
|
+
return Promise.reject(new Error("client is closed"));
|
|
102
|
+
}
|
|
103
|
+
const requestId = `req_client_${++this.#counter}`;
|
|
104
|
+
const message = create(ClientMessageSchema, {
|
|
105
|
+
message: {
|
|
106
|
+
case: "request",
|
|
107
|
+
value: { schemaVersion: SCHEMA_VERSION, requestId, command: { command } },
|
|
108
|
+
},
|
|
109
|
+
});
|
|
110
|
+
const body = encodeClient(message);
|
|
111
|
+
return new Promise((resolve, reject) => {
|
|
112
|
+
this.#pending.set(requestId, { resolve, reject });
|
|
113
|
+
this.#socket.write(encodeFrame(body), (error) => {
|
|
114
|
+
if (error) {
|
|
115
|
+
this.#pending.delete(requestId);
|
|
116
|
+
reject(error);
|
|
117
|
+
}
|
|
118
|
+
});
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
async health() {
|
|
122
|
+
return resultValue(okResult(await this.request({ case: "runtimeHealth", value: {} })), "health");
|
|
123
|
+
}
|
|
124
|
+
async getCapabilities() {
|
|
125
|
+
return resultValue(okResult(await this.request({ case: "runtimeGetCapabilities", value: {} })), "capabilities");
|
|
126
|
+
}
|
|
127
|
+
async getMetrics() {
|
|
128
|
+
return resultValue(okResult(await this.request({ case: "getRuntimeMetrics", value: {} })), "metrics");
|
|
129
|
+
}
|
|
130
|
+
async listProcesses(executionId) {
|
|
131
|
+
const value = executionId === undefined ? {} : { executionId };
|
|
132
|
+
return resultValue(okResult(await this.request({ case: "listProcesses", value })), "processList");
|
|
133
|
+
}
|
|
134
|
+
async exec(options) {
|
|
135
|
+
const result = okResult(await this.request({
|
|
136
|
+
case: "exec",
|
|
137
|
+
value: {
|
|
138
|
+
executable: options.executable,
|
|
139
|
+
args: options.args ?? [],
|
|
140
|
+
executionId: options.executionId,
|
|
141
|
+
sessionId: options.sessionId,
|
|
142
|
+
cwd: options.cwd,
|
|
143
|
+
stdin: options.stdin ?? false,
|
|
144
|
+
// 64-bit wire fields are bigint in protobuf-es.
|
|
145
|
+
timeoutMillis: options.timeoutMillis === undefined ? undefined : BigInt(options.timeoutMillis),
|
|
146
|
+
background: options.background ?? false,
|
|
147
|
+
},
|
|
148
|
+
}));
|
|
149
|
+
return resultValue(result, "execAccepted");
|
|
150
|
+
}
|
|
151
|
+
async writeStdin(processId, data) {
|
|
152
|
+
okResult(await this.request({ case: "writeStdin", value: { processId, data } }));
|
|
153
|
+
}
|
|
154
|
+
async signalProcess(processId, signal) {
|
|
155
|
+
okResult(await this.request({ case: "signalProcess", value: { processId, signal } }));
|
|
156
|
+
}
|
|
157
|
+
async shutdown(graceMillis) {
|
|
158
|
+
const value = graceMillis === undefined ? {} : { graceMillis: BigInt(graceMillis) };
|
|
159
|
+
okResult(await this.request({ case: "runtimeGracefulShutdown", value }));
|
|
160
|
+
}
|
|
161
|
+
/** Async iterator over telemetry events (typed `EventEnvelope`; `payload` is a discriminated union). */
|
|
162
|
+
events() {
|
|
163
|
+
const self = this;
|
|
164
|
+
return {
|
|
165
|
+
[Symbol.asyncIterator]() {
|
|
166
|
+
return this;
|
|
167
|
+
},
|
|
168
|
+
next() {
|
|
169
|
+
const queued = self.#eventQueue.shift();
|
|
170
|
+
if (queued !== undefined) {
|
|
171
|
+
return Promise.resolve({ value: queued, done: false });
|
|
172
|
+
}
|
|
173
|
+
if (self.#closed) {
|
|
174
|
+
return Promise.resolve({ value: undefined, done: true });
|
|
175
|
+
}
|
|
176
|
+
return new Promise((resolve) => self.#eventWaiters.push(resolve));
|
|
177
|
+
},
|
|
178
|
+
return() {
|
|
179
|
+
return Promise.resolve({ value: undefined, done: true });
|
|
180
|
+
},
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
close() {
|
|
184
|
+
this.#socket.end();
|
|
185
|
+
}
|
|
186
|
+
#onData(chunk) {
|
|
187
|
+
let messages;
|
|
188
|
+
try {
|
|
189
|
+
messages = this.#decoder.push(chunk);
|
|
190
|
+
}
|
|
191
|
+
catch (error) {
|
|
192
|
+
this.#socket.destroy(error instanceof Error ? error : new Error(String(error)));
|
|
193
|
+
return;
|
|
194
|
+
}
|
|
195
|
+
for (const message of messages) {
|
|
196
|
+
if (message.message.case === "response") {
|
|
197
|
+
const response = message.message.value;
|
|
198
|
+
const pending = this.#pending.get(response.requestId);
|
|
199
|
+
if (pending) {
|
|
200
|
+
this.#pending.delete(response.requestId);
|
|
201
|
+
pending.resolve(response);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
else if (message.message.case === "event") {
|
|
205
|
+
this.#emitEvent(message.message.value);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
#emitEvent(event) {
|
|
210
|
+
const waiter = this.#eventWaiters.shift();
|
|
211
|
+
if (waiter) {
|
|
212
|
+
waiter({ value: event, done: false });
|
|
213
|
+
}
|
|
214
|
+
else {
|
|
215
|
+
this.#eventQueue.push(event);
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
#onClose() {
|
|
219
|
+
this.#closed = true;
|
|
220
|
+
for (const waiter of this.#eventWaiters.splice(0)) {
|
|
221
|
+
waiter({ value: undefined, done: true });
|
|
222
|
+
}
|
|
223
|
+
for (const pending of this.#pending.values()) {
|
|
224
|
+
pending.reject(new Error("connection closed"));
|
|
225
|
+
}
|
|
226
|
+
this.#pending.clear();
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
function connectOnce(socketPath) {
|
|
230
|
+
return new Promise((resolve, reject) => {
|
|
231
|
+
const socket = net.createConnection(socketPath);
|
|
232
|
+
const onError = (error) => {
|
|
233
|
+
socket.destroy();
|
|
234
|
+
reject(error);
|
|
235
|
+
};
|
|
236
|
+
socket.once("error", onError);
|
|
237
|
+
socket.once("connect", () => {
|
|
238
|
+
socket.removeListener("error", onError);
|
|
239
|
+
resolve(socket);
|
|
240
|
+
});
|
|
241
|
+
});
|
|
242
|
+
}
|
|
243
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,aAAa,CAAC;AAC5B,cAAc,2BAA2B,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,0CAA0C;AAC1C,cAAc,aAAa,CAAC;AAC5B,cAAc,2BAA2B,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@sealant/runtime-client",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Ergonomic, typed TypeScript client for the sealantd runtime daemon.",
|
|
5
|
+
"license": "Apache-2.0",
|
|
6
|
+
"repository": {
|
|
7
|
+
"type": "git",
|
|
8
|
+
"url": "https://github.com/get-sealant/sealantd.git",
|
|
9
|
+
"directory": "packages/runtime-client"
|
|
10
|
+
},
|
|
11
|
+
"type": "module",
|
|
12
|
+
"exports": {
|
|
13
|
+
".": {
|
|
14
|
+
"types": "./dist/index.d.ts",
|
|
15
|
+
"import": "./dist/index.js"
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
"files": [
|
|
19
|
+
"dist"
|
|
20
|
+
],
|
|
21
|
+
"engines": {
|
|
22
|
+
"node": ">=20"
|
|
23
|
+
},
|
|
24
|
+
"publishConfig": {
|
|
25
|
+
"access": "public"
|
|
26
|
+
},
|
|
27
|
+
"dependencies": {
|
|
28
|
+
"@bufbuild/protobuf": "^2.12.0",
|
|
29
|
+
"@sealant/runtime-protocol": "^0.1.0"
|
|
30
|
+
},
|
|
31
|
+
"scripts": {
|
|
32
|
+
"build": "tsc -p tsconfig.json",
|
|
33
|
+
"test": "node --test test/*.test.ts",
|
|
34
|
+
"clean": "rm -rf dist",
|
|
35
|
+
"lint": "oxlint ."
|
|
36
|
+
}
|
|
37
|
+
}
|