@descryy/runtime-orchestrator 0.5.0 → 0.5.2
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/attach-log-sources.d.ts +12 -2
- package/dist/attach-log-sources.d.ts.map +1 -1
- package/dist/attach-log-sources.js +132 -26
- package/dist/attach-log-sources.js.map +1 -1
- package/dist/attach-to-running-jvm-process.d.ts.map +1 -1
- package/dist/attach-to-running-jvm-process.js +129 -37
- package/dist/attach-to-running-jvm-process.js.map +1 -1
- package/dist/attach-to-running-node-process.d.ts +2 -0
- package/dist/attach-to-running-node-process.d.ts.map +1 -1
- package/dist/attach-to-running-node-process.js +222 -27
- package/dist/attach-to-running-node-process.js.map +1 -1
- package/dist/attach-to-running-process.d.ts +2 -0
- package/dist/attach-to-running-process.d.ts.map +1 -1
- package/dist/attach-to-running-process.js +62 -12
- package/dist/attach-to-running-process.js.map +1 -1
- package/dist/cdp-client.d.ts +7 -1
- package/dist/cdp-client.d.ts.map +1 -1
- package/dist/cdp-client.js +83 -7
- package/dist/cdp-client.js.map +1 -1
- package/dist/cgroup-partial-restriction.d.ts.map +1 -1
- package/dist/cgroup-partial-restriction.js +4 -1
- package/dist/cgroup-partial-restriction.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/instrumented-execution.d.ts +2 -0
- package/dist/instrumented-execution.d.ts.map +1 -1
- package/dist/instrumented-execution.js +136 -14
- package/dist/instrumented-execution.js.map +1 -1
- package/dist/jvm-agent/build.d.ts +2 -2
- package/dist/jvm-agent/build.d.ts.map +1 -1
- package/dist/jvm-agent/build.js +46 -17
- package/dist/jvm-agent/build.js.map +1 -1
- package/dist/polling-output-source.d.ts +16 -6
- package/dist/polling-output-source.d.ts.map +1 -1
- package/dist/polling-output-source.js +38 -22
- package/dist/polling-output-source.js.map +1 -1
- package/dist/profile-backend-observation.d.ts +7 -0
- package/dist/profile-backend-observation.d.ts.map +1 -1
- package/dist/profile-backend-observation.js +87 -25
- package/dist/profile-backend-observation.js.map +1 -1
- package/dist/respawn-and-supervise.d.ts +1 -0
- package/dist/respawn-and-supervise.d.ts.map +1 -1
- package/dist/respawn-and-supervise.js +29 -1
- package/dist/respawn-and-supervise.js.map +1 -1
- package/package.json +17 -17
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attach-to-running-node-process.d.ts","sourceRoot":"","sources":["../src/attach-to-running-node-process.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;
|
|
1
|
+
{"version":3,"file":"attach-to-running-node-process.d.ts","sourceRoot":"","sources":["../src/attach-to-running-node-process.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AAQH,OAAO,KAAK,EAAE,SAAS,EAAyG,MAAM,4BAA4B,CAAC;AAyEnK,MAAM,WAAW,iCAAiC;IAChD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,uIAAuI;IACvI,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,mGAAmG;IACnG,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,kKAAkK;IAClK,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,mIAAmI;IACnI,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,6BAA6B,CAAC,EAAE,OAAO,CAAC;CAClD;AAOD;;;;;;;;GAQG;AACH,wBAAsB,wBAAwB,CAC5C,GAAG,EAAE,MAAM,EACX,OAAO,GAAE;IAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,OAAO,CAAA;CAAO,GACrI,OAAO,CAAC,MAAM,CAAC,CA4DjB;AAyJD;;;;;;;;;;;GAWG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,iCAAiC,GAAG,SAAS,CAwKhG"}
|
|
@@ -37,7 +37,11 @@
|
|
|
37
37
|
* observed, not the mechanism). `capabilities()` reports `backendLogAccess`, not
|
|
38
38
|
* `consoleObservation` (reserved for a browser page's console).
|
|
39
39
|
*/
|
|
40
|
-
import {
|
|
40
|
+
import { execFile } from "node:child_process";
|
|
41
|
+
import { readlinkSync } from "node:fs";
|
|
42
|
+
import { basename } from "node:path";
|
|
43
|
+
import { promisify } from "node:util";
|
|
44
|
+
import { findPortOwner } from "@descryy/runtime-controller";
|
|
41
45
|
import { connectCdp } from "./cdp-client.js";
|
|
42
46
|
import { isProcessAlive } from "./attach-to-running-process.js";
|
|
43
47
|
import { COLLECTOR_VERSION } from "./collector-version.js";
|
|
@@ -54,23 +58,59 @@ import { COLLECTOR_VERSION } from "./collector-version.js";
|
|
|
54
58
|
* other, so this check is the only backstop for `SIGUSR1` — unlike HotSpot's
|
|
55
59
|
* attach socket (the JVM sibling), which enforces uid at the OS level itself.
|
|
56
60
|
*/
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
61
|
+
const execFileAsync = promisify(execFile);
|
|
62
|
+
const PS_TIMEOUT_MS = 5_000;
|
|
63
|
+
const NODE_EXECUTABLE_NAME = /^(?:node|nodejs)(?:\.exe)?$/;
|
|
64
|
+
async function psField(pid, field) {
|
|
65
|
+
try {
|
|
66
|
+
const { stdout } = await execFileAsync("ps", ["-o", `${field}=`, "-p", String(pid)], { encoding: "utf8", timeout: PS_TIMEOUT_MS });
|
|
67
|
+
const value = stdout.trim().split("\n")[0]?.trim() ?? "";
|
|
68
|
+
return value === "" ? { ok: false, detail: "ps printed nothing" } : { ok: true, value };
|
|
69
|
+
}
|
|
70
|
+
catch (error) {
|
|
71
|
+
return { ok: false, detail: error instanceof Error ? error.message : String(error) };
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
function executableNameFromProc(pid) {
|
|
75
|
+
if (process.platform !== "linux")
|
|
76
|
+
return null;
|
|
77
|
+
try {
|
|
78
|
+
return basename(readlinkSync(`/proc/${String(pid)}/exe`).replace(/ \(deleted\)$/, ""));
|
|
79
|
+
}
|
|
80
|
+
catch {
|
|
81
|
+
return null;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
function invalidTargetPidReason(pid) {
|
|
85
|
+
if (!Number.isSafeInteger(pid))
|
|
86
|
+
return `${String(pid)} is not a whole number`;
|
|
87
|
+
if (pid === 1)
|
|
88
|
+
return "pid 1 is the init process, which belongs to a different user than this process and must never be signalled";
|
|
89
|
+
if (pid < 1)
|
|
90
|
+
return `${String(pid)} is not a process id (0 and negative values address process groups)`;
|
|
91
|
+
if (pid === process.pid || pid === process.ppid)
|
|
92
|
+
return `pid ${String(pid)} is this process or its parent, which must never be the target of an attach`;
|
|
93
|
+
return null;
|
|
94
|
+
}
|
|
95
|
+
async function verifyLikelyNodeProcessOwnedBySelf(pid) {
|
|
96
|
+
const owner = await psField(pid, "uid");
|
|
97
|
+
const command = await psField(pid, "comm");
|
|
98
|
+
const startedAt = await psField(pid, "lstart");
|
|
99
|
+
const failed = [owner, command, startedAt].find((answer) => !answer.ok);
|
|
100
|
+
if (failed !== undefined || !owner.ok || !command.ok || !startedAt.ok) {
|
|
101
|
+
const detail = failed !== undefined && !failed.ok ? failed.detail : "ps gave no answer";
|
|
102
|
+
return { ok: false, reason: `could not verify pid ${String(pid)}'s owner/command via ps (${detail}) — refusing to signal a process this module cannot confirm the identity of` };
|
|
62
103
|
}
|
|
63
|
-
const
|
|
64
|
-
const uid = Number(uidField);
|
|
65
|
-
const comm = commFields.join(" ").toLowerCase();
|
|
104
|
+
const uid = Number(owner.value);
|
|
66
105
|
const ownUid = process.getuid?.();
|
|
67
106
|
if (ownUid !== undefined && uid !== ownUid) {
|
|
68
107
|
return { ok: false, reason: `pid ${String(pid)} is owned by uid ${String(uid)}, not this process's own uid ${String(ownUid)} — refusing to signal a process this session does not own` };
|
|
69
108
|
}
|
|
70
|
-
|
|
71
|
-
|
|
109
|
+
const executable = executableNameFromProc(pid) ?? basename(command.value);
|
|
110
|
+
if (!NODE_EXECUTABLE_NAME.test(executable.toLowerCase())) {
|
|
111
|
+
return { ok: false, reason: `pid ${String(pid)}'s executable is "${executable}", which does not look like a Node process (expected node or nodejs) — refusing to send SIGUSR1 to a process that may not handle it` };
|
|
72
112
|
}
|
|
73
|
-
return { ok: true };
|
|
113
|
+
return { ok: true, startedAt: startedAt.value };
|
|
74
114
|
}
|
|
75
115
|
/**
|
|
76
116
|
* Sends `SIGUSR1` to `pid`, then polls `http://<host>:<port>/json` until the
|
|
@@ -82,6 +122,10 @@ function verifyLikelyNodeProcessOwnedBySelf(pid) {
|
|
|
82
122
|
* non-POSIX platform, or a port that never answers (see module doc).
|
|
83
123
|
*/
|
|
84
124
|
export async function discoverNodeInspectorUrl(pid, options = {}) {
|
|
125
|
+
const invalidPid = invalidTargetPidReason(pid);
|
|
126
|
+
if (invalidPid !== null) {
|
|
127
|
+
throw new Error(`discoverNodeInspectorUrl: ${invalidPid}.`);
|
|
128
|
+
}
|
|
85
129
|
if (!isProcessAlive(pid)) {
|
|
86
130
|
throw new Error(`discoverNodeInspectorUrl: pid ${String(pid)} is not running — cannot attach to a target that does not exist.`);
|
|
87
131
|
}
|
|
@@ -89,7 +133,7 @@ export async function discoverNodeInspectorUrl(pid, options = {}) {
|
|
|
89
133
|
throw new Error("discoverNodeInspectorUrl: SIGUSR1 inspector activation is POSIX-only; not available on win32.");
|
|
90
134
|
}
|
|
91
135
|
// A-F10: verified BEFORE the signal — a wrong pid must never reach process.kill
|
|
92
|
-
const identity = verifyLikelyNodeProcessOwnedBySelf(pid);
|
|
136
|
+
const identity = await verifyLikelyNodeProcessOwnedBySelf(pid);
|
|
93
137
|
if (!identity.ok) {
|
|
94
138
|
throw new Error(`discoverNodeInspectorUrl: ${identity.reason}.`);
|
|
95
139
|
}
|
|
@@ -97,6 +141,10 @@ export async function discoverNodeInspectorUrl(pid, options = {}) {
|
|
|
97
141
|
const port = options.port ?? 9229;
|
|
98
142
|
const timeoutMs = options.timeoutMs ?? 5000;
|
|
99
143
|
const discoveryUrl = `http://${host}:${String(port)}/json`;
|
|
144
|
+
const stillSameProcess = await psField(pid, "lstart");
|
|
145
|
+
if (!stillSameProcess.ok || stillSameProcess.value !== identity.startedAt) {
|
|
146
|
+
throw new Error(`discoverNodeInspectorUrl: pid ${String(pid)} stopped being the process that was verified (it exited or its pid was reused) — SIGUSR1 was not sent.`);
|
|
147
|
+
}
|
|
100
148
|
process.kill(pid, "SIGUSR1");
|
|
101
149
|
const deadline = Date.now() + timeoutMs;
|
|
102
150
|
let lastError = null;
|
|
@@ -105,15 +153,20 @@ export async function discoverNodeInspectorUrl(pid, options = {}) {
|
|
|
105
153
|
throw new Error(`discoverNodeInspectorUrl: pid ${String(pid)} exited while waiting for its inspector to come up.`);
|
|
106
154
|
}
|
|
107
155
|
try {
|
|
108
|
-
const
|
|
156
|
+
const attemptMs = Math.max(1, Math.min(DISCOVERY_ATTEMPT_TIMEOUT_MS, deadline - Date.now()));
|
|
157
|
+
const response = await fetch(discoveryUrl, { signal: AbortSignal.timeout(attemptMs) });
|
|
109
158
|
if (response.ok) {
|
|
110
159
|
const targets = (await response.json());
|
|
111
160
|
const target = targets.find((candidate) => candidate.webSocketDebuggerUrl !== undefined);
|
|
112
|
-
if (target?.webSocketDebuggerUrl !== undefined)
|
|
161
|
+
if (target?.webSocketDebuggerUrl !== undefined) {
|
|
162
|
+
assertInspectorBelongsToTarget(pid, host, port, target.webSocketDebuggerUrl, options.allowUnverifiedOwner === true);
|
|
113
163
|
return target.webSocketDebuggerUrl;
|
|
164
|
+
}
|
|
114
165
|
}
|
|
115
166
|
}
|
|
116
167
|
catch (error) {
|
|
168
|
+
if (error instanceof InspectorOwnershipError)
|
|
169
|
+
throw error;
|
|
117
170
|
lastError = error;
|
|
118
171
|
}
|
|
119
172
|
await new Promise((resolve) => setTimeout(resolve, 50));
|
|
@@ -124,6 +177,41 @@ export async function discoverNodeInspectorUrl(pid, options = {}) {
|
|
|
124
177
|
"process, or the target was itself configured with --inspect-port/NODE_OPTIONS) — this module cannot discover a " +
|
|
125
178
|
"non-default port from outside; a caller who knows the real port must supply discoveryPort.");
|
|
126
179
|
}
|
|
180
|
+
class InspectorOwnershipError extends Error {
|
|
181
|
+
}
|
|
182
|
+
function assertInspectorBelongsToTarget(pid, host, port, webSocketUrl, allowUnverifiedOwner) {
|
|
183
|
+
let socketUrl;
|
|
184
|
+
try {
|
|
185
|
+
socketUrl = new URL(webSocketUrl);
|
|
186
|
+
}
|
|
187
|
+
catch {
|
|
188
|
+
throw new InspectorOwnershipError(`discoverNodeInspectorUrl: the inspector at ${host}:${String(port)} returned a WebSocket address that is not a URL, so it was not connected to.`);
|
|
189
|
+
}
|
|
190
|
+
const reportedHost = socketUrl.hostname.replace(/^\[|\]$/g, "");
|
|
191
|
+
const askedHost = host.replace(/^\[|\]$/g, "");
|
|
192
|
+
const reportedPort = socketUrl.port === "" ? "80" : socketUrl.port;
|
|
193
|
+
if ((socketUrl.protocol !== "ws:" && socketUrl.protocol !== "wss:") || reportedHost !== askedHost || reportedPort !== String(port)) {
|
|
194
|
+
throw new InspectorOwnershipError(`discoverNodeInspectorUrl: the inspector at ${host}:${String(port)} pointed at ${socketUrl.protocol}//${socketUrl.host} instead, so it was not connected to (an inspector may only name its own address).`);
|
|
195
|
+
}
|
|
196
|
+
const owner = findPortOwner(port);
|
|
197
|
+
if (owner.outcome === "found") {
|
|
198
|
+
if (owner.pid === pid)
|
|
199
|
+
return;
|
|
200
|
+
throw new InspectorOwnershipError(`discoverNodeInspectorUrl: the inspector answering on ${host}:${String(port)} belongs to pid ${String(owner.pid)}, not the target pid ${String(pid)} (another debug session already held that port), so it was not attached to; pass discoveryPort for the port the target really bound.`);
|
|
201
|
+
}
|
|
202
|
+
if (owner.outcome === "several-owners") {
|
|
203
|
+
throw new InspectorOwnershipError(`discoverNodeInspectorUrl: several processes (${owner.pids.join(", ")}) listen on port ${String(port)}, so the inspector cannot be attributed to pid ${String(pid)}.`);
|
|
204
|
+
}
|
|
205
|
+
if (owner.outcome === "nothing-listening") {
|
|
206
|
+
throw new InspectorOwnershipError(`discoverNodeInspectorUrl: nothing was listening on port ${String(port)} when its owner was checked, so the inspector cannot be attributed to pid ${String(pid)}.`);
|
|
207
|
+
}
|
|
208
|
+
if (owner.outcome === "owned-by-docker-proxy") {
|
|
209
|
+
throw new InspectorOwnershipError(`discoverNodeInspectorUrl: port ${String(port)} is held by a docker-proxy (pid ${String(owner.pid)}), not by pid ${String(pid)}.`);
|
|
210
|
+
}
|
|
211
|
+
if (!allowUnverifiedOwner) {
|
|
212
|
+
throw new InspectorOwnershipError(`discoverNodeInspectorUrl: who owns the inspector on port ${String(port)} could not be established (${owner.reason}), so attach was refused; set allowUnverifiedInspectorOwner to attach anyway.`);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
127
215
|
/** Decodes a `file://` URL to a plain filesystem path, matching every other adapter's convention. Anything else is passed through verbatim. */
|
|
128
216
|
function pathFromCdpUrl(url) {
|
|
129
217
|
if (url === undefined || url === "")
|
|
@@ -149,11 +237,50 @@ function locationFromCallFrame(frame) {
|
|
|
149
237
|
resolvedVia: null,
|
|
150
238
|
};
|
|
151
239
|
}
|
|
240
|
+
function isRecord(value) {
|
|
241
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
242
|
+
}
|
|
243
|
+
function textOrUndefined(value) {
|
|
244
|
+
return typeof value === "string" ? value : undefined;
|
|
245
|
+
}
|
|
246
|
+
function numberOrUndefined(value) {
|
|
247
|
+
return typeof value === "number" && Number.isFinite(value) ? value : undefined;
|
|
248
|
+
}
|
|
249
|
+
function remoteObjectFrom(value) {
|
|
250
|
+
if (!isRecord(value))
|
|
251
|
+
return {};
|
|
252
|
+
const type = textOrUndefined(value["type"]);
|
|
253
|
+
const description = textOrUndefined(value["description"]);
|
|
254
|
+
return { ...(type === undefined ? {} : { type }), ...(value["value"] === undefined ? {} : { value: value["value"] }), ...(description === undefined ? {} : { description }) };
|
|
255
|
+
}
|
|
256
|
+
function callFramesFrom(value) {
|
|
257
|
+
if (!Array.isArray(value))
|
|
258
|
+
return [];
|
|
259
|
+
return value.filter(isRecord).map((frame) => {
|
|
260
|
+
const functionName = textOrUndefined(frame["functionName"]);
|
|
261
|
+
return {
|
|
262
|
+
...(functionName === undefined ? {} : { functionName }),
|
|
263
|
+
url: textOrUndefined(frame["url"]),
|
|
264
|
+
lineNumber: numberOrUndefined(frame["lineNumber"]),
|
|
265
|
+
columnNumber: numberOrUndefined(frame["columnNumber"]),
|
|
266
|
+
};
|
|
267
|
+
});
|
|
268
|
+
}
|
|
269
|
+
function printable(value) {
|
|
270
|
+
if (typeof value === "string")
|
|
271
|
+
return value;
|
|
272
|
+
try {
|
|
273
|
+
return JSON.stringify(value) ?? String(value);
|
|
274
|
+
}
|
|
275
|
+
catch {
|
|
276
|
+
return String(value);
|
|
277
|
+
}
|
|
278
|
+
}
|
|
152
279
|
function formatConsoleArgs(args) {
|
|
153
280
|
return args
|
|
154
281
|
.map((arg) => {
|
|
155
282
|
if (arg.value !== undefined)
|
|
156
|
-
return
|
|
283
|
+
return printable(arg.value);
|
|
157
284
|
if (arg.description !== undefined)
|
|
158
285
|
return arg.description;
|
|
159
286
|
return `<${arg.type ?? "unknown"}>`;
|
|
@@ -163,6 +290,7 @@ function formatConsoleArgs(args) {
|
|
|
163
290
|
function notThisCollectorsJob(what) {
|
|
164
291
|
return { availability: "unavailable", reason: `attachToRunningNodeProcess observes a Node process's Runtime domain (console, exceptions) only, not ${what}.` };
|
|
165
292
|
}
|
|
293
|
+
const DISCOVERY_ATTEMPT_TIMEOUT_MS = 1_000;
|
|
166
294
|
const CAPABILITIES = {
|
|
167
295
|
domObservation: notThisCollectorsJob("DOM inspection"),
|
|
168
296
|
// reserved for a browser page's console; this is a backend process's, reported
|
|
@@ -193,6 +321,8 @@ const CAPABILITIES = {
|
|
|
193
321
|
*/
|
|
194
322
|
export function attachToRunningNodeProcess(options) {
|
|
195
323
|
let session = null;
|
|
324
|
+
let inspectorLeftOpen = null;
|
|
325
|
+
let stopped = false;
|
|
196
326
|
return {
|
|
197
327
|
collectorId: `attach-node-inspector:${options.processId}`,
|
|
198
328
|
async start(context) {
|
|
@@ -202,13 +332,45 @@ export function attachToRunningNodeProcess(options) {
|
|
|
202
332
|
...(options.discoveryHost !== undefined ? { host: options.discoveryHost } : {}),
|
|
203
333
|
...(options.discoveryPort !== undefined ? { port: options.discoveryPort } : {}),
|
|
204
334
|
...(options.discoveryTimeoutMs !== undefined ? { timeoutMs: options.discoveryTimeoutMs } : {}),
|
|
335
|
+
...(options.allowUnverifiedInspectorOwner === true ? { allowUnverifiedOwner: true } : {}),
|
|
205
336
|
});
|
|
206
337
|
}
|
|
207
338
|
catch (error) {
|
|
208
339
|
return { available: false, reason: error instanceof Error ? error.message : String(error) };
|
|
209
340
|
}
|
|
341
|
+
stopped = false;
|
|
342
|
+
const reportEventProblem = (method, error) => {
|
|
343
|
+
if (stopped)
|
|
344
|
+
return;
|
|
345
|
+
try {
|
|
346
|
+
context.emit({
|
|
347
|
+
timestamp: new Date().toISOString(),
|
|
348
|
+
source: "backend-process",
|
|
349
|
+
service: options.service ?? null,
|
|
350
|
+
process: options.processId,
|
|
351
|
+
eventType: "COLLECTOR_ERROR",
|
|
352
|
+
payload: {
|
|
353
|
+
raw: `attach-node-inspector for process "${options.processId}" could not handle a ${method} event: ${error instanceof Error ? error.message : String(error)}`,
|
|
354
|
+
collectorId: `attach-node-inspector:${options.processId}`,
|
|
355
|
+
error: error instanceof Error ? error.message : String(error),
|
|
356
|
+
},
|
|
357
|
+
traceId: null,
|
|
358
|
+
requestId: null,
|
|
359
|
+
correlationId: null,
|
|
360
|
+
graphNodeId: null,
|
|
361
|
+
sourceLocation: null,
|
|
362
|
+
stackTrace: null,
|
|
363
|
+
confidence: 1,
|
|
364
|
+
redactionStatus: "pending-redaction",
|
|
365
|
+
collectorVersion: COLLECTOR_VERSION,
|
|
366
|
+
});
|
|
367
|
+
}
|
|
368
|
+
catch (emitError) {
|
|
369
|
+
console.error(`[attach-node-inspector:${options.processId}] ${method} handling failed (${String(error)}) and the failure could not be emitted: ${String(emitError)}`);
|
|
370
|
+
}
|
|
371
|
+
};
|
|
210
372
|
try {
|
|
211
|
-
session = await connectCdp(webSocketDebuggerUrl);
|
|
373
|
+
session = await connectCdp(webSocketDebuggerUrl, { onHandlerError: reportEventProblem });
|
|
212
374
|
}
|
|
213
375
|
catch (error) {
|
|
214
376
|
return {
|
|
@@ -216,16 +378,30 @@ export function attachToRunningNodeProcess(options) {
|
|
|
216
378
|
reason: `attachToRunningNodeProcess: found the inspector but could not open a CDP connection to it: ${error instanceof Error ? error.message : String(error)}`,
|
|
217
379
|
};
|
|
218
380
|
}
|
|
219
|
-
|
|
381
|
+
try {
|
|
382
|
+
await session.send("Runtime.enable");
|
|
383
|
+
}
|
|
384
|
+
catch (error) {
|
|
385
|
+
session.close();
|
|
386
|
+
session = null;
|
|
387
|
+
return {
|
|
388
|
+
available: false,
|
|
389
|
+
reason: `attachToRunningNodeProcess: connected to the inspector but it did not enable the Runtime domain: ${error instanceof Error ? error.message : String(error)}`,
|
|
390
|
+
};
|
|
391
|
+
}
|
|
392
|
+
inspectorLeftOpen = new URL(webSocketDebuggerUrl).host;
|
|
220
393
|
session.on("Runtime.consoleAPICalled", (params) => {
|
|
221
|
-
|
|
394
|
+
if (stopped)
|
|
395
|
+
return;
|
|
396
|
+
const level = textOrUndefined(params["type"]);
|
|
397
|
+
const args = Array.isArray(params["args"]) ? params["args"].map(remoteObjectFrom) : [];
|
|
222
398
|
context.emit({
|
|
223
399
|
timestamp: new Date().toISOString(),
|
|
224
400
|
source: "backend-process",
|
|
225
401
|
service: options.service ?? null,
|
|
226
402
|
process: options.processId,
|
|
227
403
|
eventType: "CONSOLE_MESSAGE",
|
|
228
|
-
payload: { level:
|
|
404
|
+
payload: { level: level ?? "log", text: formatConsoleArgs(args) },
|
|
229
405
|
traceId: null,
|
|
230
406
|
requestId: null,
|
|
231
407
|
correlationId: null,
|
|
@@ -238,15 +414,24 @@ export function attachToRunningNodeProcess(options) {
|
|
|
238
414
|
});
|
|
239
415
|
});
|
|
240
416
|
session.on("Runtime.exceptionThrown", (params) => {
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
const
|
|
417
|
+
if (stopped)
|
|
418
|
+
return;
|
|
419
|
+
const rawDetails = isRecord(params["exceptionDetails"]) ? params["exceptionDetails"] : {};
|
|
420
|
+
const details = {
|
|
421
|
+
text: textOrUndefined(rawDetails["text"]),
|
|
422
|
+
url: textOrUndefined(rawDetails["url"]),
|
|
423
|
+
lineNumber: numberOrUndefined(rawDetails["lineNumber"]),
|
|
424
|
+
columnNumber: numberOrUndefined(rawDetails["columnNumber"]),
|
|
425
|
+
exception: remoteObjectFrom(rawDetails["exception"]),
|
|
426
|
+
callFrames: callFramesFrom(isRecord(rawDetails["stackTrace"]) ? rawDetails["stackTrace"]["callFrames"] : undefined),
|
|
427
|
+
};
|
|
428
|
+
const description = details.exception.description;
|
|
244
429
|
const message = description !== undefined
|
|
245
430
|
? (description.split("\n")[0] ?? description)
|
|
246
|
-
: details.exception
|
|
247
|
-
?
|
|
431
|
+
: details.exception.value !== undefined
|
|
432
|
+
? printable(details.exception.value)
|
|
248
433
|
: (details.text ?? "Uncaught exception");
|
|
249
|
-
const callFrames = details.
|
|
434
|
+
const callFrames = details.callFrames;
|
|
250
435
|
const frames = callFrames.map((frame) => ({ location: locationFromCallFrame(frame), raw: `${frame.functionName ?? "<anonymous>"} (${frame.url ?? ""}:${String(frame.lineNumber)}:${String(frame.columnNumber)})` }));
|
|
251
436
|
// no frames from CDP: fall back to the throw site itself as a synthetic
|
|
252
437
|
// one-frame trace rather than discarding it
|
|
@@ -278,12 +463,22 @@ export function attachToRunningNodeProcess(options) {
|
|
|
278
463
|
return { available: true };
|
|
279
464
|
},
|
|
280
465
|
stop() {
|
|
466
|
+
stopped = true;
|
|
281
467
|
session?.close();
|
|
282
468
|
session = null;
|
|
283
469
|
return Promise.resolve();
|
|
284
470
|
},
|
|
285
471
|
capabilities() {
|
|
286
|
-
|
|
472
|
+
if (inspectorLeftOpen === null)
|
|
473
|
+
return CAPABILITIES;
|
|
474
|
+
return {
|
|
475
|
+
...CAPABILITIES,
|
|
476
|
+
backendLogAccess: {
|
|
477
|
+
availability: "available",
|
|
478
|
+
reason: `the target's inspector, switched on with SIGUSR1 to attach, keeps listening on ${inspectorLeftOpen} after this run: ` +
|
|
479
|
+
"attach mode runs no code in the target, so it cannot switch it off. Restart the process to close it.",
|
|
480
|
+
},
|
|
481
|
+
};
|
|
287
482
|
},
|
|
288
483
|
};
|
|
289
484
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attach-to-running-node-process.js","sourceRoot":"","sources":["../src/attach-to-running-node-process.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAI/C,OAAO,EAAE,UAAU,EAAmB,MAAM,iBAAiB,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D;;;;;;;;;;;;GAYG;AACH,SAAS,kCAAkC,CAAC,GAAW;IACrD,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;IAC9F,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;IACjE,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;QAC7D,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,wBAAwB,MAAM,CAAC,GAAG,CAAC,iCAAiC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,6EAA6E,EAAE,CAAC;IACvM,CAAC;IACD,MAAM,CAAC,QAAQ,EAAE,GAAG,UAAU,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACpD,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC7B,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;IAChD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;IAClC,IAAI,MAAM,KAAK,SAAS,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;QAC3C,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,MAAM,CAAC,GAAG,CAAC,oBAAoB,MAAM,CAAC,GAAG,CAAC,gCAAgC,MAAM,CAAC,MAAM,CAAC,2DAA2D,EAAE,CAAC;IAC3L,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,MAAM,CAAC,GAAG,CAAC,kBAAkB,IAAI,2GAA2G,EAAE,CAAC;IACpL,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;AACtB,CAAC;AAoBD;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,GAAW,EACX,UAA2F,EAAE;IAE7F,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,iCAAiC,MAAM,CAAC,GAAG,CAAC,kEAAkE,CAAC,CAAC;IAClI,CAAC;IACD,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CAAC,+FAA+F,CAAC,CAAC;IACnH,CAAC;IAED,gFAAgF;IAChF,MAAM,QAAQ,GAAG,kCAAkC,CAAC,GAAG,CAAC,CAAC;IACzD,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,6BAA6B,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;IACnE,CAAC;IAED,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,WAAW,CAAC;IACzC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC;IAClC,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC;IAC5C,MAAM,YAAY,GAAG,UAAU,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;IAE3D,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IAE7B,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;IACxC,IAAI,SAAS,GAAY,IAAI,CAAC;IAC9B,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;QAC7B,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,iCAAiC,MAAM,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC;QACrH,CAAC;QACD,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,YAAY,CAAC,CAAC;YAC3C,IAAI,QAAQ,CAAC,EAAE,EAAE,CAAC;gBAChB,MAAM,OAAO,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAsB,CAAC;gBAC7D,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,oBAAoB,KAAK,SAAS,CAAC,CAAC;gBACzF,IAAI,MAAM,EAAE,oBAAoB,KAAK,SAAS;oBAAE,OAAO,MAAM,CAAC,oBAAoB,CAAC;YACrF,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,SAAS,GAAG,KAAK,CAAC;QACpB,CAAC;QACD,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;IAC1D,CAAC;IAED,MAAM,MAAM,GAAG,SAAS,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC1E,MAAM,IAAI,KAAK,CACb,sDAAsD,YAAY,WAAW,MAAM,CAAC,SAAS,CAAC,mBAAmB,MAAM,IAAI;QACzH,oHAAoH;QACpH,iHAAiH;QACjH,4FAA4F,CAC/F,CAAC;AACJ,CAAC;AAeD,+IAA+I;AAC/I,SAAS,cAAc,CAAC,GAAuB;IAC7C,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,EAAE;QAAE,OAAO,IAAI,CAAC;IACjD,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC;QAAE,OAAO,GAAG,CAAC;IAC3C,IAAI,CAAC;QACH,OAAO,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,GAAG,CAAC;IACb,CAAC;AACH,CAAC;AAED,mGAAmG;AACnG,SAAS,qBAAqB,CAAC,KAAmB;IAChD,OAAO;QACL,IAAI,EAAE,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC;QAC/B,IAAI,EAAE,OAAO,KAAK,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI;QACxE,MAAM,EAAE,OAAO,KAAK,CAAC,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI;QAC9E,YAAY,EAAE,KAAK,CAAC,YAAY,KAAK,SAAS,IAAI,KAAK,CAAC,YAAY,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI;QACvG,mFAAmF;QACnF,WAAW,EAAE,gBAAgB;QAC7B,WAAW,EAAE,IAAI;KAClB,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAgC;IACzD,OAAO,IAAI;SACR,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;QACX,IAAI,GAAG,CAAC,KAAK,KAAK,SAAS;YAAE,OAAO,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC1G,IAAI,GAAG,CAAC,WAAW,KAAK,SAAS;YAAE,OAAO,GAAG,CAAC,WAAW,CAAC;QAC1D,OAAO,IAAI,GAAG,CAAC,IAAI,IAAI,SAAS,GAAG,CAAC;IACtC,CAAC,CAAC;SACD,IAAI,CAAC,GAAG,CAAC,CAAC;AACf,CAAC;AAED,SAAS,oBAAoB,CAAC,IAAY;IACxC,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,EAAE,uGAAuG,IAAI,GAAG,EAAE,CAAC;AACjK,CAAC;AAED,MAAM,YAAY,GAA0B;IAC1C,cAAc,EAAE,oBAAoB,CAAC,gBAAgB,CAAC;IACtD,+EAA+E;IAC/E,oEAAoE;IACpE,kBAAkB,EAAE,oBAAoB,CAAC,0BAA0B,CAAC;IACpE,kBAAkB,EAAE,oBAAoB,CAAC,iBAAiB,CAAC;IAC3D,gBAAgB,EAAE,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE;IAC7D,gBAAgB,EAAE,oBAAoB,CAAC,0FAA0F,CAAC;IAClI,gFAAgF;IAChF,2EAA2E;IAC3E,aAAa,EAAE,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE;IAC1D,YAAY,EAAE,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE;IACzD,gBAAgB,EAAE,oBAAoB,CAAC,wEAAwE,CAAC;IAChH,mBAAmB,EAAE,oBAAoB,CAAC,kBAAkB,CAAC;IAC7D,0BAA0B,EAAE,oBAAoB,CAAC,4BAA4B,CAAC;CAC/E,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,0BAA0B,CAAC,OAA0C;IACnF,IAAI,OAAO,GAAsB,IAAI,CAAC;IAEtC,OAAO;QACL,WAAW,EAAE,yBAAyB,OAAO,CAAC,SAAS,EAAE;QAEzD,KAAK,CAAC,KAAK,CAAC,OAAyB;YACnC,IAAI,oBAA4B,CAAC;YACjC,IAAI,CAAC;gBACH,oBAAoB,GAAG,MAAM,wBAAwB,CAAC,OAAO,CAAC,GAAG,EAAE;oBACjE,GAAG,CAAC,OAAO,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC/E,GAAG,CAAC,OAAO,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC/E,GAAG,CAAC,OAAO,CAAC,kBAAkB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAC/F,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9F,CAAC;YAED,IAAI,CAAC;gBACH,OAAO,GAAG,MAAM,UAAU,CAAC,oBAAoB,CAAC,CAAC;YACnD,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO;oBACL,SAAS,EAAE,KAAK;oBAChB,MAAM,EAAE,8FAA8F,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;iBAC/J,CAAC;YACJ,CAAC;YAED,MAAM,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YAErC,OAAO,CAAC,EAAE,CAAC,0BAA0B,EAAE,CAAC,MAAM,EAAE,EAAE;gBAChD,MAAM,CAAC,GAAG,MAAyE,CAAC;gBACpF,OAAO,CAAC,IAAI,CAAC;oBACX,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;oBACnC,MAAM,EAAE,iBAAiB;oBACzB,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,IAAI;oBAChC,OAAO,EAAE,OAAO,CAAC,SAAS;oBAC1B,SAAS,EAAE,iBAAiB;oBAC5B,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,IAAI,KAAK,EAAE,IAAI,EAAE,iBAAiB,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE;oBAC1E,OAAO,EAAE,IAAI;oBACb,SAAS,EAAE,IAAI;oBACf,aAAa,EAAE,IAAI;oBACnB,WAAW,EAAE,IAAI;oBACjB,cAAc,EAAE,IAAI;oBACpB,UAAU,EAAE,IAAI;oBAChB,UAAU,EAAE,CAAC;oBACb,eAAe,EAAE,mBAAmB;oBACpC,gBAAgB,EAAE,iBAAiB;iBACpC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,OAAO,CAAC,EAAE,CAAC,yBAAyB,EAAE,CAAC,MAAM,EAAE,EAAE;gBAC/C,MAAM,CAAC,GAAG,MAST,CAAC;gBACF,MAAM,OAAO,GAAG,CAAC,CAAC,gBAAgB,IAAI,EAAE,CAAC;gBACzC,MAAM,WAAW,GAAG,OAAO,CAAC,SAAS,EAAE,WAAW,CAAC;gBACnD,MAAM,OAAO,GACX,WAAW,KAAK,SAAS;oBACvB,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC;oBAC7C,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,KAAK,SAAS;wBACtC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC;wBACjC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,IAAI,oBAAoB,CAAC,CAAC;gBAE/C,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,EAAE,UAAU,IAAI,EAAE,CAAC;gBACxD,MAAM,MAAM,GAAiB,UAAU,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,qBAAqB,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC,YAAY,IAAI,aAAa,KAAK,KAAK,CAAC,GAAG,IAAI,EAAE,IAAI,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;gBACnO,wEAAwE;gBACxE,4CAA4C;gBAC5C,MAAM,UAAU,GACd,MAAM,CAAC,MAAM,GAAG,CAAC;oBACf,CAAC,CAAC,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC,EAAE;oBAC3D,CAAC,CAAC;wBACE,QAAQ,EAAE,aAAa;wBACvB,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,qBAAqB,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE,CAAC,EAAE,GAAG,EAAE,WAAW,IAAI,OAAO,EAAE,CAAC;wBACpK,iBAAiB,EAAE,CAAC;qBACrB,CAAC;gBAER,OAAO,CAAC,IAAI,CAAC;oBACX,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;oBACnC,MAAM,EAAE,iBAAiB;oBACzB,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,IAAI;oBAChC,OAAO,EAAE,OAAO,CAAC,SAAS;oBAC1B,SAAS,EAAE,WAAW;oBACtB,OAAO,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,IAAI,IAAI,EAAE;oBAChD,OAAO,EAAE,IAAI;oBACb,SAAS,EAAE,IAAI;oBACf,aAAa,EAAE,IAAI;oBACnB,WAAW,EAAE,IAAI;oBACjB,cAAc,EAAE,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,iBAAiB,CAAC,EAAE,QAAQ,IAAI,IAAI;oBACjF,UAAU;oBACV,UAAU,EAAE,CAAC;oBACb,eAAe,EAAE,mBAAmB;oBACpC,gBAAgB,EAAE,iBAAiB;iBACpC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;QAC7B,CAAC;QAED,IAAI;YACF,OAAO,EAAE,KAAK,EAAE,CAAC;YACjB,OAAO,GAAG,IAAI,CAAC;YACf,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;QAC3B,CAAC;QAED,YAAY;YACV,OAAO,YAAY,CAAC;QACtB,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"attach-to-running-node-process.js","sourceRoot":"","sources":["../src/attach-to-running-node-process.ts"],"names":[],"mappings":"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"}
|
|
@@ -41,6 +41,8 @@ export interface AttachToRunningProcessOptions {
|
|
|
41
41
|
*/
|
|
42
42
|
readonly stopObserving: () => boolean;
|
|
43
43
|
readonly pollIntervalMs?: number;
|
|
44
|
+
/** Most bytes of the log's existing backlog read at attach; an older span is skipped and disclosed as a gap. Defaults to `DEFAULT_ATTACH_LOG_BACKLOG_CAP_BYTES`. */
|
|
45
|
+
readonly maxBacklogBytes?: number;
|
|
44
46
|
}
|
|
45
47
|
/**
|
|
46
48
|
* `process.kill(pid, 0)` sends no signal — it only asks the kernel whether
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attach-to-running-process.d.ts","sourceRoot":"","sources":["../src/attach-to-running-process.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;
|
|
1
|
+
{"version":3,"file":"attach-to-running-process.d.ts","sourceRoot":"","sources":["../src/attach-to-running-process.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAKH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAChF,OAAO,EAKL,KAAK,WAAW,EAEjB,MAAM,6BAA6B,CAAC;AAIrC,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,2HAA2H;IAC3H,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,2LAA2L;IAC3L,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B;;;;OAIG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC;;;;;;;OAOG;IACH,QAAQ,CAAC,aAAa,EAAE,MAAM,OAAO,CAAC;IACtC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,oKAAoK;IACpK,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;CACnC;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAQnD;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,2BAA4B,SAAQ,mBAAmB;IACtE,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;CACnC;AAuDD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,6BAA6B,GAAG,2BAA2B,CAmC1G"}
|
|
@@ -17,8 +17,9 @@
|
|
|
17
17
|
* with this pid exists, not that it's the one the caller thinks — pids are reused.
|
|
18
18
|
* Disclosed, not solved, same as `readiness.ts`.
|
|
19
19
|
*/
|
|
20
|
-
import {
|
|
21
|
-
import {
|
|
20
|
+
import { closeSync, readSync } from "node:fs";
|
|
21
|
+
import { StringDecoder } from "node:string_decoder";
|
|
22
|
+
import { assertTargetPid, computeAttachFence, openAttachLogFile, resolveAttachLogPath, } from "@descryy/runtime-controller";
|
|
22
23
|
import { createPollingProcessOutputSource } from "./polling-output-source.js";
|
|
23
24
|
/**
|
|
24
25
|
* `process.kill(pid, 0)` sends no signal — it only asks the kernel whether
|
|
@@ -27,6 +28,8 @@ import { createPollingProcessOutputSource } from "./polling-output-source.js";
|
|
|
27
28
|
* purpose. Any other error is treated as "exists" rather than guessed away.
|
|
28
29
|
*/
|
|
29
30
|
export function isProcessAlive(pid) {
|
|
31
|
+
if (!Number.isSafeInteger(pid) || pid <= 0)
|
|
32
|
+
return false;
|
|
30
33
|
try {
|
|
31
34
|
process.kill(pid, 0);
|
|
32
35
|
return true;
|
|
@@ -35,6 +38,51 @@ export function isProcessAlive(pid) {
|
|
|
35
38
|
return error.code === "EPERM";
|
|
36
39
|
}
|
|
37
40
|
}
|
|
41
|
+
const READ_CHUNK_BYTES = 1024 * 1024;
|
|
42
|
+
const MAX_BYTES_PER_POLL = 4 * 1024 * 1024;
|
|
43
|
+
function createIncrementalLogReader(input) {
|
|
44
|
+
let fileOffset = input.startOffset;
|
|
45
|
+
let unreportedSkippedBytes = input.skippedBacklogBytes;
|
|
46
|
+
let fileIdentity = null;
|
|
47
|
+
let consumedChars = 0;
|
|
48
|
+
let chunk = null;
|
|
49
|
+
const decoder = new StringDecoder("utf8");
|
|
50
|
+
return (cursor) => {
|
|
51
|
+
if (cursor !== consumedChars) {
|
|
52
|
+
throw new RangeError(`attachToRunningProcess: asked to continue from character ${String(cursor)} but ${String(consumedChars)} have been consumed`);
|
|
53
|
+
}
|
|
54
|
+
const opened = openAttachLogFile(input.logFilePath);
|
|
55
|
+
if (!opened.ok) {
|
|
56
|
+
throw new Error(`attachToRunningProcess: could not read log file "${input.logFilePath}" for pid ${String(input.pid)}: ${opened.reason}`);
|
|
57
|
+
}
|
|
58
|
+
try {
|
|
59
|
+
const replaced = fileIdentity !== null && opened.inode !== fileIdentity;
|
|
60
|
+
if (opened.size < fileOffset || (replaced && fileOffset > 0)) {
|
|
61
|
+
throw new Error(`attachToRunningProcess: log file "${input.logFilePath}" for pid ${String(input.pid)} shrank from ${String(fileOffset)} to ${String(opened.size)} bytes ` +
|
|
62
|
+
"between reads -- this looks like log rotation or truncation, not new output. This source slices forward from a consumed offset and cannot " +
|
|
63
|
+
"reconstruct a truncated or rotated file without either duplicating or dropping lines. Reported rather than guessed.");
|
|
64
|
+
}
|
|
65
|
+
fileIdentity = opened.inode;
|
|
66
|
+
chunk ??= Buffer.allocUnsafe(READ_CHUNK_BYTES);
|
|
67
|
+
const limit = Math.min(opened.size, fileOffset + MAX_BYTES_PER_POLL);
|
|
68
|
+
let text = "";
|
|
69
|
+
while (fileOffset < limit) {
|
|
70
|
+
const read = readSync(opened.descriptor, chunk, 0, Math.min(chunk.length, limit - fileOffset), fileOffset);
|
|
71
|
+
if (read === 0)
|
|
72
|
+
break;
|
|
73
|
+
fileOffset += read;
|
|
74
|
+
text += decoder.write(chunk.subarray(0, read));
|
|
75
|
+
}
|
|
76
|
+
consumedChars += text.length;
|
|
77
|
+
const droppedChars = unreportedSkippedBytes;
|
|
78
|
+
unreportedSkippedBytes = 0;
|
|
79
|
+
return { text, cursor: consumedChars, droppedChars };
|
|
80
|
+
}
|
|
81
|
+
finally {
|
|
82
|
+
closeSync(opened.descriptor);
|
|
83
|
+
}
|
|
84
|
+
};
|
|
85
|
+
}
|
|
38
86
|
/**
|
|
39
87
|
* Attach to an already-running process via a log file it is already writing to.
|
|
40
88
|
* Throws immediately if the pid isn't alive — refuses rather than returning a
|
|
@@ -55,24 +103,26 @@ export function isProcessAlive(pid) {
|
|
|
55
103
|
* forever, or a dead one polls until the caller notices.
|
|
56
104
|
*/
|
|
57
105
|
export function attachToRunningProcess(options) {
|
|
106
|
+
assertTargetPid(options.pid, { allowOwnProcess: true });
|
|
58
107
|
if (!isProcessAlive(options.pid)) {
|
|
59
108
|
throw new Error(`attachToRunningProcess: pid ${options.pid} for "${options.processId}" is not running — attach requires ` +
|
|
60
109
|
`a target that already exists. Use ExecutionController.run() to spawn a new process instead.`);
|
|
61
110
|
}
|
|
62
|
-
const
|
|
111
|
+
const resolution = resolveAttachLogPath(options.logFilePath);
|
|
112
|
+
if (!resolution.ok) {
|
|
113
|
+
throw new Error(`attachToRunningProcess: log file refused for "${options.processId}": ${resolution.reason}`);
|
|
114
|
+
}
|
|
115
|
+
const attachFence = computeAttachFence(options.pid, options.logFilePath, process.platform, options.maxBacklogBytes);
|
|
63
116
|
const source = createPollingProcessOutputSource({
|
|
64
117
|
processId: options.processId,
|
|
65
118
|
// an ad-hoc attach may have no declared service; null is the honest answer
|
|
66
119
|
serviceName: options.serviceName ?? null,
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
throw new Error(`attachToRunningProcess: could not read log file "${options.logFilePath}" for pid ${options.pid}: ${detail}`);
|
|
74
|
-
}
|
|
75
|
-
},
|
|
120
|
+
readOutputFrom: createIncrementalLogReader({
|
|
121
|
+
logFilePath: options.logFilePath,
|
|
122
|
+
pid: options.pid,
|
|
123
|
+
startOffset: attachFence.backlogStartOffset,
|
|
124
|
+
skippedBacklogBytes: attachFence.backlogSkippedBytes,
|
|
125
|
+
}),
|
|
76
126
|
// either reason ends the source; dropping the liveness half would leave a
|
|
77
127
|
// target that dies mid-window polled until the caller noticed
|
|
78
128
|
isFinished: () => options.stopObserving() || !isProcessAlive(options.pid),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attach-to-running-process.js","sourceRoot":"","sources":["../src/attach-to-running-process.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"attach-to-running-process.js","sourceRoot":"","sources":["../src/attach-to-running-process.ts"],"names":[],"mappings":"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"}
|
package/dist/cdp-client.d.ts
CHANGED
|
@@ -19,9 +19,15 @@ export interface CdpSession {
|
|
|
19
19
|
/** Closes the underlying WebSocket. Idempotent. Rejects every still-pending `send()`. */
|
|
20
20
|
close(): void;
|
|
21
21
|
}
|
|
22
|
+
export interface CdpConnectOptions {
|
|
23
|
+
readonly connectTimeoutMs?: number;
|
|
24
|
+
readonly commandTimeoutMs?: number;
|
|
25
|
+
readonly onHandlerError?: (method: string, error: unknown) => void;
|
|
26
|
+
readonly maxEventsPerSession?: number;
|
|
27
|
+
}
|
|
22
28
|
/**
|
|
23
29
|
* Resolves once the socket is open, or rejects if it errors/closes first —
|
|
24
30
|
* so a caller never has to race `open` against `error` itself.
|
|
25
31
|
*/
|
|
26
|
-
export declare function connectCdp(webSocketUrl: string): Promise<CdpSession>;
|
|
32
|
+
export declare function connectCdp(webSocketUrl: string, options?: CdpConnectOptions): Promise<CdpSession>;
|
|
27
33
|
//# sourceMappingURL=cdp-client.d.ts.map
|
package/dist/cdp-client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cdp-client.d.ts","sourceRoot":"","sources":["../src/cdp-client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,MAAM,WAAW,UAAU;IACzB,gKAAgK;IAChK,IAAI,CAAC,CAAC,GAAG,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAChF,qHAAqH;IACrH,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IACnF,yFAAyF;IACzF,KAAK,IAAI,IAAI,CAAC;CACf;AAOD;;;GAGG;AACH,wBAAgB,UAAU,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,
|
|
1
|
+
{"version":3,"file":"cdp-client.d.ts","sourceRoot":"","sources":["../src/cdp-client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,MAAM,WAAW,UAAU;IACzB,gKAAgK;IAChK,IAAI,CAAC,CAAC,GAAG,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAChF,qHAAqH;IACrH,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IACnF,yFAAyF;IACzF,KAAK,IAAI,IAAI,CAAC;CACf;AAQD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACnE,QAAQ,CAAC,mBAAmB,CAAC,EAAE,MAAM,CAAC;CACvC;AAOD;;;GAGG;AACH,wBAAgB,UAAU,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,GAAE,iBAAsB,GAAG,OAAO,CAAC,UAAU,CAAC,CA+IrG"}
|