@agenshield/broker 0.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/LICENSE +201 -0
- package/README.md +141 -0
- package/audit/logger.d.ts +69 -0
- package/audit/logger.d.ts.map +1 -0
- package/client/broker-client.d.ts +91 -0
- package/client/broker-client.d.ts.map +1 -0
- package/client/index.d.ts +8 -0
- package/client/index.d.ts.map +1 -0
- package/client/index.js +222 -0
- package/client/shield-client.d.ts +8 -0
- package/client/shield-client.d.ts.map +1 -0
- package/client/shield-client.js +410 -0
- package/handlers/exec.d.ts +13 -0
- package/handlers/exec.d.ts.map +1 -0
- package/handlers/file.d.ts +20 -0
- package/handlers/file.d.ts.map +1 -0
- package/handlers/http.d.ts +9 -0
- package/handlers/http.d.ts.map +1 -0
- package/handlers/index.d.ts +12 -0
- package/handlers/index.d.ts.map +1 -0
- package/handlers/open-url.d.ts +9 -0
- package/handlers/open-url.d.ts.map +1 -0
- package/handlers/ping.d.ts +9 -0
- package/handlers/ping.d.ts.map +1 -0
- package/handlers/secret-inject.d.ts +9 -0
- package/handlers/secret-inject.d.ts.map +1 -0
- package/handlers/skill-install.d.ts +17 -0
- package/handlers/skill-install.d.ts.map +1 -0
- package/handlers/types.d.ts +28 -0
- package/handlers/types.d.ts.map +1 -0
- package/http-fallback.d.ts +54 -0
- package/http-fallback.d.ts.map +1 -0
- package/index.d.ts +18 -0
- package/index.d.ts.map +1 -0
- package/index.js +2636 -0
- package/main.d.ts +8 -0
- package/main.d.ts.map +1 -0
- package/main.js +2136 -0
- package/package.json +34 -0
- package/policies/builtin.d.ts +15 -0
- package/policies/builtin.d.ts.map +1 -0
- package/policies/command-allowlist.d.ts +62 -0
- package/policies/command-allowlist.d.ts.map +1 -0
- package/policies/enforcer.d.ts +98 -0
- package/policies/enforcer.d.ts.map +1 -0
- package/policies/index.d.ts +8 -0
- package/policies/index.d.ts.map +1 -0
- package/seatbelt/generator.d.ts +39 -0
- package/seatbelt/generator.d.ts.map +1 -0
- package/seatbelt/templates.d.ts +36 -0
- package/seatbelt/templates.d.ts.map +1 -0
- package/secrets/vault.d.ts +67 -0
- package/secrets/vault.d.ts.map +1 -0
- package/server.d.ts +54 -0
- package/server.d.ts.map +1 -0
- package/types.d.ts +285 -0
- package/types.d.ts.map +1 -0
package/package.json
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@agenshield/broker",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"description": "AgenShield broker daemon with Unix socket and HTTP fallback",
|
|
6
|
+
"main": "./index.js",
|
|
7
|
+
"types": "./index.d.ts",
|
|
8
|
+
"bin": {
|
|
9
|
+
"agenshield-broker": "./main.js",
|
|
10
|
+
"shield-client": "./client/shield-client.js"
|
|
11
|
+
},
|
|
12
|
+
"exports": {
|
|
13
|
+
"./package.json": "./package.json",
|
|
14
|
+
".": {
|
|
15
|
+
"types": "./index.d.ts",
|
|
16
|
+
"import": "./index.js",
|
|
17
|
+
"default": "./index.js"
|
|
18
|
+
},
|
|
19
|
+
"./client": {
|
|
20
|
+
"types": "./client/index.d.ts",
|
|
21
|
+
"import": "./client/index.js",
|
|
22
|
+
"default": "./client/index.js"
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
"license": "MIT",
|
|
26
|
+
"dependencies": {
|
|
27
|
+
"@agenshield/ipc": "0.1.0"
|
|
28
|
+
},
|
|
29
|
+
"devDependencies": {
|
|
30
|
+
"@types/node": "^24.0.0",
|
|
31
|
+
"tsx": "^4.21.0",
|
|
32
|
+
"typescript": "^5.9.3"
|
|
33
|
+
}
|
|
34
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Built-in Security Policies
|
|
3
|
+
*
|
|
4
|
+
* Default policies that ship with AgenShield.
|
|
5
|
+
*/
|
|
6
|
+
import type { PolicyConfig, PolicyRule } from './enforcer.js';
|
|
7
|
+
/**
|
|
8
|
+
* Built-in policy rules
|
|
9
|
+
*/
|
|
10
|
+
export declare const BuiltinPolicies: PolicyRule[];
|
|
11
|
+
/**
|
|
12
|
+
* Get default policy configuration
|
|
13
|
+
*/
|
|
14
|
+
export declare function getDefaultPolicies(): PolicyConfig;
|
|
15
|
+
//# sourceMappingURL=builtin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"builtin.d.ts","sourceRoot":"","sources":["../../src/policies/builtin.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE9D;;GAEG;AACH,eAAO,MAAM,eAAe,EAAE,UAAU,EAyLvC,CAAC;AAEF;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,YAAY,CAgCjD"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Command Allowlist Manager
|
|
3
|
+
*
|
|
4
|
+
* Manages both static (builtin) and dynamic (admin-configured) allowed commands.
|
|
5
|
+
* Dynamic commands are persisted to /opt/agenshield/config/allowed-commands.json.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Dynamic allowed command entry
|
|
9
|
+
*/
|
|
10
|
+
export interface AllowedCommand {
|
|
11
|
+
name: string;
|
|
12
|
+
paths: string[];
|
|
13
|
+
addedAt: string;
|
|
14
|
+
addedBy: string;
|
|
15
|
+
category?: string;
|
|
16
|
+
}
|
|
17
|
+
export declare class CommandAllowlist {
|
|
18
|
+
private configPath;
|
|
19
|
+
private dynamicCommands;
|
|
20
|
+
constructor(configPath: string);
|
|
21
|
+
/**
|
|
22
|
+
* Load dynamic commands from disk
|
|
23
|
+
*/
|
|
24
|
+
load(): void;
|
|
25
|
+
/**
|
|
26
|
+
* Persist dynamic commands to disk
|
|
27
|
+
*/
|
|
28
|
+
save(): void;
|
|
29
|
+
/**
|
|
30
|
+
* Add a dynamic command
|
|
31
|
+
*/
|
|
32
|
+
add(cmd: AllowedCommand): void;
|
|
33
|
+
/**
|
|
34
|
+
* Remove a dynamic command
|
|
35
|
+
*/
|
|
36
|
+
remove(name: string): boolean;
|
|
37
|
+
/**
|
|
38
|
+
* Get a dynamic command by name
|
|
39
|
+
*/
|
|
40
|
+
get(name: string): AllowedCommand | undefined;
|
|
41
|
+
/**
|
|
42
|
+
* List all commands (builtin + dynamic)
|
|
43
|
+
*/
|
|
44
|
+
list(): Array<AllowedCommand & {
|
|
45
|
+
builtin: boolean;
|
|
46
|
+
}>;
|
|
47
|
+
/**
|
|
48
|
+
* List only dynamic commands
|
|
49
|
+
*/
|
|
50
|
+
listDynamic(): AllowedCommand[];
|
|
51
|
+
/**
|
|
52
|
+
* Check if a command name conflicts with a builtin
|
|
53
|
+
*/
|
|
54
|
+
isBuiltin(name: string): boolean;
|
|
55
|
+
/**
|
|
56
|
+
* Resolve a command name to an absolute path.
|
|
57
|
+
* Checks builtin commands first, then dynamic commands.
|
|
58
|
+
* Returns null if the command is not allowed.
|
|
59
|
+
*/
|
|
60
|
+
resolve(command: string): string | null;
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=command-allowlist.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-allowlist.d.ts","sourceRoot":"","sources":["../../src/policies/command-allowlist.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAiDD,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,eAAe,CAA0C;gBAErD,UAAU,EAAE,MAAM;IAK9B;;OAEG;IACH,IAAI,IAAI,IAAI;IAkBZ;;OAEG;IACH,IAAI,IAAI,IAAI;IAcZ;;OAEG;IACH,GAAG,CAAC,GAAG,EAAE,cAAc,GAAG,IAAI;IAK9B;;OAEG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAQ7B;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAI7C;;OAEG;IACH,IAAI,IAAI,KAAK,CAAC,cAAc,GAAG;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;IAsBpD;;OAEG;IACH,WAAW,IAAI,cAAc,EAAE;IAI/B;;OAEG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIhC;;;;OAIG;IACH,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;CAmCxC"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Policy Enforcer
|
|
3
|
+
*
|
|
4
|
+
* Evaluates operations against configured policies.
|
|
5
|
+
*/
|
|
6
|
+
import type { HandlerContext } from '../types.js';
|
|
7
|
+
/**
|
|
8
|
+
* Policy rule definition
|
|
9
|
+
*/
|
|
10
|
+
export interface PolicyRule {
|
|
11
|
+
id: string;
|
|
12
|
+
name: string;
|
|
13
|
+
action: 'allow' | 'deny' | 'approval';
|
|
14
|
+
target: 'skill' | 'command' | 'url';
|
|
15
|
+
operations: string[];
|
|
16
|
+
patterns: string[];
|
|
17
|
+
enabled: boolean;
|
|
18
|
+
priority: number;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Policy check result
|
|
22
|
+
*/
|
|
23
|
+
export interface PolicyCheckResult {
|
|
24
|
+
allowed: boolean;
|
|
25
|
+
policyId?: string;
|
|
26
|
+
reason?: string;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Policy configuration
|
|
30
|
+
*/
|
|
31
|
+
export interface PolicyConfig {
|
|
32
|
+
version: string;
|
|
33
|
+
defaultAction: 'allow' | 'deny';
|
|
34
|
+
rules: PolicyRule[];
|
|
35
|
+
fsConstraints?: {
|
|
36
|
+
allowedPaths: string[];
|
|
37
|
+
deniedPatterns: string[];
|
|
38
|
+
};
|
|
39
|
+
networkConstraints?: {
|
|
40
|
+
allowedHosts: string[];
|
|
41
|
+
deniedHosts: string[];
|
|
42
|
+
allowedPorts: number[];
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
export interface PolicyEnforcerOptions {
|
|
46
|
+
policiesPath: string;
|
|
47
|
+
defaultPolicies: PolicyConfig;
|
|
48
|
+
failOpen: boolean;
|
|
49
|
+
}
|
|
50
|
+
export declare class PolicyEnforcer {
|
|
51
|
+
private policies;
|
|
52
|
+
private policiesPath;
|
|
53
|
+
private failOpen;
|
|
54
|
+
private lastLoad;
|
|
55
|
+
private reloadInterval;
|
|
56
|
+
constructor(options: PolicyEnforcerOptions);
|
|
57
|
+
/**
|
|
58
|
+
* Load policies from disk
|
|
59
|
+
*/
|
|
60
|
+
private loadPolicies;
|
|
61
|
+
/**
|
|
62
|
+
* Maybe reload policies if stale
|
|
63
|
+
*/
|
|
64
|
+
private maybeReload;
|
|
65
|
+
/**
|
|
66
|
+
* Check if an operation is allowed
|
|
67
|
+
*/
|
|
68
|
+
check(operation: string, params: Record<string, unknown>, context: HandlerContext): Promise<PolicyCheckResult>;
|
|
69
|
+
/**
|
|
70
|
+
* Extract target from operation params
|
|
71
|
+
*/
|
|
72
|
+
private extractTarget;
|
|
73
|
+
/**
|
|
74
|
+
* Check if target matches any patterns
|
|
75
|
+
*/
|
|
76
|
+
private matchesPatterns;
|
|
77
|
+
/**
|
|
78
|
+
* Match a single pattern (supports glob-like matching)
|
|
79
|
+
*/
|
|
80
|
+
private matchPattern;
|
|
81
|
+
/**
|
|
82
|
+
* Check operation-specific constraints
|
|
83
|
+
*/
|
|
84
|
+
private checkConstraints;
|
|
85
|
+
/**
|
|
86
|
+
* Get all configured policies
|
|
87
|
+
*/
|
|
88
|
+
getPolicies(): PolicyConfig;
|
|
89
|
+
/**
|
|
90
|
+
* Add a policy rule at runtime
|
|
91
|
+
*/
|
|
92
|
+
addRule(rule: PolicyRule): void;
|
|
93
|
+
/**
|
|
94
|
+
* Remove a policy rule
|
|
95
|
+
*/
|
|
96
|
+
removeRule(id: string): boolean;
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=enforcer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enforcer.d.ts","sourceRoot":"","sources":["../../src/policies/enforcer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,UAAU,CAAC;IACtC,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,KAAK,CAAC;IACpC,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,OAAO,GAAG,MAAM,CAAC;IAChC,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,aAAa,CAAC,EAAE;QACd,YAAY,EAAE,MAAM,EAAE,CAAC;QACvB,cAAc,EAAE,MAAM,EAAE,CAAC;KAC1B,CAAC;IACF,kBAAkB,CAAC,EAAE;QACnB,YAAY,EAAE,MAAM,EAAE,CAAC;QACvB,WAAW,EAAE,MAAM,EAAE,CAAC;QACtB,YAAY,EAAE,MAAM,EAAE,CAAC;KACxB,CAAC;CACH;AAED,MAAM,WAAW,qBAAqB;IACpC,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,YAAY,CAAC;IAC9B,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAe;IAC/B,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAU;IAC1B,OAAO,CAAC,QAAQ,CAAa;IAC7B,OAAO,CAAC,cAAc,CAAiB;gBAE3B,OAAO,EAAE,qBAAqB;IAQ1C;;OAEG;IACH,OAAO,CAAC,YAAY;IA4CpB;;OAEG;IACH,OAAO,CAAC,WAAW;IAMnB;;OAEG;IACG,KAAK,CACT,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,iBAAiB,CAAC;IAuD7B;;OAEG;IACH,OAAO,CAAC,aAAa;IAmBrB;;OAEG;IACH,OAAO,CAAC,eAAe;IASvB;;OAEG;IACH,OAAO,CAAC,YAAY;IAapB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IA8GxB;;OAEG;IACH,WAAW,IAAI,YAAY;IAK3B;;OAEG;IACH,OAAO,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAK/B;;OAEG;IACH,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;CAQhC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Policy exports
|
|
3
|
+
*/
|
|
4
|
+
export { PolicyEnforcer } from './enforcer.js';
|
|
5
|
+
export { BuiltinPolicies, getDefaultPolicies } from './builtin.js';
|
|
6
|
+
export { CommandAllowlist } from './command-allowlist.js';
|
|
7
|
+
export type { AllowedCommand } from './command-allowlist.js';
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/policies/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,YAAY,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Seatbelt Profile Generator
|
|
3
|
+
*
|
|
4
|
+
* Generates macOS Seatbelt (sandbox-exec) profiles.
|
|
5
|
+
*/
|
|
6
|
+
export interface SeatbeltOptions {
|
|
7
|
+
workspacePath: string;
|
|
8
|
+
socketPath: string;
|
|
9
|
+
allowedBinPaths: string[];
|
|
10
|
+
allowedReadPaths: string[];
|
|
11
|
+
additionalRules?: string[];
|
|
12
|
+
}
|
|
13
|
+
export interface OperationSeatbeltOptions {
|
|
14
|
+
operation: string;
|
|
15
|
+
targetPath?: string;
|
|
16
|
+
targetHost?: string;
|
|
17
|
+
targetPort?: number;
|
|
18
|
+
}
|
|
19
|
+
export declare class SeatbeltGenerator {
|
|
20
|
+
private templates;
|
|
21
|
+
constructor();
|
|
22
|
+
/**
|
|
23
|
+
* Generate the main agent seatbelt profile
|
|
24
|
+
*/
|
|
25
|
+
generateAgentProfile(options: SeatbeltOptions): string;
|
|
26
|
+
/**
|
|
27
|
+
* Generate a per-operation seatbelt profile
|
|
28
|
+
*/
|
|
29
|
+
generateOperationProfile(options: OperationSeatbeltOptions): string;
|
|
30
|
+
/**
|
|
31
|
+
* Install seatbelt profiles to disk
|
|
32
|
+
*/
|
|
33
|
+
installProfiles(outputDir: string, options: SeatbeltOptions): Promise<void>;
|
|
34
|
+
/**
|
|
35
|
+
* Verify a seatbelt profile is valid
|
|
36
|
+
*/
|
|
37
|
+
verifyProfile(profilePath: string): Promise<boolean>;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../../src/seatbelt/generator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,MAAM,WAAW,eAAe;IAC9B,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,wBAAwB;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,SAAS,CAAoB;;IAMrC;;OAEG;IACH,oBAAoB,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM;IA+FtD;;OAEG;IACH,wBAAwB,CAAC,OAAO,EAAE,wBAAwB,GAAG,MAAM;IAqBnE;;OAEG;IACG,eAAe,CACnB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,IAAI,CAAC;IA4BhB;;OAEG;IACG,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAuB3D"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Seatbelt Profile Templates
|
|
3
|
+
*
|
|
4
|
+
* Base templates for different operation types.
|
|
5
|
+
*/
|
|
6
|
+
export declare class SeatbeltTemplates {
|
|
7
|
+
/**
|
|
8
|
+
* Base profile with minimal permissions
|
|
9
|
+
*/
|
|
10
|
+
baseProfile(): string;
|
|
11
|
+
/**
|
|
12
|
+
* Profile for file read operations
|
|
13
|
+
*/
|
|
14
|
+
fileReadProfile(targetPath: string): string;
|
|
15
|
+
/**
|
|
16
|
+
* Profile for file write operations
|
|
17
|
+
*/
|
|
18
|
+
fileWriteProfile(targetPath: string): string;
|
|
19
|
+
/**
|
|
20
|
+
* Profile for HTTP request operations
|
|
21
|
+
*/
|
|
22
|
+
httpRequestProfile(host?: string, port?: number): string;
|
|
23
|
+
/**
|
|
24
|
+
* Profile for command execution
|
|
25
|
+
*/
|
|
26
|
+
execProfile(binaryPath?: string): string;
|
|
27
|
+
/**
|
|
28
|
+
* Profile for broker daemon (has network)
|
|
29
|
+
*/
|
|
30
|
+
brokerProfile(socketPath: string): string;
|
|
31
|
+
/**
|
|
32
|
+
* Deny-all profile for testing
|
|
33
|
+
*/
|
|
34
|
+
denyAllProfile(): string;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=templates.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../src/seatbelt/templates.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,qBAAa,iBAAiB;IAC5B;;OAEG;IACH,WAAW,IAAI,MAAM;IAkBrB;;OAEG;IACH,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM;IAyB3C;;OAEG;IACH,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM;IAyB5C;;OAEG;IACH,kBAAkB,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM;IAsCxD;;OAEG;IACH,WAAW,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM;IAkCxC;;OAEG;IACH,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM;IAuCzC;;OAEG;IACH,cAAc,IAAI,MAAM;CAMzB"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Secret Vault
|
|
3
|
+
*
|
|
4
|
+
* Encrypted secrets storage and retrieval.
|
|
5
|
+
*/
|
|
6
|
+
export interface VaultOptions {
|
|
7
|
+
vaultPath: string;
|
|
8
|
+
keyPath?: string;
|
|
9
|
+
}
|
|
10
|
+
export interface VaultSecret {
|
|
11
|
+
name: string;
|
|
12
|
+
value: string;
|
|
13
|
+
createdAt: Date;
|
|
14
|
+
lastAccessedAt?: Date;
|
|
15
|
+
accessCount: number;
|
|
16
|
+
}
|
|
17
|
+
export declare class SecretVault {
|
|
18
|
+
private vaultPath;
|
|
19
|
+
private key;
|
|
20
|
+
private data;
|
|
21
|
+
constructor(options: VaultOptions);
|
|
22
|
+
/**
|
|
23
|
+
* Initialize the vault
|
|
24
|
+
*/
|
|
25
|
+
initialize(): Promise<void>;
|
|
26
|
+
/**
|
|
27
|
+
* Load or create the encryption key
|
|
28
|
+
*/
|
|
29
|
+
private loadOrCreateKey;
|
|
30
|
+
/**
|
|
31
|
+
* Load vault data from disk
|
|
32
|
+
*/
|
|
33
|
+
private load;
|
|
34
|
+
/**
|
|
35
|
+
* Save vault data to disk
|
|
36
|
+
*/
|
|
37
|
+
private save;
|
|
38
|
+
/**
|
|
39
|
+
* Encrypt a value
|
|
40
|
+
*/
|
|
41
|
+
private encrypt;
|
|
42
|
+
/**
|
|
43
|
+
* Decrypt a value
|
|
44
|
+
*/
|
|
45
|
+
private decrypt;
|
|
46
|
+
/**
|
|
47
|
+
* Get a secret by name
|
|
48
|
+
*/
|
|
49
|
+
get(name: string): Promise<VaultSecret | null>;
|
|
50
|
+
/**
|
|
51
|
+
* Set a secret
|
|
52
|
+
*/
|
|
53
|
+
set(name: string, value: string): Promise<void>;
|
|
54
|
+
/**
|
|
55
|
+
* Delete a secret
|
|
56
|
+
*/
|
|
57
|
+
delete(name: string): Promise<boolean>;
|
|
58
|
+
/**
|
|
59
|
+
* List all secret names
|
|
60
|
+
*/
|
|
61
|
+
list(): Promise<string[]>;
|
|
62
|
+
/**
|
|
63
|
+
* Check if a secret exists
|
|
64
|
+
*/
|
|
65
|
+
has(name: string): Promise<boolean>;
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=vault.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vault.d.ts","sourceRoot":"","sources":["../../src/secrets/vault.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,IAAI,CAAC;IAChB,cAAc,CAAC,EAAE,IAAI,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;CACrB;AAeD,qBAAa,WAAW;IACtB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,GAAG,CAAuB;IAClC,OAAO,CAAC,IAAI,CAA0B;gBAE1B,OAAO,EAAE,YAAY;IAIjC;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAQjC;;OAEG;YACW,eAAe;IAc7B;;OAEG;YACW,IAAI;IAalB;;OAEG;YACW,IAAI;IAUlB;;OAEG;IACH,OAAO,CAAC,OAAO;IAoBf;;OAEG;IACH,OAAO,CAAC,OAAO;IAmBf;;OAEG;IACG,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IA8BpD;;OAEG;IACG,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgBrD;;OAEG;IACG,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAc5C;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAQ/B;;OAEG;IACG,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAO1C"}
|
package/server.d.ts
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unix Socket Server
|
|
3
|
+
*
|
|
4
|
+
* Primary IPC server for the broker daemon.
|
|
5
|
+
* Handles JSON-RPC 2.0 requests over newline-delimited JSON.
|
|
6
|
+
*/
|
|
7
|
+
import type { BrokerConfig } from './types.js';
|
|
8
|
+
import type { PolicyEnforcer } from './policies/enforcer.js';
|
|
9
|
+
import type { AuditLogger } from './audit/logger.js';
|
|
10
|
+
import type { SecretVault } from './secrets/vault.js';
|
|
11
|
+
export interface UnixSocketServerOptions {
|
|
12
|
+
config: BrokerConfig;
|
|
13
|
+
policyEnforcer: PolicyEnforcer;
|
|
14
|
+
auditLogger: AuditLogger;
|
|
15
|
+
secretVault: SecretVault;
|
|
16
|
+
}
|
|
17
|
+
export declare class UnixSocketServer {
|
|
18
|
+
private server;
|
|
19
|
+
private config;
|
|
20
|
+
private policyEnforcer;
|
|
21
|
+
private auditLogger;
|
|
22
|
+
private secretVault;
|
|
23
|
+
private connections;
|
|
24
|
+
constructor(options: UnixSocketServerOptions);
|
|
25
|
+
/**
|
|
26
|
+
* Start the Unix socket server
|
|
27
|
+
*/
|
|
28
|
+
start(): Promise<void>;
|
|
29
|
+
/**
|
|
30
|
+
* Stop the Unix socket server
|
|
31
|
+
*/
|
|
32
|
+
stop(): Promise<void>;
|
|
33
|
+
/**
|
|
34
|
+
* Handle a new client connection
|
|
35
|
+
*/
|
|
36
|
+
private handleConnection;
|
|
37
|
+
/**
|
|
38
|
+
* Process a JSON-RPC request
|
|
39
|
+
*/
|
|
40
|
+
private processRequest;
|
|
41
|
+
/**
|
|
42
|
+
* Get the handler for an operation type
|
|
43
|
+
*/
|
|
44
|
+
private getHandler;
|
|
45
|
+
/**
|
|
46
|
+
* Extract target from request for audit logging
|
|
47
|
+
*/
|
|
48
|
+
private extractTarget;
|
|
49
|
+
/**
|
|
50
|
+
* Create an error response
|
|
51
|
+
*/
|
|
52
|
+
private errorResponse;
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=server.d.ts.map
|
package/server.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EACV,YAAY,EAIb,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGtD,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,YAAY,CAAC;IACrB,cAAc,EAAE,cAAc,CAAC;IAC/B,WAAW,EAAE,WAAW,CAAC;IACzB,WAAW,EAAE,WAAW,CAAC;CAC1B;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAA2B;IACzC,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,WAAW,CAA8B;gBAErC,OAAO,EAAE,uBAAuB;IAO5C;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA4B5B;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IA0B3B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IA+BxB;;OAEG;YACW,cAAc;IAoG5B;;OAEG;IACH,OAAO,CAAC,UAAU;IAyBlB;;OAEG;IACH,OAAO,CAAC,aAAa;IAWrB;;OAEG;IACH,OAAO,CAAC,aAAa;CAWtB"}
|