deepadb 1.1.1 → 1.1.3

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 (230) hide show
  1. package/LICENSE +202 -21
  2. package/NOTICE +16 -0
  3. package/README.md +55 -29
  4. package/build/bridge/adb-bridge.d.ts +14 -0
  5. package/build/bridge/adb-bridge.d.ts.map +1 -1
  6. package/build/bridge/adb-bridge.js +34 -5
  7. package/build/bridge/adb-bridge.js.map +1 -1
  8. package/build/bridge/device-manager.d.ts.map +1 -1
  9. package/build/bridge/device-manager.js +18 -9
  10. package/build/bridge/device-manager.js.map +1 -1
  11. package/build/bridge/local-bridge.d.ts +10 -2
  12. package/build/bridge/local-bridge.d.ts.map +1 -1
  13. package/build/bridge/local-bridge.js +51 -16
  14. package/build/bridge/local-bridge.js.map +1 -1
  15. package/build/config/config.d.ts +7 -0
  16. package/build/config/config.d.ts.map +1 -1
  17. package/build/config/config.js +26 -10
  18. package/build/config/config.js.map +1 -1
  19. package/build/graphql-api.d.ts.map +1 -1
  20. package/build/graphql-api.js +73 -3
  21. package/build/graphql-api.js.map +1 -1
  22. package/build/http-transport.d.ts.map +1 -1
  23. package/build/http-transport.js +44 -7
  24. package/build/http-transport.js.map +1 -1
  25. package/build/index.d.ts.map +1 -1
  26. package/build/index.js +41 -16
  27. package/build/index.js.map +1 -1
  28. package/build/middleware/auth.d.ts.map +1 -1
  29. package/build/middleware/auth.js +43 -6
  30. package/build/middleware/auth.js.map +1 -1
  31. package/build/middleware/chipset.d.ts.map +1 -1
  32. package/build/middleware/chipset.js +16 -1
  33. package/build/middleware/chipset.js.map +1 -1
  34. package/build/middleware/cleanup.d.ts +39 -7
  35. package/build/middleware/cleanup.d.ts.map +1 -1
  36. package/build/middleware/cleanup.js +148 -16
  37. package/build/middleware/cleanup.js.map +1 -1
  38. package/build/middleware/fetch-utils.d.ts +50 -7
  39. package/build/middleware/fetch-utils.d.ts.map +1 -1
  40. package/build/middleware/fetch-utils.js +127 -14
  41. package/build/middleware/fetch-utils.js.map +1 -1
  42. package/build/middleware/fs-utils.d.ts +126 -0
  43. package/build/middleware/fs-utils.d.ts.map +1 -0
  44. package/build/middleware/fs-utils.js +229 -0
  45. package/build/middleware/fs-utils.js.map +1 -0
  46. package/build/middleware/logger.d.ts +16 -0
  47. package/build/middleware/logger.d.ts.map +1 -1
  48. package/build/middleware/logger.js +18 -0
  49. package/build/middleware/logger.js.map +1 -1
  50. package/build/middleware/output-processor.d.ts.map +1 -1
  51. package/build/middleware/output-processor.js +43 -8
  52. package/build/middleware/output-processor.js.map +1 -1
  53. package/build/middleware/parse-utils.d.ts +19 -0
  54. package/build/middleware/parse-utils.d.ts.map +1 -0
  55. package/build/middleware/parse-utils.js +30 -0
  56. package/build/middleware/parse-utils.js.map +1 -0
  57. package/build/middleware/png-utils.d.ts.map +1 -1
  58. package/build/middleware/png-utils.js +33 -11
  59. package/build/middleware/png-utils.js.map +1 -1
  60. package/build/middleware/result-handle.d.ts +76 -0
  61. package/build/middleware/result-handle.d.ts.map +1 -0
  62. package/build/middleware/result-handle.js +378 -0
  63. package/build/middleware/result-handle.js.map +1 -0
  64. package/build/middleware/sanitize.d.ts +26 -0
  65. package/build/middleware/sanitize.d.ts.map +1 -1
  66. package/build/middleware/sanitize.js +43 -2
  67. package/build/middleware/sanitize.js.map +1 -1
  68. package/build/middleware/security.d.ts.map +1 -1
  69. package/build/middleware/security.js +30 -5
  70. package/build/middleware/security.js.map +1 -1
  71. package/build/middleware/ui-dump.d.ts.map +1 -1
  72. package/build/middleware/ui-dump.js +30 -10
  73. package/build/middleware/ui-dump.js.map +1 -1
  74. package/build/server.d.ts.map +1 -1
  75. package/build/server.js +34 -5
  76. package/build/server.js.map +1 -1
  77. package/build/tool-context.d.ts.map +1 -1
  78. package/build/tool-context.js +2 -0
  79. package/build/tool-context.js.map +1 -1
  80. package/build/tools/accessibility.d.ts.map +1 -1
  81. package/build/tools/accessibility.js +39 -40
  82. package/build/tools/accessibility.js.map +1 -1
  83. package/build/tools/at-commands.d.ts.map +1 -1
  84. package/build/tools/at-commands.js +31 -6
  85. package/build/tools/at-commands.js.map +1 -1
  86. package/build/tools/baseband.d.ts.map +1 -1
  87. package/build/tools/baseband.js +18 -7
  88. package/build/tools/baseband.js.map +1 -1
  89. package/build/tools/build.d.ts.map +1 -1
  90. package/build/tools/build.js +30 -8
  91. package/build/tools/build.js.map +1 -1
  92. package/build/tools/ci.d.ts.map +1 -1
  93. package/build/tools/ci.js +16 -5
  94. package/build/tools/ci.js.map +1 -1
  95. package/build/tools/control.d.ts.map +1 -1
  96. package/build/tools/control.js +19 -11
  97. package/build/tools/control.js.map +1 -1
  98. package/build/tools/device-farm.d.ts.map +1 -1
  99. package/build/tools/device-farm.js +27 -3
  100. package/build/tools/device-farm.js.map +1 -1
  101. package/build/tools/device-profiles.d.ts.map +1 -1
  102. package/build/tools/device-profiles.js +70 -8
  103. package/build/tools/device-profiles.js.map +1 -1
  104. package/build/tools/device.d.ts.map +1 -1
  105. package/build/tools/device.js +4 -2
  106. package/build/tools/device.js.map +1 -1
  107. package/build/tools/diagnostics.d.ts.map +1 -1
  108. package/build/tools/diagnostics.js +17 -9
  109. package/build/tools/diagnostics.js.map +1 -1
  110. package/build/tools/emulator.d.ts.map +1 -1
  111. package/build/tools/emulator.js +12 -13
  112. package/build/tools/emulator.js.map +1 -1
  113. package/build/tools/files.d.ts +1 -1
  114. package/build/tools/files.d.ts.map +1 -1
  115. package/build/tools/files.js +98 -56
  116. package/build/tools/files.js.map +1 -1
  117. package/build/tools/firmware-analysis.d.ts.map +1 -1
  118. package/build/tools/firmware-analysis.js +35 -12
  119. package/build/tools/firmware-analysis.js.map +1 -1
  120. package/build/tools/forwarding.d.ts.map +1 -1
  121. package/build/tools/forwarding.js +248 -6
  122. package/build/tools/forwarding.js.map +1 -1
  123. package/build/tools/health.d.ts.map +1 -1
  124. package/build/tools/health.js +14 -3
  125. package/build/tools/health.js.map +1 -1
  126. package/build/tools/input-gestures.d.ts.map +1 -1
  127. package/build/tools/input-gestures.js +65 -13
  128. package/build/tools/input-gestures.js.map +1 -1
  129. package/build/tools/logcat-watch.d.ts.map +1 -1
  130. package/build/tools/logcat-watch.js +21 -14
  131. package/build/tools/logcat-watch.js.map +1 -1
  132. package/build/tools/logs.d.ts.map +1 -1
  133. package/build/tools/logs.js +8 -4
  134. package/build/tools/logs.js.map +1 -1
  135. package/build/tools/mirroring.d.ts.map +1 -1
  136. package/build/tools/mirroring.js +21 -19
  137. package/build/tools/mirroring.js.map +1 -1
  138. package/build/tools/multi-device.d.ts.map +1 -1
  139. package/build/tools/multi-device.js +10 -0
  140. package/build/tools/multi-device.js.map +1 -1
  141. package/build/tools/network-capture.d.ts.map +1 -1
  142. package/build/tools/network-capture.js +32 -8
  143. package/build/tools/network-capture.js.map +1 -1
  144. package/build/tools/network-discovery.d.ts.map +1 -1
  145. package/build/tools/network-discovery.js +11 -2
  146. package/build/tools/network-discovery.js.map +1 -1
  147. package/build/tools/ota-monitor.d.ts.map +1 -1
  148. package/build/tools/ota-monitor.js +26 -12
  149. package/build/tools/ota-monitor.js.map +1 -1
  150. package/build/tools/packages.d.ts.map +1 -1
  151. package/build/tools/packages.js +18 -11
  152. package/build/tools/packages.js.map +1 -1
  153. package/build/tools/plugins.d.ts +18 -0
  154. package/build/tools/plugins.d.ts.map +1 -1
  155. package/build/tools/plugins.js +47 -2
  156. package/build/tools/plugins.js.map +1 -1
  157. package/build/tools/prompts.d.ts.map +1 -1
  158. package/build/tools/prompts.js +2 -0
  159. package/build/tools/prompts.js.map +1 -1
  160. package/build/tools/qemu.d.ts +6 -3
  161. package/build/tools/qemu.d.ts.map +1 -1
  162. package/build/tools/qemu.js +28 -16
  163. package/build/tools/qemu.js.map +1 -1
  164. package/build/tools/registry.d.ts.map +1 -1
  165. package/build/tools/registry.js +76 -26
  166. package/build/tools/registry.js.map +1 -1
  167. package/build/tools/regression.d.ts +37 -0
  168. package/build/tools/regression.d.ts.map +1 -1
  169. package/build/tools/regression.js +63 -22
  170. package/build/tools/regression.js.map +1 -1
  171. package/build/tools/resources.d.ts.map +1 -1
  172. package/build/tools/resources.js +62 -15
  173. package/build/tools/resources.js.map +1 -1
  174. package/build/tools/result-handles.d.ts +37 -0
  175. package/build/tools/result-handles.d.ts.map +1 -0
  176. package/build/tools/result-handles.js +286 -0
  177. package/build/tools/result-handles.js.map +1 -0
  178. package/build/tools/ril-intercept.d.ts.map +1 -1
  179. package/build/tools/ril-intercept.js +15 -18
  180. package/build/tools/ril-intercept.js.map +1 -1
  181. package/build/tools/screen-record.d.ts.map +1 -1
  182. package/build/tools/screen-record.js +34 -5
  183. package/build/tools/screen-record.js.map +1 -1
  184. package/build/tools/screenshot-diff.d.ts.map +1 -1
  185. package/build/tools/screenshot-diff.js +29 -21
  186. package/build/tools/screenshot-diff.js.map +1 -1
  187. package/build/tools/selinux-audit.d.ts.map +1 -1
  188. package/build/tools/selinux-audit.js +7 -5
  189. package/build/tools/selinux-audit.js.map +1 -1
  190. package/build/tools/sensors.d.ts.map +1 -1
  191. package/build/tools/sensors.js +26 -4
  192. package/build/tools/sensors.js.map +1 -1
  193. package/build/tools/shell.d.ts.map +1 -1
  194. package/build/tools/shell.js +9 -0
  195. package/build/tools/shell.js.map +1 -1
  196. package/build/tools/snapshot.d.ts.map +1 -1
  197. package/build/tools/snapshot.js +38 -19
  198. package/build/tools/snapshot.js.map +1 -1
  199. package/build/tools/split-apk.d.ts.map +1 -1
  200. package/build/tools/split-apk.js +48 -24
  201. package/build/tools/split-apk.js.map +1 -1
  202. package/build/tools/test-gen.d.ts.map +1 -1
  203. package/build/tools/test-gen.js +29 -10
  204. package/build/tools/test-gen.js.map +1 -1
  205. package/build/tools/testing.d.ts.map +1 -1
  206. package/build/tools/testing.js +27 -9
  207. package/build/tools/testing.js.map +1 -1
  208. package/build/tools/thermal-power.d.ts +8 -1
  209. package/build/tools/thermal-power.d.ts.map +1 -1
  210. package/build/tools/thermal-power.js +35 -10
  211. package/build/tools/thermal-power.js.map +1 -1
  212. package/build/tools/ui.d.ts.map +1 -1
  213. package/build/tools/ui.js +20 -13
  214. package/build/tools/ui.js.map +1 -1
  215. package/build/tools/wireless-firmware.d.ts.map +1 -1
  216. package/build/tools/wireless-firmware.js +21 -7
  217. package/build/tools/wireless-firmware.js.map +1 -1
  218. package/build/tools/wireless.d.ts.map +1 -1
  219. package/build/tools/wireless.js +39 -3
  220. package/build/tools/wireless.js.map +1 -1
  221. package/build/tools/workflow-market.d.ts.map +1 -1
  222. package/build/tools/workflow-market.js +67 -13
  223. package/build/tools/workflow-market.js.map +1 -1
  224. package/build/tools/workflow.d.ts.map +1 -1
  225. package/build/tools/workflow.js +77 -8
  226. package/build/tools/workflow.js.map +1 -1
  227. package/build/ws-transport.d.ts.map +1 -1
  228. package/build/ws-transport.js +21 -3
  229. package/build/ws-transport.js.map +1 -1
  230. package/package.json +20 -8
