@manifest-network/manifest-mcp-core 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 (237) hide show
  1. package/dist/__test-utils__/callTool.d.ts +29 -0
  2. package/dist/__test-utils__/callTool.d.ts.map +1 -0
  3. package/dist/__test-utils__/callTool.js +45 -0
  4. package/dist/__test-utils__/callTool.js.map +1 -0
  5. package/dist/__test-utils__/mocks.d.ts +125 -0
  6. package/dist/__test-utils__/mocks.d.ts.map +1 -0
  7. package/dist/__test-utils__/mocks.js +146 -0
  8. package/dist/__test-utils__/mocks.js.map +1 -0
  9. package/dist/client.d.ts +67 -0
  10. package/dist/client.d.ts.map +1 -0
  11. package/dist/client.js +209 -0
  12. package/dist/client.js.map +1 -0
  13. package/dist/config.d.ts +30 -0
  14. package/dist/config.d.ts.map +1 -0
  15. package/dist/config.js +127 -0
  16. package/dist/config.js.map +1 -0
  17. package/dist/cosmos.d.ts +24 -0
  18. package/dist/cosmos.d.ts.map +1 -0
  19. package/dist/cosmos.js +85 -0
  20. package/dist/cosmos.js.map +1 -0
  21. package/dist/index.d.ts +19 -0
  22. package/dist/index.js +20 -0
  23. package/dist/lcd-adapter.d.ts +15 -0
  24. package/dist/lcd-adapter.d.ts.map +1 -0
  25. package/dist/lcd-adapter.js +98 -0
  26. package/dist/lcd-adapter.js.map +1 -0
  27. package/dist/logger.d.ts +20 -0
  28. package/dist/logger.d.ts.map +1 -0
  29. package/dist/logger.js +43 -0
  30. package/dist/logger.js.map +1 -0
  31. package/dist/modules.d.ts +63 -0
  32. package/dist/modules.d.ts.map +1 -0
  33. package/dist/modules.js +759 -0
  34. package/dist/modules.js.map +1 -0
  35. package/dist/node_modules/@jridgewell/sourcemap-codec/dist/sourcemap-codec.js +78 -0
  36. package/dist/node_modules/@jridgewell/sourcemap-codec/dist/sourcemap-codec.js.map +1 -0
  37. package/dist/node_modules/@vitest/expect/dist/index.d.ts +802 -0
  38. package/dist/node_modules/@vitest/expect/dist/index.d.ts.map +1 -0
  39. package/dist/node_modules/@vitest/expect/dist/index.js +1457 -0
  40. package/dist/node_modules/@vitest/expect/dist/index.js.map +1 -0
  41. package/dist/node_modules/@vitest/pretty-format/dist/index.d.ts +95 -0
  42. package/dist/node_modules/@vitest/pretty-format/dist/index.d.ts.map +1 -0
  43. package/dist/node_modules/@vitest/pretty-format/dist/index.js +877 -0
  44. package/dist/node_modules/@vitest/pretty-format/dist/index.js.map +1 -0
  45. package/dist/node_modules/@vitest/runner/dist/chunk-tasks.js +91 -0
  46. package/dist/node_modules/@vitest/runner/dist/chunk-tasks.js.map +1 -0
  47. package/dist/node_modules/@vitest/runner/dist/index.js +1381 -0
  48. package/dist/node_modules/@vitest/runner/dist/index.js.map +1 -0
  49. package/dist/node_modules/@vitest/runner/dist/tasks.d-D2GKpdwQ.d.ts +540 -0
  50. package/dist/node_modules/@vitest/runner/dist/tasks.d-D2GKpdwQ.d.ts.map +1 -0
  51. package/dist/node_modules/@vitest/runner/dist/utils.js +1 -0
  52. package/dist/node_modules/@vitest/snapshot/dist/environment.d-DOJxxZV9.d.ts +16 -0
  53. package/dist/node_modules/@vitest/snapshot/dist/environment.d-DOJxxZV9.d.ts.map +1 -0
  54. package/dist/node_modules/@vitest/snapshot/dist/index.d.ts +89 -0
  55. package/dist/node_modules/@vitest/snapshot/dist/index.d.ts.map +1 -0
  56. package/dist/node_modules/@vitest/snapshot/dist/index.js +649 -0
  57. package/dist/node_modules/@vitest/snapshot/dist/index.js.map +1 -0
  58. package/dist/node_modules/@vitest/snapshot/dist/rawSnapshot.d-U2kJUxDr.d.ts +40 -0
  59. package/dist/node_modules/@vitest/snapshot/dist/rawSnapshot.d-U2kJUxDr.d.ts.map +1 -0
  60. package/dist/node_modules/@vitest/spy/dist/index.d.ts +343 -0
  61. package/dist/node_modules/@vitest/spy/dist/index.d.ts.map +1 -0
  62. package/dist/node_modules/@vitest/spy/dist/index.js +386 -0
  63. package/dist/node_modules/@vitest/spy/dist/index.js.map +1 -0
  64. package/dist/node_modules/@vitest/utils/dist/chunk-pathe.M-eThtNZ.js +82 -0
  65. package/dist/node_modules/@vitest/utils/dist/chunk-pathe.M-eThtNZ.js.map +1 -0
  66. package/dist/node_modules/@vitest/utils/dist/diff.d.ts +14 -0
  67. package/dist/node_modules/@vitest/utils/dist/diff.d.ts.map +1 -0
  68. package/dist/node_modules/@vitest/utils/dist/diff.js +1297 -0
  69. package/dist/node_modules/@vitest/utils/dist/diff.js.map +1 -0
  70. package/dist/node_modules/@vitest/utils/dist/display.d.ts +15 -0
  71. package/dist/node_modules/@vitest/utils/dist/display.d.ts.map +1 -0
  72. package/dist/node_modules/@vitest/utils/dist/display.js +558 -0
  73. package/dist/node_modules/@vitest/utils/dist/display.js.map +1 -0
  74. package/dist/node_modules/@vitest/utils/dist/error.js +30 -0
  75. package/dist/node_modules/@vitest/utils/dist/error.js.map +1 -0
  76. package/dist/node_modules/@vitest/utils/dist/helpers.js +181 -0
  77. package/dist/node_modules/@vitest/utils/dist/helpers.js.map +1 -0
  78. package/dist/node_modules/@vitest/utils/dist/offset.js +27 -0
  79. package/dist/node_modules/@vitest/utils/dist/offset.js.map +1 -0
  80. package/dist/node_modules/@vitest/utils/dist/serialize.js +77 -0
  81. package/dist/node_modules/@vitest/utils/dist/serialize.js.map +1 -0
  82. package/dist/node_modules/@vitest/utils/dist/source-map.js +367 -0
  83. package/dist/node_modules/@vitest/utils/dist/source-map.js.map +1 -0
  84. package/dist/node_modules/@vitest/utils/dist/timers.js +37 -0
  85. package/dist/node_modules/@vitest/utils/dist/timers.js.map +1 -0
  86. package/dist/node_modules/@vitest/utils/dist/types.d-BCElaP-c.d.ts +38 -0
  87. package/dist/node_modules/@vitest/utils/dist/types.d-BCElaP-c.d.ts.map +1 -0
  88. package/dist/node_modules/@vitest/utils/dist/types.d.ts +25 -0
  89. package/dist/node_modules/@vitest/utils/dist/types.d.ts.map +1 -0
  90. package/dist/node_modules/chai/index.js +2875 -0
  91. package/dist/node_modules/chai/index.js.map +1 -0
  92. package/dist/node_modules/magic-string/dist/magic-string.es.js +939 -0
  93. package/dist/node_modules/magic-string/dist/magic-string.es.js.map +1 -0
  94. package/dist/node_modules/pathe/dist/shared/pathe.M-eThtNZ.js +85 -0
  95. package/dist/node_modules/pathe/dist/shared/pathe.M-eThtNZ.js.map +1 -0
  96. package/dist/node_modules/tinybench/dist/index.d.ts +91 -0
  97. package/dist/node_modules/tinybench/dist/index.d.ts.map +1 -0
  98. package/dist/node_modules/tinyrainbow/dist/index.d.ts +9 -0
  99. package/dist/node_modules/tinyrainbow/dist/index.d.ts.map +1 -0
  100. package/dist/node_modules/tinyrainbow/dist/index.js +86 -0
  101. package/dist/node_modules/tinyrainbow/dist/index.js.map +1 -0
  102. package/dist/node_modules/vitest/dist/chunks/_commonjsHelpers.D26ty3Ew.js +6 -0
  103. package/dist/node_modules/vitest/dist/chunks/_commonjsHelpers.D26ty3Ew.js.map +1 -0
  104. package/dist/node_modules/vitest/dist/chunks/benchmark.D0SlKNbZ.js +41 -0
  105. package/dist/node_modules/vitest/dist/chunks/benchmark.D0SlKNbZ.js.map +1 -0
  106. package/dist/node_modules/vitest/dist/chunks/benchmark.d.DAaHLpsq.d.ts +12 -0
  107. package/dist/node_modules/vitest/dist/chunks/benchmark.d.DAaHLpsq.d.ts.map +1 -0
  108. package/dist/node_modules/vitest/dist/chunks/global.d.x-ILCfAE.d.ts +100 -0
  109. package/dist/node_modules/vitest/dist/chunks/global.d.x-ILCfAE.d.ts.map +1 -0
  110. package/dist/node_modules/vitest/dist/chunks/rpc.MzXet3jl.js +57 -0
  111. package/dist/node_modules/vitest/dist/chunks/rpc.MzXet3jl.js.map +1 -0
  112. package/dist/node_modules/vitest/dist/chunks/rpc.d.BFMWpdph.d.ts +13 -0
  113. package/dist/node_modules/vitest/dist/chunks/rpc.d.BFMWpdph.d.ts.map +1 -0
  114. package/dist/node_modules/vitest/dist/chunks/test.CTcmp4Su.js +2791 -0
  115. package/dist/node_modules/vitest/dist/chunks/test.CTcmp4Su.js.map +1 -0
  116. package/dist/node_modules/vitest/dist/chunks/utils.BX5Fg8C4.js +44 -0
  117. package/dist/node_modules/vitest/dist/chunks/utils.BX5Fg8C4.js.map +1 -0
  118. package/dist/node_modules/vitest/dist/index.d.ts +9 -0
  119. package/dist/queries/auth.d.ts +15 -0
  120. package/dist/queries/auth.d.ts.map +1 -0
  121. package/dist/queries/auth.js +58 -0
  122. package/dist/queries/auth.js.map +1 -0
  123. package/dist/queries/bank.d.ts +15 -0
  124. package/dist/queries/bank.d.ts.map +1 -0
  125. package/dist/queries/bank.js +93 -0
  126. package/dist/queries/bank.js.map +1 -0
  127. package/dist/queries/billing.d.ts +15 -0
  128. package/dist/queries/billing.d.ts.map +1 -0
  129. package/dist/queries/billing.js +114 -0
  130. package/dist/queries/billing.js.map +1 -0
  131. package/dist/queries/distribution.d.ts +15 -0
  132. package/dist/queries/distribution.d.ts.map +1 -0
  133. package/dist/queries/distribution.js +73 -0
  134. package/dist/queries/distribution.js.map +1 -0
  135. package/dist/queries/gov.d.ts +15 -0
  136. package/dist/queries/gov.d.ts.map +1 -0
  137. package/dist/queries/gov.js +98 -0
  138. package/dist/queries/gov.js.map +1 -0
  139. package/dist/queries/group.d.ts +15 -0
  140. package/dist/queries/group.d.ts.map +1 -0
  141. package/dist/queries/group.js +159 -0
  142. package/dist/queries/group.js.map +1 -0
  143. package/dist/queries/index.d.ts +10 -0
  144. package/dist/queries/index.js +10 -0
  145. package/dist/queries/sku.d.ts +16 -0
  146. package/dist/queries/sku.d.ts.map +1 -0
  147. package/dist/queries/sku.js +85 -0
  148. package/dist/queries/sku.js.map +1 -0
  149. package/dist/queries/staking.d.ts +15 -0
  150. package/dist/queries/staking.d.ts.map +1 -0
  151. package/dist/queries/staking.js +127 -0
  152. package/dist/queries/staking.js.map +1 -0
  153. package/dist/queries/utils.d.ts +54 -0
  154. package/dist/queries/utils.d.ts.map +1 -0
  155. package/dist/queries/utils.js +74 -0
  156. package/dist/queries/utils.js.map +1 -0
  157. package/dist/retry.d.ts +48 -0
  158. package/dist/retry.d.ts.map +1 -0
  159. package/dist/retry.js +106 -0
  160. package/dist/retry.js.map +1 -0
  161. package/dist/server-utils.d.ts +61 -0
  162. package/dist/server-utils.d.ts.map +1 -0
  163. package/dist/server-utils.js +156 -0
  164. package/dist/server-utils.js.map +1 -0
  165. package/dist/tools/fundCredits.d.ts +8 -0
  166. package/dist/tools/fundCredits.d.ts.map +1 -0
  167. package/dist/tools/fundCredits.js +9 -0
  168. package/dist/tools/fundCredits.js.map +1 -0
  169. package/dist/tools/getBalance.d.ts +26 -0
  170. package/dist/tools/getBalance.d.ts.map +1 -0
  171. package/dist/tools/getBalance.js +59 -0
  172. package/dist/tools/getBalance.js.map +1 -0
  173. package/dist/tools/stopApp.d.ts +13 -0
  174. package/dist/tools/stopApp.d.ts.map +1 -0
  175. package/dist/tools/stopApp.js +15 -0
  176. package/dist/tools/stopApp.js.map +1 -0
  177. package/dist/transactions/bank.d.ts +11 -0
  178. package/dist/transactions/bank.d.ts.map +1 -0
  179. package/dist/transactions/bank.js +75 -0
  180. package/dist/transactions/bank.js.map +1 -0
  181. package/dist/transactions/billing.d.ts +11 -0
  182. package/dist/transactions/billing.d.ts.map +1 -0
  183. package/dist/transactions/billing.js +189 -0
  184. package/dist/transactions/billing.js.map +1 -0
  185. package/dist/transactions/distribution.d.ts +11 -0
  186. package/dist/transactions/distribution.d.ts.map +1 -0
  187. package/dist/transactions/distribution.js +60 -0
  188. package/dist/transactions/distribution.js.map +1 -0
  189. package/dist/transactions/gov.d.ts +11 -0
  190. package/dist/transactions/gov.d.ts.map +1 -0
  191. package/dist/transactions/gov.js +108 -0
  192. package/dist/transactions/gov.js.map +1 -0
  193. package/dist/transactions/group.d.ts +11 -0
  194. package/dist/transactions/group.d.ts.map +1 -0
  195. package/dist/transactions/group.js +347 -0
  196. package/dist/transactions/group.js.map +1 -0
  197. package/dist/transactions/index.d.ts +10 -0
  198. package/dist/transactions/index.js +10 -0
  199. package/dist/transactions/manifest.d.ts +11 -0
  200. package/dist/transactions/manifest.d.ts.map +1 -0
  201. package/dist/transactions/manifest.js +59 -0
  202. package/dist/transactions/manifest.js.map +1 -0
  203. package/dist/transactions/sku.d.ts +11 -0
  204. package/dist/transactions/sku.d.ts.map +1 -0
  205. package/dist/transactions/sku.js +191 -0
  206. package/dist/transactions/sku.js.map +1 -0
  207. package/dist/transactions/staking.d.ts +11 -0
  208. package/dist/transactions/staking.d.ts.map +1 -0
  209. package/dist/transactions/staking.js +79 -0
  210. package/dist/transactions/staking.js.map +1 -0
  211. package/dist/transactions/utils.d.ts +161 -0
  212. package/dist/transactions/utils.d.ts.map +1 -0
  213. package/dist/transactions/utils.js +272 -0
  214. package/dist/transactions/utils.js.map +1 -0
  215. package/dist/types.d.ts +390 -0
  216. package/dist/types.d.ts.map +1 -0
  217. package/dist/types.js +45 -0
  218. package/dist/types.js.map +1 -0
  219. package/dist/validation.d.ts +30 -0
  220. package/dist/validation.d.ts.map +1 -0
  221. package/dist/validation.js +53 -0
  222. package/dist/validation.js.map +1 -0
  223. package/dist/version.d.ts +5 -0
  224. package/dist/version.d.ts.map +1 -0
  225. package/dist/version.js +6 -0
  226. package/dist/version.js.map +1 -0
  227. package/dist/wallet/index.d.ts +4 -0
  228. package/dist/wallet/index.js +3 -0
  229. package/dist/wallet/mnemonic.d.ts +47 -0
  230. package/dist/wallet/mnemonic.d.ts.map +1 -0
  231. package/dist/wallet/mnemonic.js +97 -0
  232. package/dist/wallet/mnemonic.js.map +1 -0
  233. package/dist/wallet/sign-arbitrary.d.ts +12 -0
  234. package/dist/wallet/sign-arbitrary.d.ts.map +1 -0
  235. package/dist/wallet/sign-arbitrary.js +36 -0
  236. package/dist/wallet/sign-arbitrary.js.map +1 -0
  237. package/package.json +72 -0
