@manifest-network/manifest-mcp-browser 0.1.1 → 0.1.5

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 (121) hide show
  1. package/.github/workflows/publish.yml +4 -2
  2. package/CLAUDE.md +7 -3
  3. package/README.md +1 -1
  4. package/dist/client.d.ts +6 -1
  5. package/dist/client.d.ts.map +1 -1
  6. package/dist/client.js +77 -21
  7. package/dist/client.js.map +1 -1
  8. package/dist/cosmos.d.ts.map +1 -1
  9. package/dist/cosmos.js +7 -57
  10. package/dist/cosmos.js.map +1 -1
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/index.js +16 -25
  13. package/dist/index.js.map +1 -1
  14. package/dist/modules.d.ts +30 -1
  15. package/dist/modules.d.ts.map +1 -1
  16. package/dist/modules.js +65 -1
  17. package/dist/modules.js.map +1 -1
  18. package/dist/modules.test.js +58 -1
  19. package/dist/modules.test.js.map +1 -1
  20. package/dist/queries/auth.d.ts +7 -1
  21. package/dist/queries/auth.d.ts.map +1 -1
  22. package/dist/queries/auth.js +18 -45
  23. package/dist/queries/auth.js.map +1 -1
  24. package/dist/queries/bank.d.ts +7 -1
  25. package/dist/queries/bank.d.ts.map +1 -1
  26. package/dist/queries/bank.js +24 -38
  27. package/dist/queries/bank.js.map +1 -1
  28. package/dist/queries/billing.d.ts +7 -1
  29. package/dist/queries/billing.d.ts.map +1 -1
  30. package/dist/queries/billing.js +28 -54
  31. package/dist/queries/billing.js.map +1 -1
  32. package/dist/queries/distribution.d.ts +7 -1
  33. package/dist/queries/distribution.d.ts.map +1 -1
  34. package/dist/queries/distribution.js +18 -36
  35. package/dist/queries/distribution.js.map +1 -1
  36. package/dist/queries/gov.d.ts +7 -1
  37. package/dist/queries/gov.d.ts.map +1 -1
  38. package/dist/queries/gov.js +24 -41
  39. package/dist/queries/gov.js.map +1 -1
  40. package/dist/queries/index.d.ts +2 -1
  41. package/dist/queries/index.d.ts.map +1 -1
  42. package/dist/queries/index.js +1 -1
  43. package/dist/queries/index.js.map +1 -1
  44. package/dist/queries/staking.d.ts +7 -1
  45. package/dist/queries/staking.d.ts.map +1 -1
  46. package/dist/queries/staking.js +36 -59
  47. package/dist/queries/staking.js.map +1 -1
  48. package/dist/queries/utils.d.ts +42 -10
  49. package/dist/queries/utils.d.ts.map +1 -1
  50. package/dist/queries/utils.js +64 -12
  51. package/dist/queries/utils.js.map +1 -1
  52. package/dist/queries/utils.test.js +68 -8
  53. package/dist/queries/utils.test.js.map +1 -1
  54. package/dist/transactions/bank.d.ts +2 -2
  55. package/dist/transactions/bank.d.ts.map +1 -1
  56. package/dist/transactions/bank.js +9 -18
  57. package/dist/transactions/bank.js.map +1 -1
  58. package/dist/transactions/billing.d.ts +2 -2
  59. package/dist/transactions/billing.d.ts.map +1 -1
  60. package/dist/transactions/billing.js +29 -86
  61. package/dist/transactions/billing.js.map +1 -1
  62. package/dist/transactions/distribution.d.ts +2 -2
  63. package/dist/transactions/distribution.d.ts.map +1 -1
  64. package/dist/transactions/distribution.js +7 -13
  65. package/dist/transactions/distribution.js.map +1 -1
  66. package/dist/transactions/gov.d.ts +2 -2
  67. package/dist/transactions/gov.d.ts.map +1 -1
  68. package/dist/transactions/gov.js +29 -20
  69. package/dist/transactions/gov.js.map +1 -1
  70. package/dist/transactions/index.d.ts +1 -1
  71. package/dist/transactions/index.d.ts.map +1 -1
  72. package/dist/transactions/index.js +1 -1
  73. package/dist/transactions/index.js.map +1 -1
  74. package/dist/transactions/manifest.d.ts +2 -2
  75. package/dist/transactions/manifest.d.ts.map +1 -1
  76. package/dist/transactions/manifest.js +7 -14
  77. package/dist/transactions/manifest.js.map +1 -1
  78. package/dist/transactions/staking.d.ts +2 -2
  79. package/dist/transactions/staking.d.ts.map +1 -1
  80. package/dist/transactions/staking.js +7 -13
  81. package/dist/transactions/staking.js.map +1 -1
  82. package/dist/transactions/utils.d.ts +63 -1
  83. package/dist/transactions/utils.d.ts.map +1 -1
  84. package/dist/transactions/utils.js +121 -2
  85. package/dist/transactions/utils.js.map +1 -1
  86. package/dist/transactions/utils.test.js +351 -1
  87. package/dist/transactions/utils.test.js.map +1 -1
  88. package/dist/types.d.ts +203 -8
  89. package/dist/types.d.ts.map +1 -1
  90. package/dist/types.js.map +1 -1
  91. package/dist/wallet/mnemonic.d.ts +1 -0
  92. package/dist/wallet/mnemonic.d.ts.map +1 -1
  93. package/dist/wallet/mnemonic.js +34 -13
  94. package/dist/wallet/mnemonic.js.map +1 -1
  95. package/package.json +5 -1
  96. package/src/client.ts +84 -21
  97. package/src/cosmos.ts +13 -109
  98. package/src/index.ts +17 -23
  99. package/src/modules.test.ts +60 -0
  100. package/src/modules.ts +122 -5
  101. package/src/queries/auth.ts +35 -74
  102. package/src/queries/bank.ts +40 -58
  103. package/src/queries/billing.ts +46 -86
  104. package/src/queries/distribution.ts +35 -59
  105. package/src/queries/gov.ts +40 -64
  106. package/src/queries/index.ts +10 -1
  107. package/src/queries/staking.ts +55 -91
  108. package/src/queries/utils.test.ts +103 -8
  109. package/src/queries/utils.ts +92 -12
  110. package/src/transactions/bank.ts +9 -33
  111. package/src/transactions/billing.ts +30 -137
  112. package/src/transactions/distribution.ts +7 -29
  113. package/src/transactions/gov.ts +33 -37
  114. package/src/transactions/index.ts +1 -1
  115. package/src/transactions/manifest.ts +7 -29
  116. package/src/transactions/staking.ts +7 -29
  117. package/src/transactions/utils.test.ts +390 -1
  118. package/src/transactions/utils.ts +191 -2
  119. package/src/types.ts +318 -9
  120. package/src/wallet/mnemonic.ts +41 -17
  121. package/.claude/settings.local.json +0 -20
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAsFA;;GAEG;AACH,MAAM,CAAN,IAAY,oBAkCX;AAlCD,WAAY,oBAAoB;IAC9B,uBAAuB;IACvB,yDAAiC,CAAA;IACjC,yDAAiC,CAAA;IAEjC,gBAAgB;IAChB,qEAA6C,CAAA;IAC7C,6EAAqD,CAAA;IACrD,mEAA2C,CAAA;IAC3C,6DAAqC,CAAA;IAErC,gBAAgB;IAChB,yEAAiD,CAAA;IACjD,uEAA+C,CAAA;IAE/C,eAAe;IACf,qDAA6B,CAAA;IAC7B,+DAAuC,CAAA;IACvC,2DAAmC,CAAA;IAEnC,qBAAqB;IACrB,+CAAuB,CAAA;IACvB,qEAA6C,CAAA;IAC7C,mEAA2C,CAAA;IAC3C,2EAAmD,CAAA;IACnD,yDAAiC,CAAA;IACjC,iEAAyC,CAAA;IAEzC,gBAAgB;IAChB,yDAAiC,CAAA;IACjC,iEAAyC,CAAA;IAEzC,iBAAiB;IACjB,uDAA+B,CAAA;AACjC,CAAC,EAlCW,oBAAoB,KAApB,oBAAoB,QAkC/B;AAED;;GAEG;AACH,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IAIzC,YACE,IAA0B,EAC1B,OAAe,EACf,OAAiC;QAEjC,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;QAC/B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QAEvB,sDAAsD;QACtD,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,gBAAgB,CAAC,SAAS,CAAC,CAAC;IAC1D,CAAC;IAED,MAAM;QACJ,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,OAAO,EAAE,IAAI,CAAC,OAAO;SACtB,CAAC;IACJ,CAAC;CACF"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAiFA;;GAEG;AACH,MAAM,CAAN,IAAY,oBAkCX;AAlCD,WAAY,oBAAoB;IAC9B,uBAAuB;IACvB,yDAAiC,CAAA;IACjC,yDAAiC,CAAA;IAEjC,gBAAgB;IAChB,qEAA6C,CAAA;IAC7C,6EAAqD,CAAA;IACrD,mEAA2C,CAAA;IAC3C,6DAAqC,CAAA;IAErC,gBAAgB;IAChB,yEAAiD,CAAA;IACjD,uEAA+C,CAAA;IAE/C,eAAe;IACf,qDAA6B,CAAA;IAC7B,+DAAuC,CAAA;IACvC,2DAAmC,CAAA;IAEnC,qBAAqB;IACrB,+CAAuB,CAAA;IACvB,qEAA6C,CAAA;IAC7C,mEAA2C,CAAA;IAC3C,2EAAmD,CAAA;IACnD,yDAAiC,CAAA;IACjC,iEAAyC,CAAA;IAEzC,gBAAgB;IAChB,yDAAiC,CAAA;IACjC,iEAAyC,CAAA;IAEzC,iBAAiB;IACjB,uDAA+B,CAAA;AACjC,CAAC,EAlCW,oBAAoB,KAApB,oBAAoB,QAkC/B;AAED;;GAEG;AACH,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IAIzC,YACE,IAA0B,EAC1B,OAAe,EACf,OAAiC;QAEjC,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;QAC/B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QAEvB,sDAAsD;QACtD,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,gBAAgB,CAAC,SAAS,CAAC,CAAC;IAC1D,CAAC;IAED,MAAM;QACJ,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,OAAO,EAAE,IAAI,CAAC,OAAO;SACtB,CAAC;IACJ,CAAC;CACF"}
@@ -12,6 +12,7 @@ export declare class MnemonicWalletProvider implements WalletProvider {
12
12
  private wallet;
13
13
  private address;
14
14
  private disconnected;
15
+ private initPromise;
15
16
  constructor(config: ManifestMCPConfig, mnemonic: string);
16
17
  /**
17
18
  * Initialize the wallet from the mnemonic
@@ -1 +1 @@
1
- {"version":3,"file":"mnemonic.d.ts","sourceRoot":"","sources":["../../src/wallet/mnemonic.ts"],"names":[],"mappings":"AAAA,OAAO,EAA2B,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC/E,OAAO,EAAE,cAAc,EAA0C,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAExG;;;;;GAKG;AACH,qBAAa,sBAAuB,YAAW,cAAc;IAC3D,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,QAAQ,CAAgB;IAChC,OAAO,CAAC,MAAM,CAAwC;IACtD,OAAO,CAAC,OAAO,CAAuB;IACtC,OAAO,CAAC,YAAY,CAAkB;gBAE1B,MAAM,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM;IAKvD;;OAEG;YACW,UAAU;IA2CxB;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAI9B;;;;;OAKG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAUjC;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC;IAanC;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,aAAa,CAAC;CAY1C"}
1
+ {"version":3,"file":"mnemonic.d.ts","sourceRoot":"","sources":["../../src/wallet/mnemonic.ts"],"names":[],"mappings":"AAAA,OAAO,EAA2B,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC/E,OAAO,EAAE,cAAc,EAA0C,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAExG;;;;;GAKG;AACH,qBAAa,sBAAuB,YAAW,cAAc;IAC3D,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,QAAQ,CAAgB;IAChC,OAAO,CAAC,MAAM,CAAwC;IACtD,OAAO,CAAC,OAAO,CAAuB;IACtC,OAAO,CAAC,YAAY,CAAkB;IAGtC,OAAO,CAAC,WAAW,CAA8B;gBAErC,MAAM,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM;IAKvD;;OAEG;YACW,UAAU;IA+DxB;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAI9B;;;;;OAKG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAWjC;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC;IAanC;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,aAAa,CAAC;CAY1C"}
@@ -11,6 +11,8 @@ export class MnemonicWalletProvider {
11
11
  this.wallet = null;
12
12
  this.address = null;
13
13
  this.disconnected = false;
14
+ // Promise to prevent concurrent wallet initialization (lazy init race condition)
15
+ this.initPromise = null;
14
16
  this.config = config;
15
17
  this.mnemonic = mnemonic;
16
18
  }
@@ -21,26 +23,44 @@ export class MnemonicWalletProvider {
21
23
  if (this.disconnected) {
22
24
  throw new ManifestMCPError(ManifestMCPErrorCode.WALLET_NOT_CONNECTED, 'Wallet has been disconnected and cannot be reconnected. Create a new MnemonicWalletProvider instance.');
23
25
  }
26
+ // Return if already initialized
24
27
  if (this.wallet) {
25
28
  return;
26
29
  }
30
+ // If initialization is already in progress, wait for it
31
+ if (this.initPromise) {
32
+ return this.initPromise;
33
+ }
27
34
  if (!this.mnemonic) {
28
35
  throw new ManifestMCPError(ManifestMCPErrorCode.WALLET_NOT_CONNECTED, 'Mnemonic has been cleared. Create a new MnemonicWalletProvider instance.');
29
36
  }
30
- const prefix = this.config.addressPrefix ?? 'manifest';
31
- try {
32
- this.wallet = await DirectSecp256k1HdWallet.fromMnemonic(this.mnemonic, {
33
- prefix,
34
- });
35
- const accounts = await this.wallet.getAccounts();
36
- if (accounts.length === 0) {
37
- throw new ManifestMCPError(ManifestMCPErrorCode.INVALID_MNEMONIC, 'No accounts derived from mnemonic');
37
+ // Start initialization and cache the promise to prevent concurrent init
38
+ this.initPromise = (async () => {
39
+ const prefix = this.config.addressPrefix ?? 'manifest';
40
+ try {
41
+ this.wallet = await DirectSecp256k1HdWallet.fromMnemonic(this.mnemonic, {
42
+ prefix,
43
+ });
44
+ const accounts = await this.wallet.getAccounts();
45
+ if (accounts.length === 0) {
46
+ throw new ManifestMCPError(ManifestMCPErrorCode.INVALID_MNEMONIC, 'No accounts derived from mnemonic');
47
+ }
48
+ this.address = accounts[0].address;
49
+ // Clear promise after successful init - wallet check will short-circuit future calls
50
+ this.initPromise = null;
38
51
  }
39
- this.address = accounts[0].address;
40
- }
41
- catch (error) {
42
- throw new ManifestMCPError(ManifestMCPErrorCode.INVALID_MNEMONIC, `Failed to create wallet from mnemonic: ${error instanceof Error ? error.message : String(error)}`);
43
- }
52
+ catch (error) {
53
+ // Clear state on failure so retry is possible
54
+ this.initPromise = null;
55
+ this.wallet = null;
56
+ this.address = null;
57
+ if (error instanceof ManifestMCPError) {
58
+ throw error;
59
+ }
60
+ throw new ManifestMCPError(ManifestMCPErrorCode.INVALID_MNEMONIC, `Failed to create wallet from mnemonic: ${error instanceof Error ? error.message : String(error)}`);
61
+ }
62
+ })();
63
+ return this.initPromise;
44
64
  }
45
65
  /**
46
66
  * Connect (initialize) the wallet
@@ -61,6 +81,7 @@ export class MnemonicWalletProvider {
61
81
  this.mnemonic = null;
62
82
  this.wallet = null;
63
83
  this.address = null;
84
+ this.initPromise = null;
64
85
  this.disconnected = true;
65
86
  }
66
87
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"mnemonic.js","sourceRoot":"","sources":["../../src/wallet/mnemonic.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mnemonic.js","sourceRoot":"","sources":["../../src/wallet/mnemonic.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@manifest-network/manifest-mcp-browser",
3
- "version": "0.1.1",
3
+ "version": "0.1.5",
4
4
  "description": "Browser-compatible MCP server for Cosmos SDK blockchain interactions with Manifest Network using CosmJS",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -26,6 +26,10 @@
26
26
  "manifest",
27
27
  "browser"
28
28
  ],
29
+ "repository": {
30
+ "type": "git",
31
+ "url": "https://github.com/manifest-network/manifest-mcp-browser"
32
+ },
29
33
  "author": "Felix C. Morency",
30
34
  "license": "MIT",
31
35
  "dependencies": {
package/src/client.ts CHANGED
@@ -59,6 +59,10 @@ export class CosmosClientManager {
59
59
  private signingClient: SigningStargateClient | null = null;
60
60
  private rateLimiter: RateLimiter;
61
61
 
62
+ // Promises to prevent concurrent client initialization (lazy init race condition)
63
+ private queryClientPromise: Promise<ManifestQueryClient> | null = null;
64
+ private signingClientPromise: Promise<SigningStargateClient> | null = null;
65
+
62
66
  private constructor(config: ManifestMCPConfig, walletProvider: WalletProvider) {
63
67
  this.config = config;
64
68
  this.walletProvider = walletProvider;
@@ -73,7 +77,10 @@ export class CosmosClientManager {
73
77
 
74
78
  /**
75
79
  * Get or create a singleton instance for the given config.
76
- * If an instance exists with different rate limit settings, the limiter is updated.
80
+ * Instances are keyed by chainId:rpcUrl. For existing instances:
81
+ * - Config and walletProvider references are always updated
82
+ * - Signing client is disconnected/recreated if gasPrice or walletProvider changed
83
+ * - Rate limiter is updated if requestsPerSecond changed (without affecting signing client)
77
84
  */
78
85
  static getInstance(
79
86
  config: ManifestMCPConfig,
@@ -86,27 +93,30 @@ export class CosmosClientManager {
86
93
  instance = new CosmosClientManager(config, walletProvider);
87
94
  CosmosClientManager.instances.set(key, instance);
88
95
  } else {
89
- // Check if config or wallet changed and update accordingly
90
- const configChanged =
96
+ // Check what changed to determine what needs updating
97
+ const signingClientAffected =
91
98
  instance.config.gasPrice !== config.gasPrice ||
92
- instance.config.gasAdjustment !== config.gasAdjustment ||
93
- instance.config.addressPrefix !== config.addressPrefix ||
94
- instance.config.rateLimit?.requestsPerSecond !== config.rateLimit?.requestsPerSecond;
99
+ instance.walletProvider !== walletProvider;
95
100
 
96
- const walletChanged = instance.walletProvider !== walletProvider;
101
+ const rateLimitChanged =
102
+ instance.config.rateLimit?.requestsPerSecond !== config.rateLimit?.requestsPerSecond;
97
103
 
98
- if (configChanged || walletChanged) {
99
- // Update config and wallet
100
- instance.config = config;
101
- instance.walletProvider = walletProvider;
104
+ // Always update config reference
105
+ instance.config = config;
106
+ instance.walletProvider = walletProvider;
102
107
 
103
- // Invalidate signing client so it gets recreated with new config/wallet
108
+ // Only invalidate signing client if fields it depends on changed
109
+ if (signingClientAffected) {
104
110
  if (instance.signingClient) {
105
111
  instance.signingClient.disconnect();
106
112
  instance.signingClient = null;
107
113
  }
114
+ // Also clear the promise to allow re-initialization with new config
115
+ instance.signingClientPromise = null;
116
+ }
108
117
 
109
- // Update rate limiter
118
+ // Update rate limiter independently (doesn't affect signing client)
119
+ if (rateLimitChanged) {
110
120
  const newRps = config.rateLimit?.requestsPerSecond ?? DEFAULT_REQUESTS_PER_SECOND;
111
121
  instance.rateLimiter = new RateLimiter({
112
122
  tokensPerInterval: newRps,
@@ -129,28 +139,65 @@ export class CosmosClientManager {
129
139
  * Get the manifestjs RPC query client with all module extensions
130
140
  */
131
141
  async getQueryClient(): Promise<ManifestQueryClient> {
132
- if (!this.queryClient) {
142
+ // Return cached client if available
143
+ if (this.queryClient) {
144
+ return this.queryClient;
145
+ }
146
+
147
+ // If initialization is already in progress, wait for it
148
+ if (this.queryClientPromise) {
149
+ return this.queryClientPromise;
150
+ }
151
+
152
+ // Start initialization and cache the promise to prevent concurrent init
153
+ this.queryClientPromise = (async () => {
154
+ // Capture reference to detect if superseded by disconnect/config change
155
+ const thisInitPromise = this.queryClientPromise;
133
156
  try {
134
157
  // Use liftedinit ClientFactory which includes cosmos + liftedinit modules
135
- this.queryClient = await liftedinit.ClientFactory.createRPCQueryClient({
158
+ const client = await liftedinit.ClientFactory.createRPCQueryClient({
136
159
  rpcEndpoint: this.config.rpcUrl,
137
160
  });
161
+ // Only store if this is still the active promise
162
+ if (this.queryClientPromise === thisInitPromise) {
163
+ this.queryClient = client;
164
+ this.queryClientPromise = null;
165
+ }
166
+ return client;
138
167
  } catch (error) {
168
+ // Clear promise on failure so retry is possible (only if still active)
169
+ if (this.queryClientPromise === thisInitPromise) {
170
+ this.queryClientPromise = null;
171
+ }
139
172
  throw new ManifestMCPError(
140
173
  ManifestMCPErrorCode.RPC_CONNECTION_FAILED,
141
174
  `Failed to connect to RPC endpoint: ${error instanceof Error ? error.message : String(error)}`,
142
175
  { rpcUrl: this.config.rpcUrl }
143
176
  );
144
177
  }
145
- }
146
- return this.queryClient;
178
+ })();
179
+
180
+ return this.queryClientPromise;
147
181
  }
148
182
 
149
183
  /**
150
184
  * Get a signing client with all Manifest registries (for transactions)
151
185
  */
152
186
  async getSigningClient(): Promise<SigningStargateClient> {
153
- if (!this.signingClient) {
187
+ // Return cached client if available
188
+ if (this.signingClient) {
189
+ return this.signingClient;
190
+ }
191
+
192
+ // If initialization is already in progress, wait for it
193
+ if (this.signingClientPromise) {
194
+ return this.signingClientPromise;
195
+ }
196
+
197
+ // Start initialization and cache the promise to prevent concurrent init
198
+ this.signingClientPromise = (async () => {
199
+ // Capture reference to detect if superseded by disconnect/config change
200
+ const thisInitPromise = this.signingClientPromise;
154
201
  try {
155
202
  const signer = await this.walletProvider.getSigner();
156
203
  const gasPrice = GasPrice.fromString(this.config.gasPrice);
@@ -165,7 +212,7 @@ export class CosmosClientManager {
165
212
  // Note: Registry type from @cosmjs/proto-signing doesn't perfectly match
166
213
  // SigningStargateClientOptions due to telescope-generated proto types.
167
214
  // This is a known limitation with custom cosmos-sdk module registries.
168
- this.signingClient = await SigningStargateClient.connectWithSigner(
215
+ const client = await SigningStargateClient.connectWithSigner(
169
216
  endpoint,
170
217
  signer,
171
218
  {
@@ -176,7 +223,20 @@ export class CosmosClientManager {
176
223
  broadcastPollIntervalMs: DEFAULT_BROADCAST_POLL_INTERVAL_MS,
177
224
  }
178
225
  );
226
+ // Only store if this is still the active promise
227
+ if (this.signingClientPromise === thisInitPromise) {
228
+ this.signingClient = client;
229
+ this.signingClientPromise = null;
230
+ } else {
231
+ // Promise was superseded, clean up the client we just created
232
+ client.disconnect();
233
+ }
234
+ return client;
179
235
  } catch (error) {
236
+ // Clear promise on failure so retry is possible (only if still active)
237
+ if (this.signingClientPromise === thisInitPromise) {
238
+ this.signingClientPromise = null;
239
+ }
180
240
  if (error instanceof ManifestMCPError) {
181
241
  throw error;
182
242
  }
@@ -186,8 +246,9 @@ export class CosmosClientManager {
186
246
  { rpcUrl: this.config.rpcUrl }
187
247
  );
188
248
  }
189
- }
190
- return this.signingClient;
249
+ })();
250
+
251
+ return this.signingClientPromise;
191
252
  }
192
253
 
193
254
  /**
@@ -220,6 +281,8 @@ export class CosmosClientManager {
220
281
  this.signingClient.disconnect();
221
282
  this.signingClient = null;
222
283
  }
284
+ this.signingClientPromise = null;
223
285
  this.queryClient = null;
286
+ this.queryClientPromise = null;
224
287
  }
225
288
  }
package/src/cosmos.ts CHANGED
@@ -1,18 +1,6 @@
1
1
  import { CosmosClientManager } from './client.js';
2
2
  import { CosmosQueryResult, CosmosTxResult, ManifestMCPError, ManifestMCPErrorCode } from './types.js';
3
- import { getSupportedModules } from './modules.js';
4
- import { routeBankQuery } from './queries/bank.js';
5
- import { routeStakingQuery } from './queries/staking.js';
6
- import { routeDistributionQuery } from './queries/distribution.js';
7
- import { routeGovQuery } from './queries/gov.js';
8
- import { routeAuthQuery } from './queries/auth.js';
9
- import { routeBillingQuery } from './queries/billing.js';
10
- import { routeBankTransaction } from './transactions/bank.js';
11
- import { routeStakingTransaction } from './transactions/staking.js';
12
- import { routeDistributionTransaction } from './transactions/distribution.js';
13
- import { routeGovTransaction } from './transactions/gov.js';
14
- import { routeBillingTransaction } from './transactions/billing.js';
15
- import { routeManifestTransaction } from './transactions/manifest.js';
3
+ import { getQueryHandler, getTxHandler } from './modules.js';
16
4
 
17
5
  // Validation pattern for module/subcommand names (alphanumeric, hyphens, underscores)
18
6
  // First character must not be a hyphen to prevent potential issues
@@ -30,11 +18,6 @@ function validateName(name: string, field: string): void {
30
18
  }
31
19
  }
32
20
 
33
- // Get module lists from the authoritative registry
34
- const supportedModules = getSupportedModules();
35
- const QUERY_MODULES = Object.keys(supportedModules.query);
36
- const TX_MODULES = Object.keys(supportedModules.tx);
37
-
38
21
  /**
39
22
  * Execute a Cosmos query via manifestjs RPC client
40
23
  */
@@ -52,35 +35,10 @@ export async function cosmosQuery(
52
35
 
53
36
  const queryClient = await clientManager.getQueryClient();
54
37
 
55
- let result: Record<string, unknown>;
56
-
57
38
  try {
58
- switch (module) {
59
- case 'bank':
60
- result = await routeBankQuery(queryClient, subcommand, args);
61
- break;
62
- case 'staking':
63
- result = await routeStakingQuery(queryClient, subcommand, args);
64
- break;
65
- case 'distribution':
66
- result = await routeDistributionQuery(queryClient, subcommand, args);
67
- break;
68
- case 'gov':
69
- result = await routeGovQuery(queryClient, subcommand, args);
70
- break;
71
- case 'auth':
72
- result = await routeAuthQuery(queryClient, subcommand, args);
73
- break;
74
- case 'billing':
75
- result = await routeBillingQuery(queryClient, subcommand, args);
76
- break;
77
- default:
78
- throw new ManifestMCPError(
79
- ManifestMCPErrorCode.UNKNOWN_MODULE,
80
- `Unknown query module: ${module}`,
81
- { availableModules: QUERY_MODULES }
82
- );
83
- }
39
+ // Get handler from registry (throws if module not found)
40
+ const handler = getQueryHandler(module);
41
+ const result = await handler(queryClient, subcommand, args);
84
42
 
85
43
  return {
86
44
  module,
@@ -116,71 +74,17 @@ export async function cosmosTx(
116
74
 
117
75
  const signingClient = await clientManager.getSigningClient();
118
76
  const senderAddress = await clientManager.getAddress();
119
- const config = clientManager.getConfig();
120
77
 
121
78
  try {
122
- switch (module) {
123
- case 'bank':
124
- return await routeBankTransaction(
125
- signingClient,
126
- senderAddress,
127
- subcommand,
128
- args,
129
- config,
130
- waitForConfirmation
131
- );
132
- case 'staking':
133
- return await routeStakingTransaction(
134
- signingClient,
135
- senderAddress,
136
- subcommand,
137
- args,
138
- config,
139
- waitForConfirmation
140
- );
141
- case 'distribution':
142
- return await routeDistributionTransaction(
143
- signingClient,
144
- senderAddress,
145
- subcommand,
146
- args,
147
- config,
148
- waitForConfirmation
149
- );
150
- case 'gov':
151
- return await routeGovTransaction(
152
- signingClient,
153
- senderAddress,
154
- subcommand,
155
- args,
156
- config,
157
- waitForConfirmation
158
- );
159
- case 'billing':
160
- return await routeBillingTransaction(
161
- signingClient,
162
- senderAddress,
163
- subcommand,
164
- args,
165
- config,
166
- waitForConfirmation
167
- );
168
- case 'manifest':
169
- return await routeManifestTransaction(
170
- signingClient,
171
- senderAddress,
172
- subcommand,
173
- args,
174
- config,
175
- waitForConfirmation
176
- );
177
- default:
178
- throw new ManifestMCPError(
179
- ManifestMCPErrorCode.UNKNOWN_MODULE,
180
- `Unknown tx module: ${module}`,
181
- { availableModules: TX_MODULES }
182
- );
183
- }
79
+ // Get handler from registry (throws if module not found)
80
+ const handler = getTxHandler(module);
81
+ return await handler(
82
+ signingClient,
83
+ senderAddress,
84
+ subcommand,
85
+ args,
86
+ waitForConfirmation
87
+ );
184
88
  } catch (error) {
185
89
  if (error instanceof ManifestMCPError) {
186
90
  // Re-throw with enriched context if not already present
package/src/index.ts CHANGED
@@ -32,6 +32,20 @@ const SENSITIVE_FIELDS = new Set([
32
32
  'api_key',
33
33
  ]);
34
34
 
35
+ /**
36
+ * Parse raw args input into string array.
37
+ * Handles both array and space-separated string inputs.
38
+ */
39
+ function parseArgs(rawArgs: unknown): string[] {
40
+ if (Array.isArray(rawArgs)) {
41
+ return rawArgs.map(String);
42
+ }
43
+ if (typeof rawArgs === 'string' && rawArgs.length > 0) {
44
+ return rawArgs.split(/\s+/);
45
+ }
46
+ return [];
47
+ }
48
+
35
49
  /**
36
50
  * Recursively sanitize an object by redacting sensitive fields
37
51
  */
@@ -210,7 +224,7 @@ export class ManifestMCPServer {
210
224
  this.server = new Server(
211
225
  {
212
226
  name: '@manifest-network/manifest-mcp-browser',
213
- version: '0.1.0',
227
+ version: '0.1.1',
214
228
  },
215
229
  {
216
230
  capabilities: {
@@ -297,17 +311,7 @@ export class ManifestMCPServer {
297
311
  case 'cosmos_query': {
298
312
  const module = toolInput.module as string;
299
313
  const subcommand = toolInput.subcommand as string;
300
- const rawArgs = toolInput.args;
301
-
302
- // Handle both array and string inputs for args
303
- let args: string[];
304
- if (Array.isArray(rawArgs)) {
305
- args = rawArgs.map(String);
306
- } else if (typeof rawArgs === 'string' && rawArgs.length > 0) {
307
- args = rawArgs.split(/\s+/);
308
- } else {
309
- args = [];
310
- }
314
+ const args = parseArgs(toolInput.args);
311
315
 
312
316
  if (!module || !subcommand) {
313
317
  throw new ManifestMCPError(
@@ -331,19 +335,9 @@ export class ManifestMCPServer {
331
335
  case 'cosmos_tx': {
332
336
  const module = toolInput.module as string;
333
337
  const subcommand = toolInput.subcommand as string;
334
- const rawArgs = toolInput.args;
338
+ const args = parseArgs(toolInput.args);
335
339
  const waitForConfirmation = (toolInput.wait_for_confirmation as boolean) || false;
336
340
 
337
- // Handle both array and string inputs for args
338
- let args: string[];
339
- if (Array.isArray(rawArgs)) {
340
- args = rawArgs.map(String);
341
- } else if (typeof rawArgs === 'string' && rawArgs.length > 0) {
342
- args = rawArgs.split(/\s+/);
343
- } else {
344
- args = [];
345
- }
346
-
347
341
  if (!module || !subcommand || args.length === 0) {
348
342
  throw new ManifestMCPError(
349
343
  ManifestMCPErrorCode.TX_FAILED,
@@ -4,6 +4,7 @@ import {
4
4
  getModuleSubcommands,
5
5
  isSubcommandSupported,
6
6
  getSupportedModules,
7
+ throwUnsupportedSubcommand,
7
8
  } from './modules.js';
8
9
  import { ManifestMCPError, ManifestMCPErrorCode } from './types.js';
9
10
 
@@ -125,3 +126,62 @@ describe('getSupportedModules', () => {
125
126
  expect(modules.tx.bank).toContain('send');
126
127
  });
127
128
  });
129
+
130
+ describe('throwUnsupportedSubcommand', () => {
131
+ it('should throw ManifestMCPError for unsupported query subcommand', () => {
132
+ expect(() => throwUnsupportedSubcommand('query', 'bank', 'unknown')).toThrow(ManifestMCPError);
133
+ });
134
+
135
+ it('should throw ManifestMCPError for unsupported tx subcommand', () => {
136
+ expect(() => throwUnsupportedSubcommand('tx', 'bank', 'unknown')).toThrow(ManifestMCPError);
137
+ });
138
+
139
+ it('should use UNSUPPORTED_QUERY error code for queries', () => {
140
+ try {
141
+ throwUnsupportedSubcommand('query', 'bank', 'unknown');
142
+ } catch (error) {
143
+ expect((error as ManifestMCPError).code).toBe(ManifestMCPErrorCode.UNSUPPORTED_QUERY);
144
+ }
145
+ });
146
+
147
+ it('should use UNSUPPORTED_TX error code for transactions', () => {
148
+ try {
149
+ throwUnsupportedSubcommand('tx', 'bank', 'unknown');
150
+ } catch (error) {
151
+ expect((error as ManifestMCPError).code).toBe(ManifestMCPErrorCode.UNSUPPORTED_TX);
152
+ }
153
+ });
154
+
155
+ it('should include module and subcommand in error message', () => {
156
+ try {
157
+ throwUnsupportedSubcommand('query', 'staking', 'badcmd');
158
+ } catch (error) {
159
+ const message = (error as ManifestMCPError).message;
160
+ expect(message).toContain('staking');
161
+ expect(message).toContain('badcmd');
162
+ expect(message).toContain('query');
163
+ }
164
+ });
165
+
166
+ it('should include availableSubcommands in error details', () => {
167
+ try {
168
+ throwUnsupportedSubcommand('tx', 'bank', 'unknown');
169
+ } catch (error) {
170
+ const details = (error as ManifestMCPError).details;
171
+ expect(details?.availableSubcommands).toBeDefined();
172
+ expect(details?.availableSubcommands).toContain('send');
173
+ expect(details?.availableSubcommands).toContain('multi-send');
174
+ }
175
+ });
176
+
177
+ it('should include correct subcommands for each module', () => {
178
+ try {
179
+ throwUnsupportedSubcommand('query', 'gov', 'unknown');
180
+ } catch (error) {
181
+ const details = (error as ManifestMCPError).details;
182
+ expect(details?.availableSubcommands).toContain('proposal');
183
+ expect(details?.availableSubcommands).toContain('proposals');
184
+ expect(details?.availableSubcommands).toContain('vote');
185
+ }
186
+ });
187
+ });