airlock-bot 0.2.35 → 0.2.37
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 -1
- package/dist/audit/api.d.ts +2 -0
- package/dist/audit/api.d.ts.map +1 -1
- package/dist/audit/api.js +3 -13
- package/dist/audit/api.js.map +1 -1
- package/dist/config/loader.d.ts.map +1 -1
- package/dist/config/loader.js +41 -1
- package/dist/config/loader.js.map +1 -1
- package/dist/config/profiles.d.ts +3 -6
- package/dist/config/profiles.d.ts.map +1 -1
- package/dist/config/profiles.js +52 -19
- package/dist/config/profiles.js.map +1 -1
- package/dist/config/schema.d.ts +368 -8
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +35 -0
- package/dist/config/schema.js.map +1 -1
- package/dist/configure-web/cli.d.ts +41 -2
- package/dist/configure-web/cli.d.ts.map +1 -1
- package/dist/configure-web/cli.js +1283 -55
- package/dist/configure-web/cli.js.map +1 -1
- package/dist/gateway.d.ts +7 -1
- package/dist/gateway.d.ts.map +1 -1
- package/dist/gateway.js +81 -26
- package/dist/gateway.js.map +1 -1
- package/dist/hitl/api.d.ts +2 -0
- package/dist/hitl/api.d.ts.map +1 -1
- package/dist/hitl/api.js +3 -13
- package/dist/hitl/api.js.map +1 -1
- package/dist/hitl/approval-dashboard.d.ts +19 -0
- package/dist/hitl/approval-dashboard.d.ts.map +1 -0
- package/dist/hitl/approval-dashboard.js +148 -0
- package/dist/hitl/approval-dashboard.js.map +1 -0
- package/dist/hitl/provider-factory.js +1 -1
- package/dist/hitl/provider-factory.js.map +1 -1
- package/dist/hitl/providers/dashboard.d.ts +4 -5
- package/dist/hitl/providers/dashboard.d.ts.map +1 -1
- package/dist/hitl/providers/dashboard.js +29 -469
- package/dist/hitl/providers/dashboard.js.map +1 -1
- package/dist/hook/api.d.ts +2 -0
- package/dist/hook/api.d.ts.map +1 -1
- package/dist/hook/api.js +3 -13
- package/dist/hook/api.js.map +1 -1
- package/dist/index.js +29 -4
- package/dist/index.js.map +1 -1
- package/dist/middleware/chain-builder.d.ts +1 -1
- package/dist/middleware/chain-builder.d.ts.map +1 -1
- package/dist/middleware/chain-builder.js +4 -2
- package/dist/middleware/chain-builder.js.map +1 -1
- package/dist/middleware/core/arg-policy.d.ts +12 -0
- package/dist/middleware/core/arg-policy.d.ts.map +1 -0
- package/dist/middleware/core/arg-policy.js +91 -0
- package/dist/middleware/core/arg-policy.js.map +1 -0
- package/dist/security/request.d.ts +14 -0
- package/dist/security/request.d.ts.map +1 -0
- package/dist/security/request.js +47 -0
- package/dist/security/request.js.map +1 -0
- package/dist/tools/api.d.ts +2 -0
- package/dist/tools/api.d.ts.map +1 -1
- package/dist/tools/api.js +3 -13
- package/dist/tools/api.js.map +1 -1
- package/dist/transport/http-server.d.ts +2 -0
- package/dist/transport/http-server.d.ts.map +1 -1
- package/dist/transport/http-server.js +9 -22
- package/dist/transport/http-server.js.map +1 -1
- package/dist/transport/sse-server.d.ts +2 -0
- package/dist/transport/sse-server.d.ts.map +1 -1
- package/dist/transport/sse-server.js +9 -26
- package/dist/transport/sse-server.js.map +1 -1
- package/examples/docker-compose.yaml +63 -0
- package/examples/docker-gateway.yaml +61 -0
- package/examples/gateway.yaml +7 -0
- package/examples/profiles.yaml +4 -2
- package/package.json +1 -1
- package/schema.json +79 -0
package/README.md
CHANGED
|
@@ -415,7 +415,7 @@ See [`examples/sandbox-presets.yaml`](examples/sandbox-presets.yaml) for a fulle
|
|
|
415
415
|
| --------------- | ------------- | ------------------------------------------------------------------------------------------------- |
|
|
416
416
|
| TUI | `tui` | Terminal UI on stderr — `[a]pprove` / `[d]eny` with `j/k` navigation via `/dev/tty` |
|
|
417
417
|
| macOS dialog | `macos` | Native approve/deny popup via `osascript` — best for local dev on Mac |
|
|
418
|
-
| Dashboard | `dashboard` |
|
|
418
|
+
| Dashboard | `dashboard` | Browser UI with live SSE updates; runs in-process or as a standalone admin dashboard |
|
|
419
419
|
| Telegram bot | `telegram` | Long-polls for replies; reply `approve ABC123` or `deny ABC123` |
|
|
420
420
|
| Slack webhook | `slack` | Incoming webhook, fire-and-forget; pair with slash commands for approvals |
|
|
421
421
|
| Generic webhook | `webhook` | POSTs `{requests, text}` JSON; configurable headers |
|
|
@@ -432,6 +432,10 @@ GET /hitl/pending — list pending approval requests
|
|
|
432
432
|
POST /hitl/approve/:id — approve a request
|
|
433
433
|
POST /hitl/deny/:id — deny a request (body: {"reason": "..."})
|
|
434
434
|
GET /audit?agent=&tool=&since=&limit= — query audit log
|
|
435
|
+
GET /events — dashboard approval event stream
|
|
436
|
+
POST /approve?code=ABC123 — approve a request by approval code
|
|
437
|
+
POST /deny?code=ABC123 — deny a request by approval code
|
|
438
|
+
GET /admin/tools — dashboard tool catalog
|
|
435
439
|
```
|
|
436
440
|
|
|
437
441
|
All management endpoints require `Authorization: Bearer <api_secret>` when `server.api_secret` is set.
|
|
@@ -465,6 +469,32 @@ sudo systemctl enable --now airlock
|
|
|
465
469
|
|
|
466
470
|
See [`airlock.service`](airlock.service) for the full unit file.
|
|
467
471
|
|
|
472
|
+
## Docker
|
|
473
|
+
|
|
474
|
+
Airlock can also run as a containerized gateway:
|
|
475
|
+
|
|
476
|
+
```bash
|
|
477
|
+
docker build -t airlock-bot .
|
|
478
|
+
mkdir -p airlock-config
|
|
479
|
+
cp examples/docker-gateway.yaml airlock-config/airlock.yaml
|
|
480
|
+
docker run --rm \
|
|
481
|
+
--env-file .env \
|
|
482
|
+
-v "$PWD/airlock-config:/config" \
|
|
483
|
+
-v airlock-data:/data \
|
|
484
|
+
-p 127.0.0.1:4111:4111 \
|
|
485
|
+
-p 127.0.0.1:4112:4112 \
|
|
486
|
+
airlock-bot
|
|
487
|
+
```
|
|
488
|
+
|
|
489
|
+
The dashboard edits `/config/airlock.yaml` and writes `/config/airlock.bak`, so
|
|
490
|
+
mount a config directory when dashboard editing is enabled.
|
|
491
|
+
|
|
492
|
+
See [`examples/docker-compose.yaml`](examples/docker-compose.yaml) and
|
|
493
|
+
[`docs/guides/docker-deploy.md`](docs/guides/docker-deploy.md) for a VPS or
|
|
494
|
+
reverse-proxy deployment. The compose example uses split mode: the gateway mounts
|
|
495
|
+
config read-only, while the dashboard mounts the same config directory read-write
|
|
496
|
+
for admin edits and approval decisions.
|
|
497
|
+
|
|
468
498
|
## License
|
|
469
499
|
|
|
470
500
|
[MIT](LICENSE) © 2026 Airlock
|
package/dist/audit/api.d.ts
CHANGED
|
@@ -3,5 +3,7 @@ import type { AuditLogger } from './logger.js';
|
|
|
3
3
|
export declare function auditApiPlugin(app: FastifyInstance, opts: {
|
|
4
4
|
auditLogger: AuditLogger;
|
|
5
5
|
secret?: string;
|
|
6
|
+
authRequired?: boolean;
|
|
7
|
+
allowedOrigins?: string[];
|
|
6
8
|
}): Promise<void>;
|
|
7
9
|
//# sourceMappingURL=api.d.ts.map
|
package/dist/audit/api.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/audit/api.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/audit/api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAI/C,wBAAsB,cAAc,CAClC,GAAG,EAAE,eAAe,EACpB,IAAI,EAAE;IACJ,WAAW,EAAE,WAAW,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B,GACA,OAAO,CAAC,IAAI,CAAC,CAmBf"}
|
package/dist/audit/api.js
CHANGED
|
@@ -1,20 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
function constantTimeEqual(a, b) {
|
|
3
|
-
const bufA = Buffer.from(a);
|
|
4
|
-
const bufB = Buffer.from(b);
|
|
5
|
-
if (bufA.length !== bufB.length)
|
|
6
|
-
return false;
|
|
7
|
-
return timingSafeEqual(bufA, bufB);
|
|
8
|
-
}
|
|
1
|
+
import { checkRequestSecurity } from '../security/request.js';
|
|
9
2
|
// eslint-disable-next-line @typescript-eslint/require-await
|
|
10
3
|
export async function auditApiPlugin(app, opts) {
|
|
11
|
-
const { auditLogger
|
|
4
|
+
const { auditLogger } = opts;
|
|
12
5
|
app.addHook('preHandler', async (request, reply) => {
|
|
13
|
-
if (!
|
|
6
|
+
if (!checkRequestSecurity(request, reply, opts)) {
|
|
14
7
|
return;
|
|
15
|
-
const auth = request.headers.authorization ?? '';
|
|
16
|
-
if (!constantTimeEqual(auth, `Bearer ${secret}`)) {
|
|
17
|
-
return reply.status(401).send({ error: 'Unauthorized' });
|
|
18
8
|
}
|
|
19
9
|
});
|
|
20
10
|
app.get('/audit', async (request, reply) => {
|
package/dist/audit/api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/audit/api.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/audit/api.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAE9D,4DAA4D;AAC5D,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,GAAoB,EACpB,IAKC;IAED,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;IAE7B,GAAG,CAAC,OAAO,CAAC,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;QACjD,IAAI,CAAC,oBAAoB,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC;YAChD,OAAO;QACT,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;QACzC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,KAA+B,CAAC;QAC9E,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,CAAC;YAChC,KAAK;YACL,IAAI;YACJ,KAAK;YACL,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG;SACzC,CAAC,CAAC;QACH,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAuB,MAAM,aAAa,CAAC;AAIjE,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAI7B,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAEnD,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CA4B/C;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,gBAAgB,EAAE,
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAuB,MAAM,aAAa,CAAC;AAIjE,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAI7B,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAEnD,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CA4B/C;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,gBAAgB,EAAE,CA4NjE"}
|
package/dist/config/loader.js
CHANGED
|
@@ -12,6 +12,7 @@ export function loadConfig(path) {
|
|
|
12
12
|
if (!result.success) {
|
|
13
13
|
throw new Error(`Invalid config at ${path}:\n${result.error.toString()}`);
|
|
14
14
|
}
|
|
15
|
+
applyProfiles(result.data);
|
|
15
16
|
const diagnostics = validateConfig(result.data);
|
|
16
17
|
for (const d of diagnostics) {
|
|
17
18
|
const ctx = d.agent ? { agent: d.agent } : {};
|
|
@@ -31,7 +32,6 @@ export function loadConfig(path) {
|
|
|
31
32
|
throw new Error(`Config validation failed with ${errors.length} error(s):\n` +
|
|
32
33
|
errors.map((e) => ` - ${e.agent ? `[${e.agent}] ` : ''}${e.message}`).join('\n'));
|
|
33
34
|
}
|
|
34
|
-
applyProfiles(result.data);
|
|
35
35
|
return result.data;
|
|
36
36
|
}
|
|
37
37
|
export function validateConfig(config) {
|
|
@@ -40,6 +40,46 @@ export function validateConfig(config) {
|
|
|
40
40
|
const builtins = getBuiltinProviders(config.providers);
|
|
41
41
|
const profileNames = new Set(Object.keys(config.profiles));
|
|
42
42
|
const sandboxPresetNames = new Set(Object.keys(config.sandbox_presets ?? {}));
|
|
43
|
+
const serverHost = config.server.host;
|
|
44
|
+
const loopbackHosts = new Set(['127.0.0.1', 'localhost', '::1']);
|
|
45
|
+
const isLoopback = loopbackHosts.has(serverHost);
|
|
46
|
+
const exposesNonMcpRoutes = config.server.expose_management_api ||
|
|
47
|
+
config.server.expose_tools_api ||
|
|
48
|
+
config.server.expose_hook_api;
|
|
49
|
+
const agentsWithoutTokens = Object.entries(config.agents)
|
|
50
|
+
.filter(([, agent]) => !agent.token)
|
|
51
|
+
.map(([agentId]) => agentId);
|
|
52
|
+
const requireAgentTokens = config.server.require_agent_tokens || !isLoopback;
|
|
53
|
+
if (!isLoopback && !config.server.auth_required) {
|
|
54
|
+
diagnostics.push({
|
|
55
|
+
level: 'error',
|
|
56
|
+
message: 'server.auth_required must be true when server.host is not loopback.',
|
|
57
|
+
suggestion: 'Set server.auth_required: true, configure server.api_secret or per-agent tokens, and put Airlock behind TLS.',
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
if (requireAgentTokens && agentsWithoutTokens.length > 0) {
|
|
61
|
+
diagnostics.push({
|
|
62
|
+
level: 'error',
|
|
63
|
+
message: 'Per-agent tokens are required, but some agents have no token.',
|
|
64
|
+
suggestion: `Add token to agents: ${agentsWithoutTokens.join(', ')}. For reverse-proxy exposure on loopback, set server.require_agent_tokens: true to keep this check enabled.`,
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
if (config.server.auth_required) {
|
|
68
|
+
if (!config.server.api_secret && agentsWithoutTokens.length > 0) {
|
|
69
|
+
diagnostics.push({
|
|
70
|
+
level: 'error',
|
|
71
|
+
message: 'server.auth_required is true, but server.api_secret is unset and some agents have no token.',
|
|
72
|
+
suggestion: `Set server.api_secret or add token to agents: ${agentsWithoutTokens.join(', ')}.`,
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
if (!config.server.api_secret && exposesNonMcpRoutes) {
|
|
76
|
+
diagnostics.push({
|
|
77
|
+
level: 'error',
|
|
78
|
+
message: 'server.auth_required is true, but non-MCP APIs are exposed without server.api_secret.',
|
|
79
|
+
suggestion: 'Set server.api_secret, or disable expose_management_api, expose_tools_api, and expose_hook_api.',
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
}
|
|
43
83
|
for (const [agentId, agent] of Object.entries(config.agents)) {
|
|
44
84
|
// Check for unknown profile references
|
|
45
85
|
for (const ref of agent.extends) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,MAAM,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGhD,MAAM,GAAG,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;AAWlC,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACxC,MAAM,MAAM,GAAY,SAAS,CAAC,GAAG,CAAC,CAAC;IACvC,MAAM,MAAM,GAAG,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAC/C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,qBAAqB,IAAI,MAAM,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IAC5E,CAAC;IACD,MAAM,WAAW,GAAG,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAChD,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;QAC5B,MAAM,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9C,MAAM,GAAG,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,SAAS,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;QAC3E,IAAI,CAAC,CAAC,KAAK,KAAK,OAAO,EAAE,CAAC;YACxB,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACtB,CAAC;aAAM,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM,EAAE,CAAC;YAC9B,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACrB,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;IACD,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC,CAAC;IAC9D,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CACb,iCAAiC,MAAM,CAAC,MAAM,cAAc;YAC1D,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CACpF,CAAC;IACJ,CAAC;IACD,
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,14 +1,11 @@
|
|
|
1
|
-
import type { AgentConfig, GatewayConfig } from './schema.js';
|
|
1
|
+
import type { AgentConfig, GatewayConfig, ProfileConfig } from './schema.js';
|
|
2
2
|
interface ResolvedPermissions {
|
|
3
3
|
allow: string[];
|
|
4
4
|
ask: string[];
|
|
5
5
|
deny: string[];
|
|
6
6
|
}
|
|
7
|
-
export declare function
|
|
8
|
-
|
|
9
|
-
ask: string[];
|
|
10
|
-
deny?: string[];
|
|
11
|
-
}>): ResolvedPermissions;
|
|
7
|
+
export declare function resolveProfiles(profiles: Record<string, ProfileConfig>): Record<string, ProfileConfig>;
|
|
8
|
+
export declare function resolveAgentPermissions(agentConfig: AgentConfig, profiles: Record<string, ProfileConfig>): ResolvedPermissions;
|
|
12
9
|
export declare function applyProfiles(config: GatewayConfig): void;
|
|
13
10
|
export {};
|
|
14
11
|
//# sourceMappingURL=profiles.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"profiles.d.ts","sourceRoot":"","sources":["../../src/config/profiles.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"profiles.d.ts","sourceRoot":"","sources":["../../src/config/profiles.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE7E,UAAU,mBAAmB;IAC3B,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,EAAE,MAAM,EAAE,CAAC;IACd,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAsBD,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,GACtC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAwC/B;AAED,wBAAgB,uBAAuB,CACrC,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,GACtC,mBAAmB,CAUrB;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAYzD"}
|
package/dist/config/profiles.js
CHANGED
|
@@ -1,33 +1,66 @@
|
|
|
1
|
-
|
|
1
|
+
function unionPermissions(...sources) {
|
|
2
2
|
const allow = new Set();
|
|
3
3
|
const ask = new Set();
|
|
4
4
|
const deny = new Set();
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
ask.add(p);
|
|
13
|
-
for (const p of profile.deny ?? [])
|
|
14
|
-
deny.add(p);
|
|
15
|
-
}
|
|
5
|
+
for (const source of sources) {
|
|
6
|
+
for (const p of source.allow)
|
|
7
|
+
allow.add(p);
|
|
8
|
+
for (const p of source.ask)
|
|
9
|
+
ask.add(p);
|
|
10
|
+
for (const p of source.deny)
|
|
11
|
+
deny.add(p);
|
|
16
12
|
}
|
|
17
|
-
// Union with agent's own allow/ask/deny
|
|
18
|
-
for (const p of agentConfig.allow)
|
|
19
|
-
allow.add(p);
|
|
20
|
-
for (const p of agentConfig.ask)
|
|
21
|
-
ask.add(p);
|
|
22
|
-
for (const p of agentConfig.deny)
|
|
23
|
-
deny.add(p);
|
|
24
13
|
return {
|
|
25
14
|
allow: Array.from(allow),
|
|
26
15
|
ask: Array.from(ask),
|
|
27
16
|
deny: Array.from(deny),
|
|
28
17
|
};
|
|
29
18
|
}
|
|
19
|
+
export function resolveProfiles(profiles) {
|
|
20
|
+
const resolved = {};
|
|
21
|
+
const resolving = new Set();
|
|
22
|
+
function resolveProfile(profileName, path) {
|
|
23
|
+
const profile = profiles[profileName];
|
|
24
|
+
if (!profile) {
|
|
25
|
+
const parentName = path.length >= 2 ? path[path.length - 2] : profileName;
|
|
26
|
+
throw new Error(`Profile "${parentName}" extends unknown profile "${profileName}".`);
|
|
27
|
+
}
|
|
28
|
+
if (resolved[profileName])
|
|
29
|
+
return resolved[profileName];
|
|
30
|
+
if (resolving.has(profileName)) {
|
|
31
|
+
const cycleStart = path.indexOf(profileName);
|
|
32
|
+
const cyclePath = path.slice(cycleStart >= 0 ? cycleStart : 0).join(' -> ');
|
|
33
|
+
throw new Error(`Profile extends cycle detected: ${cyclePath}.`);
|
|
34
|
+
}
|
|
35
|
+
resolving.add(profileName);
|
|
36
|
+
const inherited = profile.extends.map((parentName) => resolveProfile(parentName, [...path, parentName]));
|
|
37
|
+
resolving.delete(profileName);
|
|
38
|
+
const permissions = unionPermissions(...inherited, profile);
|
|
39
|
+
const next = {
|
|
40
|
+
...profile,
|
|
41
|
+
extends: [],
|
|
42
|
+
...permissions,
|
|
43
|
+
};
|
|
44
|
+
resolved[profileName] = next;
|
|
45
|
+
return next;
|
|
46
|
+
}
|
|
47
|
+
for (const profileName of Object.keys(profiles)) {
|
|
48
|
+
resolveProfile(profileName, [profileName]);
|
|
49
|
+
}
|
|
50
|
+
return resolved;
|
|
51
|
+
}
|
|
52
|
+
export function resolveAgentPermissions(agentConfig, profiles) {
|
|
53
|
+
const inherited = agentConfig.extends.map((profileName) => {
|
|
54
|
+
const profile = profiles[profileName];
|
|
55
|
+
if (!profile) {
|
|
56
|
+
throw new Error(`Agent extends unknown profile "${profileName}".`);
|
|
57
|
+
}
|
|
58
|
+
return profile;
|
|
59
|
+
});
|
|
60
|
+
return unionPermissions(...inherited, agentConfig);
|
|
61
|
+
}
|
|
30
62
|
export function applyProfiles(config) {
|
|
63
|
+
config.profiles = resolveProfiles(config.profiles);
|
|
31
64
|
for (const agent of Object.values(config.agents)) {
|
|
32
65
|
if (agent.extends.length === 0)
|
|
33
66
|
continue;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"profiles.js","sourceRoot":"","sources":["../../src/config/profiles.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"profiles.js","sourceRoot":"","sources":["../../src/config/profiles.ts"],"names":[],"mappings":"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"}
|