@develler/remediation-agent 1.0.2
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/dist/commands/connect.d.ts +17 -0
- package/dist/commands/connect.d.ts.map +1 -0
- package/dist/commands/connect.js +138 -0
- package/dist/commands/connect.js.map +1 -0
- package/dist/contracts/agentConnection.d.ts +28 -0
- package/dist/contracts/agentConnection.d.ts.map +1 -0
- package/dist/contracts/agentConnection.js +3 -0
- package/dist/contracts/agentConnection.js.map +1 -0
- package/dist/contracts/lifecycleInterceptor.d.ts +22 -0
- package/dist/contracts/lifecycleInterceptor.d.ts.map +1 -0
- package/dist/contracts/lifecycleInterceptor.js +3 -0
- package/dist/contracts/lifecycleInterceptor.js.map +1 -0
- package/dist/controllers/extractionController.d.ts +12 -0
- package/dist/controllers/extractionController.d.ts.map +1 -0
- package/dist/controllers/extractionController.js +91 -0
- package/dist/controllers/extractionController.js.map +1 -0
- package/dist/controllers/webhookController.d.ts +16 -0
- package/dist/controllers/webhookController.d.ts.map +1 -0
- package/dist/controllers/webhookController.js +74 -0
- package/dist/controllers/webhookController.js.map +1 -0
- package/dist/exceptions/ReplayError.d.ts +4 -0
- package/dist/exceptions/ReplayError.d.ts.map +1 -0
- package/dist/exceptions/ReplayError.js +11 -0
- package/dist/exceptions/ReplayError.js.map +1 -0
- package/dist/exceptions/SignatureError.d.ts +4 -0
- package/dist/exceptions/SignatureError.d.ts.map +1 -0
- package/dist/exceptions/SignatureError.js +11 -0
- package/dist/exceptions/SignatureError.js.map +1 -0
- package/dist/index.d.ts +48 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +98 -0
- package/dist/index.js.map +1 -0
- package/dist/logger.d.ts +7 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +26 -0
- package/dist/logger.js.map +1 -0
- package/dist/middleware/remediationInterceptor.d.ts +42 -0
- package/dist/middleware/remediationInterceptor.d.ts.map +1 -0
- package/dist/middleware/remediationInterceptor.js +144 -0
- package/dist/middleware/remediationInterceptor.js.map +1 -0
- package/dist/services/AgentConnectionService.d.ts +37 -0
- package/dist/services/AgentConnectionService.d.ts.map +1 -0
- package/dist/services/AgentConnectionService.js +186 -0
- package/dist/services/AgentConnectionService.js.map +1 -0
- package/dist/services/AstExtractorService.d.ts +18 -0
- package/dist/services/AstExtractorService.d.ts.map +1 -0
- package/dist/services/AstExtractorService.js +166 -0
- package/dist/services/AstExtractorService.js.map +1 -0
- package/dist/services/CircuitBreakerService.d.ts +29 -0
- package/dist/services/CircuitBreakerService.d.ts.map +1 -0
- package/dist/services/CircuitBreakerService.js +93 -0
- package/dist/services/CircuitBreakerService.js.map +1 -0
- package/dist/services/InstructionCacheService.d.ts +28 -0
- package/dist/services/InstructionCacheService.d.ts.map +1 -0
- package/dist/services/InstructionCacheService.js +79 -0
- package/dist/services/InstructionCacheService.js.map +1 -0
- package/dist/services/MaskingEngine.d.ts +27 -0
- package/dist/services/MaskingEngine.d.ts.map +1 -0
- package/dist/services/MaskingEngine.js +88 -0
- package/dist/services/MaskingEngine.js.map +1 -0
- package/dist/types/extraction.d.ts +27 -0
- package/dist/types/extraction.d.ts.map +1 -0
- package/dist/types/extraction.js +16 -0
- package/dist/types/extraction.js.map +1 -0
- package/dist/types/instructions.d.ts +58 -0
- package/dist/types/instructions.d.ts.map +1 -0
- package/dist/types/instructions.js +203 -0
- package/dist/types/instructions.js.map +1 -0
- package/dist/types/wireProtocol.d.ts +117 -0
- package/dist/types/wireProtocol.d.ts.map +1 -0
- package/dist/types/wireProtocol.js +8 -0
- package/dist/types/wireProtocol.js.map +1 -0
- package/package.json +46 -0
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import type { MaskStrategy, MatchType, WireKeyPattern, WireRuntimeInstructionPayload } from './wireProtocol.js';
|
|
2
|
+
import type { Request } from 'express';
|
|
3
|
+
export declare class MaskRule {
|
|
4
|
+
readonly ruleId: string;
|
|
5
|
+
readonly key: string;
|
|
6
|
+
readonly matchType: MatchType;
|
|
7
|
+
readonly maskStrategy: MaskStrategy;
|
|
8
|
+
readonly pattern: string | null;
|
|
9
|
+
readonly maskChar: string;
|
|
10
|
+
readonly separator: string;
|
|
11
|
+
constructor(ruleId: string, key: string, matchType: MatchType, maskStrategy: MaskStrategy, pattern: string | null, maskChar: string, separator: string);
|
|
12
|
+
static fromWire(kp: WireKeyPattern, ruleId: string): MaskRule;
|
|
13
|
+
matchesKey(key: string): boolean;
|
|
14
|
+
}
|
|
15
|
+
export interface RouteBlock {
|
|
16
|
+
readonly blockedRoutes: Array<{
|
|
17
|
+
method: string;
|
|
18
|
+
path: string;
|
|
19
|
+
}>;
|
|
20
|
+
readonly responseStatus: number;
|
|
21
|
+
readonly responseBody: Record<string, unknown>;
|
|
22
|
+
}
|
|
23
|
+
export declare class RuntimeInstruction {
|
|
24
|
+
readonly instructionId: string;
|
|
25
|
+
readonly instructionType: string;
|
|
26
|
+
readonly priority: number;
|
|
27
|
+
readonly effectiveAt: number;
|
|
28
|
+
readonly expiresAt: number;
|
|
29
|
+
readonly includeRoutes: string[];
|
|
30
|
+
readonly excludeRoutes: string[];
|
|
31
|
+
readonly httpMethods: string[];
|
|
32
|
+
readonly maskRules: MaskRule[];
|
|
33
|
+
readonly routeBlocks: RouteBlock[];
|
|
34
|
+
readonly injectHeaders: Record<string, string>;
|
|
35
|
+
readonly rulesChecksum: string;
|
|
36
|
+
constructor(instructionId: string, instructionType: string, priority: number, effectiveAt: number, expiresAt: number, includeRoutes: string[], excludeRoutes: string[], httpMethods: string[], maskRules: MaskRule[], routeBlocks: RouteBlock[], injectHeaders: Record<string, string>, rulesChecksum: string);
|
|
37
|
+
static fromWirePayload(payload: WireRuntimeInstructionPayload): RuntimeInstruction;
|
|
38
|
+
private static extractRule;
|
|
39
|
+
isExpired(): boolean;
|
|
40
|
+
isEffective(): boolean;
|
|
41
|
+
toJSON(): Record<string, unknown>;
|
|
42
|
+
static fromJSON(raw: Record<string, unknown>): RuntimeInstruction;
|
|
43
|
+
}
|
|
44
|
+
export declare class InstructionCollection {
|
|
45
|
+
private readonly instructions;
|
|
46
|
+
constructor(instructions: RuntimeInstruction[]);
|
|
47
|
+
static empty(): InstructionCollection;
|
|
48
|
+
isEmpty(): boolean;
|
|
49
|
+
maskRules(): MaskRule[];
|
|
50
|
+
hasMaskRules(): boolean;
|
|
51
|
+
/** Merged headers; lower priority number wins on key conflict. */
|
|
52
|
+
injectHeaders(): Record<string, string>;
|
|
53
|
+
/** First matching route-block config, or null. */
|
|
54
|
+
matchingRouteBlock(req: Request): RouteBlock | null;
|
|
55
|
+
private sortedByPriority;
|
|
56
|
+
private routeMatches;
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=instructions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instructions.d.ts","sourceRoot":"","sources":["../../src/types/instructions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.InstructionCollection = exports.RuntimeInstruction = exports.MaskRule = void 0;
|
|
4
|
+
// ---------------------------------------------------------------------------
|
|
5
|
+
// MaskRule — parsed, strongly typed version of WireKeyPattern
|
|
6
|
+
// ---------------------------------------------------------------------------
|
|
7
|
+
class MaskRule {
|
|
8
|
+
ruleId;
|
|
9
|
+
key;
|
|
10
|
+
matchType;
|
|
11
|
+
maskStrategy;
|
|
12
|
+
pattern;
|
|
13
|
+
maskChar;
|
|
14
|
+
separator;
|
|
15
|
+
constructor(ruleId, key, matchType, maskStrategy, pattern, maskChar, separator) {
|
|
16
|
+
this.ruleId = ruleId;
|
|
17
|
+
this.key = key;
|
|
18
|
+
this.matchType = matchType;
|
|
19
|
+
this.maskStrategy = maskStrategy;
|
|
20
|
+
this.pattern = pattern;
|
|
21
|
+
this.maskChar = maskChar;
|
|
22
|
+
this.separator = separator;
|
|
23
|
+
}
|
|
24
|
+
static fromWire(kp, ruleId) {
|
|
25
|
+
return new MaskRule(ruleId, kp.key, kp.match_type, kp.mask_strategy, kp.pattern, kp.mask_char, kp.separator);
|
|
26
|
+
}
|
|
27
|
+
matchesKey(key) {
|
|
28
|
+
if (this.matchType === 'exact') {
|
|
29
|
+
return this.key === key;
|
|
30
|
+
}
|
|
31
|
+
if (this.matchType === 'regex' && this.pattern !== null) {
|
|
32
|
+
try {
|
|
33
|
+
return new RegExp(this.pattern).test(key);
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
exports.MaskRule = MaskRule;
|
|
43
|
+
// ---------------------------------------------------------------------------
|
|
44
|
+
// RuntimeInstruction — parsed, validated, serialisable
|
|
45
|
+
// ---------------------------------------------------------------------------
|
|
46
|
+
class RuntimeInstruction {
|
|
47
|
+
instructionId;
|
|
48
|
+
instructionType;
|
|
49
|
+
priority;
|
|
50
|
+
effectiveAt;
|
|
51
|
+
expiresAt;
|
|
52
|
+
includeRoutes;
|
|
53
|
+
excludeRoutes;
|
|
54
|
+
httpMethods;
|
|
55
|
+
maskRules;
|
|
56
|
+
routeBlocks;
|
|
57
|
+
injectHeaders;
|
|
58
|
+
rulesChecksum;
|
|
59
|
+
constructor(instructionId, instructionType, priority, effectiveAt, expiresAt, includeRoutes, excludeRoutes, httpMethods, maskRules, routeBlocks, injectHeaders, rulesChecksum) {
|
|
60
|
+
this.instructionId = instructionId;
|
|
61
|
+
this.instructionType = instructionType;
|
|
62
|
+
this.priority = priority;
|
|
63
|
+
this.effectiveAt = effectiveAt;
|
|
64
|
+
this.expiresAt = expiresAt;
|
|
65
|
+
this.includeRoutes = includeRoutes;
|
|
66
|
+
this.excludeRoutes = excludeRoutes;
|
|
67
|
+
this.httpMethods = httpMethods;
|
|
68
|
+
this.maskRules = maskRules;
|
|
69
|
+
this.routeBlocks = routeBlocks;
|
|
70
|
+
this.injectHeaders = injectHeaders;
|
|
71
|
+
this.rulesChecksum = rulesChecksum;
|
|
72
|
+
}
|
|
73
|
+
static fromWirePayload(payload) {
|
|
74
|
+
const maskRules = [];
|
|
75
|
+
const routeBlocks = [];
|
|
76
|
+
let injectHeaders = {};
|
|
77
|
+
for (const rule of payload.rules) {
|
|
78
|
+
RuntimeInstruction.extractRule(rule, maskRules, routeBlocks, (h) => {
|
|
79
|
+
injectHeaders = { ...injectHeaders, ...h };
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
return new RuntimeInstruction(payload.instruction_id, payload.instruction_type, payload.priority, payload.effective_at, payload.expires_at, payload.targets.routes.include, payload.targets.routes.exclude, payload.targets.http_methods, maskRules, routeBlocks, injectHeaders, payload.checksum);
|
|
83
|
+
}
|
|
84
|
+
static extractRule(rule, maskRules, routeBlocks, onHeaders) {
|
|
85
|
+
const config = rule.config;
|
|
86
|
+
switch (rule.rule_type) {
|
|
87
|
+
case 'pii_mask': {
|
|
88
|
+
const patterns = config['key_patterns'] ?? [];
|
|
89
|
+
for (const kp of patterns) {
|
|
90
|
+
maskRules.push(MaskRule.fromWire(kp, rule.rule_id));
|
|
91
|
+
}
|
|
92
|
+
break;
|
|
93
|
+
}
|
|
94
|
+
case 'route_block': {
|
|
95
|
+
routeBlocks.push({
|
|
96
|
+
blockedRoutes: config['blocked_routes'] ?? [],
|
|
97
|
+
responseStatus: config['response_status'] ?? 503,
|
|
98
|
+
responseBody: config['response_body'] ?? { error: 'Service temporarily unavailable.' },
|
|
99
|
+
});
|
|
100
|
+
break;
|
|
101
|
+
}
|
|
102
|
+
case 'header_inject': {
|
|
103
|
+
onHeaders(config['headers'] ?? {});
|
|
104
|
+
break;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
isExpired() {
|
|
109
|
+
return Date.now() / 1000 > this.expiresAt;
|
|
110
|
+
}
|
|
111
|
+
isEffective() {
|
|
112
|
+
const now = Date.now() / 1000;
|
|
113
|
+
return now >= this.effectiveAt && !this.isExpired();
|
|
114
|
+
}
|
|
115
|
+
toJSON() {
|
|
116
|
+
return {
|
|
117
|
+
instruction_id: this.instructionId,
|
|
118
|
+
instruction_type: this.instructionType,
|
|
119
|
+
priority: this.priority,
|
|
120
|
+
effective_at: this.effectiveAt,
|
|
121
|
+
expires_at: this.expiresAt,
|
|
122
|
+
include_routes: this.includeRoutes,
|
|
123
|
+
exclude_routes: this.excludeRoutes,
|
|
124
|
+
http_methods: this.httpMethods,
|
|
125
|
+
mask_rules: this.maskRules.map((r) => ({
|
|
126
|
+
rule_id: r.ruleId,
|
|
127
|
+
key: r.key,
|
|
128
|
+
match_type: r.matchType,
|
|
129
|
+
mask_strategy: r.maskStrategy,
|
|
130
|
+
pattern: r.pattern,
|
|
131
|
+
mask_char: r.maskChar,
|
|
132
|
+
separator: r.separator,
|
|
133
|
+
})),
|
|
134
|
+
route_blocks: this.routeBlocks,
|
|
135
|
+
inject_headers: this.injectHeaders,
|
|
136
|
+
checksum: this.rulesChecksum,
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
static fromJSON(raw) {
|
|
140
|
+
const maskRules = (raw['mask_rules'] ?? []).map((r) => {
|
|
141
|
+
const m = r;
|
|
142
|
+
return new MaskRule(String(m['rule_id'] ?? ''), String(m['key'] ?? ''), (m['match_type'] ?? 'exact'), (m['mask_strategy'] ?? 'full_redact'), m['pattern'] != null ? String(m['pattern']) : null, String(m['mask_char'] ?? 'X'), String(m['separator'] ?? '-'));
|
|
143
|
+
});
|
|
144
|
+
return new RuntimeInstruction(String(raw['instruction_id'] ?? ''), String(raw['instruction_type'] ?? ''), Number(raw['priority'] ?? 100), Number(raw['effective_at'] ?? 0), Number(raw['expires_at'] ?? 0), raw['include_routes'] ?? ['*'], raw['exclude_routes'] ?? [], raw['http_methods'] ?? [], maskRules, raw['route_blocks'] ?? [], raw['inject_headers'] ?? {}, String(raw['checksum'] ?? ''));
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
exports.RuntimeInstruction = RuntimeInstruction;
|
|
148
|
+
// ---------------------------------------------------------------------------
|
|
149
|
+
// InstructionCollection — the aggregate queried by the middleware on every request
|
|
150
|
+
// ---------------------------------------------------------------------------
|
|
151
|
+
class InstructionCollection {
|
|
152
|
+
instructions;
|
|
153
|
+
constructor(instructions) {
|
|
154
|
+
this.instructions = instructions;
|
|
155
|
+
}
|
|
156
|
+
static empty() {
|
|
157
|
+
return new InstructionCollection([]);
|
|
158
|
+
}
|
|
159
|
+
isEmpty() {
|
|
160
|
+
return this.instructions.length === 0;
|
|
161
|
+
}
|
|
162
|
+
maskRules() {
|
|
163
|
+
return this.sortedByPriority().flatMap((i) => i.maskRules);
|
|
164
|
+
}
|
|
165
|
+
hasMaskRules() {
|
|
166
|
+
return this.maskRules().length > 0;
|
|
167
|
+
}
|
|
168
|
+
/** Merged headers; lower priority number wins on key conflict. */
|
|
169
|
+
injectHeaders() {
|
|
170
|
+
const headers = {};
|
|
171
|
+
for (const instruction of this.sortedByPriority()) {
|
|
172
|
+
Object.assign(headers, instruction.injectHeaders);
|
|
173
|
+
}
|
|
174
|
+
return headers;
|
|
175
|
+
}
|
|
176
|
+
/** First matching route-block config, or null. */
|
|
177
|
+
matchingRouteBlock(req) {
|
|
178
|
+
for (const instruction of this.sortedByPriority()) {
|
|
179
|
+
for (const block of instruction.routeBlocks) {
|
|
180
|
+
for (const route of block.blockedRoutes) {
|
|
181
|
+
if (this.routeMatches(req, route.method, route.path)) {
|
|
182
|
+
return block;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
return null;
|
|
188
|
+
}
|
|
189
|
+
sortedByPriority() {
|
|
190
|
+
return [...this.instructions].sort((a, b) => a.priority - b.priority);
|
|
191
|
+
}
|
|
192
|
+
routeMatches(req, method, pattern) {
|
|
193
|
+
if (req.method.toUpperCase() !== method.toUpperCase())
|
|
194
|
+
return false;
|
|
195
|
+
// Simple glob-style matching via regex conversion
|
|
196
|
+
const regexStr = pattern
|
|
197
|
+
.replace(/[.+^${}()|[\]\\]/g, '\\$&')
|
|
198
|
+
.replace(/\*/g, '.*');
|
|
199
|
+
return new RegExp(`^${regexStr}$`).test(req.path.replace(/^\//, ''));
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
exports.InstructionCollection = InstructionCollection;
|
|
203
|
+
//# sourceMappingURL=instructions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instructions.js","sourceRoot":"","sources":["../../src/types/instructions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Strict types for every object that crosses the SaaS <-> Agent wire boundary.
|
|
3
|
+
* These mirror the JSON wire protocol defined in ARCHITECTURE_PLAN.md §3.
|
|
4
|
+
* No optional fields — every absent value must be explicitly typed as | null.
|
|
5
|
+
*/
|
|
6
|
+
export type MessageType = 'handshake' | 'runtime_instruction' | 'extraction_request' | 'extraction_response';
|
|
7
|
+
export type MaskStrategy = 'partial_last4' | 'email_domain_only' | 'last4_only' | 'full_redact' | 'hash_stable';
|
|
8
|
+
export type MatchType = 'exact' | 'regex';
|
|
9
|
+
export type RuleType = 'pii_mask' | 'route_block' | 'header_inject' | 'circuit_breaker_test';
|
|
10
|
+
export interface WireEnvelope {
|
|
11
|
+
readonly protocol_version: string;
|
|
12
|
+
readonly message_id: string;
|
|
13
|
+
readonly message_type: MessageType;
|
|
14
|
+
readonly client_id: string;
|
|
15
|
+
readonly issued_at: number;
|
|
16
|
+
readonly nonce: string;
|
|
17
|
+
readonly hmac_sha256: string;
|
|
18
|
+
readonly payload: WireRuntimeInstructionPayload | WireExtractionRequestPayload | Record<string, unknown>;
|
|
19
|
+
}
|
|
20
|
+
export interface WireKeyPattern {
|
|
21
|
+
readonly key: string;
|
|
22
|
+
readonly match_type: MatchType;
|
|
23
|
+
readonly mask_strategy: MaskStrategy;
|
|
24
|
+
readonly pattern: string | null;
|
|
25
|
+
readonly mask_char: string;
|
|
26
|
+
readonly separator: string;
|
|
27
|
+
}
|
|
28
|
+
export interface WirePiiMaskConfig {
|
|
29
|
+
readonly scan_depth: string;
|
|
30
|
+
readonly key_patterns: WireKeyPattern[];
|
|
31
|
+
}
|
|
32
|
+
export interface WireRouteEntry {
|
|
33
|
+
readonly method: string;
|
|
34
|
+
readonly path: string;
|
|
35
|
+
readonly reason: string | null;
|
|
36
|
+
}
|
|
37
|
+
export interface WireRouteBlockConfig {
|
|
38
|
+
readonly blocked_routes: WireRouteEntry[];
|
|
39
|
+
readonly response_status: number;
|
|
40
|
+
readonly response_body: Record<string, unknown>;
|
|
41
|
+
}
|
|
42
|
+
export interface WireHeaderInjectConfig {
|
|
43
|
+
readonly headers: Record<string, string>;
|
|
44
|
+
}
|
|
45
|
+
export interface WireRule {
|
|
46
|
+
readonly rule_id: string;
|
|
47
|
+
readonly rule_type: RuleType;
|
|
48
|
+
readonly config: WirePiiMaskConfig | WireRouteBlockConfig | WireHeaderInjectConfig | Record<string, unknown>;
|
|
49
|
+
}
|
|
50
|
+
export interface WireTargets {
|
|
51
|
+
readonly routes: {
|
|
52
|
+
readonly include: string[];
|
|
53
|
+
readonly exclude: string[];
|
|
54
|
+
};
|
|
55
|
+
readonly http_methods: string[];
|
|
56
|
+
}
|
|
57
|
+
export interface WireRuntimeInstructionPayload {
|
|
58
|
+
readonly instruction_id: string;
|
|
59
|
+
readonly instruction_type: string;
|
|
60
|
+
readonly priority: number;
|
|
61
|
+
readonly ttl_seconds: number;
|
|
62
|
+
readonly effective_at: number;
|
|
63
|
+
readonly expires_at: number;
|
|
64
|
+
readonly targets: WireTargets;
|
|
65
|
+
readonly rules: WireRule[];
|
|
66
|
+
readonly checksum: string;
|
|
67
|
+
}
|
|
68
|
+
export interface WireExtractionRequestPayload {
|
|
69
|
+
readonly extraction_id: string;
|
|
70
|
+
readonly extraction_type: string;
|
|
71
|
+
readonly repository: Record<string, string>;
|
|
72
|
+
readonly targets: unknown[];
|
|
73
|
+
readonly include_ast: boolean;
|
|
74
|
+
readonly include_docblock: boolean;
|
|
75
|
+
readonly include_line_numbers: boolean;
|
|
76
|
+
readonly max_lines_per_symbol: number;
|
|
77
|
+
readonly callback_url: string;
|
|
78
|
+
}
|
|
79
|
+
export interface HandshakeRequest {
|
|
80
|
+
readonly connection_key: string;
|
|
81
|
+
readonly site_url: string;
|
|
82
|
+
readonly site_name: string | null;
|
|
83
|
+
readonly language_runtime: 'node';
|
|
84
|
+
readonly runtime_version: string;
|
|
85
|
+
readonly framework: string | null;
|
|
86
|
+
readonly framework_version: string | null;
|
|
87
|
+
readonly agent_version: string | null;
|
|
88
|
+
readonly environment: 'local' | 'staging' | 'production';
|
|
89
|
+
readonly capabilities: AgentCapabilities;
|
|
90
|
+
readonly webhook_url: string | null;
|
|
91
|
+
}
|
|
92
|
+
export interface AgentCapabilities {
|
|
93
|
+
readonly mode_a_ast: boolean;
|
|
94
|
+
readonly mode_b_interceptor: boolean;
|
|
95
|
+
readonly redis_available: boolean;
|
|
96
|
+
readonly git_access: boolean;
|
|
97
|
+
}
|
|
98
|
+
export interface HandshakeResponse {
|
|
99
|
+
readonly status: 'accepted';
|
|
100
|
+
readonly client_id: string;
|
|
101
|
+
readonly token: string;
|
|
102
|
+
readonly instruction_channel: {
|
|
103
|
+
readonly type: 'webhook' | 'polling';
|
|
104
|
+
readonly poll_url: string;
|
|
105
|
+
readonly poll_interval_seconds: number;
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
export interface ConnectionConfig {
|
|
109
|
+
readonly client_id: string;
|
|
110
|
+
readonly token: string;
|
|
111
|
+
readonly saas_url: string;
|
|
112
|
+
readonly channel_type: 'webhook' | 'polling';
|
|
113
|
+
readonly poll_url: string;
|
|
114
|
+
readonly poll_interval_seconds: number;
|
|
115
|
+
readonly connected_at: string;
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=wireProtocol.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wireProtocol.d.ts","sourceRoot":"","sources":["../../src/types/wireProtocol.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Strict types for every object that crosses the SaaS <-> Agent wire boundary.
|
|
4
|
+
* These mirror the JSON wire protocol defined in ARCHITECTURE_PLAN.md §3.
|
|
5
|
+
* No optional fields — every absent value must be explicitly typed as | null.
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
//# sourceMappingURL=wireProtocol.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wireProtocol.js","sourceRoot":"","sources":["../../src/types/wireProtocol.ts"],"names":[],"mappings":";AAAA;;;;GAIG"}
|
package/package.json
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@develler/remediation-agent",
|
|
3
|
+
"version": "1.0.2",
|
|
4
|
+
"description": "Remediation agent for Node.js/Express — real-time PII masking and automated code-fix pipeline",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"files": [
|
|
8
|
+
"dist/**/*",
|
|
9
|
+
"README.md"
|
|
10
|
+
],
|
|
11
|
+
"repository": {
|
|
12
|
+
"type": "git",
|
|
13
|
+
"url": "https://github.com/Sabs19/remediation-node-package.git"
|
|
14
|
+
},
|
|
15
|
+
"publishConfig": {
|
|
16
|
+
"access": "public",
|
|
17
|
+
"scope": "@develler"
|
|
18
|
+
},
|
|
19
|
+
"license": "MIT",
|
|
20
|
+
"scripts": {
|
|
21
|
+
"build": "tsc",
|
|
22
|
+
"build:watch": "tsc --watch",
|
|
23
|
+
"prepublishOnly": "npm run build",
|
|
24
|
+
"connect": "node dist/commands/connect.js",
|
|
25
|
+
"test": "tsc --noEmit && node --test dist/tests/**/*.test.js",
|
|
26
|
+
"test:compile": "tsc --project tsconfig.test.json"
|
|
27
|
+
},
|
|
28
|
+
"dependencies": {
|
|
29
|
+
"axios": "^1.7.0",
|
|
30
|
+
"ioredis": "^5.3.0",
|
|
31
|
+
"winston": "^3.13.0"
|
|
32
|
+
},
|
|
33
|
+
"peerDependencies": {
|
|
34
|
+
"express": "^4.18.0 || ^5.0.0"
|
|
35
|
+
},
|
|
36
|
+
"devDependencies": {
|
|
37
|
+
"@types/express": "^5.0.0",
|
|
38
|
+
"@types/node": "^20.0.0",
|
|
39
|
+
"typescript": "^5.4.0"
|
|
40
|
+
},
|
|
41
|
+
"peerDependenciesMeta": {
|
|
42
|
+
"typescript": {
|
|
43
|
+
"optional": true
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|