@manifest-network/manifest-mcp-browser 0.1.7 → 0.1.8

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 (78) hide show
  1. package/README.md +5 -2
  2. package/dist/config.d.ts.map +1 -1
  3. package/dist/config.js +0 -10
  4. package/dist/config.js.map +1 -1
  5. package/dist/index.d.ts +0 -1
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +3 -7
  8. package/dist/index.js.map +1 -1
  9. package/dist/queries/index.d.ts +1 -0
  10. package/dist/queries/index.d.ts.map +1 -1
  11. package/dist/queries/index.js +1 -0
  12. package/dist/queries/index.js.map +1 -1
  13. package/dist/transactions/bank.d.ts.map +1 -1
  14. package/dist/transactions/bank.js +7 -5
  15. package/dist/transactions/bank.js.map +1 -1
  16. package/dist/transactions/gov.d.ts.map +1 -1
  17. package/dist/transactions/gov.js +7 -5
  18. package/dist/transactions/gov.js.map +1 -1
  19. package/dist/transactions/index.d.ts +1 -0
  20. package/dist/transactions/index.d.ts.map +1 -1
  21. package/dist/transactions/index.js +1 -0
  22. package/dist/transactions/index.js.map +1 -1
  23. package/dist/types.d.ts +0 -2
  24. package/dist/types.d.ts.map +1 -1
  25. package/dist/types.js.map +1 -1
  26. package/package.json +5 -2
  27. package/.github/workflows/ci.yml +0 -37
  28. package/.github/workflows/publish.yml +0 -53
  29. package/CLAUDE.md +0 -113
  30. package/dist/config.test.d.ts +0 -2
  31. package/dist/config.test.d.ts.map +0 -1
  32. package/dist/config.test.js +0 -251
  33. package/dist/config.test.js.map +0 -1
  34. package/dist/modules.test.d.ts +0 -2
  35. package/dist/modules.test.d.ts.map +0 -1
  36. package/dist/modules.test.js +0 -161
  37. package/dist/modules.test.js.map +0 -1
  38. package/dist/queries/utils.test.d.ts +0 -2
  39. package/dist/queries/utils.test.d.ts.map +0 -1
  40. package/dist/queries/utils.test.js +0 -117
  41. package/dist/queries/utils.test.js.map +0 -1
  42. package/dist/transactions/utils.test.d.ts +0 -2
  43. package/dist/transactions/utils.test.d.ts.map +0 -1
  44. package/dist/transactions/utils.test.js +0 -567
  45. package/dist/transactions/utils.test.js.map +0 -1
  46. package/src/client.ts +0 -288
  47. package/src/config.test.ts +0 -299
  48. package/src/config.ts +0 -174
  49. package/src/cosmos.ts +0 -106
  50. package/src/index.ts +0 -478
  51. package/src/modules.test.ts +0 -191
  52. package/src/modules.ts +0 -470
  53. package/src/queries/auth.ts +0 -97
  54. package/src/queries/bank.ts +0 -99
  55. package/src/queries/billing.ts +0 -124
  56. package/src/queries/distribution.ts +0 -114
  57. package/src/queries/gov.ts +0 -104
  58. package/src/queries/group.ts +0 -146
  59. package/src/queries/index.ts +0 -17
  60. package/src/queries/sku.ts +0 -85
  61. package/src/queries/staking.ts +0 -154
  62. package/src/queries/utils.test.ts +0 -156
  63. package/src/queries/utils.ts +0 -121
  64. package/src/transactions/bank.ts +0 -86
  65. package/src/transactions/billing.ts +0 -286
  66. package/src/transactions/distribution.ts +0 -76
  67. package/src/transactions/gov.ts +0 -164
  68. package/src/transactions/group.ts +0 -458
  69. package/src/transactions/index.ts +0 -8
  70. package/src/transactions/manifest.ts +0 -67
  71. package/src/transactions/sku.ts +0 -232
  72. package/src/transactions/staking.ts +0 -85
  73. package/src/transactions/utils.test.ts +0 -626
  74. package/src/transactions/utils.ts +0 -417
  75. package/src/types.ts +0 -548
  76. package/src/wallet/index.ts +0 -2
  77. package/src/wallet/mnemonic.ts +0 -146
  78. package/tsconfig.json +0 -23