@@ -1,3 +1,5 @@
1
+ // Copyright 2026 Jason <fullread@github>
2
+ // SPDX-License-Identifier: Apache-2.0
1
3
  /**
2
4
  * HTTP/SSE Transport — Alternative to stdio for browser-based MCP clients.
3
5
  *
@@ -14,6 +16,7 @@
14
16
  import { createServer as createHttpServer } from "http";
15
17
  import { SSEServerTransport } from "@modelcontextprotocol/sdk/server/sse.js";
16
18
  import { checkAuth } from "./middleware/auth.js";
19
+ import { VERSION } from "./config/config.js";
17
20
  /**
18
21
  * Start an HTTP server that provides SSE-based MCP transport.
19
22
  * Each SSE connection creates a new transport session.
@@ -24,11 +27,30 @@ export async function startHttpTransport(server, options, logger) {
24
27
  const httpServer = createHttpServer(async (req, res) => {
25
28
  try {
26
29
  // CORS headers — restrict to configured origin (default: deny cross-origin)
27
- const allowedOrigin = process.env.DA_HTTP_CORS_ORIGIN ?? "";
28
- if (allowedOrigin) {
29
- res.setHeader("Access-Control-Allow-Origin", allowedOrigin);
30
- res.setHeader("Access-Control-Allow-Methods", "GET, POST, OPTIONS");
31
- res.setHeader("Access-Control-Allow-Headers", "Content-Type, Authorization");
30
+ // BO7 fix: support comma-separated list of allowed origins. Production
31
+ // deployments often need dev + staging + prod URLs; previously only
32
+ // one was supported per process. The request's Origin header is
33
+ // matched against the configured list; only the matched origin is
34
+ // reflected in the response. Empty config = deny all cross-origin.
35
+ const rawAllowedOrigins = process.env.DA_HTTP_CORS_ORIGIN ?? "";
36
+ if (rawAllowedOrigins) {
37
+ const allowedList = rawAllowedOrigins.split(",").map(s => s.trim()).filter(Boolean);
38
+ const requestOrigin = req.headers.origin;
39
+ if (typeof requestOrigin === "string" && allowedList.includes(requestOrigin)) {
40
+ res.setHeader("Access-Control-Allow-Origin", requestOrigin);
41
+ res.setHeader("Vary", "Origin");
42
+ res.setHeader("Access-Control-Allow-Methods", "GET, POST, OPTIONS");
43
+ res.setHeader("Access-Control-Allow-Headers", "Content-Type, Authorization");
44
+ }
45
+ else if (allowedList.length === 1 && !requestOrigin) {
46
+ // Backwards compat: if exactly one origin is configured and no
47
+ // Origin header is present (e.g., server-to-server), reflect the
48
+ // single origin as before. Pre-BO7 behavior was unconditional.
49
+ res.setHeader("Access-Control-Allow-Origin", allowedList[0]);
50
+ res.setHeader("Access-Control-Allow-Methods", "GET, POST, OPTIONS");
51
+ res.setHeader("Access-Control-Allow-Headers", "Content-Type, Authorization");
52
+ }
53
+ // No match: omit CORS headers entirely → browser blocks the request.
32
54
  }
33
55
  if (req.method === "OPTIONS") {
34
56
  res.writeHead(204);
@@ -39,7 +61,11 @@ export async function startHttpTransport(server, options, logger) {
39
61
  // Health check (unauthenticated — only returns status info)
40
62
  if (url.pathname === "/health" && req.method === "GET") {
41
63
  res.writeHead(200, { "Content-Type": "application/json" });
42
- res.end(JSON.stringify({ status: "ok", transport: "sse", version: options.version ?? "unknown" }));
64
+ // BO6 fix: fall back to imported VERSION constant rather than the
65
+ // string "unknown" when options.version is omitted. Keeps /health
66
+ // useful for diagnostics even if the transport is constructed
67
+ // without explicit version.
68
+ res.end(JSON.stringify({ status: "ok", transport: "sse", version: options.version ?? VERSION }));
43
69
  return;
44
70
  }
45
71
  // Bearer token auth — all endpoints below require valid token when DA_AUTH_TOKEN is set
@@ -48,9 +74,20 @@ export async function startHttpTransport(server, options, logger) {
48
74
  // SSE endpoint — client subscribes here
49
75
  if (url.pathname === "/sse" && req.method === "GET") {
50
76
  logger.info(`SSE client connected from ${req.socket.remoteAddress}`);
51
- // Close previous transport if any (single-client model)
77
+ // W1: close the previous transport before replacing it (single-client
78
+ // model). Without the explicit close, the old transport's response
79
+ // stream stays open until GC reclaims it, briefly leaking a file
80
+ // descriptor and a half-open SSE channel that the previous client
81
+ // might still be writing to.
52
82
  if (activeTransport) {
53
83
  logger.warn("New SSE connection replacing existing one.");
84
+ try {
85
+ await activeTransport.close();
86
+ }
87
+ catch (err) {
88
+ logger.warn(`Failed to close previous SSE transport: ${err instanceof Error ? err.message : err}`);
89
+ }
90
+ activeTransport = null;
54
91
  }
55
92
  const transport = new SSEServerTransport("/message", res);
56
93
  activeTransport = transport;
@@ -1 +1 @@
1
- {"version":3,"file":"http-transport.js","sourceRoot":"","sources":["../src/http-transport.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"http-transport.js","sourceRoot":"","sources":["../src/http-transport.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;;;;;GAUG"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAGA;;;;;;;;;;GAUG"}
package/build/index.js CHANGED
@@ -1,4 +1,6 @@
1
1
  #!/usr/bin/env node
2
+ // Copyright 2026 Jason <fullread@github>
3
+ // SPDX-License-Identifier: Apache-2.0
2
4
  /**
3
5
  * DeepADB — MCP Server for Android Debug Bridge
4
6
  *
@@ -34,28 +36,51 @@ async function main() {
34
36
  const httpHost = process.env.DA_HTTP_HOST ?? "127.0.0.1";
35
37
  const wsPort = parsePort(process.env.DA_WS_PORT);
36
38
  const graphqlPort = parsePort(process.env.DA_GRAPHQL_PORT);
39
+ // BL7 fix: HTTP and WebSocket transports are mutually exclusive (HTTP takes
40
+ // precedence). Without this warning, an operator who set both env vars
41
+ // silently got HTTP only with no indication their WS_PORT was ignored.
42
+ if (httpPort && wsPort) {
43
+ console.error("[DeepADB] ⚠ Both DA_HTTP_PORT and DA_WS_PORT are set — HTTP takes precedence. DA_WS_PORT is ignored.");
44
+ }
37
45
  // Warn when binding network transports to non-loopback addresses.
38
46
  // This is the #2 most common MCP security finding (Backslash/AgentSeal research):
39
47
  // servers exposed on 0.0.0.0 without authentication allow anyone on the network
40
48
  // to execute tools, including shell commands, on the host machine.
41
49
  const isLoopback = httpHost === "127.0.0.1" || httpHost === "localhost" || httpHost === "::1";
42
50
  if (!isLoopback && (httpPort || wsPort || graphqlPort) && !isAuthEnabled()) {
43
- console.error("╔══════════════════════════════════════════════════════════════╗");
44
- console.error("║ ⚠ WARNING: Network-exposed transport without authentication ║");
45
- console.error("╠══════════════════════════════════════════════════════════════╣");
46
- console.error(`║ Binding to ${httpHost} — accessible to other machines on the network.`);
47
- console.error("║ DeepADB provides shell execution, file access, and root commands.");
48
- console.error("║ Anyone who can reach this port can execute tools without auth.");
49
- console.error("║ ║");
50
- console.error("║ Recommendations: ║");
51
- console.error("║ • Set a bearer token: DA_AUTH_TOKEN=your-secret-token ║");
52
- console.error("║ • Enable security middleware: DA_SECURITY=true ║");
53
- console.error("║ • Set an allowlist: DA_ALLOWED_COMMANDS=dumpsys,getprop,... ║");
54
- console.error("║ • Restrict CORS: DA_HTTP_CORS_ORIGIN=https://your-app.example ║");
55
- console.error("║ • Use a reverse proxy with HTTPS in front of DeepADB ║");
56
- console.error("║ ║");
57
- console.error("║ See SECURITY.md for deployment guidance. ║");
58
- console.error("╚══════════════════════════════════════════════════════════════╝");
51
+ // BL6 fix: detect Unicode-capable terminal. Windows Terminal, VS Code,
52
+ // and any non-Windows host can render the box-drawing characters
53
+ // (╔═╗║╠╣╚╝). Legacy cmd.exe on the OEM code page (CP437/CP850) cannot
54
+ // and renders them as mojibake. Detection heuristic: anything other
55
+ // than Windows = OK; Windows + WT_SESSION (Windows Terminal) or
56
+ // TERM_PROGRAM (VS Code, etc.) = OK; otherwise fall back to ASCII.
57
+ // Operator can force ASCII by setting DA_ASCII_ONLY=1.
58
+ const wantsAscii = process.env.DA_ASCII_ONLY === "1" ||
59
+ (process.platform === "win32" &&
60
+ !process.env.WT_SESSION &&
61
+ !process.env.TERM_PROGRAM &&
62
+ !process.env.TERM);
63
+ const C = wantsAscii
64
+ ? { tl: "+", tr: "+", bl: "+", br: "+", h: "-", v: "|", sep: "+", warn: "!!" }
65
+ : { tl: "╔", tr: "╗", bl: "╚", br: "╝", h: "═", v: "║", sep: "╠", warn: "⚠" };
66
+ const sepR = wantsAscii ? "+" : "╣";
67
+ const hLine = C.h.repeat(62);
68
+ console.error(`${C.tl}${hLine}${C.tr}`);
69
+ console.error(`${C.v} ${C.warn} WARNING: Network-exposed transport without authentication ${C.v}`);
70
+ console.error(`${C.sep}${hLine}${sepR}`);
71
+ console.error(`${C.v} Binding to ${httpHost} — accessible to other machines on the network.`);
72
+ console.error(`${C.v} DeepADB provides shell execution, file access, and root commands.`);
73
+ console.error(`${C.v} Anyone who can reach this port can execute tools without auth.`);
74
+ console.error(`${C.v} ${C.v}`);
75
+ console.error(`${C.v} Recommendations: ${C.v}`);
76
+ console.error(`${C.v} ${wantsAscii ? "*" : "•"} Set a bearer token: DA_AUTH_TOKEN=your-secret-token ${C.v}`);
77
+ console.error(`${C.v} ${wantsAscii ? "*" : "•"} Enable security middleware: DA_SECURITY=true ${C.v}`);
78
+ console.error(`${C.v} ${wantsAscii ? "*" : "•"} Set an allowlist: DA_ALLOWED_COMMANDS=dumpsys,getprop,... ${C.v}`);
79
+ console.error(`${C.v} ${wantsAscii ? "*" : "•"} Restrict CORS: DA_HTTP_CORS_ORIGIN=https://your-app.example ${C.v}`);
80
+ console.error(`${C.v} ${wantsAscii ? "*" : "•"} Use a reverse proxy with HTTPS in front of DeepADB ${C.v}`);
81
+ console.error(`${C.v} ${C.v}`);
82
+ console.error(`${C.v} See SECURITY.md for deployment guidance. ${C.v}`);
83
+ console.error(`${C.bl}${hLine}${C.br}`);
59
84
  }
60
85
  // Log auth status for network transports
61
86
  if (httpPort || wsPort || graphqlPort) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/middleware/auth.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,MAAM,CAAC;AAYvD,qCAAqC;AACrC,wBAAgB,aAAa,IAAI,OAAO,CAEvC;AAED;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CAuC5C;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,GAAG,OAAO,CAY5E;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAc3D"}
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/middleware/auth.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,MAAM,CAAC;AAYvD,qCAAqC;AACrC,wBAAgB,aAAa,IAAI,OAAO,CAEvC;AAED;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CA+D5C;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,GAAG,OAAO,CAY5E;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAyB3D"}
@@ -1,3 +1,5 @@
1
+ // Copyright 2026 Jason <fullread@github>
2
+ // SPDX-License-Identifier: Apache-2.0
1
3
  /**
2
4
  * Bearer Token Authentication — Optional auth layer for network transports.
3
5
  *
@@ -47,11 +49,22 @@ export function validateTokenStrength() {
47
49
  warnings.push(`Generate a strong token: openssl rand -hex 32`);
48
50
  warnings.push(`Or with Node.js: node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"`);
49
51
  }
50
- // Check 2: Character diversity — estimate entropy
52
+ // Check 2: Character diversity — proper entropy estimate (F1 fix).
53
+ //
54
+ // The previous check used a unique/total ratio < 0.3 — which false-positives
55
+ // on the documented best-practice generator `openssl rand -hex 32` (64 hex
56
+ // chars drawn from 16-char alphabet has ratio ≈ 0.25). Users who followed
57
+ // the documentation saw spurious "weak token" warnings at startup.
58
+ //
59
+ // Switched to Shannon-style entropy estimate: `length × log2(uniqueChars)`
60
+ // gives an upper bound on bits of entropy in the token. A 64-hex token has
61
+ // 64 × log2(16) = 256 bits → strong. A 24-char "passwordpassword..." has
62
+ // 24 × log2(~8) ≈ 72 bits → correctly flagged. 128 bits is the threshold
63
+ // used for symmetric secrets.
51
64
  const uniqueChars = new Set(AUTH_TOKEN).size;
52
- const entropyRatio = uniqueChars / AUTH_TOKEN.length;
53
- if (AUTH_TOKEN.length >= 8 && entropyRatio < 0.3) {
54
- warnings.push(`Token has very low character diversity (${uniqueChars} unique characters in ${AUTH_TOKEN.length} total).`);
65
+ const entropyBits = AUTH_TOKEN.length * Math.log2(Math.max(2, uniqueChars));
66
+ if (AUTH_TOKEN.length >= 8 && entropyBits < 128) {
67
+ warnings.push(`Token has low estimated entropy (~${Math.floor(entropyBits)} bits from ${uniqueChars} unique characters across ${AUTH_TOKEN.length} total). Consider a longer or more varied token; 128+ bits is recommended.`);
55
68
  }
56
69
  // Check 3: Common weak patterns
57
70
  if (/^(.)\1+$/.test(AUTH_TOKEN)) {
@@ -61,11 +74,25 @@ export function validateTokenStrength() {
61
74
  warnings.push("Token appears to use a common weak pattern.");
62
75
  }
63
76
  if (warnings.length > 0) {
77
+ // F2 fix: pad dynamic-content lines so the right edge stays aligned with
78
+ // the fixed-text lines. Box interior is 62 cells (matches the 62 '═' in
79
+ // the border lines). "║ " prefix is 3 cells, " ║" suffix is 3 cells,
80
+ // so the content has 56 cells of width. Lines longer than 56 are emitted
81
+ // unpadded (no truncation — operators need full warnings).
82
+ const BOX_WIDTH = 62;
83
+ const PREFIX = "║ ";
84
+ const SUFFIX = " ║";
85
+ const CONTENT_WIDTH = BOX_WIDTH - PREFIX.length - SUFFIX.length;
64
86
  console.error("╔══════════════════════════════════════════════════════════════╗");
65
87
  console.error("║ ⚠ WARNING: DA_AUTH_TOKEN may be weak ║");
66
88
  console.error("╠══════════════════════════════════════════════════════════════╣");
67
89
  for (const w of warnings) {
68
- console.error(`║ ${w}`);
90
+ if (w.length <= CONTENT_WIDTH) {
91
+ console.error(`${PREFIX}${w.padEnd(CONTENT_WIDTH)}${SUFFIX}`);
92
+ }
93
+ else {
94
+ console.error(`${PREFIX}${w}`);
95
+ }
69
96
  }
70
97
  console.error("║ ║");
71
98
  console.error("║ A strong token should be at least 32 random hex characters: ║");
@@ -115,9 +142,19 @@ export function hasValidToken(req) {
115
142
  // Compare buffer byte lengths (not string char lengths) to handle multi-byte
116
143
  // UTF-8 tokens correctly — string length can match while byte lengths differ,
117
144
  // which would cause timingSafeEqual to throw.
145
+ //
146
+ // F3 fix: on length mismatch we still run timingSafeEqual against a
147
+ // same-length buffer so the function takes roughly the same time as a
148
+ // successful-length-mismatch comparison. Without this, the response time
149
+ // leaks the configured token's byte length (an attacker could probe with
150
+ // tokens of various lengths). The result of the self-compare is discarded.
118
151
  const tokenBuf = Buffer.from(token);
119
- if (tokenBuf.length !== AUTH_TOKEN_BUF.length)
152
+ if (tokenBuf.length !== AUTH_TOKEN_BUF.length) {
153
+ // Self-compare to burn equivalent CPU to the success path. Result is
154
+ // necessarily true and is discarded — we still return false.
155
+ timingSafeEqual(AUTH_TOKEN_BUF, AUTH_TOKEN_BUF);
120
156
  return false;
157
+ }
121
158
  return timingSafeEqual(tokenBuf, AUTH_TOKEN_BUF);
122
159
  }
123
160
  //# sourceMappingURL=auth.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/middleware/auth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/middleware/auth.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,sCAAsC;AACtC;;;;;;;;;;;;;;;;;;GAkBG;AAGH,OAAO,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AAEzC,sEAAsE;AACtE,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,EAAE,CAAC;AAEnD,2FAA2F;AAC3F,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAE/C,4FAA4F;AAC5F,MAAM,gBAAgB,GAAG,EAAE,CAAC;AAE5B,qCAAqC;AACrC,MAAM,UAAU,aAAa;IAC3B,OAAO,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;AAC/B,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,qBAAqB;IACnC,IAAI,CAAC,UAAU;QAAE,OAAO;IAExB,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,0BAA0B;IAC1B,IAAI,UAAU,CAAC,MAAM,GAAG,gBAAgB,EAAE,CAAC;QACzC,QAAQ,CAAC,IAAI,CAAC,YAAY,UAAU,CAAC,MAAM,wCAAwC,gBAAgB,GAAG,CAAC,CAAC;QACxG,QAAQ,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;QAC/D,QAAQ,CAAC,IAAI,CAAC,2FAA2F,CAAC,CAAC;IAC7G,CAAC;IAED,mEAAmE;IACnE,EAAE;IACF,6EAA6E;IAC7E,2EAA2E;IAC3E,0EAA0E;IAC1E,mEAAmE;IACnE,EAAE;IACF,2EAA2E;IAC3E,2EAA2E;IAC3E,yEAAyE;IACzE,yEAAyE;IACzE,8BAA8B;IAC9B,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC;IAC7C,MAAM,WAAW,GAAG,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC;IAC5E,IAAI,UAAU,CAAC,MAAM,IAAI,CAAC,IAAI,WAAW,GAAG,GAAG,EAAE,CAAC;QAChD,QAAQ,CAAC,IAAI,CAAC,qCAAqC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,cAAc,WAAW,6BAA6B,UAAU,CAAC,MAAM,4EAA4E,CAAC,CAAC;IACjO,CAAC;IAED,gCAAgC;IAChC,IAAI,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QAChC,QAAQ,CAAC,IAAI,CAAC,qEAAqE,CAAC,CAAC;IACvF,CAAC;SAAM,IAAI,6DAA6D,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QAC1F,QAAQ,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;IAC/D,CAAC;IAED,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,yEAAyE;QACzE,wEAAwE;QACxE,uEAAuE;QACvE,yEAAyE;QACzE,2DAA2D;QAC3D,MAAM,SAAS,GAAG,EAAE,CAAC;QACrB,MAAM,MAAM,GAAG,KAAK,CAAC;QACrB,MAAM,MAAM,GAAG,KAAK,CAAC;QACrB,MAAM,aAAa,GAAG,SAAS,GAAG,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAChE,OAAO,CAAC,KAAK,CAAC,kEAAkE,CAAC,CAAC;QAClF,OAAO,CAAC,KAAK,CAAC,mEAAmE,CAAC,CAAC;QACnF,OAAO,CAAC,KAAK,CAAC,kEAAkE,CAAC,CAAC;QAClF,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;YACzB,IAAI,CAAC,CAAC,MAAM,IAAI,aAAa,EAAE,CAAC;gBAC9B,OAAO,CAAC,KAAK,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,MAAM,EAAE,CAAC,CAAC;YAChE,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CAAC,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC;YACjC,CAAC;QACH,CAAC;QACD,OAAO,CAAC,KAAK,CAAC,sEAAsE,CAAC,CAAC;QACtF,OAAO,CAAC,KAAK,CAAC,sEAAsE,CAAC,CAAC;QACtF,OAAO,CAAC,KAAK,CAAC,sEAAsE,CAAC,CAAC;QACtF,OAAO,CAAC,KAAK,CAAC,mFAAmF,CAAC,CAAC;QACnG,OAAO,CAAC,KAAK,CAAC,kEAAkE,CAAC,CAAC;IACpF,CAAC;AACH,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,SAAS,CAAC,GAAoB,EAAE,GAAmB;IACjE,IAAI,CAAC,UAAU;QAAE,OAAO,IAAI,CAAC;IAE7B,IAAI,aAAa,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAEpC,0BAA0B;IAC1B,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE;QACjB,cAAc,EAAE,kBAAkB;QAClC,kBAAkB,EAAE,QAAQ;KAC7B,CAAC,CAAC;IACH,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,yDAAyD,EAAE,CAAC,CAAC,CAAC;IAC9F,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAAC,GAAoB;IAChD,IAAI,CAAC,UAAU;QAAE,OAAO,IAAI,CAAC;IAE7B,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,aAAa,IAAI,EAAE,CAAC;IACnD,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;IACnD,MAAM,KAAK,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAE/B,yEAAyE;IACzE,6EAA6E;IAC7E,8EAA8E;IAC9E,8CAA8C;IAC9C,EAAE;IACF,oEAAoE;IACpE,sEAAsE;IACtE,yEAAyE;IACzE,yEAAyE;IACzE,2EAA2E;IAC3E,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACpC,IAAI,QAAQ,CAAC,MAAM,KAAK,cAAc,CAAC,MAAM,EAAE,CAAC;QAC9C,qEAAqE;QACrE,6DAA6D;QAC7D,eAAe,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC;QAChD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,eAAe,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;AACnD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"chipset.d.ts","sourceRoot":"","sources":["../../src/middleware/chipset.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;;GAGG;AACH,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAgDhD,CAAC;AAEF;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAkDzE;AAED,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;CACtB;AAKD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAOxE"}
1
+ {"version":3,"file":"chipset.d.ts","sourceRoot":"","sources":["../../src/middleware/chipset.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AAEH;;;GAGG;AACH,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAwDhD,CAAC;AAEF;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAuDzE;AAED,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;CACtB;AAKD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAOxE"}
@@ -1,3 +1,5 @@
1
+ // Copyright 2026 Jason <fullread@github>
2
+ // SPDX-License-Identifier: Apache-2.0
1
3
  /**
2
4
  * Chipset Detection — Shared chipset family identification, modem path mapping,
3
5
  * and SIM configuration detection.
@@ -50,6 +52,14 @@ export const MODEM_PATHS = {
50
52
  "/dev/ttyACM0",
51
53
  "/dev/ttyACM1",
52
54
  ],
55
+ // J3 note: `/dev/ttyACM0` and `/dev/ttyACM1` appear in BOTH the `intel`
56
+ // and `generic` lists. If autodetect falls through to `generic` after
57
+ // `intel` failed, the same two paths get probed a second time. Callers
58
+ // (autoDetectAtPort, adb_at_detect) iterate and bail on first success,
59
+ // so the worst-case redundancy is two extra `test -e` calls — negligible.
60
+ // Intentional: keeps each family list self-sufficient if used standalone,
61
+ // and the generic fallback should be a superset, not require composition
62
+ // with the more-specific lists.
53
63
  // Generic USB/serial modems
54
64
  generic: [
55
65
  "/dev/ttyUSB0",
@@ -77,7 +87,12 @@ export function detectChipsetFamily(props) {
77
87
  return "shannon";
78
88
  }
79
89
  // Qualcomm detection (includes platform codenames for recent SoCs)
80
- if (platform.includes("msm") || platform.includes("sdm") || platform.includes("sm") ||
90
+ // J1 fix: `platform.includes("sm")` was overly broad — any string with
91
+ // the substring "sm" matched (samsung, cosmic, osmium, etc.). Tighten to
92
+ // require a digit immediately after "sm" (e.g., sm8550, sm7325) which is
93
+ // the actual Qualcomm naming convention. Other prefixes (msm, sdm, qcom)
94
+ // are specific enough to keep as substring matches.
95
+ if (platform.includes("msm") || platform.includes("sdm") || /\bsm\d/.test(platform) ||
81
96
  platform.includes("qcom") || chipname.includes("snapdragon") ||
82
97
  hardware.includes("qcom") || platform.includes("lahaina") ||
83
98
  platform.includes("taro") || platform.includes("kalama")) {
@@ -1 +1 @@
1
- {"version":3,"file":"chipset.js","sourceRoot":"","sources":["../../src/middleware/chipset.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"chipset.js","sourceRoot":"","sources":["../../src/middleware/chipset.ts"],"names":[],"mappings":"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"}
@@ -1,24 +1,56 @@
1
1
  /**
2
2
  * Process Cleanup Registry — Centralized signal handler for child process cleanup.
3
3
  *
4
- * Multiple modules (logcat-watch, ril-intercept, mirroring) spawn long-running
5
- * child processes that must be killed on server exit. Instead of each module
6
- * independently registering SIGINT/SIGTERM/exit handlers (which creates
7
- * ordering dependencies and redundant process.exit() calls), all modules
8
- * register their cleanup functions here.
4
+ * Multiple modules (logcat-watch, ril-intercept, mirroring, emulator, qemu)
5
+ * spawn long-running child processes that must be killed on server exit.
6
+ * Instead of each module independently registering SIGINT/SIGTERM/exit
7
+ * handlers (which creates ordering dependencies and redundant
8
+ * process.exit() calls), all modules register their cleanup functions here.
9
9
  *
10
10
  * One set of signal handlers runs all registered cleanups in order.
11
+ *
12
+ * Cleanup functions may return a Promise; the SIGINT/SIGTERM handlers
13
+ * await them. The synchronous 'exit' handler is best-effort — it fires
14
+ * the cleanups but cannot wait for async work to complete.
11
15
  */
