@kvell007/embed-labs-local-bridge 0.1.0-alpha.21 → 0.1.0-alpha.22

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.
Files changed (50) hide show
  1. package/README.md +16 -11
  2. package/dist/index.d.ts +2 -1
  3. package/dist/index.js +125 -4
  4. package/package.json +8 -4
  5. package/dist/adapters/debug.d.ts +0 -2
  6. package/dist/adapters/debug.js +0 -124
  7. package/dist/adapters/debug.js.map +0 -1
  8. package/dist/adapters/deploy.d.ts +0 -5
  9. package/dist/adapters/deploy.js +0 -132
  10. package/dist/adapters/deploy.js.map +0 -1
  11. package/dist/adapters/flash.d.ts +0 -3
  12. package/dist/adapters/flash.js +0 -169
  13. package/dist/adapters/flash.js.map +0 -1
  14. package/dist/adapters/logo.d.ts +0 -2
  15. package/dist/adapters/logo.js +0 -108
  16. package/dist/adapters/logo.js.map +0 -1
  17. package/dist/adapters/network.d.ts +0 -22
  18. package/dist/adapters/network.js +0 -64
  19. package/dist/adapters/network.js.map +0 -1
  20. package/dist/adapters/rp2350-monitor.d.ts +0 -121
  21. package/dist/adapters/rp2350-monitor.js +0 -404
  22. package/dist/adapters/rp2350-monitor.js.map +0 -1
  23. package/dist/adapters/serial.d.ts +0 -3
  24. package/dist/adapters/serial.js +0 -133
  25. package/dist/adapters/serial.js.map +0 -1
  26. package/dist/adapters/taishanpi-live.d.ts +0 -163
  27. package/dist/adapters/taishanpi-live.js +0 -349
  28. package/dist/adapters/taishanpi-live.js.map +0 -1
  29. package/dist/adapters/uf2.d.ts +0 -1
  30. package/dist/adapters/uf2.js +0 -53
  31. package/dist/adapters/uf2.js.map +0 -1
  32. package/dist/adapters/usb.d.ts +0 -3
  33. package/dist/adapters/usb.js +0 -102
  34. package/dist/adapters/usb.js.map +0 -1
  35. package/dist/hardware.d.ts +0 -19
  36. package/dist/hardware.js +0 -417
  37. package/dist/hardware.js.map +0 -1
  38. package/dist/index.js.map +0 -1
  39. package/dist/jobs.d.ts +0 -4
  40. package/dist/jobs.js +0 -125
  41. package/dist/jobs.js.map +0 -1
  42. package/dist/process.d.ts +0 -13
  43. package/dist/process.js +0 -128
  44. package/dist/process.js.map +0 -1
  45. package/dist/server.d.ts +0 -7
  46. package/dist/server.js +0 -399
  47. package/dist/server.js.map +0 -1
  48. package/dist/tools.d.ts +0 -3
  49. package/dist/tools.js +0 -1254
  50. package/dist/tools.js.map +0 -1
