@manifest-network/manifest-mcp-browser 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (156) hide show
  1. package/.claude/settings.local.json +17 -0
  2. package/.github/workflows/ci.yml +37 -0
  3. package/.github/workflows/publish.yml +51 -0
  4. package/CLAUDE.md +104 -0
  5. package/LICENSE +21 -0
  6. package/README.md +298 -0
  7. package/dist/browser.d.ts.map +1 -0
  8. package/dist/browser.js.map +1 -0
  9. package/dist/client.d.ts +44 -0
  10. package/dist/client.d.ts.map +1 -0
  11. package/dist/client.js +131 -0
  12. package/dist/client.js.map +1 -0
  13. package/dist/config.d.ts +21 -0
  14. package/dist/config.d.ts.map +1 -0
  15. package/dist/config.js +98 -0
  16. package/dist/config.js.map +1 -0
  17. package/dist/config.test.d.ts +2 -0
  18. package/dist/config.test.d.ts.map +1 -0
  19. package/dist/config.test.js +123 -0
  20. package/dist/config.test.js.map +1 -0
  21. package/dist/cosmos.d.ts +11 -0
  22. package/dist/cosmos.d.ts.map +1 -0
  23. package/dist/cosmos.js +112 -0
  24. package/dist/cosmos.js.map +1 -0
  25. package/dist/index.d.ts +70 -0
  26. package/dist/index.d.ts.map +1 -0
  27. package/dist/index.js +382 -0
  28. package/dist/index.js.map +1 -0
  29. package/dist/modules.d.ts +30 -0
  30. package/dist/modules.d.ts.map +1 -0
  31. package/dist/modules.js +221 -0
  32. package/dist/modules.js.map +1 -0
  33. package/dist/modules.test.d.ts +2 -0
  34. package/dist/modules.test.d.ts.map +1 -0
  35. package/dist/modules.test.js +100 -0
  36. package/dist/modules.test.js.map +1 -0
  37. package/dist/queries/auth.d.ts +6 -0
  38. package/dist/queries/auth.d.ts.map +1 -0
  39. package/dist/queries/auth.js +93 -0
  40. package/dist/queries/auth.js.map +1 -0
  41. package/dist/queries/bank.d.ts +6 -0
  42. package/dist/queries/bank.d.ts.map +1 -0
  43. package/dist/queries/bank.js +83 -0
  44. package/dist/queries/bank.js.map +1 -0
  45. package/dist/queries/billing.d.ts +6 -0
  46. package/dist/queries/billing.d.ts.map +1 -0
  47. package/dist/queries/billing.js +115 -0
  48. package/dist/queries/billing.js.map +1 -0
  49. package/dist/queries/distribution.d.ts +6 -0
  50. package/dist/queries/distribution.d.ts.map +1 -0
  51. package/dist/queries/distribution.js +102 -0
  52. package/dist/queries/distribution.js.map +1 -0
  53. package/dist/queries/gov.d.ts +6 -0
  54. package/dist/queries/gov.d.ts.map +1 -0
  55. package/dist/queries/gov.js +92 -0
  56. package/dist/queries/gov.js.map +1 -0
  57. package/dist/queries/index.d.ts +8 -0
  58. package/dist/queries/index.d.ts.map +1 -0
  59. package/dist/queries/index.js +8 -0
  60. package/dist/queries/index.js.map +1 -0
  61. package/dist/queries/manifest.d.ts +10 -0
  62. package/dist/queries/manifest.d.ts.map +1 -0
  63. package/dist/queries/manifest.js +14 -0
  64. package/dist/queries/manifest.js.map +1 -0
  65. package/dist/queries/staking.d.ts +6 -0
  66. package/dist/queries/staking.d.ts.map +1 -0
  67. package/dist/queries/staking.js +141 -0
  68. package/dist/queries/staking.js.map +1 -0
  69. package/dist/queries/utils.d.ts +22 -0
  70. package/dist/queries/utils.d.ts.map +1 -0
  71. package/dist/queries/utils.js +32 -0
  72. package/dist/queries/utils.js.map +1 -0
  73. package/dist/queries/utils.test.d.ts +2 -0
  74. package/dist/queries/utils.test.d.ts.map +1 -0
  75. package/dist/queries/utils.test.js +57 -0
  76. package/dist/queries/utils.test.js.map +1 -0
  77. package/dist/transactions/bank.d.ts +7 -0
  78. package/dist/transactions/bank.d.ts.map +1 -0
  79. package/dist/transactions/bank.js +76 -0
  80. package/dist/transactions/bank.js.map +1 -0
  81. package/dist/transactions/billing.d.ts +7 -0
  82. package/dist/transactions/billing.d.ts.map +1 -0
  83. package/dist/transactions/billing.js +108 -0
  84. package/dist/transactions/billing.js.map +1 -0
  85. package/dist/transactions/distribution.d.ts +7 -0
  86. package/dist/transactions/distribution.d.ts.map +1 -0
  87. package/dist/transactions/distribution.js +63 -0
  88. package/dist/transactions/distribution.js.map +1 -0
  89. package/dist/transactions/gov.d.ts +7 -0
  90. package/dist/transactions/gov.d.ts.map +1 -0
  91. package/dist/transactions/gov.js +132 -0
  92. package/dist/transactions/gov.js.map +1 -0
  93. package/dist/transactions/index.d.ts +8 -0
  94. package/dist/transactions/index.d.ts.map +1 -0
  95. package/dist/transactions/index.js +8 -0
  96. package/dist/transactions/index.js.map +1 -0
  97. package/dist/transactions/manifest.d.ts +7 -0
  98. package/dist/transactions/manifest.d.ts.map +1 -0
  99. package/dist/transactions/manifest.js +58 -0
  100. package/dist/transactions/manifest.js.map +1 -0
  101. package/dist/transactions/staking.d.ts +7 -0
  102. package/dist/transactions/staking.d.ts.map +1 -0
  103. package/dist/transactions/staking.js +72 -0
  104. package/dist/transactions/staking.js.map +1 -0
  105. package/dist/transactions/utils.d.ts +40 -0
  106. package/dist/transactions/utils.d.ts.map +1 -0
  107. package/dist/transactions/utils.js +114 -0
  108. package/dist/transactions/utils.js.map +1 -0
  109. package/dist/transactions/utils.test.d.ts +2 -0
  110. package/dist/transactions/utils.test.d.ts.map +1 -0
  111. package/dist/transactions/utils.test.js +121 -0
  112. package/dist/transactions/utils.test.js.map +1 -0
  113. package/dist/types.d.ts +110 -0
  114. package/dist/types.d.ts.map +1 -0
  115. package/dist/types.js +55 -0
  116. package/dist/types.js.map +1 -0
  117. package/dist/wallet/index.d.ts +3 -0
  118. package/dist/wallet/index.d.ts.map +1 -0
  119. package/dist/wallet/index.js +2 -0
  120. package/dist/wallet/index.js.map +1 -0
  121. package/dist/wallet/keplr.d.ts.map +1 -0
  122. package/dist/wallet/keplr.js.map +1 -0
  123. package/dist/wallet/mnemonic.d.ts +40 -0
  124. package/dist/wallet/mnemonic.d.ts.map +1 -0
  125. package/dist/wallet/mnemonic.js +87 -0
  126. package/dist/wallet/mnemonic.js.map +1 -0
  127. package/package.json +40 -0
  128. package/src/client.ts +178 -0
  129. package/src/config.test.ts +143 -0
  130. package/src/config.ts +122 -0
  131. package/src/cosmos.ts +196 -0
  132. package/src/index.ts +484 -0
  133. package/src/modules.test.ts +127 -0
  134. package/src/modules.ts +278 -0
  135. package/src/queries/auth.ts +136 -0
  136. package/src/queries/bank.ts +117 -0
  137. package/src/queries/billing.ts +164 -0
  138. package/src/queries/distribution.ts +138 -0
  139. package/src/queries/gov.ts +128 -0
  140. package/src/queries/index.ts +7 -0
  141. package/src/queries/staking.ts +190 -0
  142. package/src/queries/utils.test.ts +61 -0
  143. package/src/queries/utils.ts +38 -0
  144. package/src/transactions/bank.ts +110 -0
  145. package/src/transactions/billing.ts +160 -0
  146. package/src/transactions/distribution.ts +98 -0
  147. package/src/transactions/gov.ts +185 -0
  148. package/src/transactions/index.ts +7 -0
  149. package/src/transactions/manifest.ts +89 -0
  150. package/src/transactions/staking.ts +107 -0
  151. package/src/transactions/utils.test.ts +129 -0
  152. package/src/transactions/utils.ts +156 -0
  153. package/src/types.ts +152 -0
  154. package/src/wallet/index.ts +2 -0
  155. package/src/wallet/mnemonic.ts +122 -0
  156. package/tsconfig.json +23 -0