12
- type CleanupFn = () => void;
16
+ import type { ChildProcess } from "child_process";
17
+ type CleanupFn = () => void | Promise<void>;
13
18
  /**
14
19
  * Register a cleanup function that will be called on process exit/SIGINT/SIGTERM.
15
20
  * Each module should register under a unique key. Re-registering the same key
16
- * replaces the previous function.
21
+ * replaces the previous function. The function may return a Promise.
17
22
  */
18
23
  export declare function registerCleanup(key: string, fn: CleanupFn): void;
19
24
  /**
20
25
  * Remove a cleanup function by key (e.g., if the module's sessions are all stopped).
21
26
  */
22
27
  export declare function unregisterCleanup(key: string): void;
28
+ /**
29
+ * Kill a child process with two-stage SIGTERM → SIGKILL fallback.
30
+ *
31
+ * Sends SIGTERM, waits up to `graceMs` for the child to exit voluntarily,
32
+ * then escalates to SIGKILL if it's still running. Resolves when the
33
+ * child has exited OR after the SIGKILL has been sent.
34
+ *
35
+ * This closes audit findings AC3 (emulator) and AK8 (mirroring) — and
36
+ * matches the same hazard in logcat-watch.ts and ril-intercept.ts where
37
+ * a bare `proc.kill()` could leave a hung child orphaned if it ignored
38
+ * SIGTERM (common with mid-snapshot Android emulators, hung video pipes
39
+ * in scrcpy, and stuck logcat readers on a wedged device).
40
+ *
41
+ * Default `graceMs` = 1500: enough for a healthy child to clean up,
42
+ * short enough that shutdown stays responsive.
43
+ *
44
+ * Safe to call on an already-exited child (no-op). Safe to call from
45
+ * SIGINT/SIGTERM contexts via async cleanups registered with
46
+ * `registerCleanup` — the registry awaits each cleanup before exiting.
47
+ */
48
+ export declare function gracefulKill(child: ChildProcess, graceMs?: number): Promise<void>;
49
+ /**
50
+ * Convenience: gracefully kill multiple children in parallel.
51
+ * All children get SIGTERM concurrently; each gets SIGKILL after graceMs
52
+ * if still running. Resolves when all have settled.
53
+ */
54
+ export declare function gracefulKillAll(children: Iterable<ChildProcess>, graceMs?: number): Promise<void>;
23
55
  export {};
24
56
  //# sourceMappingURL=cleanup.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cleanup.d.ts","sourceRoot":"","sources":["../../src/middleware/cleanup.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,KAAK,SAAS,GAAG,MAAM,IAAI,CAAC;AA8B5B;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,GAAG,IAAI,CAGhE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAEnD"}
1
+ {"version":3,"file":"cleanup.d.ts","sourceRoot":"","sources":["../../src/middleware/cleanup.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAclD,KAAK,SAAS,GAAG,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAyF5C;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,GAAG,IAAI,CAGhE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAEnD;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,YAAY,CAChC,KAAK,EAAE,YAAY,EACnB,OAAO,GAAE,MAAa,GACrB,OAAO,CAAC,IAAI,CAAC,CAqCf;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CACnC,QAAQ,EAAE,QAAQ,CAAC,YAAY,CAAC,EAChC,OAAO,GAAE,MAAa,GACrB,OAAO,CAAC,IAAI,CAAC,CAIf"}