@gala-chain/launchpad-mcp-server 1.4.0 → 1.5.1

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.
Files changed (116) hide show
  1. package/.eslintrc.json +9 -1
  2. package/dist/constants/mcpToolNames.d.ts +159 -0
  3. package/dist/constants/mcpToolNames.d.ts.map +1 -0
  4. package/dist/constants/mcpToolNames.js +131 -0
  5. package/dist/constants/mcpToolNames.js.map +1 -0
  6. package/dist/prompts/__tests__/promptStructure.test.d.ts +7 -0
  7. package/dist/prompts/__tests__/promptStructure.test.d.ts.map +1 -0
  8. package/dist/prompts/__tests__/promptStructure.test.js +106 -0
  9. package/dist/prompts/__tests__/promptStructure.test.js.map +1 -0
  10. package/dist/prompts/__tests__/registry.test.d.ts +7 -0
  11. package/dist/prompts/__tests__/registry.test.d.ts.map +1 -0
  12. package/dist/prompts/__tests__/registry.test.js +119 -0
  13. package/dist/prompts/__tests__/registry.test.js.map +1 -0
  14. package/dist/prompts/analysis.d.ts.map +1 -1
  15. package/dist/prompts/analysis.js +97 -65
  16. package/dist/prompts/analysis.js.map +1 -1
  17. package/dist/prompts/index.d.ts +58 -1
  18. package/dist/prompts/index.d.ts.map +1 -1
  19. package/dist/prompts/index.js +83 -3
  20. package/dist/prompts/index.js.map +1 -1
  21. package/dist/prompts/portfolio.d.ts.map +1 -1
  22. package/dist/prompts/portfolio.js +80 -76
  23. package/dist/prompts/portfolio.js.map +1 -1
  24. package/dist/prompts/trading.d.ts.map +1 -1
  25. package/dist/prompts/trading.js +76 -139
  26. package/dist/prompts/trading.js.map +1 -1
  27. package/dist/prompts/utils/workflowTemplates.d.ts +103 -0
  28. package/dist/prompts/utils/workflowTemplates.d.ts.map +1 -0
  29. package/dist/prompts/utils/workflowTemplates.js +315 -0
  30. package/dist/prompts/utils/workflowTemplates.js.map +1 -0
  31. package/dist/schemas/common-schemas.d.ts +121 -16
  32. package/dist/schemas/common-schemas.d.ts.map +1 -1
  33. package/dist/schemas/common-schemas.js +122 -17
  34. package/dist/schemas/common-schemas.js.map +1 -1
  35. package/dist/scripts/test-all-prompts.d.ts +6 -0
  36. package/dist/scripts/test-all-prompts.d.ts.map +1 -0
  37. package/dist/scripts/test-all-prompts.js +158 -0
  38. package/dist/scripts/test-all-prompts.js.map +1 -0
  39. package/dist/server.js +1 -1
  40. package/dist/tools/balance/index.d.ts.map +1 -1
  41. package/dist/tools/balance/index.js +5 -4
  42. package/dist/tools/balance/index.js.map +1 -1
  43. package/dist/tools/creation/index.d.ts.map +1 -1
  44. package/dist/tools/creation/index.js +6 -11
  45. package/dist/tools/creation/index.js.map +1 -1
  46. package/dist/tools/index.d.ts +9 -2
  47. package/dist/tools/index.d.ts.map +1 -1
  48. package/dist/tools/index.js +58 -14
  49. package/dist/tools/index.js.map +1 -1
  50. package/dist/tools/pools/fetchPoolDetailsForCalculation.d.ts +2 -3
  51. package/dist/tools/pools/fetchPoolDetailsForCalculation.d.ts.map +1 -1
  52. package/dist/tools/pools/fetchPoolDetailsForCalculation.js +5 -17
  53. package/dist/tools/pools/fetchPoolDetailsForCalculation.js.map +1 -1
  54. package/dist/tools/pools/index.d.ts.map +1 -1
  55. package/dist/tools/pools/index.js +51 -137
  56. package/dist/tools/pools/index.js.map +1 -1
  57. package/dist/tools/social/index.d.ts.map +1 -1
  58. package/dist/tools/social/index.js +4 -3
  59. package/dist/tools/social/index.js.map +1 -1
  60. package/dist/tools/trading/index.d.ts.map +1 -1
  61. package/dist/tools/trading/index.js +7 -21
  62. package/dist/tools/trading/index.js.map +1 -1
  63. package/dist/tools/utils/createWallet.d.ts +2 -3
  64. package/dist/tools/utils/createWallet.d.ts.map +1 -1
  65. package/dist/tools/utils/createWallet.js +8 -13
  66. package/dist/tools/utils/createWallet.js.map +1 -1
  67. package/dist/tools/utils/getAddress.d.ts +2 -3
  68. package/dist/tools/utils/getAddress.d.ts.map +1 -1
  69. package/dist/tools/utils/getAddress.js +6 -13
  70. package/dist/tools/utils/getAddress.js.map +1 -1
  71. package/dist/tools/utils/getConfig.d.ts +2 -3
  72. package/dist/tools/utils/getConfig.d.ts.map +1 -1
  73. package/dist/tools/utils/getConfig.js +5 -13
  74. package/dist/tools/utils/getConfig.js.map +1 -1
  75. package/dist/tools/utils/getEthereumAddress.d.ts +2 -3
  76. package/dist/tools/utils/getEthereumAddress.d.ts.map +1 -1
  77. package/dist/tools/utils/getEthereumAddress.js +6 -13
  78. package/dist/tools/utils/getEthereumAddress.js.map +1 -1
  79. package/dist/tools/utils/getUrlByTokenName.d.ts +2 -3
  80. package/dist/tools/utils/getUrlByTokenName.d.ts.map +1 -1
  81. package/dist/tools/utils/getUrlByTokenName.js +6 -20
  82. package/dist/tools/utils/getUrlByTokenName.js.map +1 -1
  83. package/dist/tools/utils/isTokenGraduated.d.ts +2 -3
  84. package/dist/tools/utils/isTokenGraduated.d.ts.map +1 -1
  85. package/dist/tools/utils/isTokenGraduated.js +6 -17
  86. package/dist/tools/utils/isTokenGraduated.js.map +1 -1
  87. package/dist/utils/__tests__/validation.test.d.ts +7 -0
  88. package/dist/utils/__tests__/validation.test.d.ts.map +1 -0
  89. package/dist/utils/__tests__/validation.test.js +122 -0
  90. package/dist/utils/__tests__/validation.test.js.map +1 -0
  91. package/dist/utils/default-values.d.ts +147 -0
  92. package/dist/utils/default-values.d.ts.map +1 -0
  93. package/dist/utils/default-values.js +177 -0
  94. package/dist/utils/default-values.js.map +1 -0
  95. package/dist/utils/error-handler.d.ts +9 -2
  96. package/dist/utils/error-handler.d.ts.map +1 -1
  97. package/dist/utils/error-handler.js +14 -59
  98. package/dist/utils/error-handler.js.map +1 -1
  99. package/dist/utils/error-templates.d.ts +96 -0
  100. package/dist/utils/error-templates.d.ts.map +1 -0
  101. package/dist/utils/error-templates.js +244 -0
  102. package/dist/utils/error-templates.js.map +1 -0
  103. package/dist/utils/tool-factory.d.ts +154 -0
  104. package/dist/utils/tool-factory.d.ts.map +1 -0
  105. package/dist/utils/tool-factory.js +194 -0
  106. package/dist/utils/tool-factory.js.map +1 -0
  107. package/dist/utils/tool-registry.d.ts +92 -0
  108. package/dist/utils/tool-registry.d.ts.map +1 -0
  109. package/dist/utils/tool-registry.js +227 -0
  110. package/dist/utils/tool-registry.js.map +1 -0
  111. package/dist/utils/validation.d.ts +162 -0
  112. package/dist/utils/validation.d.ts.map +1 -0
  113. package/dist/utils/validation.js +276 -0
  114. package/dist/utils/validation.js.map +1 -0
  115. package/jest.integration.config.js +70 -0
  116. package/package.json +10 -6
