@agenshield/interceptor 0.6.1 → 0.7.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.
@@ -1 +1 @@
1
- {"version":3,"file":"installer.d.ts","sourceRoot":"","sources":["../src/installer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAOrD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAiBtD;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,eAAe,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,GAC3C,IAAI,CA6FN;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CA6B5C;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,OAAO,CAErC;AAED;;GAEG;AACH,wBAAgB,SAAS,IAAI,WAAW,GAAG,IAAI,CAE9C"}
1
+ {"version":3,"file":"installer.d.ts","sourceRoot":"","sources":["../src/installer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAOrD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAiBtD;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,eAAe,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,GAC3C,IAAI,CAuGN;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CA6B5C;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,OAAO,CAErC;AAED;;GAEG;AACH,wBAAgB,SAAS,IAAI,WAAW,GAAG,IAAI,CAE9C"}
@@ -6,6 +6,7 @@
6
6
  import type { AsyncClient } from '../client/http-client.js';
7
7
  import type { PolicyEvaluator } from '../policy/evaluator.js';
8
8
  import type { EventReporter } from '../events/reporter.js';
9
+ import type { InterceptorConfig } from '../config.js';
9
10
  export interface BaseInterceptorOptions {
10
11
  client: AsyncClient;
11
12
  policyEvaluator: PolicyEvaluator;
@@ -13,6 +14,8 @@ export interface BaseInterceptorOptions {
13
14
  failOpen: boolean;
14
15
  /** HTTP port used by the broker (to skip interception of broker traffic) */
15
16
  brokerHttpPort?: number;
17
+ /** Full interceptor config (for seatbelt + context) */
18
+ config?: InterceptorConfig;
16
19
  }
17
20
  export declare abstract class BaseInterceptor {
18
21
  protected client: AsyncClient;
@@ -20,6 +23,7 @@ export declare abstract class BaseInterceptor {
20
23
  protected eventReporter: EventReporter;
21
24
  protected failOpen: boolean;
22
25
  protected installed: boolean;
26
+ protected interceptorConfig?: InterceptorConfig;
23
27
  private brokerHttpPort;
24
28
  constructor(options: BaseInterceptorOptions);
25
29
  /**
@@ -38,10 +42,14 @@ export declare abstract class BaseInterceptor {
38
42
  * Check if the interceptor is installed
39
43
  */
40
44
  isInstalled(): boolean;
45
+ /**
46
+ * Build execution context from config
47
+ */
48
+ protected getBasePolicyExecutionContext(): import('@agenshield/ipc').PolicyExecutionContext | undefined;
41
49
  /**
42
50
  * Check policy and handle the result
43
51
  */
44
- protected checkPolicy(operation: string, target: string): Promise<void>;
52
+ protected checkPolicy(operation: string, target: string, context?: import('@agenshield/ipc').PolicyExecutionContext): Promise<void>;
45
53
  /**
46
54
  * Log a debug message
47
55
  */
@@ -1 +1 @@
1
- {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/interceptors/base.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAI3D,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,WAAW,CAAC;IACpB,eAAe,EAAE,eAAe,CAAC;IACjC,aAAa,EAAE,aAAa,CAAC;IAC7B,QAAQ,EAAE,OAAO,CAAC;IAClB,4EAA4E;IAC5E,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,8BAAsB,eAAe;IACnC,SAAS,CAAC,MAAM,EAAE,WAAW,CAAC;IAC9B,SAAS,CAAC,eAAe,EAAE,eAAe,CAAC;IAC3C,SAAS,CAAC,aAAa,EAAE,aAAa,CAAC;IACvC,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC5B,SAAS,CAAC,SAAS,EAAE,OAAO,CAAS;IACrC,OAAO,CAAC,cAAc,CAAS;gBAEnB,OAAO,EAAE,sBAAsB;IAQ3C;;OAEG;IACH,SAAS,CAAC,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAe3C;;OAEG;IACH,QAAQ,CAAC,OAAO,IAAI,IAAI;IAExB;;OAEG;IACH,QAAQ,CAAC,SAAS,IAAI,IAAI;IAE1B;;OAEG;IACH,WAAW,IAAI,OAAO;IAItB;;OAEG;cACa,WAAW,CACzB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC;IA8ChB;;OAEG;IACH,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;CAGvC"}
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/interceptors/base.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAItD,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,WAAW,CAAC;IACpB,eAAe,EAAE,eAAe,CAAC;IACjC,aAAa,EAAE,aAAa,CAAC;IAC7B,QAAQ,EAAE,OAAO,CAAC;IAClB,4EAA4E;IAC5E,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,uDAAuD;IACvD,MAAM,CAAC,EAAE,iBAAiB,CAAC;CAC5B;AAED,8BAAsB,eAAe;IACnC,SAAS,CAAC,MAAM,EAAE,WAAW,CAAC;IAC9B,SAAS,CAAC,eAAe,EAAE,eAAe,CAAC;IAC3C,SAAS,CAAC,aAAa,EAAE,aAAa,CAAC;IACvC,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC5B,SAAS,CAAC,SAAS,EAAE,OAAO,CAAS;IACrC,SAAS,CAAC,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IAChD,OAAO,CAAC,cAAc,CAAS;gBAEnB,OAAO,EAAE,sBAAsB;IAS3C;;OAEG;IACH,SAAS,CAAC,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAe3C;;OAEG;IACH,QAAQ,CAAC,OAAO,IAAI,IAAI;IAExB;;OAEG;IACH,QAAQ,CAAC,SAAS,IAAI,IAAI;IAE1B;;OAEG;IACH,WAAW,IAAI,OAAO;IAItB;;OAEG;IACH,SAAS,CAAC,6BAA6B,IAAI,OAAO,iBAAiB,EAAE,sBAAsB,GAAG,SAAS;IAWvG;;OAEG;cACa,WAAW,CACzB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,OAAO,iBAAiB,EAAE,sBAAsB,GACzD,OAAO,CAAC,IAAI,CAAC;IA8ChB;;OAEG;IACH,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;CAGvC"}
@@ -1,12 +1,19 @@
1
1
  /**
2
2
  * Child Process Interceptor
3
3
  *
4
- * Intercepts child_process module calls.
4
+ * Intercepts child_process module calls with synchronous policy checking
5
+ * and optional macOS seatbelt (sandbox-exec) wrapping for approved commands.
6
+ *
7
+ * ALL methods (spawn, exec, execFile, fork) now perform synchronous policy
8
+ * checks before execution. Previously, async methods would fire the original
9
+ * call immediately while the policy check ran in the background.
5
10
  */
6
11
  import { BaseInterceptor, type BaseInterceptorOptions } from './base.js';
7
12
  export declare class ChildProcessInterceptor extends BaseInterceptor {
8
13
  private syncClient;
9
14
  private _checking;
15
+ private _executing;
16
+ private profileManager;
10
17
  private originalExec;
11
18
  private originalExecSync;
12
19
  private originalSpawn;
@@ -16,6 +23,35 @@ export declare class ChildProcessInterceptor extends BaseInterceptor {
16
23
  constructor(options: BaseInterceptorOptions);
17
24
  install(): void;
18
25
  uninstall(): void;
26
+ /**
27
+ * Build execution context from config for RPC calls
28
+ */
29
+ private getPolicyExecutionContext;
30
+ /**
31
+ * Synchronous policy check via SyncClient.
32
+ * Returns the full policy result (with sandbox config) or null if broker
33
+ * is unavailable and failOpen is true.
34
+ */
35
+ private syncPolicyCheck;
36
+ /**
37
+ * Create a restrictive default sandbox config for fail-open scenarios.
38
+ * No network, minimal fs — better than running completely unsandboxed.
39
+ */
40
+ private getFailOpenSandbox;
41
+ /**
42
+ * Resolve the sandbox config to use: from policy result, fail-open default, or null.
43
+ */
44
+ private resolveSandbox;
45
+ /**
46
+ * Wrap a command with sandbox-exec if seatbelt is enabled and sandbox config is present.
47
+ * Returns modified { command, args, options } for spawn-style calls.
48
+ */
49
+ private wrapWithSeatbelt;
50
+ /**
51
+ * Wrap a shell command string with sandbox-exec.
52
+ * For exec/execSync which take a full command string.
53
+ */
54
+ private wrapCommandStringWithSeatbelt;
19
55
  private createInterceptedExec;
20
56
  private createInterceptedExecSync;
21
57
  private createInterceptedSpawn;
@@ -1 +1 @@
1
- {"version":3,"file":"child-process.d.ts","sourceRoot":"","sources":["../../src/interceptors/child-process.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,eAAe,EAAE,KAAK,sBAAsB,EAAE,MAAM,WAAW,CAAC;AASzE,qBAAa,uBAAwB,SAAQ,eAAe;IAC1D,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,YAAY,CAAyC;IAC7D,OAAO,CAAC,gBAAgB,CAA6C;IACrE,OAAO,CAAC,aAAa,CAA0C;IAC/D,OAAO,CAAC,iBAAiB,CAA8C;IACvE,OAAO,CAAC,gBAAgB,CAA6C;IACrE,OAAO,CAAC,YAAY,CAAyC;gBAEjD,OAAO,EAAE,sBAAsB;IAU3C,OAAO,IAAI,IAAI;IAsBf,SAAS,IAAI,IAAI;IAmBjB,OAAO,CAAC,qBAAqB;IAwC7B,OAAO,CAAC,yBAAyB;IAsDjC,OAAO,CAAC,sBAAsB;IAkC9B,OAAO,CAAC,0BAA0B;IA+DlC,OAAO,CAAC,yBAAyB;IAwBjC,OAAO,CAAC,qBAAqB;CA2B9B"}
1
+ {"version":3,"file":"child-process.d.ts","sourceRoot":"","sources":["../../src/interceptors/child-process.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAAE,eAAe,EAAE,KAAK,sBAAsB,EAAE,MAAM,WAAW,CAAC;AAYzE,qBAAa,uBAAwB,SAAQ,eAAe;IAC1D,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,YAAY,CAAyC;IAC7D,OAAO,CAAC,gBAAgB,CAA6C;IACrE,OAAO,CAAC,aAAa,CAA0C;IAC/D,OAAO,CAAC,iBAAiB,CAA8C;IACvE,OAAO,CAAC,gBAAgB,CAA6C;IACrE,OAAO,CAAC,YAAY,CAAyC;gBAEjD,OAAO,EAAE,sBAAsB;IAkB3C,OAAO,IAAI,IAAI;IAsBf,SAAS,IAAI,IAAI;IAmBjB;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAUjC;;;;OAIG;IACH,OAAO,CAAC,eAAe;IAkCvB;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IAgB1B;;OAEG;IACH,OAAO,CAAC,cAAc;IAWtB;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IA+CxB;;;OAGG;IACH,OAAO,CAAC,6BAA6B;IAsCrC,OAAO,CAAC,qBAAqB;IAsD7B,OAAO,CAAC,yBAAyB;IAwCjC,OAAO,CAAC,sBAAsB;IAiD9B,OAAO,CAAC,0BAA0B;IA0DlC,OAAO,CAAC,yBAAyB;IAoEjC,OAAO,CAAC,qBAAqB;CAyD9B"}
@@ -7,6 +7,10 @@ import { BaseInterceptor, type BaseInterceptorOptions } from './base.js';
7
7
  export declare class FetchInterceptor extends BaseInterceptor {
8
8
  private originalFetch;
9
9
  constructor(options: BaseInterceptorOptions);
10
+ /**
11
+ * Build execution context from config
12
+ */
13
+ private getPolicyExecutionContext;
10
14
  install(): void;
11
15
  uninstall(): void;
12
16
  private interceptedFetch;
@@ -1 +1 @@
1
- {"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../../src/interceptors/fetch.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,eAAe,EAAE,KAAK,sBAAsB,EAAE,MAAM,WAAW,CAAC;AAGzE,qBAAa,gBAAiB,SAAQ,eAAe;IACnD,OAAO,CAAC,aAAa,CAA6B;gBAEtC,OAAO,EAAE,sBAAsB;IAI3C,OAAO,IAAI,IAAI;IAYf,SAAS,IAAI,IAAI;YAQH,gBAAgB;CAiG/B"}
1
+ {"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../../src/interceptors/fetch.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,eAAe,EAAE,KAAK,sBAAsB,EAAE,MAAM,WAAW,CAAC;AAIzE,qBAAa,gBAAiB,SAAQ,eAAe;IACnD,OAAO,CAAC,aAAa,CAA6B;gBAEtC,OAAO,EAAE,sBAAsB;IAI3C;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAWjC,OAAO,IAAI,IAAI;IAYf,SAAS,IAAI,IAAI;YAQH,gBAAgB;CA+C/B"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agenshield/interceptor",
3
- "version": "0.6.1",
3
+ "version": "0.7.0",
4
4
  "type": "module",
5
5
  "description": "Node.js runtime interception via ESM loader and CJS preload",
6
6
  "main": "./index.js",
@@ -25,7 +25,7 @@
25
25
  },
26
26
  "license": "MIT",
27
27
  "dependencies": {
28
- "@agenshield/ipc": "0.6.1"
28
+ "@agenshield/ipc": "0.7.0"
29
29
  },
30
30
  "devDependencies": {
31
31
  "@types/node": "^24.0.0",
@@ -5,6 +5,7 @@
5
5
  * No caching - always checks daemon for up-to-date policy decisions.
6
6
  */
7
7
  import type { AsyncClient } from '../client/http-client.js';
8
+ import type { SandboxConfig, PolicyExecutionContext } from '@agenshield/ipc';
8
9
  export interface PolicyEvaluatorOptions {
9
10
  client: AsyncClient;
10
11
  }
@@ -12,6 +13,8 @@ export interface PolicyCheckResult {
12
13
  allowed: boolean;
13
14
  policyId?: string;
14
15
  reason?: string;
16
+ sandbox?: SandboxConfig;
17
+ executionContext?: PolicyExecutionContext;
15
18
  }
16
19
  export declare class PolicyEvaluator {
17
20
  private client;
@@ -20,6 +23,6 @@ export declare class PolicyEvaluator {
20
23
  * Check if an operation is allowed
21
24
  * Always queries the daemon for fresh policy decisions
22
25
  */
23
- check(operation: string, target: string): Promise<PolicyCheckResult>;
26
+ check(operation: string, target: string, context?: PolicyExecutionContext): Promise<PolicyCheckResult>;
24
27
  }
25
28
  //# sourceMappingURL=evaluator.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"evaluator.d.ts","sourceRoot":"","sources":["../../src/policy/evaluator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAE5D,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,WAAW,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAc;gBAEhB,OAAO,EAAE,sBAAsB;IAI3C;;;OAGG;IACG,KAAK,CACT,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,iBAAiB,CAAC;CAgB9B"}
1
+ {"version":3,"file":"evaluator.d.ts","sourceRoot":"","sources":["../../src/policy/evaluator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,KAAK,EAAE,aAAa,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAE7E,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,WAAW,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,gBAAgB,CAAC,EAAE,sBAAsB,CAAC;CAC3C;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAc;gBAEhB,OAAO,EAAE,sBAAsB;IAI3C;;;OAGG;IACG,KAAK,CACT,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,sBAAsB,GAC/B,OAAO,CAAC,iBAAiB,CAAC;CAgB9B"}