@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.
- package/dist/__test-utils__/callTool.d.ts +29 -0
- package/dist/__test-utils__/callTool.d.ts.map +1 -0
- package/dist/__test-utils__/callTool.js +45 -0
- package/dist/__test-utils__/callTool.js.map +1 -0
- package/dist/__test-utils__/mocks.d.ts +125 -0
- package/dist/__test-utils__/mocks.d.ts.map +1 -0
- package/dist/__test-utils__/mocks.js +146 -0
- package/dist/__test-utils__/mocks.js.map +1 -0
- package/dist/client.d.ts +67 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +209 -0
- package/dist/client.js.map +1 -0
- package/dist/config.d.ts +30 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +127 -0
- package/dist/config.js.map +1 -0
- package/dist/cosmos.d.ts +24 -0
- package/dist/cosmos.d.ts.map +1 -0
- package/dist/cosmos.js +85 -0
- package/dist/cosmos.js.map +1 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.js +20 -0
- package/dist/lcd-adapter.d.ts +15 -0
- package/dist/lcd-adapter.d.ts.map +1 -0
- package/dist/lcd-adapter.js +98 -0
- package/dist/lcd-adapter.js.map +1 -0
- package/dist/logger.d.ts +20 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +43 -0
- package/dist/logger.js.map +1 -0
- package/dist/modules.d.ts +63 -0
- package/dist/modules.d.ts.map +1 -0
- package/dist/modules.js +759 -0
- package/dist/modules.js.map +1 -0
- package/dist/node_modules/@jridgewell/sourcemap-codec/dist/sourcemap-codec.js +78 -0
- package/dist/node_modules/@jridgewell/sourcemap-codec/dist/sourcemap-codec.js.map +1 -0
- package/dist/node_modules/@vitest/expect/dist/index.d.ts +802 -0
- package/dist/node_modules/@vitest/expect/dist/index.d.ts.map +1 -0
- package/dist/node_modules/@vitest/expect/dist/index.js +1457 -0
- package/dist/node_modules/@vitest/expect/dist/index.js.map +1 -0
- package/dist/node_modules/@vitest/pretty-format/dist/index.d.ts +95 -0
- package/dist/node_modules/@vitest/pretty-format/dist/index.d.ts.map +1 -0
- package/dist/node_modules/@vitest/pretty-format/dist/index.js +877 -0
- package/dist/node_modules/@vitest/pretty-format/dist/index.js.map +1 -0
- package/dist/node_modules/@vitest/runner/dist/chunk-tasks.js +91 -0
- package/dist/node_modules/@vitest/runner/dist/chunk-tasks.js.map +1 -0
- package/dist/node_modules/@vitest/runner/dist/index.js +1381 -0
- package/dist/node_modules/@vitest/runner/dist/index.js.map +1 -0
- package/dist/node_modules/@vitest/runner/dist/tasks.d-D2GKpdwQ.d.ts +540 -0
- package/dist/node_modules/@vitest/runner/dist/tasks.d-D2GKpdwQ.d.ts.map +1 -0
- package/dist/node_modules/@vitest/runner/dist/utils.js +1 -0
- package/dist/node_modules/@vitest/snapshot/dist/environment.d-DOJxxZV9.d.ts +16 -0
- package/dist/node_modules/@vitest/snapshot/dist/environment.d-DOJxxZV9.d.ts.map +1 -0
- package/dist/node_modules/@vitest/snapshot/dist/index.d.ts +89 -0
- package/dist/node_modules/@vitest/snapshot/dist/index.d.ts.map +1 -0
- package/dist/node_modules/@vitest/snapshot/dist/index.js +649 -0
- package/dist/node_modules/@vitest/snapshot/dist/index.js.map +1 -0
- package/dist/node_modules/@vitest/snapshot/dist/rawSnapshot.d-U2kJUxDr.d.ts +40 -0
- package/dist/node_modules/@vitest/snapshot/dist/rawSnapshot.d-U2kJUxDr.d.ts.map +1 -0
- package/dist/node_modules/@vitest/spy/dist/index.d.ts +343 -0
- package/dist/node_modules/@vitest/spy/dist/index.d.ts.map +1 -0
- package/dist/node_modules/@vitest/spy/dist/index.js +386 -0
- package/dist/node_modules/@vitest/spy/dist/index.js.map +1 -0
- package/dist/node_modules/@vitest/utils/dist/chunk-pathe.M-eThtNZ.js +82 -0
- package/dist/node_modules/@vitest/utils/dist/chunk-pathe.M-eThtNZ.js.map +1 -0
- package/dist/node_modules/@vitest/utils/dist/diff.d.ts +14 -0
- package/dist/node_modules/@vitest/utils/dist/diff.d.ts.map +1 -0
- package/dist/node_modules/@vitest/utils/dist/diff.js +1297 -0
- package/dist/node_modules/@vitest/utils/dist/diff.js.map +1 -0
- package/dist/node_modules/@vitest/utils/dist/display.d.ts +15 -0
- package/dist/node_modules/@vitest/utils/dist/display.d.ts.map +1 -0
- package/dist/node_modules/@vitest/utils/dist/display.js +558 -0
- package/dist/node_modules/@vitest/utils/dist/display.js.map +1 -0
- package/dist/node_modules/@vitest/utils/dist/error.js +30 -0
- package/dist/node_modules/@vitest/utils/dist/error.js.map +1 -0
- package/dist/node_modules/@vitest/utils/dist/helpers.js +181 -0
- package/dist/node_modules/@vitest/utils/dist/helpers.js.map +1 -0
- package/dist/node_modules/@vitest/utils/dist/offset.js +27 -0
- package/dist/node_modules/@vitest/utils/dist/offset.js.map +1 -0
- package/dist/node_modules/@vitest/utils/dist/serialize.js +77 -0
- package/dist/node_modules/@vitest/utils/dist/serialize.js.map +1 -0
- package/dist/node_modules/@vitest/utils/dist/source-map.js +367 -0
- package/dist/node_modules/@vitest/utils/dist/source-map.js.map +1 -0
- package/dist/node_modules/@vitest/utils/dist/timers.js +37 -0
- package/dist/node_modules/@vitest/utils/dist/timers.js.map +1 -0
- package/dist/node_modules/@vitest/utils/dist/types.d-BCElaP-c.d.ts +38 -0
- package/dist/node_modules/@vitest/utils/dist/types.d-BCElaP-c.d.ts.map +1 -0
- package/dist/node_modules/@vitest/utils/dist/types.d.ts +25 -0
- package/dist/node_modules/@vitest/utils/dist/types.d.ts.map +1 -0
- package/dist/node_modules/chai/index.js +2875 -0
- package/dist/node_modules/chai/index.js.map +1 -0
- package/dist/node_modules/magic-string/dist/magic-string.es.js +939 -0
- package/dist/node_modules/magic-string/dist/magic-string.es.js.map +1 -0
- package/dist/node_modules/pathe/dist/shared/pathe.M-eThtNZ.js +85 -0
- package/dist/node_modules/pathe/dist/shared/pathe.M-eThtNZ.js.map +1 -0
- package/dist/node_modules/tinybench/dist/index.d.ts +91 -0
- package/dist/node_modules/tinybench/dist/index.d.ts.map +1 -0
- package/dist/node_modules/tinyrainbow/dist/index.d.ts +9 -0
- package/dist/node_modules/tinyrainbow/dist/index.d.ts.map +1 -0
- package/dist/node_modules/tinyrainbow/dist/index.js +86 -0
- package/dist/node_modules/tinyrainbow/dist/index.js.map +1 -0
- package/dist/node_modules/vitest/dist/chunks/_commonjsHelpers.D26ty3Ew.js +6 -0
- package/dist/node_modules/vitest/dist/chunks/_commonjsHelpers.D26ty3Ew.js.map +1 -0
- package/dist/node_modules/vitest/dist/chunks/benchmark.D0SlKNbZ.js +41 -0
- package/dist/node_modules/vitest/dist/chunks/benchmark.D0SlKNbZ.js.map +1 -0
- package/dist/node_modules/vitest/dist/chunks/benchmark.d.DAaHLpsq.d.ts +12 -0
- package/dist/node_modules/vitest/dist/chunks/benchmark.d.DAaHLpsq.d.ts.map +1 -0
- package/dist/node_modules/vitest/dist/chunks/global.d.x-ILCfAE.d.ts +100 -0
- package/dist/node_modules/vitest/dist/chunks/global.d.x-ILCfAE.d.ts.map +1 -0
- package/dist/node_modules/vitest/dist/chunks/rpc.MzXet3jl.js +57 -0
- package/dist/node_modules/vitest/dist/chunks/rpc.MzXet3jl.js.map +1 -0
- package/dist/node_modules/vitest/dist/chunks/rpc.d.BFMWpdph.d.ts +13 -0
- package/dist/node_modules/vitest/dist/chunks/rpc.d.BFMWpdph.d.ts.map +1 -0
- package/dist/node_modules/vitest/dist/chunks/test.CTcmp4Su.js +2791 -0
- package/dist/node_modules/vitest/dist/chunks/test.CTcmp4Su.js.map +1 -0
- package/dist/node_modules/vitest/dist/chunks/utils.BX5Fg8C4.js +44 -0
- package/dist/node_modules/vitest/dist/chunks/utils.BX5Fg8C4.js.map +1 -0
- package/dist/node_modules/vitest/dist/index.d.ts +9 -0
- package/dist/queries/auth.d.ts +15 -0
- package/dist/queries/auth.d.ts.map +1 -0
- package/dist/queries/auth.js +58 -0
- package/dist/queries/auth.js.map +1 -0
- package/dist/queries/bank.d.ts +15 -0
- package/dist/queries/bank.d.ts.map +1 -0
- package/dist/queries/bank.js +93 -0
- package/dist/queries/bank.js.map +1 -0
- package/dist/queries/billing.d.ts +15 -0
- package/dist/queries/billing.d.ts.map +1 -0
- package/dist/queries/billing.js +114 -0
- package/dist/queries/billing.js.map +1 -0
- package/dist/queries/distribution.d.ts +15 -0
- package/dist/queries/distribution.d.ts.map +1 -0
- package/dist/queries/distribution.js +73 -0
- package/dist/queries/distribution.js.map +1 -0
- package/dist/queries/gov.d.ts +15 -0
- package/dist/queries/gov.d.ts.map +1 -0
- package/dist/queries/gov.js +98 -0
- package/dist/queries/gov.js.map +1 -0
- package/dist/queries/group.d.ts +15 -0
- package/dist/queries/group.d.ts.map +1 -0
- package/dist/queries/group.js +159 -0
- package/dist/queries/group.js.map +1 -0
- package/dist/queries/index.d.ts +10 -0
- package/dist/queries/index.js +10 -0
- package/dist/queries/sku.d.ts +16 -0
- package/dist/queries/sku.d.ts.map +1 -0
- package/dist/queries/sku.js +85 -0
- package/dist/queries/sku.js.map +1 -0
- package/dist/queries/staking.d.ts +15 -0
- package/dist/queries/staking.d.ts.map +1 -0
- package/dist/queries/staking.js +127 -0
- package/dist/queries/staking.js.map +1 -0
- package/dist/queries/utils.d.ts +54 -0
- package/dist/queries/utils.d.ts.map +1 -0
- package/dist/queries/utils.js +74 -0
- package/dist/queries/utils.js.map +1 -0
- package/dist/retry.d.ts +48 -0
- package/dist/retry.d.ts.map +1 -0
- package/dist/retry.js +106 -0
- package/dist/retry.js.map +1 -0
- package/dist/server-utils.d.ts +61 -0
- package/dist/server-utils.d.ts.map +1 -0
- package/dist/server-utils.js +156 -0
- package/dist/server-utils.js.map +1 -0
- package/dist/tools/fundCredits.d.ts +8 -0
- package/dist/tools/fundCredits.d.ts.map +1 -0
- package/dist/tools/fundCredits.js +9 -0
- package/dist/tools/fundCredits.js.map +1 -0
- package/dist/tools/getBalance.d.ts +26 -0
- package/dist/tools/getBalance.d.ts.map +1 -0
- package/dist/tools/getBalance.js +59 -0
- package/dist/tools/getBalance.js.map +1 -0
- package/dist/tools/stopApp.d.ts +13 -0
- package/dist/tools/stopApp.d.ts.map +1 -0
- package/dist/tools/stopApp.js +15 -0
- package/dist/tools/stopApp.js.map +1 -0
- package/dist/transactions/bank.d.ts +11 -0
- package/dist/transactions/bank.d.ts.map +1 -0
- package/dist/transactions/bank.js +75 -0
- package/dist/transactions/bank.js.map +1 -0
- package/dist/transactions/billing.d.ts +11 -0
- package/dist/transactions/billing.d.ts.map +1 -0
- package/dist/transactions/billing.js +189 -0
- package/dist/transactions/billing.js.map +1 -0
- package/dist/transactions/distribution.d.ts +11 -0
- package/dist/transactions/distribution.d.ts.map +1 -0
- package/dist/transactions/distribution.js +60 -0
- package/dist/transactions/distribution.js.map +1 -0
- package/dist/transactions/gov.d.ts +11 -0
- package/dist/transactions/gov.d.ts.map +1 -0
- package/dist/transactions/gov.js +108 -0
- package/dist/transactions/gov.js.map +1 -0
- package/dist/transactions/group.d.ts +11 -0
- package/dist/transactions/group.d.ts.map +1 -0
- package/dist/transactions/group.js +347 -0
- package/dist/transactions/group.js.map +1 -0
- package/dist/transactions/index.d.ts +10 -0
- package/dist/transactions/index.js +10 -0
- package/dist/transactions/manifest.d.ts +11 -0
- package/dist/transactions/manifest.d.ts.map +1 -0
- package/dist/transactions/manifest.js +59 -0
- package/dist/transactions/manifest.js.map +1 -0
- package/dist/transactions/sku.d.ts +11 -0
- package/dist/transactions/sku.d.ts.map +1 -0
- package/dist/transactions/sku.js +191 -0
- package/dist/transactions/sku.js.map +1 -0
- package/dist/transactions/staking.d.ts +11 -0
- package/dist/transactions/staking.d.ts.map +1 -0
- package/dist/transactions/staking.js +79 -0
- package/dist/transactions/staking.js.map +1 -0
- package/dist/transactions/utils.d.ts +161 -0
- package/dist/transactions/utils.d.ts.map +1 -0
- package/dist/transactions/utils.js +272 -0
- package/dist/transactions/utils.js.map +1 -0
- package/dist/types.d.ts +390 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +45 -0
- package/dist/types.js.map +1 -0
- package/dist/validation.d.ts +30 -0
- package/dist/validation.d.ts.map +1 -0
- package/dist/validation.js +53 -0
- package/dist/validation.js.map +1 -0
- package/dist/version.d.ts +5 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +6 -0
- package/dist/version.js.map +1 -0
- package/dist/wallet/index.d.ts +4 -0
- package/dist/wallet/index.js +3 -0
- package/dist/wallet/mnemonic.d.ts +47 -0
- package/dist/wallet/mnemonic.d.ts.map +1 -0
- package/dist/wallet/mnemonic.js +97 -0
- package/dist/wallet/mnemonic.js.map +1 -0
- package/dist/wallet/sign-arbitrary.d.ts +12 -0
- package/dist/wallet/sign-arbitrary.d.ts.map +1 -0
- package/dist/wallet/sign-arbitrary.js +36 -0
- package/dist/wallet/sign-arbitrary.js.map +1 -0
- package/package.json +72 -0
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
import { ManifestMCPError, ManifestMCPErrorCode } from "../types.js";
|
|
2
|
+
import { buildTxResult, extractFlag, filterConsumedArgs, parseAmount, parseHexBytes, requireArgs, validateAddress, validateArgsLength } from "./utils.js";
|
|
3
|
+
import { throwUnsupportedSubcommand } from "../modules.js";
|
|
4
|
+
import { liftedinit } from "@manifest-network/manifestjs";
|
|
5
|
+
//#region src/transactions/sku.ts
|
|
6
|
+
const { MsgCreateProvider, MsgUpdateProvider, MsgDeactivateProvider, MsgCreateSKU, MsgUpdateSKU, MsgDeactivateSKU, MsgUpdateParams, Unit } = liftedinit.sku.v1;
|
|
7
|
+
/**
|
|
8
|
+
* Parse a unit string to the Unit enum value.
|
|
9
|
+
* Accepts 'per-hour' or 'per-day'.
|
|
10
|
+
*/
|
|
11
|
+
function parseUnit(value) {
|
|
12
|
+
switch (value.toLowerCase()) {
|
|
13
|
+
case "per-hour": return Unit.UNIT_PER_HOUR;
|
|
14
|
+
case "per-day": return Unit.UNIT_PER_DAY;
|
|
15
|
+
default: throw new ManifestMCPError(ManifestMCPErrorCode.TX_FAILED, `Invalid unit: "${value}". Expected "per-hour" or "per-day".`);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Parse a boolean string ('true' or 'false').
|
|
20
|
+
*/
|
|
21
|
+
function parseBooleanString(value, fieldName) {
|
|
22
|
+
const lower = value.toLowerCase();
|
|
23
|
+
if (lower === "true") return true;
|
|
24
|
+
if (lower === "false") return false;
|
|
25
|
+
throw new ManifestMCPError(ManifestMCPErrorCode.TX_FAILED, `Invalid ${fieldName}: "${value}". Expected "true" or "false".`);
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Route SKU transaction to appropriate handler
|
|
29
|
+
*/
|
|
30
|
+
async function routeSkuTransaction(client, senderAddress, subcommand, args, waitForConfirmation) {
|
|
31
|
+
validateArgsLength(args, "sku transaction");
|
|
32
|
+
switch (subcommand) {
|
|
33
|
+
case "create-provider": {
|
|
34
|
+
const { value: metaHashHex, consumedIndices } = extractFlag(args, "--meta-hash", "sku create-provider");
|
|
35
|
+
const metaHash = metaHashHex ? parseHexBytes(metaHashHex, "meta-hash", 64) : new Uint8Array();
|
|
36
|
+
const positionalArgs = filterConsumedArgs(args, consumedIndices);
|
|
37
|
+
requireArgs(positionalArgs, 3, [
|
|
38
|
+
"address",
|
|
39
|
+
"payout-address",
|
|
40
|
+
"api-url"
|
|
41
|
+
], "sku create-provider");
|
|
42
|
+
const [address, payoutAddress, apiUrl] = positionalArgs;
|
|
43
|
+
validateAddress(address, "address");
|
|
44
|
+
validateAddress(payoutAddress, "payout address");
|
|
45
|
+
const msg = {
|
|
46
|
+
typeUrl: "/liftedinit.sku.v1.MsgCreateProvider",
|
|
47
|
+
value: MsgCreateProvider.fromPartial({
|
|
48
|
+
authority: senderAddress,
|
|
49
|
+
address,
|
|
50
|
+
payoutAddress,
|
|
51
|
+
metaHash,
|
|
52
|
+
apiUrl
|
|
53
|
+
})
|
|
54
|
+
};
|
|
55
|
+
return buildTxResult("sku", "create-provider", await client.signAndBroadcast(senderAddress, [msg], "auto"), waitForConfirmation);
|
|
56
|
+
}
|
|
57
|
+
case "update-provider": {
|
|
58
|
+
const metaHashFlag = extractFlag(args, "--meta-hash", "sku update-provider");
|
|
59
|
+
const activeFlag = extractFlag(args, "--active", "sku update-provider");
|
|
60
|
+
const positionalArgs = filterConsumedArgs(args, [...metaHashFlag.consumedIndices, ...activeFlag.consumedIndices]);
|
|
61
|
+
requireArgs(positionalArgs, 4, [
|
|
62
|
+
"provider-uuid",
|
|
63
|
+
"address",
|
|
64
|
+
"payout-address",
|
|
65
|
+
"api-url"
|
|
66
|
+
], "sku update-provider");
|
|
67
|
+
const [uuid, address, payoutAddress, apiUrl] = positionalArgs;
|
|
68
|
+
validateAddress(address, "address");
|
|
69
|
+
validateAddress(payoutAddress, "payout address");
|
|
70
|
+
const metaHash = metaHashFlag.value ? parseHexBytes(metaHashFlag.value, "meta-hash", 64) : new Uint8Array();
|
|
71
|
+
const active = activeFlag.value ? parseBooleanString(activeFlag.value, "active") : true;
|
|
72
|
+
const msg = {
|
|
73
|
+
typeUrl: "/liftedinit.sku.v1.MsgUpdateProvider",
|
|
74
|
+
value: MsgUpdateProvider.fromPartial({
|
|
75
|
+
authority: senderAddress,
|
|
76
|
+
uuid,
|
|
77
|
+
address,
|
|
78
|
+
payoutAddress,
|
|
79
|
+
metaHash,
|
|
80
|
+
active,
|
|
81
|
+
apiUrl
|
|
82
|
+
})
|
|
83
|
+
};
|
|
84
|
+
return buildTxResult("sku", "update-provider", await client.signAndBroadcast(senderAddress, [msg], "auto"), waitForConfirmation);
|
|
85
|
+
}
|
|
86
|
+
case "deactivate-provider": {
|
|
87
|
+
requireArgs(args, 1, ["provider-uuid"], "sku deactivate-provider");
|
|
88
|
+
const [uuid] = args;
|
|
89
|
+
const msg = {
|
|
90
|
+
typeUrl: "/liftedinit.sku.v1.MsgDeactivateProvider",
|
|
91
|
+
value: MsgDeactivateProvider.fromPartial({
|
|
92
|
+
authority: senderAddress,
|
|
93
|
+
uuid
|
|
94
|
+
})
|
|
95
|
+
};
|
|
96
|
+
return buildTxResult("sku", "deactivate-provider", await client.signAndBroadcast(senderAddress, [msg], "auto"), waitForConfirmation);
|
|
97
|
+
}
|
|
98
|
+
case "create-sku": {
|
|
99
|
+
const { value: metaHashHex, consumedIndices } = extractFlag(args, "--meta-hash", "sku create-sku");
|
|
100
|
+
const metaHash = metaHashHex ? parseHexBytes(metaHashHex, "meta-hash", 64) : new Uint8Array();
|
|
101
|
+
const positionalArgs = filterConsumedArgs(args, consumedIndices);
|
|
102
|
+
requireArgs(positionalArgs, 4, [
|
|
103
|
+
"provider-uuid",
|
|
104
|
+
"name",
|
|
105
|
+
"unit",
|
|
106
|
+
"base-price"
|
|
107
|
+
], "sku create-sku");
|
|
108
|
+
const [providerUuid, name, unitStr, basePriceStr] = positionalArgs;
|
|
109
|
+
const unit = parseUnit(unitStr);
|
|
110
|
+
const { amount, denom } = parseAmount(basePriceStr);
|
|
111
|
+
const msg = {
|
|
112
|
+
typeUrl: "/liftedinit.sku.v1.MsgCreateSKU",
|
|
113
|
+
value: MsgCreateSKU.fromPartial({
|
|
114
|
+
authority: senderAddress,
|
|
115
|
+
providerUuid,
|
|
116
|
+
name,
|
|
117
|
+
unit,
|
|
118
|
+
basePrice: {
|
|
119
|
+
denom,
|
|
120
|
+
amount
|
|
121
|
+
},
|
|
122
|
+
metaHash
|
|
123
|
+
})
|
|
124
|
+
};
|
|
125
|
+
return buildTxResult("sku", "create-sku", await client.signAndBroadcast(senderAddress, [msg], "auto"), waitForConfirmation);
|
|
126
|
+
}
|
|
127
|
+
case "update-sku": {
|
|
128
|
+
const metaHashFlag = extractFlag(args, "--meta-hash", "sku update-sku");
|
|
129
|
+
const activeFlag = extractFlag(args, "--active", "sku update-sku");
|
|
130
|
+
const positionalArgs = filterConsumedArgs(args, [...metaHashFlag.consumedIndices, ...activeFlag.consumedIndices]);
|
|
131
|
+
requireArgs(positionalArgs, 5, [
|
|
132
|
+
"sku-uuid",
|
|
133
|
+
"provider-uuid",
|
|
134
|
+
"name",
|
|
135
|
+
"unit",
|
|
136
|
+
"base-price"
|
|
137
|
+
], "sku update-sku");
|
|
138
|
+
const [uuid, providerUuid, name, unitStr, basePriceStr] = positionalArgs;
|
|
139
|
+
const unit = parseUnit(unitStr);
|
|
140
|
+
const { amount, denom } = parseAmount(basePriceStr);
|
|
141
|
+
const metaHash = metaHashFlag.value ? parseHexBytes(metaHashFlag.value, "meta-hash", 64) : new Uint8Array();
|
|
142
|
+
const active = activeFlag.value ? parseBooleanString(activeFlag.value, "active") : true;
|
|
143
|
+
const msg = {
|
|
144
|
+
typeUrl: "/liftedinit.sku.v1.MsgUpdateSKU",
|
|
145
|
+
value: MsgUpdateSKU.fromPartial({
|
|
146
|
+
authority: senderAddress,
|
|
147
|
+
uuid,
|
|
148
|
+
providerUuid,
|
|
149
|
+
name,
|
|
150
|
+
unit,
|
|
151
|
+
basePrice: {
|
|
152
|
+
denom,
|
|
153
|
+
amount
|
|
154
|
+
},
|
|
155
|
+
metaHash,
|
|
156
|
+
active
|
|
157
|
+
})
|
|
158
|
+
};
|
|
159
|
+
return buildTxResult("sku", "update-sku", await client.signAndBroadcast(senderAddress, [msg], "auto"), waitForConfirmation);
|
|
160
|
+
}
|
|
161
|
+
case "deactivate-sku": {
|
|
162
|
+
requireArgs(args, 1, ["sku-uuid"], "sku deactivate-sku");
|
|
163
|
+
const [uuid] = args;
|
|
164
|
+
const msg = {
|
|
165
|
+
typeUrl: "/liftedinit.sku.v1.MsgDeactivateSKU",
|
|
166
|
+
value: MsgDeactivateSKU.fromPartial({
|
|
167
|
+
authority: senderAddress,
|
|
168
|
+
uuid
|
|
169
|
+
})
|
|
170
|
+
};
|
|
171
|
+
return buildTxResult("sku", "deactivate-sku", await client.signAndBroadcast(senderAddress, [msg], "auto"), waitForConfirmation);
|
|
172
|
+
}
|
|
173
|
+
case "update-params": {
|
|
174
|
+
requireArgs(args, 1, ["allowed-address"], "sku update-params");
|
|
175
|
+
for (const addr of args) validateAddress(addr, "allowed address");
|
|
176
|
+
const msg = {
|
|
177
|
+
typeUrl: "/liftedinit.sku.v1.MsgUpdateParams",
|
|
178
|
+
value: MsgUpdateParams.fromPartial({
|
|
179
|
+
authority: senderAddress,
|
|
180
|
+
params: { allowedList: args }
|
|
181
|
+
})
|
|
182
|
+
};
|
|
183
|
+
return buildTxResult("sku", "update-params", await client.signAndBroadcast(senderAddress, [msg], "auto"), waitForConfirmation);
|
|
184
|
+
}
|
|
185
|
+
default: throwUnsupportedSubcommand("tx", "sku", subcommand);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
//#endregion
|
|
189
|
+
export { routeSkuTransaction };
|
|
190
|
+
|
|
191
|
+
//# sourceMappingURL=sku.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sku.js","names":[],"sources":["../../src/transactions/sku.ts"],"sourcesContent":["import type { SigningStargateClient } from '@cosmjs/stargate';\nimport { liftedinit } 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 MAX_META_HASH_BYTES,\n parseAmount,\n parseHexBytes,\n requireArgs,\n validateAddress,\n validateArgsLength,\n} from './utils.js';\n\nconst {\n MsgCreateProvider,\n MsgUpdateProvider,\n MsgDeactivateProvider,\n MsgCreateSKU,\n MsgUpdateSKU,\n MsgDeactivateSKU,\n MsgUpdateParams,\n Unit,\n} = liftedinit.sku.v1;\n\n/**\n * Parse a unit string to the Unit enum value.\n * Accepts 'per-hour' or 'per-day'.\n */\nfunction parseUnit(value: string): number {\n switch (value.toLowerCase()) {\n case 'per-hour':\n return Unit.UNIT_PER_HOUR;\n case 'per-day':\n return Unit.UNIT_PER_DAY;\n default:\n throw new ManifestMCPError(\n ManifestMCPErrorCode.TX_FAILED,\n `Invalid unit: \"${value}\". Expected \"per-hour\" or \"per-day\".`,\n );\n }\n}\n\n/**\n * Parse a boolean string ('true' or 'false').\n */\nfunction parseBooleanString(value: string, fieldName: string): boolean {\n const lower = value.toLowerCase();\n if (lower === 'true') return true;\n if (lower === 'false') return false;\n throw new ManifestMCPError(\n ManifestMCPErrorCode.TX_FAILED,\n `Invalid ${fieldName}: \"${value}\". Expected \"true\" or \"false\".`,\n );\n}\n\n/**\n * Route SKU transaction to appropriate handler\n */\nexport async function routeSkuTransaction(\n client: SigningStargateClient,\n senderAddress: string,\n subcommand: string,\n args: string[],\n waitForConfirmation: boolean,\n): Promise<CosmosTxResult> {\n validateArgsLength(args, 'sku transaction');\n\n switch (subcommand) {\n case 'create-provider': {\n // Parse optional --meta-hash flag\n const { value: metaHashHex, consumedIndices } = extractFlag(\n args,\n '--meta-hash',\n 'sku create-provider',\n );\n const metaHash = metaHashHex\n ? parseHexBytes(metaHashHex, 'meta-hash', MAX_META_HASH_BYTES)\n : new Uint8Array();\n const positionalArgs = filterConsumedArgs(args, consumedIndices);\n\n requireArgs(\n positionalArgs,\n 3,\n ['address', 'payout-address', 'api-url'],\n 'sku create-provider',\n );\n const [address, payoutAddress, apiUrl] = positionalArgs;\n validateAddress(address, 'address');\n validateAddress(payoutAddress, 'payout address');\n\n const msg = {\n typeUrl: '/liftedinit.sku.v1.MsgCreateProvider',\n value: MsgCreateProvider.fromPartial({\n authority: senderAddress,\n address,\n payoutAddress,\n metaHash,\n apiUrl,\n }),\n };\n\n const result = await client.signAndBroadcast(\n senderAddress,\n [msg],\n 'auto',\n );\n return buildTxResult(\n 'sku',\n 'create-provider',\n result,\n waitForConfirmation,\n );\n }\n\n case 'update-provider': {\n // Parse optional flags\n const metaHashFlag = extractFlag(\n args,\n '--meta-hash',\n 'sku update-provider',\n );\n const activeFlag = extractFlag(args, '--active', 'sku update-provider');\n const allConsumed = [\n ...metaHashFlag.consumedIndices,\n ...activeFlag.consumedIndices,\n ];\n const positionalArgs = filterConsumedArgs(args, allConsumed);\n\n requireArgs(\n positionalArgs,\n 4,\n ['provider-uuid', 'address', 'payout-address', 'api-url'],\n 'sku update-provider',\n );\n const [uuid, address, payoutAddress, apiUrl] = positionalArgs;\n validateAddress(address, 'address');\n validateAddress(payoutAddress, 'payout address');\n\n const metaHash = metaHashFlag.value\n ? parseHexBytes(metaHashFlag.value, 'meta-hash', MAX_META_HASH_BYTES)\n : new Uint8Array();\n const active = activeFlag.value\n ? parseBooleanString(activeFlag.value, 'active')\n : true;\n\n const msg = {\n typeUrl: '/liftedinit.sku.v1.MsgUpdateProvider',\n value: MsgUpdateProvider.fromPartial({\n authority: senderAddress,\n uuid,\n address,\n payoutAddress,\n metaHash,\n active,\n apiUrl,\n }),\n };\n\n const result = await client.signAndBroadcast(\n senderAddress,\n [msg],\n 'auto',\n );\n return buildTxResult(\n 'sku',\n 'update-provider',\n result,\n waitForConfirmation,\n );\n }\n\n case 'deactivate-provider': {\n requireArgs(args, 1, ['provider-uuid'], 'sku deactivate-provider');\n const [uuid] = args;\n\n const msg = {\n typeUrl: '/liftedinit.sku.v1.MsgDeactivateProvider',\n value: MsgDeactivateProvider.fromPartial({\n authority: senderAddress,\n uuid,\n }),\n };\n\n const result = await client.signAndBroadcast(\n senderAddress,\n [msg],\n 'auto',\n );\n return buildTxResult(\n 'sku',\n 'deactivate-provider',\n result,\n waitForConfirmation,\n );\n }\n\n case 'create-sku': {\n // Parse optional --meta-hash flag\n const { value: metaHashHex, consumedIndices } = extractFlag(\n args,\n '--meta-hash',\n 'sku create-sku',\n );\n const metaHash = metaHashHex\n ? parseHexBytes(metaHashHex, 'meta-hash', MAX_META_HASH_BYTES)\n : new Uint8Array();\n const positionalArgs = filterConsumedArgs(args, consumedIndices);\n\n requireArgs(\n positionalArgs,\n 4,\n ['provider-uuid', 'name', 'unit', 'base-price'],\n 'sku create-sku',\n );\n const [providerUuid, name, unitStr, basePriceStr] = positionalArgs;\n\n const unit = parseUnit(unitStr);\n const { amount, denom } = parseAmount(basePriceStr);\n\n const msg = {\n typeUrl: '/liftedinit.sku.v1.MsgCreateSKU',\n value: MsgCreateSKU.fromPartial({\n authority: senderAddress,\n providerUuid,\n name,\n unit,\n basePrice: { denom, amount },\n metaHash,\n }),\n };\n\n const result = await client.signAndBroadcast(\n senderAddress,\n [msg],\n 'auto',\n );\n return buildTxResult('sku', 'create-sku', result, waitForConfirmation);\n }\n\n case 'update-sku': {\n // Parse optional flags\n const metaHashFlag = extractFlag(args, '--meta-hash', 'sku update-sku');\n const activeFlag = extractFlag(args, '--active', 'sku update-sku');\n const allConsumed = [\n ...metaHashFlag.consumedIndices,\n ...activeFlag.consumedIndices,\n ];\n const positionalArgs = filterConsumedArgs(args, allConsumed);\n\n requireArgs(\n positionalArgs,\n 5,\n ['sku-uuid', 'provider-uuid', 'name', 'unit', 'base-price'],\n 'sku update-sku',\n );\n const [uuid, providerUuid, name, unitStr, basePriceStr] = positionalArgs;\n\n const unit = parseUnit(unitStr);\n const { amount, denom } = parseAmount(basePriceStr);\n const metaHash = metaHashFlag.value\n ? parseHexBytes(metaHashFlag.value, 'meta-hash', MAX_META_HASH_BYTES)\n : new Uint8Array();\n const active = activeFlag.value\n ? parseBooleanString(activeFlag.value, 'active')\n : true;\n\n const msg = {\n typeUrl: '/liftedinit.sku.v1.MsgUpdateSKU',\n value: MsgUpdateSKU.fromPartial({\n authority: senderAddress,\n uuid,\n providerUuid,\n name,\n unit,\n basePrice: { denom, amount },\n metaHash,\n active,\n }),\n };\n\n const result = await client.signAndBroadcast(\n senderAddress,\n [msg],\n 'auto',\n );\n return buildTxResult('sku', 'update-sku', result, waitForConfirmation);\n }\n\n case 'deactivate-sku': {\n requireArgs(args, 1, ['sku-uuid'], 'sku deactivate-sku');\n const [uuid] = args;\n\n const msg = {\n typeUrl: '/liftedinit.sku.v1.MsgDeactivateSKU',\n value: MsgDeactivateSKU.fromPartial({\n authority: senderAddress,\n uuid,\n }),\n };\n\n const result = await client.signAndBroadcast(\n senderAddress,\n [msg],\n 'auto',\n );\n return buildTxResult(\n 'sku',\n 'deactivate-sku',\n result,\n waitForConfirmation,\n );\n }\n\n case 'update-params': {\n requireArgs(args, 1, ['allowed-address'], 'sku update-params');\n for (const addr of args) {\n validateAddress(addr, 'allowed address');\n }\n\n const msg = {\n typeUrl: '/liftedinit.sku.v1.MsgUpdateParams',\n value: MsgUpdateParams.fromPartial({\n authority: senderAddress,\n params: {\n allowedList: args,\n },\n }),\n };\n\n const result = await client.signAndBroadcast(\n senderAddress,\n [msg],\n 'auto',\n );\n return buildTxResult('sku', 'update-params', result, waitForConfirmation);\n }\n\n default:\n throwUnsupportedSubcommand('tx', 'sku', 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/staking.d.ts
|
|
5
|
+
/**
|
|
6
|
+
* Route staking transaction to appropriate handler
|
|
7
|
+
*/
|
|
8
|
+
declare function routeStakingTransaction(client: SigningStargateClient, senderAddress: string, subcommand: string, args: string[], waitForConfirmation: boolean): Promise<CosmosTxResult>;
|
|
9
|
+
//#endregion
|
|
10
|
+
export { routeStakingTransaction };
|
|
11
|
+
//# sourceMappingURL=staking.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"staking.d.ts","names":[],"sources":["../../src/transactions/staking.ts"],"mappings":";;;;;;AAkBA;iBAAsB,uBAAA,CACpB,MAAA,EAAQ,qBAAA,EACR,aAAA,UACA,UAAA,UACA,IAAA,YACA,mBAAA,YACC,OAAA,CAAQ,cAAA"}
|
|
@@ -0,0 +1,79 @@
|
|
|
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/staking.ts
|
|
5
|
+
const { MsgDelegate, MsgUndelegate, MsgBeginRedelegate } = cosmos.staking.v1beta1;
|
|
6
|
+
/**
|
|
7
|
+
* Route staking transaction to appropriate handler
|
|
8
|
+
*/
|
|
9
|
+
async function routeStakingTransaction(client, senderAddress, subcommand, args, waitForConfirmation) {
|
|
10
|
+
validateArgsLength(args, "staking transaction");
|
|
11
|
+
switch (subcommand) {
|
|
12
|
+
case "delegate": {
|
|
13
|
+
requireArgs(args, 2, ["validator-address", "amount"], "staking delegate");
|
|
14
|
+
const [validatorAddress, amountStr] = args;
|
|
15
|
+
validateAddress(validatorAddress, "validator address");
|
|
16
|
+
const { amount, denom } = parseAmount(amountStr);
|
|
17
|
+
const msg = {
|
|
18
|
+
typeUrl: "/cosmos.staking.v1beta1.MsgDelegate",
|
|
19
|
+
value: MsgDelegate.fromPartial({
|
|
20
|
+
delegatorAddress: senderAddress,
|
|
21
|
+
validatorAddress,
|
|
22
|
+
amount: {
|
|
23
|
+
denom,
|
|
24
|
+
amount
|
|
25
|
+
}
|
|
26
|
+
})
|
|
27
|
+
};
|
|
28
|
+
return buildTxResult("staking", "delegate", await client.signAndBroadcast(senderAddress, [msg], "auto"), waitForConfirmation);
|
|
29
|
+
}
|
|
30
|
+
case "unbond":
|
|
31
|
+
case "undelegate": {
|
|
32
|
+
requireArgs(args, 2, ["validator-address", "amount"], "staking unbond");
|
|
33
|
+
const [validatorAddress, amountStr] = args;
|
|
34
|
+
validateAddress(validatorAddress, "validator address");
|
|
35
|
+
const { amount, denom } = parseAmount(amountStr);
|
|
36
|
+
const msg = {
|
|
37
|
+
typeUrl: "/cosmos.staking.v1beta1.MsgUndelegate",
|
|
38
|
+
value: MsgUndelegate.fromPartial({
|
|
39
|
+
delegatorAddress: senderAddress,
|
|
40
|
+
validatorAddress,
|
|
41
|
+
amount: {
|
|
42
|
+
denom,
|
|
43
|
+
amount
|
|
44
|
+
}
|
|
45
|
+
})
|
|
46
|
+
};
|
|
47
|
+
return buildTxResult("staking", "unbond", await client.signAndBroadcast(senderAddress, [msg], "auto"), waitForConfirmation);
|
|
48
|
+
}
|
|
49
|
+
case "redelegate": {
|
|
50
|
+
requireArgs(args, 3, [
|
|
51
|
+
"src-validator",
|
|
52
|
+
"dst-validator",
|
|
53
|
+
"amount"
|
|
54
|
+
], "staking redelegate");
|
|
55
|
+
const [srcValidatorAddress, dstValidatorAddress, amountStr] = args;
|
|
56
|
+
validateAddress(srcValidatorAddress, "source validator address");
|
|
57
|
+
validateAddress(dstValidatorAddress, "destination validator address");
|
|
58
|
+
const { amount, denom } = parseAmount(amountStr);
|
|
59
|
+
const msg = {
|
|
60
|
+
typeUrl: "/cosmos.staking.v1beta1.MsgBeginRedelegate",
|
|
61
|
+
value: MsgBeginRedelegate.fromPartial({
|
|
62
|
+
delegatorAddress: senderAddress,
|
|
63
|
+
validatorSrcAddress: srcValidatorAddress,
|
|
64
|
+
validatorDstAddress: dstValidatorAddress,
|
|
65
|
+
amount: {
|
|
66
|
+
denom,
|
|
67
|
+
amount
|
|
68
|
+
}
|
|
69
|
+
})
|
|
70
|
+
};
|
|
71
|
+
return buildTxResult("staking", "redelegate", await client.signAndBroadcast(senderAddress, [msg], "auto"), waitForConfirmation);
|
|
72
|
+
}
|
|
73
|
+
default: throwUnsupportedSubcommand("tx", "staking", subcommand);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
//#endregion
|
|
77
|
+
export { routeStakingTransaction };
|
|
78
|
+
|
|
79
|
+
//# sourceMappingURL=staking.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"staking.js","names":[],"sources":["../../src/transactions/staking.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 { MsgDelegate, MsgUndelegate, MsgBeginRedelegate } =\n cosmos.staking.v1beta1;\n\n/**\n * Route staking transaction to appropriate handler\n */\nexport async function routeStakingTransaction(\n client: SigningStargateClient,\n senderAddress: string,\n subcommand: string,\n args: string[],\n waitForConfirmation: boolean,\n): Promise<CosmosTxResult> {\n validateArgsLength(args, 'staking transaction');\n\n switch (subcommand) {\n case 'delegate': {\n requireArgs(args, 2, ['validator-address', 'amount'], 'staking delegate');\n const [validatorAddress, amountStr] = args;\n validateAddress(validatorAddress, 'validator address');\n const { amount, denom } = parseAmount(amountStr);\n\n const msg = {\n typeUrl: '/cosmos.staking.v1beta1.MsgDelegate',\n value: MsgDelegate.fromPartial({\n delegatorAddress: senderAddress,\n validatorAddress,\n amount: { denom, amount },\n }),\n };\n\n const result = await client.signAndBroadcast(\n senderAddress,\n [msg],\n 'auto',\n );\n return buildTxResult('staking', 'delegate', result, waitForConfirmation);\n }\n\n case 'unbond':\n case 'undelegate': {\n requireArgs(args, 2, ['validator-address', 'amount'], 'staking unbond');\n const [validatorAddress, amountStr] = args;\n validateAddress(validatorAddress, 'validator address');\n const { amount, denom } = parseAmount(amountStr);\n\n const msg = {\n typeUrl: '/cosmos.staking.v1beta1.MsgUndelegate',\n value: MsgUndelegate.fromPartial({\n delegatorAddress: senderAddress,\n validatorAddress,\n amount: { denom, amount },\n }),\n };\n\n const result = await client.signAndBroadcast(\n senderAddress,\n [msg],\n 'auto',\n );\n return buildTxResult('staking', 'unbond', result, waitForConfirmation);\n }\n\n case 'redelegate': {\n requireArgs(\n args,\n 3,\n ['src-validator', 'dst-validator', 'amount'],\n 'staking redelegate',\n );\n const [srcValidatorAddress, dstValidatorAddress, amountStr] = args;\n validateAddress(srcValidatorAddress, 'source validator address');\n validateAddress(dstValidatorAddress, 'destination validator address');\n const { amount, denom } = parseAmount(amountStr);\n\n const msg = {\n typeUrl: '/cosmos.staking.v1beta1.MsgBeginRedelegate',\n value: MsgBeginRedelegate.fromPartial({\n delegatorAddress: senderAddress,\n validatorSrcAddress: srcValidatorAddress,\n validatorDstAddress: dstValidatorAddress,\n amount: { denom, amount },\n }),\n };\n\n const result = await client.signAndBroadcast(\n senderAddress,\n [msg],\n 'auto',\n );\n return buildTxResult(\n 'staking',\n 'redelegate',\n result,\n waitForConfirmation,\n );\n }\n\n default:\n throwUnsupportedSubcommand('tx', 'staking', subcommand);\n }\n}\n"],"mappings":";;;;AAYA,MAAM,EAAE,aAAa,eAAe,uBAClC,OAAO,QAAQ;;;;AAKjB,eAAsB,wBACpB,QACA,eACA,YACA,MACA,qBACyB;AACzB,oBAAmB,MAAM,sBAAsB;AAE/C,SAAQ,YAAR;EACE,KAAK,YAAY;AACf,eAAY,MAAM,GAAG,CAAC,qBAAqB,SAAS,EAAE,mBAAmB;GACzE,MAAM,CAAC,kBAAkB,aAAa;AACtC,mBAAgB,kBAAkB,oBAAoB;GACtD,MAAM,EAAE,QAAQ,UAAU,YAAY,UAAU;GAEhD,MAAM,MAAM;IACV,SAAS;IACT,OAAO,YAAY,YAAY;KAC7B,kBAAkB;KAClB;KACA,QAAQ;MAAE;MAAO;MAAQ;KAC1B,CAAC;IACH;AAOD,UAAO,cAAc,WAAW,YALjB,MAAM,OAAO,iBAC1B,eACA,CAAC,IAAI,EACL,OACD,EACmD,oBAAoB;;EAG1E,KAAK;EACL,KAAK,cAAc;AACjB,eAAY,MAAM,GAAG,CAAC,qBAAqB,SAAS,EAAE,iBAAiB;GACvE,MAAM,CAAC,kBAAkB,aAAa;AACtC,mBAAgB,kBAAkB,oBAAoB;GACtD,MAAM,EAAE,QAAQ,UAAU,YAAY,UAAU;GAEhD,MAAM,MAAM;IACV,SAAS;IACT,OAAO,cAAc,YAAY;KAC/B,kBAAkB;KAClB;KACA,QAAQ;MAAE;MAAO;MAAQ;KAC1B,CAAC;IACH;AAOD,UAAO,cAAc,WAAW,UALjB,MAAM,OAAO,iBAC1B,eACA,CAAC,IAAI,EACL,OACD,EACiD,oBAAoB;;EAGxE,KAAK,cAAc;AACjB,eACE,MACA,GACA;IAAC;IAAiB;IAAiB;IAAS,EAC5C,qBACD;GACD,MAAM,CAAC,qBAAqB,qBAAqB,aAAa;AAC9D,mBAAgB,qBAAqB,2BAA2B;AAChE,mBAAgB,qBAAqB,gCAAgC;GACrE,MAAM,EAAE,QAAQ,UAAU,YAAY,UAAU;GAEhD,MAAM,MAAM;IACV,SAAS;IACT,OAAO,mBAAmB,YAAY;KACpC,kBAAkB;KAClB,qBAAqB;KACrB,qBAAqB;KACrB,QAAQ;MAAE;MAAO;MAAQ;KAC1B,CAAC;IACH;AAOD,UAAO,cACL,WACA,cAPa,MAAM,OAAO,iBAC1B,eACA,CAAC,IAAI,EACL,OACD,EAKC,oBACD;;EAGH,QACE,4BAA2B,MAAM,WAAW,WAAW"}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
import { CosmosTxResult, ManifestMCPErrorCode } from "../types.js";
|
|
2
|
+
import { SigningStargateClient } from "@cosmjs/stargate";
|
|
3
|
+
|
|
4
|
+
//#region src/transactions/utils.d.ts
|
|
5
|
+
/** Maximum number of arguments allowed */
|
|
6
|
+
declare const MAX_ARGS = 100;
|
|
7
|
+
/** Maximum meta hash length in bytes (64 bytes for SHA-512) */
|
|
8
|
+
declare const MAX_META_HASH_BYTES = 64;
|
|
9
|
+
/**
|
|
10
|
+
* Result from extracting a flag from args
|
|
11
|
+
*/
|
|
12
|
+
interface ExtractedFlag {
|
|
13
|
+
/** The flag value, or undefined if flag not present */
|
|
14
|
+
value: string | undefined;
|
|
15
|
+
/** Indices consumed by the flag and its value (for filtering) */
|
|
16
|
+
consumedIndices: number[];
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Extract a flag value from args array.
|
|
20
|
+
* Returns { value, consumedIndices } or { value: undefined, consumedIndices: [] } if flag not present.
|
|
21
|
+
* Throws if flag is present but value is missing or looks like another flag.
|
|
22
|
+
*
|
|
23
|
+
* @param args - The arguments array to search
|
|
24
|
+
* @param flagName - The flag to look for (e.g., '--memo')
|
|
25
|
+
* @param context - Description for error messages (e.g., 'bank send')
|
|
26
|
+
*/
|
|
27
|
+
declare function extractFlag(args: string[], flagName: string, context: string, errorCode?: ManifestMCPErrorCode): ExtractedFlag;
|
|
28
|
+
/**
|
|
29
|
+
* Result from extracting a boolean (valueless) flag from args
|
|
30
|
+
*/
|
|
31
|
+
interface ExtractedBooleanFlag {
|
|
32
|
+
/** Whether the flag was present */
|
|
33
|
+
value: boolean;
|
|
34
|
+
/** Args with the flag removed */
|
|
35
|
+
remainingArgs: string[];
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Extract a valueless boolean flag from args array.
|
|
39
|
+
* Returns { value: true, remainingArgs } if flag is present, { value: false, remainingArgs: args } otherwise.
|
|
40
|
+
*
|
|
41
|
+
* @param args - The arguments array to search
|
|
42
|
+
* @param flagName - The flag to look for (e.g., '--active-only')
|
|
43
|
+
* @returns Object with boolean value and filtered args
|
|
44
|
+
*/
|
|
45
|
+
declare function extractBooleanFlag(args: string[], flagName: string): ExtractedBooleanFlag;
|
|
46
|
+
/**
|
|
47
|
+
* Filter args to remove consumed flag indices
|
|
48
|
+
*/
|
|
49
|
+
declare function filterConsumedArgs(args: string[], consumedIndices: number[]): string[];
|
|
50
|
+
/** Maximum memo length (Cosmos SDK default) */
|
|
51
|
+
declare const MAX_MEMO_LENGTH = 256;
|
|
52
|
+
/**
|
|
53
|
+
* Parse a colon-separated pair (e.g., "address:amount", "sku:quantity").
|
|
54
|
+
* Throws with helpful error if format is invalid.
|
|
55
|
+
*
|
|
56
|
+
* @param input - The string to parse (e.g., "manifest1abc:1000umfx")
|
|
57
|
+
* @param leftName - Name of the left value for error messages (e.g., "address")
|
|
58
|
+
* @param rightName - Name of the right value for error messages (e.g., "amount")
|
|
59
|
+
* @param context - Context for error messages (e.g., "multi-send pair")
|
|
60
|
+
* @returns Tuple of [left, right] values
|
|
61
|
+
*/
|
|
62
|
+
declare function parseColonPair(input: string, leftName: string, rightName: string, context: string): [string, string];
|
|
63
|
+
/**
|
|
64
|
+
* Validate args array length (max limit)
|
|
65
|
+
*/
|
|
66
|
+
declare function validateArgsLength(args: string[], context: string): void;
|
|
67
|
+
/**
|
|
68
|
+
* Validate that required arguments are present.
|
|
69
|
+
* Provides helpful error messages with received vs expected args.
|
|
70
|
+
*
|
|
71
|
+
* @param args - The arguments array to validate
|
|
72
|
+
* @param minCount - Minimum number of required arguments
|
|
73
|
+
* @param expectedNames - Names of expected arguments for error messages
|
|
74
|
+
* @param context - Context for error messages (e.g., 'bank send', 'staking delegate')
|
|
75
|
+
* @param errorCode - Error code to use (defaults to TX_FAILED)
|
|
76
|
+
* @throws ManifestMCPError if args.length < minCount
|
|
77
|
+
*/
|
|
78
|
+
declare function requireArgs(args: string[], minCount: number, expectedNames: string[], context: string, errorCode?: ManifestMCPErrorCode): void;
|
|
79
|
+
/**
|
|
80
|
+
* Validate a bech32 address using @cosmjs/encoding
|
|
81
|
+
*/
|
|
82
|
+
declare function validateAddress(address: string, fieldName: string, expectedPrefix?: string): void;
|
|
83
|
+
/**
|
|
84
|
+
* Validate memo length
|
|
85
|
+
*/
|
|
86
|
+
declare function validateMemo(memo: string): void;
|
|
87
|
+
/**
|
|
88
|
+
* Parse and validate a hex string into Uint8Array.
|
|
89
|
+
* Uses @cosmjs/encoding for browser compatibility.
|
|
90
|
+
*
|
|
91
|
+
* @param hexString - The hex string to parse
|
|
92
|
+
* @param fieldName - Name of the field for error messages
|
|
93
|
+
* @param maxBytes - Maximum allowed byte length
|
|
94
|
+
* @param errorCode - Error code to use (defaults to TX_FAILED)
|
|
95
|
+
* @returns Uint8Array of the parsed bytes
|
|
96
|
+
*/
|
|
97
|
+
declare function parseHexBytes(hexString: string, fieldName: string, maxBytes: number, errorCode?: ManifestMCPErrorCode): Uint8Array;
|
|
98
|
+
/**
|
|
99
|
+
* Convert Uint8Array to hex string.
|
|
100
|
+
* Uses @cosmjs/encoding for browser compatibility.
|
|
101
|
+
*/
|
|
102
|
+
declare function bytesToHex(bytes: Uint8Array): string;
|
|
103
|
+
/**
|
|
104
|
+
* Safely parse a string to BigInt with proper error handling and configurable error code.
|
|
105
|
+
* This is the base implementation used by both transaction and query utilities.
|
|
106
|
+
*/
|
|
107
|
+
declare function parseBigIntWithCode(value: string, fieldName: string, errorCode: ManifestMCPErrorCode): bigint;
|
|
108
|
+
/**
|
|
109
|
+
* Safely parse a string to BigInt with proper error handling (for transactions)
|
|
110
|
+
*/
|
|
111
|
+
declare function parseBigInt(value: string, fieldName: string): bigint;
|
|
112
|
+
/**
|
|
113
|
+
* Interface for VoteOption-like enums from cosmos protobuf modules.
|
|
114
|
+
* Both cosmos.gov.v1.VoteOption and cosmos.group.v1.VoteOption share this shape.
|
|
115
|
+
*/
|
|
116
|
+
interface VoteOptionEnum {
|
|
117
|
+
VOTE_OPTION_YES: number;
|
|
118
|
+
VOTE_OPTION_ABSTAIN: number;
|
|
119
|
+
VOTE_OPTION_NO: number;
|
|
120
|
+
VOTE_OPTION_NO_WITH_VETO: number;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Parse a vote option string to its numeric enum value.
|
|
124
|
+
* Accepts case-insensitive strings or numeric identifiers.
|
|
125
|
+
*
|
|
126
|
+
* @param optionStr - Vote option string (yes, no, abstain, no_with_veto, or 1-4)
|
|
127
|
+
* @param voteOptionEnum - The VoteOption enum object from the relevant cosmos module
|
|
128
|
+
*/
|
|
129
|
+
declare function parseVoteOption(optionStr: string, voteOptionEnum: VoteOptionEnum): number;
|
|
130
|
+
/**
|
|
131
|
+
* Parsed lease item with optional service name for stack deployments.
|
|
132
|
+
*/
|
|
133
|
+
interface ParsedLeaseItem {
|
|
134
|
+
skuUuid: string;
|
|
135
|
+
quantity: bigint;
|
|
136
|
+
serviceName: string;
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Parse a lease item string in the format "sku-uuid:quantity" or "sku-uuid:quantity:service-name".
|
|
140
|
+
* The service-name is optional and used for stack (multi-service) deployments.
|
|
141
|
+
*
|
|
142
|
+
* @param input - The string to parse (e.g., "sku-123:1" or "sku-123:1:web")
|
|
143
|
+
* @returns Parsed lease item with skuUuid, quantity, and serviceName
|
|
144
|
+
*/
|
|
145
|
+
declare function parseLeaseItem(input: string): ParsedLeaseItem;
|
|
146
|
+
/**
|
|
147
|
+
* Parse amount string into coin (e.g., "1000umfx" -> { amount: "1000", denom: "umfx" })
|
|
148
|
+
* Supports simple denoms (umfx), IBC denoms (ibc/...), and factory denoms (factory/creator/subdenom)
|
|
149
|
+
*/
|
|
150
|
+
declare function parseAmount(amountStr: string): {
|
|
151
|
+
amount: string;
|
|
152
|
+
denom: string;
|
|
153
|
+
};
|
|
154
|
+
/**
|
|
155
|
+
* Build transaction result from DeliverTxResponse.
|
|
156
|
+
* Throws ManifestMCPError if the transaction failed on-chain (non-zero code).
|
|
157
|
+
*/
|
|
158
|
+
declare function buildTxResult(module: string, subcommand: string, result: Awaited<ReturnType<SigningStargateClient['signAndBroadcast']>>, waitForConfirmation: boolean): CosmosTxResult;
|
|
159
|
+
//#endregion
|
|
160
|
+
export { ExtractedBooleanFlag, ExtractedFlag, MAX_ARGS, MAX_MEMO_LENGTH, MAX_META_HASH_BYTES, ParsedLeaseItem, buildTxResult, bytesToHex, extractBooleanFlag, extractFlag, filterConsumedArgs, parseAmount, parseBigInt, parseBigIntWithCode, parseColonPair, parseHexBytes, parseLeaseItem, parseVoteOption, requireArgs, validateAddress, validateArgsLength, validateMemo };
|
|
161
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","names":[],"sources":["../../src/transactions/utils.ts"],"mappings":";;;;;cAUa,QAAA;AAAb;AAAA,cAGa,mBAAA;;;;UAKI,aAAA;EALe;EAO9B,KAAA;EAP8B;EAS9B,eAAA;AAAA;;;;;AAYF;;;;;iBAAgB,WAAA,CACd,IAAA,YACA,QAAA,UACA,OAAA,UACA,SAAA,GAAW,oBAAA,GACV,aAAA;;;;UA4Bc,oBAAA;EA5BD;EA8Bd,KAAA;EAFe;EAIf,aAAA;AAAA;;;AAWF;;;;;;iBAAgB,kBAAA,CACd,IAAA,YACA,QAAA,WACC,oBAAA;;;AAYH;iBAAgB,kBAAA,CACd,IAAA,YACA,eAAA;;cAUW,eAAA;;AAAb;;;;;AAYA;;;;iBAAgB,cAAA,CACd,KAAA,UACA,QAAA,UACA,SAAA,UACA,OAAA;;;;iBA2Bc,kBAAA,CAAmB,IAAA,YAAgB,OAAA;;AAAnD;;;;;AAoBA;;;;;iBAAgB,WAAA,CACd,IAAA,YACA,QAAA,UACA,aAAA,YACA,OAAA,UACA,SAAA,GAAW,oBAAA;;;;iBAyBG,eAAA,CACd,OAAA,UACA,SAAA,UACA,cAAA;;;AAHF;iBAkCgB,YAAA,CAAa,IAAA;;;;;;;;AAA7B;;;iBAmBgB,aAAA,CACd,SAAA,UACA,SAAA,UACA,QAAA,UACA,SAAA,GAAW,oBAAA,GACV,UAAA;;AALH;;;iBA8CgB,UAAA,CAAW,KAAA,EAAO,UAAA;;;;;iBAQlB,mBAAA,CACd,KAAA,UACA,SAAA,UACA,SAAA,EAAW,oBAAA;;;;iBAuBG,WAAA,CAAY,KAAA,UAAe,SAAA;;;;;UAQjC,cAAA;EACR,eAAA;EACA,mBAAA;EACA,cAAA;EACA,wBAAA;AAAA;;;;;AAZF;;;iBAsBgB,eAAA,CACd,SAAA,UACA,cAAA,EAAgB,cAAA;;AAtBjB;;UAkDgB,eAAA;EACf,OAAA;EACA,QAAA;EACA,WAAA;AAAA;;;;AAjCF;;;;iBA2CgB,cAAA,CAAe,KAAA,WAAgB,eAAA;;;;;iBAkD/B,WAAA,CAAY,SAAA;EAC1B,MAAA;EACA,KAAA;AAAA;;;;;iBAoCc,aAAA,CACd,MAAA,UACA,UAAA,UACA,MAAA,EAAQ,OAAA,CAAQ,UAAA,CAAW,qBAAA,wBAC3B,mBAAA,YACC,cAAA"}
|