@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.
- package/.github/workflows/publish.yml +4 -2
- package/CLAUDE.md +7 -3
- package/README.md +1 -1
- package/dist/client.d.ts +6 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +77 -21
- package/dist/client.js.map +1 -1
- package/dist/cosmos.d.ts.map +1 -1
- package/dist/cosmos.js +7 -57
- package/dist/cosmos.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +16 -25
- package/dist/index.js.map +1 -1
- package/dist/modules.d.ts +30 -1
- package/dist/modules.d.ts.map +1 -1
- package/dist/modules.js +65 -1
- package/dist/modules.js.map +1 -1
- package/dist/modules.test.js +58 -1
- package/dist/modules.test.js.map +1 -1
- package/dist/queries/auth.d.ts +7 -1
- package/dist/queries/auth.d.ts.map +1 -1
- package/dist/queries/auth.js +18 -45
- package/dist/queries/auth.js.map +1 -1
- package/dist/queries/bank.d.ts +7 -1
- package/dist/queries/bank.d.ts.map +1 -1
- package/dist/queries/bank.js +24 -38
- package/dist/queries/bank.js.map +1 -1
- package/dist/queries/billing.d.ts +7 -1
- package/dist/queries/billing.d.ts.map +1 -1
- package/dist/queries/billing.js +28 -54
- package/dist/queries/billing.js.map +1 -1
- package/dist/queries/distribution.d.ts +7 -1
- package/dist/queries/distribution.d.ts.map +1 -1
- package/dist/queries/distribution.js +18 -36
- package/dist/queries/distribution.js.map +1 -1
- package/dist/queries/gov.d.ts +7 -1
- package/dist/queries/gov.d.ts.map +1 -1
- package/dist/queries/gov.js +24 -41
- package/dist/queries/gov.js.map +1 -1
- package/dist/queries/index.d.ts +2 -1
- package/dist/queries/index.d.ts.map +1 -1
- package/dist/queries/index.js +1 -1
- package/dist/queries/index.js.map +1 -1
- package/dist/queries/staking.d.ts +7 -1
- package/dist/queries/staking.d.ts.map +1 -1
- package/dist/queries/staking.js +36 -59
- package/dist/queries/staking.js.map +1 -1
- package/dist/queries/utils.d.ts +42 -10
- package/dist/queries/utils.d.ts.map +1 -1
- package/dist/queries/utils.js +64 -12
- package/dist/queries/utils.js.map +1 -1
- package/dist/queries/utils.test.js +68 -8
- package/dist/queries/utils.test.js.map +1 -1
- package/dist/transactions/bank.d.ts +2 -2
- package/dist/transactions/bank.d.ts.map +1 -1
- package/dist/transactions/bank.js +9 -18
- package/dist/transactions/bank.js.map +1 -1
- package/dist/transactions/billing.d.ts +2 -2
- package/dist/transactions/billing.d.ts.map +1 -1
- package/dist/transactions/billing.js +29 -86
- package/dist/transactions/billing.js.map +1 -1
- package/dist/transactions/distribution.d.ts +2 -2
- package/dist/transactions/distribution.d.ts.map +1 -1
- package/dist/transactions/distribution.js +7 -13
- package/dist/transactions/distribution.js.map +1 -1
- package/dist/transactions/gov.d.ts +2 -2
- package/dist/transactions/gov.d.ts.map +1 -1
- package/dist/transactions/gov.js +29 -20
- package/dist/transactions/gov.js.map +1 -1
- package/dist/transactions/index.d.ts +1 -1
- package/dist/transactions/index.d.ts.map +1 -1
- package/dist/transactions/index.js +1 -1
- package/dist/transactions/index.js.map +1 -1
- package/dist/transactions/manifest.d.ts +2 -2
- package/dist/transactions/manifest.d.ts.map +1 -1
- package/dist/transactions/manifest.js +7 -14
- package/dist/transactions/manifest.js.map +1 -1
- package/dist/transactions/staking.d.ts +2 -2
- package/dist/transactions/staking.d.ts.map +1 -1
- package/dist/transactions/staking.js +7 -13
- package/dist/transactions/staking.js.map +1 -1
- package/dist/transactions/utils.d.ts +63 -1
- package/dist/transactions/utils.d.ts.map +1 -1
- package/dist/transactions/utils.js +121 -2
- package/dist/transactions/utils.js.map +1 -1
- package/dist/transactions/utils.test.js +351 -1
- package/dist/transactions/utils.test.js.map +1 -1
- package/dist/types.d.ts +203 -8
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/wallet/mnemonic.d.ts +1 -0
- package/dist/wallet/mnemonic.d.ts.map +1 -1
- package/dist/wallet/mnemonic.js +34 -13
- package/dist/wallet/mnemonic.js.map +1 -1
- package/package.json +5 -1
- package/src/client.ts +84 -21
- package/src/cosmos.ts +13 -109
- package/src/index.ts +17 -23
- package/src/modules.test.ts +60 -0
- package/src/modules.ts +122 -5
- package/src/queries/auth.ts +35 -74
- package/src/queries/bank.ts +40 -58
- package/src/queries/billing.ts +46 -86
- package/src/queries/distribution.ts +35 -59
- package/src/queries/gov.ts +40 -64
- package/src/queries/index.ts +10 -1
- package/src/queries/staking.ts +55 -91
- package/src/queries/utils.test.ts +103 -8
- package/src/queries/utils.ts +92 -12
- package/src/transactions/bank.ts +9 -33
- package/src/transactions/billing.ts +30 -137
- package/src/transactions/distribution.ts +7 -29
- package/src/transactions/gov.ts +33 -37
- package/src/transactions/index.ts +1 -1
- package/src/transactions/manifest.ts +7 -29
- package/src/transactions/staking.ts +7 -29
- package/src/transactions/utils.test.ts +390 -1
- package/src/transactions/utils.ts +191 -2
- package/src/types.ts +318 -9
- package/src/wallet/mnemonic.ts +41 -17
- package/.claude/settings.local.json +0 -20
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAE3D;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,gDAAgD;IAChD,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;CACrC;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,iDAAiD;IACjD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,uBAAuB;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,oDAAoD;IACpD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,+CAA+C;IAC/C,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,wCAAwC;IACxC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,kCAAkC;IAClC,QAAQ,CAAC,SAAS,CAAC,EAAE,eAAe,CAAC;CACtC;AAED;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,+BAA+B;IAC/B,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAC9B,sDAAsD;IACtD,SAAS,IAAI,OAAO,CAAC,aAAa,CAAC,CAAC;IACpC,sCAAsC;IACtC,OAAO,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,2CAA2C;IAC3C,UAAU,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,
|
|
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":"
|
|
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;
|
|
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"}
|
package/dist/wallet/mnemonic.js
CHANGED
|
@@ -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
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
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
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
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":"AAAA,OAAO,EAAE,uBAAuB,EAAiB,MAAM,uBAAuB,CAAC;AAC/E,OAAO,EAAkB,gBAAgB,EAAE,oBAAoB,EAAqB,MAAM,aAAa,CAAC;AAExG;;;;;GAKG;AACH,MAAM,OAAO,sBAAsB;
|
|
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.
|
|
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
|
-
*
|
|
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
|
|
90
|
-
const
|
|
96
|
+
// Check what changed to determine what needs updating
|
|
97
|
+
const signingClientAffected =
|
|
91
98
|
instance.config.gasPrice !== config.gasPrice ||
|
|
92
|
-
instance.
|
|
93
|
-
instance.config.addressPrefix !== config.addressPrefix ||
|
|
94
|
-
instance.config.rateLimit?.requestsPerSecond !== config.rateLimit?.requestsPerSecond;
|
|
99
|
+
instance.walletProvider !== walletProvider;
|
|
95
100
|
|
|
96
|
-
const
|
|
101
|
+
const rateLimitChanged =
|
|
102
|
+
instance.config.rateLimit?.requestsPerSecond !== config.rateLimit?.requestsPerSecond;
|
|
97
103
|
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
instance.walletProvider = walletProvider;
|
|
104
|
+
// Always update config reference
|
|
105
|
+
instance.config = config;
|
|
106
|
+
instance.walletProvider = walletProvider;
|
|
102
107
|
|
|
103
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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 {
|
|
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
|
-
|
|
59
|
-
|
|
60
|
-
|
|
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
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
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.
|
|
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
|
|
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
|
|
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,
|
package/src/modules.test.ts
CHANGED
|
@@ -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
|
+
});
|