@autonomaai/api-schemas 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,541 @@
1
+ /**
2
+ * Schema validation utilities for autonoma API schemas.
3
+ *
4
+ * Provides runtime validation for API requests and responses using JSON Schema.
5
+ */
6
+ import Ajv from 'ajv';
7
+ import addFormats from 'ajv-formats';
8
+ // Initialize AJV with formats
9
+ const ajv = new Ajv({ allErrors: true, verbose: true });
10
+ addFormats(ajv);
11
+ // =============================================================================
12
+ // Common Response Schemas
13
+ // =============================================================================
14
+ const successResponseSchema = {
15
+ type: 'object',
16
+ properties: {
17
+ success: { type: 'boolean' },
18
+ message: { type: 'string' },
19
+ timestamp: { type: 'string', format: 'date-time' },
20
+ data: { type: 'object', nullable: true }
21
+ },
22
+ required: ['success', 'message', 'timestamp'],
23
+ additionalProperties: false
24
+ };
25
+ const errorResponseSchema = {
26
+ type: 'object',
27
+ properties: {
28
+ success: { type: 'boolean' },
29
+ error: { type: 'string' },
30
+ detail: { type: 'string', nullable: true },
31
+ error_code: { type: 'string', nullable: true },
32
+ timestamp: { type: 'string', format: 'date-time' }
33
+ },
34
+ required: ['success', 'error', 'timestamp'],
35
+ additionalProperties: false
36
+ };
37
+ // =============================================================================
38
+ // Controller Schemas
39
+ // =============================================================================
40
+ const createControllerRequestSchema = {
41
+ type: 'object',
42
+ properties: {
43
+ name: { type: 'string', minLength: 1, maxLength: 100 },
44
+ strategy: {
45
+ type: 'string',
46
+ enum: ['pure_market_making', 'avellaneda_market_making', 'twap', 'grid_trading', 'arbitrage']
47
+ },
48
+ trading_pair: { type: 'string', pattern: '^[A-Z0-9]+-[A-Z0-9]+$' },
49
+ config: { type: 'object' },
50
+ metadata: { type: 'object', nullable: true }
51
+ },
52
+ required: ['name', 'strategy', 'trading_pair', 'config'],
53
+ additionalProperties: false
54
+ };
55
+ const controllerSchema = {
56
+ type: 'object',
57
+ properties: {
58
+ id: { type: 'string', pattern: '^[a-zA-Z0-9_-]+$' },
59
+ name: { type: 'string' },
60
+ strategy: { type: 'string' },
61
+ trading_pair: { type: 'string' },
62
+ status: {
63
+ type: 'string',
64
+ enum: ['active', 'inactive', 'error', 'starting', 'stopping']
65
+ },
66
+ config: { type: 'object' },
67
+ metadata: { type: 'object', nullable: true },
68
+ created_at: { type: 'string', format: 'date-time' },
69
+ updated_at: { type: 'string', format: 'date-time' }
70
+ },
71
+ required: ['id', 'name', 'strategy', 'trading_pair', 'status', 'config', 'created_at', 'updated_at'],
72
+ additionalProperties: false
73
+ };
74
+ // =============================================================================
75
+ // Trading Signal Schemas (Unified)
76
+ // =============================================================================
77
+ const tradingSignalSchema = {
78
+ type: 'object',
79
+ properties: {
80
+ type: {
81
+ type: 'string',
82
+ enum: ['place_order', 'cancel_order', 'modify_order', 'close_position']
83
+ },
84
+ side: {
85
+ type: 'string',
86
+ enum: ['buy', 'sell']
87
+ },
88
+ amount: { type: 'number', minimum: 0, exclusiveMinimum: 0 },
89
+ price: { type: 'number', minimum: 0, exclusiveMinimum: 0, nullable: true },
90
+ order_type: {
91
+ type: 'string',
92
+ enum: ['market', 'limit', 'stop_loss', 'take_profit']
93
+ },
94
+ time_in_force: {
95
+ type: 'string',
96
+ enum: ['GTC', 'IOC', 'FOK'],
97
+ nullable: true
98
+ },
99
+ metadata: { type: 'object', nullable: true }
100
+ },
101
+ required: ['type', 'side', 'amount', 'order_type'],
102
+ additionalProperties: false
103
+ };
104
+ const executeSignalRequestSchema = {
105
+ type: 'object',
106
+ properties: {
107
+ controller_id: { type: 'string', pattern: '^[a-zA-Z0-9_-]+$' },
108
+ signal: tradingSignalSchema,
109
+ execution_options: {
110
+ type: 'object',
111
+ properties: {
112
+ dry_run: { type: 'boolean', nullable: true },
113
+ timeout_seconds: { type: 'integer', minimum: 1, maximum: 300, nullable: true }
114
+ },
115
+ required: [],
116
+ additionalProperties: false,
117
+ nullable: true
118
+ }
119
+ },
120
+ required: ['controller_id', 'signal'],
121
+ additionalProperties: false
122
+ };
123
+ // =============================================================================
124
+ // DeFi Yield Optimization Schemas
125
+ // =============================================================================
126
+ const yieldOpportunitySchema = {
127
+ type: 'object',
128
+ properties: {
129
+ protocol: { type: 'string', minLength: 1 },
130
+ pool: { type: 'string', minLength: 1 },
131
+ apy: { type: 'number', minimum: 0, maximum: 10000 }, // Max 10,000% APY for safety
132
+ tvl: { type: 'number', minimum: 0 },
133
+ risk_score: { type: 'number', minimum: 0, maximum: 100 },
134
+ chain: {
135
+ type: 'string',
136
+ enum: ['ethereum', 'arbitrum', 'polygon', 'base', 'optimism', 'bsc', 'avalanche']
137
+ },
138
+ asset: { type: 'string', minLength: 1 },
139
+ lockup_period: { type: 'number', minimum: 0, nullable: true },
140
+ minimum_deposit: { type: 'number', minimum: 0, nullable: true },
141
+ confidence_score: { type: 'number', minimum: 0, maximum: 100 },
142
+ last_updated: { type: 'string', format: 'date-time' }
143
+ },
144
+ required: ['protocol', 'pool', 'apy', 'tvl', 'risk_score', 'chain', 'asset', 'confidence_score', 'last_updated'],
145
+ additionalProperties: false
146
+ };
147
+ const yieldSearchRequestSchema = {
148
+ type: 'object',
149
+ properties: {
150
+ search_criteria: {
151
+ type: 'object',
152
+ properties: {
153
+ asset: { type: 'string', nullable: true },
154
+ chain: {
155
+ type: 'array',
156
+ items: { type: 'string' },
157
+ nullable: true
158
+ },
159
+ min_apy: { type: 'number', minimum: 0, nullable: true },
160
+ max_risk: { type: 'number', minimum: 0, maximum: 100, nullable: true },
161
+ min_tvl: { type: 'number', minimum: 0, nullable: true },
162
+ protocols: {
163
+ type: 'array',
164
+ items: { type: 'string' },
165
+ nullable: true
166
+ },
167
+ limit: { type: 'integer', minimum: 1, maximum: 100, nullable: true }
168
+ },
169
+ required: [],
170
+ additionalProperties: false
171
+ },
172
+ risk_tolerance: {
173
+ type: 'string',
174
+ enum: ['conservative', 'moderate', 'aggressive']
175
+ },
176
+ time_horizon: {
177
+ type: 'string',
178
+ enum: ['short', 'medium', 'long']
179
+ }
180
+ },
181
+ required: ['search_criteria', 'risk_tolerance', 'time_horizon'],
182
+ additionalProperties: false
183
+ };
184
+ const allocationOptimizationSchema = {
185
+ type: 'object',
186
+ properties: {
187
+ strategy: {
188
+ type: 'string',
189
+ enum: ['max_sharpe', 'risk_parity', 'mean_variance']
190
+ },
191
+ allocations: {
192
+ type: 'object',
193
+ additionalProperties: { type: 'number', minimum: 0, maximum: 1 },
194
+ required: []
195
+ },
196
+ expected_return: { type: 'number' },
197
+ expected_risk: { type: 'number', minimum: 0 },
198
+ sharpe_ratio: { type: 'number' },
199
+ constraints: {
200
+ type: 'object',
201
+ properties: {
202
+ max_protocol_allocation: { type: 'number', minimum: 0, maximum: 1 },
203
+ max_single_asset: { type: 'number', minimum: 0, maximum: 1 },
204
+ min_liquidity: { type: 'number', minimum: 0 },
205
+ max_risk_score: { type: 'number', minimum: 0, maximum: 100 },
206
+ required_chains: {
207
+ type: 'array',
208
+ items: { type: 'string' },
209
+ nullable: true
210
+ }
211
+ },
212
+ required: ['max_protocol_allocation', 'max_single_asset', 'min_liquidity', 'max_risk_score'],
213
+ additionalProperties: false
214
+ },
215
+ rebalancing_threshold: { type: 'number', minimum: 0, maximum: 1 }
216
+ },
217
+ required: ['strategy', 'allocations', 'expected_return', 'expected_risk', 'sharpe_ratio', 'constraints', 'rebalancing_threshold'],
218
+ additionalProperties: false
219
+ };
220
+ const defiSignalSchema = {
221
+ type: 'object',
222
+ properties: {
223
+ type: {
224
+ type: 'string',
225
+ enum: ['defi_yield_action']
226
+ },
227
+ protocol: { type: 'string', minLength: 1 },
228
+ action: {
229
+ type: 'string',
230
+ enum: ['deposit', 'withdraw', 'compound', 'rebalance']
231
+ },
232
+ amount: { type: 'number', minimum: 0, exclusiveMinimum: 0 },
233
+ asset: { type: 'string', minLength: 1 },
234
+ target_apy: { type: 'number', minimum: 0, nullable: true },
235
+ max_slippage: { type: 'number', minimum: 0, maximum: 1, nullable: true },
236
+ metadata: { type: 'object', nullable: true }
237
+ },
238
+ required: ['type', 'protocol', 'action', 'amount', 'asset'],
239
+ additionalProperties: false
240
+ };
241
+ const portfolioRiskAssessmentSchema = {
242
+ type: 'object',
243
+ properties: {
244
+ var_95: { type: 'number' },
245
+ var_99: { type: 'number' },
246
+ expected_shortfall: { type: 'number' },
247
+ portfolio_volatility: { type: 'number', minimum: 0 },
248
+ correlation_risk: { type: 'number', minimum: 0, maximum: 100 },
249
+ concentration_risk: { type: 'number', minimum: 0, maximum: 100 },
250
+ liquidity_risk: { type: 'number', minimum: 0, maximum: 100 },
251
+ overall_risk_score: { type: 'number', minimum: 0, maximum: 100 },
252
+ recommendations: {
253
+ type: 'array',
254
+ items: { type: 'string' }
255
+ }
256
+ },
257
+ required: ['var_95', 'var_99', 'expected_shortfall', 'portfolio_volatility', 'correlation_risk', 'concentration_risk', 'liquidity_risk', 'overall_risk_score', 'recommendations'],
258
+ additionalProperties: false
259
+ };
260
+ // =============================================================================
261
+ // Updated Compiled Validators
262
+ // =============================================================================
263
+ const validators = {
264
+ // Existing validators
265
+ successResponse: ajv.compile(successResponseSchema),
266
+ errorResponse: ajv.compile(errorResponseSchema),
267
+ createControllerRequest: ajv.compile(createControllerRequestSchema),
268
+ controller: ajv.compile(controllerSchema),
269
+ tradingSignal: ajv.compile(tradingSignalSchema),
270
+ executeSignalRequest: ajv.compile(executeSignalRequestSchema),
271
+ // New DeFi validators
272
+ yieldOpportunity: ajv.compile(yieldOpportunitySchema),
273
+ yieldSearchRequest: ajv.compile(yieldSearchRequestSchema),
274
+ allocationOptimization: ajv.compile(allocationOptimizationSchema),
275
+ defiSignal: ajv.compile(defiSignalSchema),
276
+ portfolioRiskAssessment: ajv.compile(portfolioRiskAssessmentSchema)
277
+ };
278
+ // =============================================================================
279
+ // Validation Functions
280
+ // =============================================================================
281
+ function formatValidationErrors(validator) {
282
+ if (!validator.errors)
283
+ return [];
284
+ return validator.errors.map((error) => ({
285
+ field: error.instancePath || error.schemaPath,
286
+ message: error.message || 'Validation error',
287
+ value: error.data,
288
+ code: error.keyword || 'VALIDATION_ERROR'
289
+ }));
290
+ }
291
+ /**
292
+ * Validate a success response
293
+ */
294
+ export function validateSuccessResponse(data) {
295
+ const valid = validators.successResponse(data);
296
+ return {
297
+ valid,
298
+ errors: valid ? [] : formatValidationErrors(validators.successResponse),
299
+ data: valid ? data : null
300
+ };
301
+ }
302
+ /**
303
+ * Validate an error response
304
+ */
305
+ export function validateErrorResponse(data) {
306
+ const valid = validators.errorResponse(data);
307
+ return {
308
+ valid,
309
+ errors: valid ? [] : formatValidationErrors(validators.errorResponse),
310
+ data: valid ? data : null
311
+ };
312
+ }
313
+ /**
314
+ * Validate create controller request
315
+ */
316
+ export function validateCreateControllerRequest(data) {
317
+ const valid = validators.createControllerRequest(data);
318
+ return {
319
+ valid,
320
+ errors: valid ? [] : formatValidationErrors(validators.createControllerRequest),
321
+ data: valid ? data : null
322
+ };
323
+ }
324
+ /**
325
+ * Validate controller object
326
+ */
327
+ export function validateController(data) {
328
+ const valid = validators.controller(data);
329
+ return {
330
+ valid,
331
+ errors: valid ? [] : formatValidationErrors(validators.controller),
332
+ data: valid ? data : null
333
+ };
334
+ }
335
+ /**
336
+ * Validate trading signal
337
+ */
338
+ export function validateTradingSignal(data) {
339
+ const valid = validators.tradingSignal(data);
340
+ return {
341
+ valid,
342
+ errors: valid ? [] : formatValidationErrors(validators.tradingSignal),
343
+ data: valid ? data : null
344
+ };
345
+ }
346
+ /**
347
+ * Validate execute signal request (UNIFIED)
348
+ */
349
+ export function validateExecuteSignalRequest(data) {
350
+ const valid = validators.executeSignalRequest(data);
351
+ return {
352
+ valid,
353
+ errors: valid ? [] : formatValidationErrors(validators.executeSignalRequest),
354
+ data: valid ? data : null
355
+ };
356
+ }
357
+ // =============================================================================
358
+ // DeFi Yield Validation Functions
359
+ // =============================================================================
360
+ export function validateYieldOpportunity(data) {
361
+ const isValid = validators.yieldOpportunity(data);
362
+ return {
363
+ valid: isValid,
364
+ errors: isValid ? [] : formatValidationErrors(validators.yieldOpportunity),
365
+ data: isValid ? data : null
366
+ };
367
+ }
368
+ export function validateYieldSearchRequest(data) {
369
+ const isValid = validators.yieldSearchRequest(data);
370
+ return {
371
+ valid: isValid,
372
+ errors: isValid ? [] : formatValidationErrors(validators.yieldSearchRequest),
373
+ data: isValid ? data : null
374
+ };
375
+ }
376
+ export function validateAllocationOptimization(data) {
377
+ const isValid = validators.allocationOptimization(data);
378
+ return {
379
+ valid: isValid,
380
+ errors: isValid ? [] : formatValidationErrors(validators.allocationOptimization),
381
+ data: isValid ? data : null
382
+ };
383
+ }
384
+ export function validateDeFiSignal(data) {
385
+ const isValid = validators.defiSignal(data);
386
+ return {
387
+ valid: isValid,
388
+ errors: isValid ? [] : formatValidationErrors(validators.defiSignal),
389
+ data: isValid ? data : null
390
+ };
391
+ }
392
+ export function validatePortfolioRiskAssessment(data) {
393
+ const isValid = validators.portfolioRiskAssessment(data);
394
+ return {
395
+ valid: isValid,
396
+ errors: isValid ? [] : formatValidationErrors(validators.portfolioRiskAssessment),
397
+ data: isValid ? data : null
398
+ };
399
+ }
400
+ // =============================================================================
401
+ // DeFi Response Helpers
402
+ // =============================================================================
403
+ export function createYieldOpportunityResponse(opportunities, metadata) {
404
+ return validateSuccessResponse({
405
+ success: true,
406
+ message: 'Yield opportunities found successfully',
407
+ timestamp: new Date().toISOString(),
408
+ data: {
409
+ opportunities,
410
+ count: opportunities.length,
411
+ metadata: {
412
+ search_timestamp: new Date().toISOString(),
413
+ ...metadata
414
+ }
415
+ }
416
+ });
417
+ }
418
+ export function createAllocationOptimizationResponse(optimization, metadata) {
419
+ return validateSuccessResponse({
420
+ success: true,
421
+ message: 'Portfolio optimization completed successfully',
422
+ timestamp: new Date().toISOString(),
423
+ data: {
424
+ optimization,
425
+ metadata: {
426
+ optimization_timestamp: new Date().toISOString(),
427
+ ...metadata
428
+ }
429
+ }
430
+ });
431
+ }
432
+ export function createDeFiSignalResponse(execution_result, metadata) {
433
+ return validateSuccessResponse({
434
+ success: true,
435
+ message: 'DeFi signal executed successfully',
436
+ timestamp: new Date().toISOString(),
437
+ data: {
438
+ execution_result,
439
+ metadata: {
440
+ execution_timestamp: new Date().toISOString(),
441
+ ...metadata
442
+ }
443
+ }
444
+ });
445
+ }
446
+ // =============================================================================
447
+ // Validation Middleware Helpers
448
+ // =============================================================================
449
+ /**
450
+ * Express middleware factory for request validation
451
+ */
452
+ export function createValidationMiddleware(validator) {
453
+ return (req, res, next) => {
454
+ const result = validator(req.body);
455
+ if (!result.valid) {
456
+ return res.status(400).json({
457
+ success: false,
458
+ error: 'Validation failed',
459
+ detail: 'Request body does not match required schema',
460
+ validation_errors: result.errors,
461
+ timestamp: new Date().toISOString()
462
+ });
463
+ }
464
+ next();
465
+ };
466
+ }
467
+ /**
468
+ * FastAPI dependency for request validation (Python equivalent helper)
469
+ */
470
+ export function generatePythonValidator(schemaName) {
471
+ return `
472
+ def validate_${schemaName}(data: dict) -> ValidationResult:
473
+ """
474
+ Validate ${schemaName} data against unified schema.
475
+
476
+ This should be replaced with actual Python Pydantic validation
477
+ based on the OpenAPI specification.
478
+ """
479
+ # TODO: Implement with Pydantic models generated from OpenAPI spec
480
+ return {"valid": True, "errors": []}
481
+ `;
482
+ }
483
+ // =============================================================================
484
+ // Schema Migration Helpers
485
+ // =============================================================================
486
+ /**
487
+ * Convert legacy execute signal format to unified format
488
+ */
489
+ export function migrateLegacyExecuteSignal(legacyData) {
490
+ // Handle old format: { signal_type, parameters }
491
+ if (legacyData.signal_type && legacyData.parameters) {
492
+ return {
493
+ controller_id: legacyData.controller_id,
494
+ signal: {
495
+ type: legacyData.signal_type,
496
+ ...legacyData.parameters
497
+ }
498
+ };
499
+ }
500
+ // Handle old format with different signal structure
501
+ if (legacyData.signal && typeof legacyData.signal === 'object') {
502
+ const signal = legacyData.signal;
503
+ // Ensure required fields are present and normalized
504
+ return {
505
+ controller_id: legacyData.controller_id,
506
+ signal: {
507
+ type: signal.type || 'place_order',
508
+ side: signal.side,
509
+ amount: signal.amount,
510
+ price: signal.price,
511
+ order_type: signal.order_type || 'limit',
512
+ time_in_force: signal.time_in_force || 'GTC',
513
+ metadata: signal.metadata
514
+ }
515
+ };
516
+ }
517
+ // Already in correct format
518
+ return legacyData;
519
+ }
520
+ /**
521
+ * Convert unified format to legacy format for backward compatibility
522
+ */
523
+ export function convertToLegacyFormat(unifiedData, format) {
524
+ if (format === 'signal_type') {
525
+ return {
526
+ controller_id: unifiedData.controller_id,
527
+ signal_type: unifiedData.signal.type,
528
+ parameters: {
529
+ side: unifiedData.signal.side,
530
+ amount: unifiedData.signal.amount,
531
+ price: unifiedData.signal.price,
532
+ order_type: unifiedData.signal.order_type,
533
+ time_in_force: unifiedData.signal.time_in_force,
534
+ ...unifiedData.signal.metadata
535
+ }
536
+ };
537
+ }
538
+ // Default: nested format (current unified format)
539
+ return unifiedData;
540
+ }
541
+ //# sourceMappingURL=validators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validators.js","sourceRoot":"","sources":["../src/validators.ts"],"names":[],"mappings":"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"}