@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.
- package/dist/constants/mcpToolNames.d.ts +159 -0
- package/dist/constants/mcpToolNames.d.ts.map +1 -0
- package/dist/constants/mcpToolNames.js +131 -0
- package/dist/constants/mcpToolNames.js.map +1 -0
- package/dist/prompts/__tests__/promptStructure.test.d.ts +7 -0
- package/dist/prompts/__tests__/promptStructure.test.d.ts.map +1 -0
- package/dist/prompts/__tests__/promptStructure.test.js +106 -0
- package/dist/prompts/__tests__/promptStructure.test.js.map +1 -0
- package/dist/prompts/__tests__/registry.test.d.ts +7 -0
- package/dist/prompts/__tests__/registry.test.d.ts.map +1 -0
- package/dist/prompts/__tests__/registry.test.js +119 -0
- package/dist/prompts/__tests__/registry.test.js.map +1 -0
- package/dist/prompts/analysis.d.ts.map +1 -1
- package/dist/prompts/analysis.js +97 -65
- package/dist/prompts/analysis.js.map +1 -1
- package/dist/prompts/index.d.ts +58 -1
- package/dist/prompts/index.d.ts.map +1 -1
- package/dist/prompts/index.js +83 -3
- package/dist/prompts/index.js.map +1 -1
- package/dist/prompts/portfolio.d.ts.map +1 -1
- package/dist/prompts/portfolio.js +80 -76
- package/dist/prompts/portfolio.js.map +1 -1
- package/dist/prompts/trading.d.ts.map +1 -1
- package/dist/prompts/trading.js +76 -139
- package/dist/prompts/trading.js.map +1 -1
- package/dist/prompts/utils/workflowTemplates.d.ts +103 -0
- package/dist/prompts/utils/workflowTemplates.d.ts.map +1 -0
- package/dist/prompts/utils/workflowTemplates.js +315 -0
- package/dist/prompts/utils/workflowTemplates.js.map +1 -0
- package/dist/server.js +1 -1
- package/dist/utils/__tests__/validation.test.d.ts +7 -0
- package/dist/utils/__tests__/validation.test.d.ts.map +1 -0
- package/dist/utils/__tests__/validation.test.js +122 -0
- package/dist/utils/__tests__/validation.test.js.map +1 -0
- package/dist/utils/validation.d.ts +162 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +276 -0
- package/dist/utils/validation.js.map +1 -0
- 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
|
@@ -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"}
|