@gala-chain/launchpad-mcp-server 1.4.0 → 1.5.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.
Files changed (39) hide show
  1. package/dist/constants/mcpToolNames.d.ts +159 -0
  2. package/dist/constants/mcpToolNames.d.ts.map +1 -0
  3. package/dist/constants/mcpToolNames.js +131 -0
  4. package/dist/constants/mcpToolNames.js.map +1 -0
  5. package/dist/prompts/__tests__/promptStructure.test.d.ts +7 -0
  6. package/dist/prompts/__tests__/promptStructure.test.d.ts.map +1 -0
  7. package/dist/prompts/__tests__/promptStructure.test.js +106 -0
  8. package/dist/prompts/__tests__/promptStructure.test.js.map +1 -0
  9. package/dist/prompts/__tests__/registry.test.d.ts +7 -0
  10. package/dist/prompts/__tests__/registry.test.d.ts.map +1 -0
  11. package/dist/prompts/__tests__/registry.test.js +119 -0
  12. package/dist/prompts/__tests__/registry.test.js.map +1 -0
  13. package/dist/prompts/analysis.d.ts.map +1 -1
  14. package/dist/prompts/analysis.js +97 -65
  15. package/dist/prompts/analysis.js.map +1 -1
  16. package/dist/prompts/index.d.ts +58 -1
  17. package/dist/prompts/index.d.ts.map +1 -1
  18. package/dist/prompts/index.js +83 -3
  19. package/dist/prompts/index.js.map +1 -1
  20. package/dist/prompts/portfolio.d.ts.map +1 -1
  21. package/dist/prompts/portfolio.js +80 -76
  22. package/dist/prompts/portfolio.js.map +1 -1
  23. package/dist/prompts/trading.d.ts.map +1 -1
  24. package/dist/prompts/trading.js +76 -139
  25. package/dist/prompts/trading.js.map +1 -1
  26. package/dist/prompts/utils/workflowTemplates.d.ts +103 -0
  27. package/dist/prompts/utils/workflowTemplates.d.ts.map +1 -0
  28. package/dist/prompts/utils/workflowTemplates.js +315 -0
  29. package/dist/prompts/utils/workflowTemplates.js.map +1 -0
  30. package/dist/server.js +1 -1
  31. package/dist/utils/__tests__/validation.test.d.ts +7 -0
  32. package/dist/utils/__tests__/validation.test.d.ts.map +1 -0
  33. package/dist/utils/__tests__/validation.test.js +122 -0
  34. package/dist/utils/__tests__/validation.test.js.map +1 -0
  35. package/dist/utils/validation.d.ts +162 -0
  36. package/dist/utils/validation.d.ts.map +1 -0
  37. package/dist/utils/validation.js +276 -0
  38. package/dist/utils/validation.js.map +1 -0
  39. package/package.json +2 -2