@@ -0,0 +1,75 @@
1
+ import { buildTxResult, extractFlag, filterConsumedArgs, parseAmount, parseColonPair, requireArgs, validateAddress, validateArgsLength, validateMemo } from "./utils.js";
2
+ import { throwUnsupportedSubcommand } from "../modules.js";
3
+ import { cosmos } from "@manifest-network/manifestjs";
4
+ //#region src/transactions/bank.ts
5
+ const { MsgSend, MsgMultiSend } = cosmos.bank.v1beta1;
6
+ /**
7
+ * Route bank transaction to appropriate handler
8
+ */
9
+ async function routeBankTransaction(client, senderAddress, subcommand, args, waitForConfirmation) {
10
+ validateArgsLength(args, "bank transaction");
11
+ switch (subcommand) {
12
+ case "send": {
13
+ const memoFlag = extractFlag(args, "--memo", "bank send");
14
+ const positionalArgs = filterConsumedArgs(args, memoFlag.consumedIndices);
15
+ requireArgs(positionalArgs, 2, ["recipient-address", "amount"], "bank send");
16
+ const [recipientAddress, amountStr] = positionalArgs;
17
+ validateAddress(recipientAddress, "recipient address");
18
+ const { amount, denom } = parseAmount(amountStr);
19
+ const memo = memoFlag.value ?? "";
20
+ if (memo) validateMemo(memo);
21
+ const msg = {
22
+ typeUrl: "/cosmos.bank.v1beta1.MsgSend",
23
+ value: MsgSend.fromPartial({
24
+ fromAddress: senderAddress,
25
+ toAddress: recipientAddress,
26
+ amount: [{
27
+ denom,
28
+ amount
29
+ }]
30
+ })
31
+ };
32
+ return buildTxResult("bank", "send", await client.signAndBroadcast(senderAddress, [msg], "auto", memo), waitForConfirmation);
33
+ }
34
+ case "multi-send": {
35
+ requireArgs(args, 1, ["recipient:amount"], "bank multi-send");
36
+ const outputs = args.map((arg) => {
37
+ const [address, amountStr] = parseColonPair(arg, "address", "amount", "multi-send");
38
+ validateAddress(address, "recipient address");
39
+ const { amount, denom } = parseAmount(amountStr);
40
+ return {
41
+ address,
42
+ coins: [{
43
+ denom,
44
+ amount
45
+ }]
46
+ };
47
+ });
48
+ const totalByDenom = /* @__PURE__ */ new Map();
49
+ for (const output of outputs) for (const coin of output.coins) {
50
+ const current = totalByDenom.get(coin.denom) || BigInt(0);
51
+ totalByDenom.set(coin.denom, current + BigInt(coin.amount));
52
+ }
53
+ const inputCoins = Array.from(totalByDenom.entries()).map(([denom, amount]) => ({
54
+ denom,
55
+ amount: amount.toString()
56
+ }));
57
+ const msg = {
58
+ typeUrl: "/cosmos.bank.v1beta1.MsgMultiSend",
59
+ value: MsgMultiSend.fromPartial({
60
+ inputs: [{
61
+ address: senderAddress,
62
+ coins: inputCoins
63
+ }],
64
+ outputs
65
+ })
66
+ };
67
+ return buildTxResult("bank", "multi-send", await client.signAndBroadcast(senderAddress, [msg], "auto"), waitForConfirmation);
68
+ }
69
+ default: throwUnsupportedSubcommand("tx", "bank", subcommand);
70
+ }
71
+ }
72
+ //#endregion
73
+ export { routeBankTransaction };
74
+
75
+ //# sourceMappingURL=bank.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bank.js","names":[],"sources":["../../src/transactions/bank.ts"],"sourcesContent":["import type { SigningStargateClient } from '@cosmjs/stargate';\nimport { cosmos } from '@manifest-network/manifestjs';\nimport { throwUnsupportedSubcommand } from '../modules.js';\nimport type { CosmosTxResult } from '../types.js';\nimport {\n buildTxResult,\n extractFlag,\n filterConsumedArgs,\n parseAmount,\n parseColonPair,\n requireArgs,\n validateAddress,\n validateArgsLength,\n validateMemo,\n} from './utils.js';\n\nconst { MsgSend, MsgMultiSend } = cosmos.bank.v1beta1;\n\n/**\n * Route bank transaction to appropriate handler\n */\nexport async function routeBankTransaction(\n client: SigningStargateClient,\n senderAddress: string,\n subcommand: string,\n args: string[],\n waitForConfirmation: boolean,\n): Promise<CosmosTxResult> {\n validateArgsLength(args, 'bank transaction');\n\n switch (subcommand) {\n case 'send': {\n // Extract optional flags before positional args\n const memoFlag = extractFlag(args, '--memo', 'bank send');\n const positionalArgs = filterConsumedArgs(args, memoFlag.consumedIndices);\n\n requireArgs(\n positionalArgs,\n 2,\n ['recipient-address', 'amount'],\n 'bank send',\n );\n const [recipientAddress, amountStr] = positionalArgs;\n validateAddress(recipientAddress, 'recipient address');\n const { amount, denom } = parseAmount(amountStr);\n const memo = memoFlag.value ?? '';\n if (memo) {\n validateMemo(memo);\n }\n\n const msg = {\n typeUrl: '/cosmos.bank.v1beta1.MsgSend',\n value: MsgSend.fromPartial({\n fromAddress: senderAddress,\n toAddress: recipientAddress,\n amount: [{ denom, amount }],\n }),\n };\n\n const result = await client.signAndBroadcast(\n senderAddress,\n [msg],\n 'auto',\n memo,\n );\n return buildTxResult('bank', 'send', result, waitForConfirmation);\n }\n\n case 'multi-send': {\n requireArgs(args, 1, ['recipient:amount'], 'bank multi-send');\n // Parse format: multi-send recipient1:amount1 recipient2:amount2 ...\n const outputs = args.map((arg) => {\n const [address, amountStr] = parseColonPair(\n arg,\n 'address',\n 'amount',\n 'multi-send',\n );\n validateAddress(address, 'recipient address');\n const { amount, denom } = parseAmount(amountStr);\n return { address, coins: [{ denom, amount }] };\n });\n\n // Calculate total input\n const totalByDenom = new Map<string, bigint>();\n for (const output of outputs) {\n for (const coin of output.coins) {\n const current = totalByDenom.get(coin.denom) || BigInt(0);\n totalByDenom.set(coin.denom, current + BigInt(coin.amount));\n }\n }\n\n const inputCoins = Array.from(totalByDenom.entries()).map(\n ([denom, amount]) => ({\n denom,\n amount: amount.toString(),\n }),\n );\n\n const msg = {\n typeUrl: '/cosmos.bank.v1beta1.MsgMultiSend',\n value: MsgMultiSend.fromPartial({\n inputs: [{ address: senderAddress, coins: inputCoins }],\n outputs,\n }),\n };\n\n const result = await client.signAndBroadcast(\n senderAddress,\n [msg],\n 'auto',\n );\n return buildTxResult('bank', 'multi-send', result, waitForConfirmation);\n }\n\n default:\n throwUnsupportedSubcommand('tx', 'bank', subcommand);\n }\n}\n"],"mappings":";;;;AAgBA,MAAM,EAAE,SAAS,iBAAiB,OAAO,KAAK;;;;AAK9C,eAAsB,qBACpB,QACA,eACA,YACA,MACA,qBACyB;AACzB,oBAAmB,MAAM,mBAAmB;AAE5C,SAAQ,YAAR;EACE,KAAK,QAAQ;GAEX,MAAM,WAAW,YAAY,MAAM,UAAU,YAAY;GACzD,MAAM,iBAAiB,mBAAmB,MAAM,SAAS,gBAAgB;AAEzE,eACE,gBACA,GACA,CAAC,qBAAqB,SAAS,EAC/B,YACD;GACD,MAAM,CAAC,kBAAkB,aAAa;AACtC,mBAAgB,kBAAkB,oBAAoB;GACtD,MAAM,EAAE,QAAQ,UAAU,YAAY,UAAU;GAChD,MAAM,OAAO,SAAS,SAAS;AAC/B,OAAI,KACF,cAAa,KAAK;GAGpB,MAAM,MAAM;IACV,SAAS;IACT,OAAO,QAAQ,YAAY;KACzB,aAAa;KACb,WAAW;KACX,QAAQ,CAAC;MAAE;MAAO;MAAQ,CAAC;KAC5B,CAAC;IACH;AAQD,UAAO,cAAc,QAAQ,QANd,MAAM,OAAO,iBAC1B,eACA,CAAC,IAAI,EACL,QACA,KACD,EAC4C,oBAAoB;;EAGnE,KAAK,cAAc;AACjB,eAAY,MAAM,GAAG,CAAC,mBAAmB,EAAE,kBAAkB;GAE7D,MAAM,UAAU,KAAK,KAAK,QAAQ;IAChC,MAAM,CAAC,SAAS,aAAa,eAC3B,KACA,WACA,UACA,aACD;AACD,oBAAgB,SAAS,oBAAoB;IAC7C,MAAM,EAAE,QAAQ,UAAU,YAAY,UAAU;AAChD,WAAO;KAAE;KAAS,OAAO,CAAC;MAAE;MAAO;MAAQ,CAAC;KAAE;KAC9C;GAGF,MAAM,+BAAe,IAAI,KAAqB;AAC9C,QAAK,MAAM,UAAU,QACnB,MAAK,MAAM,QAAQ,OAAO,OAAO;IAC/B,MAAM,UAAU,aAAa,IAAI,KAAK,MAAM,IAAI,OAAO,EAAE;AACzD,iBAAa,IAAI,KAAK,OAAO,UAAU,OAAO,KAAK,OAAO,CAAC;;GAI/D,MAAM,aAAa,MAAM,KAAK,aAAa,SAAS,CAAC,CAAC,KACnD,CAAC,OAAO,aAAa;IACpB;IACA,QAAQ,OAAO,UAAU;IAC1B,EACF;GAED,MAAM,MAAM;IACV,SAAS;IACT,OAAO,aAAa,YAAY;KAC9B,QAAQ,CAAC;MAAE,SAAS;MAAe,OAAO;MAAY,CAAC;KACvD;KACD,CAAC;IACH;AAOD,UAAO,cAAc,QAAQ,cALd,MAAM,OAAO,iBAC1B,eACA,CAAC,IAAI,EACL,OACD,EACkD,oBAAoB;;EAGzE,QACE,4BAA2B,MAAM,QAAQ,WAAW"}
@@ -0,0 +1,11 @@
1
+ import { CosmosTxResult } from "../types.js";
2
+ import { SigningStargateClient } from "@cosmjs/stargate";
3
+
4
+ //#region src/transactions/billing.d.ts
5
+ /**
6
+ * Route billing transaction to appropriate handler
7
+ */
8
+ declare function routeBillingTransaction(client: SigningStargateClient, senderAddress: string, subcommand: string, args: string[], waitForConfirmation: boolean): Promise<CosmosTxResult>;
9
+ //#endregion
10
+ export { routeBillingTransaction };
11
+ //# sourceMappingURL=billing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"billing.d.ts","names":[],"sources":["../../src/transactions/billing.ts"],"mappings":";;;;;;AAqCA;iBAAsB,uBAAA,CACpB,MAAA,EAAQ,qBAAA,EACR,aAAA,UACA,UAAA,UACA,IAAA,YACA,mBAAA,YACC,OAAA,CAAQ,cAAA"}
@@ -0,0 +1,189 @@
1
+ import { ManifestMCPError, ManifestMCPErrorCode } from "../types.js";
2
+ import { buildTxResult, extractFlag, filterConsumedArgs, parseAmount, parseBigInt, parseHexBytes, parseLeaseItem, requireArgs, validateAddress, validateArgsLength } from "./utils.js";
3
+ import { getSubcommandUsage, throwUnsupportedSubcommand } from "../modules.js";
4
+ import { liftedinit } from "@manifest-network/manifestjs";
5
+ //#region src/transactions/billing.ts
6
+ const { MsgFundCredit, MsgCreateLease, MsgCloseLease, MsgWithdraw, MsgCreateLeaseForTenant, MsgAcknowledgeLease, MsgRejectLease, MsgCancelLease, MsgUpdateParams } = liftedinit.billing.v1;
7
+ /**
8
+ * Route billing transaction to appropriate handler
9
+ */
10
+ async function routeBillingTransaction(client, senderAddress, subcommand, args, waitForConfirmation) {
11
+ validateArgsLength(args, "billing transaction");
12
+ switch (subcommand) {
13
+ case "fund-credit": {
14
+ requireArgs(args, 2, ["tenant-address", "amount"], "billing fund-credit");
15
+ const [tenant, amountStr] = args;
16
+ validateAddress(tenant, "tenant address");
17
+ const { amount, denom } = parseAmount(amountStr);
18
+ const msg = {
19
+ typeUrl: "/liftedinit.billing.v1.MsgFundCredit",
20
+ value: MsgFundCredit.fromPartial({
21
+ sender: senderAddress,
22
+ tenant,
23
+ amount: {
24
+ denom,
25
+ amount
26
+ }
27
+ })
28
+ };
29
+ return buildTxResult("billing", "fund-credit", await client.signAndBroadcast(senderAddress, [msg], "auto"), waitForConfirmation);
30
+ }
31
+ case "create-lease": {
32
+ const { value: metaHashHex, consumedIndices } = extractFlag(args, "--meta-hash", "billing create-lease");
33
+ const metaHash = metaHashHex ? parseHexBytes(metaHashHex, "meta-hash", 64) : void 0;
34
+ const itemArgs = filterConsumedArgs(args, consumedIndices);
35
+ requireArgs(itemArgs, 1, ["sku-uuid:quantity[:service-name]"], "billing create-lease");
36
+ const items = itemArgs.map((arg) => parseLeaseItem(arg));
37
+ const msg = {
38
+ typeUrl: "/liftedinit.billing.v1.MsgCreateLease",
39
+ value: MsgCreateLease.fromPartial({
40
+ tenant: senderAddress,
41
+ items,
42
+ metaHash: metaHash ?? new Uint8Array()
43
+ })
44
+ };
45
+ return buildTxResult("billing", "create-lease", await client.signAndBroadcast(senderAddress, [msg], "auto"), waitForConfirmation);
46
+ }
47
+ case "close-lease": {
48
+ const { value: reason, consumedIndices } = extractFlag(args, "--reason", "billing close-lease");
49
+ const leaseArgs = filterConsumedArgs(args, consumedIndices);
50
+ requireArgs(leaseArgs, 1, ["lease-uuid"], "billing close-lease");
51
+ const leaseUuids = leaseArgs;
52
+ const msg = {
53
+ typeUrl: "/liftedinit.billing.v1.MsgCloseLease",
54
+ value: MsgCloseLease.fromPartial({
55
+ sender: senderAddress,
56
+ leaseUuids,
57
+ reason: reason ?? ""
58
+ })
59
+ };
60
+ return buildTxResult("billing", "close-lease", await client.signAndBroadcast(senderAddress, [msg], "auto"), waitForConfirmation);
61
+ }
62
+ case "withdraw": {
63
+ requireArgs(args, 1, ["lease-uuid or --provider"], "billing withdraw");
64
+ const providerFlag = extractFlag(args, "--provider", "billing withdraw");
65
+ const limitFlag = extractFlag(args, "--limit", "billing withdraw");
66
+ let leaseUuids = [];
67
+ let providerUuid = "";
68
+ let limit = BigInt(0);
69
+ if (providerFlag.value) {
70
+ providerUuid = providerFlag.value;
71
+ if (limitFlag.value) {
72
+ limit = parseBigInt(limitFlag.value, "limit");
73
+ if (limit < BigInt(1) || limit > BigInt(100)) throw new ManifestMCPError(ManifestMCPErrorCode.TX_FAILED, `Invalid limit: ${limit}. Must be between 1 and 100.`);
74
+ }
75
+ const extraArgs = filterConsumedArgs(args, [...providerFlag.consumedIndices, ...limitFlag.consumedIndices]);
76
+ if (extraArgs.length > 0) {
77
+ const usage = getSubcommandUsage("tx", "billing", "withdraw");
78
+ throw new ManifestMCPError(ManifestMCPErrorCode.TX_FAILED, `Provider-wide withdrawal does not accept additional arguments. Got unexpected: ${extraArgs.map((a) => `"${a}"`).join(", ")}. For lease-specific withdrawal, omit --provider flag. Usage: withdraw ${usage ?? "<args>"}`);
79
+ }
80
+ } else {
81
+ const unexpectedFlags = args.filter((arg) => arg.startsWith("--"));
82
+ if (unexpectedFlags.length > 0) {
83
+ const usage = getSubcommandUsage("tx", "billing", "withdraw");
84
+ throw new ManifestMCPError(ManifestMCPErrorCode.TX_FAILED, `Unexpected flag(s) in lease-specific withdrawal mode: ${unexpectedFlags.join(", ")}. Use --provider for provider-wide withdrawal. Usage: withdraw ${usage ?? "<args>"}`);
85
+ }
86
+ leaseUuids = args;
87
+ }
88
+ const msg = {
89
+ typeUrl: "/liftedinit.billing.v1.MsgWithdraw",
90
+ value: MsgWithdraw.fromPartial({
91
+ sender: senderAddress,
92
+ leaseUuids,
93
+ providerUuid,
94
+ limit
95
+ })
96
+ };
97
+ return buildTxResult("billing", "withdraw", await client.signAndBroadcast(senderAddress, [msg], "auto"), waitForConfirmation);
98
+ }
99
+ case "create-lease-for-tenant": {
100
+ const { value: metaHashHex, consumedIndices } = extractFlag(args, "--meta-hash", "billing create-lease-for-tenant");
101
+ const metaHash = metaHashHex ? parseHexBytes(metaHashHex, "meta-hash", 64) : void 0;
102
+ const remainingArgs = filterConsumedArgs(args, consumedIndices);
103
+ requireArgs(remainingArgs, 2, ["tenant-address", "sku-uuid:quantity[:service-name]"], "billing create-lease-for-tenant");
104
+ const [tenant, ...itemArgs] = remainingArgs;
105
+ validateAddress(tenant, "tenant address");
106
+ const items = itemArgs.map((arg) => parseLeaseItem(arg));
107
+ const msg = {
108
+ typeUrl: "/liftedinit.billing.v1.MsgCreateLeaseForTenant",
109
+ value: MsgCreateLeaseForTenant.fromPartial({
110
+ authority: senderAddress,
111
+ tenant,
112
+ items,
113
+ metaHash: metaHash ?? new Uint8Array()
114
+ })
115
+ };
116
+ return buildTxResult("billing", "create-lease-for-tenant", await client.signAndBroadcast(senderAddress, [msg], "auto"), waitForConfirmation);
117
+ }
118
+ case "acknowledge-lease": {
119
+ requireArgs(args, 1, ["lease-uuid"], "billing acknowledge-lease");
120
+ const leaseUuids = args;
121
+ const msg = {
122
+ typeUrl: "/liftedinit.billing.v1.MsgAcknowledgeLease",
123
+ value: MsgAcknowledgeLease.fromPartial({
124
+ sender: senderAddress,
125
+ leaseUuids
126
+ })
127
+ };
128
+ return buildTxResult("billing", "acknowledge-lease", await client.signAndBroadcast(senderAddress, [msg], "auto"), waitForConfirmation);
129
+ }
130
+ case "reject-lease": {
131
+ const { value: reason, consumedIndices } = extractFlag(args, "--reason", "billing reject-lease");
132
+ const leaseArgs = filterConsumedArgs(args, consumedIndices);
133
+ requireArgs(leaseArgs, 1, ["lease-uuid"], "billing reject-lease");
134
+ const leaseUuids = leaseArgs;
135
+ const msg = {
136
+ typeUrl: "/liftedinit.billing.v1.MsgRejectLease",
137
+ value: MsgRejectLease.fromPartial({
138
+ sender: senderAddress,
139
+ leaseUuids,
140
+ reason: reason ?? ""
141
+ })
142
+ };
143
+ return buildTxResult("billing", "reject-lease", await client.signAndBroadcast(senderAddress, [msg], "auto"), waitForConfirmation);
144
+ }
145
+ case "cancel-lease": {
146
+ requireArgs(args, 1, ["lease-uuid"], "billing cancel-lease");
147
+ const leaseUuids = args;
148
+ const msg = {
149
+ typeUrl: "/liftedinit.billing.v1.MsgCancelLease",
150
+ value: MsgCancelLease.fromPartial({
151
+ tenant: senderAddress,
152
+ leaseUuids
153
+ })
154
+ };
155
+ return buildTxResult("billing", "cancel-lease", await client.signAndBroadcast(senderAddress, [msg], "auto"), waitForConfirmation);
156
+ }
157
+ case "update-params": {
158
+ requireArgs(args, 5, [
159
+ "max-leases-per-tenant",
160
+ "max-items-per-lease",
161
+ "min-lease-duration",
162
+ "max-pending-leases-per-tenant",
163
+ "pending-timeout"
164
+ ], "billing update-params");
165
+ const [maxLeasesPerTenantStr, maxItemsPerLeaseStr, minLeaseDurationStr, maxPendingLeasesPerTenantStr, pendingTimeoutStr, ...allowedAddresses] = args;
166
+ for (const addr of allowedAddresses) validateAddress(addr, "allowed address");
167
+ const msg = {
168
+ typeUrl: "/liftedinit.billing.v1.MsgUpdateParams",
169
+ value: MsgUpdateParams.fromPartial({
170
+ authority: senderAddress,
171
+ params: {
172
+ maxLeasesPerTenant: parseBigInt(maxLeasesPerTenantStr, "max-leases-per-tenant"),
173
+ maxItemsPerLease: parseBigInt(maxItemsPerLeaseStr, "max-items-per-lease"),
174
+ minLeaseDuration: parseBigInt(minLeaseDurationStr, "min-lease-duration"),
175
+ maxPendingLeasesPerTenant: parseBigInt(maxPendingLeasesPerTenantStr, "max-pending-leases-per-tenant"),
176
+ pendingTimeout: parseBigInt(pendingTimeoutStr, "pending-timeout"),
177
+ allowedList: allowedAddresses
178
+ }
179
+ })
180
+ };
181
+ return buildTxResult("billing", "update-params", await client.signAndBroadcast(senderAddress, [msg], "auto"), waitForConfirmation);
182
+ }
183
+ default: throwUnsupportedSubcommand("tx", "billing", subcommand);
184
+ }
185
+ }
186
+ //#endregion
187
+ export { routeBillingTransaction };
188
+
189
+ //# sourceMappingURL=billing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"billing.js","names":[],"sources":["../../src/transactions/billing.ts"],"sourcesContent":["import type { SigningStargateClient } from '@cosmjs/stargate';\nimport { liftedinit } from '@manifest-network/manifestjs';\nimport { getSubcommandUsage, throwUnsupportedSubcommand } from '../modules.js';\nimport {\n type CosmosTxResult,\n ManifestMCPError,\n ManifestMCPErrorCode,\n} from '../types.js';\nimport {\n buildTxResult,\n extractFlag,\n filterConsumedArgs,\n MAX_META_HASH_BYTES,\n parseAmount,\n parseBigInt,\n parseHexBytes,\n parseLeaseItem,\n requireArgs,\n validateAddress,\n validateArgsLength,\n} from './utils.js';\n\nconst {\n MsgFundCredit,\n MsgCreateLease,\n MsgCloseLease,\n MsgWithdraw,\n MsgCreateLeaseForTenant,\n MsgAcknowledgeLease,\n MsgRejectLease,\n MsgCancelLease,\n MsgUpdateParams,\n} = liftedinit.billing.v1;\n\n/**\n * Route billing transaction to appropriate handler\n */\nexport async function routeBillingTransaction(\n client: SigningStargateClient,\n senderAddress: string,\n subcommand: string,\n args: string[],\n waitForConfirmation: boolean,\n): Promise<CosmosTxResult> {\n validateArgsLength(args, 'billing transaction');\n\n switch (subcommand) {\n case 'fund-credit': {\n requireArgs(args, 2, ['tenant-address', 'amount'], 'billing fund-credit');\n const [tenant, amountStr] = args;\n validateAddress(tenant, 'tenant address');\n const { amount, denom } = parseAmount(amountStr);\n\n const msg = {\n typeUrl: '/liftedinit.billing.v1.MsgFundCredit',\n value: MsgFundCredit.fromPartial({\n sender: senderAddress,\n tenant,\n amount: { denom, amount },\n }),\n };\n\n const result = await client.signAndBroadcast(\n senderAddress,\n [msg],\n 'auto',\n );\n return buildTxResult(\n 'billing',\n 'fund-credit',\n result,\n waitForConfirmation,\n );\n }\n\n case 'create-lease': {\n // Parse optional --meta-hash flag (can appear anywhere in args)\n const { value: metaHashHex, consumedIndices } = extractFlag(\n args,\n '--meta-hash',\n 'billing create-lease',\n );\n const metaHash = metaHashHex\n ? parseHexBytes(metaHashHex, 'meta-hash', MAX_META_HASH_BYTES)\n : undefined;\n\n // Filter out --meta-hash and its value to get item args\n const itemArgs = filterConsumedArgs(args, consumedIndices);\n requireArgs(\n itemArgs,\n 1,\n ['sku-uuid:quantity[:service-name]'],\n 'billing create-lease',\n );\n\n // Parse items (format: sku-uuid:quantity or sku-uuid:quantity:service-name)\n const items = itemArgs.map((arg) => parseLeaseItem(arg));\n\n const msg = {\n typeUrl: '/liftedinit.billing.v1.MsgCreateLease',\n value: MsgCreateLease.fromPartial({\n tenant: senderAddress,\n items,\n metaHash: metaHash ?? new Uint8Array(),\n }),\n };\n\n const result = await client.signAndBroadcast(\n senderAddress,\n [msg],\n 'auto',\n );\n return buildTxResult(\n 'billing',\n 'create-lease',\n result,\n waitForConfirmation,\n );\n }\n\n case 'close-lease': {\n // Parse optional --reason flag\n const { value: reason, consumedIndices } = extractFlag(\n args,\n '--reason',\n 'billing close-lease',\n );\n const leaseArgs = filterConsumedArgs(args, consumedIndices);\n requireArgs(leaseArgs, 1, ['lease-uuid'], 'billing close-lease');\n\n // MsgCloseLease can close multiple leases at once\n const leaseUuids = leaseArgs;\n\n const msg = {\n typeUrl: '/liftedinit.billing.v1.MsgCloseLease',\n value: MsgCloseLease.fromPartial({\n sender: senderAddress,\n leaseUuids,\n reason: reason ?? '',\n }),\n };\n\n const result = await client.signAndBroadcast(\n senderAddress,\n [msg],\n 'auto',\n );\n return buildTxResult(\n 'billing',\n 'close-lease',\n result,\n waitForConfirmation,\n );\n }\n\n case 'withdraw': {\n requireArgs(args, 1, ['lease-uuid or --provider'], 'billing withdraw');\n\n // Extract flags\n const providerFlag = extractFlag(args, '--provider', 'billing withdraw');\n const limitFlag = extractFlag(args, '--limit', 'billing withdraw');\n\n let leaseUuids: string[] = [];\n let providerUuid = '';\n let limit = BigInt(0); // 0 means use default (50)\n\n if (providerFlag.value) {\n // Provider-wide withdrawal mode\n providerUuid = providerFlag.value;\n\n // Parse optional --limit flag (only valid with --provider)\n if (limitFlag.value) {\n limit = parseBigInt(limitFlag.value, 'limit');\n if (limit < BigInt(1) || limit > BigInt(100)) {\n throw new ManifestMCPError(\n ManifestMCPErrorCode.TX_FAILED,\n `Invalid limit: ${limit}. Must be between 1 and 100.`,\n );\n }\n }\n\n // Check for any extra arguments that weren't consumed\n const allConsumed = [\n ...providerFlag.consumedIndices,\n ...limitFlag.consumedIndices,\n ];\n const extraArgs = filterConsumedArgs(args, allConsumed);\n if (extraArgs.length > 0) {\n const usage = getSubcommandUsage('tx', 'billing', 'withdraw');\n throw new ManifestMCPError(\n ManifestMCPErrorCode.TX_FAILED,\n `Provider-wide withdrawal does not accept additional arguments. ` +\n `Got unexpected: ${extraArgs.map((a) => `\"${a}\"`).join(', ')}. ` +\n `For lease-specific withdrawal, omit --provider flag. Usage: withdraw ${usage ?? '<args>'}`,\n );\n }\n } else {\n // Lease-specific withdrawal mode\n // Check for unexpected flags (--limit without --provider is invalid)\n const unexpectedFlags = args.filter((arg) => arg.startsWith('--'));\n if (unexpectedFlags.length > 0) {\n const usage = getSubcommandUsage('tx', 'billing', 'withdraw');\n throw new ManifestMCPError(\n ManifestMCPErrorCode.TX_FAILED,\n `Unexpected flag(s) in lease-specific withdrawal mode: ${unexpectedFlags.join(', ')}. ` +\n `Use --provider for provider-wide withdrawal. Usage: withdraw ${usage ?? '<args>'}`,\n );\n }\n\n leaseUuids = args;\n }\n\n const msg = {\n typeUrl: '/liftedinit.billing.v1.MsgWithdraw',\n value: MsgWithdraw.fromPartial({\n sender: senderAddress,\n leaseUuids,\n providerUuid,\n limit,\n }),\n };\n\n const result = await client.signAndBroadcast(\n senderAddress,\n [msg],\n 'auto',\n );\n return buildTxResult('billing', 'withdraw', result, waitForConfirmation);\n }\n\n case 'create-lease-for-tenant': {\n // Parse optional --meta-hash flag\n const { value: metaHashHex, consumedIndices } = extractFlag(\n args,\n '--meta-hash',\n 'billing create-lease-for-tenant',\n );\n const metaHash = metaHashHex\n ? parseHexBytes(metaHashHex, 'meta-hash', MAX_META_HASH_BYTES)\n : undefined;\n\n // Filter out --meta-hash and its value to get remaining args\n const remainingArgs = filterConsumedArgs(args, consumedIndices);\n requireArgs(\n remainingArgs,\n 2,\n ['tenant-address', 'sku-uuid:quantity[:service-name]'],\n 'billing create-lease-for-tenant',\n );\n\n const [tenant, ...itemArgs] = remainingArgs;\n validateAddress(tenant, 'tenant address');\n\n // Parse items (format: sku-uuid:quantity or sku-uuid:quantity:service-name)\n const items = itemArgs.map((arg) => parseLeaseItem(arg));\n\n const msg = {\n typeUrl: '/liftedinit.billing.v1.MsgCreateLeaseForTenant',\n value: MsgCreateLeaseForTenant.fromPartial({\n authority: senderAddress,\n tenant,\n items,\n metaHash: metaHash ?? new Uint8Array(),\n }),\n };\n\n const result = await client.signAndBroadcast(\n senderAddress,\n [msg],\n 'auto',\n );\n return buildTxResult(\n 'billing',\n 'create-lease-for-tenant',\n result,\n waitForConfirmation,\n );\n }\n\n case 'acknowledge-lease': {\n requireArgs(args, 1, ['lease-uuid'], 'billing acknowledge-lease');\n const leaseUuids = args;\n\n const msg = {\n typeUrl: '/liftedinit.billing.v1.MsgAcknowledgeLease',\n value: MsgAcknowledgeLease.fromPartial({\n sender: senderAddress,\n leaseUuids,\n }),\n };\n\n const result = await client.signAndBroadcast(\n senderAddress,\n [msg],\n 'auto',\n );\n return buildTxResult(\n 'billing',\n 'acknowledge-lease',\n result,\n waitForConfirmation,\n );\n }\n\n case 'reject-lease': {\n // Parse optional --reason flag\n const { value: reason, consumedIndices } = extractFlag(\n args,\n '--reason',\n 'billing reject-lease',\n );\n const leaseArgs = filterConsumedArgs(args, consumedIndices);\n requireArgs(leaseArgs, 1, ['lease-uuid'], 'billing reject-lease');\n\n const leaseUuids = leaseArgs;\n\n const msg = {\n typeUrl: '/liftedinit.billing.v1.MsgRejectLease',\n value: MsgRejectLease.fromPartial({\n sender: senderAddress,\n leaseUuids,\n reason: reason ?? '',\n }),\n };\n\n const result = await client.signAndBroadcast(\n senderAddress,\n [msg],\n 'auto',\n );\n return buildTxResult(\n 'billing',\n 'reject-lease',\n result,\n waitForConfirmation,\n );\n }\n\n case 'cancel-lease': {\n requireArgs(args, 1, ['lease-uuid'], 'billing cancel-lease');\n const leaseUuids = args;\n\n const msg = {\n typeUrl: '/liftedinit.billing.v1.MsgCancelLease',\n value: MsgCancelLease.fromPartial({\n tenant: senderAddress,\n leaseUuids,\n }),\n };\n\n const result = await client.signAndBroadcast(\n senderAddress,\n [msg],\n 'auto',\n );\n return buildTxResult(\n 'billing',\n 'cancel-lease',\n result,\n waitForConfirmation,\n );\n }\n\n case 'update-params': {\n requireArgs(\n args,\n 5,\n [\n 'max-leases-per-tenant',\n 'max-items-per-lease',\n 'min-lease-duration',\n 'max-pending-leases-per-tenant',\n 'pending-timeout',\n ],\n 'billing update-params',\n );\n\n const [\n maxLeasesPerTenantStr,\n maxItemsPerLeaseStr,\n minLeaseDurationStr,\n maxPendingLeasesPerTenantStr,\n pendingTimeoutStr,\n ...allowedAddresses\n ] = args;\n\n for (const addr of allowedAddresses) {\n validateAddress(addr, 'allowed address');\n }\n\n const msg = {\n typeUrl: '/liftedinit.billing.v1.MsgUpdateParams',\n value: MsgUpdateParams.fromPartial({\n authority: senderAddress,\n params: {\n maxLeasesPerTenant: parseBigInt(\n maxLeasesPerTenantStr,\n 'max-leases-per-tenant',\n ),\n maxItemsPerLease: parseBigInt(\n maxItemsPerLeaseStr,\n 'max-items-per-lease',\n ),\n minLeaseDuration: parseBigInt(\n minLeaseDurationStr,\n 'min-lease-duration',\n ),\n maxPendingLeasesPerTenant: parseBigInt(\n maxPendingLeasesPerTenantStr,\n 'max-pending-leases-per-tenant',\n ),\n pendingTimeout: parseBigInt(pendingTimeoutStr, 'pending-timeout'),\n allowedList: allowedAddresses,\n },\n }),\n };\n\n const result = await client.signAndBroadcast(\n senderAddress,\n [msg],\n 'auto',\n );\n return buildTxResult(\n 'billing',\n 'update-params',\n result,\n waitForConfirmation,\n );\n }\n\n default:\n throwUnsupportedSubcommand('tx', 'billing', subcommand);\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { CosmosTxResult } from "../types.js";
2
+ import { SigningStargateClient } from "@cosmjs/stargate";
3
+
4
+ //#region src/transactions/distribution.d.ts
5
+ /**
6
+ * Route distribution transaction to appropriate handler
7
+ */
8
+ declare function routeDistributionTransaction(client: SigningStargateClient, senderAddress: string, subcommand: string, args: string[], waitForConfirmation: boolean): Promise<CosmosTxResult>;
9
+ //#endregion
10
+ export { routeDistributionTransaction };
11
+ //# sourceMappingURL=distribution.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"distribution.d.ts","names":[],"sources":["../../src/transactions/distribution.ts"],"mappings":";;;;;;AAqBA;iBAAsB,4BAAA,CACpB,MAAA,EAAQ,qBAAA,EACR,aAAA,UACA,UAAA,UACA,IAAA,YACA,mBAAA,YACC,OAAA,CAAQ,cAAA"}
@@ -0,0 +1,60 @@
1
+ import { buildTxResult, parseAmount, requireArgs, validateAddress, validateArgsLength } from "./utils.js";
2
+ import { throwUnsupportedSubcommand } from "../modules.js";
3
+ import { cosmos } from "@manifest-network/manifestjs";
4
+ //#region src/transactions/distribution.ts
5
+ const { MsgWithdrawDelegatorReward, MsgSetWithdrawAddress, MsgFundCommunityPool } = cosmos.distribution.v1beta1;
6
+ /**
7
+ * Route distribution transaction to appropriate handler
8
+ */
9
+ async function routeDistributionTransaction(client, senderAddress, subcommand, args, waitForConfirmation) {
10
+ validateArgsLength(args, "distribution transaction");
11
+ switch (subcommand) {
12
+ case "withdraw-rewards": {
13
+ requireArgs(args, 1, ["validator-address"], "distribution withdraw-rewards");
14
+ const [validatorAddress] = args;
15
+ validateAddress(validatorAddress, "validator address");
16
+ const msg = {
17
+ typeUrl: "/cosmos.distribution.v1beta1.MsgWithdrawDelegatorReward",
18
+ value: MsgWithdrawDelegatorReward.fromPartial({
19
+ delegatorAddress: senderAddress,
20
+ validatorAddress
21
+ })
22
+ };
23
+ return buildTxResult("distribution", "withdraw-rewards", await client.signAndBroadcast(senderAddress, [msg], "auto"), waitForConfirmation);
24
+ }
25
+ case "set-withdraw-addr": {
26
+ requireArgs(args, 1, ["withdraw-address"], "distribution set-withdraw-addr");
27
+ const [withdrawAddress] = args;
28
+ validateAddress(withdrawAddress, "withdraw address");
29
+ const msg = {
30
+ typeUrl: "/cosmos.distribution.v1beta1.MsgSetWithdrawAddress",
31
+ value: MsgSetWithdrawAddress.fromPartial({
32
+ delegatorAddress: senderAddress,
33
+ withdrawAddress
34
+ })
35
+ };
36
+ return buildTxResult("distribution", "set-withdraw-addr", await client.signAndBroadcast(senderAddress, [msg], "auto"), waitForConfirmation);
37
+ }
38
+ case "fund-community-pool": {
39
+ requireArgs(args, 1, ["amount"], "distribution fund-community-pool");
40
+ const [amountStr] = args;
41
+ const { amount, denom } = parseAmount(amountStr);
42
+ const msg = {
43
+ typeUrl: "/cosmos.distribution.v1beta1.MsgFundCommunityPool",
44
+ value: MsgFundCommunityPool.fromPartial({
45
+ depositor: senderAddress,
46
+ amount: [{
47
+ denom,
48
+ amount
49
+ }]
50
+ })
51
+ };
52
+ return buildTxResult("distribution", "fund-community-pool", await client.signAndBroadcast(senderAddress, [msg], "auto"), waitForConfirmation);
53
+ }
54
+ default: throwUnsupportedSubcommand("tx", "distribution", subcommand);
55
+ }
56
+ }
57
+ //#endregion
58
+ export { routeDistributionTransaction };
59
+
60
+ //# sourceMappingURL=distribution.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"distribution.js","names":[],"sources":["../../src/transactions/distribution.ts"],"sourcesContent":["import type { SigningStargateClient } from '@cosmjs/stargate';\nimport { cosmos } from '@manifest-network/manifestjs';\nimport { throwUnsupportedSubcommand } from '../modules.js';\nimport type { CosmosTxResult } from '../types.js';\nimport {\n buildTxResult,\n parseAmount,\n requireArgs,\n validateAddress,\n validateArgsLength,\n} from './utils.js';\n\nconst {\n MsgWithdrawDelegatorReward,\n MsgSetWithdrawAddress,\n MsgFundCommunityPool,\n} = cosmos.distribution.v1beta1;\n\n/**\n * Route distribution transaction to appropriate handler\n */\nexport async function routeDistributionTransaction(\n client: SigningStargateClient,\n senderAddress: string,\n subcommand: string,\n args: string[],\n waitForConfirmation: boolean,\n): Promise<CosmosTxResult> {\n validateArgsLength(args, 'distribution transaction');\n\n switch (subcommand) {\n case 'withdraw-rewards': {\n requireArgs(\n args,\n 1,\n ['validator-address'],\n 'distribution withdraw-rewards',\n );\n const [validatorAddress] = args;\n validateAddress(validatorAddress, 'validator address');\n\n const msg = {\n typeUrl: '/cosmos.distribution.v1beta1.MsgWithdrawDelegatorReward',\n value: MsgWithdrawDelegatorReward.fromPartial({\n delegatorAddress: senderAddress,\n validatorAddress,\n }),\n };\n\n const result = await client.signAndBroadcast(\n senderAddress,\n [msg],\n 'auto',\n );\n return buildTxResult(\n 'distribution',\n 'withdraw-rewards',\n result,\n waitForConfirmation,\n );\n }\n\n case 'set-withdraw-addr': {\n requireArgs(\n args,\n 1,\n ['withdraw-address'],\n 'distribution set-withdraw-addr',\n );\n const [withdrawAddress] = args;\n validateAddress(withdrawAddress, 'withdraw address');\n\n const msg = {\n typeUrl: '/cosmos.distribution.v1beta1.MsgSetWithdrawAddress',\n value: MsgSetWithdrawAddress.fromPartial({\n delegatorAddress: senderAddress,\n withdrawAddress,\n }),\n };\n\n const result = await client.signAndBroadcast(\n senderAddress,\n [msg],\n 'auto',\n );\n return buildTxResult(\n 'distribution',\n 'set-withdraw-addr',\n result,\n waitForConfirmation,\n );\n }\n\n case 'fund-community-pool': {\n requireArgs(args, 1, ['amount'], 'distribution fund-community-pool');\n const [amountStr] = args;\n const { amount, denom } = parseAmount(amountStr);\n\n const msg = {\n typeUrl: '/cosmos.distribution.v1beta1.MsgFundCommunityPool',\n value: MsgFundCommunityPool.fromPartial({\n depositor: senderAddress,\n amount: [{ denom, amount }],\n }),\n };\n\n const result = await client.signAndBroadcast(\n senderAddress,\n [msg],\n 'auto',\n );\n return buildTxResult(\n 'distribution',\n 'fund-community-pool',\n result,\n waitForConfirmation,\n );\n }\n\n default:\n throwUnsupportedSubcommand('tx', 'distribution', subcommand);\n }\n}\n"],"mappings":";;;;AAYA,MAAM,EACJ,4BACA,uBACA,yBACE,OAAO,aAAa;;;;AAKxB,eAAsB,6BACpB,QACA,eACA,YACA,MACA,qBACyB;AACzB,oBAAmB,MAAM,2BAA2B;AAEpD,SAAQ,YAAR;EACE,KAAK,oBAAoB;AACvB,eACE,MACA,GACA,CAAC,oBAAoB,EACrB,gCACD;GACD,MAAM,CAAC,oBAAoB;AAC3B,mBAAgB,kBAAkB,oBAAoB;GAEtD,MAAM,MAAM;IACV,SAAS;IACT,OAAO,2BAA2B,YAAY;KAC5C,kBAAkB;KAClB;KACD,CAAC;IACH;AAOD,UAAO,cACL,gBACA,oBAPa,MAAM,OAAO,iBAC1B,eACA,CAAC,IAAI,EACL,OACD,EAKC,oBACD;;EAGH,KAAK,qBAAqB;AACxB,eACE,MACA,GACA,CAAC,mBAAmB,EACpB,iCACD;GACD,MAAM,CAAC,mBAAmB;AAC1B,mBAAgB,iBAAiB,mBAAmB;GAEpD,MAAM,MAAM;IACV,SAAS;IACT,OAAO,sBAAsB,YAAY;KACvC,kBAAkB;KAClB;KACD,CAAC;IACH;AAOD,UAAO,cACL,gBACA,qBAPa,MAAM,OAAO,iBAC1B,eACA,CAAC,IAAI,EACL,OACD,EAKC,oBACD;;EAGH,KAAK,uBAAuB;AAC1B,eAAY,MAAM,GAAG,CAAC,SAAS,EAAE,mCAAmC;GACpE,MAAM,CAAC,aAAa;GACpB,MAAM,EAAE,QAAQ,UAAU,YAAY,UAAU;GAEhD,MAAM,MAAM;IACV,SAAS;IACT,OAAO,qBAAqB,YAAY;KACtC,WAAW;KACX,QAAQ,CAAC;MAAE;MAAO;MAAQ,CAAC;KAC5B,CAAC;IACH;AAOD,UAAO,cACL,gBACA,uBAPa,MAAM,OAAO,iBAC1B,eACA,CAAC,IAAI,EACL,OACD,EAKC,oBACD;;EAGH,QACE,4BAA2B,MAAM,gBAAgB,WAAW"}
@@ -0,0 +1,11 @@
1
+ import { CosmosTxResult } from "../types.js";
2
+ import { SigningStargateClient } from "@cosmjs/stargate";
3
+
4
+ //#region src/transactions/gov.d.ts
5
+ /**
6
+ * Route gov transaction to appropriate handler
7
+ */
8
+ declare function routeGovTransaction(client: SigningStargateClient, senderAddress: string, subcommand: string, args: string[], waitForConfirmation: boolean): Promise<CosmosTxResult>;
9
+ //#endregion
10
+ export { routeGovTransaction };
11
+ //# sourceMappingURL=gov.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gov.d.ts","names":[],"sources":["../../src/transactions/gov.ts"],"mappings":";;;;;;AA6EA;iBAAsB,mBAAA,CACpB,MAAA,EAAQ,qBAAA,EACR,aAAA,UACA,UAAA,UACA,IAAA,YACA,mBAAA,YACC,OAAA,CAAQ,cAAA"}
@@ -0,0 +1,108 @@
1
+ import { ManifestMCPError, ManifestMCPErrorCode } from "../types.js";
2
+ import { buildTxResult, extractFlag, filterConsumedArgs, parseAmount, parseBigInt, parseVoteOption, requireArgs, validateArgsLength } from "./utils.js";
3
+ import { throwUnsupportedSubcommand } from "../modules.js";
4
+ import { cosmos } from "@manifest-network/manifestjs";
5
+ //#region src/transactions/gov.ts
6
+ const { MsgVote, MsgDeposit, MsgVoteWeighted, VoteOption } = cosmos.gov.v1;
7
+ /** 10^18 as BigInt for fixed-point math */
8
+ const FIXED18_ONE = BigInt("1000000000000000000");
9
+ /**
10
+ * Format a fixed-18 BigInt as a decimal string without precision loss.
11
+ * E.g., 500000000000000000n -> "0.5", 1000000000000000000n -> "1.0"
12
+ */
13
+ function formatFixed18(value) {
14
+ const isNegative = value < BigInt(0);
15
+ const absValue = isNegative ? -value : value;
16
+ const intPart = absValue / FIXED18_ONE;
17
+ const fracStr = (absValue % FIXED18_ONE).toString().padStart(18, "0").replace(/0+$/, "");
18
+ const sign = isNegative ? "-" : "";
19
+ if (fracStr === "") return `${sign}${intPart}.0`;
20
+ return `${sign}${intPart}.${fracStr}`;
21
+ }
22
+ /**
23
+ * Parse a decimal weight string to an 18-decimal fixed-point string.
24
+ * Uses string manipulation to avoid floating-point precision loss.
25
+ *
26
+ * @param weightStr - Decimal string like "0.5", "0.333333333333333333", "1"
27
+ * @returns String representation of weight * 10^18
28
+ */
29
+ function parseWeightToFixed18(weightStr) {
30
+ if (!/^\d+(\.\d+)?$/.test(weightStr)) throw new ManifestMCPError(ManifestMCPErrorCode.TX_FAILED, `Invalid weight format: "${weightStr}". Expected decimal like "0.5" or "0.333333333333333333"`);
31
+ const [intPart, decPart = ""] = weightStr.split(".");
32
+ return (intPart + decPart.padEnd(18, "0").slice(0, 18)).replace(/^0+/, "") || "0";
33
+ }
34
+ /**
35
+ * Route gov transaction to appropriate handler
36
+ */
37
+ async function routeGovTransaction(client, senderAddress, subcommand, args, waitForConfirmation) {
38
+ validateArgsLength(args, "gov transaction");
39
+ switch (subcommand) {
40
+ case "vote": {
41
+ const metadataFlag = extractFlag(args, "--metadata", "gov vote");
42
+ const positionalArgs = filterConsumedArgs(args, metadataFlag.consumedIndices);
43
+ requireArgs(positionalArgs, 2, ["proposal-id", "option"], "gov vote");
44
+ const [proposalIdStr, optionStr] = positionalArgs;
45
+ const proposalId = parseBigInt(proposalIdStr, "proposal-id");
46
+ const option = parseVoteOption(optionStr, VoteOption);
47
+ const metadata = metadataFlag.value ?? "";
48
+ const msg = {
49
+ typeUrl: "/cosmos.gov.v1.MsgVote",
50
+ value: MsgVote.fromPartial({
51
+ proposalId,
52
+ voter: senderAddress,
53
+ option,
54
+ metadata
55
+ })
56
+ };
57
+ return buildTxResult("gov", "vote", await client.signAndBroadcast(senderAddress, [msg], "auto"), waitForConfirmation);
58
+ }
59
+ case "weighted-vote": {
60
+ requireArgs(args, 2, ["proposal-id", "options"], "gov weighted-vote");
61
+ const [proposalIdStr, optionsStr] = args;
62
+ const proposalId = parseBigInt(proposalIdStr, "proposal-id");
63
+ const options = optionsStr.split(",").map((opt) => {
64
+ const [optName, weightStr] = opt.split("=");
65
+ if (!optName || !weightStr) throw new ManifestMCPError(ManifestMCPErrorCode.TX_FAILED, `Invalid weighted vote format: ${opt}. Expected format: option=weight`);
66
+ return {
67
+ option: parseVoteOption(optName, VoteOption),
68
+ weight: parseWeightToFixed18(weightStr)
69
+ };
70
+ });
71
+ const totalWeight = options.reduce((sum, opt) => sum + BigInt(opt.weight), BigInt(0));
72
+ if (totalWeight !== FIXED18_ONE) throw new ManifestMCPError(ManifestMCPErrorCode.TX_FAILED, `Weighted vote options must sum to exactly 1.0. Got ${formatFixed18(totalWeight)} (${options.map((o) => o.weight).join(" + ")} = ${totalWeight})`);
73
+ const msg = {
74
+ typeUrl: "/cosmos.gov.v1.MsgVoteWeighted",
75
+ value: MsgVoteWeighted.fromPartial({
76
+ proposalId,
77
+ voter: senderAddress,
78
+ options,
79
+ metadata: ""
80
+ })
81
+ };
82
+ return buildTxResult("gov", "weighted-vote", await client.signAndBroadcast(senderAddress, [msg], "auto"), waitForConfirmation);
83
+ }
84
+ case "deposit": {
85
+ requireArgs(args, 2, ["proposal-id", "amount"], "gov deposit");
86
+ const [proposalIdStr, amountStr] = args;
87
+ const proposalId = parseBigInt(proposalIdStr, "proposal-id");
88
+ const { amount, denom } = parseAmount(amountStr);
89
+ const msg = {
90
+ typeUrl: "/cosmos.gov.v1.MsgDeposit",
91
+ value: MsgDeposit.fromPartial({
92
+ proposalId,
93
+ depositor: senderAddress,
94
+ amount: [{
95
+ denom,
96
+ amount
97
+ }]
98
+ })
99
+ };
100
+ return buildTxResult("gov", "deposit", await client.signAndBroadcast(senderAddress, [msg], "auto"), waitForConfirmation);
101
+ }
102
+ default: throwUnsupportedSubcommand("tx", "gov", subcommand);
103
+ }
104
+ }
105
+ //#endregion
106
+ export { routeGovTransaction };
107
+
108
+ //# sourceMappingURL=gov.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gov.js","names":[],"sources":["../../src/transactions/gov.ts"],"sourcesContent":["import type { SigningStargateClient } from '@cosmjs/stargate';\nimport { cosmos } from '@manifest-network/manifestjs';\nimport { throwUnsupportedSubcommand } from '../modules.js';\nimport {\n type CosmosTxResult,\n ManifestMCPError,\n ManifestMCPErrorCode,\n} from '../types.js';\nimport {\n buildTxResult,\n extractFlag,\n filterConsumedArgs,\n parseAmount,\n parseBigInt,\n parseVoteOption,\n requireArgs,\n validateArgsLength,\n} from './utils.js';\n\nconst { MsgVote, MsgDeposit, MsgVoteWeighted, VoteOption } = cosmos.gov.v1;\n\n/** 10^18 as BigInt for fixed-point math */\nconst FIXED18_ONE = BigInt('1000000000000000000');\n\n/**\n * Format a fixed-18 BigInt as a decimal string without precision loss.\n * E.g., 500000000000000000n -> \"0.5\", 1000000000000000000n -> \"1.0\"\n */\nfunction formatFixed18(value: bigint): string {\n const isNegative = value < BigInt(0);\n const absValue = isNegative ? -value : value;\n const intPart = absValue / FIXED18_ONE;\n const fracPart = absValue % FIXED18_ONE;\n\n // Pad fraction to 18 digits, then trim trailing zeros\n const fracStr = fracPart.toString().padStart(18, '0').replace(/0+$/, '');\n\n const sign = isNegative ? '-' : '';\n if (fracStr === '') {\n return `${sign}${intPart}.0`;\n }\n return `${sign}${intPart}.${fracStr}`;\n}\n\n/**\n * Parse a decimal weight string to an 18-decimal fixed-point string.\n * Uses string manipulation to avoid floating-point precision loss.\n *\n * @param weightStr - Decimal string like \"0.5\", \"0.333333333333333333\", \"1\"\n * @returns String representation of weight * 10^18\n */\nfunction parseWeightToFixed18(weightStr: string): string {\n // Validate format: must be a valid decimal number\n if (!/^\\d+(\\.\\d+)?$/.test(weightStr)) {\n throw new ManifestMCPError(\n ManifestMCPErrorCode.TX_FAILED,\n `Invalid weight format: \"${weightStr}\". Expected decimal like \"0.5\" or \"0.333333333333333333\"`,\n );\n }\n\n const [intPart, decPart = ''] = weightStr.split('.');\n\n // Pad or truncate decimal part to exactly 18 digits\n const paddedDecimal = decPart.padEnd(18, '0').slice(0, 18);\n\n // Combine integer and decimal parts\n const combined = intPart + paddedDecimal;\n\n // Remove leading zeros but keep at least one digit\n const result = combined.replace(/^0+/, '') || '0';\n\n return result;\n}\n\n/**\n * Route gov transaction to appropriate handler\n */\nexport async function routeGovTransaction(\n client: SigningStargateClient,\n senderAddress: string,\n subcommand: string,\n args: string[],\n waitForConfirmation: boolean,\n): Promise<CosmosTxResult> {\n validateArgsLength(args, 'gov transaction');\n\n switch (subcommand) {\n case 'vote': {\n // Extract optional flags before positional args\n const metadataFlag = extractFlag(args, '--metadata', 'gov vote');\n const positionalArgs = filterConsumedArgs(\n args,\n metadataFlag.consumedIndices,\n );\n\n requireArgs(positionalArgs, 2, ['proposal-id', 'option'], 'gov vote');\n const [proposalIdStr, optionStr] = positionalArgs;\n const proposalId = parseBigInt(proposalIdStr, 'proposal-id');\n const option = parseVoteOption(optionStr, VoteOption);\n const metadata = metadataFlag.value ?? '';\n\n const msg = {\n typeUrl: '/cosmos.gov.v1.MsgVote',\n value: MsgVote.fromPartial({\n proposalId,\n voter: senderAddress,\n option,\n metadata,\n }),\n };\n\n const result = await client.signAndBroadcast(\n senderAddress,\n [msg],\n 'auto',\n );\n return buildTxResult('gov', 'vote', result, waitForConfirmation);\n }\n\n case 'weighted-vote': {\n requireArgs(args, 2, ['proposal-id', 'options'], 'gov weighted-vote');\n const [proposalIdStr, optionsStr] = args;\n const proposalId = parseBigInt(proposalIdStr, 'proposal-id');\n\n // Parse weighted options (format: yes=0.5,no=0.3,abstain=0.2)\n const options = optionsStr.split(',').map((opt) => {\n const [optName, weightStr] = opt.split('=');\n if (!optName || !weightStr) {\n throw new ManifestMCPError(\n ManifestMCPErrorCode.TX_FAILED,\n `Invalid weighted vote format: ${opt}. Expected format: option=weight`,\n );\n }\n const option = parseVoteOption(optName, VoteOption);\n // Weight is a decimal string (e.g., \"0.5\" -> \"500000000000000000\" for 18 decimals)\n // Use string-based conversion to avoid floating-point precision loss\n const weight = parseWeightToFixed18(weightStr);\n return { option, weight };\n });\n\n // Validate that weights sum to exactly 1.0 (10^18 in fixed-point)\n const totalWeight = options.reduce(\n (sum, opt) => sum + BigInt(opt.weight),\n BigInt(0),\n );\n if (totalWeight !== FIXED18_ONE) {\n throw new ManifestMCPError(\n ManifestMCPErrorCode.TX_FAILED,\n `Weighted vote options must sum to exactly 1.0. Got ${formatFixed18(totalWeight)} (${options.map((o) => o.weight).join(' + ')} = ${totalWeight})`,\n );\n }\n\n const msg = {\n typeUrl: '/cosmos.gov.v1.MsgVoteWeighted',\n value: MsgVoteWeighted.fromPartial({\n proposalId,\n voter: senderAddress,\n options,\n metadata: '',\n }),\n };\n\n const result = await client.signAndBroadcast(\n senderAddress,\n [msg],\n 'auto',\n );\n return buildTxResult('gov', 'weighted-vote', result, waitForConfirmation);\n }\n\n case 'deposit': {\n requireArgs(args, 2, ['proposal-id', 'amount'], 'gov deposit');\n const [proposalIdStr, amountStr] = args;\n const proposalId = parseBigInt(proposalIdStr, 'proposal-id');\n const { amount, denom } = parseAmount(amountStr);\n\n const msg = {\n typeUrl: '/cosmos.gov.v1.MsgDeposit',\n value: MsgDeposit.fromPartial({\n proposalId,\n depositor: senderAddress,\n amount: [{ denom, amount }],\n }),\n };\n\n const result = await client.signAndBroadcast(\n senderAddress,\n [msg],\n 'auto',\n );\n return buildTxResult('gov', 'deposit', result, waitForConfirmation);\n }\n\n default:\n throwUnsupportedSubcommand('tx', 'gov', subcommand);\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { CosmosTxResult } from "../types.js";
2
+ import { SigningStargateClient } from "@cosmjs/stargate";
3
+
4
+ //#region src/transactions/group.d.ts
5
+ /**
6
+ * Route group transaction to appropriate handler
7
+ */
8
+ declare function routeGroupTransaction(client: SigningStargateClient, senderAddress: string, subcommand: string, args: string[], waitForConfirmation: boolean): Promise<CosmosTxResult>;
9
+ //#endregion
10
+ export { routeGroupTransaction };
11
+ //# sourceMappingURL=group.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"group.d.ts","names":[],"sources":["../../src/transactions/group.ts"],"mappings":";;;;;;AA4LA;iBAAsB,qBAAA,CACpB,MAAA,EAAQ,qBAAA,EACR,aAAA,UACA,UAAA,UACA,IAAA,YACA,mBAAA,YACC,OAAA,CAAQ,cAAA"}