@neurosec/sentry 1.0.19 → 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.
Files changed (175) hide show
  1. package/README.md +4 -0
  2. package/dist/api-auth.d.ts +31 -0
  3. package/dist/api-auth.d.ts.map +1 -0
  4. package/dist/api-auth.js +105 -0
  5. package/dist/api-auth.js.map +1 -0
  6. package/dist/api-auth.test.d.ts +2 -0
  7. package/dist/api-auth.test.d.ts.map +1 -0
  8. package/dist/api-auth.test.js +89 -0
  9. package/dist/api-auth.test.js.map +1 -0
  10. package/dist/api.d.ts +8 -7
  11. package/dist/api.d.ts.map +1 -1
  12. package/dist/api.js +141 -134
  13. package/dist/api.js.map +1 -1
  14. package/dist/cli.d.ts +1 -1
  15. package/dist/cli.d.ts.map +1 -1
  16. package/dist/cli.js +107 -14
  17. package/dist/cli.js.map +1 -1
  18. package/dist/cli.test.d.ts +2 -0
  19. package/dist/cli.test.d.ts.map +1 -0
  20. package/dist/cli.test.js +68 -0
  21. package/dist/cli.test.js.map +1 -0
  22. package/dist/config.d.ts +30 -0
  23. package/dist/config.d.ts.map +1 -1
  24. package/dist/config.js +50 -1
  25. package/dist/config.js.map +1 -1
  26. package/dist/discovery-win.d.ts +4 -0
  27. package/dist/discovery-win.d.ts.map +1 -0
  28. package/dist/discovery-win.js +153 -0
  29. package/dist/discovery-win.js.map +1 -0
  30. package/dist/discovery.d.ts.map +1 -1
  31. package/dist/discovery.js +23 -97
  32. package/dist/discovery.js.map +1 -1
  33. package/dist/discovery.test.js +18 -109
  34. package/dist/discovery.test.js.map +1 -1
  35. package/dist/enforcement/file-monitor.d.ts +9 -0
  36. package/dist/enforcement/file-monitor.d.ts.map +1 -1
  37. package/dist/enforcement/file-monitor.js +9 -2
  38. package/dist/enforcement/file-monitor.js.map +1 -1
  39. package/dist/enforcement/network-monitor.d.ts.map +1 -1
  40. package/dist/enforcement/network-monitor.js +350 -9
  41. package/dist/enforcement/network-monitor.js.map +1 -1
  42. package/dist/enforcement/network-monitor.test.d.ts +2 -0
  43. package/dist/enforcement/network-monitor.test.d.ts.map +1 -0
  44. package/dist/enforcement/network-monitor.test.js +52 -0
  45. package/dist/enforcement/network-monitor.test.js.map +1 -0
  46. package/dist/enforcement/policy-executor.d.ts +24 -1
  47. package/dist/enforcement/policy-executor.d.ts.map +1 -1
  48. package/dist/enforcement/policy-executor.js +213 -69
  49. package/dist/enforcement/policy-executor.js.map +1 -1
  50. package/dist/enforcement/policy-executor.test.d.ts +2 -0
  51. package/dist/enforcement/policy-executor.test.d.ts.map +1 -0
  52. package/dist/enforcement/policy-executor.test.js +46 -0
  53. package/dist/enforcement/policy-executor.test.js.map +1 -0
  54. package/dist/enforcement/target-validator.d.ts +37 -0
  55. package/dist/enforcement/target-validator.d.ts.map +1 -0
  56. package/dist/enforcement/target-validator.js +0 -0
  57. package/dist/enforcement/target-validator.js.map +1 -0
  58. package/dist/enforcement/target-validator.test.d.ts +2 -0
  59. package/dist/enforcement/target-validator.test.d.ts.map +1 -0
  60. package/dist/enforcement/target-validator.test.js +103 -0
  61. package/dist/enforcement/target-validator.test.js.map +1 -0
  62. package/dist/http-client.d.ts +35 -0
  63. package/dist/http-client.d.ts.map +1 -0
  64. package/dist/http-client.js +168 -0
  65. package/dist/http-client.js.map +1 -0
  66. package/dist/http-client.test.d.ts +2 -0
  67. package/dist/http-client.test.d.ts.map +1 -0
  68. package/dist/http-client.test.js +172 -0
  69. package/dist/http-client.test.js.map +1 -0
  70. package/dist/index.js +189 -113
  71. package/dist/index.js.map +1 -1
  72. package/dist/launcher.d.ts +33 -0
  73. package/dist/launcher.d.ts.map +1 -0
  74. package/dist/launcher.js +425 -0
  75. package/dist/launcher.js.map +1 -0
  76. package/dist/launcher.test.d.ts +2 -0
  77. package/dist/launcher.test.d.ts.map +1 -0
  78. package/dist/launcher.test.js +109 -0
  79. package/dist/launcher.test.js.map +1 -0
  80. package/dist/proxy/cert-manager.d.ts +24 -0
  81. package/dist/proxy/cert-manager.d.ts.map +1 -0
  82. package/dist/proxy/cert-manager.js +117 -0
  83. package/dist/proxy/cert-manager.js.map +1 -0
  84. package/dist/proxy/cert-manager.test.d.ts +2 -0
  85. package/dist/proxy/cert-manager.test.d.ts.map +1 -0
  86. package/dist/proxy/cert-manager.test.js +70 -0
  87. package/dist/proxy/cert-manager.test.js.map +1 -0
  88. package/dist/proxy/index.d.ts +61 -0
  89. package/dist/proxy/index.d.ts.map +1 -0
  90. package/dist/proxy/index.js +74 -0
  91. package/dist/proxy/index.js.map +1 -0
  92. package/dist/proxy/policy-enforcer.d.ts +30 -0
  93. package/dist/proxy/policy-enforcer.d.ts.map +1 -0
  94. package/dist/proxy/policy-enforcer.js +143 -0
  95. package/dist/proxy/policy-enforcer.js.map +1 -0
  96. package/dist/proxy/proxy-server.d.ts +42 -0
  97. package/dist/proxy/proxy-server.d.ts.map +1 -0
  98. package/dist/proxy/proxy-server.js +652 -0
  99. package/dist/proxy/proxy-server.js.map +1 -0
  100. package/dist/proxy/redaction-engine.d.ts +4 -0
  101. package/dist/proxy/redaction-engine.d.ts.map +1 -0
  102. package/dist/proxy/redaction-engine.js +50 -0
  103. package/dist/proxy/redaction-engine.js.map +1 -0
  104. package/dist/proxy/response-redaction.test.d.ts +2 -0
  105. package/dist/proxy/response-redaction.test.d.ts.map +1 -0
  106. package/dist/proxy/response-redaction.test.js +125 -0
  107. package/dist/proxy/response-redaction.test.js.map +1 -0
  108. package/dist/proxy/threat-engine.d.ts +22 -0
  109. package/dist/proxy/threat-engine.d.ts.map +1 -0
  110. package/dist/proxy/threat-engine.js +291 -0
  111. package/dist/proxy/threat-engine.js.map +1 -0
  112. package/dist/proxy/threat-engine.test.d.ts +2 -0
  113. package/dist/proxy/threat-engine.test.d.ts.map +1 -0
  114. package/dist/proxy/threat-engine.test.js +27 -0
  115. package/dist/proxy/threat-engine.test.js.map +1 -0
  116. package/dist/redirect/env-injector.d.ts +72 -0
  117. package/dist/redirect/env-injector.d.ts.map +1 -0
  118. package/dist/redirect/env-injector.js +177 -0
  119. package/dist/redirect/env-injector.js.map +1 -0
  120. package/dist/redirect/env-injector.test.d.ts +2 -0
  121. package/dist/redirect/env-injector.test.d.ts.map +1 -0
  122. package/dist/redirect/env-injector.test.js +91 -0
  123. package/dist/redirect/env-injector.test.js.map +1 -0
  124. package/dist/redirect/index.d.ts +3 -0
  125. package/dist/redirect/index.d.ts.map +1 -0
  126. package/dist/redirect/index.js +8 -0
  127. package/dist/redirect/index.js.map +1 -0
  128. package/dist/redirect/platform-redirect.d.ts +42 -0
  129. package/dist/redirect/platform-redirect.d.ts.map +1 -0
  130. package/dist/redirect/platform-redirect.js +229 -0
  131. package/dist/redirect/platform-redirect.js.map +1 -0
  132. package/dist/redirect/platform-redirect.test.d.ts +2 -0
  133. package/dist/redirect/platform-redirect.test.d.ts.map +1 -0
  134. package/dist/redirect/platform-redirect.test.js +76 -0
  135. package/dist/redirect/platform-redirect.test.js.map +1 -0
  136. package/dist/sandbox/index.d.ts +23 -2
  137. package/dist/sandbox/index.d.ts.map +1 -1
  138. package/dist/sandbox/index.js +24 -7
  139. package/dist/sandbox/index.js.map +1 -1
  140. package/dist/sandbox/linux-sandbox.d.ts +13 -2
  141. package/dist/sandbox/linux-sandbox.d.ts.map +1 -1
  142. package/dist/sandbox/linux-sandbox.js +61 -27
  143. package/dist/sandbox/linux-sandbox.js.map +1 -1
  144. package/dist/sandbox/macos-sandbox.d.ts +15 -4
  145. package/dist/sandbox/macos-sandbox.d.ts.map +1 -1
  146. package/dist/sandbox/macos-sandbox.js +36 -18
  147. package/dist/sandbox/macos-sandbox.js.map +1 -1
  148. package/dist/sandbox/sandbox-result.test.d.ts +2 -0
  149. package/dist/sandbox/sandbox-result.test.d.ts.map +1 -0
  150. package/dist/sandbox/sandbox-result.test.js +87 -0
  151. package/dist/sandbox/sandbox-result.test.js.map +1 -0
  152. package/dist/sandbox/windows-sandbox.d.ts +34 -0
  153. package/dist/sandbox/windows-sandbox.d.ts.map +1 -0
  154. package/dist/sandbox/windows-sandbox.js +161 -0
  155. package/dist/sandbox/windows-sandbox.js.map +1 -0
  156. package/dist/setup.d.ts.map +1 -1
  157. package/dist/setup.js +33 -43
  158. package/dist/setup.js.map +1 -1
  159. package/dist/skill-authz/skill-evaluator.d.ts +30 -0
  160. package/dist/skill-authz/skill-evaluator.d.ts.map +1 -1
  161. package/dist/skill-authz/skill-evaluator.js +161 -30
  162. package/dist/skill-authz/skill-evaluator.js.map +1 -1
  163. package/dist/skill-authz/skill-evaluator.test.d.ts +2 -0
  164. package/dist/skill-authz/skill-evaluator.test.d.ts.map +1 -0
  165. package/dist/skill-authz/skill-evaluator.test.js +127 -0
  166. package/dist/skill-authz/skill-evaluator.test.js.map +1 -0
  167. package/dist/telemetry.d.ts.map +1 -1
  168. package/dist/telemetry.js +16 -44
  169. package/dist/telemetry.js.map +1 -1
  170. package/dist/types.d.ts +48 -105
  171. package/dist/types.d.ts.map +1 -1
  172. package/dist/types.js +34 -1
  173. package/dist/types.js.map +1 -1
  174. package/package.json +7 -3
  175. 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"}
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=api-auth.test.d.ts.map
@@ -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 { AgentRegistry } from './agent-registry';
6
- import { ActionLogger } from './action-logger';
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 getAgentRegistry;
16
- private getActionLogger;
17
- private getAnomalyDetector;
14
+ private getProxy;
15
+ private getPolicyEnforcer;
18
16
  private server;
19
17
  private startTime;
20
- constructor(config: SentryConfig, getTaggedProcesses: () => TaggedProcess[], getEngine: () => EnforcementEngine, getSkillEvaluator: () => SkillEvaluator, getPolicyVersion: () => string, getLastSyncAt: () => string | null, getAgentRegistry: () => AgentRegistry, getActionLogger: () => ActionLogger, getAnomalyDetector: () => AnomalyDetector);
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,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAGrD,qBAAa,eAAe;IAKxB,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,gBAAgB;IACxB,OAAO,CAAC,eAAe;IACvB,OAAO,CAAC,kBAAkB;IAZ5B,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,SAAS,CAAc;gBAGrB,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,gBAAgB,EAAE,MAAM,aAAa,EACrC,eAAe,EAAE,MAAM,YAAY,EACnC,kBAAkB,EAAE,MAAM,eAAe;IAG7C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAqBtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ3B,SAAS,IAAI,YAAY;YAmBX,aAAa;YA2Ob,IAAI;CAInB"}
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"}