@nxuss/lemma 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 +21 -0
- package/README.md +311 -0
- package/dist/cloud/KeyManager.d.ts +29 -0
- package/dist/cloud/KeyManager.d.ts.map +1 -0
- package/dist/cloud/KeyManager.js +142 -0
- package/dist/cloud/KeyManager.js.map +1 -0
- package/dist/cloud/TenantCache.d.ts +29 -0
- package/dist/cloud/TenantCache.d.ts.map +1 -0
- package/dist/cloud/TenantCache.js +162 -0
- package/dist/cloud/TenantCache.js.map +1 -0
- package/dist/cloud/index.d.ts +4 -0
- package/dist/cloud/index.d.ts.map +1 -0
- package/dist/cloud/index.js +23 -0
- package/dist/cloud/index.js.map +1 -0
- package/dist/cloud/server.d.ts +17 -0
- package/dist/cloud/server.d.ts.map +1 -0
- package/dist/cloud/server.js +189 -0
- package/dist/cloud/server.js.map +1 -0
- package/dist/cloud/types.d.ts +35 -0
- package/dist/cloud/types.d.ts.map +1 -0
- package/dist/cloud/types.js +14 -0
- package/dist/cloud/types.js.map +1 -0
- package/dist/config/index.d.ts +44 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +161 -0
- package/dist/config/index.js.map +1 -0
- package/dist/consensus/ConsensusEngine.d.ts +119 -0
- package/dist/consensus/ConsensusEngine.d.ts.map +1 -0
- package/dist/consensus/ConsensusEngine.js +314 -0
- package/dist/consensus/ConsensusEngine.js.map +1 -0
- package/dist/consensus/ModelPool.d.ts +103 -0
- package/dist/consensus/ModelPool.d.ts.map +1 -0
- package/dist/consensus/ModelPool.js +276 -0
- package/dist/consensus/ModelPool.js.map +1 -0
- package/dist/consensus/index.d.ts +8 -0
- package/dist/consensus/index.d.ts.map +1 -0
- package/dist/consensus/index.js +13 -0
- package/dist/consensus/index.js.map +1 -0
- package/dist/core/AgentRegistry.d.ts +89 -0
- package/dist/core/AgentRegistry.d.ts.map +1 -0
- package/dist/core/AgentRegistry.js +264 -0
- package/dist/core/AgentRegistry.js.map +1 -0
- package/dist/core/DashboardBroadcaster.d.ts +67 -0
- package/dist/core/DashboardBroadcaster.d.ts.map +1 -0
- package/dist/core/DashboardBroadcaster.js +264 -0
- package/dist/core/DashboardBroadcaster.js.map +1 -0
- package/dist/core/OrchestrationEngine.d.ts +84 -0
- package/dist/core/OrchestrationEngine.d.ts.map +1 -0
- package/dist/core/OrchestrationEngine.js +455 -0
- package/dist/core/OrchestrationEngine.js.map +1 -0
- package/dist/core/SubconsciousEngine.d.ts +53 -0
- package/dist/core/SubconsciousEngine.d.ts.map +1 -0
- package/dist/core/SubconsciousEngine.js +273 -0
- package/dist/core/SubconsciousEngine.js.map +1 -0
- package/dist/core/WebSocketServer.d.ts +89 -0
- package/dist/core/WebSocketServer.d.ts.map +1 -0
- package/dist/core/WebSocketServer.js +416 -0
- package/dist/core/WebSocketServer.js.map +1 -0
- package/dist/core/index.d.ts +15 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +24 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/router.d.ts +105 -0
- package/dist/core/router.d.ts.map +1 -0
- package/dist/core/router.js +420 -0
- package/dist/core/router.js.map +1 -0
- package/dist/embed/index.d.ts +153 -0
- package/dist/embed/index.d.ts.map +1 -0
- package/dist/embed/index.js +408 -0
- package/dist/embed/index.js.map +1 -0
- package/dist/embed.d.ts +11 -0
- package/dist/embed.d.ts.map +1 -0
- package/dist/embed.js +19 -0
- package/dist/embed.js.map +1 -0
- package/dist/index.d.ts +83 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +176 -0
- package/dist/index.js.map +1 -0
- package/dist/protocol/flows.d.ts +126 -0
- package/dist/protocol/flows.d.ts.map +1 -0
- package/dist/protocol/flows.js +347 -0
- package/dist/protocol/flows.js.map +1 -0
- package/dist/protocol/iap.d.ts +54 -0
- package/dist/protocol/iap.d.ts.map +1 -0
- package/dist/protocol/iap.js +108 -0
- package/dist/protocol/iap.js.map +1 -0
- package/dist/protocol/index.d.ts +23 -0
- package/dist/protocol/index.d.ts.map +1 -0
- package/dist/protocol/index.js +45 -0
- package/dist/protocol/index.js.map +1 -0
- package/dist/protocol/types.d.ts +332 -0
- package/dist/protocol/types.d.ts.map +1 -0
- package/dist/protocol/types.js +57 -0
- package/dist/protocol/types.js.map +1 -0
- package/dist/protocol/utils.d.ts +130 -0
- package/dist/protocol/utils.d.ts.map +1 -0
- package/dist/protocol/utils.js +292 -0
- package/dist/protocol/utils.js.map +1 -0
- package/dist/protocol/validators.d.ts +54 -0
- package/dist/protocol/validators.d.ts.map +1 -0
- package/dist/protocol/validators.js +344 -0
- package/dist/protocol/validators.js.map +1 -0
- package/dist/security/AuthManager.d.ts +73 -0
- package/dist/security/AuthManager.d.ts.map +1 -0
- package/dist/security/AuthManager.js +102 -0
- package/dist/security/AuthManager.js.map +1 -0
- package/dist/security/MessageSanitizer.d.ts +51 -0
- package/dist/security/MessageSanitizer.d.ts.map +1 -0
- package/dist/security/MessageSanitizer.js +166 -0
- package/dist/security/MessageSanitizer.js.map +1 -0
- package/dist/security/RateLimiter.d.ts +46 -0
- package/dist/security/RateLimiter.d.ts.map +1 -0
- package/dist/security/RateLimiter.js +133 -0
- package/dist/security/RateLimiter.js.map +1 -0
- package/dist/security/SecurityMiddleware.d.ts +88 -0
- package/dist/security/SecurityMiddleware.d.ts.map +1 -0
- package/dist/security/SecurityMiddleware.js +146 -0
- package/dist/security/SecurityMiddleware.js.map +1 -0
- package/dist/security/index.d.ts +35 -0
- package/dist/security/index.d.ts.map +1 -0
- package/dist/security/index.js +42 -0
- package/dist/security/index.js.map +1 -0
- package/dist/speculative/PredictionEngine.d.ts +99 -0
- package/dist/speculative/PredictionEngine.d.ts.map +1 -0
- package/dist/speculative/PredictionEngine.js +291 -0
- package/dist/speculative/PredictionEngine.js.map +1 -0
- package/dist/speculative/SpeculativeCache.d.ts +117 -0
- package/dist/speculative/SpeculativeCache.d.ts.map +1 -0
- package/dist/speculative/SpeculativeCache.js +292 -0
- package/dist/speculative/SpeculativeCache.js.map +1 -0
- package/dist/speculative/SpeculativeEngine.d.ts +114 -0
- package/dist/speculative/SpeculativeEngine.d.ts.map +1 -0
- package/dist/speculative/SpeculativeEngine.js +244 -0
- package/dist/speculative/SpeculativeEngine.js.map +1 -0
- package/dist/speculative/WorkerPool.d.ts +109 -0
- package/dist/speculative/WorkerPool.d.ts.map +1 -0
- package/dist/speculative/WorkerPool.js +327 -0
- package/dist/speculative/WorkerPool.js.map +1 -0
- package/dist/speculative/index.d.ts +10 -0
- package/dist/speculative/index.d.ts.map +1 -0
- package/dist/speculative/index.js +17 -0
- package/dist/speculative/index.js.map +1 -0
- package/dist/subconscious/EmbeddingService.d.ts +73 -0
- package/dist/subconscious/EmbeddingService.d.ts.map +1 -0
- package/dist/subconscious/EmbeddingService.js +196 -0
- package/dist/subconscious/EmbeddingService.js.map +1 -0
- package/dist/subconscious/SemanticCache.d.ts +82 -0
- package/dist/subconscious/SemanticCache.d.ts.map +1 -0
- package/dist/subconscious/SemanticCache.js +164 -0
- package/dist/subconscious/SemanticCache.js.map +1 -0
- package/dist/subconscious/SubconsciousEngine.d.ts +121 -0
- package/dist/subconscious/SubconsciousEngine.d.ts.map +1 -0
- package/dist/subconscious/SubconsciousEngine.js +241 -0
- package/dist/subconscious/SubconsciousEngine.js.map +1 -0
- package/dist/subconscious/VectorStore.d.ts +54 -0
- package/dist/subconscious/VectorStore.d.ts.map +1 -0
- package/dist/subconscious/VectorStore.js +168 -0
- package/dist/subconscious/VectorStore.js.map +1 -0
- package/dist/subconscious/cache.d.ts +34 -0
- package/dist/subconscious/cache.d.ts.map +1 -0
- package/dist/subconscious/cache.js +156 -0
- package/dist/subconscious/cache.js.map +1 -0
- package/dist/subconscious/embeddings.d.ts +25 -0
- package/dist/subconscious/embeddings.d.ts.map +1 -0
- package/dist/subconscious/embeddings.js +65 -0
- package/dist/subconscious/embeddings.js.map +1 -0
- package/dist/subconscious/index.d.ts +12 -0
- package/dist/subconscious/index.d.ts.map +1 -0
- package/dist/subconscious/index.js +19 -0
- package/dist/subconscious/index.js.map +1 -0
- package/dist/types/index.d.ts +286 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +43 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/logger.d.ts +63 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +126 -0
- package/dist/utils/logger.js.map +1 -0
- package/package.json +99 -0
|
@@ -0,0 +1,344 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Inter-Agent Protocol (I.A.P.) v1.0.0
|
|
4
|
+
*
|
|
5
|
+
* Message validators for ensuring protocol compliance
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.PROTOCOL_VERSION = void 0;
|
|
9
|
+
exports.validateIAPMessage = validateIAPMessage;
|
|
10
|
+
exports.validateHandshake = validateHandshake;
|
|
11
|
+
exports.validateCapability = validateCapability;
|
|
12
|
+
exports.validateTaskProposal = validateTaskProposal;
|
|
13
|
+
exports.validateTaskBid = validateTaskBid;
|
|
14
|
+
exports.validateContextTransfer = validateContextTransfer;
|
|
15
|
+
exports.validateErrorMessage = validateErrorMessage;
|
|
16
|
+
exports.createValidationError = createValidationError;
|
|
17
|
+
exports.sanitizeMessage = sanitizeMessage;
|
|
18
|
+
const types_1 = require("./types");
|
|
19
|
+
/**
|
|
20
|
+
* Protocol version supported by this implementation
|
|
21
|
+
*/
|
|
22
|
+
exports.PROTOCOL_VERSION = '1.0.0';
|
|
23
|
+
/**
|
|
24
|
+
* Validates a complete I.A.P. message
|
|
25
|
+
*/
|
|
26
|
+
function validateIAPMessage(message) {
|
|
27
|
+
const errors = [];
|
|
28
|
+
// Check required fields
|
|
29
|
+
if (!message.messageId || typeof message.messageId !== 'string') {
|
|
30
|
+
errors.push('Missing or invalid messageId');
|
|
31
|
+
}
|
|
32
|
+
if (!message.type || !Object.values(types_1.MessageType).includes(message.type)) {
|
|
33
|
+
errors.push('Missing or invalid message type');
|
|
34
|
+
}
|
|
35
|
+
if (!message.from || typeof message.from !== 'string') {
|
|
36
|
+
errors.push('Missing or invalid from field');
|
|
37
|
+
}
|
|
38
|
+
if (!message.to || typeof message.to !== 'string') {
|
|
39
|
+
errors.push('Missing or invalid to field');
|
|
40
|
+
}
|
|
41
|
+
if (!message.timestamp || !isValidTimestamp(message.timestamp)) {
|
|
42
|
+
errors.push('Missing or invalid timestamp');
|
|
43
|
+
}
|
|
44
|
+
if (!message.protocolVersion || typeof message.protocolVersion !== 'string') {
|
|
45
|
+
errors.push('Missing or invalid protocolVersion');
|
|
46
|
+
}
|
|
47
|
+
if (!message.payload || typeof message.payload !== 'object') {
|
|
48
|
+
errors.push('Missing or invalid payload');
|
|
49
|
+
}
|
|
50
|
+
// Validate protocol version compatibility
|
|
51
|
+
if (message.protocolVersion && !isCompatibleVersion(message.protocolVersion)) {
|
|
52
|
+
errors.push(`Incompatible protocol version: ${message.protocolVersion}`);
|
|
53
|
+
}
|
|
54
|
+
// Validate payload based on message type
|
|
55
|
+
if (message.type && message.payload) {
|
|
56
|
+
const payloadValidation = validatePayload(message.type, message.payload);
|
|
57
|
+
errors.push(...payloadValidation.errors);
|
|
58
|
+
}
|
|
59
|
+
return {
|
|
60
|
+
valid: errors.length === 0,
|
|
61
|
+
errors
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Validates payload based on message type
|
|
66
|
+
*/
|
|
67
|
+
function validatePayload(type, payload) {
|
|
68
|
+
switch (type) {
|
|
69
|
+
case types_1.MessageType.HANDSHAKE:
|
|
70
|
+
return validateHandshake(payload);
|
|
71
|
+
case types_1.MessageType.TASK_PROPOSAL:
|
|
72
|
+
return validateTaskProposal(payload);
|
|
73
|
+
case types_1.MessageType.TASK_BID:
|
|
74
|
+
return validateTaskBid(payload);
|
|
75
|
+
case types_1.MessageType.CONTEXT_TRANSFER:
|
|
76
|
+
return validateContextTransfer(payload);
|
|
77
|
+
case types_1.MessageType.ERROR:
|
|
78
|
+
return validateErrorMessage(payload);
|
|
79
|
+
default:
|
|
80
|
+
return { valid: true, errors: [] };
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Validates an AgentHandshake payload
|
|
85
|
+
*/
|
|
86
|
+
function validateHandshake(handshake) {
|
|
87
|
+
const errors = [];
|
|
88
|
+
if (!handshake.agentId || typeof handshake.agentId !== 'string') {
|
|
89
|
+
errors.push('Handshake: Missing or invalid agentId');
|
|
90
|
+
}
|
|
91
|
+
if (!handshake.name || typeof handshake.name !== 'string') {
|
|
92
|
+
errors.push('Handshake: Missing or invalid name');
|
|
93
|
+
}
|
|
94
|
+
if (!handshake.version || typeof handshake.version !== 'string') {
|
|
95
|
+
errors.push('Handshake: Missing or invalid version');
|
|
96
|
+
}
|
|
97
|
+
if (!handshake.protocolVersion || typeof handshake.protocolVersion !== 'string') {
|
|
98
|
+
errors.push('Handshake: Missing or invalid protocolVersion');
|
|
99
|
+
}
|
|
100
|
+
if (!Array.isArray(handshake.capabilities)) {
|
|
101
|
+
errors.push('Handshake: capabilities must be an array');
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
handshake.capabilities.forEach((cap, index) => {
|
|
105
|
+
const capValidation = validateCapability(cap);
|
|
106
|
+
capValidation.errors.forEach(err => {
|
|
107
|
+
errors.push(`Handshake: capability[${index}] - ${err}`);
|
|
108
|
+
});
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
if (handshake.maxConcurrentTasks !== undefined) {
|
|
112
|
+
if (typeof handshake.maxConcurrentTasks !== 'number' || handshake.maxConcurrentTasks < 1) {
|
|
113
|
+
errors.push('Handshake: maxConcurrentTasks must be a positive number');
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
if (handshake.currentLoad !== undefined) {
|
|
117
|
+
if (typeof handshake.currentLoad !== 'number' ||
|
|
118
|
+
handshake.currentLoad < 0 ||
|
|
119
|
+
handshake.currentLoad > 1) {
|
|
120
|
+
errors.push('Handshake: currentLoad must be between 0.0 and 1.0');
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
return {
|
|
124
|
+
valid: errors.length === 0,
|
|
125
|
+
errors
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Validates an AgentCapability
|
|
130
|
+
*/
|
|
131
|
+
function validateCapability(capability) {
|
|
132
|
+
const errors = [];
|
|
133
|
+
if (!capability.id || typeof capability.id !== 'string') {
|
|
134
|
+
errors.push('Missing or invalid capability id');
|
|
135
|
+
}
|
|
136
|
+
if (!capability.type || !Object.values(types_1.CapabilityType).includes(capability.type)) {
|
|
137
|
+
errors.push('Missing or invalid capability type');
|
|
138
|
+
}
|
|
139
|
+
if (!capability.name || typeof capability.name !== 'string') {
|
|
140
|
+
errors.push('Missing or invalid capability name');
|
|
141
|
+
}
|
|
142
|
+
if (!capability.description || typeof capability.description !== 'string') {
|
|
143
|
+
errors.push('Missing or invalid capability description');
|
|
144
|
+
}
|
|
145
|
+
if (capability.estimatedCost !== undefined && typeof capability.estimatedCost !== 'number') {
|
|
146
|
+
errors.push('estimatedCost must be a number');
|
|
147
|
+
}
|
|
148
|
+
if (capability.averageLatency !== undefined && typeof capability.averageLatency !== 'number') {
|
|
149
|
+
errors.push('averageLatency must be a number');
|
|
150
|
+
}
|
|
151
|
+
return {
|
|
152
|
+
valid: errors.length === 0,
|
|
153
|
+
errors
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Validates a TaskProposal payload
|
|
158
|
+
*/
|
|
159
|
+
function validateTaskProposal(proposal) {
|
|
160
|
+
const errors = [];
|
|
161
|
+
if (!proposal.taskId || typeof proposal.taskId !== 'string') {
|
|
162
|
+
errors.push('TaskProposal: Missing or invalid taskId');
|
|
163
|
+
}
|
|
164
|
+
if (!proposal.proposerId || typeof proposal.proposerId !== 'string') {
|
|
165
|
+
errors.push('TaskProposal: Missing or invalid proposerId');
|
|
166
|
+
}
|
|
167
|
+
if (!proposal.description || typeof proposal.description !== 'string') {
|
|
168
|
+
errors.push('TaskProposal: Missing or invalid description');
|
|
169
|
+
}
|
|
170
|
+
if (!proposal.requiredCapability ||
|
|
171
|
+
!Object.values(types_1.CapabilityType).includes(proposal.requiredCapability)) {
|
|
172
|
+
errors.push('TaskProposal: Missing or invalid requiredCapability');
|
|
173
|
+
}
|
|
174
|
+
if (!proposal.input || typeof proposal.input !== 'object') {
|
|
175
|
+
errors.push('TaskProposal: Missing or invalid input');
|
|
176
|
+
}
|
|
177
|
+
if (proposal.priority !== undefined) {
|
|
178
|
+
if (typeof proposal.priority !== 'number' ||
|
|
179
|
+
proposal.priority < 1 ||
|
|
180
|
+
proposal.priority > 10) {
|
|
181
|
+
errors.push('TaskProposal: priority must be between 1 and 10');
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
if (proposal.maxLatency !== undefined &&
|
|
185
|
+
(typeof proposal.maxLatency !== 'number' || proposal.maxLatency <= 0)) {
|
|
186
|
+
errors.push('TaskProposal: maxLatency must be a positive number');
|
|
187
|
+
}
|
|
188
|
+
if (proposal.maxCost !== undefined &&
|
|
189
|
+
(typeof proposal.maxCost !== 'number' || proposal.maxCost <= 0)) {
|
|
190
|
+
errors.push('TaskProposal: maxCost must be a positive number');
|
|
191
|
+
}
|
|
192
|
+
if (proposal.deadline !== undefined && !isValidTimestamp(proposal.deadline)) {
|
|
193
|
+
errors.push('TaskProposal: Invalid deadline timestamp');
|
|
194
|
+
}
|
|
195
|
+
return {
|
|
196
|
+
valid: errors.length === 0,
|
|
197
|
+
errors
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Validates a TaskBid payload
|
|
202
|
+
*/
|
|
203
|
+
function validateTaskBid(bid) {
|
|
204
|
+
const errors = [];
|
|
205
|
+
if (!bid.taskId || typeof bid.taskId !== 'string') {
|
|
206
|
+
errors.push('TaskBid: Missing or invalid taskId');
|
|
207
|
+
}
|
|
208
|
+
if (!bid.bidderId || typeof bid.bidderId !== 'string') {
|
|
209
|
+
errors.push('TaskBid: Missing or invalid bidderId');
|
|
210
|
+
}
|
|
211
|
+
if (typeof bid.estimatedLatency !== 'number' || bid.estimatedLatency <= 0) {
|
|
212
|
+
errors.push('TaskBid: estimatedLatency must be a positive number');
|
|
213
|
+
}
|
|
214
|
+
if (typeof bid.estimatedCost !== 'number' || bid.estimatedCost < 0) {
|
|
215
|
+
errors.push('TaskBid: estimatedCost must be a non-negative number');
|
|
216
|
+
}
|
|
217
|
+
if (typeof bid.confidence !== 'number' || bid.confidence < 0 || bid.confidence > 1) {
|
|
218
|
+
errors.push('TaskBid: confidence must be between 0.0 and 1.0');
|
|
219
|
+
}
|
|
220
|
+
if (typeof bid.queueDepth !== 'number' || bid.queueDepth < 0) {
|
|
221
|
+
errors.push('TaskBid: queueDepth must be a non-negative number');
|
|
222
|
+
}
|
|
223
|
+
if (bid.earliestStartTime !== undefined && !isValidTimestamp(bid.earliestStartTime)) {
|
|
224
|
+
errors.push('TaskBid: Invalid earliestStartTime timestamp');
|
|
225
|
+
}
|
|
226
|
+
return {
|
|
227
|
+
valid: errors.length === 0,
|
|
228
|
+
errors
|
|
229
|
+
};
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Validates a ContextTransfer payload
|
|
233
|
+
*/
|
|
234
|
+
function validateContextTransfer(transfer) {
|
|
235
|
+
const errors = [];
|
|
236
|
+
if (!transfer.fromAgent || typeof transfer.fromAgent !== 'string') {
|
|
237
|
+
errors.push('ContextTransfer: Missing or invalid fromAgent');
|
|
238
|
+
}
|
|
239
|
+
if (!transfer.toAgent || typeof transfer.toAgent !== 'string') {
|
|
240
|
+
errors.push('ContextTransfer: Missing or invalid toAgent');
|
|
241
|
+
}
|
|
242
|
+
if (!transfer.taskId || typeof transfer.taskId !== 'string') {
|
|
243
|
+
errors.push('ContextTransfer: Missing or invalid taskId');
|
|
244
|
+
}
|
|
245
|
+
if (!transfer.contextType || typeof transfer.contextType !== 'string') {
|
|
246
|
+
errors.push('ContextTransfer: Missing or invalid contextType');
|
|
247
|
+
}
|
|
248
|
+
if (!transfer.data || typeof transfer.data !== 'object') {
|
|
249
|
+
errors.push('ContextTransfer: Missing or invalid data');
|
|
250
|
+
}
|
|
251
|
+
if (transfer.embedding !== undefined) {
|
|
252
|
+
if (!Array.isArray(transfer.embedding)) {
|
|
253
|
+
errors.push('ContextTransfer: embedding must be an array');
|
|
254
|
+
}
|
|
255
|
+
else if (!transfer.embedding.every((n) => typeof n === 'number')) {
|
|
256
|
+
errors.push('ContextTransfer: embedding must contain only numbers');
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
if (transfer.compression !== undefined) {
|
|
260
|
+
const validCompressions = ['gzip', 'brotli', 'none'];
|
|
261
|
+
if (!validCompressions.includes(transfer.compression)) {
|
|
262
|
+
errors.push('ContextTransfer: Invalid compression format');
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
return {
|
|
266
|
+
valid: errors.length === 0,
|
|
267
|
+
errors
|
|
268
|
+
};
|
|
269
|
+
}
|
|
270
|
+
/**
|
|
271
|
+
* Validates an ErrorMessage payload
|
|
272
|
+
*/
|
|
273
|
+
function validateErrorMessage(error) {
|
|
274
|
+
const errors = [];
|
|
275
|
+
if (!error.code || typeof error.code !== 'string') {
|
|
276
|
+
errors.push('ErrorMessage: Missing or invalid code');
|
|
277
|
+
}
|
|
278
|
+
if (!error.message || typeof error.message !== 'string') {
|
|
279
|
+
errors.push('ErrorMessage: Missing or invalid message');
|
|
280
|
+
}
|
|
281
|
+
if (typeof error.recoverable !== 'boolean') {
|
|
282
|
+
errors.push('ErrorMessage: recoverable must be a boolean');
|
|
283
|
+
}
|
|
284
|
+
return {
|
|
285
|
+
valid: errors.length === 0,
|
|
286
|
+
errors
|
|
287
|
+
};
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* Checks if a timestamp is valid ISO 8601 format
|
|
291
|
+
*/
|
|
292
|
+
function isValidTimestamp(timestamp) {
|
|
293
|
+
if (typeof timestamp !== 'string')
|
|
294
|
+
return false;
|
|
295
|
+
const date = new Date(timestamp);
|
|
296
|
+
return !isNaN(date.getTime()) && date.toISOString() === timestamp;
|
|
297
|
+
}
|
|
298
|
+
/**
|
|
299
|
+
* Checks if a protocol version is compatible with this implementation
|
|
300
|
+
*/
|
|
301
|
+
function isCompatibleVersion(version) {
|
|
302
|
+
// Simple major version check (1.x.x is compatible with 1.0.0)
|
|
303
|
+
const [major] = version.split('.');
|
|
304
|
+
const [expectedMajor] = exports.PROTOCOL_VERSION.split('.');
|
|
305
|
+
return major === expectedMajor;
|
|
306
|
+
}
|
|
307
|
+
/**
|
|
308
|
+
* Creates a validation error message
|
|
309
|
+
*/
|
|
310
|
+
function createValidationError(errors) {
|
|
311
|
+
return {
|
|
312
|
+
code: 'VALIDATION_ERROR',
|
|
313
|
+
message: 'Message validation failed',
|
|
314
|
+
details: { errors },
|
|
315
|
+
recoverable: true
|
|
316
|
+
};
|
|
317
|
+
}
|
|
318
|
+
/**
|
|
319
|
+
* Sanitizes a message by removing invalid fields
|
|
320
|
+
*/
|
|
321
|
+
function sanitizeMessage(message) {
|
|
322
|
+
const sanitized = {};
|
|
323
|
+
// Copy only valid fields
|
|
324
|
+
if (message.messageId)
|
|
325
|
+
sanitized.messageId = message.messageId;
|
|
326
|
+
if (message.type)
|
|
327
|
+
sanitized.type = message.type;
|
|
328
|
+
if (message.from)
|
|
329
|
+
sanitized.from = message.from;
|
|
330
|
+
if (message.to)
|
|
331
|
+
sanitized.to = message.to;
|
|
332
|
+
if (message.timestamp)
|
|
333
|
+
sanitized.timestamp = message.timestamp;
|
|
334
|
+
if (message.protocolVersion)
|
|
335
|
+
sanitized.protocolVersion = message.protocolVersion;
|
|
336
|
+
if (message.payload)
|
|
337
|
+
sanitized.payload = message.payload;
|
|
338
|
+
if (message.correlationId)
|
|
339
|
+
sanitized.correlationId = message.correlationId;
|
|
340
|
+
if (message.metadata)
|
|
341
|
+
sanitized.metadata = message.metadata;
|
|
342
|
+
return sanitized;
|
|
343
|
+
}
|
|
344
|
+
//# sourceMappingURL=validators.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validators.js","sourceRoot":"","sources":["../../src/protocol/validators.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Authentication Manager
|
|
3
|
+
* Handles API key generation, validation, and agent authentication
|
|
4
|
+
*/
|
|
5
|
+
export interface ApiKey {
|
|
6
|
+
key: string;
|
|
7
|
+
agentId: string;
|
|
8
|
+
name: string;
|
|
9
|
+
createdAt: number;
|
|
10
|
+
expiresAt?: number;
|
|
11
|
+
permissions: string[];
|
|
12
|
+
rateLimit?: {
|
|
13
|
+
requestsPerMinute: number;
|
|
14
|
+
requestsPerHour: number;
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
export interface AuthConfig {
|
|
18
|
+
enabled: boolean;
|
|
19
|
+
requireApiKey: boolean;
|
|
20
|
+
allowedOrigins?: string[];
|
|
21
|
+
defaultRateLimit?: {
|
|
22
|
+
requestsPerMinute: number;
|
|
23
|
+
requestsPerHour: number;
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
export declare class AuthManager {
|
|
27
|
+
private apiKeys;
|
|
28
|
+
private config;
|
|
29
|
+
constructor(config: AuthConfig);
|
|
30
|
+
/**
|
|
31
|
+
* Generate a new API key for an agent
|
|
32
|
+
*/
|
|
33
|
+
generateApiKey(agentId: string, name: string, options?: {
|
|
34
|
+
expiresIn?: number;
|
|
35
|
+
permissions?: string[];
|
|
36
|
+
rateLimit?: {
|
|
37
|
+
requestsPerMinute: number;
|
|
38
|
+
requestsPerHour: number;
|
|
39
|
+
};
|
|
40
|
+
}): string;
|
|
41
|
+
/**
|
|
42
|
+
* Validate an API key
|
|
43
|
+
*/
|
|
44
|
+
validateApiKey(key: string): {
|
|
45
|
+
valid: boolean;
|
|
46
|
+
apiKey?: ApiKey;
|
|
47
|
+
reason?: string;
|
|
48
|
+
};
|
|
49
|
+
/**
|
|
50
|
+
* Revoke an API key
|
|
51
|
+
*/
|
|
52
|
+
revokeApiKey(key: string): boolean;
|
|
53
|
+
/**
|
|
54
|
+
* List all API keys for an agent
|
|
55
|
+
*/
|
|
56
|
+
listApiKeys(agentId?: string): ApiKey[];
|
|
57
|
+
/**
|
|
58
|
+
* Check if agent has permission
|
|
59
|
+
*/
|
|
60
|
+
hasPermission(apiKey: ApiKey, permission: string): boolean;
|
|
61
|
+
/**
|
|
62
|
+
* Validate origin (CORS)
|
|
63
|
+
*/
|
|
64
|
+
validateOrigin(origin: string): boolean;
|
|
65
|
+
/**
|
|
66
|
+
* Get rate limit for API key
|
|
67
|
+
*/
|
|
68
|
+
getRateLimit(apiKey: ApiKey): {
|
|
69
|
+
requestsPerMinute: number;
|
|
70
|
+
requestsPerHour: number;
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=AuthManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AuthManager.d.ts","sourceRoot":"","sources":["../../src/security/AuthManager.ts"],"names":[],"mappings":"AAEA;;;GAGG;AAEH,MAAM,WAAW,MAAM;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,SAAS,CAAC,EAAE;QACV,iBAAiB,EAAE,MAAM,CAAC;QAC1B,eAAe,EAAE,MAAM,CAAC;KACzB,CAAC;CACH;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,OAAO,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,gBAAgB,CAAC,EAAE;QACjB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,eAAe,EAAE,MAAM,CAAC;KACzB,CAAC;CACH;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,OAAO,CAAkC;IACjD,OAAO,CAAC,MAAM,CAAa;gBAEf,MAAM,EAAE,UAAU;IAI9B;;OAEG;IACH,cAAc,CACZ,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE;QACR,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;QACvB,SAAS,CAAC,EAAE;YAAE,iBAAiB,EAAE,MAAM,CAAC;YAAC,eAAe,EAAE,MAAM,CAAA;SAAE,CAAC;KACpE,GACA,MAAM;IAqBT;;OAEG;IACH,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG;QAC3B,KAAK,EAAE,OAAO,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB;IAuBD;;OAEG;IACH,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIlC;;OAEG;IACH,WAAW,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE;IAUvC;;OAEG;IACH,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO;IAQ1D;;OAEG;IACH,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAYvC;;OAEG;IACH,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG;QAC5B,iBAAiB,EAAE,MAAM,CAAC;QAC1B,eAAe,EAAE,MAAM,CAAC;KACzB;CASF"}
|
|
@@ -0,0 +1,102 @@
|
|
|
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.AuthManager = void 0;
|
|
7
|
+
const crypto_1 = __importDefault(require("crypto"));
|
|
8
|
+
class AuthManager {
|
|
9
|
+
constructor(config) {
|
|
10
|
+
this.apiKeys = new Map();
|
|
11
|
+
this.config = config;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Generate a new API key for an agent
|
|
15
|
+
*/
|
|
16
|
+
generateApiKey(agentId, name, options) {
|
|
17
|
+
// Generate secure random key
|
|
18
|
+
const key = `lma_${crypto_1.default.randomBytes(32).toString('hex')}`;
|
|
19
|
+
const apiKey = {
|
|
20
|
+
key,
|
|
21
|
+
agentId,
|
|
22
|
+
name,
|
|
23
|
+
createdAt: Date.now(),
|
|
24
|
+
expiresAt: options?.expiresIn
|
|
25
|
+
? Date.now() + options.expiresIn
|
|
26
|
+
: undefined,
|
|
27
|
+
permissions: options?.permissions || ['*'],
|
|
28
|
+
rateLimit: options?.rateLimit || this.config.defaultRateLimit,
|
|
29
|
+
};
|
|
30
|
+
this.apiKeys.set(key, apiKey);
|
|
31
|
+
return key;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Validate an API key
|
|
35
|
+
*/
|
|
36
|
+
validateApiKey(key) {
|
|
37
|
+
if (!this.config.enabled || !this.config.requireApiKey) {
|
|
38
|
+
return { valid: true };
|
|
39
|
+
}
|
|
40
|
+
if (!key) {
|
|
41
|
+
return { valid: false, reason: 'API key required' };
|
|
42
|
+
}
|
|
43
|
+
const apiKey = this.apiKeys.get(key);
|
|
44
|
+
if (!apiKey) {
|
|
45
|
+
return { valid: false, reason: 'Invalid API key' };
|
|
46
|
+
}
|
|
47
|
+
// Check expiration
|
|
48
|
+
if (apiKey.expiresAt && Date.now() > apiKey.expiresAt) {
|
|
49
|
+
return { valid: false, reason: 'API key expired' };
|
|
50
|
+
}
|
|
51
|
+
return { valid: true, apiKey };
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Revoke an API key
|
|
55
|
+
*/
|
|
56
|
+
revokeApiKey(key) {
|
|
57
|
+
return this.apiKeys.delete(key);
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* List all API keys for an agent
|
|
61
|
+
*/
|
|
62
|
+
listApiKeys(agentId) {
|
|
63
|
+
const keys = Array.from(this.apiKeys.values());
|
|
64
|
+
if (agentId) {
|
|
65
|
+
return keys.filter((k) => k.agentId === agentId);
|
|
66
|
+
}
|
|
67
|
+
return keys;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Check if agent has permission
|
|
71
|
+
*/
|
|
72
|
+
hasPermission(apiKey, permission) {
|
|
73
|
+
if (apiKey.permissions.includes('*')) {
|
|
74
|
+
return true;
|
|
75
|
+
}
|
|
76
|
+
return apiKey.permissions.includes(permission);
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Validate origin (CORS)
|
|
80
|
+
*/
|
|
81
|
+
validateOrigin(origin) {
|
|
82
|
+
if (!this.config.allowedOrigins || this.config.allowedOrigins.length === 0) {
|
|
83
|
+
return true; // Allow all if not configured
|
|
84
|
+
}
|
|
85
|
+
if (this.config.allowedOrigins.includes('*')) {
|
|
86
|
+
return true;
|
|
87
|
+
}
|
|
88
|
+
return this.config.allowedOrigins.includes(origin);
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Get rate limit for API key
|
|
92
|
+
*/
|
|
93
|
+
getRateLimit(apiKey) {
|
|
94
|
+
return (apiKey.rateLimit ||
|
|
95
|
+
this.config.defaultRateLimit || {
|
|
96
|
+
requestsPerMinute: 60,
|
|
97
|
+
requestsPerHour: 1000,
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
exports.AuthManager = AuthManager;
|
|
102
|
+
//# sourceMappingURL=AuthManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AuthManager.js","sourceRoot":"","sources":["../../src/security/AuthManager.ts"],"names":[],"mappings":";;;;;;AAAA,oDAA4B;AA8B5B,MAAa,WAAW;IAItB,YAAY,MAAkB;QAHtB,YAAO,GAAwB,IAAI,GAAG,EAAE,CAAC;QAI/C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,cAAc,CACZ,OAAe,EACf,IAAY,EACZ,OAIC;QAED,6BAA6B;QAC7B,MAAM,GAAG,GAAG,OAAO,gBAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAE5D,MAAM,MAAM,GAAW;YACrB,GAAG;YACH,OAAO;YACP,IAAI;YACJ,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,SAAS,EAAE,OAAO,EAAE,SAAS;gBAC3B,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,SAAS;gBAChC,CAAC,CAAC,SAAS;YACb,WAAW,EAAE,OAAO,EAAE,WAAW,IAAI,CAAC,GAAG,CAAC;YAC1C,SAAS,EAAE,OAAO,EAAE,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,gBAAgB;SAC9D,CAAC;QAEF,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAE9B,OAAO,GAAG,CAAC;IACb,CAAC;IAED;;OAEG;IACH,cAAc,CAAC,GAAW;QAKxB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;YACvD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QACzB,CAAC;QAED,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,kBAAkB,EAAE,CAAC;QACtD,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAErC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC;QACrD,CAAC;QAED,mBAAmB;QACnB,IAAI,MAAM,CAAC,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;YACtD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC;QACrD,CAAC;QAED,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,GAAW;QACtB,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAClC,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,OAAgB;QAC1B,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QAE/C,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC;QACnD,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,aAAa,CAAC,MAAc,EAAE,UAAkB;QAC9C,IAAI,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACrC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IACjD,CAAC;IAED;;OAEG;IACH,cAAc,CAAC,MAAc;QAC3B,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,IAAI,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3E,OAAO,IAAI,CAAC,CAAC,8BAA8B;QAC7C,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC7C,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACrD,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,MAAc;QAIzB,OAAO,CACL,MAAM,CAAC,SAAS;YAChB,IAAI,CAAC,MAAM,CAAC,gBAAgB,IAAI;YAC9B,iBAAiB,EAAE,EAAE;YACrB,eAAe,EAAE,IAAI;SACtB,CACF,CAAC;IACJ,CAAC;CACF;AAnID,kCAmIC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Message Sanitizer
|
|
3
|
+
* Validates and sanitizes incoming messages to prevent injection attacks
|
|
4
|
+
*/
|
|
5
|
+
export interface SanitizationResult {
|
|
6
|
+
valid: boolean;
|
|
7
|
+
sanitized?: any;
|
|
8
|
+
errors?: string[];
|
|
9
|
+
}
|
|
10
|
+
export declare class MessageSanitizer {
|
|
11
|
+
private maxStringLength;
|
|
12
|
+
private maxArrayLength;
|
|
13
|
+
private maxObjectDepth;
|
|
14
|
+
constructor(options?: {
|
|
15
|
+
maxStringLength?: number;
|
|
16
|
+
maxArrayLength?: number;
|
|
17
|
+
maxObjectDepth?: number;
|
|
18
|
+
});
|
|
19
|
+
/**
|
|
20
|
+
* Sanitize a message
|
|
21
|
+
*/
|
|
22
|
+
sanitize(message: any): SanitizationResult;
|
|
23
|
+
/**
|
|
24
|
+
* Sanitize a value recursively
|
|
25
|
+
*/
|
|
26
|
+
private sanitizeValue;
|
|
27
|
+
/**
|
|
28
|
+
* Sanitize a string
|
|
29
|
+
*/
|
|
30
|
+
private sanitizeString;
|
|
31
|
+
/**
|
|
32
|
+
* Sanitize an array
|
|
33
|
+
*/
|
|
34
|
+
private sanitizeArray;
|
|
35
|
+
/**
|
|
36
|
+
* Sanitize an object
|
|
37
|
+
*/
|
|
38
|
+
private sanitizeObject;
|
|
39
|
+
/**
|
|
40
|
+
* Validate message structure
|
|
41
|
+
*/
|
|
42
|
+
validateMessageStructure(message: any): {
|
|
43
|
+
valid: boolean;
|
|
44
|
+
errors?: string[];
|
|
45
|
+
};
|
|
46
|
+
/**
|
|
47
|
+
* Sanitize and validate a message
|
|
48
|
+
*/
|
|
49
|
+
sanitizeAndValidate(message: any): SanitizationResult;
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=MessageSanitizer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MessageSanitizer.d.ts","sourceRoot":"","sources":["../../src/security/MessageSanitizer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,OAAO,CAAC;IACf,SAAS,CAAC,EAAE,GAAG,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,cAAc,CAAS;gBAEnB,OAAO,CAAC,EAAE;QACpB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,cAAc,CAAC,EAAE,MAAM,CAAC;KACzB;IAMD;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,GAAG,GAAG,kBAAkB;IAmB1C;;OAEG;IACH,OAAO,CAAC,aAAa;IA8CrB;;OAEG;IACH,OAAO,CAAC,cAAc;IAkBtB;;OAEG;IACH,OAAO,CAAC,aAAa;IAUrB;;OAEG;IACH,OAAO,CAAC,cAAc;IAoBtB;;OAEG;IACH,wBAAwB,CAAC,OAAO,EAAE,GAAG,GAAG;QACtC,KAAK,EAAE,OAAO,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;KACnB;IAuCD;;OAEG;IACH,mBAAmB,CAAC,OAAO,EAAE,GAAG,GAAG,kBAAkB;CAatD"}
|