@agent-beam/beam 0.2.33 → 0.2.35
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/README.md +31 -5
- package/Skills/agentbeam-app-monitoring/SKILL.md +4 -1
- package/dist/cli.js +34 -3
- package/dist/cli.js.map +1 -1
- package/dist/monitor-client.d.ts +47 -0
- package/dist/monitor-client.js +24 -0
- package/dist/monitor-client.js.map +1 -1
- package/dist/monitor-config.d.ts +4 -1
- package/dist/monitor-config.js +25 -3
- package/dist/monitor-config.js.map +1 -1
- package/dist/monitor-deny.d.ts +35 -0
- package/dist/monitor-deny.js +141 -0
- package/dist/monitor-deny.js.map +1 -0
- package/dist/monitor-pause.d.ts +171 -0
- package/dist/monitor-pause.js +510 -0
- package/dist/monitor-pause.js.map +1 -0
- package/dist/monitor-pipeline.d.ts +12 -0
- package/dist/monitor-pipeline.js +25 -2
- package/dist/monitor-pipeline.js.map +1 -1
- package/dist/monitor-rules.d.ts +38 -0
- package/dist/monitor-rules.js +37 -0
- package/dist/monitor-rules.js.map +1 -1
- package/dist/monitor.d.ts +28 -0
- package/dist/monitor.js +223 -12
- package/dist/monitor.js.map +1 -1
- package/dist/sdk.d.ts +69 -5
- package/dist/sdk.js +219 -27
- package/dist/sdk.js.map +1 -1
- package/package.json +1 -1
- package/stress-report.json +43 -42
package/dist/monitor-config.js
CHANGED
|
@@ -9,8 +9,9 @@
|
|
|
9
9
|
// committed with the app, so keys are refused there.
|
|
10
10
|
// environment variables, then command-line flags.
|
|
11
11
|
//
|
|
12
|
-
// Each top-level setting (files, app, maxCpuPercent, llm) comes whole from the highest layer
|
|
13
|
-
// sets it, so a project can't half-override a managed LLM setup.
|
|
12
|
+
// Each top-level setting (files, app, maxCpuPercent, llm, pause) comes whole from the highest layer
|
|
13
|
+
// that sets it, so a project can't half-override a managed LLM setup. Pausing (deny lists and the
|
|
14
|
+
// command that reloads the web server) can't come from a project file: it runs a command. `beam monitor configure` shows
|
|
14
15
|
// where every effective value came from.
|
|
15
16
|
//
|
|
16
17
|
// It's created the first time a monitor command runs after an upgrade, carrying over older
|
|
@@ -22,9 +23,11 @@ import { constants } from "node:fs";
|
|
|
22
23
|
import { mkdir, open, rename, rm } from "node:fs/promises";
|
|
23
24
|
import { join, resolve } from "node:path";
|
|
24
25
|
import { getBeamHome } from "./config.js";
|
|
26
|
+
import { DENY_FORMATS } from "./monitor-deny.js";
|
|
25
27
|
export const monitorConfigPath = () => join(getBeamHome(), "monitor.json");
|
|
26
28
|
export const DEFAULT_MONITOR_CONFIG = {
|
|
27
29
|
version: 1, files: [], app: null, maxCpuPercent: 25, llm: { provider: "beam", model: null, baseUrl: null, apiKeyEnv: null },
|
|
30
|
+
pause: { denyFile: null, authDenyFile: null, llmDenyFile: null, format: "nginx", reload: null },
|
|
28
31
|
};
|
|
29
32
|
const invalid = (why) => new Error(`${monitorConfigPath()} is invalid (${why}). Fix it, or run 'beam monitor configure' to rewrite it.`);
|
|
30
33
|
const isRecord = (v) => !!v && typeof v === "object" && !Array.isArray(v);
|
|
@@ -50,6 +53,16 @@ export function validateMonitorConfig(value) {
|
|
|
50
53
|
throw invalid("llm.apiKeyEnv must be a variable name");
|
|
51
54
|
if (llm.apiKey !== undefined && (typeof llm.apiKey !== "string" || !llm.apiKey.trim() || /\s/.test(llm.apiKey) || llm.apiKey.length > 4096))
|
|
52
55
|
throw invalid("llm.apiKey must be a single key");
|
|
56
|
+
const pause = isRecord(value.pause) ? value.pause : {};
|
|
57
|
+
if (value.pause !== undefined && value.pause !== null && !isRecord(value.pause))
|
|
58
|
+
throw invalid("pause must be an object");
|
|
59
|
+
for (const field of ["denyFile", "authDenyFile", "llmDenyFile"])
|
|
60
|
+
if (!optionalString(pause[field], 4096) || pause[field] === "")
|
|
61
|
+
throw invalid(`pause.${field} must be a path`);
|
|
62
|
+
if (pause.format !== undefined && !DENY_FORMATS.includes(pause.format))
|
|
63
|
+
throw invalid(`pause.format must be ${DENY_FORMATS.join(" or ")}`);
|
|
64
|
+
if (!optionalString(pause.reload, 1000) || pause.reload === "")
|
|
65
|
+
throw invalid("pause.reload must be a command");
|
|
53
66
|
return {
|
|
54
67
|
version: 1,
|
|
55
68
|
files: [...(value.files ?? [])],
|
|
@@ -62,6 +75,13 @@ export function validateMonitorConfig(value) {
|
|
|
62
75
|
apiKeyEnv: llm.apiKeyEnv ?? null,
|
|
63
76
|
...(typeof llm.apiKey === "string" ? { apiKey: llm.apiKey } : {}),
|
|
64
77
|
},
|
|
78
|
+
pause: {
|
|
79
|
+
denyFile: pause.denyFile ?? null,
|
|
80
|
+
authDenyFile: pause.authDenyFile ?? null,
|
|
81
|
+
llmDenyFile: pause.llmDenyFile ?? null,
|
|
82
|
+
format: pause.format ?? "nginx",
|
|
83
|
+
reload: pause.reload ?? null,
|
|
84
|
+
},
|
|
65
85
|
};
|
|
66
86
|
}
|
|
67
87
|
/** The file's settings, or null when there's no file yet. Throws when it exists but is invalid. */
|
|
@@ -142,7 +162,7 @@ export function describeMonitorConfig(config) {
|
|
|
142
162
|
const { apiKey, ...llm } = config.llm;
|
|
143
163
|
return { ...config, llm: { ...llm, ...(apiKey ? { apiKey: "(stored)" } : {}) } };
|
|
144
164
|
}
|
|
145
|
-
const SETTING_KEYS = ["files", "app", "maxCpuPercent", "llm"];
|
|
165
|
+
const SETTING_KEYS = ["files", "app", "maxCpuPercent", "llm", "pause"];
|
|
146
166
|
export function managedConfigPath(env = process.env) {
|
|
147
167
|
if (env.BEAM_MANAGED_CONFIG)
|
|
148
168
|
return resolve(env.BEAM_MANAGED_CONFIG);
|
|
@@ -163,6 +183,8 @@ export function validateLayer(value, kind, path) {
|
|
|
163
183
|
throw bad("unsupported version");
|
|
164
184
|
if (isRecord(value.llm) && value.llm.apiKey !== undefined)
|
|
165
185
|
throw bad("keys don't belong in a shared file: name the variable that holds it with llm.apiKeyEnv");
|
|
186
|
+
if (kind === "project" && value.pause !== undefined)
|
|
187
|
+
throw bad("pause runs a reload command on this server, so it can't come from a project file: set it with 'beam monitor configure' or in the managed config");
|
|
166
188
|
const locked = value.locked ?? [];
|
|
167
189
|
if (!Array.isArray(locked) || !locked.every(k => SETTING_KEYS.includes(k)))
|
|
168
190
|
throw bad(`locked must list settings: ${SETTING_KEYS.join(", ")}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"monitor-config.js","sourceRoot":"","sources":["../src/monitor-config.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"monitor-config.js","sourceRoot":"","sources":["../src/monitor-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { Pause, PauseScope } from "./monitor-pause.js";
|
|
2
|
+
export type DenyFormat = "nginx" | "plain";
|
|
3
|
+
export declare const DENY_FORMATS: DenyFormat[];
|
|
4
|
+
export interface DenyListSettings {
|
|
5
|
+
/** Pauses on the whole app. */
|
|
6
|
+
denyFile: string | null;
|
|
7
|
+
/** Pauses on sign-in routes only (password guessing). */
|
|
8
|
+
authDenyFile: string | null;
|
|
9
|
+
/** Pauses on LLM routes only (model abuse). */
|
|
10
|
+
llmDenyFile: string | null;
|
|
11
|
+
format: DenyFormat;
|
|
12
|
+
/** Run after a list changes, e.g. "nginx -s reload". Through the shell, with a 30-second limit. */
|
|
13
|
+
reload: string | null;
|
|
14
|
+
}
|
|
15
|
+
/** One scope's list, sorted so an unchanged set writes an identical file. */
|
|
16
|
+
export declare function renderDenyList(pauses: Pause[], scope: PauseScope, format: DenyFormat, now?: number): string;
|
|
17
|
+
/** Keeps the deny files in step with the pauses, reloading the web server after a change. */
|
|
18
|
+
export declare class DenyListWriter {
|
|
19
|
+
private readonly settings;
|
|
20
|
+
private readonly log;
|
|
21
|
+
private written;
|
|
22
|
+
private reloadTimer;
|
|
23
|
+
private lastReload;
|
|
24
|
+
private inflight;
|
|
25
|
+
private pendingReload;
|
|
26
|
+
constructor(settings: DenyListSettings, log: (message: string) => void);
|
|
27
|
+
get enabled(): boolean;
|
|
28
|
+
private files;
|
|
29
|
+
/** Writes each list that changed; returns whether any did. Errors are logged, never thrown. */
|
|
30
|
+
update(pauses: Pause[]): Promise<boolean>;
|
|
31
|
+
/** Empties every list (on shutdown: pauses shouldn't outlive the process that keeps them current). */
|
|
32
|
+
clear(): Promise<void>;
|
|
33
|
+
private scheduleReload;
|
|
34
|
+
private reload;
|
|
35
|
+
}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
// `beam monitor --deny-file`: the pauses in force as a web server deny list, so a server that
|
|
2
|
+
// only has its logs watched can still refuse a paused sender. beam monitor reads logs after the
|
|
3
|
+
// fact and can't answer requests itself; the web server in front of the app can. The list is
|
|
4
|
+
// rewritten as pauses start and end, and an optional reload command (`nginx -s reload`) runs
|
|
5
|
+
// after each change.
|
|
6
|
+
//
|
|
7
|
+
// nginx deny 203.0.113.9; (include it in a server or location block)
|
|
8
|
+
// plain 203.0.113.9 (one per line: HAProxy `-f`, ipset restore scripts, anything else)
|
|
9
|
+
//
|
|
10
|
+
// Pauses scoped to sign-in or LLM routes go to their own files (--auth-deny-file, --llm-deny-file),
|
|
11
|
+
// to include only in those locations. User pauses (user:<id>) can't be expressed as addresses and
|
|
12
|
+
// are left to the SDK. Files are replaced atomically, so the server never reads half a list.
|
|
13
|
+
import { spawn } from "node:child_process";
|
|
14
|
+
import { randomUUID } from "node:crypto";
|
|
15
|
+
import { open, rename, rm } from "node:fs/promises";
|
|
16
|
+
import { dirname, join } from "node:path";
|
|
17
|
+
export const DENY_FORMATS = ["nginx", "plain"];
|
|
18
|
+
const RELOAD_TIMEOUT_MS = 30_000;
|
|
19
|
+
const RELOAD_EVERY_MS = 5_000;
|
|
20
|
+
// What a reason may show in a comment: no newlines, nothing a config parser could read as syntax.
|
|
21
|
+
const safe = (text) => text.replace(/[^\w .:/()@+-]/g, "").slice(0, 120);
|
|
22
|
+
/** One scope's list, sorted so an unchanged set writes an identical file. */
|
|
23
|
+
export function renderDenyList(pauses, scope, format, now = Date.now()) {
|
|
24
|
+
const entries = pauses
|
|
25
|
+
.filter(p => p.scope === scope && !p.dryRun && p.until > now && !p.target.startsWith("user:"))
|
|
26
|
+
.sort((a, b) => a.target.localeCompare(b.target));
|
|
27
|
+
const where = scope === "all" ? "the whole app" : scope === "auth" ? "sign-in routes" : "LLM routes";
|
|
28
|
+
const header = [
|
|
29
|
+
`# Written by beam monitor: addresses AgentBeam paused from ${where}. Rewritten as pauses start and end; don't edit.`,
|
|
30
|
+
`# ${entries.length} paused.`,
|
|
31
|
+
];
|
|
32
|
+
if (format === "plain")
|
|
33
|
+
return `${[...header, ...entries.map(p => p.target)].join("\n")}\n`;
|
|
34
|
+
return `${[...header, ...entries.map(p => `deny ${p.target}; # until ${new Date(p.until).toISOString().slice(0, 16)}Z: ${safe(p.reason)}`)].join("\n")}\n`;
|
|
35
|
+
}
|
|
36
|
+
/** Keeps the deny files in step with the pauses, reloading the web server after a change. */
|
|
37
|
+
export class DenyListWriter {
|
|
38
|
+
settings;
|
|
39
|
+
log;
|
|
40
|
+
written = new Map();
|
|
41
|
+
reloadTimer;
|
|
42
|
+
lastReload = 0;
|
|
43
|
+
inflight = null;
|
|
44
|
+
pendingReload = false;
|
|
45
|
+
constructor(settings, log) {
|
|
46
|
+
this.settings = settings;
|
|
47
|
+
this.log = log;
|
|
48
|
+
}
|
|
49
|
+
get enabled() { return Boolean(this.settings.denyFile || this.settings.authDenyFile || this.settings.llmDenyFile); }
|
|
50
|
+
files() {
|
|
51
|
+
return [["all", this.settings.denyFile], ["auth", this.settings.authDenyFile], ["llm", this.settings.llmDenyFile]]
|
|
52
|
+
.filter((f) => Boolean(f[1]));
|
|
53
|
+
}
|
|
54
|
+
/** Writes each list that changed; returns whether any did. Errors are logged, never thrown. */
|
|
55
|
+
async update(pauses) {
|
|
56
|
+
let changed = false;
|
|
57
|
+
for (const [scope, path] of this.files()) {
|
|
58
|
+
const text = renderDenyList(pauses, scope, this.settings.format);
|
|
59
|
+
const body = text.split("\n").filter(l => !l.startsWith("#")).join("\n");
|
|
60
|
+
if (this.written.get(path) === body)
|
|
61
|
+
continue;
|
|
62
|
+
try {
|
|
63
|
+
await writeAtomically(path, text);
|
|
64
|
+
this.written.set(path, body);
|
|
65
|
+
changed = true;
|
|
66
|
+
}
|
|
67
|
+
catch (error) {
|
|
68
|
+
this.log(`Couldn't write ${path}: ${error.message}. Pauses for ${scope === "all" ? "the whole app" : `${scope} routes`} aren't enforced until it can be.`);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
if (changed)
|
|
72
|
+
this.scheduleReload();
|
|
73
|
+
return changed;
|
|
74
|
+
}
|
|
75
|
+
/** Empties every list (on shutdown: pauses shouldn't outlive the process that keeps them current). */
|
|
76
|
+
async clear() {
|
|
77
|
+
await this.update([]);
|
|
78
|
+
// Now rather than after the debounce (the process is exiting), once any reload in flight is done.
|
|
79
|
+
await this.inflight;
|
|
80
|
+
if (this.reloadTimer) {
|
|
81
|
+
clearTimeout(this.reloadTimer);
|
|
82
|
+
this.reloadTimer = undefined;
|
|
83
|
+
}
|
|
84
|
+
await this.reload();
|
|
85
|
+
}
|
|
86
|
+
scheduleReload() {
|
|
87
|
+
if (!this.settings.reload)
|
|
88
|
+
return;
|
|
89
|
+
this.pendingReload = true;
|
|
90
|
+
if (this.reloadTimer)
|
|
91
|
+
return;
|
|
92
|
+
const wait = Math.max(0, this.lastReload + RELOAD_EVERY_MS - Date.now());
|
|
93
|
+
this.reloadTimer = setTimeout(() => { this.reloadTimer = undefined; void this.reload(); }, wait);
|
|
94
|
+
this.reloadTimer.unref?.();
|
|
95
|
+
}
|
|
96
|
+
reload() {
|
|
97
|
+
const command = this.settings.reload;
|
|
98
|
+
if (!command || this.inflight || !this.pendingReload)
|
|
99
|
+
return this.inflight ?? Promise.resolve();
|
|
100
|
+
this.pendingReload = false;
|
|
101
|
+
this.lastReload = Date.now();
|
|
102
|
+
this.inflight = run(command).then(({ code, output }) => {
|
|
103
|
+
if (code !== 0)
|
|
104
|
+
this.log(`The reload command (${command}) failed with exit code ${code}${output ? `: ${output}` : ""}. The deny list is written; the web server may still be using the old one.`);
|
|
105
|
+
}).finally(() => {
|
|
106
|
+
this.inflight = null;
|
|
107
|
+
if (this.pendingReload)
|
|
108
|
+
this.scheduleReload();
|
|
109
|
+
});
|
|
110
|
+
return this.inflight;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
async function writeAtomically(path, text) {
|
|
114
|
+
const tmp = join(dirname(path), `.${randomUUID()}.beam-deny.tmp`);
|
|
115
|
+
try {
|
|
116
|
+
const file = await open(tmp, "wx", 0o644);
|
|
117
|
+
try {
|
|
118
|
+
await file.writeFile(text);
|
|
119
|
+
}
|
|
120
|
+
finally {
|
|
121
|
+
await file.close();
|
|
122
|
+
}
|
|
123
|
+
await rename(tmp, path);
|
|
124
|
+
}
|
|
125
|
+
finally {
|
|
126
|
+
await rm(tmp, { force: true });
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
function run(command) {
|
|
130
|
+
return new Promise(resolve => {
|
|
131
|
+
let output = "";
|
|
132
|
+
const child = spawn(command, { shell: true, stdio: ["ignore", "pipe", "pipe"] });
|
|
133
|
+
const keep = (chunk) => { output = (output + chunk.toString("utf8")).slice(-400); };
|
|
134
|
+
child.stdout?.on("data", keep);
|
|
135
|
+
child.stderr?.on("data", keep);
|
|
136
|
+
const timer = setTimeout(() => child.kill("SIGKILL"), RELOAD_TIMEOUT_MS);
|
|
137
|
+
child.on("error", error => { clearTimeout(timer); resolve({ code: -1, output: error.message }); });
|
|
138
|
+
child.on("close", code => { clearTimeout(timer); resolve({ code: code ?? -1, output: output.trim().replace(/\s+/g, " ") }); });
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
//# sourceMappingURL=monitor-deny.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"monitor-deny.js","sourceRoot":"","sources":["../src/monitor-deny.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
import type { MonitorFinding } from "./monitor-client.js";
|
|
2
|
+
export type PauseScope = "all" | "auth" | "llm";
|
|
3
|
+
export type PauseMode = "off" | "dry_run" | "auto";
|
|
4
|
+
export declare const PAUSE_SCOPES: PauseScope[];
|
|
5
|
+
export declare const PAUSE_MODES: PauseMode[];
|
|
6
|
+
export interface Pause {
|
|
7
|
+
/** "203.0.113.9", "2001:db8:1:2::/64" (an IPv6 sender's /64) or "user:<id>". */
|
|
8
|
+
target: string;
|
|
9
|
+
scope: PauseScope;
|
|
10
|
+
/** Epoch ms. */
|
|
11
|
+
until: number;
|
|
12
|
+
reason: string;
|
|
13
|
+
ruleId?: string;
|
|
14
|
+
source: "auto" | "manual";
|
|
15
|
+
/** Dry run: recorded and reported, never enforced. */
|
|
16
|
+
dryRun?: boolean;
|
|
17
|
+
}
|
|
18
|
+
/** A pause this instance made, as sent to the workspace (POST /v1/monitor/pauses). */
|
|
19
|
+
export interface PauseReport {
|
|
20
|
+
target: string;
|
|
21
|
+
scope: PauseScope;
|
|
22
|
+
until: string;
|
|
23
|
+
reason: string;
|
|
24
|
+
ruleId?: string;
|
|
25
|
+
findingId?: string;
|
|
26
|
+
source: "auto";
|
|
27
|
+
dryRun: boolean;
|
|
28
|
+
strike: number;
|
|
29
|
+
}
|
|
30
|
+
/** The workspace's pausing settings, from the config. */
|
|
31
|
+
export interface PauseSettings {
|
|
32
|
+
mode: PauseMode;
|
|
33
|
+
/** Addresses, CIDR ranges and user:<id> targets that are never paused. */
|
|
34
|
+
allowlist: string[];
|
|
35
|
+
/** Automatic pauses active at once, at most. */
|
|
36
|
+
maxActive: number;
|
|
37
|
+
/** New automatic pauses within 10 minutes before the breaker stops pausing for 30 minutes. */
|
|
38
|
+
burst: number;
|
|
39
|
+
}
|
|
40
|
+
export declare const DEFAULT_PAUSE_SETTINGS: PauseSettings;
|
|
41
|
+
/** What to do with one request or sender. */
|
|
42
|
+
export interface Verdict {
|
|
43
|
+
paused: boolean;
|
|
44
|
+
/** Dry run: this would have been paused. */
|
|
45
|
+
wouldPause?: boolean;
|
|
46
|
+
scope?: PauseScope;
|
|
47
|
+
reason?: string;
|
|
48
|
+
/** ISO time the pause ends. */
|
|
49
|
+
until?: string;
|
|
50
|
+
/** Seconds until the pause ends, for a Retry-After header. */
|
|
51
|
+
retryAfter?: number;
|
|
52
|
+
target?: string;
|
|
53
|
+
}
|
|
54
|
+
export declare const MAX_AUTO_PAUSE_MS: number;
|
|
55
|
+
/**
|
|
56
|
+
* Detections that pause their sender automatically, and for how long the first time. A repeat
|
|
57
|
+
* within a day pauses for four times as long, up to a day. Detections from a single request are
|
|
58
|
+
* left alone unless they're critical exploits that weren't refused: one odd request is rarely
|
|
59
|
+
* worth refusing someone, a pattern is.
|
|
60
|
+
*/
|
|
61
|
+
export declare const AUTO_PAUSES: Record<string, {
|
|
62
|
+
scope: PauseScope;
|
|
63
|
+
minutes: number;
|
|
64
|
+
label: string;
|
|
65
|
+
by: "ip" | "sender";
|
|
66
|
+
}>;
|
|
67
|
+
/** How a finding pauses its sender, or null when it doesn't. */
|
|
68
|
+
export declare function autoPauseFor(finding: Pick<MonitorFinding, "ruleId" | "severity" | "category" | "source" | "rollup" | "request">): {
|
|
69
|
+
scope: PauseScope;
|
|
70
|
+
minutes: number;
|
|
71
|
+
label: string;
|
|
72
|
+
by: "ip" | "sender";
|
|
73
|
+
} | null;
|
|
74
|
+
interface Ip {
|
|
75
|
+
v: 4 | 6;
|
|
76
|
+
bytes: number[];
|
|
77
|
+
}
|
|
78
|
+
/** An IPv4 or IPv6 address as bytes (IPv4-mapped IPv6 is read as IPv4), or null. */
|
|
79
|
+
export declare function parseIp(text: string | null | undefined): Ip | null;
|
|
80
|
+
export declare function isProtectedIp(ip: string): boolean;
|
|
81
|
+
/**
|
|
82
|
+
* What a pause on this address is keyed by: the address itself for IPv4, the /64 for IPv6 (one
|
|
83
|
+
* customer's network: rotating within it is free), or null when it isn't an address.
|
|
84
|
+
*/
|
|
85
|
+
export declare function pauseTarget(ip: string | null | undefined): string | null;
|
|
86
|
+
/** user:<id> for a user id, or null. */
|
|
87
|
+
export declare function userTarget(user: string | null | undefined): string | null;
|
|
88
|
+
/** A target as typed by a person (an address, a CIDR range, or user:<id>), normalized; or null. */
|
|
89
|
+
export declare function normalizeTarget(text: string): string | null;
|
|
90
|
+
/**
|
|
91
|
+
* The client address of a request, when it can be trusted enough to pause: one the client can't
|
|
92
|
+
* forge. Platforms that set or overwrite the header (Cloudflare, Vercel, Fly.io) are read
|
|
93
|
+
* directly. Otherwise the address the app passed is checked against X-Forwarded-For: the first
|
|
94
|
+
* entry of a list is whatever the client sent, so it's never trusted, while the last entry (added
|
|
95
|
+
* by the app's own proxy), the only entry, or an address not in the header (the socket's, or
|
|
96
|
+
* Express's req.ip with trust proxy) is. Returns null when the address can't be trusted.
|
|
97
|
+
*/
|
|
98
|
+
export declare function trustedRequestIp(ip: string | null | undefined, header: (name: string) => string | undefined, platform: {
|
|
99
|
+
cloudflare?: boolean;
|
|
100
|
+
vercel?: boolean;
|
|
101
|
+
fly?: boolean;
|
|
102
|
+
trustGiven?: boolean;
|
|
103
|
+
}): string | null;
|
|
104
|
+
export interface PauseBookOptions {
|
|
105
|
+
now?: () => number;
|
|
106
|
+
/** Something a person should know: the breaker tripped, the cap was reached. */
|
|
107
|
+
onNotice?: (message: string, kind: "breaker" | "cap") => void;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* The pauses one app instance knows about: those it made itself (local) and those from the
|
|
111
|
+
* workspace (remote: admins' pauses, and other instances' when pausing is on). Bounded.
|
|
112
|
+
*/
|
|
113
|
+
export declare class PauseBook {
|
|
114
|
+
private readonly opts;
|
|
115
|
+
private local;
|
|
116
|
+
private remote;
|
|
117
|
+
private remoteRanges;
|
|
118
|
+
private lifted;
|
|
119
|
+
private strikes;
|
|
120
|
+
private recent;
|
|
121
|
+
private breakerUntil;
|
|
122
|
+
private capNoticeAt;
|
|
123
|
+
private reports;
|
|
124
|
+
private allow;
|
|
125
|
+
private maintainedMinute;
|
|
126
|
+
private changes;
|
|
127
|
+
settings: PauseSettings;
|
|
128
|
+
/** Goes up whenever a pause is made here, so a caller can skip re-checking when nothing changed. */
|
|
129
|
+
get version(): number;
|
|
130
|
+
constructor(opts?: PauseBookOptions);
|
|
131
|
+
private now;
|
|
132
|
+
get size(): {
|
|
133
|
+
local: number;
|
|
134
|
+
remote: number;
|
|
135
|
+
strikes: number;
|
|
136
|
+
reports: number;
|
|
137
|
+
};
|
|
138
|
+
/** The workspace's settings, its active pauses, and pauses an admin lifted (from the config). */
|
|
139
|
+
configure(settings: Partial<PauseSettings> | null | undefined, pauses: unknown, lifted: unknown): void;
|
|
140
|
+
/** Whether the sender (address and/or user) is paused for this request. Never throws. */
|
|
141
|
+
check(who: {
|
|
142
|
+
ip?: string | null;
|
|
143
|
+
user?: string | null;
|
|
144
|
+
}, where?: {
|
|
145
|
+
path?: string;
|
|
146
|
+
llm?: boolean;
|
|
147
|
+
}): Verdict;
|
|
148
|
+
private find;
|
|
149
|
+
private allowedIp;
|
|
150
|
+
/**
|
|
151
|
+
* A finding was raised (or repeated) about a sender. Pauses the sender when the finding calls
|
|
152
|
+
* for it and the mode allows. `who` holds only what can be trusted: an address from
|
|
153
|
+
* trustedRequestIp, or the app's own user id. Returns the new pause, or null.
|
|
154
|
+
*/
|
|
155
|
+
consider(finding: MonitorFinding, who: {
|
|
156
|
+
ip?: string | null;
|
|
157
|
+
user?: string | null;
|
|
158
|
+
}): Pause | null;
|
|
159
|
+
/** New pauses to send to the workspace; taken once. */
|
|
160
|
+
takeReports(): PauseReport[];
|
|
161
|
+
/** Puts reports back after a failed send (newest kept when over the cap). */
|
|
162
|
+
returnReports(reports: PauseReport[]): void;
|
|
163
|
+
/** Every pause in force now (not dry runs), local and remote, for a deny list. */
|
|
164
|
+
active(): Pause[];
|
|
165
|
+
private isAllowlistedTarget;
|
|
166
|
+
/** Once a minute: forget expired pauses, old strikes and lifted grace periods. */
|
|
167
|
+
private maintain;
|
|
168
|
+
}
|
|
169
|
+
/** The body an app returns to a paused sender: generic, so it tells an attacker nothing about why. */
|
|
170
|
+
export declare function pausedBody(): string;
|
|
171
|
+
export {};
|