package/CLAUDE.md DELETED
@@ -1,113 +0,0 @@
1
- # CLAUDE.md
2
-
3
- This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
4
-
5
- ## Project Overview
6
-
7
- Browser-compatible MCP (Model Context Protocol) server for Cosmos SDK blockchain interactions with Manifest Network using CosmJS. This is a browser-friendly alternative to `manifest-mcp` that uses CosmJS/HTTP instead of CLI.
8
-
9
- ## Build Commands
10
-
11
- ```bash
12
- npm run build # TypeScript compilation to dist/
13
- npm run dev # Watch mode for TypeScript
14
- npm run lint # Type-check without emitting (tsc --noEmit)
15
- npm test # Run tests with vitest
16
- npm run test:watch # Run tests in watch mode
17
- ```
18
-
19
- ## Architecture
20
-
21
- ### Entry Point
22
-
23
- - `src/index.ts` - Main entry point, exports `ManifestMCPServer` class, `createMnemonicServer()`, and all public APIs
24
-
25
- ### Core Components
26
-
27
- **ManifestMCPServer** (`src/index.ts`)
28
- - Wraps MCP SDK `Server` to handle tool requests
29
- - Exposes 5 MCP tools: `get_account_info`, `cosmos_query`, `cosmos_tx`, `list_modules`, `list_module_subcommands`
30
-
31
- **CosmosClientManager** (`src/client.ts`)
32
- - Singleton pattern per chainId:rpcUrl combination
33
- - Provides lazy-initialized query client (manifestjs RPC) and signing client (CosmJS Stargate)
34
- - Registers all Manifest protobuf types from `@manifest-network/manifestjs`
35
-
36
- **Wallet Providers** (`src/wallet/`)
37
- - `WalletProvider` interface defines `getAddress()` and `getSigner()` methods (wallet-agnostic)
38
- - Any wallet providing `OfflineSigner` works (cosmos-kit, Web3Auth, Keplr, Leap, etc.)
39
- - `MnemonicWalletProvider` - Built-in provider using `DirectSecp256k1HdWallet` for testing
40
-
41
- ### Query/Transaction Routing
42
-
43
- **cosmos.ts** - Main router that validates module/subcommand names and dispatches to module handlers
44
-
45
- **queries/** - Module-specific query handlers
46
- - Each file exports `route{Module}Query()` function
47
- - Uses manifestjs RPC query client (`liftedinit.ClientFactory.createRPCQueryClient`)
48
- - Shared utilities in `utils.ts`: `parseBigInt()`, `parseInteger()`, `createPagination()`, `extractPaginationArgs()`, `extractBooleanFlag()`
49
- - All paginated queries support `--limit` flag (default: 100, max: 1000)
50
-
51
- **transactions/** - Module-specific transaction handlers
52
- - Each file exports `route{Module}Transaction()` function
53
- - Uses CosmJS `SigningStargateClient` with Manifest registries
54
- - Uses manifestjs enums (e.g., `VoteOption` from `cosmos.gov.v1`, `Unit` from `liftedinit.sku.v1`)
55
- - Shared utilities in `utils.ts`:
56
- - `requireArgs()` - Validate required argument count with helpful error messages
57
- - `parseAmount()` - Parse amount strings with helpful error hints
58
- - `parseBigIntWithCode()` - Base implementation used by both queries and transactions
59
- - `parseHexBytes()` - Parse and validate hex strings to Uint8Array (browser-compatible via `@cosmjs/encoding`)
60
- - `bytesToHex()` - Convert Uint8Array to hex string (browser-compatible via `@cosmjs/encoding`)
61
- - `validateAddress()` - Bech32 validation using `@cosmjs/encoding`
62
- - `validateMemo()` - Enforce 256 char limit (Cosmos SDK default)
63
- - `validateArgsLength()` - Enforce 100 args max to prevent DoS
64
- - `extractFlag()` - Extract `--flag value` pairs from args
65
- - `buildTxResult()` - Build transaction result objects
66
- - `parseVoteOption()` - Parse vote option strings to enum values (shared by gov and group)
67
- - `extractBooleanFlag()` - Extract valueless boolean flags from args (e.g., `--active-only`)
68
- - `MAX_META_HASH_BYTES` - Shared constant for meta hash validation (64 bytes)
69
-
70
- **modules.ts** - Static registry of all supported modules and subcommands (no dynamic CLI discovery)
71
-
72
- ### Supported Modules
73
-
74
- Query: bank, staking, distribution, gov, auth, billing, sku, group
75
- Transaction: bank, staking, distribution, gov, billing, manifest, sku, group
76
-
77
- ### Key Dependencies
78
-
79
- - `@manifest-network/manifestjs` - Protobuf types, registries, RPC client factory, and enums (e.g., `VoteOption`)
80
- - `@modelcontextprotocol/sdk` - MCP server implementation
81
- - `@cosmjs/stargate` - Signing client, gas price parsing
82
- - `@cosmjs/encoding` - Bech32 address validation (`fromBech32`), hex conversion (`fromHex`, `toHex`)
83
- - `@cosmjs/proto-signing` - Wallet and signer interfaces
84
-
85
- ### Security Features
86
-
87
- **Input Validation:**
88
- - Bech32 address validation using `@cosmjs/encoding`
89
- - Amount format validation with helpful error hints
90
- - Memo length limit (256 chars, Cosmos SDK default)
91
- - Args array length limit (100 max)
92
- - BigInt empty string rejection (prevents silent 0n)
93
- - Hex string validation for address-bytes queries
94
- - HTTPS enforcement for RPC URLs (HTTP only allowed for localhost/127.0.0.1/::1)
95
-
96
- **Resource Limits:**
97
- - Rate limiting via `limiter` package (default: 10 requests/second, configurable)
98
- - Default pagination limit of 100 items for all list queries
99
- - Transaction broadcast timeout (60 seconds)
100
- - Broadcast poll interval (3 seconds)
101
-
102
- **Sensitive Data:**
103
- - Error responses sanitize sensitive fields (mnemonic, privateKey, secret, etc.)
104
- - Mnemonic cleared on wallet disconnect
105
- - No logging of sensitive data
106
-
107
- ### Error Handling
108
-
109
- All errors use `ManifestMCPError` class with typed `ManifestMCPErrorCode` enum (see `src/types.ts`).
110
-
111
- ### Type Exports
112
-
113
- `ManifestQueryClient` type in `client.ts` is derived from manifestjs `liftedinit.ClientFactory.createRPCQueryClient` return type.
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=config.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.test.d.ts","sourceRoot":"","sources":["../src/config.test.ts"],"names":[],"mappings":""}
@@ -1,251 +0,0 @@
1
- import { describe, it, expect } from 'vitest';
2
- import { createConfig, validateConfig, createValidatedConfig } from './config.js';
3
- import { ManifestMCPError, ManifestMCPErrorCode } from './types.js';
4
- describe('createConfig', () => {
5
- it('should apply default values', () => {
6
- const config = createConfig({
7
- chainId: 'test-chain',
8
- rpcUrl: 'https://example.com',
9
- gasPrice: '1.0umfx',
10
- });
11
- expect(config.chainId).toBe('test-chain');
12
- expect(config.rpcUrl).toBe('https://example.com');
13
- expect(config.gasPrice).toBe('1.0umfx');
14
- expect(config.gasAdjustment).toBe(1.3);
15
- expect(config.addressPrefix).toBe('manifest');
16
- });
17
- it('should preserve provided optional values', () => {
18
- const config = createConfig({
19
- chainId: 'test-chain',
20
- rpcUrl: 'https://example.com',
21
- gasPrice: '1.0umfx',
22
- gasAdjustment: 2.0,
23
- addressPrefix: 'custom',
24
- });
25
- expect(config.gasAdjustment).toBe(2.0);
26
- expect(config.addressPrefix).toBe('custom');
27
- });
28
- it('should apply default rateLimit', () => {
29
- const config = createConfig({
30
- chainId: 'test-chain',
31
- rpcUrl: 'https://example.com',
32
- gasPrice: '1.0umfx',
33
- });
34
- expect(config.rateLimit).toBeDefined();
35
- expect(config.rateLimit?.requestsPerSecond).toBe(10);
36
- });
37
- it('should preserve provided rateLimit', () => {
38
- const config = createConfig({
39
- chainId: 'test-chain',
40
- rpcUrl: 'https://example.com',
41
- gasPrice: '1.0umfx',
42
- rateLimit: { requestsPerSecond: 20 },
43
- });
44
- expect(config.rateLimit?.requestsPerSecond).toBe(20);
45
- });
46
- });
47
- describe('validateConfig', () => {
48
- it('should return valid for correct config', () => {
49
- const result = validateConfig({
50
- chainId: 'manifest-testnet',
51
- rpcUrl: 'https://rpc.example.com',
52
- gasPrice: '1.0umfx',
53
- });
54
- expect(result.valid).toBe(true);
55
- expect(result.errors).toHaveLength(0);
56
- });
57
- it('should detect missing required fields', () => {
58
- const result = validateConfig({});
59
- expect(result.valid).toBe(false);
60
- expect(result.errors).toContain('chainId is required');
61
- expect(result.errors).toContain('rpcUrl is required');
62
- expect(result.errors).toContain('gasPrice is required');
63
- });
64
- it('should validate chainId format', () => {
65
- const result = validateConfig({
66
- chainId: '-invalid',
67
- rpcUrl: 'https://example.com',
68
- gasPrice: '1.0umfx',
69
- });
70
- expect(result.valid).toBe(false);
71
- expect(result.errors.some(e => e.includes('chainId'))).toBe(true);
72
- });
73
- it('should validate rpcUrl format', () => {
74
- const result = validateConfig({
75
- chainId: 'test',
76
- rpcUrl: 'not-a-url',
77
- gasPrice: '1.0umfx',
78
- });
79
- expect(result.valid).toBe(false);
80
- expect(result.errors.some(e => e.includes('rpcUrl'))).toBe(true);
81
- });
82
- it('should validate gasPrice format', () => {
83
- const result = validateConfig({
84
- chainId: 'test',
85
- rpcUrl: 'https://example.com',
86
- gasPrice: 'invalid',
87
- });
88
- expect(result.valid).toBe(false);
89
- expect(result.errors.some(e => e.includes('gasPrice'))).toBe(true);
90
- });
91
- it('should validate optional gasAdjustment', () => {
92
- const result = validateConfig({
93
- chainId: 'test',
94
- rpcUrl: 'https://example.com',
95
- gasPrice: '1.0umfx',
96
- gasAdjustment: -1,
97
- });
98
- expect(result.valid).toBe(false);
99
- expect(result.errors.some(e => e.includes('gasAdjustment'))).toBe(true);
100
- });
101
- it('should validate optional addressPrefix', () => {
102
- const result = validateConfig({
103
- chainId: 'test',
104
- rpcUrl: 'https://example.com',
105
- gasPrice: '1.0umfx',
106
- addressPrefix: 'INVALID',
107
- });
108
- expect(result.valid).toBe(false);
109
- expect(result.errors.some(e => e.includes('addressPrefix'))).toBe(true);
110
- });
111
- it('should accept HTTPS URLs', () => {
112
- const result = validateConfig({
113
- chainId: 'test',
114
- rpcUrl: 'https://rpc.example.com',
115
- gasPrice: '1.0umfx',
116
- });
117
- expect(result.valid).toBe(true);
118
- });
119
- it('should accept HTTP URLs for localhost', () => {
120
- const result = validateConfig({
121
- chainId: 'test',
122
- rpcUrl: 'http://localhost:26657',
123
- gasPrice: '1.0umfx',
124
- });
125
- expect(result.valid).toBe(true);
126
- });
127
- it('should accept HTTP URLs for 127.0.0.1', () => {
128
- const result = validateConfig({
129
- chainId: 'test',
130
- rpcUrl: 'http://127.0.0.1:26657',
131
- gasPrice: '1.0umfx',
132
- });
133
- expect(result.valid).toBe(true);
134
- });
135
- it('should accept HTTP URLs for IPv6 localhost', () => {
136
- const result = validateConfig({
137
- chainId: 'test',
138
- rpcUrl: 'http://[::1]:26657',
139
- gasPrice: '1.0umfx',
140
- });
141
- expect(result.valid).toBe(true);
142
- });
143
- it('should reject HTTP URLs for non-localhost', () => {
144
- const result = validateConfig({
145
- chainId: 'test',
146
- rpcUrl: 'http://rpc.example.com',
147
- gasPrice: '1.0umfx',
148
- });
149
- expect(result.valid).toBe(false);
150
- expect(result.errors.some(e => e.includes('HTTPS'))).toBe(true);
151
- });
152
- it('should accept valid rateLimit config', () => {
153
- const result = validateConfig({
154
- chainId: 'test',
155
- rpcUrl: 'https://example.com',
156
- gasPrice: '1.0umfx',
157
- rateLimit: { requestsPerSecond: 5 },
158
- });
159
- expect(result.valid).toBe(true);
160
- });
161
- it('should reject non-integer rateLimit.requestsPerSecond', () => {
162
- const result = validateConfig({
163
- chainId: 'test',
164
- rpcUrl: 'https://example.com',
165
- gasPrice: '1.0umfx',
166
- rateLimit: { requestsPerSecond: 5.5 },
167
- });
168
- expect(result.valid).toBe(false);
169
- expect(result.errors.some(e => e.includes('requestsPerSecond'))).toBe(true);
170
- });
171
- it('should reject negative rateLimit.requestsPerSecond', () => {
172
- const result = validateConfig({
173
- chainId: 'test',
174
- rpcUrl: 'https://example.com',
175
- gasPrice: '1.0umfx',
176
- rateLimit: { requestsPerSecond: -1 },
177
- });
178
- expect(result.valid).toBe(false);
179
- expect(result.errors.some(e => e.includes('requestsPerSecond'))).toBe(true);
180
- });
181
- it('should reject zero rateLimit.requestsPerSecond', () => {
182
- const result = validateConfig({
183
- chainId: 'test',
184
- rpcUrl: 'https://example.com',
185
- gasPrice: '1.0umfx',
186
- rateLimit: { requestsPerSecond: 0 },
187
- });
188
- expect(result.valid).toBe(false);
189
- expect(result.errors.some(e => e.includes('requestsPerSecond'))).toBe(true);
190
- });
191
- it('should reject null rateLimit', () => {
192
- const result = validateConfig({
193
- chainId: 'test',
194
- rpcUrl: 'https://example.com',
195
- gasPrice: '1.0umfx',
196
- rateLimit: null,
197
- });
198
- expect(result.valid).toBe(false);
199
- expect(result.errors.some(e => e.includes('rateLimit must be a plain object'))).toBe(true);
200
- });
201
- it('should reject non-object rateLimit', () => {
202
- const result = validateConfig({
203
- chainId: 'test',
204
- rpcUrl: 'https://example.com',
205
- gasPrice: '1.0umfx',
206
- rateLimit: 'invalid',
207
- });
208
- expect(result.valid).toBe(false);
209
- expect(result.errors.some(e => e.includes('rateLimit must be a plain object'))).toBe(true);
210
- });
211
- it('should reject array rateLimit', () => {
212
- const result = validateConfig({
213
- chainId: 'test',
214
- rpcUrl: 'https://example.com',
215
- gasPrice: '1.0umfx',
216
- rateLimit: [],
217
- });
218
- expect(result.valid).toBe(false);
219
- expect(result.errors.some(e => e.includes('rateLimit must be a plain object'))).toBe(true);
220
- });
221
- });
222
- describe('createValidatedConfig', () => {
223
- it('should return config for valid input', () => {
224
- const config = createValidatedConfig({
225
- chainId: 'test-chain',
226
- rpcUrl: 'https://example.com',
227
- gasPrice: '1.0umfx',
228
- });
229
- expect(config.chainId).toBe('test-chain');
230
- });
231
- it('should throw ManifestMCPError for invalid input', () => {
232
- expect(() => createValidatedConfig({
233
- chainId: '',
234
- rpcUrl: '',
235
- gasPrice: '',
236
- })).toThrow(ManifestMCPError);
237
- });
238
- it('should have INVALID_CONFIG error code', () => {
239
- try {
240
- createValidatedConfig({
241
- chainId: '',
242
- rpcUrl: '',
243
- gasPrice: '',
244
- });
245
- }
246
- catch (error) {
247
- expect(error.code).toBe(ManifestMCPErrorCode.INVALID_CONFIG);
248
- }
249
- });
250
- });
251
- //# sourceMappingURL=config.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.test.js","sourceRoot":"","sources":["../src/config.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAClF,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAEpE,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACrC,MAAM,MAAM,GAAG,YAAY,CAAC;YAC1B,OAAO,EAAE,YAAY;YACrB,MAAM,EAAE,qBAAqB;YAC7B,QAAQ,EAAE,SAAS;SACpB,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC1C,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QAClD,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACxC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACvC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,MAAM,GAAG,YAAY,CAAC;YAC1B,OAAO,EAAE,YAAY;YACrB,MAAM,EAAE,qBAAqB;YAC7B,QAAQ,EAAE,SAAS;YACnB,aAAa,EAAE,GAAG;YAClB,aAAa,EAAE,QAAQ;SACxB,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACvC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,MAAM,MAAM,GAAG,YAAY,CAAC;YAC1B,OAAO,EAAE,YAAY;YACrB,MAAM,EAAE,qBAAqB;YAC7B,QAAQ,EAAE,SAAS;SACpB,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC;QACvC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,MAAM,MAAM,GAAG,YAAY,CAAC;YAC1B,OAAO,EAAE,YAAY;YACrB,MAAM,EAAE,qBAAqB;YAC7B,QAAQ,EAAE,SAAS;YACnB,SAAS,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAE;SACrC,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,MAAM,MAAM,GAAG,cAAc,CAAC;YAC5B,OAAO,EAAE,kBAAkB;YAC3B,MAAM,EAAE,yBAAyB;YACjC,QAAQ,EAAE,SAAS;SACpB,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,MAAM,MAAM,GAAG,cAAc,CAAC,EAAE,CAAC,CAAC;QAElC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC;QACvD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC;QACtD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,MAAM,MAAM,GAAG,cAAc,CAAC;YAC5B,OAAO,EAAE,UAAU;YACnB,MAAM,EAAE,qBAAqB;YAC7B,QAAQ,EAAE,SAAS;SACpB,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACvC,MAAM,MAAM,GAAG,cAAc,CAAC;YAC5B,OAAO,EAAE,MAAM;YACf,MAAM,EAAE,WAAW;YACnB,QAAQ,EAAE,SAAS;SACpB,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACzC,MAAM,MAAM,GAAG,cAAc,CAAC;YAC5B,OAAO,EAAE,MAAM;YACf,MAAM,EAAE,qBAAqB;YAC7B,QAAQ,EAAE,SAAS;SACpB,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,MAAM,MAAM,GAAG,cAAc,CAAC;YAC5B,OAAO,EAAE,MAAM;YACf,MAAM,EAAE,qBAAqB;YAC7B,QAAQ,EAAE,SAAS;YACnB,aAAa,EAAE,CAAC,CAAC;SAClB,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,MAAM,MAAM,GAAG,cAAc,CAAC;YAC5B,OAAO,EAAE,MAAM;YACf,MAAM,EAAE,qBAAqB;YAC7B,QAAQ,EAAE,SAAS;YACnB,aAAa,EAAE,SAAS;SACzB,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;QAClC,MAAM,MAAM,GAAG,cAAc,CAAC;YAC5B,OAAO,EAAE,MAAM;YACf,MAAM,EAAE,yBAAyB;YACjC,QAAQ,EAAE,SAAS;SACpB,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,MAAM,MAAM,GAAG,cAAc,CAAC;YAC5B,OAAO,EAAE,MAAM;YACf,MAAM,EAAE,wBAAwB;YAChC,QAAQ,EAAE,SAAS;SACpB,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,MAAM,MAAM,GAAG,cAAc,CAAC;YAC5B,OAAO,EAAE,MAAM;YACf,MAAM,EAAE,wBAAwB;YAChC,QAAQ,EAAE,SAAS;SACpB,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,MAAM,MAAM,GAAG,cAAc,CAAC;YAC5B,OAAO,EAAE,MAAM;YACf,MAAM,EAAE,oBAAoB;YAC5B,QAAQ,EAAE,SAAS;SACpB,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,MAAM,MAAM,GAAG,cAAc,CAAC;YAC5B,OAAO,EAAE,MAAM;YACf,MAAM,EAAE,wBAAwB;YAChC,QAAQ,EAAE,SAAS;SACpB,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,MAAM,MAAM,GAAG,cAAc,CAAC;YAC5B,OAAO,EAAE,MAAM;YACf,MAAM,EAAE,qBAAqB;YAC7B,QAAQ,EAAE,SAAS;YACnB,SAAS,EAAE,EAAE,iBAAiB,EAAE,CAAC,EAAE;SACpC,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;QAC/D,MAAM,MAAM,GAAG,cAAc,CAAC;YAC5B,OAAO,EAAE,MAAM;YACf,MAAM,EAAE,qBAAqB;YAC7B,QAAQ,EAAE,SAAS;YACnB,SAAS,EAAE,EAAE,iBAAiB,EAAE,GAAG,EAAE;SACtC,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC5D,MAAM,MAAM,GAAG,cAAc,CAAC;YAC5B,OAAO,EAAE,MAAM;YACf,MAAM,EAAE,qBAAqB;YAC7B,QAAQ,EAAE,SAAS;YACnB,SAAS,EAAE,EAAE,iBAAiB,EAAE,CAAC,CAAC,EAAE;SACrC,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,MAAM,MAAM,GAAG,cAAc,CAAC;YAC5B,OAAO,EAAE,MAAM;YACf,MAAM,EAAE,qBAAqB;YAC7B,QAAQ,EAAE,SAAS;YACnB,SAAS,EAAE,EAAE,iBAAiB,EAAE,CAAC,EAAE;SACpC,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACtC,MAAM,MAAM,GAAG,cAAc,CAAC;YAC5B,OAAO,EAAE,MAAM;YACf,MAAM,EAAE,qBAAqB;YAC7B,QAAQ,EAAE,SAAS;YACnB,SAAS,EAAE,IAAiD;SAC7D,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,kCAAkC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7F,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,MAAM,MAAM,GAAG,cAAc,CAAC;YAC5B,OAAO,EAAE,MAAM;YACf,MAAM,EAAE,qBAAqB;YAC7B,QAAQ,EAAE,SAAS;YACnB,SAAS,EAAE,SAAsD;SAClE,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,kCAAkC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7F,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACvC,MAAM,MAAM,GAAG,cAAc,CAAC;YAC5B,OAAO,EAAE,MAAM;YACf,MAAM,EAAE,qBAAqB;YAC7B,QAAQ,EAAE,SAAS;YACnB,SAAS,EAAE,EAA+C;SAC3D,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,kCAAkC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7F,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IACrC,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,MAAM,MAAM,GAAG,qBAAqB,CAAC;YACnC,OAAO,EAAE,YAAY;YACrB,MAAM,EAAE,qBAAqB;YAC7B,QAAQ,EAAE,SAAS;SACpB,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACzD,MAAM,CAAC,GAAG,EAAE,CAAC,qBAAqB,CAAC;YACjC,OAAO,EAAE,EAAE;YACX,MAAM,EAAE,EAAE;YACV,QAAQ,EAAE,EAAE;SACb,CAAC,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,IAAI,CAAC;YACH,qBAAqB,CAAC;gBACpB,OAAO,EAAE,EAAE;gBACX,MAAM,EAAE,EAAE;gBACV,QAAQ,EAAE,EAAE;aACb,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAE,KAA0B,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,CAAC;QACrF,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=modules.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"modules.test.d.ts","sourceRoot":"","sources":["../src/modules.test.ts"],"names":[],"mappings":""}
@@ -1,161 +0,0 @@
1
- import { describe, it, expect } from 'vitest';
2
- import { getAvailableModules, getModuleSubcommands, isSubcommandSupported, getSupportedModules, throwUnsupportedSubcommand, } from './modules.js';
3
- import { ManifestMCPError, ManifestMCPErrorCode } from './types.js';
4
- describe('getAvailableModules', () => {
5
- it('should return query and tx modules', () => {
6
- const modules = getAvailableModules();
7
- expect(modules.queryModules).toBeDefined();
8
- expect(modules.txModules).toBeDefined();
9
- expect(modules.queryModules.length).toBeGreaterThan(0);
10
- expect(modules.txModules.length).toBeGreaterThan(0);
11
- });
12
- it('should include expected query modules', () => {
13
- const modules = getAvailableModules();
14
- const queryNames = modules.queryModules.map(m => m.name);
15
- expect(queryNames).toContain('bank');
16
- expect(queryNames).toContain('staking');
17
- expect(queryNames).toContain('distribution');
18
- expect(queryNames).toContain('gov');
19
- expect(queryNames).toContain('auth');
20
- expect(queryNames).toContain('billing');
21
- expect(queryNames).toContain('sku');
22
- expect(queryNames).toContain('group');
23
- });
24
- it('should include expected tx modules', () => {
25
- const modules = getAvailableModules();
26
- const txNames = modules.txModules.map(m => m.name);
27
- expect(txNames).toContain('bank');
28
- expect(txNames).toContain('staking');
29
- expect(txNames).toContain('distribution');
30
- expect(txNames).toContain('gov');
31
- expect(txNames).toContain('billing');
32
- expect(txNames).toContain('manifest');
33
- expect(txNames).toContain('sku');
34
- expect(txNames).toContain('group');
35
- });
36
- });
37
- describe('getModuleSubcommands', () => {
38
- it('should return subcommands for valid query module', () => {
39
- const subcommands = getModuleSubcommands('query', 'bank');
40
- expect(subcommands.length).toBeGreaterThan(0);
41
- expect(subcommands.some(s => s.name === 'balance')).toBe(true);
42
- expect(subcommands.some(s => s.name === 'balances')).toBe(true);
43
- });
44
- it('should return subcommands for valid tx module', () => {
45
- const subcommands = getModuleSubcommands('tx', 'bank');
46
- expect(subcommands.length).toBeGreaterThan(0);
47
- expect(subcommands.some(s => s.name === 'send')).toBe(true);
48
- });
49
- it('should throw ManifestMCPError for unknown module', () => {
50
- expect(() => getModuleSubcommands('query', 'unknown')).toThrow(ManifestMCPError);
51
- });
52
- it('should have UNKNOWN_MODULE error code', () => {
53
- try {
54
- getModuleSubcommands('query', 'unknown');
55
- }
56
- catch (error) {
57
- expect(error.code).toBe(ManifestMCPErrorCode.UNKNOWN_MODULE);
58
- }
59
- });
60
- it('should include aliases in subcommands', () => {
61
- const bankSubcommands = getModuleSubcommands('query', 'bank');
62
- expect(bankSubcommands.some(s => s.name === 'total')).toBe(true);
63
- const stakingSubcommands = getModuleSubcommands('tx', 'staking');
64
- expect(stakingSubcommands.some(s => s.name === 'undelegate')).toBe(true);
65
- });
66
- });
67
- describe('isSubcommandSupported', () => {
68
- it('should return true for supported query subcommands', () => {
69
- expect(isSubcommandSupported('query', 'bank', 'balance')).toBe(true);
70
- expect(isSubcommandSupported('query', 'staking', 'delegation')).toBe(true);
71
- });
72
- it('should return true for supported tx subcommands', () => {
73
- expect(isSubcommandSupported('tx', 'bank', 'send')).toBe(true);
74
- expect(isSubcommandSupported('tx', 'staking', 'delegate')).toBe(true);
75
- });
76
- it('should return false for unsupported subcommands', () => {
77
- expect(isSubcommandSupported('query', 'bank', 'unknown')).toBe(false);
78
- expect(isSubcommandSupported('tx', 'bank', 'unknown')).toBe(false);
79
- });
80
- it('should return false for unknown modules', () => {
81
- expect(isSubcommandSupported('query', 'unknown', 'balance')).toBe(false);
82
- expect(isSubcommandSupported('tx', 'unknown', 'send')).toBe(false);
83
- });
84
- it('should support aliases', () => {
85
- expect(isSubcommandSupported('query', 'bank', 'total')).toBe(true);
86
- expect(isSubcommandSupported('tx', 'staking', 'undelegate')).toBe(true);
87
- });
88
- });
89
- describe('getSupportedModules', () => {
90
- it('should return query and tx module maps', () => {
91
- const modules = getSupportedModules();
92
- expect(modules.query).toBeDefined();
93
- expect(modules.tx).toBeDefined();
94
- });
95
- it('should include subcommand arrays for each module', () => {
96
- const modules = getSupportedModules();
97
- expect(Array.isArray(modules.query.bank)).toBe(true);
98
- expect(modules.query.bank).toContain('balance');
99
- expect(modules.query.bank).toContain('balances');
100
- expect(Array.isArray(modules.tx.bank)).toBe(true);
101
- expect(modules.tx.bank).toContain('send');
102
- });
103
- });
104
- describe('throwUnsupportedSubcommand', () => {
105
- it('should throw ManifestMCPError for unsupported query subcommand', () => {
106
- expect(() => throwUnsupportedSubcommand('query', 'bank', 'unknown')).toThrow(ManifestMCPError);
107
- });
108
- it('should throw ManifestMCPError for unsupported tx subcommand', () => {
109
- expect(() => throwUnsupportedSubcommand('tx', 'bank', 'unknown')).toThrow(ManifestMCPError);
110
- });
111
- it('should use UNSUPPORTED_QUERY error code for queries', () => {
112
- try {
113
- throwUnsupportedSubcommand('query', 'bank', 'unknown');
114
- }
115
- catch (error) {
116
- expect(error.code).toBe(ManifestMCPErrorCode.UNSUPPORTED_QUERY);
117
- }
118
- });
119
- it('should use UNSUPPORTED_TX error code for transactions', () => {
120
- try {
121
- throwUnsupportedSubcommand('tx', 'bank', 'unknown');
122
- }
123
- catch (error) {
124
- expect(error.code).toBe(ManifestMCPErrorCode.UNSUPPORTED_TX);
125
- }
126
- });
127
- it('should include module and subcommand in error message', () => {
128
- try {
129
- throwUnsupportedSubcommand('query', 'staking', 'badcmd');
130
- }
131
- catch (error) {
132
- const message = error.message;
133
- expect(message).toContain('staking');
134
- expect(message).toContain('badcmd');
135
- expect(message).toContain('query');
136
- }
137
- });
138
- it('should include availableSubcommands in error details', () => {
139
- try {
140
- throwUnsupportedSubcommand('tx', 'bank', 'unknown');
141
- }
142
- catch (error) {
143
- const details = error.details;
144
- expect(details?.availableSubcommands).toBeDefined();
145
- expect(details?.availableSubcommands).toContain('send');
146
- expect(details?.availableSubcommands).toContain('multi-send');
147
- }
148
- });
149
- it('should include correct subcommands for each module', () => {
150
- try {
151
- throwUnsupportedSubcommand('query', 'gov', 'unknown');
152
- }
153
- catch (error) {
154
- const details = error.details;
155
- expect(details?.availableSubcommands).toContain('proposal');
156
- expect(details?.availableSubcommands).toContain('proposals');
157
- expect(details?.availableSubcommands).toContain('vote');
158
- }
159
- });
160
- });
161
- //# sourceMappingURL=modules.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"modules.test.js","sourceRoot":"","sources":["../src/modules.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=utils.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.test.d.ts","sourceRoot":"","sources":["../../src/queries/utils.test.ts"],"names":[],"mappings":""}