package/dist/client.js ADDED
@@ -0,0 +1,131 @@
1
+ import { SigningStargateClient, GasPrice } from '@cosmjs/stargate';
2
+ import { cosmosProtoRegistry, cosmosAminoConverters, liftedinitProtoRegistry, liftedinitAminoConverters, strangeloveVenturesProtoRegistry, strangeloveVenturesAminoConverters, osmosisProtoRegistry, osmosisAminoConverters, liftedinit, } from '@manifest-network/manifestjs';
3
+ import { Registry } from '@cosmjs/proto-signing';
4
+ import { AminoTypes } from '@cosmjs/stargate';
5
+ import { ManifestMCPError, ManifestMCPErrorCode } from './types.js';
6
+ /** Default timeout for transaction broadcast (60 seconds) */
7
+ const DEFAULT_BROADCAST_TIMEOUT_MS = 60000;
8
+ /** Default polling interval for transaction confirmation (3 seconds) */
9
+ const DEFAULT_BROADCAST_POLL_INTERVAL_MS = 3000;
10
+ /**
11
+ * Get combined signing client options with all Manifest registries
12
+ */
13
+ function getSigningManifestClientOptions() {
14
+ const registry = new Registry([
15
+ ...cosmosProtoRegistry,
16
+ ...liftedinitProtoRegistry,
17
+ ...strangeloveVenturesProtoRegistry,
18
+ ...osmosisProtoRegistry,
19
+ ]);
20
+ const aminoTypes = new AminoTypes({
21
+ ...cosmosAminoConverters,
22
+ ...liftedinitAminoConverters,
23
+ ...strangeloveVenturesAminoConverters,
24
+ ...osmosisAminoConverters,
25
+ });
26
+ return { registry, aminoTypes };
27
+ }
28
+ /**
29
+ * Manages CosmJS client instances with lazy initialization and singleton pattern
30
+ */
31
+ export class CosmosClientManager {
32
+ constructor(config, walletProvider) {
33
+ this.queryClient = null;
34
+ this.signingClient = null;
35
+ this.config = config;
36
+ this.walletProvider = walletProvider;
37
+ }
38
+ /**
39
+ * Get or create a singleton instance for the given config
40
+ */
41
+ static getInstance(config, walletProvider) {
42
+ const key = `${config.chainId}:${config.rpcUrl}`;
43
+ let instance = CosmosClientManager.instances.get(key);
44
+ if (!instance) {
45
+ instance = new CosmosClientManager(config, walletProvider);
46
+ CosmosClientManager.instances.set(key, instance);
47
+ }
48
+ return instance;
49
+ }
50
+ /**
51
+ * Clear all cached instances (useful for testing or reconnection)
52
+ */
53
+ static clearInstances() {
54
+ CosmosClientManager.instances.clear();
55
+ }
56
+ /**
57
+ * Get the manifestjs RPC query client with all module extensions
58
+ */
59
+ async getQueryClient() {
60
+ if (!this.queryClient) {
61
+ try {
62
+ // Use liftedinit ClientFactory which includes cosmos + liftedinit modules
63
+ this.queryClient = await liftedinit.ClientFactory.createRPCQueryClient({
64
+ rpcEndpoint: this.config.rpcUrl,
65
+ });
66
+ }
67
+ catch (error) {
68
+ throw new ManifestMCPError(ManifestMCPErrorCode.RPC_CONNECTION_FAILED, `Failed to connect to RPC endpoint: ${error instanceof Error ? error.message : String(error)}`, { rpcUrl: this.config.rpcUrl });
69
+ }
70
+ }
71
+ return this.queryClient;
72
+ }
73
+ /**
74
+ * Get a signing client with all Manifest registries (for transactions)
75
+ */
76
+ async getSigningClient() {
77
+ if (!this.signingClient) {
78
+ try {
79
+ const signer = await this.walletProvider.getSigner();
80
+ const gasPrice = GasPrice.fromString(this.config.gasPrice);
81
+ const { registry, aminoTypes } = getSigningManifestClientOptions();
82
+ // Configure endpoint with HTTP timeout
83
+ const endpoint = {
84
+ url: this.config.rpcUrl,
85
+ headers: {},
86
+ };
87
+ // Note: Registry type from @cosmjs/proto-signing doesn't perfectly match
88
+ // SigningStargateClientOptions due to telescope-generated proto types.
89
+ // This is a known limitation with custom cosmos-sdk module registries.
90
+ this.signingClient = await SigningStargateClient.connectWithSigner(endpoint, signer, {
91
+ registry: registry,
92
+ aminoTypes,
93
+ gasPrice,
94
+ broadcastTimeoutMs: DEFAULT_BROADCAST_TIMEOUT_MS,
95
+ broadcastPollIntervalMs: DEFAULT_BROADCAST_POLL_INTERVAL_MS,
96
+ });
97
+ }
98
+ catch (error) {
99
+ if (error instanceof ManifestMCPError) {
100
+ throw error;
101
+ }
102
+ throw new ManifestMCPError(ManifestMCPErrorCode.RPC_CONNECTION_FAILED, `Failed to connect signing client: ${error instanceof Error ? error.message : String(error)}`, { rpcUrl: this.config.rpcUrl });
103
+ }
104
+ }
105
+ return this.signingClient;
106
+ }
107
+ /**
108
+ * Get the wallet address
109
+ */
110
+ async getAddress() {
111
+ return this.walletProvider.getAddress();
112
+ }
113
+ /**
114
+ * Get the configuration
115
+ */
116
+ getConfig() {
117
+ return this.config;
118
+ }
119
+ /**
120
+ * Disconnect all clients
121
+ */
122
+ disconnect() {
123
+ if (this.signingClient) {
124
+ this.signingClient.disconnect();
125
+ this.signingClient = null;
126
+ }
127
+ this.queryClient = null;
128
+ }
129
+ }
130
+ CosmosClientManager.instances = new Map();
131
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import { ManifestMCPConfig } from './types.js';
2
+ /**
3
+ * Create a configuration object with defaults applied
4
+ */
5
+ export declare function createConfig(input: ManifestMCPConfig): ManifestMCPConfig;
6
+ /**
7
+ * Validation result
8
+ */
9
+ export interface ValidationResult {
10
+ valid: boolean;
11
+ errors: string[];
12
+ }
13
+ /**
14
+ * Validate a configuration object
15
+ */
16
+ export declare function validateConfig(config: Partial<ManifestMCPConfig>): ValidationResult;
17
+ /**
18
+ * Create and validate a configuration, throwing on invalid config
19
+ */
20
+ export declare function createValidatedConfig(input: ManifestMCPConfig): ManifestMCPConfig;
21
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAA0C,MAAM,YAAY,CAAC;AAwCvF;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,iBAAiB,CAQxE;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,iBAAiB,CAAC,GAAG,gBAAgB,CAuCnF;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,iBAAiB,GAAG,iBAAiB,CAYjF"}
package/dist/config.js ADDED
@@ -0,0 +1,98 @@
1
+ import { ManifestMCPError, ManifestMCPErrorCode } from './types.js';
2
+ /**
3
+ * Default gas adjustment multiplier
4
+ */
5
+ const DEFAULT_GAS_ADJUSTMENT = 1.3;
6
+ /**
7
+ * Default address prefix for Manifest Network
8
+ */
9
+ const DEFAULT_ADDRESS_PREFIX = 'manifest';
10
+ /**
11
+ * Validate a URL string
12
+ */
13
+ function isValidUrl(url) {
14
+ try {
15
+ new URL(url);
16
+ return true;
17
+ }
18
+ catch {
19
+ return false;
20
+ }
21
+ }
22
+ /**
23
+ * Validate gas price format (e.g., "1.0umfx")
24
+ */
25
+ function isValidGasPrice(gasPrice) {
26
+ // Gas price should be a number followed by a denomination
27
+ return /^\d+(\.\d+)?[a-zA-Z]+$/.test(gasPrice);
28
+ }
29
+ /**
30
+ * Validate chain ID format
31
+ */
32
+ function isValidChainId(chainId) {
33
+ // Chain ID should be alphanumeric with hyphens
34
+ return /^[a-zA-Z0-9][\w-]*$/.test(chainId);
35
+ }
36
+ /**
37
+ * Create a configuration object with defaults applied
38
+ */
39
+ export function createConfig(input) {
40
+ return {
41
+ chainId: input.chainId,
42
+ rpcUrl: input.rpcUrl,
43
+ gasPrice: input.gasPrice,
44
+ gasAdjustment: input.gasAdjustment ?? DEFAULT_GAS_ADJUSTMENT,
45
+ addressPrefix: input.addressPrefix ?? DEFAULT_ADDRESS_PREFIX,
46
+ };
47
+ }
48
+ /**
49
+ * Validate a configuration object
50
+ */
51
+ export function validateConfig(config) {
52
+ const errors = [];
53
+ // Required fields
54
+ if (!config.chainId) {
55
+ errors.push('chainId is required');
56
+ }
57
+ else if (!isValidChainId(config.chainId)) {
58
+ errors.push('chainId must be alphanumeric with hyphens (e.g., "manifest-ledger-testnet")');
59
+ }
60
+ if (!config.rpcUrl) {
61
+ errors.push('rpcUrl is required');
62
+ }
63
+ else if (!isValidUrl(config.rpcUrl)) {
64
+ errors.push('rpcUrl must be a valid URL');
65
+ }
66
+ if (!config.gasPrice) {
67
+ errors.push('gasPrice is required');
68
+ }
69
+ else if (!isValidGasPrice(config.gasPrice)) {
70
+ errors.push('gasPrice must be a number followed by denomination (e.g., "1.0umfx")');
71
+ }
72
+ // Optional fields
73
+ if (config.gasAdjustment !== undefined) {
74
+ if (typeof config.gasAdjustment !== 'number' || config.gasAdjustment <= 0) {
75
+ errors.push('gasAdjustment must be a positive number');
76
+ }
77
+ }
78
+ if (config.addressPrefix !== undefined) {
79
+ if (!/^[a-z]+$/.test(config.addressPrefix)) {
80
+ errors.push('addressPrefix must be lowercase letters only');
81
+ }
82
+ }
83
+ return {
84
+ valid: errors.length === 0,
85
+ errors,
86
+ };
87
+ }
88
+ /**
89
+ * Create and validate a configuration, throwing on invalid config
90
+ */
91
+ export function createValidatedConfig(input) {
92
+ const validation = validateConfig(input);
93
+ if (!validation.valid) {
94
+ throw new ManifestMCPError(ManifestMCPErrorCode.INVALID_CONFIG, `Invalid configuration: ${validation.errors.join(', ')}`, { errors: validation.errors });
95
+ }
96
+ return createConfig(input);
97
+ }
98
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=config.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.test.d.ts","sourceRoot":"","sources":["../src/config.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,123 @@
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
+ });
29
+ describe('validateConfig', () => {
30
+ it('should return valid for correct config', () => {
31
+ const result = validateConfig({
32
+ chainId: 'manifest-testnet',
33
+ rpcUrl: 'https://rpc.example.com',
34
+ gasPrice: '1.0umfx',
35
+ });
36
+ expect(result.valid).toBe(true);
37
+ expect(result.errors).toHaveLength(0);
38
+ });
39
+ it('should detect missing required fields', () => {
40
+ const result = validateConfig({});
41
+ expect(result.valid).toBe(false);
42
+ expect(result.errors).toContain('chainId is required');
43
+ expect(result.errors).toContain('rpcUrl is required');
44
+ expect(result.errors).toContain('gasPrice is required');
45
+ });
46
+ it('should validate chainId format', () => {
47
+ const result = validateConfig({
48
+ chainId: '-invalid',
49
+ rpcUrl: 'https://example.com',
50
+ gasPrice: '1.0umfx',
51
+ });
52
+ expect(result.valid).toBe(false);
53
+ expect(result.errors.some(e => e.includes('chainId'))).toBe(true);
54
+ });
55
+ it('should validate rpcUrl format', () => {
56
+ const result = validateConfig({
57
+ chainId: 'test',
58
+ rpcUrl: 'not-a-url',
59
+ gasPrice: '1.0umfx',
60
+ });
61
+ expect(result.valid).toBe(false);
62
+ expect(result.errors.some(e => e.includes('rpcUrl'))).toBe(true);
63
+ });
64
+ it('should validate gasPrice format', () => {
65
+ const result = validateConfig({
66
+ chainId: 'test',
67
+ rpcUrl: 'https://example.com',
68
+ gasPrice: 'invalid',
69
+ });
70
+ expect(result.valid).toBe(false);
71
+ expect(result.errors.some(e => e.includes('gasPrice'))).toBe(true);
72
+ });
73
+ it('should validate optional gasAdjustment', () => {
74
+ const result = validateConfig({
75
+ chainId: 'test',
76
+ rpcUrl: 'https://example.com',
77
+ gasPrice: '1.0umfx',
78
+ gasAdjustment: -1,
79
+ });
80
+ expect(result.valid).toBe(false);
81
+ expect(result.errors.some(e => e.includes('gasAdjustment'))).toBe(true);
82
+ });
83
+ it('should validate optional addressPrefix', () => {
84
+ const result = validateConfig({
85
+ chainId: 'test',
86
+ rpcUrl: 'https://example.com',
87
+ gasPrice: '1.0umfx',
88
+ addressPrefix: 'INVALID',
89
+ });
90
+ expect(result.valid).toBe(false);
91
+ expect(result.errors.some(e => e.includes('addressPrefix'))).toBe(true);
92
+ });
93
+ });
94
+ describe('createValidatedConfig', () => {
95
+ it('should return config for valid input', () => {
96
+ const config = createValidatedConfig({
97
+ chainId: 'test-chain',
98
+ rpcUrl: 'https://example.com',
99
+ gasPrice: '1.0umfx',
100
+ });
101
+ expect(config.chainId).toBe('test-chain');
102
+ });
103
+ it('should throw ManifestMCPError for invalid input', () => {
104
+ expect(() => createValidatedConfig({
105
+ chainId: '',
106
+ rpcUrl: '',
107
+ gasPrice: '',
108
+ })).toThrow(ManifestMCPError);
109
+ });
110
+ it('should have INVALID_CONFIG error code', () => {
111
+ try {
112
+ createValidatedConfig({
113
+ chainId: '',
114
+ rpcUrl: '',
115
+ gasPrice: '',
116
+ });
117
+ }
118
+ catch (error) {
119
+ expect(error.code).toBe(ManifestMCPErrorCode.INVALID_CONFIG);
120
+ }
121
+ });
122
+ });
123
+ //# sourceMappingURL=config.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.test.js","sourceRoot":"","sources":["../src/config.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { CosmosClientManager } from './client.js';
2
+ import { CosmosQueryResult, CosmosTxResult } from './types.js';
3
+ /**
4
+ * Execute a Cosmos query via manifestjs RPC client
5
+ */
6
+ export declare function cosmosQuery(clientManager: CosmosClientManager, module: string, subcommand: string, args?: string[]): Promise<CosmosQueryResult>;
7
+ /**
8
+ * Execute a Cosmos transaction via manifestjs signing client
9
+ */
10
+ export declare function cosmosTx(clientManager: CosmosClientManager, module: string, subcommand: string, args?: string[], waitForConfirmation?: boolean): Promise<CosmosTxResult>;
11
+ //# sourceMappingURL=cosmos.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cosmos.d.ts","sourceRoot":"","sources":["../src/cosmos.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAA0C,MAAM,YAAY,CAAC;AAoCvG;;GAEG;AACH,wBAAsB,WAAW,CAC/B,aAAa,EAAE,mBAAmB,EAClC,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,IAAI,GAAE,MAAM,EAAO,GAClB,OAAO,CAAC,iBAAiB,CAAC,CAkD5B;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAC5B,aAAa,EAAE,mBAAmB,EAClC,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,IAAI,GAAE,MAAM,EAAO,EACnB,mBAAmB,GAAE,OAAe,GACnC,OAAO,CAAC,cAAc,CAAC,CAyFzB"}
package/dist/cosmos.js ADDED
@@ -0,0 +1,112 @@
1
+ import { ManifestMCPError, ManifestMCPErrorCode } from './types.js';
2
+ import { getSupportedModules } from './modules.js';
3
+ import { routeBankQuery } from './queries/bank.js';
4
+ import { routeStakingQuery } from './queries/staking.js';
5
+ import { routeDistributionQuery } from './queries/distribution.js';
6
+ import { routeGovQuery } from './queries/gov.js';
7
+ import { routeAuthQuery } from './queries/auth.js';
8
+ import { routeBillingQuery } from './queries/billing.js';
9
+ import { routeBankTransaction } from './transactions/bank.js';
10
+ import { routeStakingTransaction } from './transactions/staking.js';
11
+ import { routeDistributionTransaction } from './transactions/distribution.js';
12
+ import { routeGovTransaction } from './transactions/gov.js';
13
+ import { routeBillingTransaction } from './transactions/billing.js';
14
+ import { routeManifestTransaction } from './transactions/manifest.js';
15
+ // Validation pattern for module/subcommand names (alphanumeric, hyphens, underscores)
16
+ // First character must not be a hyphen to prevent potential issues
17
+ const VALID_NAME_PATTERN = /^[a-zA-Z0-9_][a-zA-Z0-9_-]*$/;
18
+ /**
19
+ * Validate that a string is safe for use as a module or subcommand name
20
+ */
21
+ function validateName(name, field) {
22
+ if (!name || !VALID_NAME_PATTERN.test(name)) {
23
+ throw new ManifestMCPError(ManifestMCPErrorCode.QUERY_FAILED, `Invalid ${field}: "${name}". Only alphanumeric characters, hyphens, and underscores are allowed.`);
24
+ }
25
+ }
26
+ // Get module lists from the authoritative registry
27
+ const supportedModules = getSupportedModules();
28
+ const QUERY_MODULES = Object.keys(supportedModules.query);
29
+ const TX_MODULES = Object.keys(supportedModules.tx);
30
+ /**
31
+ * Execute a Cosmos query via manifestjs RPC client
32
+ */
33
+ export async function cosmosQuery(clientManager, module, subcommand, args = []) {
34
+ validateName(module, 'module');
35
+ validateName(subcommand, 'subcommand');
36
+ const queryClient = await clientManager.getQueryClient();
37
+ let result;
38
+ try {
39
+ switch (module) {
40
+ case 'bank':
41
+ result = await routeBankQuery(queryClient, subcommand, args);
42
+ break;
43
+ case 'staking':
44
+ result = await routeStakingQuery(queryClient, subcommand, args);
45
+ break;
46
+ case 'distribution':
47
+ result = await routeDistributionQuery(queryClient, subcommand, args);
48
+ break;
49
+ case 'gov':
50
+ result = await routeGovQuery(queryClient, subcommand, args);
51
+ break;
52
+ case 'auth':
53
+ result = await routeAuthQuery(queryClient, subcommand, args);
54
+ break;
55
+ case 'billing':
56
+ result = await routeBillingQuery(queryClient, subcommand, args);
57
+ break;
58
+ default:
59
+ throw new ManifestMCPError(ManifestMCPErrorCode.UNKNOWN_MODULE, `Unknown query module: ${module}`, { availableModules: QUERY_MODULES });
60
+ }
61
+ return {
62
+ module,
63
+ subcommand,
64
+ result,
65
+ };
66
+ }
67
+ catch (error) {
68
+ if (error instanceof ManifestMCPError) {
69
+ throw error;
70
+ }
71
+ throw new ManifestMCPError(ManifestMCPErrorCode.QUERY_FAILED, `Query ${module} ${subcommand} failed: ${error instanceof Error ? error.message : String(error)}`);
72
+ }
73
+ }
74
+ /**
75
+ * Execute a Cosmos transaction via manifestjs signing client
76
+ */
77
+ export async function cosmosTx(clientManager, module, subcommand, args = [], waitForConfirmation = false) {
78
+ validateName(module, 'module');
79
+ validateName(subcommand, 'subcommand');
80
+ const signingClient = await clientManager.getSigningClient();
81
+ const senderAddress = await clientManager.getAddress();
82
+ const config = clientManager.getConfig();
83
+ try {
84
+ switch (module) {
85
+ case 'bank':
86
+ return await routeBankTransaction(signingClient, senderAddress, subcommand, args, config, waitForConfirmation);
87
+ case 'staking':
88
+ return await routeStakingTransaction(signingClient, senderAddress, subcommand, args, config, waitForConfirmation);
89
+ case 'distribution':
90
+ return await routeDistributionTransaction(signingClient, senderAddress, subcommand, args, config, waitForConfirmation);
91
+ case 'gov':
92
+ return await routeGovTransaction(signingClient, senderAddress, subcommand, args, config, waitForConfirmation);
93
+ case 'billing':
94
+ return await routeBillingTransaction(signingClient, senderAddress, subcommand, args, config, waitForConfirmation);
95
+ case 'manifest':
96
+ return await routeManifestTransaction(signingClient, senderAddress, subcommand, args, config, waitForConfirmation);
97
+ default:
98
+ throw new ManifestMCPError(ManifestMCPErrorCode.UNKNOWN_MODULE, `Unknown tx module: ${module}`, { availableModules: TX_MODULES });
99
+ }
100
+ }
101
+ catch (error) {
102
+ if (error instanceof ManifestMCPError) {
103
+ // Re-throw with enriched context if not already present
104
+ if (!error.details?.module) {
105
+ throw new ManifestMCPError(error.code, error.message, { ...error.details, module, subcommand, args });
106
+ }
107
+ throw error;
108
+ }
109
+ throw new ManifestMCPError(ManifestMCPErrorCode.TX_FAILED, `Tx ${module} ${subcommand} failed: ${error instanceof Error ? error.message : String(error)}`, { module, subcommand, args });
110
+ }
111
+ }
112
+ //# sourceMappingURL=cosmos.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cosmos.js","sourceRoot":"","sources":["../src/cosmos.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,70 @@
1
+ import { Server } from '@modelcontextprotocol/sdk/server/index.js';
2
+ import { CosmosClientManager } from './client.js';
3
+ import { ManifestMCPConfig, WalletProvider } from './types.js';
4
+ export * from './types.js';
5
+ export { createConfig, createValidatedConfig, validateConfig } from './config.js';
6
+ export { CosmosClientManager } from './client.js';
7
+ export { cosmosQuery, cosmosTx } from './cosmos.js';
8
+ export { getAvailableModules, getModuleSubcommands, getSubcommandUsage, getSupportedModules, isSubcommandSupported } from './modules.js';
9
+ export { MnemonicWalletProvider } from './wallet/index.js';
10
+ /**
11
+ * Options for creating a ManifestMCPServer
12
+ */
13
+ export interface ManifestMCPServerOptions {
14
+ config: ManifestMCPConfig;
15
+ walletProvider: WalletProvider;
16
+ }
17
+ /**
18
+ * ManifestMCPServer class for browser-compatible MCP server
19
+ */
20
+ export declare class ManifestMCPServer {
21
+ private server;
22
+ private clientManager;
23
+ private walletProvider;
24
+ private config;
25
+ constructor(options: ManifestMCPServerOptions);
26
+ /**
27
+ * Set up the MCP request handlers
28
+ */
29
+ private setupHandlers;
30
+ /**
31
+ * Handle a tool call
32
+ */
33
+ private handleToolCall;
34
+ /**
35
+ * Get the underlying MCP server instance
36
+ */
37
+ getServer(): Server;
38
+ /**
39
+ * Get the client manager
40
+ */
41
+ getClientManager(): CosmosClientManager;
42
+ /**
43
+ * Disconnect and clean up resources
44
+ */
45
+ disconnect(): void;
46
+ }
47
+ /**
48
+ * Create a ManifestMCPServer with mnemonic wallet (for testing or non-interactive use)
49
+ *
50
+ * @example
51
+ * ```typescript
52
+ * import { createMnemonicServer } from '@manifest-network/manifest-mcp-browser';
53
+ *
54
+ * const server = await createMnemonicServer({
55
+ * chainId: 'manifest-ledger-testnet',
56
+ * rpcUrl: 'https://nodes.chandrastation.com/rpc/manifest/',
57
+ * gasPrice: '1.0umfx',
58
+ * mnemonic: 'your twelve word mnemonic phrase here...',
59
+ * });
60
+ * ```
61
+ */
62
+ export declare function createMnemonicServer(config: {
63
+ chainId: string;
64
+ rpcUrl: string;
65
+ gasPrice: string;
66
+ gasAdjustment?: number;
67
+ addressPrefix?: string;
68
+ mnemonic: string;
69
+ }): Promise<ManifestMCPServer>;
70
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAMnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAGlD,OAAO,EACL,iBAAiB,EACjB,cAAc,EAIf,MAAM,YAAY,CAAC;AA8DpB,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClF,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACzI,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAwG3D;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,iBAAiB,CAAC;IAC1B,cAAc,EAAE,cAAc,CAAC;CAChC;AAED;;GAEG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,aAAa,CAAsB;IAC3C,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,MAAM,CAAoB;gBAEtB,OAAO,EAAE,wBAAwB;IAqB7C;;OAEG;IACH,OAAO,CAAC,aAAa;IA8CrB;;OAEG;YACW,cAAc;IAwJ5B;;OAEG;IACH,SAAS,IAAI,MAAM;IAInB;;OAEG;IACH,gBAAgB,IAAI,mBAAmB;IAIvC;;OAEG;IACH,UAAU,IAAI,IAAI;CAGnB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,oBAAoB,CAAC,MAAM,EAAE;IACjD,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;CAClB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAW7B"}