@ironbee-ai/cli 0.5.3 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +6 -0
- package/dist/clients/claude/hooks/require-verification.d.ts.map +1 -1
- package/dist/clients/claude/hooks/require-verification.js +21 -2
- package/dist/clients/claude/hooks/require-verification.js.map +1 -1
- package/dist/clients/claude/hooks/session-end.d.ts.map +1 -1
- package/dist/clients/claude/hooks/session-end.js +4 -0
- package/dist/clients/claude/hooks/session-end.js.map +1 -1
- package/dist/clients/claude/hooks/session-start.d.ts.map +1 -1
- package/dist/clients/claude/hooks/session-start.js +6 -1
- package/dist/clients/claude/hooks/session-start.js.map +1 -1
- package/dist/clients/claude/hooks/track-action.d.ts +25 -4
- package/dist/clients/claude/hooks/track-action.d.ts.map +1 -1
- package/dist/clients/claude/hooks/track-action.js +145 -25
- package/dist/clients/claude/hooks/track-action.js.map +1 -1
- package/dist/clients/claude/hooks/verify-gate.d.ts.map +1 -1
- package/dist/clients/claude/hooks/verify-gate.js +5 -0
- package/dist/clients/claude/hooks/verify-gate.js.map +1 -1
- package/dist/clients/claude/index.d.ts.map +1 -1
- package/dist/clients/claude/index.js +18 -1
- package/dist/clients/claude/index.js.map +1 -1
- package/dist/clients/claude/util.d.ts +74 -0
- package/dist/clients/claude/util.d.ts.map +1 -0
- package/dist/clients/claude/util.js +352 -0
- package/dist/clients/claude/util.js.map +1 -0
- package/dist/clients/cursor/hooks/require-verification.d.ts.map +1 -1
- package/dist/clients/cursor/hooks/require-verification.js +18 -2
- package/dist/clients/cursor/hooks/require-verification.js.map +1 -1
- package/dist/clients/cursor/hooks/session-end.d.ts.map +1 -1
- package/dist/clients/cursor/hooks/session-end.js +4 -0
- package/dist/clients/cursor/hooks/session-end.js.map +1 -1
- package/dist/clients/cursor/hooks/session-start.d.ts.map +1 -1
- package/dist/clients/cursor/hooks/session-start.js +4 -1
- package/dist/clients/cursor/hooks/session-start.js.map +1 -1
- package/dist/clients/cursor/hooks/track-action.d.ts +30 -8
- package/dist/clients/cursor/hooks/track-action.d.ts.map +1 -1
- package/dist/clients/cursor/hooks/track-action.js +179 -52
- package/dist/clients/cursor/hooks/track-action.js.map +1 -1
- package/dist/clients/cursor/hooks/verify-gate.d.ts.map +1 -1
- package/dist/clients/cursor/hooks/verify-gate.js +4 -0
- package/dist/clients/cursor/hooks/verify-gate.js.map +1 -1
- package/dist/clients/cursor/index.d.ts.map +1 -1
- package/dist/clients/cursor/index.js +13 -2
- package/dist/clients/cursor/index.js.map +1 -1
- package/dist/clients/cursor/util.d.ts +52 -0
- package/dist/clients/cursor/util.d.ts.map +1 -0
- package/dist/clients/cursor/util.js +264 -0
- package/dist/clients/cursor/util.js.map +1 -0
- package/dist/commands/hook.js +1 -2
- package/dist/commands/hook.js.map +1 -1
- package/dist/commands/process-job-file.d.ts +10 -0
- package/dist/commands/process-job-file.d.ts.map +1 -0
- package/dist/commands/process-job-file.js +19 -0
- package/dist/commands/process-job-file.js.map +1 -0
- package/dist/commands/queue.d.ts +12 -0
- package/dist/commands/queue.d.ts.map +1 -0
- package/dist/commands/queue.js +495 -0
- package/dist/commands/queue.js.map +1 -0
- package/dist/hooks/core/actions.d.ts +73 -2
- package/dist/hooks/core/actions.d.ts.map +1 -1
- package/dist/hooks/core/actions.js +36 -2
- package/dist/hooks/core/actions.js.map +1 -1
- package/dist/hooks/core/session-state.d.ts +13 -0
- package/dist/hooks/core/session-state.d.ts.map +1 -1
- package/dist/hooks/core/session-state.js +21 -0
- package/dist/hooks/core/session-state.js.map +1 -1
- package/dist/hooks/core/verify-gate.d.ts.map +1 -1
- package/dist/hooks/core/verify-gate.js +13 -5
- package/dist/hooks/core/verify-gate.js.map +1 -1
- package/dist/index.js +12 -3
- package/dist/index.js.map +1 -1
- package/dist/lib/collector.d.ts +62 -3
- package/dist/lib/collector.d.ts.map +1 -1
- package/dist/lib/collector.js +107 -35
- package/dist/lib/collector.js.map +1 -1
- package/dist/lib/config.d.ts +72 -8
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +40 -0
- package/dist/lib/config.js.map +1 -1
- package/dist/queue/dead-letter.d.ts +26 -0
- package/dist/queue/dead-letter.d.ts.map +1 -0
- package/dist/queue/dead-letter.js +233 -0
- package/dist/queue/dead-letter.js.map +1 -0
- package/dist/queue/drain.d.ts +36 -0
- package/dist/queue/drain.d.ts.map +1 -0
- package/dist/queue/drain.js +170 -0
- package/dist/queue/drain.js.map +1 -0
- package/dist/queue/flush.d.ts +64 -0
- package/dist/queue/flush.d.ts.map +1 -0
- package/dist/queue/flush.js +119 -0
- package/dist/queue/flush.js.map +1 -0
- package/dist/queue/handlers/send-event.d.ts +23 -0
- package/dist/queue/handlers/send-event.d.ts.map +1 -0
- package/dist/queue/handlers/send-event.js +131 -0
- package/dist/queue/handlers/send-event.js.map +1 -0
- package/dist/queue/index.d.ts +30 -0
- package/dist/queue/index.d.ts.map +1 -0
- package/dist/queue/index.js +71 -0
- package/dist/queue/index.js.map +1 -0
- package/dist/queue/paths.d.ts +40 -0
- package/dist/queue/paths.d.ts.map +1 -0
- package/dist/queue/paths.js +107 -0
- package/dist/queue/paths.js.map +1 -0
- package/dist/queue/process-file.d.ts +22 -0
- package/dist/queue/process-file.d.ts.map +1 -0
- package/dist/queue/process-file.js +257 -0
- package/dist/queue/process-file.js.map +1 -0
- package/dist/queue/register-handlers.d.ts +26 -0
- package/dist/queue/register-handlers.d.ts.map +1 -0
- package/dist/queue/register-handlers.js +36 -0
- package/dist/queue/register-handlers.js.map +1 -0
- package/dist/queue/registry.d.ts +42 -0
- package/dist/queue/registry.d.ts.map +1 -0
- package/dist/queue/registry.js +36 -0
- package/dist/queue/registry.js.map +1 -0
- package/dist/queue/snapshot.d.ts +16 -0
- package/dist/queue/snapshot.d.ts.map +1 -0
- package/dist/queue/snapshot.js +39 -0
- package/dist/queue/snapshot.js.map +1 -0
- package/dist/queue/spawn.d.ts +15 -0
- package/dist/queue/spawn.d.ts.map +1 -0
- package/dist/queue/spawn.js +45 -0
- package/dist/queue/spawn.js.map +1 -0
- package/dist/queue/submit.d.ts +19 -0
- package/dist/queue/submit.d.ts.map +1 -0
- package/dist/queue/submit.js +94 -0
- package/dist/queue/submit.js.map +1 -0
- package/dist/queue/types.d.ts +77 -0
- package/dist/queue/types.d.ts.map +1 -0
- package/dist/queue/types.js +83 -0
- package/dist/queue/types.js.map +1 -0
- package/dist/queue/worker-log.d.ts +21 -0
- package/dist/queue/worker-log.d.ts.map +1 -0
- package/dist/queue/worker-log.js +140 -0
- package/dist/queue/worker-log.js.map +1 -0
- package/package.json +1 -1
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
*/
|
|
8
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
9
|
exports.EventType = void 0;
|
|
10
|
+
exports.resolveProjectName = resolveProjectName;
|
|
10
11
|
exports.baseFields = baseFields;
|
|
11
12
|
exports.appendAction = appendAction;
|
|
12
13
|
exports.findDurationSinceLastAction = findDurationSinceLastAction;
|
|
@@ -39,19 +40,52 @@ exports.EventType = {
|
|
|
39
40
|
FILE_EDIT: "file_edit",
|
|
40
41
|
TOOL_CALL: "tool_call",
|
|
41
42
|
};
|
|
43
|
+
/**
|
|
44
|
+
* Resolve project name by walking up from the given directory looking for a
|
|
45
|
+
* `.git` entry (directory or file — the latter covers worktrees). If a git
|
|
46
|
+
* root is found, its basename becomes the project name. Otherwise falls back
|
|
47
|
+
* to the basename of the starting directory.
|
|
48
|
+
*/
|
|
49
|
+
function resolveProjectName(startDir) {
|
|
50
|
+
let current = startDir;
|
|
51
|
+
while (true) {
|
|
52
|
+
if ((0, fs_1.existsSync)((0, path_1.join)(current, ".git"))) {
|
|
53
|
+
return (0, path_1.basename)(current);
|
|
54
|
+
}
|
|
55
|
+
const parent = (0, path_1.dirname)(current);
|
|
56
|
+
if (parent === current) {
|
|
57
|
+
break;
|
|
58
|
+
}
|
|
59
|
+
current = parent;
|
|
60
|
+
}
|
|
61
|
+
return (0, path_1.basename)(startDir);
|
|
62
|
+
}
|
|
42
63
|
/**
|
|
43
64
|
* Base fields that every event must carry — derived from the actionsFile path.
|
|
44
65
|
* Writers spread this into concrete event constructions to satisfy the strict
|
|
45
66
|
* `ActionEntry` contract without duplicating derivation logic.
|
|
67
|
+
*
|
|
68
|
+
* `user_email` is read from the per-session `state.json` (populated once at
|
|
69
|
+
* session start). If state.json is absent or the field is unset, it is
|
|
70
|
+
* omitted from the returned object so JSON.stringify drops it downstream.
|
|
46
71
|
*/
|
|
47
72
|
function baseFields(actionsFile) {
|
|
48
73
|
const sessionId = (0, path_1.basename)((0, path_1.dirname)(actionsFile));
|
|
49
74
|
const projectDir = (0, path_1.dirname)((0, path_1.dirname)((0, path_1.dirname)((0, path_1.dirname)(actionsFile))));
|
|
50
|
-
|
|
75
|
+
const sessionDir = (0, path_1.dirname)(actionsFile);
|
|
76
|
+
// Local require to avoid a circular import between actions.ts and
|
|
77
|
+
// session-state.ts (which imports several action types).
|
|
78
|
+
const { getUserEmail } = require("./session-state");
|
|
79
|
+
const userEmail = getUserEmail(sessionDir);
|
|
80
|
+
const out = {
|
|
51
81
|
id: (0, crypto_1.randomUUID)(),
|
|
52
82
|
session_id: sessionId,
|
|
53
|
-
project_name: (
|
|
83
|
+
project_name: resolveProjectName(projectDir),
|
|
54
84
|
};
|
|
85
|
+
if (userEmail) {
|
|
86
|
+
out.user_email = userEmail;
|
|
87
|
+
}
|
|
88
|
+
return out;
|
|
55
89
|
}
|
|
56
90
|
async function appendAction(actionsFile, entry) {
|
|
57
91
|
// Safety net: enrich base fields from path if caller left any blank.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"actions.js","sourceRoot":"","sources":["../../../src/hooks/core/actions.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;
|
|
1
|
+
{"version":3,"file":"actions.js","sourceRoot":"","sources":["../../../src/hooks/core/actions.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,6 +18,13 @@ export interface SessionState {
|
|
|
18
18
|
recordingRequired: boolean;
|
|
19
19
|
recordingActive: boolean;
|
|
20
20
|
active: boolean;
|
|
21
|
+
/**
|
|
22
|
+
* Authenticated user email, resolved once at session start and attached
|
|
23
|
+
* to every action/event via `baseFields()`. Cached here so hooks avoid
|
|
24
|
+
* re-reading `~/.claude.json` / stdin on every invocation.
|
|
25
|
+
* `null` = unauthenticated session or lookup failed.
|
|
26
|
+
*/
|
|
27
|
+
userEmail: string | null;
|
|
21
28
|
}
|
|
22
29
|
/** Generate an OTEL-compatible trace ID (32 hex chars / 16 bytes). */
|
|
23
30
|
export declare function generateTraceId(): string;
|
|
@@ -44,6 +51,12 @@ export declare function setRecordingActive(sessionDir: string, active: boolean):
|
|
|
44
51
|
export declare function isActive(sessionDir: string): boolean;
|
|
45
52
|
export declare function setActive(sessionDir: string, active: boolean): void;
|
|
46
53
|
export declare function getActiveActivityId(sessionDir: string): string | undefined;
|
|
54
|
+
export declare function getUserEmail(sessionDir: string): string | undefined;
|
|
55
|
+
/**
|
|
56
|
+
* Persist the authenticated user email into state.json. Idempotent — writing
|
|
57
|
+
* the same value twice is a no-op write. `null` / empty clears the field.
|
|
58
|
+
*/
|
|
59
|
+
export declare function setUserEmail(sessionDir: string, email: string | null | undefined): void;
|
|
47
60
|
export declare function setActiveActivity(sessionDir: string, activityId: string): void;
|
|
48
61
|
export declare function clearActiveActivity(sessionDir: string): void;
|
|
49
62
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-state.d.ts","sourceRoot":"","sources":["../../../src/hooks/core/session-state.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,OAAO,EACH,WAAW,EAKd,MAAM,WAAW,CAAC;AAEnB,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,WAAW,GAAG,QAAQ,GAAG,IAAI,CAAC;AAEpE,MAAM,WAAW,YAAY;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,KAAK,EAAE,YAAY,CAAC;IACpB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,eAAe,EAAE,OAAO,CAAC;IACzB,MAAM,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"session-state.d.ts","sourceRoot":"","sources":["../../../src/hooks/core/session-state.ts"],"names":[],"mappings":"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"}
|
|
@@ -31,6 +31,8 @@ exports.setRecordingActive = setRecordingActive;
|
|
|
31
31
|
exports.isActive = isActive;
|
|
32
32
|
exports.setActive = setActive;
|
|
33
33
|
exports.getActiveActivityId = getActiveActivityId;
|
|
34
|
+
exports.getUserEmail = getUserEmail;
|
|
35
|
+
exports.setUserEmail = setUserEmail;
|
|
34
36
|
exports.setActiveActivity = setActiveActivity;
|
|
35
37
|
exports.clearActiveActivity = clearActiveActivity;
|
|
36
38
|
exports.reconcileSessionState = reconcileSessionState;
|
|
@@ -51,6 +53,7 @@ const DEFAULT_STATE = {
|
|
|
51
53
|
recordingRequired: false,
|
|
52
54
|
recordingActive: false,
|
|
53
55
|
active: false,
|
|
56
|
+
userEmail: null,
|
|
54
57
|
};
|
|
55
58
|
/** Generate an OTEL-compatible trace ID (32 hex chars / 16 bytes). */
|
|
56
59
|
function generateTraceId() {
|
|
@@ -76,6 +79,7 @@ function readState(sessionDir) {
|
|
|
76
79
|
recordingRequired: typeof parsed.recordingRequired === "boolean" ? parsed.recordingRequired : false,
|
|
77
80
|
recordingActive: typeof parsed.recordingActive === "boolean" ? parsed.recordingActive : false,
|
|
78
81
|
active: typeof parsed.active === "boolean" ? parsed.active : false,
|
|
82
|
+
userEmail: typeof parsed.userEmail === "string" ? parsed.userEmail : null,
|
|
79
83
|
};
|
|
80
84
|
}
|
|
81
85
|
catch (e) {
|
|
@@ -196,6 +200,23 @@ function getActiveActivityId(sessionDir) {
|
|
|
196
200
|
const state = readState(sessionDir);
|
|
197
201
|
return state.activeActivityId ?? undefined;
|
|
198
202
|
}
|
|
203
|
+
function getUserEmail(sessionDir) {
|
|
204
|
+
const state = readState(sessionDir);
|
|
205
|
+
return state.userEmail ?? undefined;
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Persist the authenticated user email into state.json. Idempotent — writing
|
|
209
|
+
* the same value twice is a no-op write. `null` / empty clears the field.
|
|
210
|
+
*/
|
|
211
|
+
function setUserEmail(sessionDir, email) {
|
|
212
|
+
const normalized = typeof email === "string" && email.length > 0 ? email : null;
|
|
213
|
+
const state = readState(sessionDir);
|
|
214
|
+
if (state.userEmail === normalized) {
|
|
215
|
+
return;
|
|
216
|
+
}
|
|
217
|
+
state.userEmail = normalized;
|
|
218
|
+
writeState(sessionDir, state);
|
|
219
|
+
}
|
|
199
220
|
function setActiveActivity(sessionDir, activityId) {
|
|
200
221
|
const state = readState(sessionDir);
|
|
201
222
|
state.activeActivityId = activityId;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-state.js","sourceRoot":"","sources":["../../../src/hooks/core/session-state.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;
|
|
1
|
+
{"version":3,"file":"session-state.js","sourceRoot":"","sources":["../../../src/hooks/core/session-state.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verify-gate.d.ts","sourceRoot":"","sources":["../../../src/hooks/core/verify-gate.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAeH,MAAM,WAAW,eAAe;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,gBAAgB;IAC7B,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;
|
|
1
|
+
{"version":3,"file":"verify-gate.d.ts","sourceRoot":"","sources":["../../../src/hooks/core/verify-gate.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAeH,MAAM,WAAW,eAAe;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,gBAAgB;IAC7B,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAoED,wBAAsB,aAAa,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA8LrF"}
|
|
@@ -37,11 +37,15 @@ function verdictExampleFail(sessionId) {
|
|
|
37
37
|
}
|
|
38
38
|
const MCP_SERVER = "browser-devtools";
|
|
39
39
|
const TOOL_PREFIX = "bdt_";
|
|
40
|
+
/** Required tool names are in the classifier-normalized bare form
|
|
41
|
+
* (post tool-taxonomy migration). Matching against tool_call events now
|
|
42
|
+
* filters by `tool_type === "mcp" && mcp_server === MCP_SERVER` and
|
|
43
|
+
* compares the bare `tool_name`. */
|
|
40
44
|
const REQUIRED_TOOLS = [
|
|
41
|
-
{ toolName:
|
|
42
|
-
{ toolName:
|
|
43
|
-
{ toolName:
|
|
44
|
-
{ toolName:
|
|
45
|
+
{ toolName: `${TOOL_PREFIX}navigation_go-to`, name: `${TOOL_PREFIX}navigation_go-to`, purpose: "navigate to a page" },
|
|
46
|
+
{ toolName: `${TOOL_PREFIX}content_take-screenshot`, name: `${TOOL_PREFIX}content_take-screenshot`, purpose: "take a screenshot" },
|
|
47
|
+
{ toolName: `${TOOL_PREFIX}a11y_take-aria-snapshot`, name: `${TOOL_PREFIX}a11y_take-aria-snapshot`, purpose: "check accessibility/page structure" },
|
|
48
|
+
{ toolName: `${TOOL_PREFIX}o11y_get-console-messages`, name: `${TOOL_PREFIX}o11y_get-console-messages`, purpose: "check console for errors" },
|
|
45
49
|
];
|
|
46
50
|
function cleanup(...files) {
|
|
47
51
|
for (const f of files) {
|
|
@@ -67,8 +71,12 @@ async function runVerifyGate(input) {
|
|
|
67
71
|
return { action: "allow" };
|
|
68
72
|
}
|
|
69
73
|
// ── Check 2: Were required IronBee tools used AFTER the latest code edit? ─
|
|
74
|
+
// Only browser-devtools MCP tool calls count; bare tool_name (post-
|
|
75
|
+
// taxonomy) is compared against REQUIRED_TOOLS.
|
|
70
76
|
const toolCalls = (0, actions_1.getToolCallsSinceLastFileEdit)(actionsFile);
|
|
71
|
-
const usedToolNames = new Set(toolCalls
|
|
77
|
+
const usedToolNames = new Set(toolCalls
|
|
78
|
+
.filter((t) => t.tool_type === "mcp" && t.mcp_server === MCP_SERVER)
|
|
79
|
+
.map((t) => t.tool_name));
|
|
72
80
|
const missingTools = REQUIRED_TOOLS.filter((t) => !usedToolNames.has(t.toolName));
|
|
73
81
|
logger_1.logger.debug(`verify-gate: missingTools=${missingTools.length}/${REQUIRED_TOOLS.length} usedTools=${[...usedToolNames].join(",")}`);
|
|
74
82
|
if (missingTools.length === REQUIRED_TOOLS.length) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verify-gate.js","sourceRoot":"","sources":["../../../src/hooks/core/verify-gate.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;
|
|
1
|
+
{"version":3,"file":"verify-gate.js","sourceRoot":"","sources":["../../../src/hooks/core/verify-gate.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -11,10 +11,17 @@ const hook_1 = require("./commands/hook");
|
|
|
11
11
|
const status_1 = require("./commands/status");
|
|
12
12
|
const verify_1 = require("./commands/verify");
|
|
13
13
|
const analyze_1 = require("./commands/analyze");
|
|
14
|
+
const queue_1 = require("./commands/queue");
|
|
15
|
+
const process_job_file_1 = require("./commands/process-job-file");
|
|
16
|
+
const queue_2 = require("./queue");
|
|
14
17
|
const icon_1 = require("./lib/icon");
|
|
15
18
|
const version_1 = require("./lib/version");
|
|
16
19
|
const output_1 = require("./lib/output");
|
|
17
20
|
const pkg = JSON.parse((0, fs_1.readFileSync)((0, path_1.join)(__dirname, "../package.json"), "utf-8"));
|
|
21
|
+
// Wire queue job-type handlers before any command runs so that `queue drain`,
|
|
22
|
+
// `process-job-file`, and SessionEnd flushSynchronously all see the same
|
|
23
|
+
// fully-populated registry. Empty until a concrete consumer is added.
|
|
24
|
+
(0, queue_2.registerQueueHandlers)();
|
|
18
25
|
const program = new commander_1.Command();
|
|
19
26
|
program
|
|
20
27
|
.name("ironbee")
|
|
@@ -26,9 +33,11 @@ program.addCommand(update_1.updateCommand);
|
|
|
26
33
|
program.addCommand(status_1.statusCommand);
|
|
27
34
|
program.addCommand(verify_1.verifyCommand);
|
|
28
35
|
program.addCommand(analyze_1.analyzeCommand);
|
|
36
|
+
program.addCommand(queue_1.queueCommand);
|
|
37
|
+
program.addCommand(process_job_file_1.processJobFileCommand);
|
|
29
38
|
program.addCommand(hook_1.hookCommand);
|
|
30
|
-
// hook subcommands run in the background — skip banner and update check
|
|
31
|
-
const
|
|
39
|
+
// hook subcommands and the queue worker run in the background — skip banner and update check
|
|
40
|
+
const isBackgroundCommand = process.argv[2] === "hook" || process.argv[2] === "process-job-file";
|
|
32
41
|
if (process.argv.length === 2) {
|
|
33
42
|
(0, icon_1.printBanner)();
|
|
34
43
|
console.log();
|
|
@@ -48,7 +57,7 @@ if (process.argv.length === 2) {
|
|
|
48
57
|
console.log(` ${output_1.pc.dim("Run")} ${output_1.pc.cyan("ironbee <command> --help")} ${output_1.pc.dim("for more info on a command.")}`);
|
|
49
58
|
console.log();
|
|
50
59
|
}
|
|
51
|
-
else if (
|
|
60
|
+
else if (isBackgroundCommand) {
|
|
52
61
|
program.parse(process.argv);
|
|
53
62
|
}
|
|
54
63
|
else {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAEA,yCAAoC;AACpC,2BAAkC;AAClC,+BAA4B;AAC5B,gDAAoD;AACpD,oDAAwD;AACxD,8CAAkD;AAClD,0CAA8C;AAC9C,8CAAkD;AAClD,8CAAkD;AAClD,gDAAoD;AACpD,qCAAyC;AACzC,2CAAiE;AACjE,yCAAkC;AAElC,MAAM,GAAG,GAA6C,IAAI,CAAC,KAAK,CAC5D,IAAA,iBAAY,EAAC,IAAA,WAAI,EAAC,SAAS,EAAE,iBAAiB,CAAC,EAAE,OAAO,CAAC,CAC5D,CAAC;AAEF,MAAM,OAAO,GAAY,IAAI,mBAAO,EAAE,CAAC;AAEvC,OAAO;KACF,IAAI,CAAC,SAAS,CAAC;KACf,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC;KAC5B,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAE1B,OAAO,CAAC,UAAU,CAAC,wBAAc,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,4BAAgB,CAAC,CAAC;AACrC,OAAO,CAAC,UAAU,CAAC,sBAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,sBAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,sBAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,wBAAc,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,kBAAW,CAAC,CAAC;AAEhC,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAEA,yCAAoC;AACpC,2BAAkC;AAClC,+BAA4B;AAC5B,gDAAoD;AACpD,oDAAwD;AACxD,8CAAkD;AAClD,0CAA8C;AAC9C,8CAAkD;AAClD,8CAAkD;AAClD,gDAAoD;AACpD,4CAAgD;AAChD,kEAAoE;AACpE,mCAAgD;AAChD,qCAAyC;AACzC,2CAAiE;AACjE,yCAAkC;AAElC,MAAM,GAAG,GAA6C,IAAI,CAAC,KAAK,CAC5D,IAAA,iBAAY,EAAC,IAAA,WAAI,EAAC,SAAS,EAAE,iBAAiB,CAAC,EAAE,OAAO,CAAC,CAC5D,CAAC;AAEF,8EAA8E;AAC9E,yEAAyE;AACzE,sEAAsE;AACtE,IAAA,6BAAqB,GAAE,CAAC;AAExB,MAAM,OAAO,GAAY,IAAI,mBAAO,EAAE,CAAC;AAEvC,OAAO;KACF,IAAI,CAAC,SAAS,CAAC;KACf,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC;KAC5B,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAE1B,OAAO,CAAC,UAAU,CAAC,wBAAc,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,4BAAgB,CAAC,CAAC;AACrC,OAAO,CAAC,UAAU,CAAC,sBAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,sBAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,sBAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,wBAAc,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,oBAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,wCAAqB,CAAC,CAAC;AAC1C,OAAO,CAAC,UAAU,CAAC,kBAAW,CAAC,CAAC;AAEhC,6FAA6F;AAC7F,MAAM,mBAAmB,GAAY,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,kBAAkB,CAAC;AAE1G,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;IAC5B,IAAA,kBAAW,GAAE,CAAC;IACd,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,KAAK,WAAE,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,WAAE,CAAC,GAAG,CAAC,IAAI,IAAA,yBAAe,GAAE,EAAE,CAAC,EAAE,CAAC,CAAC;IAC9E,OAAO,CAAC,GAAG,CAAC,KAAK,WAAE,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IAC5C,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,KAAK,WAAE,CAAC,IAAI,CAAC,WAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,WAAE,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,WAAE,CAAC,GAAG,CAAC,qBAAqB,CAAC,EAAE,CAAC,CAAC;IACvG,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,KAAK,WAAE,CAAC,IAAI,CAAC,WAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC;IAClD,OAAO,CAAC,GAAG,CAAC,OAAO,WAAE,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,WAAE,CAAC,GAAG,CAAC,eAAe,CAAC,qCAAqC,CAAC,CAAC;IAC3G,OAAO,CAAC,GAAG,CAAC,OAAO,WAAE,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,WAAE,CAAC,GAAG,CAAC,eAAe,CAAC,gDAAgD,CAAC,CAAC;IACtH,OAAO,CAAC,GAAG,CAAC,OAAO,WAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,mDAAmD,CAAC,CAAC;IAC1F,OAAO,CAAC,GAAG,CAAC,OAAO,WAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,WAAE,CAAC,GAAG,CAAC,eAAe,CAAC,0CAA0C,CAAC,CAAC;IAChH,OAAO,CAAC,GAAG,CAAC,OAAO,WAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,WAAE,CAAC,GAAG,CAAC,cAAc,CAAC,gCAAgC,CAAC,CAAC;IACrG,OAAO,CAAC,GAAG,CAAC,OAAO,WAAE,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,WAAE,CAAC,GAAG,CAAC,cAAc,CAAC,8CAA8C,CAAC,CAAC;IACnH,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,KAAK,WAAE,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,WAAE,CAAC,IAAI,CAAC,0BAA0B,CAAC,IAAI,WAAE,CAAC,GAAG,CAAC,6BAA6B,CAAC,EAAE,CAAC,CAAC;IAClH,OAAO,CAAC,GAAG,EAAE,CAAC;AAClB,CAAC;KAAM,IAAI,mBAAmB,EAAE,CAAC;IAC7B,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAChC,CAAC;KAAM,CAAC;IACJ,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,oDAAoD;IACpD,IAAA,yBAAe,GAAE,CAAC,KAAK,CAAC,GAAS,EAAE,GAAE,CAAC,CAAC,CAAC;AAC5C,CAAC"}
|
package/dist/lib/collector.d.ts
CHANGED
|
@@ -1,11 +1,70 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* IronBee CLI — Collector Client
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
4
|
+
* Shared HTTP transport for pushing events to the IronBee Collector
|
|
5
|
+
* (`POST {url}/v1/events`). Two callers use it today:
|
|
6
6
|
*
|
|
7
|
-
*
|
|
7
|
+
* - `sendToCollector(entry, …)` — fire-and-forget single-event send used
|
|
8
|
+
* by `appendAction` in the interactive path. Short timeout, resolves on
|
|
9
|
+
* ANY response (status ignored for backward-compat), rejects only on
|
|
10
|
+
* network / timeout errors.
|
|
11
|
+
*
|
|
12
|
+
* - `postEventsBatch(events, cc)` — low-level primitive returning
|
|
13
|
+
* `{ status, body }` so callers can classify the response. Used by the
|
|
14
|
+
* queue `send_event` handler for HTTP-status → TransientError /
|
|
15
|
+
* AuthError / BadRequestBatchError classification (spec §6).
|
|
16
|
+
*
|
|
17
|
+
* Both are no-ops when `IRONBEE_COLLECTOR=false` is set (jest harness).
|
|
8
18
|
*/
|
|
9
19
|
import { AppendActionInput } from "../hooks/core/actions";
|
|
20
|
+
export interface CollectorTarget {
|
|
21
|
+
url: string;
|
|
22
|
+
apiKey?: string;
|
|
23
|
+
/**
|
|
24
|
+
* Max events per POST when the queue's `send_event` handler chunks a
|
|
25
|
+
* snapshot's jobs. Populated from `config.collector.batchSize`.
|
|
26
|
+
* Undefined → handler falls back to its built-in default (100).
|
|
27
|
+
*/
|
|
28
|
+
batchSize?: number;
|
|
29
|
+
}
|
|
30
|
+
export interface PostEventsResult {
|
|
31
|
+
status: number;
|
|
32
|
+
body: string;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Low-level transport: POST a JSON array of events to the collector and
|
|
36
|
+
* resolve with the HTTP status + response body. Rejects on network error,
|
|
37
|
+
* connect timeout, or socket timeout. Does NOT throw on non-2xx — callers
|
|
38
|
+
* decide what HTTP status means for their use case.
|
|
39
|
+
*/
|
|
40
|
+
export declare function postEventsBatch(events: unknown[], target: CollectorTarget, opts?: {
|
|
41
|
+
timeoutMs?: number;
|
|
42
|
+
}): Promise<PostEventsResult>;
|
|
43
|
+
/**
|
|
44
|
+
* Resolve the collector target from config, or `null` if disabled.
|
|
45
|
+
*
|
|
46
|
+
* Disabled when ANY of:
|
|
47
|
+
* - `IRONBEE_COLLECTOR=false` env (jest harness escape hatch)
|
|
48
|
+
* - no `collector` config section
|
|
49
|
+
* - `collector.enable: false` explicitly set
|
|
50
|
+
* - `collector.url` missing or empty
|
|
51
|
+
*
|
|
52
|
+
* Otherwise the section is treated as enabled (presence is the opt-in,
|
|
53
|
+
* symmetric with `jobQueue`). `apiKey` is optional — when absent, the
|
|
54
|
+
* `X-API-Key` header is simply omitted, allowing use against an
|
|
55
|
+
* auth-disabled collector.
|
|
56
|
+
*/
|
|
57
|
+
export declare function getCollectorTarget(projectDir?: string): CollectorTarget | null;
|
|
58
|
+
/**
|
|
59
|
+
* Fire-and-forget single-event send. Resolves on any HTTP response (status is
|
|
60
|
+
* intentionally ignored so a 5xx from the collector does not propagate back
|
|
61
|
+
* into a hook that's writing to `actions.jsonl`). Rejects only on network
|
|
62
|
+
* / timeout errors.
|
|
63
|
+
*
|
|
64
|
+
* Emits a debug-level trace line per attempt to `session.log` (level filter
|
|
65
|
+
* does not gate file writes — see logger.ts) so operators can audit which
|
|
66
|
+
* lifecycle events made it to the collector. The line carries the event id
|
|
67
|
+
* and type to make grep'ing trivial; it does not include payload content.
|
|
68
|
+
*/
|
|
10
69
|
export declare function sendToCollector(entry: AppendActionInput, _sessionId: string, projectDir: string): Promise<void>;
|
|
11
70
|
//# sourceMappingURL=collector.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collector.d.ts","sourceRoot":"","sources":["../../src/lib/collector.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"collector.d.ts","sourceRoot":"","sources":["../../src/lib/collector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAMH,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAK1D,MAAM,WAAW,eAAe;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,gBAAgB;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CAChB;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CACjC,MAAM,EAAE,OAAO,EAAE,EACjB,MAAM,EAAE,eAAe,EACvB,IAAI,CAAC,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAC9B,OAAO,CAAC,gBAAgB,CAAC,CAgD3B;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAsB9E;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,eAAe,CAAC,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBrH"}
|
package/dist/lib/collector.js
CHANGED
|
@@ -2,12 +2,24 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* IronBee CLI — Collector Client
|
|
4
4
|
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
5
|
+
* Shared HTTP transport for pushing events to the IronBee Collector
|
|
6
|
+
* (`POST {url}/v1/events`). Two callers use it today:
|
|
7
7
|
*
|
|
8
|
-
*
|
|
8
|
+
* - `sendToCollector(entry, …)` — fire-and-forget single-event send used
|
|
9
|
+
* by `appendAction` in the interactive path. Short timeout, resolves on
|
|
10
|
+
* ANY response (status ignored for backward-compat), rejects only on
|
|
11
|
+
* network / timeout errors.
|
|
12
|
+
*
|
|
13
|
+
* - `postEventsBatch(events, cc)` — low-level primitive returning
|
|
14
|
+
* `{ status, body }` so callers can classify the response. Used by the
|
|
15
|
+
* queue `send_event` handler for HTTP-status → TransientError /
|
|
16
|
+
* AuthError / BadRequestBatchError classification (spec §6).
|
|
17
|
+
*
|
|
18
|
+
* Both are no-ops when `IRONBEE_COLLECTOR=false` is set (jest harness).
|
|
9
19
|
*/
|
|
10
20
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
21
|
+
exports.postEventsBatch = postEventsBatch;
|
|
22
|
+
exports.getCollectorTarget = getCollectorTarget;
|
|
11
23
|
exports.sendToCollector = sendToCollector;
|
|
12
24
|
const https_1 = require("https");
|
|
13
25
|
const http_1 = require("http");
|
|
@@ -15,59 +27,119 @@ const config_1 = require("./config");
|
|
|
15
27
|
const logger_1 = require("./logger");
|
|
16
28
|
const SEND_TIMEOUT_MS = 3000;
|
|
17
29
|
const EVENTS_PATH = "/v1/events";
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
if (process.env.IRONBEE_COLLECTOR === "false") {
|
|
27
|
-
return;
|
|
28
|
-
}
|
|
30
|
+
/**
|
|
31
|
+
* Low-level transport: POST a JSON array of events to the collector and
|
|
32
|
+
* resolve with the HTTP status + response body. Rejects on network error,
|
|
33
|
+
* connect timeout, or socket timeout. Does NOT throw on non-2xx — callers
|
|
34
|
+
* decide what HTTP status means for their use case.
|
|
35
|
+
*/
|
|
36
|
+
async function postEventsBatch(events, target, opts) {
|
|
37
|
+
const timeoutMs = opts?.timeoutMs ?? SEND_TIMEOUT_MS;
|
|
29
38
|
return new Promise((resolve, reject) => {
|
|
30
39
|
try {
|
|
31
|
-
const
|
|
32
|
-
|
|
33
|
-
resolve();
|
|
34
|
-
return;
|
|
35
|
-
}
|
|
36
|
-
// entry is already enriched with id/session_id/project_name/timestamp by appendAction.
|
|
37
|
-
const event = { ...entry };
|
|
38
|
-
const body = JSON.stringify([event]);
|
|
39
|
-
const url = new URL(EVENTS_PATH, collectorConfig.url);
|
|
40
|
+
const body = JSON.stringify(events);
|
|
41
|
+
const url = new URL(EVENTS_PATH, target.url);
|
|
40
42
|
const isHttps = url.protocol === "https:";
|
|
41
43
|
const doRequest = isHttps ? https_1.request : http_1.request;
|
|
42
|
-
const
|
|
43
|
-
logger_1.logger.debug("collector: send timeout");
|
|
44
|
+
const timer = setTimeout(() => {
|
|
44
45
|
reject(new Error("collector: send timeout"));
|
|
45
|
-
},
|
|
46
|
+
}, timeoutMs);
|
|
46
47
|
const req = doRequest({
|
|
47
48
|
hostname: url.hostname,
|
|
48
49
|
port: url.port || (isHttps ? 443 : 80),
|
|
49
|
-
path: url.pathname,
|
|
50
|
+
path: url.pathname + url.search,
|
|
50
51
|
method: "POST",
|
|
51
52
|
headers: {
|
|
52
53
|
"Content-Type": "application/json",
|
|
53
54
|
"Content-Length": Buffer.byteLength(body),
|
|
54
|
-
...(
|
|
55
|
+
...(target.apiKey ? { "X-API-Key": target.apiKey } : {}),
|
|
55
56
|
},
|
|
56
|
-
timeout:
|
|
57
|
+
timeout: timeoutMs,
|
|
57
58
|
}, (res) => {
|
|
58
|
-
|
|
59
|
-
res.
|
|
60
|
-
res.on("
|
|
59
|
+
let chunks = "";
|
|
60
|
+
res.setEncoding("utf-8");
|
|
61
|
+
res.on("data", (d) => { chunks += d; });
|
|
62
|
+
res.on("end", () => {
|
|
63
|
+
clearTimeout(timer);
|
|
64
|
+
resolve({ status: res.statusCode ?? 0, body: chunks });
|
|
65
|
+
});
|
|
66
|
+
res.on("close", () => {
|
|
67
|
+
clearTimeout(timer);
|
|
68
|
+
resolve({ status: res.statusCode ?? 0, body: chunks });
|
|
69
|
+
});
|
|
61
70
|
});
|
|
62
|
-
req.on("error", (err) => { clearTimeout(
|
|
63
|
-
req.on("timeout", () => { clearTimeout(
|
|
71
|
+
req.on("error", (err) => { clearTimeout(timer); reject(err); });
|
|
72
|
+
req.on("timeout", () => { clearTimeout(timer); req.destroy(); reject(new Error("collector: request timeout")); });
|
|
64
73
|
req.write(body);
|
|
65
74
|
req.end();
|
|
66
75
|
}
|
|
67
76
|
catch (e) {
|
|
68
|
-
logger_1.logger.debug(`collector: sendToCollector failed: ${e}`);
|
|
69
77
|
reject(e instanceof Error ? e : new Error(String(e)));
|
|
70
78
|
}
|
|
71
79
|
});
|
|
72
80
|
}
|
|
81
|
+
/**
|
|
82
|
+
* Resolve the collector target from config, or `null` if disabled.
|
|
83
|
+
*
|
|
84
|
+
* Disabled when ANY of:
|
|
85
|
+
* - `IRONBEE_COLLECTOR=false` env (jest harness escape hatch)
|
|
86
|
+
* - no `collector` config section
|
|
87
|
+
* - `collector.enable: false` explicitly set
|
|
88
|
+
* - `collector.url` missing or empty
|
|
89
|
+
*
|
|
90
|
+
* Otherwise the section is treated as enabled (presence is the opt-in,
|
|
91
|
+
* symmetric with `jobQueue`). `apiKey` is optional — when absent, the
|
|
92
|
+
* `X-API-Key` header is simply omitted, allowing use against an
|
|
93
|
+
* auth-disabled collector.
|
|
94
|
+
*/
|
|
95
|
+
function getCollectorTarget(projectDir) {
|
|
96
|
+
if (process.env.IRONBEE_COLLECTOR === "false") {
|
|
97
|
+
return null;
|
|
98
|
+
}
|
|
99
|
+
const config = (0, config_1.loadConfig)(projectDir);
|
|
100
|
+
const section = config.collector;
|
|
101
|
+
if (!section) {
|
|
102
|
+
return null;
|
|
103
|
+
}
|
|
104
|
+
// explicit kill switch — keeps url/apiKey/batchSize in config so the user
|
|
105
|
+
// can flip back on without re-typing them
|
|
106
|
+
if (section.enable === false) {
|
|
107
|
+
return null;
|
|
108
|
+
}
|
|
109
|
+
if (typeof section.url !== "string" || section.url.length === 0) {
|
|
110
|
+
return null;
|
|
111
|
+
}
|
|
112
|
+
return {
|
|
113
|
+
url: section.url,
|
|
114
|
+
apiKey: section.apiKey,
|
|
115
|
+
batchSize: typeof section.batchSize === "number" ? section.batchSize : undefined,
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Fire-and-forget single-event send. Resolves on any HTTP response (status is
|
|
120
|
+
* intentionally ignored so a 5xx from the collector does not propagate back
|
|
121
|
+
* into a hook that's writing to `actions.jsonl`). Rejects only on network
|
|
122
|
+
* / timeout errors.
|
|
123
|
+
*
|
|
124
|
+
* Emits a debug-level trace line per attempt to `session.log` (level filter
|
|
125
|
+
* does not gate file writes — see logger.ts) so operators can audit which
|
|
126
|
+
* lifecycle events made it to the collector. The line carries the event id
|
|
127
|
+
* and type to make grep'ing trivial; it does not include payload content.
|
|
128
|
+
*/
|
|
129
|
+
async function sendToCollector(entry, _sessionId, projectDir) {
|
|
130
|
+
const target = getCollectorTarget(projectDir);
|
|
131
|
+
if (!target) {
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
const startedAt = Date.now();
|
|
135
|
+
try {
|
|
136
|
+
// entry is already enriched with id/session_id/project_name/timestamp by appendAction.
|
|
137
|
+
await postEventsBatch([entry], target, { timeoutMs: SEND_TIMEOUT_MS });
|
|
138
|
+
logger_1.logger.debug(`collector: posted type=${entry.type} id=${entry.id ?? "?"} in ${Date.now() - startedAt}ms`);
|
|
139
|
+
}
|
|
140
|
+
catch (e) {
|
|
141
|
+
logger_1.logger.debug(`collector: sendToCollector failed type=${entry.type} id=${entry.id ?? "?"}: ${e}`);
|
|
142
|
+
throw e instanceof Error ? e : new Error(String(e));
|
|
143
|
+
}
|
|
144
|
+
}
|
|
73
145
|
//# sourceMappingURL=collector.js.map
|