@neurosec/sentry 1.0.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 (77) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +118 -0
  3. package/bin/cli.js +18 -0
  4. package/bin/sentryd.js +19 -0
  5. package/dist/api.d.ts +21 -0
  6. package/dist/api.d.ts.map +1 -0
  7. package/dist/api.js +161 -0
  8. package/dist/api.js.map +1 -0
  9. package/dist/audit.d.ts +18 -0
  10. package/dist/audit.d.ts.map +1 -0
  11. package/dist/audit.js +114 -0
  12. package/dist/audit.js.map +1 -0
  13. package/dist/cli.d.ts +3 -0
  14. package/dist/cli.d.ts.map +1 -0
  15. package/dist/cli.js +255 -0
  16. package/dist/cli.js.map +1 -0
  17. package/dist/config.d.ts +54 -0
  18. package/dist/config.d.ts.map +1 -0
  19. package/dist/config.js +160 -0
  20. package/dist/config.js.map +1 -0
  21. package/dist/discovery.d.ts +5 -0
  22. package/dist/discovery.d.ts.map +1 -0
  23. package/dist/discovery.js +279 -0
  24. package/dist/discovery.js.map +1 -0
  25. package/dist/enforcement/enforcement-engine.d.ts +37 -0
  26. package/dist/enforcement/enforcement-engine.d.ts.map +1 -0
  27. package/dist/enforcement/enforcement-engine.js +325 -0
  28. package/dist/enforcement/enforcement-engine.js.map +1 -0
  29. package/dist/enforcement/file-monitor.d.ts +4 -0
  30. package/dist/enforcement/file-monitor.d.ts.map +1 -0
  31. package/dist/enforcement/file-monitor.js +114 -0
  32. package/dist/enforcement/file-monitor.js.map +1 -0
  33. package/dist/index.d.ts +2 -0
  34. package/dist/index.d.ts.map +1 -0
  35. package/dist/index.js +248 -0
  36. package/dist/index.js.map +1 -0
  37. package/dist/logger.d.ts +2 -0
  38. package/dist/logger.d.ts.map +1 -0
  39. package/dist/logger.js +17 -0
  40. package/dist/logger.js.map +1 -0
  41. package/dist/sandbox/index.d.ts +14 -0
  42. package/dist/sandbox/index.d.ts.map +1 -0
  43. package/dist/sandbox/index.js +91 -0
  44. package/dist/sandbox/index.js.map +1 -0
  45. package/dist/sandbox/linux-sandbox.d.ts +21 -0
  46. package/dist/sandbox/linux-sandbox.d.ts.map +1 -0
  47. package/dist/sandbox/linux-sandbox.js +186 -0
  48. package/dist/sandbox/linux-sandbox.js.map +1 -0
  49. package/dist/sandbox/macos-sandbox.d.ts +17 -0
  50. package/dist/sandbox/macos-sandbox.d.ts.map +1 -0
  51. package/dist/sandbox/macos-sandbox.js +145 -0
  52. package/dist/sandbox/macos-sandbox.js.map +1 -0
  53. package/dist/setup.d.ts +14 -0
  54. package/dist/setup.d.ts.map +1 -0
  55. package/dist/setup.js +220 -0
  56. package/dist/setup.js.map +1 -0
  57. package/dist/skill-authz/skill-evaluator.d.ts +20 -0
  58. package/dist/skill-authz/skill-evaluator.d.ts.map +1 -0
  59. package/dist/skill-authz/skill-evaluator.js +159 -0
  60. package/dist/skill-authz/skill-evaluator.js.map +1 -0
  61. package/dist/skill-authz/skill-scanner.d.ts +18 -0
  62. package/dist/skill-authz/skill-scanner.d.ts.map +1 -0
  63. package/dist/skill-authz/skill-scanner.js +169 -0
  64. package/dist/skill-authz/skill-scanner.js.map +1 -0
  65. package/dist/telemetry.d.ts +18 -0
  66. package/dist/telemetry.d.ts.map +1 -0
  67. package/dist/telemetry.js +106 -0
  68. package/dist/telemetry.js.map +1 -0
  69. package/dist/types.d.ts +127 -0
  70. package/dist/types.d.ts.map +1 -0
  71. package/dist/types.js +209 -0
  72. package/dist/types.js.map +1 -0
  73. package/package.json +69 -0
  74. package/scripts/install-sentry-macos.sh +238 -0
  75. package/scripts/install-sentry.sh +253 -0
  76. package/scripts/postinstall.js +191 -0
  77. package/scripts/prepack.js +33 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enforcement-engine.js","sourceRoot":"","sources":["../../src/enforcement/enforcement-engine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { TaggedProcess, FileAccessEvent } from '../types';