@@ -0,0 +1,315 @@
1
+ "use strict";
2
+ /**
3
+ * Workflow Template Utilities
4
+ *
5
+ * Reusable templates for common workflow patterns in prompts.
6
+ * Reduces duplication and ensures consistency across slash commands.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.createTradingWorkflow = createTradingWorkflow;
10
+ exports.formatWorkflowSteps = formatWorkflowSteps;
11
+ exports.createConfirmationStep = createConfirmationStep;
12
+ exports.createVerificationStep = createVerificationStep;
13
+ exports.createPerformanceNote = createPerformanceNote;
14
+ exports.createCostBreakdown = createCostBreakdown;
15
+ exports.createBalanceCheckStep = createBalanceCheckStep;
16
+ exports.createAnalysisWorkflow = createAnalysisWorkflow;
17
+ exports.createPortfolioWorkflow = createPortfolioWorkflow;
18
+ const mcpToolNames_js_1 = require("../../constants/mcpToolNames.js");
19
+ /**
20
+ * Create a complete trading workflow with all standard steps
21
+ *
22
+ * @param config - Trading workflow configuration
23
+ * @returns Formatted workflow text with numbered steps
24
+ *
25
+ * @example
26
+ * ```typescript
27
+ * const workflow = createTradingWorkflow({
28
+ * operation: 'buy',
29
+ * tokenName: 'anime',
30
+ * amount: '100',
31
+ * amountType: 'gala',
32
+ * slippage: '1'
33
+ * });
34
+ * ```
35
+ */
36
+ function createTradingWorkflow(config) {
37
+ const { operation, tokenName, amount, amountType, slippage = '1' } = config;
38
+ switch (operation) {
39
+ case 'buy':
40
+ return createBuyWorkflow(tokenName, amount, amountType, slippage);
41
+ case 'sell':
42
+ return createSellWorkflow(tokenName, amount, slippage);
43
+ case 'graduate':
44
+ return createGraduationWorkflow(tokenName, slippage);
45
+ default:
46
+ throw new Error(`Unknown operation: ${operation}`);
47
+ }
48
+ }
49
+ /**
50
+ * Create buy tokens workflow
51
+ */
52
+ function createBuyWorkflow(tokenName, amount, amountType, slippage) {
53
+ const slippageFactor = parseFloat(slippage) / 100;
54
+ const typeParam = amountType === 'gala' ? 'native' : 'exact';
55
+ const amountLabel = amountType === 'gala' ? 'GALA to spend' : 'Tokens to buy';
56
+ return `Help me buy tokens on Gala Launchpad:
57
+
58
+ Token: ${tokenName}
59
+ ${amountLabel}: ${amount}
60
+ Slippage tolerance: ${slippage}%
61
+
62
+ Please follow this workflow:
63
+
64
+ 1. Calculate buy amount using ${mcpToolNames_js_1.MCP_TOOLS.CALCULATE_BUY_AMOUNT}:
65
+ - tokenName: "${tokenName}"
66
+ - amount: "${amount}"
67
+ - type: "${typeParam}" (${amountType === 'gala' ? 'spending GALA' : 'buying exact tokens'})
68
+
69
+ 2. Show me the breakdown:
70
+ - Tokens I'll receive
71
+ - Transaction fee
72
+ - Gas fee
73
+ - Reverse bonding curve fee
74
+ - Total cost
75
+
76
+ 3. Ask for confirmation before executing
77
+
78
+ 4. If I confirm, execute the buy using ${mcpToolNames_js_1.MCP_TOOLS.BUY_TOKENS} with:
79
+ - expectedAmount from calculation
80
+ - maxAcceptableReverseBondingCurveFee from calculation
81
+ - slippageToleranceFactor: ${slippageFactor}
82
+
83
+ 5. After purchase, show transaction ID and verify balance`;
84
+ }
85
+ /**
86
+ * Create sell tokens workflow
87
+ */
88
+ function createSellWorkflow(tokenName, amount, slippage) {
89
+ const slippageFactor = parseFloat(slippage) / 100;
90
+ return `Help me sell tokens on Gala Launchpad:
91
+
92
+ Token: ${tokenName}
93
+ Tokens to sell: ${amount}
94
+ Slippage tolerance: ${slippage}%
95
+
96
+ Please follow this workflow:
97
+
98
+ 1. Check my token balance using ${mcpToolNames_js_1.MCP_TOOLS.FETCH_TOKEN_BALANCE}
99
+
100
+ 2. Calculate sell amount using ${mcpToolNames_js_1.MCP_TOOLS.CALCULATE_SELL_AMOUNT}:
101
+ - tokenName: "${tokenName}"
102
+ - amount: "${amount}"
103
+ - type: "exact" (selling exact token amount)
104
+
105
+ 3. Show me the breakdown:
106
+ - GALA I'll receive
107
+ - Transaction fee
108
+ - Gas fee
109
+ - Reverse bonding curve fee
110
+ - Net proceeds
111
+
112
+ 4. Ask for confirmation before executing
113
+
114
+ 5. If I confirm, execute the sell using ${mcpToolNames_js_1.MCP_TOOLS.SELL_TOKENS} with:
115
+ - expectedAmount from calculation
116
+ - maxAcceptableReverseBondingCurveFee from calculation
117
+ - slippageToleranceFactor: ${slippageFactor}
118
+
119
+ 6. After sale, show transaction ID and verify updated balance`;
120
+ }
121
+ /**
122
+ * Create token graduation workflow
123
+ */
124
+ function createGraduationWorkflow(tokenName, slippage) {
125
+ const slippageFactor = parseFloat(slippage) / 100;
126
+ return `Help me graduate the token "${tokenName}" on Gala Launchpad:
127
+
128
+ Slippage tolerance: ${slippage}%
129
+
130
+ Please follow this workflow:
131
+
132
+ 1. Check if token is already graduated using ${mcpToolNames_js_1.MCP_TOOLS.FETCH_POOL_DETAILS}
133
+ - If saleStatus is "Completed", inform me it's already graduated
134
+
135
+ 2. Fetch optimized pool details using ${mcpToolNames_js_1.MCP_TOOLS.FETCH_POOL_DETAILS_FOR_CALCULATION}
136
+
137
+ 3. Calculate graduation cost using ${mcpToolNames_js_1.MCP_TOOLS.CALCULATE_BUY_AMOUNT_FOR_GRADUATION} with:
138
+ - calculateAmountMode: "local"
139
+ - currentSupply from pool details
140
+
141
+ 4. Show me the breakdown:
142
+ - GALA required to graduate: [amount field - this is GALA cost, NOT token quantity!]
143
+ - Transaction fee
144
+ - Gas fee
145
+ - Total cost
146
+
147
+ 5. Check my GALA balance using ${mcpToolNames_js_1.MCP_TOOLS.FETCH_GALA_BALANCE}
148
+ - Verify I have enough GALA for graduation
149
+
150
+ 6. Ask for confirmation before executing
151
+
152
+ 7. If I confirm, execute graduation using ${mcpToolNames_js_1.MCP_TOOLS.GRADUATE_TOKEN} with:
153
+ - tokenName: "${tokenName}"
154
+ - slippageToleranceFactor: ${slippageFactor}
155
+ - calculateAmountMode: "local"
156
+ - currentSupply from pool details (optimization!)
157
+
158
+ 8. After graduation:
159
+ - Show transaction ID
160
+ - Verify pool status changed to "Completed"
161
+ - Get frontend URL using ${mcpToolNames_js_1.MCP_TOOLS.GET_URL_BY_TOKEN_NAME}
162
+
163
+ IMPORTANT: The "amount" field in graduation calculations is GALA cost, not token quantity!`;
164
+ }
165
+ /**
166
+ * Format a list of steps with numbers
167
+ *
168
+ * @param steps - Array of step descriptions
169
+ * @returns Formatted steps with numbering
170
+ *
171
+ * @example
172
+ * ```typescript
173
+ * formatWorkflowSteps([
174
+ * 'Fetch pool details',
175
+ * 'Calculate price',
176
+ * 'Show results'
177
+ * ]);
178
+ * // Returns:
179
+ * // "1. Fetch pool details
180
+ * // 2. Calculate price
181
+ * // 3. Show results"
182
+ * ```
183
+ */
184
+ function formatWorkflowSteps(steps) {
185
+ return steps.map((step, index) => `${index + 1}. ${step}`).join('\n\n');
186
+ }
187
+ /**
188
+ * Create a standard confirmation step for destructive operations
189
+ *
190
+ * @param operation - Operation name (e.g., 'buy', 'sell', 'graduate')
191
+ * @returns Confirmation step text
192
+ */
193
+ function createConfirmationStep(operation) {
194
+ return `Ask for confirmation before executing the ${operation} operation`;
195
+ }
196
+ /**
197
+ * Create a standard verification step after transaction
198
+ *
199
+ * @param operation - Operation name
200
+ * @param verifications - Array of verification checks to perform
201
+ * @returns Verification step text
202
+ */
203
+ function createVerificationStep(operation, verifications) {
204
+ const checks = verifications
205
+ .map((check, index) => ` ${String.fromCharCode(97 + index)}. ${check}`)
206
+ .join('\n');
207
+ return `After ${operation} completes:\n${checks}`;
208
+ }
209
+ /**
210
+ * Create an optimized performance note for LOCAL calculations
211
+ *
212
+ * @returns Performance optimization guidance text
213
+ */
214
+ function createPerformanceNote() {
215
+ return `Use the performance optimization pattern from SDK v3.9.0 to minimize network calls.`;
216
+ }
217
+ /**
218
+ * Create a cost breakdown display template
219
+ *
220
+ * @param operation - Operation type for context
221
+ * @returns Cost breakdown template text
222
+ */
223
+ function createCostBreakdown(operation) {
224
+ switch (operation) {
225
+ case 'buy':
226
+ return `Show me the breakdown:
227
+ - Tokens I'll receive
228
+ - Transaction fee
229
+ - Gas fee
230
+ - Reverse bonding curve fee
231
+ - Total cost`;
232
+ case 'sell':
233
+ return `Show me the breakdown:
234
+ - GALA I'll receive
235
+ - Transaction fee
236
+ - Gas fee
237
+ - Reverse bonding curve fee
238
+ - Net proceeds`;
239
+ case 'graduate':
240
+ return `Show me the breakdown:
241
+ - GALA required to graduate
242
+ - Transaction fee
243
+ - Gas fee
244
+ - Total cost`;
245
+ }
246
+ }
247
+ /**
248
+ * Create a balance check step
249
+ *
250
+ * @param assetType - Type of asset to check ('GALA' or token name)
251
+ * @returns Balance check step text
252
+ */
253
+ function createBalanceCheckStep(assetType) {
254
+ if (assetType === 'GALA') {
255
+ return `Check my GALA balance using ${mcpToolNames_js_1.MCP_TOOLS.FETCH_GALA_BALANCE}`;
256
+ }
257
+ return `Check my ${assetType} token balance using ${mcpToolNames_js_1.MCP_TOOLS.FETCH_TOKEN_BALANCE}`;
258
+ }
259
+ /**
260
+ * Create analysis workflow for token evaluation
261
+ *
262
+ * @param tokenName - Token to analyze
263
+ * @returns Complete analysis workflow
264
+ */
265
+ function createAnalysisWorkflow(tokenName) {
266
+ return `Analyze the token "${tokenName}" using the Gala Launchpad MCP server:
267
+
268
+ 1. Fetch optimized pool details using ${mcpToolNames_js_1.MCP_TOOLS.FETCH_POOL_DETAILS_FOR_CALCULATION}
269
+ 2. Calculate current USD spot price using LOCAL mode with the currentSupply
270
+ 3. Calculate graduation cost using LOCAL mode with the currentSupply
271
+ 4. Show remaining tokens and pool status (saleStatus)
272
+ 5. Calculate pool progress percentage: (currentSupply / maxSupply * 100)
273
+
274
+ ${createPerformanceNote()}
275
+
276
+ Provide a brief analysis including:
277
+ - Current token price in USD
278
+ - Total GALA required to graduate the pool
279
+ - How close the token is to graduation (percentage)
280
+ - Whether this would be a good time to buy or wait`;
281
+ }
282
+ /**
283
+ * Create portfolio analysis workflow
284
+ *
285
+ * @returns Complete portfolio analysis workflow
286
+ */
287
+ function createPortfolioWorkflow() {
288
+ return `Analyze my complete Gala Launchpad portfolio:
289
+
290
+ 1. Get GALA balance using ${mcpToolNames_js_1.MCP_TOOLS.FETCH_GALA_BALANCE}
291
+
292
+ 2. Get all tokens I'm holding using ${mcpToolNames_js_1.MCP_TOOLS.FETCH_TOKENS_HELD}
293
+ - Use pagination if needed to get all tokens
294
+
295
+ 3. For each token, calculate USD value using optimized pattern:
296
+ a. Fetch pool details once: ${mcpToolNames_js_1.MCP_TOOLS.FETCH_POOL_DETAILS_FOR_CALCULATION}
297
+ b. Calculate spot price: ${mcpToolNames_js_1.MCP_TOOLS.FETCH_LAUNCHPAD_TOKEN_SPOT_PRICE} with LOCAL mode
298
+ c. Multiply token balance by spot price for USD value
299
+
300
+ 4. Calculate GALA USD value using ${mcpToolNames_js_1.MCP_TOOLS.FETCH_GALA_SPOT_PRICE}
301
+
302
+ 5. Present a comprehensive portfolio summary:
303
+ - GALA balance and USD value
304
+ - Each token holding with:
305
+ * Token name
306
+ * Balance
307
+ * USD spot price
308
+ * Total USD value
309
+ - Total portfolio value in USD
310
+ - Top 3 holdings by value
311
+ - Number of different tokens held
312
+
313
+ ${createPerformanceNote()}`;
314
+ }
315
+ //# sourceMappingURL=workflowTemplates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflowTemplates.js","sourceRoot":"","sources":["../../../src/prompts/utils/workflowTemplates.ts"],"names":[],"mappings":"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"}
package/dist/server.js CHANGED
@@ -20,7 +20,7 @@ class LaunchpadMCPServer {
20
20
  this.debug = process.env.DEBUG === 'true';
21
21
  this.server = new index_js_1.Server({
22
22
  name: '@gala-chain/launchpad-mcp-server',
23
- version: '1.4.0',
23
+ version: '1.5.0',
24
24
  }, {
25
25
  capabilities: {
26
26
  tools: {},
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Validation Utilities Tests
3
+ *
4
+ * Tests for input validation functions
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=validation.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.test.d.ts","sourceRoot":"","sources":["../../../src/utils/__tests__/validation.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
@@ -0,0 +1,122 @@
1
+ "use strict";
2
+ /**
3
+ * Validation Utilities Tests
4
+ *
5
+ * Tests for input validation functions
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ const validation_1 = require("../validation");
9
+ describe('Validation Utilities', () => {
10
+ describe('validateTokenName()', () => {
11
+ it('should accept valid token names', () => {
12
+ expect(() => (0, validation_1.validateTokenName)('anime')).not.toThrow();
13
+ expect(() => (0, validation_1.validateTokenName)('test123')).not.toThrow();
14
+ expect(() => (0, validation_1.validateTokenName)('my-token')).not.toThrow();
15
+ expect(() => (0, validation_1.validateTokenName)('my_token')).not.toThrow();
16
+ expect(() => (0, validation_1.validateTokenName)('TEST-123')).not.toThrow();
17
+ });
18
+ it('should reject invalid token names', () => {
19
+ expect(() => (0, validation_1.validateTokenName)('')).toThrow(validation_1.ValidationError);
20
+ expect(() => (0, validation_1.validateTokenName)('a')).toThrow(validation_1.ValidationError);
21
+ expect(() => (0, validation_1.validateTokenName)('verylongtokennamethatexceedstwentycharacters')).toThrow(validation_1.ValidationError);
22
+ expect(() => (0, validation_1.validateTokenName)('token@#$')).toThrow(validation_1.ValidationError);
23
+ expect(() => (0, validation_1.validateTokenName)('token with spaces')).toThrow(validation_1.ValidationError);
24
+ });
25
+ });
26
+ describe('validateNumericAmount()', () => {
27
+ it('should accept valid numeric amounts', () => {
28
+ expect(() => (0, validation_1.validateNumericAmount)('100', 'amount')).not.toThrow();
29
+ expect(() => (0, validation_1.validateNumericAmount)('0.5', 'amount')).not.toThrow();
30
+ expect(() => (0, validation_1.validateNumericAmount)('99999.99', 'amount')).not.toThrow();
31
+ expect(() => (0, validation_1.validateNumericAmount)(100, 'amount')).not.toThrow();
32
+ });
33
+ it('should reject invalid numeric amounts', () => {
34
+ expect(() => (0, validation_1.validateNumericAmount)('', 'amount')).toThrow(validation_1.ValidationError);
35
+ expect(() => (0, validation_1.validateNumericAmount)('abc', 'amount')).toThrow(validation_1.ValidationError);
36
+ expect(() => (0, validation_1.validateNumericAmount)('-5', 'amount')).toThrow(validation_1.ValidationError);
37
+ expect(() => (0, validation_1.validateNumericAmount)('0', 'amount')).toThrow(validation_1.ValidationError);
38
+ expect(() => (0, validation_1.validateNumericAmount)(Infinity, 'amount')).toThrow(validation_1.ValidationError);
39
+ });
40
+ });
41
+ describe('validateSlippage()', () => {
42
+ it('should accept valid slippage values', () => {
43
+ expect(() => (0, validation_1.validateSlippage)('1')).not.toThrow();
44
+ expect(() => (0, validation_1.validateSlippage)('0.5')).not.toThrow();
45
+ expect(() => (0, validation_1.validateSlippage)('50')).not.toThrow();
46
+ expect(() => (0, validation_1.validateSlippage)('0.01')).not.toThrow();
47
+ expect(() => (0, validation_1.validateSlippage)('100')).not.toThrow();
48
+ });
49
+ it('should reject invalid slippage values', () => {
50
+ expect(() => (0, validation_1.validateSlippage)('0')).toThrow(validation_1.ValidationError);
51
+ expect(() => (0, validation_1.validateSlippage)('0.005')).toThrow(validation_1.ValidationError);
52
+ expect(() => (0, validation_1.validateSlippage)('101')).toThrow(validation_1.ValidationError);
53
+ expect(() => (0, validation_1.validateSlippage)('-1')).toThrow(validation_1.ValidationError);
54
+ });
55
+ });
56
+ describe('validateAddress()', () => {
57
+ it('should accept valid addresses', () => {
58
+ expect(() => (0, validation_1.validateAddress)('eth|0x1234567890abcdef1234567890abcdef12345678')).not.toThrow();
59
+ expect(() => (0, validation_1.validateAddress)('0x1234567890abcdef1234567890abcdef12345678')).not.toThrow();
60
+ expect(() => (0, validation_1.validateAddress)('0xABCDEF1234567890abcdef1234567890ABCDEF12')).not.toThrow();
61
+ });
62
+ it('should reject invalid addresses', () => {
63
+ expect(() => (0, validation_1.validateAddress)('')).toThrow(validation_1.ValidationError);
64
+ expect(() => (0, validation_1.validateAddress)('invalid')).toThrow(validation_1.ValidationError);
65
+ expect(() => (0, validation_1.validateAddress)('0x123')).toThrow(validation_1.ValidationError);
66
+ expect(() => (0, validation_1.validateAddress)('eth|123')).toThrow(validation_1.ValidationError);
67
+ });
68
+ });
69
+ describe('validateTokenSymbol()', () => {
70
+ it('should accept valid symbols', () => {
71
+ expect(() => (0, validation_1.validateTokenSymbol)('GALA')).not.toThrow();
72
+ expect(() => (0, validation_1.validateTokenSymbol)('TEST')).not.toThrow();
73
+ expect(() => (0, validation_1.validateTokenSymbol)('A')).not.toThrow();
74
+ expect(() => (0, validation_1.validateTokenSymbol)('ABCDEFGH')).not.toThrow();
75
+ });
76
+ it('should reject invalid symbols', () => {
77
+ expect(() => (0, validation_1.validateTokenSymbol)('')).toThrow(validation_1.ValidationError);
78
+ expect(() => (0, validation_1.validateTokenSymbol)('test')).toThrow(validation_1.ValidationError);
79
+ expect(() => (0, validation_1.validateTokenSymbol)('TOOLONG123')).toThrow(validation_1.ValidationError);
80
+ expect(() => (0, validation_1.validateTokenSymbol)('TEST123')).toThrow(validation_1.ValidationError);
81
+ });
82
+ });
83
+ describe('validatePaginationLimit()', () => {
84
+ it('should accept valid limits', () => {
85
+ expect(() => (0, validation_1.validatePaginationLimit)('1')).not.toThrow();
86
+ expect(() => (0, validation_1.validatePaginationLimit)('20')).not.toThrow();
87
+ expect(() => (0, validation_1.validatePaginationLimit)('100')).not.toThrow();
88
+ expect(() => (0, validation_1.validatePaginationLimit)(50)).not.toThrow();
89
+ });
90
+ it('should reject invalid limits', () => {
91
+ expect(() => (0, validation_1.validatePaginationLimit)('0')).toThrow(validation_1.ValidationError);
92
+ expect(() => (0, validation_1.validatePaginationLimit)('101')).toThrow(validation_1.ValidationError);
93
+ expect(() => (0, validation_1.validatePaginationLimit)('-1')).toThrow(validation_1.ValidationError);
94
+ expect(() => (0, validation_1.validatePaginationLimit)('abc')).toThrow(validation_1.ValidationError);
95
+ });
96
+ });
97
+ describe('validateTokenList()', () => {
98
+ it('should accept valid token lists', () => {
99
+ const result1 = (0, validation_1.validateTokenList)('anime,test,dragon');
100
+ expect(result1).toEqual(['anime', 'test', 'dragon']);
101
+ const result2 = (0, validation_1.validateTokenList)('token1');
102
+ expect(result2).toEqual(['token1']);
103
+ });
104
+ it('should reject invalid token lists', () => {
105
+ expect(() => (0, validation_1.validateTokenList)('')).toThrow(validation_1.ValidationError);
106
+ expect(() => (0, validation_1.validateTokenList)('token1,invalid@#$')).toThrow(validation_1.ValidationError);
107
+ });
108
+ });
109
+ describe('safeValidate()', () => {
110
+ it('should return success for valid input', () => {
111
+ const result = (0, validation_1.safeValidate)(() => (0, validation_1.validateTokenName)('anime'));
112
+ expect(result.success).toBe(true);
113
+ expect(result.error).toBeUndefined();
114
+ });
115
+ it('should return error for invalid input', () => {
116
+ const result = (0, validation_1.safeValidate)(() => (0, validation_1.validateTokenName)('invalid@#$'));
117
+ expect(result.success).toBe(false);
118
+ expect(result.error).toBeDefined();
119
+ });
120
+ });
121
+ });
122
+ //# sourceMappingURL=validation.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.test.js","sourceRoot":"","sources":["../../../src/utils/__tests__/validation.test.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"}