@@ -0,0 +1,92 @@
1
+ /**
2
+ * Tool Registry System
3
+ *
4
+ * Enhanced tool registration with auto-validation, metadata, and search capabilities.
5
+ * Provides runtime validation and developer-friendly tool discovery.
6
+ *
7
+ * @see Phase 3.1 of refactoring plan
8
+ */
9
+ import type { MCPTool } from '../types/mcp.js';
10
+ /**
11
+ * Tool category metadata
12
+ */
13
+ export interface ToolCategory {
14
+ name: string;
15
+ description: string;
16
+ tools: MCPTool[];
17
+ count: number;
18
+ }
19
+ /**
20
+ * Tool registry with metadata and search capabilities
21
+ */
22
+ export interface ToolRegistry {
23
+ tools: MCPTool[];
24
+ categories: Map<string, ToolCategory>;
25
+ totalCount: number;
26
+ expectedCount: number;
27
+ isValid: boolean;
28
+ errors: string[];
29
+ }
30
+ /**
31
+ * Tool validation result
32
+ */
33
+ export interface ToolValidationResult {
34
+ isValid: boolean;
35
+ errors: string[];
36
+ warnings: string[];
37
+ }
38
+ /**
39
+ * Validates a single tool definition
40
+ */
41
+ export declare function validateTool(tool: MCPTool): ToolValidationResult;
42
+ /**
43
+ * Validates all tools in a registry
44
+ */
45
+ export declare function validateTools(tools: MCPTool[]): ToolValidationResult;
46
+ /**
47
+ * Creates a tool registry with metadata and validation
48
+ */
49
+ export declare function createToolRegistry(categories: Array<{
50
+ name: string;
51
+ description: string;
52
+ tools: MCPTool[];
53
+ }>, expectedCount?: number): ToolRegistry;
54
+ /**
55
+ * Finds a tool by name
56
+ */
57
+ export declare function findTool(registry: ToolRegistry, name: string): MCPTool | undefined;
58
+ /**
59
+ * Finds tools by category
60
+ */
61
+ export declare function findToolsByCategory(registry: ToolRegistry, categoryName: string): MCPTool[];
62
+ /**
63
+ * Searches tools by name pattern
64
+ */
65
+ export declare function searchTools(registry: ToolRegistry, pattern: string): MCPTool[];
66
+ /**
67
+ * Gets tool statistics by category
68
+ */
69
+ export declare function getToolStatistics(registry: ToolRegistry): {
70
+ total: number;
71
+ byCategory: Record<string, number>;
72
+ };
73
+ /**
74
+ * Logs tool registry statistics
75
+ */
76
+ export declare function logToolRegistry(registry: ToolRegistry): void;
77
+ /**
78
+ * Generates markdown documentation for tool registry
79
+ */
80
+ export declare function generateToolDocumentation(registry: ToolRegistry): string;
81
+ export declare const toolRegistry: {
82
+ createToolRegistry: typeof createToolRegistry;
83
+ validateTool: typeof validateTool;
84
+ validateTools: typeof validateTools;
85
+ findTool: typeof findTool;
86
+ findToolsByCategory: typeof findToolsByCategory;
87
+ searchTools: typeof searchTools;
88
+ getToolStatistics: typeof getToolStatistics;
89
+ logToolRegistry: typeof logToolRegistry;
90
+ generateToolDocumentation: typeof generateToolDocumentation;
91
+ };
92
+ //# sourceMappingURL=tool-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-registry.d.ts","sourceRoot":"","sources":["../../src/utils/tool-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAM/C;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,OAAO,EAAE,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,OAAO,EAAE,CAAC;IACjB,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAMD;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,OAAO,GAAG,oBAAoB,CA6ChE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,oBAAoB,CA+BpE;AAMD;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,OAAO,EAAE,CAAA;CAAE,CAAC,EAC1E,aAAa,CAAC,EAAE,MAAM,GACrB,YAAY,CAyCd;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAElF;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,YAAY,EACtB,YAAY,EAAE,MAAM,GACnB,OAAO,EAAE,CAGX;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,EAAE,CAG9E;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,YAAY,GAAG;IACzD,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACpC,CAWA;AAMD;;GAEG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,CAgB5D;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,YAAY,GAAG,MAAM,CAiBxE;AAMD,eAAO,MAAM,YAAY;;;;;;;;;;CAUxB,CAAC"}
@@ -0,0 +1,227 @@
1
+ "use strict";
2
+ /**
3
+ * Tool Registry System
4
+ *
5
+ * Enhanced tool registration with auto-validation, metadata, and search capabilities.
6
+ * Provides runtime validation and developer-friendly tool discovery.
7
+ *
8
+ * @see Phase 3.1 of refactoring plan
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.toolRegistry = void 0;
12
+ exports.validateTool = validateTool;
13
+ exports.validateTools = validateTools;
14
+ exports.createToolRegistry = createToolRegistry;
15
+ exports.findTool = findTool;
16
+ exports.findToolsByCategory = findToolsByCategory;
17
+ exports.searchTools = searchTools;
18
+ exports.getToolStatistics = getToolStatistics;
19
+ exports.logToolRegistry = logToolRegistry;
20
+ exports.generateToolDocumentation = generateToolDocumentation;
21
+ // =============================================================================
22
+ // Validation Functions
23
+ // =============================================================================
24
+ /**
25
+ * Validates a single tool definition
26
+ */
27
+ function validateTool(tool) {
28
+ const errors = [];
29
+ const warnings = [];
30
+ // Required fields
31
+ if (!tool.name) {
32
+ errors.push('Tool name is required');
33
+ }
34
+ else if (typeof tool.name !== 'string') {
35
+ errors.push('Tool name must be a string');
36
+ }
37
+ else if (!tool.name.startsWith('gala_launchpad_')) {
38
+ warnings.push(`Tool name "${tool.name}" should start with "gala_launchpad_"`);
39
+ }
40
+ if (!tool.description) {
41
+ errors.push('Tool description is required');
42
+ }
43
+ else if (typeof tool.description !== 'string') {
44
+ errors.push('Tool description must be a string');
45
+ }
46
+ if (!tool.inputSchema) {
47
+ errors.push('Tool inputSchema is required');
48
+ }
49
+ else {
50
+ // Validate input schema structure
51
+ if (tool.inputSchema.type !== 'object') {
52
+ errors.push('inputSchema.type must be "object"');
53
+ }
54
+ if (!tool.inputSchema.properties) {
55
+ warnings.push('inputSchema.properties is empty');
56
+ }
57
+ if (tool.inputSchema.required && !Array.isArray(tool.inputSchema.required)) {
58
+ errors.push('inputSchema.required must be an array');
59
+ }
60
+ }
61
+ if (!tool.handler) {
62
+ errors.push('Tool handler is required');
63
+ }
64
+ else if (typeof tool.handler !== 'function') {
65
+ errors.push('Tool handler must be a function');
66
+ }
67
+ return {
68
+ isValid: errors.length === 0,
69
+ errors,
70
+ warnings,
71
+ };
72
+ }
73
+ /**
74
+ * Validates all tools in a registry
75
+ */
76
+ function validateTools(tools) {
77
+ const allErrors = [];
78
+ const allWarnings = [];
79
+ const toolNames = new Set();
80
+ tools.forEach((tool, index) => {
81
+ const result = validateTool(tool);
82
+ // Collect errors with tool context
83
+ result.errors.forEach((error) => {
84
+ allErrors.push(`Tool #${index + 1} (${tool.name || 'unknown'}): ${error}`);
85
+ });
86
+ result.warnings.forEach((warning) => {
87
+ allWarnings.push(`Tool #${index + 1} (${tool.name || 'unknown'}): ${warning}`);
88
+ });
89
+ // Check for duplicate names
90
+ if (tool.name) {
91
+ if (toolNames.has(tool.name)) {
92
+ allErrors.push(`Duplicate tool name: ${tool.name}`);
93
+ }
94
+ toolNames.add(tool.name);
95
+ }
96
+ });
97
+ return {
98
+ isValid: allErrors.length === 0,
99
+ errors: allErrors,
100
+ warnings: allWarnings,
101
+ };
102
+ }
103
+ // =============================================================================
104
+ // Registry Functions
105
+ // =============================================================================
106
+ /**
107
+ * Creates a tool registry with metadata and validation
108
+ */
109
+ function createToolRegistry(categories, expectedCount) {
110
+ const allTools = [];
111
+ const categoryMap = new Map();
112
+ const registryErrors = [];
113
+ // Process each category
114
+ categories.forEach((category) => {
115
+ const toolCategory = {
116
+ name: category.name,
117
+ description: category.description,
118
+ tools: category.tools,
119
+ count: category.tools.length,
120
+ };
121
+ categoryMap.set(category.name, toolCategory);
122
+ allTools.push(...category.tools);
123
+ });
124
+ // Validate all tools
125
+ const validation = validateTools(allTools);
126
+ registryErrors.push(...validation.errors);
127
+ // Check expected count
128
+ const actualCount = allTools.length;
129
+ const hasExpectedCount = expectedCount !== undefined;
130
+ const countMatches = hasExpectedCount ? actualCount === expectedCount : true;
131
+ if (hasExpectedCount && !countMatches) {
132
+ registryErrors.push(`Tool count mismatch: expected ${expectedCount}, got ${actualCount}`);
133
+ }
134
+ return {
135
+ tools: allTools,
136
+ categories: categoryMap,
137
+ totalCount: actualCount,
138
+ expectedCount: expectedCount ?? actualCount,
139
+ isValid: registryErrors.length === 0,
140
+ errors: registryErrors,
141
+ };
142
+ }
143
+ /**
144
+ * Finds a tool by name
145
+ */
146
+ function findTool(registry, name) {
147
+ return registry.tools.find((tool) => tool.name === name);
148
+ }
149
+ /**
150
+ * Finds tools by category
151
+ */
152
+ function findToolsByCategory(registry, categoryName) {
153
+ const category = registry.categories.get(categoryName);
154
+ return category ? category.tools : [];
155
+ }
156
+ /**
157
+ * Searches tools by name pattern
158
+ */
159
+ function searchTools(registry, pattern) {
160
+ const regex = new RegExp(pattern, 'i');
161
+ return registry.tools.filter((tool) => regex.test(tool.name));
162
+ }
163
+ /**
164
+ * Gets tool statistics by category
165
+ */
166
+ function getToolStatistics(registry) {
167
+ const byCategory = {};
168
+ registry.categories.forEach((category, name) => {
169
+ byCategory[name] = category.count;
170
+ });
171
+ return {
172
+ total: registry.totalCount,
173
+ byCategory,
174
+ };
175
+ }
176
+ // =============================================================================
177
+ // Logging and Reporting
178
+ // =============================================================================
179
+ /**
180
+ * Logs tool registry statistics
181
+ */
182
+ function logToolRegistry(registry) {
183
+ console.log('\n📦 Tool Registry Statistics:');
184
+ console.log(` Total Tools: ${registry.totalCount}/${registry.expectedCount}`);
185
+ console.log(` Valid: ${registry.isValid ? '✅' : '❌'}`);
186
+ if (!registry.isValid && registry.errors.length > 0) {
187
+ console.log('\n❌ Validation Errors:');
188
+ registry.errors.forEach((error) => console.log(` - ${error}`));
189
+ }
190
+ console.log('\n📂 Categories:');
191
+ registry.categories.forEach((category) => {
192
+ console.log(` ${category.name}: ${category.count} tools`);
193
+ });
194
+ console.log('');
195
+ }
196
+ /**
197
+ * Generates markdown documentation for tool registry
198
+ */
199
+ function generateToolDocumentation(registry) {
200
+ let doc = '# MCP Tool Registry\n\n';
201
+ doc += `**Total Tools**: ${registry.totalCount}\n\n`;
202
+ doc += '## Categories\n\n';
203
+ registry.categories.forEach((category) => {
204
+ doc += `### ${category.name} (${category.count} tools)\n\n`;
205
+ doc += `${category.description}\n\n`;
206
+ category.tools.forEach((tool) => {
207
+ doc += `- **${tool.name}**: ${tool.description}\n`;
208
+ });
209
+ doc += '\n';
210
+ });
211
+ return doc;
212
+ }
213
+ // =============================================================================
214
+ // Export All
215
+ // =============================================================================
216
+ exports.toolRegistry = {
217
+ createToolRegistry,
218
+ validateTool,
219
+ validateTools,
220
+ findTool,
221
+ findToolsByCategory,
222
+ searchTools,
223
+ getToolStatistics,
224
+ logToolRegistry,
225
+ generateToolDocumentation,
226
+ };
227
+ //# sourceMappingURL=tool-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-registry.js","sourceRoot":"","sources":["../../src/utils/tool-registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,162 @@
1
+ /**
2
+ * Validation Utilities for MCP Prompts
3
+ *
4
+ * Input validation functions for slash command arguments.
5
+ * Prevents malformed inputs and provides clear error messages.
6
+ */
7
+ /**
8
+ * Validation error class for better error handling
9
+ */
10
+ export declare class ValidationError extends Error {
11
+ field: string;
12
+ constructor(field: string, message: string);
13
+ }
14
+ /**
15
+ * Validate token name format
16
+ *
17
+ * Token names must be 2-20 characters, alphanumeric with hyphens and underscores.
18
+ *
19
+ * @param name - Token name to validate
20
+ * @param fieldName - Field name for error messages (default: 'tokenName')
21
+ * @throws {ValidationError} If token name is invalid
22
+ *
23
+ * @example
24
+ * ```typescript
25
+ * validateTokenName('anime'); // ✅ Valid
26
+ * validateTokenName('test-123'); // ✅ Valid
27
+ * validateTokenName('my_token'); // ✅ Valid
28
+ * validateTokenName('a'); // ❌ Throws: too short
29
+ * validateTokenName('token@#$'); // ❌ Throws: invalid characters
30
+ * ```
31
+ */
32
+ export declare function validateTokenName(name: string, fieldName?: string): void;
33
+ /**
34
+ * Validate numeric amount
35
+ *
36
+ * Amounts must be positive numbers (integers or decimals).
37
+ *
38
+ * @param amount - Amount to validate (string or number)
39
+ * @param fieldName - Field name for error messages
40
+ * @throws {ValidationError} If amount is invalid
41
+ *
42
+ * @example
43
+ * ```typescript
44
+ * validateNumericAmount('100', 'galaAmount'); // ✅ Valid
45
+ * validateNumericAmount('99.5', 'tokenAmount'); // ✅ Valid
46
+ * validateNumericAmount('-5', 'amount'); // ❌ Throws: negative
47
+ * validateNumericAmount('abc', 'amount'); // ❌ Throws: not a number
48
+ * ```
49
+ */
50
+ export declare function validateNumericAmount(amount: string | number, fieldName: string): void;
51
+ /**
52
+ * Validate slippage tolerance percentage
53
+ *
54
+ * Slippage must be between 0.01% and 100%.
55
+ *
56
+ * @param slippage - Slippage percentage to validate
57
+ * @param fieldName - Field name for error messages (default: 'slippage')
58
+ * @throws {ValidationError} If slippage is invalid
59
+ *
60
+ * @example
61
+ * ```typescript
62
+ * validateSlippage('1'); // ✅ Valid (1%)
63
+ * validateSlippage('0.5'); // ✅ Valid (0.5%)
64
+ * validateSlippage('50'); // ✅ Valid (50%)
65
+ * validateSlippage('0'); // ❌ Throws: too low
66
+ * validateSlippage('150'); // ❌ Throws: too high
67
+ * ```
68
+ */
69
+ export declare function validateSlippage(slippage: string | number, fieldName?: string): void;
70
+ /**
71
+ * Validate wallet address format
72
+ *
73
+ * Supports both GalaChain format (eth|0x...) and standard Ethereum format (0x...).
74
+ *
75
+ * @param address - Wallet address to validate
76
+ * @param fieldName - Field name for error messages (default: 'address')
77
+ * @throws {ValidationError} If address is invalid
78
+ *
79
+ * @example
80
+ * ```typescript
81
+ * validateAddress('eth|0x1234567890abcdef1234567890abcdef12345678'); // ✅ Valid
82
+ * validateAddress('0x1234567890abcdef1234567890abcdef12345678'); // ✅ Valid
83
+ * validateAddress('invalid'); // ❌ Throws: invalid format
84
+ * ```
85
+ */
86
+ export declare function validateAddress(address: string, fieldName?: string): void;
87
+ /**
88
+ * Validate token symbol format
89
+ *
90
+ * Symbols must be 1-8 uppercase letters.
91
+ *
92
+ * @param symbol - Token symbol to validate
93
+ * @param fieldName - Field name for error messages (default: 'symbol')
94
+ * @throws {ValidationError} If symbol is invalid
95
+ *
96
+ * @example
97
+ * ```typescript
98
+ * validateTokenSymbol('GALA'); // ✅ Valid
99
+ * validateTokenSymbol('TEST'); // ✅ Valid
100
+ * validateTokenSymbol('test'); // ❌ Throws: must be uppercase
101
+ * validateTokenSymbol('TOOLONG123'); // ❌ Throws: too long
102
+ * ```
103
+ */
104
+ export declare function validateTokenSymbol(symbol: string, fieldName?: string): void;
105
+ /**
106
+ * Validate pagination limit
107
+ *
108
+ * Limits must be positive integers within reasonable range (1-100).
109
+ *
110
+ * @param limit - Pagination limit to validate
111
+ * @param max - Maximum allowed limit (default: 100)
112
+ * @param fieldName - Field name for error messages (default: 'limit')
113
+ * @throws {ValidationError} If limit is invalid
114
+ *
115
+ * @example
116
+ * ```typescript
117
+ * validatePaginationLimit('20'); // ✅ Valid
118
+ * validatePaginationLimit('1'); // ✅ Valid
119
+ * validatePaginationLimit('0'); // ❌ Throws: too low
120
+ * validatePaginationLimit('150'); // ❌ Throws: too high
121
+ * ```
122
+ */
123
+ export declare function validatePaginationLimit(limit: string | number, max?: number, fieldName?: string): void;
124
+ /**
125
+ * Validate comma-separated token list
126
+ *
127
+ * For batch operations that accept multiple token names.
128
+ *
129
+ * @param tokens - Comma-separated token names
130
+ * @param fieldName - Field name for error messages (default: 'tokens')
131
+ * @throws {ValidationError} If token list is invalid
132
+ *
133
+ * @example
134
+ * ```typescript
135
+ * validateTokenList('anime,test,dragon'); // ✅ Valid
136
+ * validateTokenList('token1'); // ✅ Valid (single token)
137
+ * validateTokenList(''); // ❌ Throws: empty list
138
+ * validateTokenList('token1,invalid@#$'); // ❌ Throws: invalid token name
139
+ * ```
140
+ */
141
+ export declare function validateTokenList(tokens: string, fieldName?: string): string[];
142
+ /**
143
+ * Safe validation wrapper that doesn't throw
144
+ *
145
+ * Useful for non-critical validation where you want to continue with a warning.
146
+ *
147
+ * @param validationFn - Validation function to execute
148
+ * @returns Object with success flag and optional error
149
+ *
150
+ * @example
151
+ * ```typescript
152
+ * const result = safeValidate(() => validateTokenName('anime'));
153
+ * if (!result.success) {
154
+ * console.warn('Validation warning:', result.error);
155
+ * }
156
+ * ```
157
+ */
158
+ export declare function safeValidate(validationFn: () => void): {
159
+ success: boolean;
160
+ error?: string;
161
+ };
162
+ //# sourceMappingURL=validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,qBAAa,eAAgB,SAAQ,KAAK;IAE/B,KAAK,EAAE,MAAM;gBAAb,KAAK,EAAE,MAAM,EACpB,OAAO,EAAE,MAAM;CAKlB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,SAAc,GAAG,IAAI,CAmB7E;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,MAAM,GAAG,MAAM,EACvB,SAAS,EAAE,MAAM,GAChB,IAAI,CAqBN;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,MAAM,GAAG,MAAM,EACzB,SAAS,SAAa,GACrB,IAAI,CAoBN;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,SAAY,GAAG,IAAI,CAgB5E;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,SAAW,GAAG,IAAI,CAmB9E;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,MAAM,GAAG,MAAM,EACtB,GAAG,SAAM,EACT,SAAS,SAAU,GAClB,IAAI,CAoBN;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,SAAW,GAAG,MAAM,EAAE,CA2BhF;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,YAAY,CAC1B,YAAY,EAAE,MAAM,IAAI,GACvB;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAUtC"}