@neurosec/sentry 1.0.20 → 1.1.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/README.md +4 -0
- package/dist/api-auth.d.ts +31 -0
- package/dist/api-auth.d.ts.map +1 -0
- package/dist/api-auth.js +105 -0
- package/dist/api-auth.js.map +1 -0
- package/dist/api-auth.test.d.ts +2 -0
- package/dist/api-auth.test.d.ts.map +1 -0
- package/dist/api-auth.test.js +89 -0
- package/dist/api-auth.test.js.map +1 -0
- package/dist/api.d.ts +8 -7
- package/dist/api.d.ts.map +1 -1
- package/dist/api.js +141 -134
- package/dist/api.js.map +1 -1
- package/dist/cli.d.ts +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +107 -14
- package/dist/cli.js.map +1 -1
- package/dist/cli.test.d.ts +2 -0
- package/dist/cli.test.d.ts.map +1 -0
- package/dist/cli.test.js +68 -0
- package/dist/cli.test.js.map +1 -0
- package/dist/config.d.ts +30 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +50 -1
- package/dist/config.js.map +1 -1
- package/dist/discovery-win.d.ts +4 -0
- package/dist/discovery-win.d.ts.map +1 -0
- package/dist/discovery-win.js +153 -0
- package/dist/discovery-win.js.map +1 -0
- package/dist/discovery.d.ts.map +1 -1
- package/dist/discovery.js +23 -97
- package/dist/discovery.js.map +1 -1
- package/dist/discovery.test.js +18 -109
- package/dist/discovery.test.js.map +1 -1
- package/dist/enforcement/file-monitor.d.ts +9 -0
- package/dist/enforcement/file-monitor.d.ts.map +1 -1
- package/dist/enforcement/file-monitor.js +9 -2
- package/dist/enforcement/file-monitor.js.map +1 -1
- package/dist/enforcement/network-monitor.d.ts.map +1 -1
- package/dist/enforcement/network-monitor.js +350 -9
- package/dist/enforcement/network-monitor.js.map +1 -1
- package/dist/enforcement/network-monitor.test.d.ts +2 -0
- package/dist/enforcement/network-monitor.test.d.ts.map +1 -0
- package/dist/enforcement/network-monitor.test.js +52 -0
- package/dist/enforcement/network-monitor.test.js.map +1 -0
- package/dist/enforcement/policy-executor.d.ts +24 -1
- package/dist/enforcement/policy-executor.d.ts.map +1 -1
- package/dist/enforcement/policy-executor.js +213 -69
- package/dist/enforcement/policy-executor.js.map +1 -1
- package/dist/enforcement/policy-executor.test.d.ts +2 -0
- package/dist/enforcement/policy-executor.test.d.ts.map +1 -0
- package/dist/enforcement/policy-executor.test.js +46 -0
- package/dist/enforcement/policy-executor.test.js.map +1 -0
- package/dist/enforcement/target-validator.d.ts +37 -0
- package/dist/enforcement/target-validator.d.ts.map +1 -0
- package/dist/enforcement/target-validator.js +0 -0
- package/dist/enforcement/target-validator.js.map +1 -0
- package/dist/enforcement/target-validator.test.d.ts +2 -0
- package/dist/enforcement/target-validator.test.d.ts.map +1 -0
- package/dist/enforcement/target-validator.test.js +103 -0
- package/dist/enforcement/target-validator.test.js.map +1 -0
- package/dist/http-client.d.ts +35 -0
- package/dist/http-client.d.ts.map +1 -0
- package/dist/http-client.js +168 -0
- package/dist/http-client.js.map +1 -0
- package/dist/http-client.test.d.ts +2 -0
- package/dist/http-client.test.d.ts.map +1 -0
- package/dist/http-client.test.js +172 -0
- package/dist/http-client.test.js.map +1 -0
- package/dist/index.js +190 -114
- package/dist/index.js.map +1 -1
- package/dist/launcher.d.ts +33 -0
- package/dist/launcher.d.ts.map +1 -0
- package/dist/launcher.js +425 -0
- package/dist/launcher.js.map +1 -0
- package/dist/launcher.test.d.ts +2 -0
- package/dist/launcher.test.d.ts.map +1 -0
- package/dist/launcher.test.js +109 -0
- package/dist/launcher.test.js.map +1 -0
- package/dist/proxy/cert-manager.d.ts +24 -0
- package/dist/proxy/cert-manager.d.ts.map +1 -0
- package/dist/proxy/cert-manager.js +117 -0
- package/dist/proxy/cert-manager.js.map +1 -0
- package/dist/proxy/cert-manager.test.d.ts +2 -0
- package/dist/proxy/cert-manager.test.d.ts.map +1 -0
- package/dist/proxy/cert-manager.test.js +70 -0
- package/dist/proxy/cert-manager.test.js.map +1 -0
- package/dist/proxy/index.d.ts +61 -0
- package/dist/proxy/index.d.ts.map +1 -0
- package/dist/proxy/index.js +74 -0
- package/dist/proxy/index.js.map +1 -0
- package/dist/proxy/policy-enforcer.d.ts +30 -0
- package/dist/proxy/policy-enforcer.d.ts.map +1 -0
- package/dist/proxy/policy-enforcer.js +143 -0
- package/dist/proxy/policy-enforcer.js.map +1 -0
- package/dist/proxy/proxy-server.d.ts +42 -0
- package/dist/proxy/proxy-server.d.ts.map +1 -0
- package/dist/proxy/proxy-server.js +652 -0
- package/dist/proxy/proxy-server.js.map +1 -0
- package/dist/proxy/redaction-engine.d.ts +4 -0
- package/dist/proxy/redaction-engine.d.ts.map +1 -0
- package/dist/proxy/redaction-engine.js +50 -0
- package/dist/proxy/redaction-engine.js.map +1 -0
- package/dist/proxy/response-redaction.test.d.ts +2 -0
- package/dist/proxy/response-redaction.test.d.ts.map +1 -0
- package/dist/proxy/response-redaction.test.js +125 -0
- package/dist/proxy/response-redaction.test.js.map +1 -0
- package/dist/proxy/threat-engine.d.ts +22 -0
- package/dist/proxy/threat-engine.d.ts.map +1 -0
- package/dist/proxy/threat-engine.js +291 -0
- package/dist/proxy/threat-engine.js.map +1 -0
- package/dist/proxy/threat-engine.test.d.ts +2 -0
- package/dist/proxy/threat-engine.test.d.ts.map +1 -0
- package/dist/proxy/threat-engine.test.js +27 -0
- package/dist/proxy/threat-engine.test.js.map +1 -0
- package/dist/redirect/env-injector.d.ts +72 -0
- package/dist/redirect/env-injector.d.ts.map +1 -0
- package/dist/redirect/env-injector.js +177 -0
- package/dist/redirect/env-injector.js.map +1 -0
- package/dist/redirect/env-injector.test.d.ts +2 -0
- package/dist/redirect/env-injector.test.d.ts.map +1 -0
- package/dist/redirect/env-injector.test.js +91 -0
- package/dist/redirect/env-injector.test.js.map +1 -0
- package/dist/redirect/index.d.ts +3 -0
- package/dist/redirect/index.d.ts.map +1 -0
- package/dist/redirect/index.js +8 -0
- package/dist/redirect/index.js.map +1 -0
- package/dist/redirect/platform-redirect.d.ts +42 -0
- package/dist/redirect/platform-redirect.d.ts.map +1 -0
- package/dist/redirect/platform-redirect.js +229 -0
- package/dist/redirect/platform-redirect.js.map +1 -0
- package/dist/redirect/platform-redirect.test.d.ts +2 -0
- package/dist/redirect/platform-redirect.test.d.ts.map +1 -0
- package/dist/redirect/platform-redirect.test.js +76 -0
- package/dist/redirect/platform-redirect.test.js.map +1 -0
- package/dist/sandbox/index.d.ts +23 -2
- package/dist/sandbox/index.d.ts.map +1 -1
- package/dist/sandbox/index.js +24 -7
- package/dist/sandbox/index.js.map +1 -1
- package/dist/sandbox/linux-sandbox.d.ts +13 -2
- package/dist/sandbox/linux-sandbox.d.ts.map +1 -1
- package/dist/sandbox/linux-sandbox.js +61 -27
- package/dist/sandbox/linux-sandbox.js.map +1 -1
- package/dist/sandbox/macos-sandbox.d.ts +15 -4
- package/dist/sandbox/macos-sandbox.d.ts.map +1 -1
- package/dist/sandbox/macos-sandbox.js +36 -18
- package/dist/sandbox/macos-sandbox.js.map +1 -1
- package/dist/sandbox/sandbox-result.test.d.ts +2 -0
- package/dist/sandbox/sandbox-result.test.d.ts.map +1 -0
- package/dist/sandbox/sandbox-result.test.js +87 -0
- package/dist/sandbox/sandbox-result.test.js.map +1 -0
- package/dist/sandbox/windows-sandbox.d.ts +34 -0
- package/dist/sandbox/windows-sandbox.d.ts.map +1 -0
- package/dist/sandbox/windows-sandbox.js +161 -0
- package/dist/sandbox/windows-sandbox.js.map +1 -0
- package/dist/setup.d.ts.map +1 -1
- package/dist/setup.js +33 -43
- package/dist/setup.js.map +1 -1
- package/dist/skill-authz/skill-evaluator.d.ts +30 -0
- package/dist/skill-authz/skill-evaluator.d.ts.map +1 -1
- package/dist/skill-authz/skill-evaluator.js +161 -30
- package/dist/skill-authz/skill-evaluator.js.map +1 -1
- package/dist/skill-authz/skill-evaluator.test.d.ts +2 -0
- package/dist/skill-authz/skill-evaluator.test.d.ts.map +1 -0
- package/dist/skill-authz/skill-evaluator.test.js +127 -0
- package/dist/skill-authz/skill-evaluator.test.js.map +1 -0
- package/dist/telemetry.d.ts +2 -8
- package/dist/telemetry.d.ts.map +1 -1
- package/dist/telemetry.js +17 -147
- package/dist/telemetry.js.map +1 -1
- package/dist/types.d.ts +48 -105
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +34 -1
- package/dist/types.js.map +1 -1
- package/package.json +7 -3
- package/scripts/install-sentry-windows.ps1 +217 -0
package/README.md
CHANGED
|
@@ -40,6 +40,9 @@ sudo neuroshield-sentry install
|
|
|
40
40
|
# Check status
|
|
41
41
|
neuroshield-sentry status
|
|
42
42
|
|
|
43
|
+
# Launch an agent through Sentry's platform sandbox wrapper
|
|
44
|
+
neuroshield-sentry launch --framework=codex -- node agent.js
|
|
45
|
+
|
|
43
46
|
# View real-time enforcement decisions
|
|
44
47
|
neuroshield-sentry logs -f
|
|
45
48
|
|
|
@@ -53,6 +56,7 @@ sudo neuroshield-sentryd
|
|
|
53
56
|
|---------|-------------|
|
|
54
57
|
| `setup` | Generate sentry.yaml configuration |
|
|
55
58
|
| `install` | Install system service (systemd/launchd) |
|
|
59
|
+
| `launch` | Start an agent through Sentry's launch-time sandbox wrapper |
|
|
56
60
|
| `status` | Show daemon status and active processes |
|
|
57
61
|
| `logs` | Tail the audit log (`-f` to follow, `-n 100` for lines) |
|
|
58
62
|
| `version` | Print version |
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import http from 'http';
|
|
2
|
+
export interface LocalApiAuthOptions {
|
|
3
|
+
stateDir: string;
|
|
4
|
+
/** Endpoints (exact pathname match) that may be queried without a token. */
|
|
5
|
+
publicPaths?: ReadonlyArray<string>;
|
|
6
|
+
}
|
|
7
|
+
export declare class LocalApiAuth {
|
|
8
|
+
private token;
|
|
9
|
+
private readonly tokenBuf;
|
|
10
|
+
private readonly tokenPath;
|
|
11
|
+
private readonly publicPaths;
|
|
12
|
+
constructor(opts: LocalApiAuthOptions);
|
|
13
|
+
/** Token suitable for `Authorization: Bearer <token>`. */
|
|
14
|
+
getToken(): string;
|
|
15
|
+
getTokenPath(): string;
|
|
16
|
+
/** Rotate the on-disk token. Existing clients lose access. */
|
|
17
|
+
rotate(): string;
|
|
18
|
+
/**
|
|
19
|
+
* Returns true if the request is authorized. Anonymous reads to `publicPaths`
|
|
20
|
+
* are allowed. Everything else requires a matching Bearer token.
|
|
21
|
+
*/
|
|
22
|
+
authorize(req: http.IncomingMessage): {
|
|
23
|
+
ok: true;
|
|
24
|
+
} | {
|
|
25
|
+
ok: false;
|
|
26
|
+
reason: string;
|
|
27
|
+
};
|
|
28
|
+
private loadOrCreate;
|
|
29
|
+
private generate;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=api-auth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-auth.d.ts","sourceRoot":"","sources":["../src/api-auth.ts"],"names":[],"mappings":"AAkBA,OAAO,IAAI,MAAM,MAAM,CAAC;AAMxB,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,4EAA4E;IAC5E,WAAW,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;CACrC;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAsB;gBAEtC,IAAI,EAAE,mBAAmB;IAOrC,0DAA0D;IAC1D,QAAQ,IAAI,MAAM;IAIlB,YAAY,IAAI,MAAM;IAItB,8DAA8D;IAC9D,MAAM,IAAI,MAAM;IAOhB;;;OAGG;IACH,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,eAAe,GAAG;QAAE,EAAE,EAAE,IAAI,CAAA;KAAE,GAAG;QAAE,EAAE,EAAE,KAAK,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE;IAsBlF,OAAO,CAAC,YAAY;IAsBpB,OAAO,CAAC,QAAQ;CAIjB"}
|
package/dist/api-auth.js
ADDED
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.LocalApiAuth = void 0;
|
|
7
|
+
/**
|
|
8
|
+
* Local-API authentication for the Sentry daemon.
|
|
9
|
+
*
|
|
10
|
+
* The daemon binds an HTTP server on 127.0.0.1 for operator queries (status,
|
|
11
|
+
* processes, decisions, sandbox controls). Without auth, ANY local user can
|
|
12
|
+
* disable enforcement. We protect it with a per-host bearer token written once
|
|
13
|
+
* on first start to `${stateDir}/api.token` with 0600 permissions.
|
|
14
|
+
*
|
|
15
|
+
* - Token lifetime: stable across daemon restarts (re-read from file).
|
|
16
|
+
* - Token rotation: delete the file or call rotateLocalApiToken().
|
|
17
|
+
* - Read-only endpoints (`GET /api/v1/status`) optionally bypass auth so
|
|
18
|
+
* unprivileged health-checks still work.
|
|
19
|
+
*
|
|
20
|
+
* NOTE: This is a defense-in-depth layer. The PRIMARY protection is binding
|
|
21
|
+
* to 127.0.0.1 only — never bind to 0.0.0.0.
|
|
22
|
+
*/
|
|
23
|
+
const fs_1 = __importDefault(require("fs"));
|
|
24
|
+
const path_1 = __importDefault(require("path"));
|
|
25
|
+
const crypto_1 = require("crypto");
|
|
26
|
+
const logger_1 = require("./logger");
|
|
27
|
+
const TOKEN_FILENAME = 'api.token';
|
|
28
|
+
class LocalApiAuth {
|
|
29
|
+
constructor(opts) {
|
|
30
|
+
this.tokenPath = path_1.default.join(opts.stateDir, TOKEN_FILENAME);
|
|
31
|
+
this.token = this.loadOrCreate();
|
|
32
|
+
this.tokenBuf = Buffer.from(this.token, 'utf8');
|
|
33
|
+
this.publicPaths = new Set(opts.publicPaths ?? ['/api/v1/status', '/health']);
|
|
34
|
+
}
|
|
35
|
+
/** Token suitable for `Authorization: Bearer <token>`. */
|
|
36
|
+
getToken() {
|
|
37
|
+
return this.token;
|
|
38
|
+
}
|
|
39
|
+
getTokenPath() {
|
|
40
|
+
return this.tokenPath;
|
|
41
|
+
}
|
|
42
|
+
/** Rotate the on-disk token. Existing clients lose access. */
|
|
43
|
+
rotate() {
|
|
44
|
+
this.token = this.generate();
|
|
45
|
+
fs_1.default.writeFileSync(this.tokenPath, this.token, { mode: 0o600 });
|
|
46
|
+
logger_1.logger.info('Local API token rotated', { tokenPath: this.tokenPath });
|
|
47
|
+
return this.token;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Returns true if the request is authorized. Anonymous reads to `publicPaths`
|
|
51
|
+
* are allowed. Everything else requires a matching Bearer token.
|
|
52
|
+
*/
|
|
53
|
+
authorize(req) {
|
|
54
|
+
const url = req.url ?? '';
|
|
55
|
+
const pathname = url.split('?')[0];
|
|
56
|
+
if ((req.method ?? 'GET') === 'GET' && this.publicPaths.has(pathname)) {
|
|
57
|
+
return { ok: true };
|
|
58
|
+
}
|
|
59
|
+
const header = req.headers['authorization'];
|
|
60
|
+
if (typeof header !== 'string' || !header.toLowerCase().startsWith('bearer ')) {
|
|
61
|
+
return { ok: false, reason: 'missing_bearer' };
|
|
62
|
+
}
|
|
63
|
+
const presented = header.slice(7).trim();
|
|
64
|
+
if (presented.length !== this.tokenBuf.length)
|
|
65
|
+
return { ok: false, reason: 'token_mismatch' };
|
|
66
|
+
const presentedBuf = Buffer.from(presented, 'utf8');
|
|
67
|
+
let match = false;
|
|
68
|
+
try {
|
|
69
|
+
match = (0, crypto_1.timingSafeEqual)(presentedBuf, this.tokenBuf);
|
|
70
|
+
}
|
|
71
|
+
catch {
|
|
72
|
+
return { ok: false, reason: 'token_mismatch' };
|
|
73
|
+
}
|
|
74
|
+
return match ? { ok: true } : { ok: false, reason: 'token_mismatch' };
|
|
75
|
+
}
|
|
76
|
+
loadOrCreate() {
|
|
77
|
+
try {
|
|
78
|
+
if (fs_1.default.existsSync(this.tokenPath)) {
|
|
79
|
+
const existing = fs_1.default.readFileSync(this.tokenPath, 'utf8').trim();
|
|
80
|
+
if (existing.length >= 32)
|
|
81
|
+
return existing;
|
|
82
|
+
logger_1.logger.warn('Existing local API token is too short; regenerating', {
|
|
83
|
+
tokenPath: this.tokenPath,
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
catch (err) {
|
|
88
|
+
logger_1.logger.warn('Failed to read local API token; regenerating', {
|
|
89
|
+
tokenPath: this.tokenPath,
|
|
90
|
+
err: err.message,
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
const token = this.generate();
|
|
94
|
+
fs_1.default.mkdirSync(path_1.default.dirname(this.tokenPath), { recursive: true });
|
|
95
|
+
fs_1.default.writeFileSync(this.tokenPath, token, { mode: 0o600 });
|
|
96
|
+
logger_1.logger.info('Local API token created', { tokenPath: this.tokenPath });
|
|
97
|
+
return token;
|
|
98
|
+
}
|
|
99
|
+
generate() {
|
|
100
|
+
// 32 bytes → 64 hex chars; ample entropy for a local-only secret.
|
|
101
|
+
return (0, crypto_1.randomBytes)(32).toString('hex');
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
exports.LocalApiAuth = LocalApiAuth;
|
|
105
|
+
//# sourceMappingURL=api-auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-auth.js","sourceRoot":"","sources":["../src/api-auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-auth.test.d.ts","sourceRoot":"","sources":["../src/api-auth.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const vitest_1 = require("vitest");
|
|
7
|
+
const fs_1 = __importDefault(require("fs"));
|
|
8
|
+
const os_1 = __importDefault(require("os"));
|
|
9
|
+
const path_1 = __importDefault(require("path"));
|
|
10
|
+
const api_auth_1 = require("./api-auth");
|
|
11
|
+
function tmpStateDir() {
|
|
12
|
+
return fs_1.default.mkdtempSync(path_1.default.join(os_1.default.tmpdir(), 'sentry-auth-'));
|
|
13
|
+
}
|
|
14
|
+
function fakeReq(method, url, headers = {}) {
|
|
15
|
+
return { method, url, headers };
|
|
16
|
+
}
|
|
17
|
+
(0, vitest_1.describe)('LocalApiAuth', () => {
|
|
18
|
+
let dir;
|
|
19
|
+
(0, vitest_1.beforeEach)(() => { dir = tmpStateDir(); });
|
|
20
|
+
(0, vitest_1.it)('creates a token on first start and writes it 0600', () => {
|
|
21
|
+
const auth = new api_auth_1.LocalApiAuth({ stateDir: dir });
|
|
22
|
+
const tokenPath = auth.getTokenPath();
|
|
23
|
+
(0, vitest_1.expect)(fs_1.default.existsSync(tokenPath)).toBe(true);
|
|
24
|
+
const stat = fs_1.default.statSync(tokenPath);
|
|
25
|
+
// Mode bits: 0o600 = 384. On some platforms the higher bits may be set;
|
|
26
|
+
// we assert the world/group permissions are not granted.
|
|
27
|
+
(0, vitest_1.expect)(stat.mode & 0o077).toBe(0);
|
|
28
|
+
(0, vitest_1.expect)(auth.getToken().length).toBeGreaterThanOrEqual(32);
|
|
29
|
+
});
|
|
30
|
+
(0, vitest_1.it)('reuses the same token across instances', () => {
|
|
31
|
+
const a = new api_auth_1.LocalApiAuth({ stateDir: dir });
|
|
32
|
+
const b = new api_auth_1.LocalApiAuth({ stateDir: dir });
|
|
33
|
+
(0, vitest_1.expect)(a.getToken()).toBe(b.getToken());
|
|
34
|
+
});
|
|
35
|
+
(0, vitest_1.it)('regenerates if existing token is too short', () => {
|
|
36
|
+
fs_1.default.writeFileSync(path_1.default.join(dir, 'api.token'), 'shorty', { mode: 0o600 });
|
|
37
|
+
const auth = new api_auth_1.LocalApiAuth({ stateDir: dir });
|
|
38
|
+
(0, vitest_1.expect)(auth.getToken().length).toBeGreaterThanOrEqual(32);
|
|
39
|
+
(0, vitest_1.expect)(auth.getToken()).not.toBe('shorty');
|
|
40
|
+
});
|
|
41
|
+
(0, vitest_1.it)('allows anonymous GET to /api/v1/status', () => {
|
|
42
|
+
const auth = new api_auth_1.LocalApiAuth({ stateDir: dir });
|
|
43
|
+
(0, vitest_1.expect)(auth.authorize(fakeReq('GET', '/api/v1/status'))).toEqual({ ok: true });
|
|
44
|
+
(0, vitest_1.expect)(auth.authorize(fakeReq('GET', '/api/v1/status?refresh=1'))).toEqual({ ok: true });
|
|
45
|
+
(0, vitest_1.expect)(auth.authorize(fakeReq('GET', '/health'))).toEqual({ ok: true });
|
|
46
|
+
});
|
|
47
|
+
(0, vitest_1.it)('rejects POST to public path without token', () => {
|
|
48
|
+
const auth = new api_auth_1.LocalApiAuth({ stateDir: dir });
|
|
49
|
+
(0, vitest_1.expect)(auth.authorize(fakeReq('POST', '/api/v1/status'))).toMatchObject({ ok: false });
|
|
50
|
+
});
|
|
51
|
+
(0, vitest_1.it)('rejects request without Authorization header on protected endpoint', () => {
|
|
52
|
+
const auth = new api_auth_1.LocalApiAuth({ stateDir: dir });
|
|
53
|
+
(0, vitest_1.expect)(auth.authorize(fakeReq('GET', '/api/v1/processes'))).toEqual({ ok: false, reason: 'missing_bearer' });
|
|
54
|
+
});
|
|
55
|
+
(0, vitest_1.it)('rejects Authorization with wrong scheme', () => {
|
|
56
|
+
const auth = new api_auth_1.LocalApiAuth({ stateDir: dir });
|
|
57
|
+
(0, vitest_1.expect)(auth.authorize(fakeReq('GET', '/api/v1/processes', {
|
|
58
|
+
authorization: 'Basic xyz',
|
|
59
|
+
}))).toEqual({ ok: false, reason: 'missing_bearer' });
|
|
60
|
+
});
|
|
61
|
+
(0, vitest_1.it)('rejects wrong token', () => {
|
|
62
|
+
const auth = new api_auth_1.LocalApiAuth({ stateDir: dir });
|
|
63
|
+
(0, vitest_1.expect)(auth.authorize(fakeReq('GET', '/api/v1/processes', {
|
|
64
|
+
authorization: 'Bearer ' + 'a'.repeat(auth.getToken().length),
|
|
65
|
+
}))).toEqual({ ok: false, reason: 'token_mismatch' });
|
|
66
|
+
});
|
|
67
|
+
(0, vitest_1.it)('accepts correct token', () => {
|
|
68
|
+
const auth = new api_auth_1.LocalApiAuth({ stateDir: dir });
|
|
69
|
+
(0, vitest_1.expect)(auth.authorize(fakeReq('POST', '/api/v1/sandbox/123/disable', {
|
|
70
|
+
authorization: `Bearer ${auth.getToken()}`,
|
|
71
|
+
}))).toEqual({ ok: true });
|
|
72
|
+
});
|
|
73
|
+
(0, vitest_1.it)('rotate() generates a new token and persists it', () => {
|
|
74
|
+
const auth = new api_auth_1.LocalApiAuth({ stateDir: dir });
|
|
75
|
+
const before = auth.getToken();
|
|
76
|
+
const after = auth.rotate();
|
|
77
|
+
(0, vitest_1.expect)(after).not.toBe(before);
|
|
78
|
+
(0, vitest_1.expect)(fs_1.default.readFileSync(auth.getTokenPath(), 'utf8')).toBe(after);
|
|
79
|
+
});
|
|
80
|
+
(0, vitest_1.it)('token comparison is constant-time (timingSafeEqual semantics)', () => {
|
|
81
|
+
// We can only test the API contract — that mismatched-length presented
|
|
82
|
+
// tokens return cleanly without throwing.
|
|
83
|
+
const auth = new api_auth_1.LocalApiAuth({ stateDir: dir });
|
|
84
|
+
(0, vitest_1.expect)(auth.authorize(fakeReq('GET', '/api/v1/processes', {
|
|
85
|
+
authorization: 'Bearer x',
|
|
86
|
+
}))).toEqual({ ok: false, reason: 'token_mismatch' });
|
|
87
|
+
});
|
|
88
|
+
});
|
|
89
|
+
//# sourceMappingURL=api-auth.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-auth.test.js","sourceRoot":"","sources":["../src/api-auth.test.ts"],"names":[],"mappings":"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"}
|
package/dist/api.d.ts
CHANGED
|
@@ -2,9 +2,8 @@ import { SentryConfig } from './config';
|
|
|
2
2
|
import { TaggedProcess, SentryStatus } from './types';
|
|
3
3
|
import { EnforcementEngine } from './enforcement/enforcement-engine';
|
|
4
4
|
import { SkillEvaluator } from './skill-authz/skill-evaluator';
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import { AnomalyDetector } from './anomaly-detector';
|
|
5
|
+
import { LLMProxyServer } from './proxy/proxy-server';
|
|
6
|
+
import { PolicyEnforcer } from './proxy/policy-enforcer';
|
|
8
7
|
export declare class SentryApiServer {
|
|
9
8
|
private config;
|
|
10
9
|
private getTaggedProcesses;
|
|
@@ -12,12 +11,14 @@ export declare class SentryApiServer {
|
|
|
12
11
|
private getSkillEvaluator;
|
|
13
12
|
private getPolicyVersion;
|
|
14
13
|
private getLastSyncAt;
|
|
15
|
-
private
|
|
16
|
-
private
|
|
17
|
-
private getAnomalyDetector;
|
|
14
|
+
private getProxy;
|
|
15
|
+
private getPolicyEnforcer;
|
|
18
16
|
private server;
|
|
19
17
|
private startTime;
|
|
20
|
-
|
|
18
|
+
private auth;
|
|
19
|
+
constructor(config: SentryConfig, getTaggedProcesses: () => TaggedProcess[], getEngine: () => EnforcementEngine, getSkillEvaluator: () => SkillEvaluator, getPolicyVersion: () => string, getLastSyncAt: () => string | null, getProxy?: () => LLMProxyServer | undefined, getPolicyEnforcer?: () => PolicyEnforcer | undefined);
|
|
20
|
+
/** Returns the bearer token for use by trusted local tooling. */
|
|
21
|
+
getAuthToken(): string;
|
|
21
22
|
start(): Promise<void>;
|
|
22
23
|
stop(): Promise<void>;
|
|
23
24
|
getStatus(): SentryStatus;
|
package/dist/api.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EAAE,aAAa,EAAuB,YAAY,EAAE,MAAM,SAAS,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EAAE,aAAa,EAAuB,YAAY,EAAE,MAAM,SAAS,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAMzD,qBAAa,eAAe;IAMxB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,kBAAkB;IAC1B,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,iBAAiB;IACzB,OAAO,CAAC,gBAAgB;IACxB,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,iBAAiB;IAZ3B,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,SAAS,CAAc;IAC/B,OAAO,CAAC,IAAI,CAAe;gBAGjB,MAAM,EAAE,YAAY,EACpB,kBAAkB,EAAE,MAAM,aAAa,EAAE,EACzC,SAAS,EAAE,MAAM,iBAAiB,EAClC,iBAAiB,EAAE,MAAM,cAAc,EACvC,gBAAgB,EAAE,MAAM,MAAM,EAC9B,aAAa,EAAE,MAAM,MAAM,GAAG,IAAI,EAClC,QAAQ,GAAE,MAAM,cAAc,GAAG,SAA2B,EAC5D,iBAAiB,GAAE,MAAM,cAAc,GAAG,SAA2B;IAa/E,iEAAiE;IACjE,YAAY,IAAI,MAAM;IAIhB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAqBtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ3B,SAAS,IAAI,YAAY;YAyBX,aAAa;YA4Lb,IAAI;CAInB"}
|