package/dist/server.js DELETED
@@ -1,399 +0,0 @@
1
- import { createHash, createHmac, timingSafeEqual } from "node:crypto";
2
- import http from "node:http";
3
- import net from "node:net";
4
- import { URL } from "node:url";
5
- import { fail, ok } from "@embed-labs/protocol";
6
- import { buildFlashPlan, captureSerial, deployTaishanPiApplication, probeDevices, runBoundedSsh, scanDebugTools, scanHardware, validateTaishanPiDeployRequest } from "./hardware.js";
7
- import { getJob, listJobs, startFlashJob } from "./jobs.js";
8
- import { invokeToolCapability, listToolCapabilities } from "./tools.js";
9
- const MAX_JSON_BODY_BYTES = 64 * 1024;
10
- const PROBE_REQUEST_FIELDS = new Set(["host", "ports", "serial_paths", "timeout_ms"]);
11
- const LOOPBACK_HOSTS = new Set(["127.0.0.1", "localhost", "::1"]);
12
- const BRIDGE_SIGNATURE_REQUIRED = booleanEnv("EMBED_BRIDGE_REQUIRE_SIGNATURE", false);
13
- const BRIDGE_SIGNATURE_SKEW_SECONDS = Math.max(30, nonNegativeIntegerEnv("EMBED_BRIDGE_SIGNATURE_SKEW_SECONDS", 300));
14
- const BRIDGE_SIGNATURE_NONCE_TTL_SECONDS = Math.max(BRIDGE_SIGNATURE_SKEW_SECONDS, nonNegativeIntegerEnv("EMBED_BRIDGE_SIGNATURE_NONCE_TTL_SECONDS", 600));
15
- const bridgeSignatureNonces = new Map();
16
- const signedBridgeBodyHashes = new WeakMap();
17
- class HttpRequestError extends Error {
18
- status;
19
- code;
20
- constructor(status, code, message) {
21
- super(message);
22
- this.status = status;
23
- this.code = code;
24
- }
25
- }
26
- export function startServer(options = {}) {
27
- const host = options.host ?? process.env.EMBED_BRIDGE_HOST ?? "127.0.0.1";
28
- const port = options.port ?? Number(process.env.EMBED_BRIDGE_PORT ?? "18083");
29
- const token = options.token ?? process.env.EMBED_BRIDGE_TOKEN?.trim();
30
- if (!token && !LOOPBACK_HOSTS.has(host)) {
31
- throw new Error("EMBED_BRIDGE_TOKEN is required when Local Bridge is bound outside loopback.");
32
- }
33
- if (!token && BRIDGE_SIGNATURE_REQUIRED) {
34
- throw new Error("EMBED_BRIDGE_TOKEN is required when EMBED_BRIDGE_REQUIRE_SIGNATURE=1.");
35
- }
36
- const server = http.createServer((request, response) => {
37
- void route(request, response, token);
38
- });
39
- server.listen(port, host, () => {
40
- console.log(`embed-local-bridge listening on http://${host}:${port}`);
41
- });
42
- return server;
43
- }
44
- async function route(request, response, token) {
45
- const url = new URL(request.url ?? "/", "http://127.0.0.1");
46
- const method = request.method ?? "GET";
47
- try {
48
- if (token && url.pathname !== "/healthz") {
49
- authorizeBridgeRequest(request, token, method, `${url.pathname}${url.search}`);
50
- }
51
- if (method === "GET" && url.pathname === "/healthz") {
52
- return send(response, ok({
53
- service: "embed-local-bridge",
54
- status: "ok",
55
- version: "0.1.0",
56
- platform: process.platform,
57
- arch: process.arch,
58
- time: new Date().toISOString()
59
- }));
60
- }
61
- if (method === "GET" && url.pathname === "/v1/devices") {
62
- return send(response, ok(await scanHardware()));
63
- }
64
- if (method === "GET" && url.pathname === "/v1/debug/tools") {
65
- return send(response, ok(await scanDebugTools()));
66
- }
67
- if (method === "GET" && url.pathname === "/v1/tools/capabilities") {
68
- return send(response, ok(listToolCapabilities()));
69
- }
70
- if (method === "POST" && url.pathname === "/v1/tools/invoke") {
71
- const body = await readJson(request);
72
- const invoked = await invokeToolCapability(body);
73
- return send(response, invoked, invoked.ok ? 200 : toolInvokeStatus(invoked.error.code));
74
- }
75
- if (method === "POST" && url.pathname === "/v1/devices/probe") {
76
- const body = await readJson(request);
77
- const parsed = parseProbeRequest(body);
78
- if ("error" in parsed) {
79
- return send(response, fail("invalid_request", parsed.error), 400);
80
- }
81
- return send(response, ok(await probeDevices(parsed.request)));
82
- }
83
- if (method === "GET" && url.pathname === "/v1/serial/ports") {
84
- const scan = await scanHardware();
85
- return send(response, ok({ serial: scan.serial, observed_at: scan.observed_at, warnings: scan.warnings }));
86
- }
87
- if (method === "POST" && url.pathname === "/v1/serial/capture") {
88
- const body = await readJson(request);
89
- if (!body.path) {
90
- return send(response, fail("invalid_request", "path is required."), 400);
91
- }
92
- return send(response, ok(await captureSerial(body.path, body.baud_rate, body.duration_seconds)));
93
- }
94
- if (method === "POST" && url.pathname === "/v1/ssh/run") {
95
- const body = await readJson(request);
96
- if (!body.host || !body.user || !body.command) {
97
- return send(response, fail("invalid_request", "host, user, and command are required."), 400);
98
- }
99
- return send(response, ok(await runBoundedSsh(body.host, body.user, body.command, body.timeout_seconds)));
100
- }
101
- if (method === "POST" && url.pathname === "/v1/board/taishanpi/deploy") {
102
- const body = await readJson(request);
103
- const parsed = validateTaishanPiDeployRequest(body);
104
- if ("error" in parsed) {
105
- return send(response, fail("invalid_request", parsed.error), 400);
106
- }
107
- if (parsed.request.approved !== true) {
108
- return send(response, fail("approval_required", "TaishanPi deploy writes to a board over SSH. Re-run with approved=true after the user approves the action."), 403);
109
- }
110
- const deployed = await deployTaishanPiApplication(parsed.request);
111
- if ("ok" in deployed && deployed.ok === false) {
112
- return send(response, deployed, 400);
113
- }
114
- return send(response, ok(deployed));
115
- }
116
- if (method === "POST" && url.pathname === "/v1/flash/plan") {
117
- const body = await readJson(request);
118
- return send(response, ok(await buildFlashPlan(body)));
119
- }
120
- if (method === "POST" && url.pathname === "/v1/flash/run") {
121
- const body = await readJson(request);
122
- return send(response, ok(await startFlashJob(body)));
123
- }
124
- if (method === "GET" && url.pathname === "/v1/jobs") {
125
- return send(response, ok({ jobs: listJobs() }));
126
- }
127
- const jobMatch = url.pathname.match(/^\/v1\/jobs\/([^/]+)$/);
128
- if (method === "GET" && jobMatch) {
129
- const job = getJob(decodeURIComponent(jobMatch[1]));
130
- if (!job) {
131
- return send(response, fail("job_not_found", `No local job found for ${jobMatch[1]}.`), 404);
132
- }
133
- return send(response, ok(job));
134
- }
135
- return send(response, fail("not_found", `${method} ${url.pathname} is not available.`), 404);
136
- }
137
- catch (error) {
138
- if (error instanceof HttpRequestError) {
139
- if (error.status === 401) {
140
- response.setHeader("WWW-Authenticate", "Bearer");
141
- }
142
- return send(response, fail(error.code, error.message), error.status);
143
- }
144
- return send(response, fail("internal_error", error instanceof Error ? error.message : String(error)), 500);
145
- }
146
- }
147
- function authorizeBridgeRequest(request, token, method, pathWithQuery) {
148
- const authorization = typeof request.headers.authorization === "string" ? request.headers.authorization : "";
149
- const match = /^Bearer\s+(.+)$/i.exec(authorization);
150
- const authorizationToken = match?.[1];
151
- const headerToken = typeof request.headers["x-embed-bridge-token"] === "string" ? request.headers["x-embed-bridge-token"] : "";
152
- if (authorizationToken !== token && headerToken !== token) {
153
- throw new HttpRequestError(401, "unauthorized", "Local Bridge request requires EMBED_BRIDGE_TOKEN.");
154
- }
155
- verifyBridgeRequestSignature(request, token, method, pathWithQuery);
156
- }
157
- function verifyBridgeRequestSignature(request, token, method, pathWithQuery) {
158
- const signature = singleHeader(request, "x-embed-signature");
159
- const timestamp = singleHeader(request, "x-embed-timestamp");
160
- const nonce = singleHeader(request, "x-embed-nonce");
161
- const bodySha256 = singleHeader(request, "x-embed-body-sha256");
162
- const keyId = singleHeader(request, "x-embed-key-id");
163
- const hasAnySignatureHeader = Boolean(signature || timestamp || nonce || bodySha256 || keyId);
164
- if (!hasAnySignatureHeader) {
165
- if (BRIDGE_SIGNATURE_REQUIRED) {
166
- throw new HttpRequestError(401, "request_signature_required", "Signed Local Bridge request headers are required.");
167
- }
168
- return;
169
- }
170
- if (!signature || !timestamp || !nonce || !bodySha256 || !keyId) {
171
- throw new HttpRequestError(401, "request_signature_required", "Signed Local Bridge requests require key id, timestamp, nonce, body hash, and signature headers.");
172
- }
173
- if (!/^\d{10,}$/.test(timestamp)) {
174
- throw new HttpRequestError(401, "request_signature_invalid", "Request signature timestamp is invalid.");
175
- }
176
- if (!/^[A-Za-z0-9_-]{8,128}$/.test(nonce)) {
177
- throw new HttpRequestError(401, "request_signature_invalid", "Request signature nonce is invalid.");
178
- }
179
- if (!/^[a-fA-F0-9]{64}$/.test(bodySha256) || !/^[a-fA-F0-9]{64}$/.test(signature)) {
180
- throw new HttpRequestError(401, "request_signature_invalid", "Request signature hash format is invalid.");
181
- }
182
- const nowSeconds = Math.floor(Date.now() / 1000);
183
- const timestampSeconds = Number(timestamp);
184
- if (!Number.isSafeInteger(timestampSeconds) || Math.abs(nowSeconds - timestampSeconds) > BRIDGE_SIGNATURE_SKEW_SECONDS) {
185
- throw new HttpRequestError(401, "request_signature_stale", "Request signature timestamp is outside the allowed clock skew.");
186
- }
187
- const expectedKeyId = createHash("sha256").update(token).digest("hex").slice(0, 16);
188
- if (!timingSafeEqualText(expectedKeyId, keyId)) {
189
- throw new HttpRequestError(401, "request_signature_invalid", "Request signature key id is invalid.");
190
- }
191
- const expectedSignature = createHmac("sha256", token)
192
- .update(requestCanonicalString(method, pathWithQuery, timestamp, nonce, bodySha256.toLowerCase()))
193
- .digest("hex");
194
- if (!timingSafeEqualText(expectedSignature, signature.toLowerCase())) {
195
- throw new HttpRequestError(401, "request_signature_invalid", "Request signature is invalid.");
196
- }
197
- rememberBridgeSignatureNonce(keyId, nonce, nowSeconds);
198
- signedBridgeBodyHashes.set(request, bodySha256.toLowerCase());
199
- }
200
- function rememberBridgeSignatureNonce(keyId, nonce, nowSeconds) {
201
- const expiresAt = nowSeconds + BRIDGE_SIGNATURE_NONCE_TTL_SECONDS;
202
- if (bridgeSignatureNonces.size > 10_000) {
203
- for (const [nonceKey, nonceExpiresAt] of bridgeSignatureNonces) {
204
- if (nonceExpiresAt <= nowSeconds) {
205
- bridgeSignatureNonces.delete(nonceKey);
206
- }
207
- }
208
- }
209
- const nonceKey = `${keyId}:${nonce}`;
210
- const existingExpiresAt = bridgeSignatureNonces.get(nonceKey);
211
- if (existingExpiresAt && existingExpiresAt > nowSeconds) {
212
- throw new HttpRequestError(401, "request_signature_replay", "Request signature nonce has already been used.");
213
- }
214
- bridgeSignatureNonces.set(nonceKey, expiresAt);
215
- }
216
- function requestCanonicalString(method, pathWithQuery, timestamp, nonce, bodySha256) {
217
- return [
218
- method.toUpperCase(),
219
- normalizeSignaturePath(pathWithQuery),
220
- timestamp,
221
- nonce,
222
- bodySha256
223
- ].join("\n");
224
- }
225
- function normalizeSignaturePath(pathWithQuery) {
226
- try {
227
- const parsed = new URL(pathWithQuery, "http://embed.local");
228
- return `${parsed.pathname}${parsed.search}`;
229
- }
230
- catch {
231
- return pathWithQuery.startsWith("/") ? pathWithQuery : `/${pathWithQuery}`;
232
- }
233
- }
234
- function singleHeader(request, name) {
235
- const value = request.headers[name.toLowerCase()];
236
- if (Array.isArray(value)) {
237
- return value.length === 1 ? value[0] : undefined;
238
- }
239
- return typeof value === "string" && value.trim() ? value.trim() : undefined;
240
- }
241
- function timingSafeEqualText(expected, actual) {
242
- const expectedBuffer = Buffer.from(expected);
243
- const actualBuffer = Buffer.from(actual);
244
- if (expectedBuffer.length !== actualBuffer.length) {
245
- return false;
246
- }
247
- return timingSafeEqual(expectedBuffer, actualBuffer);
248
- }
249
- async function readJson(request) {
250
- const chunks = [];
251
- let totalBytes = 0;
252
- for await (const chunk of request) {
253
- const buffer = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk);
254
- totalBytes += buffer.length;
255
- if (totalBytes > MAX_JSON_BODY_BYTES) {
256
- throw new HttpRequestError(413, "request_too_large", `JSON body must be ${MAX_JSON_BODY_BYTES} bytes or smaller.`);
257
- }
258
- chunks.push(buffer);
259
- }
260
- const rawText = Buffer.concat(chunks).toString("utf8");
261
- const signedBodySha256 = signedBridgeBodyHashes.get(request);
262
- if (signedBodySha256) {
263
- const actualBodySha256 = createHash("sha256").update(rawText).digest("hex");
264
- if (!timingSafeEqualText(signedBodySha256, actualBodySha256)) {
265
- throw new HttpRequestError(401, "invalid_request_body_signature", "Request body does not match the signed body hash.");
266
- }
267
- }
268
- const text = rawText.trim();
269
- if (!text) {
270
- return {};
271
- }
272
- try {
273
- return JSON.parse(text);
274
- }
275
- catch {
276
- throw new HttpRequestError(400, "invalid_json", "Request body must be valid JSON.");
277
- }
278
- }
279
- function send(response, payload, status = payload.ok ? 200 : 500) {
280
- response.statusCode = status;
281
- response.setHeader("content-type", "application/json; charset=utf-8");
282
- response.end(JSON.stringify(payload, null, 2));
283
- }
284
- function toolInvokeStatus(code) {
285
- if (code === "tool_capability_not_found") {
286
- return 404;
287
- }
288
- if (code === "approval_required") {
289
- return 403;
290
- }
291
- return 400;
292
- }
293
- function parseProbeRequest(body) {
294
- if (!body || typeof body !== "object" || Array.isArray(body)) {
295
- return { error: "Request body must be a JSON object." };
296
- }
297
- const request = body;
298
- const unknownFields = Object.keys(request).filter((field) => !PROBE_REQUEST_FIELDS.has(field));
299
- if (unknownFields.length > 0) {
300
- return { error: `Unsupported field(s): ${unknownFields.join(", ")}.` };
301
- }
302
- let host;
303
- if (request.host !== undefined) {
304
- if (typeof request.host !== "string") {
305
- return { error: "host must be a hostname or IP address string." };
306
- }
307
- host = request.host.trim();
308
- if (!isValidProbeHost(host)) {
309
- return { error: "host must be a hostname or IP address without schemes, paths, spaces, or credentials." };
310
- }
311
- }
312
- let ports;
313
- if (request.ports !== undefined) {
314
- if (!Array.isArray(request.ports)) {
315
- return { error: "ports must be an array." };
316
- }
317
- const invalidPort = request.ports.find((port) => typeof port !== "number" || !Number.isInteger(port) || port < 1 || port > 65_535);
318
- if (invalidPort !== undefined) {
319
- return { error: `Invalid TCP port: ${String(invalidPort)}.` };
320
- }
321
- ports = [...request.ports];
322
- }
323
- let serialPaths;
324
- if (request.serial_paths !== undefined) {
325
- if (!Array.isArray(request.serial_paths)) {
326
- return { error: "serial_paths must be an array." };
327
- }
328
- const invalidPath = request.serial_paths.find((path) => typeof path !== "string" || !path.trim());
329
- if (invalidPath !== undefined) {
330
- return { error: "serial_paths must contain non-empty strings." };
331
- }
332
- serialPaths = request.serial_paths.map((path) => path.trim());
333
- }
334
- if (request.timeout_ms !== undefined && (typeof request.timeout_ms !== "number" || !Number.isFinite(request.timeout_ms) || request.timeout_ms <= 0)) {
335
- return { error: "timeout_ms must be a positive number." };
336
- }
337
- const hasPorts = (ports?.length ?? 0) > 0;
338
- const hasSerialPaths = (serialPaths?.length ?? 0) > 0;
339
- if (!hasPorts && !hasSerialPaths) {
340
- return { error: "At least one TCP port or serial path is required." };
341
- }
342
- if (hasPorts && !host) {
343
- return { error: "host is required when ports are provided." };
344
- }
345
- const parsed = {};
346
- if (host !== undefined) {
347
- parsed.host = host;
348
- }
349
- if (ports !== undefined) {
350
- parsed.ports = ports;
351
- }
352
- if (serialPaths !== undefined) {
353
- parsed.serial_paths = serialPaths;
354
- }
355
- if (request.timeout_ms !== undefined) {
356
- parsed.timeout_ms = request.timeout_ms;
357
- }
358
- return { request: parsed };
359
- }
360
- function isValidProbeHost(host) {
361
- if (!host || host.length > 253 || /[\s\x00-\x1f\x7f]/.test(host)) {
362
- return false;
363
- }
364
- if (host.includes("://") || host.includes("/") || host.includes("\\") || host.includes("@")) {
365
- return false;
366
- }
367
- if (net.isIP(host) !== 0) {
368
- return true;
369
- }
370
- return host.split(".").every((label) => /^[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?$/.test(label));
371
- }
372
- function nonNegativeIntegerEnv(name, fallback) {
373
- const raw = process.env[name]?.trim();
374
- if (!raw) {
375
- return fallback;
376
- }
377
- if (!/^\d+$/.test(raw)) {
378
- throw new Error(`${name} must be a non-negative integer.`);
379
- }
380
- const value = Number(raw);
381
- if (!Number.isSafeInteger(value)) {
382
- throw new Error(`${name} must be a safe non-negative integer.`);
383
- }
384
- return value;
385
- }
386
- function booleanEnv(name, fallback) {
387
- const raw = process.env[name]?.trim().toLowerCase();
388
- if (!raw) {
389
- return fallback;
390
- }
391
- if (["1", "true", "yes", "on"].includes(raw)) {
392
- return true;
393
- }
394
- if (["0", "false", "no", "off"].includes(raw)) {
395
- return false;
396
- }
397
- throw new Error(`${name} must be a boolean value.`);
398
- }
399
- //# sourceMappingURL=server.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
package/dist/tools.d.ts DELETED
@@ -1,3 +0,0 @@
1
- import { type ApiResponse, type ToolCapabilityList, type ToolInvokeResult } from "@embed-labs/protocol";
2
- export declare function listToolCapabilities(): ToolCapabilityList;
3
- export declare function invokeToolCapability(input: unknown): Promise<ApiResponse<ToolInvokeResult>>;