2
+ export declare function scanFileAccess(taggedProcesses: TaggedProcess[], onAccess: (event: Omit<FileAccessEvent, 'decision' | 'timestamp'>) => void): Promise<void>;
3
+ export declare function scanProcEnviron(taggedProcesses: TaggedProcess[]): Promise<void>;
4
+ //# sourceMappingURL=file-monitor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-monitor.d.ts","sourceRoot":"","sources":["../../src/enforcement/file-monitor.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AA0D1D,wBAAsB,cAAc,CAClC,eAAe,EAAE,aAAa,EAAE,EAChC,QAAQ,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,eAAe,EAAE,UAAU,GAAG,WAAW,CAAC,KAAK,IAAI,GACzE,OAAO,CAAC,IAAI,CAAC,CAuBf;AAED,wBAAsB,eAAe,CAAC,eAAe,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAiCrF"}
@@ -0,0 +1,114 @@
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.scanFileAccess = scanFileAccess;
7
+ exports.scanProcEnviron = scanProcEnviron;
8
+ const promises_1 = __importDefault(require("fs/promises"));
9
+ const path_1 = __importDefault(require("path"));
10
+ const logger_1 = require("../logger");
11
+ async function getProcessFds(pid) {
12
+ const fdDir = `/proc/${pid}/fd`;
13
+ const entries = [];
14
+ try {
15
+ const fds = await promises_1.default.readdir(fdDir);
16
+ for (const fd of fds) {
17
+ try {
18
+ const target = await promises_1.default.readlink(path_1.default.join(fdDir, fd));
19
+ entries.push({ fd: parseInt(fd, 10), target });
20
+ }
21
+ catch {
22
+ // race: fd closed between readdir and readlink
23
+ }
24
+ }
25
+ }
26
+ catch {
27
+ // Process exited or /proc not available
28
+ }
29
+ return entries;
30
+ }
31
+ function isSensitivePath(target) {
32
+ const normalized = target.toLowerCase();
33
+ const patterns = [
34
+ { pattern: /\.ssh[\\/]/, category: 'ssh_keys' },
35
+ { pattern: /\.aws[\\/]/, category: 'aws_credentials' },
36
+ { pattern: /\.config[\\/]gcloud/, category: 'gcloud_credentials' },
37
+ { pattern: /\.kube[\\/]/, category: 'kube_config' },
38
+ { pattern: /\.gnupg[\\/]/, category: 'gpg_keys' },
39
+ { pattern: /\.git[\\/]config/, category: 'git_config' },
40
+ { pattern: /\/etc[\\/]passwd/, category: 'passwd_file' },
41
+ { pattern: /\/etc[\\/]shadow/, category: 'shadow_file' },
42
+ { pattern: /\/etc[\\/]sudoers/, category: 'sudoers_file' },
43
+ { pattern: /\/etc[\\/]ssl[\\/]/, category: 'ssl_certs' },
44
+ { pattern: /\/var[\\/]log[\\/]auth/, category: 'auth_log' },
45
+ { pattern: /\/var[\\/]log[\\/]secure/, category: 'secure_log' },
46
+ { pattern: /token/i, category: 'token' },
47
+ { pattern: /secret/i, category: 'secret' },
48
+ ];
49
+ for (const { pattern, category } of patterns) {
50
+ if (pattern.test(normalized)) {
51
+ return { sensitive: true, category };
52
+ }
53
+ }
54
+ return null;
55
+ }
56
+ async function scanFileAccess(taggedProcesses, onAccess) {
57
+ for (const proc of taggedProcesses) {
58
+ if (!proc.sandboxed)
59
+ continue;
60
+ try {
61
+ const fds = await getProcessFds(proc.pid);
62
+ for (const fdEntry of fds) {
63
+ const sensitive = isSensitivePath(fdEntry.target);
64
+ if (sensitive) {
65
+ const isWrite = fdEntry.fd === 1 || fdEntry.fd === 2; // stdout/stderr
66
+ onAccess({
67
+ pid: proc.pid,
68
+ processPath: proc.exePath,
69
+ targetPath: fdEntry.target,
70
+ operation: isWrite ? 'write' : 'read',
71
+ frameworkId: proc.frameworkId,
72
+ });
73
+ }
74
+ }
75
+ }
76
+ catch (err) {
77
+ // process may have ended, skip
78
+ }
79
+ }
80
+ }
81
+ async function scanProcEnviron(taggedProcesses) {
82
+ const sensitivePatterns = [
83
+ { pattern: /key/i, category: 'api_key_in_env' },
84
+ { pattern: /secret/i, category: 'secret_in_env' },
85
+ { pattern: /password/i, category: 'password_in_env' },
86
+ { pattern: /token/i, category: 'token_in_env' },
87
+ { pattern: /credential/i, category: 'credential_in_env' },
88
+ ];
89
+ for (const proc of taggedProcesses) {
90
+ try {
91
+ const content = await promises_1.default.readFile(`/proc/${proc.pid}/environ`, 'utf8');
92
+ const envVars = content.split('\u0000').filter(Boolean);
93
+ for (const envVar of envVars) {
94
+ const [key, value] = envVar.split('=');
95
+ if (!key || !value)
96
+ continue;
97
+ for (const { pattern, category } of sensitivePatterns) {
98
+ if (pattern.test(key) && value.length > 0) {
99
+ logger_1.logger.warn('Sensitive env var accessible by agent', {
100
+ pid: proc.pid,
101
+ frameworkId: proc.frameworkId,
102
+ key,
103
+ category,
104
+ });
105
+ }
106
+ }
107
+ }
108
+ }
109
+ catch {
110
+ // process may have ended
111
+ }
112
+ }
113
+ }
114
+ //# sourceMappingURL=file-monitor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-monitor.js","sourceRoot":"","sources":["../../src/enforcement/file-monitor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,248 @@
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 http_1 = __importDefault(require("http"));
7
+ const promises_1 = __importDefault(require("fs/promises"));
8
+ const path_1 = __importDefault(require("path"));
9
+ const os_1 = __importDefault(require("os"));
10
+ const config_1 = require("./config");
11
+ const discovery_1 = require("./discovery");
12
+ const sandbox_1 = require("./sandbox");
13
+ const enforcement_engine_1 = require("./enforcement/enforcement-engine");
14
+ const file_monitor_1 = require("./enforcement/file-monitor");
15
+ const skill_scanner_1 = require("./skill-authz/skill-scanner");
16
+ const skill_evaluator_1 = require("./skill-authz/skill-evaluator");
17
+ const api_1 = require("./api");
18
+ const audit_1 = require("./audit");
19
+ const telemetry_1 = require("./telemetry");
20
+ const logger_1 = require("./logger");
21
+ const DEFAULT_CONFIG_PATHS = [
22
+ '/etc/neuroshield/sentry.yaml',
23
+ './config/sentry.yaml',
24
+ './sentry.yaml',
25
+ ];
26
+ class SentryDaemon {
27
+ constructor() {
28
+ this.taggedProcesses = [];
29
+ this.discoveryTimer = null;
30
+ this.healthServer = null;
31
+ this.policyVersion = '1.0.0';
32
+ this.startTime = Date.now();
33
+ this.running = false;
34
+ }
35
+ async start(configPath) {
36
+ const resolvedConfigPath = this.resolveConfigPath(configPath);
37
+ this.config = (0, config_1.loadConfig)(resolvedConfigPath);
38
+ logger_1.logger.info('NeuroShield Sentry daemon starting', {
39
+ version: this.config.sentry.version,
40
+ mode: this.config.enforcement.mode,
41
+ platform: os_1.default.platform(),
42
+ hostId: this.config.sentry.hostId,
43
+ });
44
+ await this.ensureDirectories();
45
+ this.auditLogger = new audit_1.AuditLogger(this.config);
46
+ await this.auditLogger.init();
47
+ this.enforcementEngine = new enforcement_engine_1.EnforcementEngine(this.config, this.auditLogger);
48
+ this.skillEvaluator = new skill_evaluator_1.SkillEvaluator(this.config, this.auditLogger);
49
+ this.apiServer = new api_1.SentryApiServer(this.config, () => this.taggedProcesses, () => this.enforcementEngine, () => this.skillEvaluator, () => this.policyVersion, () => this.telemetryReporter?.getLastSyncAt() ?? null);
50
+ await this.apiServer.start();
51
+ this.telemetryReporter = new telemetry_1.TelemetryReporter(this.config, () => this.apiServer.getStatus(), () => this.taggedProcesses, () => this.enforcementEngine.getRecentDecisions(), () => this.policyVersion);
52
+ this.telemetryReporter.start();
53
+ this.startHealthServer();
54
+ this.startDiscoveryLoop();
55
+ this.running = true;
56
+ logger_1.logger.info('NeuroShield Sentry daemon is operational', {
57
+ healthPort: this.config.sentry.healthPort,
58
+ apiPort: this.config.sentry.apiPort,
59
+ mode: this.config.enforcement.mode,
60
+ syncIntervalMs: this.config.neurosec.syncIntervalMs,
61
+ });
62
+ await this.writePidFile();
63
+ }
64
+ async stop() {
65
+ this.running = false;
66
+ logger_1.logger.info('Sentry daemon shutting down');
67
+ if (this.discoveryTimer) {
68
+ clearInterval(this.discoveryTimer);
69
+ this.discoveryTimer = null;
70
+ }
71
+ this.telemetryReporter?.stop();
72
+ await this.apiServer?.stop();
73
+ await this.auditLogger?.shutdown();
74
+ await this.stopHealthServer();
75
+ await this.removePidFile();
76
+ logger_1.logger.info('Sentry daemon stopped');
77
+ }
78
+ async runDiscoveryCycle() {
79
+ try {
80
+ const discovered = await (0, discovery_1.discoverProcesses)(this.config);
81
+ const previousPids = new Set(this.taggedProcesses.map(p => p.pid));
82
+ const newPids = new Set(discovered.map(p => p.pid));
83
+ for (const proc of discovered) {
84
+ if (!previousPids.has(proc.pid)) {
85
+ logger_1.logger.info('New agent process discovered', {
86
+ pid: proc.pid,
87
+ framework: proc.frameworkId,
88
+ command: proc.command.slice(0, 120),
89
+ });
90
+ }
91
+ }
92
+ const departedPids = [...previousPids].filter(p => !newPids.has(p));
93
+ for (const pid of departedPids) {
94
+ logger_1.logger.info('Agent process departed', { pid });
95
+ }
96
+ this.taggedProcesses = discovered;
97
+ // Remove sandboxes for departed processes
98
+ for (const pid of departedPids) {
99
+ try {
100
+ await (0, sandbox_1.removeSandbox)(pid);
101
+ }
102
+ catch {
103
+ // best-effort
104
+ }
105
+ }
106
+ // Apply sandbox to unsandboxed processes
107
+ if (this.config.enforcement.sandboxEnabled) {
108
+ for (const proc of this.taggedProcesses) {
109
+ if (!proc.sandboxed && proc.sandboxProfileName) {
110
+ const applied = await (0, sandbox_1.applySandbox)(proc, this.config);
111
+ if (applied) {
112
+ proc.sandboxed = true;
113
+ }
114
+ }
115
+ }
116
+ }
117
+ // Scan for sensitive file access
118
+ if (this.config.enforcement.filesystemFilterEnabled) {
119
+ await (0, file_monitor_1.scanFileAccess)(this.taggedProcesses, event => {
120
+ const decision = this.enforcementEngine.evaluateFileAccess(event);
121
+ logger_1.logger.debug('File access evaluated', {
122
+ pid: event.pid,
123
+ path: event.targetPath,
124
+ operation: event.operation,
125
+ decision: decision.action,
126
+ });
127
+ });
128
+ await (0, file_monitor_1.scanProcEnviron)(this.taggedProcesses);
129
+ }
130
+ // Scan for skills
131
+ if (this.config.skillAuthz.enabled) {
132
+ const skills = await (0, skill_scanner_1.scanSkills)(this.config, this.taggedProcesses);
133
+ if (skills.length > 0) {
134
+ logger_1.logger.info('Skills detected', { processCount: skills.length });
135
+ }
136
+ }
137
+ // Update enforcement engine with latest process state
138
+ this.enforcementEngine.updateTaggedProcesses(this.taggedProcesses);
139
+ }
140
+ catch (err) {
141
+ logger_1.logger.error('Discovery cycle failed', { err: err.message });
142
+ }
143
+ }
144
+ startDiscoveryLoop() {
145
+ const initialDelay = 2000;
146
+ setTimeout(() => {
147
+ this.runDiscoveryCycle().catch(err => {
148
+ logger_1.logger.error('Initial discovery failed', { err: err.message });
149
+ });
150
+ }, initialDelay);
151
+ this.discoveryTimer = setInterval(() => {
152
+ this.runDiscoveryCycle().catch(err => {
153
+ logger_1.logger.error('Discovery cycle failed', { err: err.message });
154
+ });
155
+ }, this.config.discovery.intervalMs);
156
+ logger_1.logger.info('Discovery loop started', { intervalMs: this.config.discovery.intervalMs });
157
+ }
158
+ startHealthServer() {
159
+ this.healthServer = http_1.default.createServer((_req, res) => {
160
+ const status = this.apiServer?.getStatus() ?? { version: 'starting' };
161
+ res.writeHead(200, { 'Content-Type': 'application/json' });
162
+ res.end(JSON.stringify({ status: 'ok', ...status }));
163
+ });
164
+ this.healthServer.listen(this.config.sentry.healthPort, '0.0.0.0', () => {
165
+ logger_1.logger.info('Health server listening', { port: this.config.sentry.healthPort });
166
+ });
167
+ }
168
+ async stopHealthServer() {
169
+ if (!this.healthServer)
170
+ return;
171
+ await new Promise((resolve, reject) => {
172
+ this.healthServer?.close(err => (err ? reject(err) : resolve()));
173
+ });
174
+ this.healthServer = null;
175
+ }
176
+ async ensureDirectories() {
177
+ const dirs = [
178
+ this.config.sentry.stateDir,
179
+ path_1.default.dirname(this.config.audit.logPath),
180
+ path_1.default.dirname(this.config.sentry.pidFilePath),
181
+ path_1.default.dirname(this.config.neurosec.tokenPath),
182
+ ];
183
+ for (const dir of dirs) {
184
+ if (dir) {
185
+ await promises_1.default.mkdir(dir, { recursive: true }).catch(() => { });
186
+ }
187
+ }
188
+ }
189
+ async writePidFile() {
190
+ try {
191
+ await promises_1.default.writeFile(this.config.sentry.pidFilePath, String(process.pid), 'utf8');
192
+ }
193
+ catch {
194
+ // non-fatal
195
+ }
196
+ }
197
+ async removePidFile() {
198
+ try {
199
+ await promises_1.default.unlink(this.config.sentry.pidFilePath);
200
+ }
201
+ catch {
202
+ // non-fatal
203
+ }
204
+ }
205
+ resolveConfigPath(cliPath) {
206
+ if (cliPath)
207
+ return cliPath;
208
+ for (const p of DEFAULT_CONFIG_PATHS) {
209
+ try {
210
+ require('fs').accessSync(p);
211
+ return p;
212
+ }
213
+ catch {
214
+ continue;
215
+ }
216
+ }
217
+ return undefined;
218
+ }
219
+ }
220
+ async function main() {
221
+ const configPath = process.argv[2]; // optional config path
222
+ const daemon = new SentryDaemon();
223
+ process.on('SIGTERM', async () => {
224
+ logger_1.logger.info('SIGTERM received');
225
+ await daemon.stop();
226
+ process.exit(0);
227
+ });
228
+ process.on('SIGINT', async () => {
229
+ logger_1.logger.info('SIGINT received');
230
+ await daemon.stop();
231
+ process.exit(0);
232
+ });
233
+ process.on('uncaughtException', err => {
234
+ logger_1.logger.error('Uncaught exception', { err: err.message, stack: err.stack });
235
+ });
236
+ process.on('unhandledRejection', reason => {
237
+ logger_1.logger.warn('Unhandled rejection', { reason });
238
+ });
239
+ try {
240
+ await daemon.start(configPath);
241
+ }
242
+ catch (err) {
243
+ logger_1.logger.error('Failed to start sentry daemon', { err: err.message });
244
+ process.exit(1);
245
+ }
246
+ }
247
+ main();
248
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;AAAA,gDAAwB;AACxB,2DAA6B;AAC7B,gDAAwB;AACxB,4CAAoB;AAEpB,qCAAoD;AAEpD,2CAAgD;AAChD,uCAAqE;AACrE,yEAAqE;AACrE,6DAA6E;AAC7E,+DAAyD;AACzD,mEAA+D;AAC/D,+BAAwC;AACxC,mCAAsC;AACtC,2CAAgD;AAChD,qCAAkC;AAElC,MAAM,oBAAoB,GAAG;IAC3B,8BAA8B;IAC9B,sBAAsB;IACtB,eAAe;CAChB,CAAC;AAEF,MAAM,YAAY;IAAlB;QAEU,oBAAe,GAAoB,EAAE,CAAC;QAMtC,mBAAc,GAA0C,IAAI,CAAC;QAC7D,iBAAY,GAAuB,IAAI,CAAC;QACxC,kBAAa,GAAG,OAAO,CAAC;QACxB,cAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,YAAO,GAAG,KAAK,CAAC;IAkO1B,CAAC;IAhOC,KAAK,CAAC,KAAK,CAAC,UAAmB;QAC7B,MAAM,kBAAkB,GAAG,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;QAC9D,IAAI,CAAC,MAAM,GAAG,IAAA,mBAAU,EAAC,kBAAkB,CAAC,CAAC;QAE7C,eAAM,CAAC,IAAI,CAAC,oCAAoC,EAAE;YAChD,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO;YACnC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI;YAClC,QAAQ,EAAE,YAAE,CAAC,QAAQ,EAAE;YACvB,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM;SAClC,CAAC,CAAC;QAEH,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAE/B,IAAI,CAAC,WAAW,GAAG,IAAI,mBAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAChD,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;QAE9B,IAAI,CAAC,iBAAiB,GAAG,IAAI,sCAAiB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QAC9E,IAAI,CAAC,cAAc,GAAG,IAAI,gCAAc,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QAExE,IAAI,CAAC,SAAS,GAAG,IAAI,qBAAe,CAClC,IAAI,CAAC,MAAM,EACX,GAAG,EAAE,CAAC,IAAI,CAAC,eAAe,EAC1B,GAAG,EAAE,CAAC,IAAI,CAAC,iBAAiB,EAC5B,GAAG,EAAE,CAAC,IAAI,CAAC,cAAc,EACzB,GAAG,EAAE,CAAC,IAAI,CAAC,aAAa,EACxB,GAAG,EAAE,CAAC,IAAI,CAAC,iBAAiB,EAAE,aAAa,EAAE,IAAI,IAAI,CACtD,CAAC;QACF,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QAE7B,IAAI,CAAC,iBAAiB,GAAG,IAAI,6BAAiB,CAC5C,IAAI,CAAC,MAAM,EACX,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,EAChC,GAAG,EAAE,CAAC,IAAI,CAAC,eAAe,EAC1B,GAAG,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,kBAAkB,EAAE,EACjD,GAAG,EAAE,CAAC,IAAI,CAAC,aAAa,CACzB,CAAC;QACF,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC;QAE/B,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAE1B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,eAAM,CAAC,IAAI,CAAC,0CAA0C,EAAE;YACtD,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU;YACzC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO;YACnC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI;YAClC,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc;SACpD,CAAC,CAAC;QAEH,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,IAAI;QACR,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACrB,eAAM,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;QAE3C,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YACnC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC7B,CAAC;QAED,IAAI,CAAC,iBAAiB,EAAE,IAAI,EAAE,CAAC;QAC/B,MAAM,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC;QAC7B,MAAM,IAAI,CAAC,WAAW,EAAE,QAAQ,EAAE,CAAC;QACnC,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC9B,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QAE3B,eAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;IACvC,CAAC;IAEO,KAAK,CAAC,iBAAiB;QAC7B,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,MAAM,IAAA,6BAAiB,EAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACxD,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACnE,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAEpD,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;gBAC9B,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;oBAChC,eAAM,CAAC,IAAI,CAAC,8BAA8B,EAAE;wBAC1C,GAAG,EAAE,IAAI,CAAC,GAAG;wBACb,SAAS,EAAE,IAAI,CAAC,WAAW;wBAC3B,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;qBACpC,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAED,MAAM,YAAY,GAAG,CAAC,GAAG,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACpE,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;gBAC/B,eAAM,CAAC,IAAI,CAAC,wBAAwB,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;YACjD,CAAC;YAED,IAAI,CAAC,eAAe,GAAG,UAAU,CAAC;YAElC,0CAA0C;YAC1C,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;gBAC/B,IAAI,CAAC;oBACH,MAAM,IAAA,uBAAa,EAAC,GAAG,CAAC,CAAC;gBAC3B,CAAC;gBAAC,MAAM,CAAC;oBACP,cAAc;gBAChB,CAAC;YACH,CAAC;YAED,yCAAyC;YACzC,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,cAAc,EAAE,CAAC;gBAC3C,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;oBACxC,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;wBAC/C,MAAM,OAAO,GAAG,MAAM,IAAA,sBAAY,EAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;wBACtD,IAAI,OAAO,EAAE,CAAC;4BACZ,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;wBACxB,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;YAED,iCAAiC;YACjC,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,uBAAuB,EAAE,CAAC;gBACpD,MAAM,IAAA,6BAAc,EAAC,IAAI,CAAC,eAAe,EAAE,KAAK,CAAC,EAAE;oBACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;oBAClE,eAAM,CAAC,KAAK,CAAC,uBAAuB,EAAE;wBACpC,GAAG,EAAE,KAAK,CAAC,GAAG;wBACd,IAAI,EAAE,KAAK,CAAC,UAAU;wBACtB,SAAS,EAAE,KAAK,CAAC,SAAS;wBAC1B,QAAQ,EAAE,QAAQ,CAAC,MAAM;qBAC1B,CAAC,CAAC;gBACL,CAAC,CAAC,CAAC;gBAEH,MAAM,IAAA,8BAAe,EAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YAC9C,CAAC;YAED,kBAAkB;YAClB,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;gBACnC,MAAM,MAAM,GAAG,MAAM,IAAA,0BAAU,EAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;gBACnE,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACtB,eAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;gBAClE,CAAC;YACH,CAAC;YAED,sDAAsD;YACtD,IAAI,CAAC,iBAAiB,CAAC,qBAAqB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACrE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,eAAM,CAAC,KAAK,CAAC,wBAAwB,EAAE,EAAE,GAAG,EAAG,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QAC1E,CAAC;IACH,CAAC;IAEO,kBAAkB;QACxB,MAAM,YAAY,GAAG,IAAI,CAAC;QAC1B,UAAU,CAAC,GAAG,EAAE;YACd,IAAI,CAAC,iBAAiB,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;gBACnC,eAAM,CAAC,KAAK,CAAC,0BAA0B,EAAE,EAAE,GAAG,EAAG,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;YAC5E,CAAC,CAAC,CAAC;QACL,CAAC,EAAE,YAAY,CAAC,CAAC;QAEjB,IAAI,CAAC,cAAc,GAAG,WAAW,CAAC,GAAG,EAAE;YACrC,IAAI,CAAC,iBAAiB,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;gBACnC,eAAM,CAAC,KAAK,CAAC,wBAAwB,EAAE,EAAE,GAAG,EAAG,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;YAC1E,CAAC,CAAC,CAAC;QACL,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QAErC,eAAM,CAAC,IAAI,CAAC,wBAAwB,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC,CAAC;IAC1F,CAAC;IAEO,iBAAiB;QACvB,IAAI,CAAC,YAAY,GAAG,cAAI,CAAC,YAAY,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;YAClD,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;YACtE,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC;YAC3D,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC;QACvD,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,SAAS,EAAE,GAAG,EAAE;YACtE,eAAM,CAAC,IAAI,CAAC,yBAAyB,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;QAClF,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,gBAAgB;QAC5B,IAAI,CAAC,IAAI,CAAC,YAAY;YAAE,OAAO;QAC/B,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC1C,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACnE,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;IAC3B,CAAC;IAEO,KAAK,CAAC,iBAAiB;QAC7B,MAAM,IAAI,GAAG;YACX,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ;YAC3B,cAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC;YACvC,cAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC;YAC5C,cAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC;SAC7C,CAAC;QAEF,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,IAAI,GAAG,EAAE,CAAC;gBACR,MAAM,kBAAE,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YAC3D,CAAC;QACH,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,YAAY;QACxB,IAAI,CAAC;YACH,MAAM,kBAAE,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;QAClF,CAAC;QAAC,MAAM,CAAC;YACP,YAAY;QACd,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,aAAa;QACzB,IAAI,CAAC;YACH,MAAM,kBAAE,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QAClD,CAAC;QAAC,MAAM,CAAC;YACP,YAAY;QACd,CAAC;IACH,CAAC;IAEO,iBAAiB,CAAC,OAAgB;QACxC,IAAI,OAAO;YAAE,OAAO,OAAO,CAAC;QAC5B,KAAK,MAAM,CAAC,IAAI,oBAAoB,EAAE,CAAC;YACrC,IAAI,CAAC;gBACH,OAAO,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;gBAC5B,OAAO,CAAC,CAAC;YACX,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS;YACX,CAAC;QACH,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;CACF;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,uBAAuB;IAE3D,MAAM,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;IAElC,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE;QAC/B,eAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAChC,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;QAC9B,eAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC/B,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,EAAE,CAAC,mBAAmB,EAAE,GAAG,CAAC,EAAE;QACpC,eAAM,CAAC,KAAK,CAAC,oBAAoB,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;IAC7E,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,MAAM,CAAC,EAAE;QACxC,eAAM,CAAC,IAAI,CAAC,qBAAqB,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IACjC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,eAAM,CAAC,KAAK,CAAC,+BAA+B,EAAE,EAAE,GAAG,EAAG,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QAC/E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const logger: import("winston").Logger;
2
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,MAAM,0BAejB,CAAC"}
package/dist/logger.js ADDED
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.logger = void 0;
4
+ const winston_1 = require("winston");
5
+ exports.logger = (0, winston_1.createLogger)({
6
+ level: process.env.LOG_LEVEL ?? 'info',
7
+ format: winston_1.format.combine(winston_1.format.timestamp(), winston_1.format.errors({ stack: true }), winston_1.format.json()),
8
+ defaultMeta: { service: 'neuroshield-sentry' },
9
+ transports: [
10
+ new winston_1.transports.Console({
11
+ format: process.env.NODE_ENV === 'development'
12
+ ? winston_1.format.combine(winston_1.format.colorize(), winston_1.format.simple())
13
+ : winston_1.format.json(),
14
+ }),
15
+ ],
16
+ });
17
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":";;;AAAA,qCAA2D;AAE9C,QAAA,MAAM,GAAG,IAAA,sBAAY,EAAC;IACjC,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,MAAM;IACtC,MAAM,EAAE,gBAAM,CAAC,OAAO,CACpB,gBAAM,CAAC,SAAS,EAAE,EAClB,gBAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAC9B,gBAAM,CAAC,IAAI,EAAE,CACd;IACD,WAAW,EAAE,EAAE,OAAO,EAAE,oBAAoB,EAAE;IAC9C,UAAU,EAAE;QACV,IAAI,oBAAU,CAAC,OAAO,CAAC;YACrB,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,aAAa;gBAC5C,CAAC,CAAC,gBAAM,CAAC,OAAO,CAAC,gBAAM,CAAC,QAAQ,EAAE,EAAE,gBAAM,CAAC,MAAM,EAAE,CAAC;gBACpD,CAAC,CAAC,gBAAM,CAAC,IAAI,EAAE;SAClB,CAAC;KACH;CACF,CAAC,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { TaggedProcess, SandboxProfile } from '../types';
2
+ import { SentryConfig } from '../config';
3
+ export interface SandboxBackend {
4
+ applySandbox(pid: number, profile: SandboxProfile, defaults: SentryConfig['sandboxDefaults']): Promise<boolean>;
5
+ removeSandbox(pid: number): Promise<boolean>;
6
+ isSandboxed(pid: number): Promise<boolean>;
7
+ getSandboxStats(pid: number): Promise<Record<string, string | number> | null>;
8
+ }
9
+ export declare function getProfileForFramework(frameworkId: string): SandboxProfile | null;
10
+ export declare function applySandbox(process: TaggedProcess, config: SentryConfig): Promise<boolean>;
11
+ export declare function removeSandbox(pid: number): Promise<boolean>;
12
+ export declare function isSandboxed(pid: number): Promise<boolean>;
13
+ export declare function getSandboxStats(pid: number): Promise<Record<string, string | number> | null>;
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sandbox/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,cAAc,EAA0B,MAAM,UAAU,CAAC;AACjF,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAKzC,MAAM,WAAW,cAAc;IAC7B,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,YAAY,CAAC,iBAAiB,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAChH,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC7C,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3C,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;CAC/E;AAyBD,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAYjF;AAED,wBAAsB,YAAY,CAAC,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,CAuBjG;AAED,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAQjE;AAED,wBAAsB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAE/D;AAED,wBAAsB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,GAAG,IAAI,CAAC,CAElG"}
@@ -0,0 +1,91 @@
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.getProfileForFramework = getProfileForFramework;
7
+ exports.applySandbox = applySandbox;
8
+ exports.removeSandbox = removeSandbox;
9
+ exports.isSandboxed = isSandboxed;
10
+ exports.getSandboxStats = getSandboxStats;
11
+ const os_1 = __importDefault(require("os"));
12
+ const types_1 = require("../types");
13
+ const logger_1 = require("../logger");
14
+ const linux_sandbox_1 = require("./linux-sandbox");
15
+ const macos_sandbox_1 = require("./macos-sandbox");
16
+ let backend = null;
17
+ function getBackend() {
18
+ if (backend)
19
+ return backend;
20
+ const platform = os_1.default.platform();
21
+ if (platform === 'linux') {
22
+ backend = new linux_sandbox_1.LinuxSandbox();
23
+ }
24
+ else if (platform === 'darwin') {
25
+ backend = new macos_sandbox_1.MacOSSandbox();
26
+ }
27
+ else {
28
+ logger_1.logger.warn('No sandbox backend for platform, using no-op', { platform });
29
+ backend = {
30
+ applySandbox: async () => false,
31
+ removeSandbox: async () => false,
32
+ isSandboxed: async () => false,
33
+ getSandboxStats: async () => null,
34
+ };
35
+ }
36
+ return backend;
37
+ }
38
+ function getProfileForFramework(frameworkId) {
39
+ for (const profile of types_1.AGENT_SANDBOX_PROFILES) {
40
+ if (profile.frameworkIds.includes(frameworkId)) {
41
+ return profile;
42
+ }
43
+ }
44
+ for (const profile of types_1.AGENT_SANDBOX_PROFILES) {
45
+ if (profile.name === 'default-restrictive') {
46
+ return profile;
47
+ }
48
+ }
49
+ return null;
50
+ }
51
+ async function applySandbox(process, config) {
52
+ const profileName = process.sandboxProfileName ?? 'default-restrictive';
53
+ const profile = types_1.AGENT_SANDBOX_PROFILES.find(p => p.name === profileName)
54
+ ?? getProfileForFramework('unknown');
55
+ if (!profile) {
56
+ logger_1.logger.warn('No sandbox profile available for process', { pid: process.pid, framework: process.frameworkId });
57
+ return false;
58
+ }
59
+ const bk = getBackend();
60
+ try {
61
+ const result = await bk.applySandbox(process.pid, profile, config.sandboxDefaults);
62
+ if (result) {
63
+ logger_1.logger.info('Sandbox applied', { pid: process.pid, framework: process.frameworkId, profile: profile.name });
64
+ }
65
+ else {
66
+ logger_1.logger.warn('Sandbox application returned false', { pid: process.pid, framework: process.frameworkId });
67
+ }
68
+ return result;
69
+ }
70
+ catch (err) {
71
+ logger_1.logger.error('Failed to apply sandbox', { pid: process.pid, framework: process.frameworkId, err: err.message });
72
+ return false;
73
+ }
74
+ }
75
+ async function removeSandbox(pid) {
76
+ const bk = getBackend();
77
+ try {
78
+ return await bk.removeSandbox(pid);
79
+ }
80
+ catch (err) {
81
+ logger_1.logger.error('Failed to remove sandbox', { pid, err: err.message });
82
+ return false;
83
+ }
84
+ }
85
+ async function isSandboxed(pid) {
86
+ return getBackend().isSandboxed(pid);
87
+ }
88
+ async function getSandboxStats(pid) {
89
+ return getBackend().getSandboxStats(pid);
90
+ }
91
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sandbox/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import { SandboxProfile } from '../types';
2
+ import { SandboxBackend } from './index';
3
+ export declare class LinuxSandbox implements SandboxBackend {
4
+ private cgroupV2;
5
+ constructor();
6
+ private detectCgroupVersion;
7
+ applySandbox(pid: number, profile: SandboxProfile, defaults: {
8
+ cpuMax: string;
9
+ memoryMax: string;
10
+ pidMax: number;
11
+ }): Promise<boolean>;
12
+ private applyCgroupV2;
13
+ private applyCgroupV1;
14
+ private addPidToCgroup;
15
+ removeSandbox(pid: number): Promise<boolean>;
16
+ isSandboxed(pid: number): Promise<boolean>;
17
+ getSandboxStats(pid: number): Promise<Record<string, string | number> | null>;
18
+ private parseMemoryBytes;
19
+ private parseCpuQuota;
20
+ }
21
+ //# sourceMappingURL=linux-sandbox.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"linux-sandbox.d.ts","sourceRoot":"","sources":["../../src/sandbox/linux-sandbox.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAMzC,qBAAa,YAAa,YAAW,cAAc;IACjD,OAAO,CAAC,QAAQ,CAAU;;IAM1B,OAAO,CAAC,mBAAmB;IAYrB,YAAY,CAChB,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,cAAc,EACvB,QAAQ,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAC9D,OAAO,CAAC,OAAO,CAAC;YAuBL,aAAa;YA2Bb,aAAa;YA+Bb,cAAc;IActB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAuB5C,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAS1C,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,GAAG,IAAI,CAAC;IA2BnF,OAAO,CAAC,gBAAgB;IAexB,OAAO,CAAC,aAAa;CAKtB"}