@gala-chain/launchpad-mcp-server 1.23.0 → 1.23.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.
- package/DRY_REFACTORING_GUIDE.md +272 -0
- package/dist/generated/version.d.ts +1 -1
- package/dist/generated/version.js +1 -1
- package/dist/prompts/analysis.d.ts.map +1 -1
- package/dist/prompts/analysis.js +14 -63
- package/dist/prompts/analysis.js.map +1 -1
- package/dist/prompts/balances.d.ts.map +1 -1
- package/dist/prompts/balances.js +46 -70
- package/dist/prompts/balances.js.map +1 -1
- package/dist/prompts/creation-utils.d.ts.map +1 -1
- package/dist/prompts/creation-utils.js +27 -50
- package/dist/prompts/creation-utils.js.map +1 -1
- package/dist/prompts/liquidity-positions.d.ts.map +1 -1
- package/dist/prompts/liquidity-positions.js +9 -44
- package/dist/prompts/liquidity-positions.js.map +1 -1
- package/dist/prompts/pools.d.ts.map +1 -1
- package/dist/prompts/pools.js +125 -228
- package/dist/prompts/pools.js.map +1 -1
- package/dist/prompts/portfolio.d.ts.map +1 -1
- package/dist/prompts/portfolio.js +13 -48
- package/dist/prompts/portfolio.js.map +1 -1
- package/dist/prompts/social.d.ts.map +1 -1
- package/dist/prompts/social.js +21 -31
- package/dist/prompts/social.js.map +1 -1
- package/dist/prompts/trading-calculations.d.ts.map +1 -1
- package/dist/prompts/trading-calculations.js +37 -126
- package/dist/prompts/trading-calculations.js.map +1 -1
- package/dist/prompts/trading.d.ts.map +1 -1
- package/dist/prompts/trading.js +23 -60
- package/dist/prompts/trading.js.map +1 -1
- package/dist/prompts/transfers.d.ts.map +1 -1
- package/dist/prompts/transfers.js +21 -31
- package/dist/prompts/transfers.js.map +1 -1
- package/dist/prompts/utility-tools.d.ts.map +1 -1
- package/dist/prompts/utility-tools.js +83 -202
- package/dist/prompts/utility-tools.js.map +1 -1
- package/dist/prompts/utility.d.ts.map +1 -1
- package/dist/prompts/utility.js +5 -20
- package/dist/prompts/utility.js.map +1 -1
- package/dist/prompts/utils/handlerHelpers.d.ts +35 -0
- package/dist/prompts/utils/handlerHelpers.d.ts.map +1 -0
- package/dist/prompts/utils/handlerHelpers.js +53 -0
- package/dist/prompts/utils/handlerHelpers.js.map +1 -0
- package/dist/prompts/utils/textTemplates.d.ts +42 -0
- package/dist/prompts/utils/textTemplates.d.ts.map +1 -0
- package/dist/prompts/utils/textTemplates.js +51 -0
- package/dist/prompts/utils/textTemplates.js.map +1 -0
- package/dist/utils/validation.d.ts +38 -0
- package/dist/utils/validation.d.ts.map +1 -1
- package/dist/utils/validation.js +52 -0
- package/dist/utils/validation.js.map +1 -1
- package/package.json +2 -2
- package/docs/AI-AGENT-PATTERNS.md +0 -555
- package/docs/CONSTRAINTS-REFERENCE.md +0 -454
- package/docs/PROMPT-TOOL-MAPPING.md +0 -352
- package/docs/examples/default-values-pattern.md +0 -240
- package/docs/examples/tool-factory-pattern.md +0 -217
- package/jest.config.js +0 -94
- package/src/__tests__/integration/fetchTokenDetails.integration.test.ts +0 -258
- package/src/__tests__/integration/poolTools.integration.test.ts +0 -185
- package/src/__tests__/server.test.ts +0 -256
- package/src/constants/mcpToolNames.ts +0 -181
- package/src/index.ts +0 -19
- package/src/prompts/__tests__/promptStructure.test.ts +0 -137
- package/src/prompts/__tests__/registry.test.ts +0 -359
- package/src/prompts/analysis.ts +0 -429
- package/src/prompts/balances.ts +0 -198
- package/src/prompts/create-token.ts +0 -123
- package/src/prompts/creation-utils.ts +0 -118
- package/src/prompts/dex-trading.ts +0 -86
- package/src/prompts/discover-tokens.ts +0 -86
- package/src/prompts/index.ts +0 -175
- package/src/prompts/liquidity-positions.ts +0 -270
- package/src/prompts/pools.ts +0 -571
- package/src/prompts/portfolio.ts +0 -242
- package/src/prompts/social.ts +0 -100
- package/src/prompts/trading-calculations.ts +0 -499
- package/src/prompts/trading.ts +0 -191
- package/src/prompts/transfers.ts +0 -103
- package/src/prompts/utility-tools.ts +0 -349
- package/src/prompts/utility.ts +0 -92
- package/src/prompts/utils/workflowTemplates.ts +0 -511
- package/src/schemas/common-schemas.ts +0 -393
- package/src/scripts/test-all-prompts.ts +0 -184
- package/src/server.ts +0 -367
- package/src/tools/__tests__/dex-tools.test.ts +0 -562
- package/src/tools/__tests__/liquidity-positions.test.ts +0 -673
- package/src/tools/balance/index.ts +0 -174
- package/src/tools/creation/index.ts +0 -182
- package/src/tools/dex/index.ts +0 -226
- package/src/tools/dex/liquidity-positions.ts +0 -547
- package/src/tools/index.ts +0 -94
- package/src/tools/pools/fetchAllPools.ts +0 -47
- package/src/tools/pools/fetchAllPriceHistory.ts +0 -119
- package/src/tools/pools/fetchPoolDetails.ts +0 -27
- package/src/tools/pools/fetchPoolDetailsForCalculation.ts +0 -22
- package/src/tools/pools/fetchPools.ts +0 -47
- package/src/tools/pools/fetchPriceHistory.ts +0 -124
- package/src/tools/pools/fetchTokenDetails.ts +0 -77
- package/src/tools/pools/index.ts +0 -284
- package/src/tools/social/index.ts +0 -64
- package/src/tools/trading/index.ts +0 -605
- package/src/tools/transfers/index.ts +0 -75
- package/src/tools/utils/clearCache.ts +0 -36
- package/src/tools/utils/createWallet.ts +0 -19
- package/src/tools/utils/explainSdkUsage.ts +0 -1446
- package/src/tools/utils/getAddress.ts +0 -12
- package/src/tools/utils/getCacheInfo.ts +0 -14
- package/src/tools/utils/getConfig.ts +0 -21
- package/src/tools/utils/getEnvironment.ts +0 -17
- package/src/tools/utils/getEthereumAddress.ts +0 -12
- package/src/tools/utils/getUrlByTokenName.ts +0 -12
- package/src/tools/utils/getVersion.ts +0 -25
- package/src/tools/utils/getWallet.ts +0 -25
- package/src/tools/utils/hasWallet.ts +0 -15
- package/src/tools/utils/index.ts +0 -37
- package/src/tools/utils/isTokenGraduated.ts +0 -16
- package/src/tools/utils/setWallet.ts +0 -41
- package/src/tools/utils/switchEnvironment.ts +0 -28
- package/src/types/mcp.ts +0 -72
- package/src/utils/__tests__/validation.test.ts +0 -147
- package/src/utils/constraints.ts +0 -155
- package/src/utils/default-values.ts +0 -208
- package/src/utils/error-handler.ts +0 -69
- package/src/utils/error-templates.ts +0 -273
- package/src/utils/response-formatter.ts +0 -51
- package/src/utils/tool-factory.ts +0 -303
- package/src/utils/tool-registry.ts +0 -296
- package/src/utils/validation.ts +0 -371
- package/tests/wallet-management-integration.test.ts +0 -284
- package/tsconfig.json +0 -23
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Handler Helper Utilities
|
|
4
|
+
*
|
|
5
|
+
* Provides reusable utilities for creating MCP prompt handlers with
|
|
6
|
+
* standardized response formatting and validation patterns.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.createPromptResponse = createPromptResponse;
|
|
10
|
+
exports.createValidatedHandler = createValidatedHandler;
|
|
11
|
+
/**
|
|
12
|
+
* Create a standard MCP prompt response with user role
|
|
13
|
+
*
|
|
14
|
+
* @param text - The prompt text to send to the user
|
|
15
|
+
* @returns Array containing formatted MCP message
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* handler: (args) => {
|
|
19
|
+
* validateTokenName(args.tokenName);
|
|
20
|
+
* return createPromptResponse(`Fetch token ${args.tokenName}...`);
|
|
21
|
+
* }
|
|
22
|
+
*/
|
|
23
|
+
function createPromptResponse(text) {
|
|
24
|
+
return [
|
|
25
|
+
{
|
|
26
|
+
role: 'user',
|
|
27
|
+
content: {
|
|
28
|
+
type: 'text',
|
|
29
|
+
text,
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
];
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Create a handler function that validates arguments and returns a prompt response
|
|
36
|
+
*
|
|
37
|
+
* @param validator - Function to validate the arguments
|
|
38
|
+
* @param textGenerator - Function that generates the prompt text from arguments
|
|
39
|
+
* @returns A handler function ready to use in a prompt definition
|
|
40
|
+
*
|
|
41
|
+
* @example
|
|
42
|
+
* handler: createValidatedHandler(
|
|
43
|
+
* (args) => validateTokenName(args.tokenName),
|
|
44
|
+
* (args) => `Fetch token ${args.tokenName}...`
|
|
45
|
+
* )
|
|
46
|
+
*/
|
|
47
|
+
function createValidatedHandler(validator, textGenerator) {
|
|
48
|
+
return (args) => {
|
|
49
|
+
validator(args);
|
|
50
|
+
return createPromptResponse(textGenerator(args));
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=handlerHelpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handlerHelpers.js","sourceRoot":"","sources":["../../../src/prompts/utils/handlerHelpers.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AAgBH,oDAUC;AAeD,wDAQC;AA7CD;;;;;;;;;;;GAWG;AACH,SAAgB,oBAAoB,CAAC,IAAY;IAC/C,OAAO;QACL;YACE,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE;gBACP,IAAI,EAAE,MAAM;gBACZ,IAAI;aACL;SACF;KACF,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,SAAgB,sBAAsB,CACpC,SAA4B,EAC5B,aAAkC;IAElC,OAAO,CAAC,IAAO,EAAE,EAAE;QACjB,SAAS,CAAC,IAAI,CAAC,CAAC;QAChB,OAAO,oBAAoB,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;IACnD,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Prompt Text Templates
|
|
3
|
+
*
|
|
4
|
+
* Provides reusable template generators for common MCP prompt patterns.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Configuration for simple operation prompts
|
|
8
|
+
*/
|
|
9
|
+
export interface SimpleOperationConfig {
|
|
10
|
+
/** Operation description (e.g., "Fetch GALA balance for wallet.") */
|
|
11
|
+
operation: string;
|
|
12
|
+
/** Parameter descriptions as key-value pairs (optional) */
|
|
13
|
+
parameters?: Record<string, string | undefined>;
|
|
14
|
+
/** MCP tool name (e.g., MCP_TOOLS.FETCH_GALA_BALANCE) */
|
|
15
|
+
toolName: string;
|
|
16
|
+
/** Description of what the tool does (e.g., "retrieve the GALA balance") */
|
|
17
|
+
actionDescription: string;
|
|
18
|
+
/** Optional display format instructions */
|
|
19
|
+
displayFormat?: string;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Generate text for simple operation prompts
|
|
23
|
+
*
|
|
24
|
+
* Creates a standardized prompt text with operation, parameters, tool usage,
|
|
25
|
+
* and optional display format instructions.
|
|
26
|
+
*
|
|
27
|
+
* @param config - Configuration for the operation
|
|
28
|
+
* @returns Formatted prompt text
|
|
29
|
+
*
|
|
30
|
+
* @example
|
|
31
|
+
* text: createSimpleOperationText({
|
|
32
|
+
* operation: 'Get GALA balance for wallet.',
|
|
33
|
+
* parameters: {
|
|
34
|
+
* address: args.address ? `Address: ${args.address}` : 'Using default wallet'
|
|
35
|
+
* },
|
|
36
|
+
* toolName: MCP_TOOLS.FETCH_GALA_BALANCE,
|
|
37
|
+
* actionDescription: 'retrieve the GALA balance',
|
|
38
|
+
* displayFormat: 'Display the balance in a clear format.'
|
|
39
|
+
* })
|
|
40
|
+
*/
|
|
41
|
+
export declare function createSimpleOperationText(config: SimpleOperationConfig): string;
|
|
42
|
+
//# sourceMappingURL=textTemplates.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"textTemplates.d.ts","sourceRoot":"","sources":["../../../src/prompts/utils/textTemplates.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,qEAAqE;IACrE,SAAS,EAAE,MAAM,CAAC;IAElB,2DAA2D;IAC3D,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IAEhD,yDAAyD;IACzD,QAAQ,EAAE,MAAM,CAAC;IAEjB,4EAA4E;IAC5E,iBAAiB,EAAE,MAAM,CAAC;IAE1B,2CAA2C;IAC3C,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,qBAAqB,GAAG,MAAM,CA0B/E"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Prompt Text Templates
|
|
4
|
+
*
|
|
5
|
+
* Provides reusable template generators for common MCP prompt patterns.
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.createSimpleOperationText = createSimpleOperationText;
|
|
9
|
+
/**
|
|
10
|
+
* Generate text for simple operation prompts
|
|
11
|
+
*
|
|
12
|
+
* Creates a standardized prompt text with operation, parameters, tool usage,
|
|
13
|
+
* and optional display format instructions.
|
|
14
|
+
*
|
|
15
|
+
* @param config - Configuration for the operation
|
|
16
|
+
* @returns Formatted prompt text
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* text: createSimpleOperationText({
|
|
20
|
+
* operation: 'Get GALA balance for wallet.',
|
|
21
|
+
* parameters: {
|
|
22
|
+
* address: args.address ? `Address: ${args.address}` : 'Using default wallet'
|
|
23
|
+
* },
|
|
24
|
+
* toolName: MCP_TOOLS.FETCH_GALA_BALANCE,
|
|
25
|
+
* actionDescription: 'retrieve the GALA balance',
|
|
26
|
+
* displayFormat: 'Display the balance in a clear format.'
|
|
27
|
+
* })
|
|
28
|
+
*/
|
|
29
|
+
function createSimpleOperationText(config) {
|
|
30
|
+
const { operation, parameters, toolName, actionDescription, displayFormat } = config;
|
|
31
|
+
const parts = [operation];
|
|
32
|
+
// Add parameters section
|
|
33
|
+
if (parameters && Object.values(parameters).some((v) => v !== undefined)) {
|
|
34
|
+
parts.push('');
|
|
35
|
+
Object.entries(parameters).forEach(([, value]) => {
|
|
36
|
+
if (value !== undefined && value !== null && value !== '') {
|
|
37
|
+
parts.push(value);
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
// Add tool usage instruction
|
|
42
|
+
parts.push('');
|
|
43
|
+
parts.push(`Use ${toolName} to ${actionDescription}.`);
|
|
44
|
+
// Add display format if provided
|
|
45
|
+
if (displayFormat) {
|
|
46
|
+
parts.push('');
|
|
47
|
+
parts.push(displayFormat);
|
|
48
|
+
}
|
|
49
|
+
return parts.join('\n');
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=textTemplates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"textTemplates.js","sourceRoot":"","sources":["../../../src/prompts/utils/textTemplates.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;AA0CH,8DA0BC;AA9CD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,SAAgB,yBAAyB,CAAC,MAA6B;IACrE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,iBAAiB,EAAE,aAAa,EAAE,GAAG,MAAM,CAAC;IAErF,MAAM,KAAK,GAAa,CAAC,SAAS,CAAC,CAAC;IAEpC,yBAAyB;IACzB,IAAI,UAAU,IAAI,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC,EAAE,CAAC;QACzE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE;YAC/C,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;gBAC1D,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACpB,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,6BAA6B;IAC7B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,OAAO,QAAQ,OAAO,iBAAiB,GAAG,CAAC,CAAC;IAEvD,iCAAiC;IACjC,IAAI,aAAa,EAAE,CAAC;QAClB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC5B,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
|
|
@@ -177,4 +177,42 @@ export declare function safeValidate(validationFn: () => void): {
|
|
|
177
177
|
success: boolean;
|
|
178
178
|
error?: string;
|
|
179
179
|
};
|
|
180
|
+
/**
|
|
181
|
+
* Validate optional field if present
|
|
182
|
+
*
|
|
183
|
+
* Convenience wrapper for validating optional fields. Only runs validation
|
|
184
|
+
* if the value is defined and not null.
|
|
185
|
+
*
|
|
186
|
+
* @param value - Value to validate (can be undefined)
|
|
187
|
+
* @param validator - Validation function to run if value is present
|
|
188
|
+
* @throws {ValidationError} If validation fails
|
|
189
|
+
*
|
|
190
|
+
* @example
|
|
191
|
+
* ```typescript
|
|
192
|
+
* validateOptional(args.slippage, (val) => validateSlippage(val));
|
|
193
|
+
* ```
|
|
194
|
+
*/
|
|
195
|
+
export declare function validateOptional<T>(value: T | undefined | null, validator: (val: T) => void): void;
|
|
196
|
+
/**
|
|
197
|
+
* Validate optional slippage field
|
|
198
|
+
*
|
|
199
|
+
* @param slippage - Slippage value to validate (optional)
|
|
200
|
+
* @throws {ValidationError} If slippage is invalid
|
|
201
|
+
*/
|
|
202
|
+
export declare function validateOptionalSlippage(slippage?: string | number): void;
|
|
203
|
+
/**
|
|
204
|
+
* Validate optional pagination limit field
|
|
205
|
+
*
|
|
206
|
+
* @param limit - Limit value to validate (optional)
|
|
207
|
+
* @param max - Maximum allowed limit (default: 100)
|
|
208
|
+
* @throws {ValidationError} If limit is invalid
|
|
209
|
+
*/
|
|
210
|
+
export declare function validateOptionalLimit(limit?: string | number, max?: number): void;
|
|
211
|
+
/**
|
|
212
|
+
* Validate optional address field
|
|
213
|
+
*
|
|
214
|
+
* @param address - Address value to validate (optional)
|
|
215
|
+
* @throws {ValidationError} If address is invalid
|
|
216
|
+
*/
|
|
217
|
+
export declare function validateOptionalAddress(address?: string): void;
|
|
180
218
|
//# sourceMappingURL=validation.d.ts.map
|
|
@@ -1 +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;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,SAAQ,GAAG,IAAI,CAgBhE;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,YAAY,CAC1B,YAAY,EAAE,MAAM,IAAI,GACvB;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAUtC"}
|
|
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;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,SAAQ,GAAG,IAAI,CAgBhE;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,YAAY,CAC1B,YAAY,EAAE,MAAM,IAAI,GACvB;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAUtC;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAChC,KAAK,EAAE,CAAC,GAAG,SAAS,GAAG,IAAI,EAC3B,SAAS,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,GAC1B,IAAI,CAIN;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAEzE;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EACvB,GAAG,GAAE,MAAY,GAChB,IAAI,CAEN;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAE9D"}
|
package/dist/utils/validation.js
CHANGED
|
@@ -16,6 +16,10 @@ exports.validatePaginationLimit = validatePaginationLimit;
|
|
|
16
16
|
exports.validateTokenList = validateTokenList;
|
|
17
17
|
exports.validateUrl = validateUrl;
|
|
18
18
|
exports.safeValidate = safeValidate;
|
|
19
|
+
exports.validateOptional = validateOptional;
|
|
20
|
+
exports.validateOptionalSlippage = validateOptionalSlippage;
|
|
21
|
+
exports.validateOptionalLimit = validateOptionalLimit;
|
|
22
|
+
exports.validateOptionalAddress = validateOptionalAddress;
|
|
19
23
|
/**
|
|
20
24
|
* Validation error class for better error handling
|
|
21
25
|
*/
|
|
@@ -308,4 +312,52 @@ function safeValidate(validationFn) {
|
|
|
308
312
|
return { success: false, error: String(error) };
|
|
309
313
|
}
|
|
310
314
|
}
|
|
315
|
+
/**
|
|
316
|
+
* Validate optional field if present
|
|
317
|
+
*
|
|
318
|
+
* Convenience wrapper for validating optional fields. Only runs validation
|
|
319
|
+
* if the value is defined and not null.
|
|
320
|
+
*
|
|
321
|
+
* @param value - Value to validate (can be undefined)
|
|
322
|
+
* @param validator - Validation function to run if value is present
|
|
323
|
+
* @throws {ValidationError} If validation fails
|
|
324
|
+
*
|
|
325
|
+
* @example
|
|
326
|
+
* ```typescript
|
|
327
|
+
* validateOptional(args.slippage, (val) => validateSlippage(val));
|
|
328
|
+
* ```
|
|
329
|
+
*/
|
|
330
|
+
function validateOptional(value, validator) {
|
|
331
|
+
if (value !== undefined && value !== null && value !== '') {
|
|
332
|
+
validator(value);
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
/**
|
|
336
|
+
* Validate optional slippage field
|
|
337
|
+
*
|
|
338
|
+
* @param slippage - Slippage value to validate (optional)
|
|
339
|
+
* @throws {ValidationError} If slippage is invalid
|
|
340
|
+
*/
|
|
341
|
+
function validateOptionalSlippage(slippage) {
|
|
342
|
+
validateOptional(slippage, (val) => validateSlippage(val));
|
|
343
|
+
}
|
|
344
|
+
/**
|
|
345
|
+
* Validate optional pagination limit field
|
|
346
|
+
*
|
|
347
|
+
* @param limit - Limit value to validate (optional)
|
|
348
|
+
* @param max - Maximum allowed limit (default: 100)
|
|
349
|
+
* @throws {ValidationError} If limit is invalid
|
|
350
|
+
*/
|
|
351
|
+
function validateOptionalLimit(limit, max = 100) {
|
|
352
|
+
validateOptional(limit, (val) => validatePaginationLimit(val, max));
|
|
353
|
+
}
|
|
354
|
+
/**
|
|
355
|
+
* Validate optional address field
|
|
356
|
+
*
|
|
357
|
+
* @param address - Address value to validate (optional)
|
|
358
|
+
* @throws {ValidationError} If address is invalid
|
|
359
|
+
*/
|
|
360
|
+
function validateOptionalAddress(address) {
|
|
361
|
+
validateOptional(address, (val) => validateAddress(val));
|
|
362
|
+
}
|
|
311
363
|
//# sourceMappingURL=validation.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAiCH,8CAmBC;AAmBD,sDAwBC;AAoBD,4CAuBC;AAkBD,0CAgBC;AAmBD,kDAmBC;AAoBD,0DAwBC;AAmBD,8CA2BC;AAmBD,kCAgBC;AAkBD,oCAYC;
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gala-chain/launchpad-mcp-server",
|
|
3
|
-
"version": "1.23.
|
|
3
|
+
"version": "1.23.1",
|
|
4
4
|
"description": "MCP server for Gala Launchpad - 62 tools (pool management, GSwap DEX trading, price history, token creation, wallet management) supporting optional wallet (read-only and full-access modes). Production-grade AI agent integration for Claude Desktop with comprehensive validation and 80%+ test coverage",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"bin": {
|
|
@@ -73,7 +73,7 @@
|
|
|
73
73
|
"dependencies": {
|
|
74
74
|
"@gala-chain/api": "^2.4.3",
|
|
75
75
|
"@gala-chain/connect": "^2.4.3",
|
|
76
|
-
"@gala-chain/launchpad-sdk": "^3.27.
|
|
76
|
+
"@gala-chain/launchpad-sdk": "^3.27.4",
|
|
77
77
|
"@modelcontextprotocol/sdk": "^0.5.0",
|
|
78
78
|
"axios": "^1.12.2",
|
|
79
79
|
"bignumber.js": "^9.1.2",
|