@t2000/cli 0.22.9 → 0.22.11
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/_esm-YNGU4L53.js +3660 -0
- package/dist/_esm-YNGU4L53.js.map +1 -0
- package/dist/ccip-3TXHQUZ5.js +17 -0
- package/dist/chunk-7LGHVVIJ.js +452 -0
- package/dist/chunk-7LGHVVIJ.js.map +1 -0
- package/dist/chunk-AB65Y674.js +32 -0
- package/dist/chunk-AB65Y674.js.map +1 -0
- package/dist/chunk-B4GPQZ3Z.js +2684 -0
- package/dist/chunk-B4GPQZ3Z.js.map +1 -0
- package/dist/chunk-DFRBOZ6E.js +68157 -0
- package/dist/chunk-DFRBOZ6E.js.map +1 -0
- package/dist/chunk-H66DC3S3.js +1908 -0
- package/dist/chunk-H66DC3S3.js.map +1 -0
- package/dist/chunk-ML6HST4W.js +4429 -0
- package/dist/chunk-ML6HST4W.js.map +1 -0
- package/dist/chunk-NGS6K3I3.js +2525 -0
- package/dist/chunk-NGS6K3I3.js.map +1 -0
- package/dist/chunk-QM6OQC5D.js +13422 -0
- package/dist/chunk-QM6OQC5D.js.map +1 -0
- package/dist/chunk-VREOXJUB.js +15856 -0
- package/dist/chunk-VREOXJUB.js.map +1 -0
- package/dist/{chunk-45YCL2KY.js → chunk-YPWSCLE3.js} +16 -3
- package/dist/chunk-YPWSCLE3.js.map +1 -0
- package/dist/chunk-Z2UDBWJ5.js +5002 -0
- package/dist/chunk-Z2UDBWJ5.js.map +1 -0
- package/dist/client-SYS6Z5RX.js +13538 -0
- package/dist/client-SYS6Z5RX.js.map +1 -0
- package/dist/client-WIWMFH43.js +117 -0
- package/dist/client-WIWMFH43.js.map +1 -0
- package/dist/{dist-3RLXPNZ5.js → dist-UUEYYCY7.js} +11 -3
- package/dist/{dist-3RLXPNZ5.js.map → dist-UUEYYCY7.js.map} +1 -1
- package/dist/dist-VHH7YQM7.js +158 -0
- package/dist/dist-VHH7YQM7.js.map +1 -0
- package/dist/esm-G2QBGTGV.js +29 -0
- package/dist/esm-G2QBGTGV.js.map +1 -0
- package/dist/esm-H7KTI5UT.js +1098 -0
- package/dist/esm-H7KTI5UT.js.map +1 -0
- package/dist/index.js +7492 -1256
- package/dist/index.js.map +1 -1
- package/dist/secp256k1-7EILYOIY.js +18 -0
- package/dist/secp256k1-7EILYOIY.js.map +1 -0
- package/package.json +10 -11
- /package/dist/{chunk-45YCL2KY.js.map → ccip-3TXHQUZ5.js.map} +0 -0
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { createRequire as __createRequire } from 'module'; import { fileURLToPath as __fileURLToPath } from 'url'; import { dirname as __pathDirname } from 'path'; const require = __createRequire(import.meta.url); const __filename = __fileURLToPath(import.meta.url); const __dirname = __pathDirname(__filename);
|
|
2
|
+
import {
|
|
3
|
+
Credential_exports,
|
|
4
|
+
Method_exports,
|
|
5
|
+
zod_exports
|
|
6
|
+
} from "./chunk-VREOXJUB.js";
|
|
7
|
+
import "./chunk-NGS6K3I3.js";
|
|
8
|
+
import "./chunk-H66DC3S3.js";
|
|
9
|
+
import "./chunk-7LGHVVIJ.js";
|
|
10
|
+
import {
|
|
11
|
+
Transaction,
|
|
12
|
+
init_transactions
|
|
13
|
+
} from "./chunk-Z2UDBWJ5.js";
|
|
14
|
+
import "./chunk-B4GPQZ3Z.js";
|
|
15
|
+
import "./chunk-YPWSCLE3.js";
|
|
16
|
+
|
|
17
|
+
// ../mpp-sui/dist/client.js
|
|
18
|
+
init_transactions();
|
|
19
|
+
var suiCharge = Method_exports.from({
|
|
20
|
+
intent: "charge",
|
|
21
|
+
name: "sui",
|
|
22
|
+
schema: {
|
|
23
|
+
credential: {
|
|
24
|
+
payload: zod_exports.object({
|
|
25
|
+
digest: zod_exports.string()
|
|
26
|
+
})
|
|
27
|
+
},
|
|
28
|
+
request: zod_exports.object({
|
|
29
|
+
amount: zod_exports.string(),
|
|
30
|
+
currency: zod_exports.string(),
|
|
31
|
+
recipient: zod_exports.string()
|
|
32
|
+
})
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
var SUI_USDC_TYPE = "0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC";
|
|
36
|
+
async function fetchCoins(client, owner, coinType) {
|
|
37
|
+
const coins = [];
|
|
38
|
+
let cursor;
|
|
39
|
+
let hasNext = true;
|
|
40
|
+
while (hasNext) {
|
|
41
|
+
const page = await client.getCoins({ owner, coinType, cursor: cursor ?? void 0 });
|
|
42
|
+
coins.push(...page.data.map((c) => ({ coinObjectId: c.coinObjectId, balance: c.balance })));
|
|
43
|
+
cursor = page.nextCursor;
|
|
44
|
+
hasNext = page.hasNextPage;
|
|
45
|
+
}
|
|
46
|
+
return coins;
|
|
47
|
+
}
|
|
48
|
+
function parseAmountToRaw(amount, decimals) {
|
|
49
|
+
const [whole = "0", frac = ""] = amount.split(".");
|
|
50
|
+
const paddedFrac = frac.padEnd(decimals, "0").slice(0, decimals);
|
|
51
|
+
return BigInt(whole + paddedFrac);
|
|
52
|
+
}
|
|
53
|
+
function sui(options) {
|
|
54
|
+
const address = options.signer.getAddress();
|
|
55
|
+
return Method_exports.toClient(suiCharge, {
|
|
56
|
+
async createCredential({ challenge }) {
|
|
57
|
+
const { amount, currency, recipient } = challenge.request;
|
|
58
|
+
const amountRaw = parseAmountToRaw(amount, 6);
|
|
59
|
+
const coins = await fetchCoins(options.client, address, currency);
|
|
60
|
+
if (coins.length === 0) {
|
|
61
|
+
throw new Error(
|
|
62
|
+
`No ${currency.split("::").pop()} balance to pay with`
|
|
63
|
+
);
|
|
64
|
+
}
|
|
65
|
+
const totalBalance = coins.reduce(
|
|
66
|
+
(sum, c) => sum + BigInt(c.balance),
|
|
67
|
+
0n
|
|
68
|
+
);
|
|
69
|
+
if (totalBalance < amountRaw) {
|
|
70
|
+
const available = Number(totalBalance) / 1e6;
|
|
71
|
+
const requested = Number(amountRaw) / 1e6;
|
|
72
|
+
throw new Error(
|
|
73
|
+
`Not enough USDC to pay $${requested.toFixed(2)} (available: $${available.toFixed(2)})`
|
|
74
|
+
);
|
|
75
|
+
}
|
|
76
|
+
const tx = new Transaction();
|
|
77
|
+
tx.setSender(address);
|
|
78
|
+
const primaryCoin = tx.object(coins[0].coinObjectId);
|
|
79
|
+
if (coins.length > 1) {
|
|
80
|
+
tx.mergeCoins(
|
|
81
|
+
primaryCoin,
|
|
82
|
+
coins.slice(1).map((c) => tx.object(c.coinObjectId))
|
|
83
|
+
);
|
|
84
|
+
}
|
|
85
|
+
const [payment] = tx.splitCoins(primaryCoin, [amountRaw]);
|
|
86
|
+
tx.transferObjects([payment], recipient);
|
|
87
|
+
let result;
|
|
88
|
+
try {
|
|
89
|
+
if (options.execute) {
|
|
90
|
+
result = await options.execute(tx);
|
|
91
|
+
} else {
|
|
92
|
+
tx.setSender(address);
|
|
93
|
+
const built = await tx.build({ client: options.client });
|
|
94
|
+
const { signature } = await options.signer.signTransaction(built);
|
|
95
|
+
result = await options.client.executeTransactionBlock({
|
|
96
|
+
transactionBlock: built,
|
|
97
|
+
signature,
|
|
98
|
+
options: { showEffects: true }
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
} catch (err) {
|
|
102
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
103
|
+
throw new Error(`Payment transaction failed: ${msg}`);
|
|
104
|
+
}
|
|
105
|
+
return Credential_exports.serialize({
|
|
106
|
+
challenge,
|
|
107
|
+
payload: { digest: result.digest }
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
export {
|
|
113
|
+
SUI_USDC_TYPE,
|
|
114
|
+
sui,
|
|
115
|
+
suiCharge
|
|
116
|
+
};
|
|
117
|
+
//# sourceMappingURL=client-WIWMFH43.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../mpp-sui/src/method.ts","../../mpp-sui/src/utils.ts","../../mpp-sui/src/client.ts"],"sourcesContent":["import { Method, z } from 'mppx';\n\nexport const suiCharge = Method.from({\n intent: 'charge',\n name: 'sui',\n schema: {\n credential: {\n payload: z.object({\n digest: z.string(),\n }),\n },\n request: z.object({\n amount: z.string(),\n currency: z.string(),\n recipient: z.string(),\n }),\n },\n});\n","import type { SuiJsonRpcClient } from '@mysten/sui/jsonRpc';\n\nexport const SUI_USDC_TYPE =\n '0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC';\n\n/**\n * Fetch ALL coins of a given type, handling Sui pagination (max 50 per page).\n */\nexport interface CoinInfo {\n coinObjectId: string;\n balance: string;\n}\n\nexport async function fetchCoins(\n client: SuiJsonRpcClient,\n owner: string,\n coinType: string,\n): Promise<CoinInfo[]> {\n const coins: CoinInfo[] = [];\n let cursor: string | null | undefined;\n let hasNext = true;\n while (hasNext) {\n const page = await client.getCoins({ owner, coinType, cursor: cursor ?? undefined });\n coins.push(...page.data.map((c) => ({ coinObjectId: c.coinObjectId, balance: c.balance })));\n cursor = page.nextCursor;\n hasNext = page.hasNextPage;\n }\n return coins;\n}\n\n/**\n * Parse a string amount to raw bigint units without floating-point math.\n * \"0.01\" with 6 decimals → 10000n\n */\nexport function parseAmountToRaw(amount: string, decimals: number): bigint {\n const [whole = '0', frac = ''] = amount.split('.');\n const paddedFrac = frac.padEnd(decimals, '0').slice(0, decimals);\n return BigInt(whole + paddedFrac);\n}\n","import { Method, Credential } from 'mppx';\nimport type { SuiJsonRpcClient } from '@mysten/sui/jsonRpc';\nimport { Transaction } from '@mysten/sui/transactions';\nimport { suiCharge } from './method.js';\nimport { fetchCoins, parseAmountToRaw } from './utils.js';\n\nexport { suiCharge } from './method.js';\nexport { SUI_USDC_TYPE } from './utils.js';\n\nexport interface TransactionSigner {\n getAddress(): string;\n signTransaction(txBytes: Uint8Array): Promise<{ signature: string }>;\n}\n\nexport interface SuiChargeOptions {\n client: SuiJsonRpcClient;\n signer: TransactionSigner;\n /** Override transaction execution (e.g. to route through a gas manager). */\n execute?: (tx: Transaction) => Promise<{ digest: string; effects: unknown }>;\n}\n\nexport function sui(options: SuiChargeOptions) {\n const address = options.signer.getAddress();\n\n return Method.toClient(suiCharge, {\n async createCredential({ challenge }) {\n const { amount, currency, recipient } = challenge.request;\n const amountRaw = parseAmountToRaw(amount, 6);\n\n const coins = await fetchCoins(options.client, address, currency);\n if (coins.length === 0) {\n throw new Error(\n `No ${currency.split('::').pop()} balance to pay with`,\n );\n }\n\n const totalBalance = coins.reduce(\n (sum, c) => sum + BigInt(c.balance),\n 0n,\n );\n if (totalBalance < amountRaw) {\n const available = Number(totalBalance) / 1e6;\n const requested = Number(amountRaw) / 1e6;\n throw new Error(\n `Not enough USDC to pay $${requested.toFixed(2)} (available: $${available.toFixed(2)})`,\n );\n }\n\n const tx = new Transaction();\n tx.setSender(address);\n\n const primaryCoin = tx.object(coins[0].coinObjectId);\n if (coins.length > 1) {\n tx.mergeCoins(\n primaryCoin,\n coins.slice(1).map((c) => tx.object(c.coinObjectId)),\n );\n }\n\n const [payment] = tx.splitCoins(primaryCoin, [amountRaw]);\n tx.transferObjects([payment], recipient);\n\n let result;\n try {\n if (options.execute) {\n result = await options.execute(tx);\n } else {\n tx.setSender(address);\n const built = await tx.build({ client: options.client });\n const { signature } = await options.signer.signTransaction(built);\n result = await options.client.executeTransactionBlock({\n transactionBlock: built,\n signature,\n options: { showEffects: true },\n });\n }\n } catch (err: unknown) {\n const msg = err instanceof Error ? err.message : String(err);\n throw new Error(`Payment transaction failed: ${msg}`);\n }\n\n return Credential.serialize({\n challenge,\n payload: { digest: result.digest },\n });\n },\n });\n}\n"],"mappings":"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","names":["Method"]}
|
|
@@ -1,9 +1,18 @@
|
|
|
1
1
|
import { createRequire as __createRequire } from 'module'; import { fileURLToPath as __fileURLToPath } from 'url'; import { dirname as __pathDirname } from 'path'; const require = __createRequire(import.meta.url); const __filename = __fileURLToPath(import.meta.url); const __dirname = __pathDirname(__filename);
|
|
2
|
+
import {
|
|
3
|
+
INVESTMENT_ASSETS,
|
|
4
|
+
SafeguardError,
|
|
5
|
+
T2000,
|
|
6
|
+
T2000Error
|
|
7
|
+
} from "./chunk-DFRBOZ6E.js";
|
|
8
|
+
import "./chunk-AB65Y674.js";
|
|
9
|
+
import "./chunk-Z2UDBWJ5.js";
|
|
10
|
+
import "./chunk-B4GPQZ3Z.js";
|
|
2
11
|
import {
|
|
3
12
|
__commonJS,
|
|
4
13
|
__export,
|
|
5
14
|
__toESM
|
|
6
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-YPWSCLE3.js";
|
|
7
16
|
|
|
8
17
|
// ../../node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/codegen/code.js
|
|
9
18
|
var require_code = __commonJS({
|
|
@@ -20965,7 +20974,6 @@ var StdioServerTransport = class {
|
|
|
20965
20974
|
import { readFile } from "fs/promises";
|
|
20966
20975
|
import { resolve } from "path";
|
|
20967
20976
|
import { homedir } from "os";
|
|
20968
|
-
import { T2000, INVESTMENT_ASSETS, SafeguardError, T2000Error } from "@t2000/sdk";
|
|
20969
20977
|
var SESSION_PATH = resolve(homedir(), ".t2000", ".session");
|
|
20970
20978
|
async function resolvePin() {
|
|
20971
20979
|
const envPin = process.env.T2000_PIN ?? process.env.T2000_PASSPHRASE;
|
|
@@ -22825,4 +22833,4 @@ async function startMcpServer(opts) {
|
|
|
22825
22833
|
export {
|
|
22826
22834
|
startMcpServer
|
|
22827
22835
|
};
|
|
22828
|
-
//# sourceMappingURL=dist-
|
|
22836
|
+
//# sourceMappingURL=dist-UUEYYCY7.js.map
|