@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
@@ -0,0 +1,114 @@
1
+ import { fromBech32 } from '@cosmjs/encoding';
2
+ import { ManifestMCPError, ManifestMCPErrorCode } from '../types.js';
3
+ /** Maximum number of arguments allowed */
4
+ export const MAX_ARGS = 100;
5
+ /** Maximum memo length (Cosmos SDK default) */
6
+ export const MAX_MEMO_LENGTH = 256;
7
+ /**
8
+ * Validate args array length
9
+ */
10
+ export function validateArgsLength(args, context) {
11
+ if (args.length > MAX_ARGS) {
12
+ throw new ManifestMCPError(ManifestMCPErrorCode.TX_FAILED, `Too many arguments for ${context}: ${args.length}. Maximum allowed: ${MAX_ARGS}`);
13
+ }
14
+ }
15
+ /**
16
+ * Validate a bech32 address using @cosmjs/encoding
17
+ */
18
+ export function validateAddress(address, fieldName, expectedPrefix) {
19
+ if (!address || address.trim() === '') {
20
+ throw new ManifestMCPError(ManifestMCPErrorCode.INVALID_ADDRESS, `${fieldName} is required`);
21
+ }
22
+ try {
23
+ const { prefix } = fromBech32(address);
24
+ if (expectedPrefix && prefix !== expectedPrefix) {
25
+ throw new ManifestMCPError(ManifestMCPErrorCode.INVALID_ADDRESS, `Invalid ${fieldName}: "${address}". Expected prefix "${expectedPrefix}", got "${prefix}"`);
26
+ }
27
+ }
28
+ catch (error) {
29
+ if (error instanceof ManifestMCPError) {
30
+ throw error;
31
+ }
32
+ throw new ManifestMCPError(ManifestMCPErrorCode.INVALID_ADDRESS, `Invalid ${fieldName}: "${address}". Not a valid bech32 address.`);
33
+ }
34
+ }
35
+ /**
36
+ * Validate memo length
37
+ */
38
+ export function validateMemo(memo) {
39
+ if (memo.length > MAX_MEMO_LENGTH) {
40
+ throw new ManifestMCPError(ManifestMCPErrorCode.TX_FAILED, `Memo too long: ${memo.length} characters. Maximum allowed: ${MAX_MEMO_LENGTH}`);
41
+ }
42
+ }
43
+ /**
44
+ * Safely parse a string to BigInt with proper error handling and configurable error code.
45
+ * This is the base implementation used by both transaction and query utilities.
46
+ */
47
+ export function parseBigIntWithCode(value, fieldName, errorCode) {
48
+ // Check for empty string explicitly (BigInt('') returns 0n, not an error)
49
+ if (!value || value.trim() === '') {
50
+ throw new ManifestMCPError(errorCode, `Invalid ${fieldName}: empty value. Expected a valid integer.`);
51
+ }
52
+ try {
53
+ return BigInt(value);
54
+ }
55
+ catch {
56
+ throw new ManifestMCPError(errorCode, `Invalid ${fieldName}: "${value}". Expected a valid integer.`);
57
+ }
58
+ }
59
+ /**
60
+ * Safely parse a string to BigInt with proper error handling (for transactions)
61
+ */
62
+ export function parseBigInt(value, fieldName) {
63
+ return parseBigIntWithCode(value, fieldName, ManifestMCPErrorCode.TX_FAILED);
64
+ }
65
+ /**
66
+ * Parse amount string into coin (e.g., "1000umfx" -> { amount: "1000", denom: "umfx" })
67
+ * Supports simple denoms (umfx), IBC denoms (ibc/...), and factory denoms (factory/creator/subdenom)
68
+ */
69
+ export function parseAmount(amountStr) {
70
+ // Regex supports alphanumeric denoms with slashes and underscores for IBC/factory denoms
71
+ const match = amountStr.match(/^(\d+)([a-zA-Z][a-zA-Z0-9/_]*)$/);
72
+ if (!match) {
73
+ // Provide specific hints based on common mistakes
74
+ let hint = '';
75
+ if (!amountStr || amountStr.trim() === '') {
76
+ hint = ' Received empty string.';
77
+ }
78
+ else if (amountStr.includes(' ')) {
79
+ hint = ' Remove the space between number and denom.';
80
+ }
81
+ else if (amountStr.includes(',')) {
82
+ hint = ' Do not use commas in the number.';
83
+ }
84
+ else if (/^\d+$/.test(amountStr)) {
85
+ hint = ' Missing denomination (e.g., add "umfx" after the number).';
86
+ }
87
+ else if (/^[a-zA-Z]/.test(amountStr)) {
88
+ hint = ' Amount must start with a number, not the denomination.';
89
+ }
90
+ throw new ManifestMCPError(ManifestMCPErrorCode.TX_FAILED, `Invalid amount format: "${amountStr}".${hint} Expected format: <number><denom> (e.g., "1000000umfx" or "1000000factory/address/subdenom")`, { receivedValue: amountStr, expectedFormat: '<number><denom>', example: '1000000umfx' });
91
+ }
92
+ return { amount: match[1], denom: match[2] };
93
+ }
94
+ /**
95
+ * Build transaction result from DeliverTxResponse
96
+ */
97
+ export function buildTxResult(module, subcommand, result, waitForConfirmation) {
98
+ const txResult = {
99
+ module,
100
+ subcommand,
101
+ transactionHash: result.transactionHash,
102
+ code: result.code,
103
+ height: String(result.height),
104
+ rawLog: result.rawLog || undefined,
105
+ gasUsed: String(result.gasUsed),
106
+ gasWanted: String(result.gasWanted),
107
+ };
108
+ if (waitForConfirmation) {
109
+ txResult.confirmed = result.code === 0;
110
+ txResult.confirmationHeight = String(result.height);
111
+ }
112
+ return txResult;
113
+ }
114
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/transactions/utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAkB,MAAM,aAAa,CAAC;AAErF,0CAA0C;AAC1C,MAAM,CAAC,MAAM,QAAQ,GAAG,GAAG,CAAC;AAE5B,+CAA+C;AAC/C,MAAM,CAAC,MAAM,eAAe,GAAG,GAAG,CAAC;AAEnC;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAc,EAAE,OAAe;IAChE,IAAI,IAAI,CAAC,MAAM,GAAG,QAAQ,EAAE,CAAC;QAC3B,MAAM,IAAI,gBAAgB,CACxB,oBAAoB,CAAC,SAAS,EAC9B,0BAA0B,OAAO,KAAK,IAAI,CAAC,MAAM,sBAAsB,QAAQ,EAAE,CAClF,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,OAAe,EAAE,SAAiB,EAAE,cAAuB;IACzF,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,gBAAgB,CACxB,oBAAoB,CAAC,eAAe,EACpC,GAAG,SAAS,cAAc,CAC3B,CAAC;IACJ,CAAC;IAED,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;QACvC,IAAI,cAAc,IAAI,MAAM,KAAK,cAAc,EAAE,CAAC;YAChD,MAAM,IAAI,gBAAgB,CACxB,oBAAoB,CAAC,eAAe,EACpC,WAAW,SAAS,MAAM,OAAO,uBAAuB,cAAc,WAAW,MAAM,GAAG,CAC3F,CAAC;QACJ,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,gBAAgB,EAAE,CAAC;YACtC,MAAM,KAAK,CAAC;QACd,CAAC;QACD,MAAM,IAAI,gBAAgB,CACxB,oBAAoB,CAAC,eAAe,EACpC,WAAW,SAAS,MAAM,OAAO,gCAAgC,CAClE,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,IAAI,IAAI,CAAC,MAAM,GAAG,eAAe,EAAE,CAAC;QAClC,MAAM,IAAI,gBAAgB,CACxB,oBAAoB,CAAC,SAAS,EAC9B,kBAAkB,IAAI,CAAC,MAAM,iCAAiC,eAAe,EAAE,CAChF,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CACjC,KAAa,EACb,SAAiB,EACjB,SAA+B;IAE/B,0EAA0E;IAC1E,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QAClC,MAAM,IAAI,gBAAgB,CACxB,SAAS,EACT,WAAW,SAAS,0CAA0C,CAC/D,CAAC;IACJ,CAAC;IAED,IAAI,CAAC;QACH,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,gBAAgB,CACxB,SAAS,EACT,WAAW,SAAS,MAAM,KAAK,8BAA8B,CAC9D,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,KAAa,EAAE,SAAiB;IAC1D,OAAO,mBAAmB,CAAC,KAAK,EAAE,SAAS,EAAE,oBAAoB,CAAC,SAAS,CAAC,CAAC;AAC/E,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,SAAiB;IAC3C,yFAAyF;IACzF,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;IACjE,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,kDAAkD;QAClD,IAAI,IAAI,GAAG,EAAE,CAAC;QACd,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YAC1C,IAAI,GAAG,yBAAyB,CAAC;QACnC,CAAC;aAAM,IAAI,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACnC,IAAI,GAAG,6CAA6C,CAAC;QACvD,CAAC;aAAM,IAAI,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACnC,IAAI,GAAG,mCAAmC,CAAC;QAC7C,CAAC;aAAM,IAAI,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YACnC,IAAI,GAAG,4DAA4D,CAAC;QACtE,CAAC;aAAM,IAAI,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YACvC,IAAI,GAAG,yDAAyD,CAAC;QACnE,CAAC;QAED,MAAM,IAAI,gBAAgB,CACxB,oBAAoB,CAAC,SAAS,EAC9B,2BAA2B,SAAS,KAAK,IAAI,8FAA8F,EAC3I,EAAE,aAAa,EAAE,SAAS,EAAE,cAAc,EAAE,iBAAiB,EAAE,OAAO,EAAE,aAAa,EAAE,CACxF,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;AAC/C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAC3B,MAAc,EACd,UAAkB,EAClB,MAAsE,EACtE,mBAA4B;IAE5B,MAAM,QAAQ,GAAmB;QAC/B,MAAM;QACN,UAAU;QACV,eAAe,EAAE,MAAM,CAAC,eAAe;QACvC,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;QAC7B,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,SAAS;QAClC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;QAC/B,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC;KACpC,CAAC;IAEF,IAAI,mBAAmB,EAAE,CAAC;QACxB,QAAQ,CAAC,SAAS,GAAG,MAAM,CAAC,IAAI,KAAK,CAAC,CAAC;QACvC,QAAQ,CAAC,kBAAkB,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACtD,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=utils.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.test.d.ts","sourceRoot":"","sources":["../../src/transactions/utils.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,121 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { parseAmount, parseBigInt } from './utils.js';
3
+ import { ManifestMCPError, ManifestMCPErrorCode } from '../types.js';
4
+ describe('parseAmount', () => {
5
+ it('should parse valid amount strings', () => {
6
+ expect(parseAmount('1000umfx')).toEqual({ amount: '1000', denom: 'umfx' });
7
+ expect(parseAmount('1uatom')).toEqual({ amount: '1', denom: 'uatom' });
8
+ expect(parseAmount('999999999token')).toEqual({ amount: '999999999', denom: 'token' });
9
+ });
10
+ it('should handle denominations with numbers', () => {
11
+ expect(parseAmount('100ibc123')).toEqual({ amount: '100', denom: 'ibc123' });
12
+ });
13
+ it('should handle factory denoms with slashes', () => {
14
+ expect(parseAmount('1000000factory/manifest1abc123/upwr')).toEqual({
15
+ amount: '1000000',
16
+ denom: 'factory/manifest1abc123/upwr',
17
+ });
18
+ });
19
+ it('should handle IBC denoms with slashes', () => {
20
+ expect(parseAmount('500ibc/ABC123DEF456')).toEqual({
21
+ amount: '500',
22
+ denom: 'ibc/ABC123DEF456',
23
+ });
24
+ });
25
+ it('should handle denoms with underscores', () => {
26
+ expect(parseAmount('100my_token')).toEqual({ amount: '100', denom: 'my_token' });
27
+ });
28
+ it('should throw ManifestMCPError for invalid format', () => {
29
+ expect(() => parseAmount('')).toThrow(ManifestMCPError);
30
+ expect(() => parseAmount('umfx')).toThrow(ManifestMCPError);
31
+ expect(() => parseAmount('1000')).toThrow(ManifestMCPError);
32
+ expect(() => parseAmount('abc123')).toThrow(ManifestMCPError);
33
+ expect(() => parseAmount('1000 umfx')).toThrow(ManifestMCPError);
34
+ });
35
+ it('should have correct error code for invalid format', () => {
36
+ try {
37
+ parseAmount('invalid');
38
+ }
39
+ catch (error) {
40
+ expect(error).toBeInstanceOf(ManifestMCPError);
41
+ expect(error.code).toBe(ManifestMCPErrorCode.TX_FAILED);
42
+ }
43
+ });
44
+ it('should provide helpful hint for empty string', () => {
45
+ try {
46
+ parseAmount('');
47
+ }
48
+ catch (error) {
49
+ expect(error.message).toContain('Received empty string');
50
+ }
51
+ });
52
+ it('should provide helpful hint for amount with space', () => {
53
+ try {
54
+ parseAmount('1000 umfx');
55
+ }
56
+ catch (error) {
57
+ expect(error.message).toContain('Remove the space');
58
+ }
59
+ });
60
+ it('should provide helpful hint for amount with comma', () => {
61
+ try {
62
+ parseAmount('1,000umfx');
63
+ }
64
+ catch (error) {
65
+ expect(error.message).toContain('Do not use commas');
66
+ }
67
+ });
68
+ it('should provide helpful hint for missing denomination', () => {
69
+ try {
70
+ parseAmount('1000');
71
+ }
72
+ catch (error) {
73
+ expect(error.message).toContain('Missing denomination');
74
+ }
75
+ });
76
+ it('should provide helpful hint for denom-first format', () => {
77
+ try {
78
+ parseAmount('umfx1000');
79
+ }
80
+ catch (error) {
81
+ expect(error.message).toContain('must start with a number');
82
+ }
83
+ });
84
+ it('should include details with received value and example', () => {
85
+ try {
86
+ parseAmount('bad');
87
+ }
88
+ catch (error) {
89
+ const details = error.details;
90
+ expect(details?.receivedValue).toBe('bad');
91
+ expect(details?.example).toBe('1000000umfx');
92
+ }
93
+ });
94
+ });
95
+ describe('parseBigInt', () => {
96
+ it('should parse valid integer strings', () => {
97
+ expect(parseBigInt('0', 'test')).toBe(BigInt(0));
98
+ expect(parseBigInt('123', 'test')).toBe(BigInt(123));
99
+ expect(parseBigInt('9999999999999999999', 'test')).toBe(BigInt('9999999999999999999'));
100
+ });
101
+ it('should throw ManifestMCPError for invalid integers', () => {
102
+ expect(() => parseBigInt('abc', 'field')).toThrow(ManifestMCPError);
103
+ expect(() => parseBigInt('12.34', 'field')).toThrow(ManifestMCPError);
104
+ expect(() => parseBigInt('1e10', 'field')).toThrow(ManifestMCPError);
105
+ });
106
+ it('should throw ManifestMCPError for empty string', () => {
107
+ // Empty string should be rejected for security (prevents accidental 0 values)
108
+ expect(() => parseBigInt('', 'field')).toThrow(ManifestMCPError);
109
+ expect(() => parseBigInt(' ', 'field')).toThrow(ManifestMCPError);
110
+ });
111
+ it('should include field name in error message', () => {
112
+ try {
113
+ parseBigInt('invalid', 'proposal-id');
114
+ }
115
+ catch (error) {
116
+ expect(error).toBeInstanceOf(ManifestMCPError);
117
+ expect(error.message).toContain('proposal-id');
118
+ }
119
+ });
120
+ });
121
+ //# sourceMappingURL=utils.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.test.js","sourceRoot":"","sources":["../../src/transactions/utils.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,110 @@
1
+ import type { OfflineSigner } from '@cosmjs/proto-signing';
2
+ /**
3
+ * Configuration for the Manifest MCP Browser server
4
+ */
5
+ export interface ManifestMCPConfig {
6
+ /** Chain ID (e.g., "manifest-ledger-testnet") */
7
+ readonly chainId: string;
8
+ /** RPC endpoint URL */
9
+ readonly rpcUrl: string;
10
+ /** Gas price with denomination (e.g., "1.0umfx") */
11
+ readonly gasPrice: string;
12
+ /** Gas adjustment multiplier (default: 1.3) */
13
+ readonly gasAdjustment?: number;
14
+ /** Address prefix (e.g., "manifest") */
15
+ readonly addressPrefix?: string;
16
+ }
17
+ /**
18
+ * Wallet provider interface for different wallet implementations
19
+ *
20
+ * Any wallet that provides an OfflineSigner works (Keplr, Web3Auth, Leap, cosmos-kit, etc.)
21
+ */
22
+ export interface WalletProvider {
23
+ /** Get the wallet's address */
24
+ getAddress(): Promise<string>;
25
+ /** Get the offline signer for signing transactions */
26
+ getSigner(): Promise<OfflineSigner>;
27
+ /** Optional: Connect to the wallet */
28
+ connect?(): Promise<void>;
29
+ /** Optional: Disconnect from the wallet */
30
+ disconnect?(): Promise<void>;
31
+ }
32
+ /**
33
+ * Result from a Cosmos query
34
+ */
35
+ export interface CosmosQueryResult {
36
+ readonly module: string;
37
+ readonly subcommand: string;
38
+ readonly result: Record<string, unknown>;
39
+ }
40
+ /**
41
+ * Result from a Cosmos transaction
42
+ */
43
+ export interface CosmosTxResult {
44
+ readonly module: string;
45
+ readonly subcommand: string;
46
+ readonly transactionHash: string;
47
+ readonly code: number;
48
+ readonly height: string;
49
+ readonly rawLog?: string;
50
+ confirmed?: boolean;
51
+ confirmationHeight?: string;
52
+ readonly gasUsed?: string;
53
+ readonly gasWanted?: string;
54
+ }
55
+ /**
56
+ * Module information for discovery
57
+ */
58
+ export interface ModuleInfo {
59
+ readonly name: string;
60
+ readonly description: string;
61
+ readonly args?: string;
62
+ }
63
+ /**
64
+ * Available modules listing
65
+ */
66
+ export interface AvailableModules {
67
+ readonly queryModules: readonly ModuleInfo[];
68
+ readonly txModules: readonly ModuleInfo[];
69
+ }
70
+ /**
71
+ * Error codes for ManifestMCPError
72
+ */
73
+ export declare enum ManifestMCPErrorCode {
74
+ INVALID_CONFIG = "INVALID_CONFIG",
75
+ MISSING_CONFIG = "MISSING_CONFIG",
76
+ WALLET_NOT_CONNECTED = "WALLET_NOT_CONNECTED",
77
+ WALLET_CONNECTION_FAILED = "WALLET_CONNECTION_FAILED",
78
+ KEPLR_NOT_INSTALLED = "KEPLR_NOT_INSTALLED",
79
+ INVALID_MNEMONIC = "INVALID_MNEMONIC",
80
+ CLIENT_NOT_INITIALIZED = "CLIENT_NOT_INITIALIZED",
81
+ RPC_CONNECTION_FAILED = "RPC_CONNECTION_FAILED",
82
+ QUERY_FAILED = "QUERY_FAILED",
83
+ UNSUPPORTED_QUERY = "UNSUPPORTED_QUERY",
84
+ INVALID_ADDRESS = "INVALID_ADDRESS",
85
+ TX_FAILED = "TX_FAILED",
86
+ TX_SIMULATION_FAILED = "TX_SIMULATION_FAILED",
87
+ TX_BROADCAST_FAILED = "TX_BROADCAST_FAILED",
88
+ TX_CONFIRMATION_TIMEOUT = "TX_CONFIRMATION_TIMEOUT",
89
+ UNSUPPORTED_TX = "UNSUPPORTED_TX",
90
+ INSUFFICIENT_FUNDS = "INSUFFICIENT_FUNDS",
91
+ UNKNOWN_MODULE = "UNKNOWN_MODULE",
92
+ UNKNOWN_SUBCOMMAND = "UNKNOWN_SUBCOMMAND",
93
+ UNKNOWN_ERROR = "UNKNOWN_ERROR"
94
+ }
95
+ /**
96
+ * Custom error class for Manifest MCP Browser errors
97
+ */
98
+ export declare class ManifestMCPError extends Error {
99
+ readonly code: ManifestMCPErrorCode;
100
+ readonly details?: Record<string, unknown>;
101
+ constructor(code: ManifestMCPErrorCode, message: string, details?: Record<string, unknown>);
102
+ toJSON(): Record<string, unknown>;
103
+ }
104
+ /**
105
+ * Account information
106
+ */
107
+ export interface AccountInfo {
108
+ readonly address: string;
109
+ }
110
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Error codes for ManifestMCPError
3
+ */
4
+ export var ManifestMCPErrorCode;
5
+ (function (ManifestMCPErrorCode) {
6
+ // Configuration errors
7
+ ManifestMCPErrorCode["INVALID_CONFIG"] = "INVALID_CONFIG";
8
+ ManifestMCPErrorCode["MISSING_CONFIG"] = "MISSING_CONFIG";
9
+ // Wallet errors
10
+ ManifestMCPErrorCode["WALLET_NOT_CONNECTED"] = "WALLET_NOT_CONNECTED";
11
+ ManifestMCPErrorCode["WALLET_CONNECTION_FAILED"] = "WALLET_CONNECTION_FAILED";
12
+ ManifestMCPErrorCode["KEPLR_NOT_INSTALLED"] = "KEPLR_NOT_INSTALLED";
13
+ ManifestMCPErrorCode["INVALID_MNEMONIC"] = "INVALID_MNEMONIC";
14
+ // Client errors
15
+ ManifestMCPErrorCode["CLIENT_NOT_INITIALIZED"] = "CLIENT_NOT_INITIALIZED";
16
+ ManifestMCPErrorCode["RPC_CONNECTION_FAILED"] = "RPC_CONNECTION_FAILED";
17
+ // Query errors
18
+ ManifestMCPErrorCode["QUERY_FAILED"] = "QUERY_FAILED";
19
+ ManifestMCPErrorCode["UNSUPPORTED_QUERY"] = "UNSUPPORTED_QUERY";
20
+ ManifestMCPErrorCode["INVALID_ADDRESS"] = "INVALID_ADDRESS";
21
+ // Transaction errors
22
+ ManifestMCPErrorCode["TX_FAILED"] = "TX_FAILED";
23
+ ManifestMCPErrorCode["TX_SIMULATION_FAILED"] = "TX_SIMULATION_FAILED";
24
+ ManifestMCPErrorCode["TX_BROADCAST_FAILED"] = "TX_BROADCAST_FAILED";
25
+ ManifestMCPErrorCode["TX_CONFIRMATION_TIMEOUT"] = "TX_CONFIRMATION_TIMEOUT";
26
+ ManifestMCPErrorCode["UNSUPPORTED_TX"] = "UNSUPPORTED_TX";
27
+ ManifestMCPErrorCode["INSUFFICIENT_FUNDS"] = "INSUFFICIENT_FUNDS";
28
+ // Module errors
29
+ ManifestMCPErrorCode["UNKNOWN_MODULE"] = "UNKNOWN_MODULE";
30
+ ManifestMCPErrorCode["UNKNOWN_SUBCOMMAND"] = "UNKNOWN_SUBCOMMAND";
31
+ // General errors
32
+ ManifestMCPErrorCode["UNKNOWN_ERROR"] = "UNKNOWN_ERROR";
33
+ })(ManifestMCPErrorCode || (ManifestMCPErrorCode = {}));
34
+ /**
35
+ * Custom error class for Manifest MCP Browser errors
36
+ */
37
+ export class ManifestMCPError extends Error {
38
+ constructor(code, message, details) {
39
+ super(message);
40
+ this.name = 'ManifestMCPError';
41
+ this.code = code;
42
+ this.details = details;
43
+ // Ensure proper prototype chain for instanceof checks
44
+ Object.setPrototypeOf(this, ManifestMCPError.prototype);
45
+ }
46
+ toJSON() {
47
+ return {
48
+ name: this.name,
49
+ code: this.code,
50
+ message: this.message,
51
+ details: this.details,
52
+ };
53
+ }
54
+ }
55
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AA4EA;;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"}
@@ -0,0 +1,3 @@
1
+ export type { WalletProvider } from '../types.js';
2
+ export { MnemonicWalletProvider } from './mnemonic.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/wallet/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { MnemonicWalletProvider } from './mnemonic.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/wallet/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keplr.d.ts","sourceRoot":"","sources":["../../src/wallet/keplr.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,KAAK,EAAE,MAAM,IAAI,WAAW,EAAa,MAAM,qBAAqB,CAAC;AAC5E,OAAO,EAAE,cAAc,EAA0C,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAExG,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAO,SAAQ,WAAW;KAAG;CACxC;AAED;;GAEG;AACH,qBAAa,mBAAoB,YAAW,cAAc;IACxD,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,OAAO,CAAuB;IACtC,OAAO,CAAC,MAAM,CAA8B;gBAEhC,MAAM,EAAE,iBAAiB;IAIrC;;OAEG;IACH,OAAO,CAAC,QAAQ;IAkBhB;;OAEG;IACH,OAAO,CAAC,YAAY;IA8CpB;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAkC9B;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAKjC;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC;IAenC;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,aAAa,CAAC;CAc1C"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keplr.js","sourceRoot":"","sources":["../../src/wallet/keplr.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ import { OfflineSigner } from '@cosmjs/proto-signing';
2
+ import { WalletProvider, ManifestMCPConfig } from '../types.js';
3
+ /**
4
+ * Mnemonic-based wallet provider for non-browser environments or testing
5
+ *
6
+ * SECURITY NOTE: The mnemonic is stored in memory until disconnect() is called.
7
+ * After disconnect(), the wallet cannot be reconnected - create a new instance instead.
8
+ */
9
+ export declare class MnemonicWalletProvider implements WalletProvider {
10
+ private config;
11
+ private mnemonic;
12
+ private wallet;
13
+ private address;
14
+ private disconnected;
15
+ constructor(config: ManifestMCPConfig, mnemonic: string);
16
+ /**
17
+ * Initialize the wallet from the mnemonic
18
+ */
19
+ private initWallet;
20
+ /**
21
+ * Connect (initialize) the wallet
22
+ */
23
+ connect(): Promise<void>;
24
+ /**
25
+ * Disconnect and securely clear all sensitive data
26
+ *
27
+ * IMPORTANT: After calling disconnect(), this wallet instance cannot be reused.
28
+ * Create a new MnemonicWalletProvider instance if you need to reconnect.
29
+ */
30
+ disconnect(): Promise<void>;
31
+ /**
32
+ * Get the wallet's address
33
+ */
34
+ getAddress(): Promise<string>;
35
+ /**
36
+ * Get the offline signer for signing transactions
37
+ */
38
+ getSigner(): Promise<OfflineSigner>;
39
+ }
40
+ //# sourceMappingURL=mnemonic.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,87 @@
1
+ import { DirectSecp256k1HdWallet } from '@cosmjs/proto-signing';
2
+ import { ManifestMCPError, ManifestMCPErrorCode } from '../types.js';
3
+ /**
4
+ * Mnemonic-based wallet provider for non-browser environments or testing
5
+ *
6
+ * SECURITY NOTE: The mnemonic is stored in memory until disconnect() is called.
7
+ * After disconnect(), the wallet cannot be reconnected - create a new instance instead.
8
+ */
9
+ export class MnemonicWalletProvider {
10
+ constructor(config, mnemonic) {
11
+ this.wallet = null;
12
+ this.address = null;
13
+ this.disconnected = false;
14
+ this.config = config;
15
+ this.mnemonic = mnemonic;
16
+ }
17
+ /**
18
+ * Initialize the wallet from the mnemonic
19
+ */
20
+ async initWallet() {
21
+ if (this.disconnected) {
22
+ throw new ManifestMCPError(ManifestMCPErrorCode.WALLET_NOT_CONNECTED, 'Wallet has been disconnected and cannot be reconnected. Create a new MnemonicWalletProvider instance.');
23
+ }
24
+ if (this.wallet) {
25
+ return;
26
+ }
27
+ if (!this.mnemonic) {
28
+ throw new ManifestMCPError(ManifestMCPErrorCode.WALLET_NOT_CONNECTED, 'Mnemonic has been cleared. Create a new MnemonicWalletProvider instance.');
29
+ }
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');
38
+ }
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
+ }
44
+ }
45
+ /**
46
+ * Connect (initialize) the wallet
47
+ */
48
+ async connect() {
49
+ await this.initWallet();
50
+ }
51
+ /**
52
+ * Disconnect and securely clear all sensitive data
53
+ *
54
+ * IMPORTANT: After calling disconnect(), this wallet instance cannot be reused.
55
+ * Create a new MnemonicWalletProvider instance if you need to reconnect.
56
+ */
57
+ async disconnect() {
58
+ // Clear the mnemonic by overwriting with empty string then nullifying
59
+ // Note: JavaScript strings are immutable, so we can't truly zero the memory,
60
+ // but we can remove all references to allow garbage collection
61
+ this.mnemonic = null;
62
+ this.wallet = null;
63
+ this.address = null;
64
+ this.disconnected = true;
65
+ }
66
+ /**
67
+ * Get the wallet's address
68
+ */
69
+ async getAddress() {
70
+ await this.initWallet();
71
+ if (!this.address) {
72
+ throw new ManifestMCPError(ManifestMCPErrorCode.WALLET_NOT_CONNECTED, 'Wallet failed to initialize');
73
+ }
74
+ return this.address;
75
+ }
76
+ /**
77
+ * Get the offline signer for signing transactions
78
+ */
79
+ async getSigner() {
80
+ await this.initWallet();
81
+ if (!this.wallet) {
82
+ throw new ManifestMCPError(ManifestMCPErrorCode.WALLET_NOT_CONNECTED, 'Wallet failed to initialize');
83
+ }
84
+ return this.wallet;
85
+ }
86
+ }
87
+ //# sourceMappingURL=mnemonic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mnemonic.js","sourceRoot":"","sources":["../../src/wallet/mnemonic.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,40 @@
1
+ {
2
+ "name": "@manifest-network/manifest-mcp-browser",
3
+ "version": "0.1.0",
4
+ "description": "Browser-compatible MCP server for Cosmos SDK blockchain interactions with Manifest Network using CosmJS",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "type": "module",
8
+ "exports": {
9
+ ".": {
10
+ "import": "./dist/index.js",
11
+ "types": "./dist/index.d.ts"
12
+ }
13
+ },
14
+ "scripts": {
15
+ "build": "tsc",
16
+ "dev": "tsc --watch",
17
+ "lint": "tsc --noEmit",
18
+ "test": "vitest run",
19
+ "test:watch": "vitest"
20
+ },
21
+ "keywords": [
22
+ "mcp",
23
+ "cosmos",
24
+ "cosmjs",
25
+ "blockchain",
26
+ "manifest",
27
+ "browser"
28
+ ],
29
+ "author": "Felix C. Morency",
30
+ "license": "MIT",
31
+ "dependencies": {
32
+ "@manifest-network/manifestjs": "2.2.0-billing-v2.0",
33
+ "@modelcontextprotocol/sdk": "^1.3.0"
34
+ },
35
+ "devDependencies": {
36
+ "@types/node": "^20.10.6",
37
+ "typescript": "^5.3.3",
38
+ "vitest": "^4.0.18"
39
+ }
40
+ }