@run402/sdk 4.119.0 → 4.121.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 (72) hide show
  1. package/README.md +1 -1
  2. package/core-dist/profiles.d.ts +2 -0
  3. package/core-dist/wallet-auth.d.ts +30 -0
  4. package/core-dist/wallet-auth.js +77 -38
  5. package/core-dist/wallet.d.ts +22 -1
  6. package/core-dist/wallet.js +21 -0
  7. package/dist/credentials.d.ts +15 -1
  8. package/dist/credentials.d.ts.map +1 -1
  9. package/dist/errors.d.ts +14 -0
  10. package/dist/errors.d.ts.map +1 -1
  11. package/dist/errors.js +22 -0
  12. package/dist/errors.js.map +1 -1
  13. package/dist/index.d.ts +1 -1
  14. package/dist/index.d.ts.map +1 -1
  15. package/dist/index.js +1 -1
  16. package/dist/index.js.map +1 -1
  17. package/dist/namespaces/contracts.d.ts +47 -0
  18. package/dist/namespaces/contracts.d.ts.map +1 -1
  19. package/dist/namespaces/contracts.js +36 -0
  20. package/dist/namespaces/contracts.js.map +1 -1
  21. package/dist/namespaces/org.d.ts.map +1 -1
  22. package/dist/namespaces/org.js +5 -3
  23. package/dist/namespaces/org.js.map +1 -1
  24. package/dist/namespaces/org.types.d.ts +5 -6
  25. package/dist/namespaces/org.types.d.ts.map +1 -1
  26. package/dist/node/_paid-stack.d.ts +18 -0
  27. package/dist/node/_paid-stack.d.ts.map +1 -1
  28. package/dist/node/_paid-stack.js +19 -0
  29. package/dist/node/_paid-stack.js.map +1 -1
  30. package/dist/node/ci.d.ts +1 -1
  31. package/dist/node/ci.d.ts.map +1 -1
  32. package/dist/node/ci.js +8 -6
  33. package/dist/node/ci.js.map +1 -1
  34. package/dist/node/credentials.d.ts.map +1 -1
  35. package/dist/node/credentials.js +5 -4
  36. package/dist/node/credentials.js.map +1 -1
  37. package/dist/node/index.d.ts +2 -1
  38. package/dist/node/index.d.ts.map +1 -1
  39. package/dist/node/index.js +2 -1
  40. package/dist/node/index.js.map +1 -1
  41. package/dist/node/org-adopt.d.ts +1 -1
  42. package/dist/node/org-adopt.d.ts.map +1 -1
  43. package/dist/node/org-adopt.js +9 -7
  44. package/dist/node/org-adopt.js.map +1 -1
  45. package/dist/node/paid-fetch.d.ts.map +1 -1
  46. package/dist/node/paid-fetch.js +6 -4
  47. package/dist/node/paid-fetch.js.map +1 -1
  48. package/dist/node/signers/index.d.ts +26 -0
  49. package/dist/node/signers/index.d.ts.map +1 -0
  50. package/dist/node/signers/index.js +35 -0
  51. package/dist/node/signers/index.js.map +1 -0
  52. package/dist/node/signers/kms.d.ts +54 -0
  53. package/dist/node/signers/kms.d.ts.map +1 -0
  54. package/dist/node/signers/kms.js +236 -0
  55. package/dist/node/signers/kms.js.map +1 -0
  56. package/dist/node/wallets-send.d.ts +62 -0
  57. package/dist/node/wallets-send.d.ts.map +1 -0
  58. package/dist/node/wallets-send.js +149 -0
  59. package/dist/node/wallets-send.js.map +1 -0
  60. package/dist/node/wallets.d.ts +33 -5
  61. package/dist/node/wallets.d.ts.map +1 -1
  62. package/dist/node/wallets.js +78 -12
  63. package/dist/node/wallets.js.map +1 -1
  64. package/dist/scoped.d.ts +4 -1
  65. package/dist/scoped.d.ts.map +1 -1
  66. package/dist/scoped.js +9 -0
  67. package/dist/scoped.js.map +1 -1
  68. package/dist/secret-gate.d.ts +1 -1
  69. package/dist/secret-gate.d.ts.map +1 -1
  70. package/dist/secret-gate.js +7 -2
  71. package/dist/secret-gate.js.map +1 -1
  72. package/package.json +5 -1
@@ -0,0 +1,236 @@
1
+ import { LocalError } from "../../errors.js";
2
+ import { PaidStackUnavailable, loadKmsStack } from "../_paid-stack.js";
3
+ const SECP256K1_N = 0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141n;
4
+ const SECP256K1_HALF_N = SECP256K1_N >> 1n;
5
+ /** KMS answered with something that is not an ECDSA signature. */
6
+ function malformed(message) {
7
+ return new LocalError(message, "signing with a KMS wallet", {
8
+ code: "KMS_SIGNATURE_MALFORMED",
9
+ next_actions: [{ type: "retry", why: "Retry once; if it persists, check the key is ECC_SECG_P256K1 / SIGN_VERIFY." }],
10
+ });
11
+ }
12
+ function bytesToHex(bytes) {
13
+ return Buffer.from(bytes).toString("hex");
14
+ }
15
+ /** DER length at `i`: returns [length, next index]. Supports short and long form. */
16
+ function derLength(der, i) {
17
+ const first = der[i];
18
+ if (first === undefined)
19
+ throw malformed("malformed DER: truncated length");
20
+ if ((first & 0x80) === 0)
21
+ return [first, i + 1];
22
+ const count = first & 0x7f;
23
+ if (count === 0 || count > 2 || i + 1 + count > der.length)
24
+ throw malformed("malformed DER: bad length");
25
+ let len = 0;
26
+ for (let j = 0; j < count; j++)
27
+ len = (len << 8) | der[i + 1 + j];
28
+ return [len, i + 1 + count];
29
+ }
30
+ /** Parse an ECDSA DER signature (SEQUENCE { INTEGER r, INTEGER s }). */
31
+ export function parseDerSignature(der) {
32
+ if (der[0] !== 0x30)
33
+ throw malformed("malformed DER signature: not a SEQUENCE");
34
+ let [, i] = derLength(der, 1);
35
+ const readInt = () => {
36
+ if (der[i] !== 0x02)
37
+ throw malformed("malformed DER signature: expected INTEGER");
38
+ const [len, start] = derLength(der, i + 1);
39
+ if (len === 0 || start + len > der.length)
40
+ throw malformed("malformed DER signature: bad INTEGER");
41
+ const value = BigInt("0x" + bytesToHex(der.slice(start, start + len)));
42
+ i = start + len;
43
+ return value;
44
+ };
45
+ const r = readInt();
46
+ const s = readInt();
47
+ if (r === 0n || s === 0n || r >= SECP256K1_N || s >= SECP256K1_N)
48
+ throw malformed("malformed DER signature: out of range");
49
+ return { r, s };
50
+ }
51
+ /**
52
+ * KMS's DER signature over `hash` → a 65-byte Ethereum signature that recovers
53
+ * to `address`, or `SIGNER_ADDRESS_MISMATCH`.
54
+ */
55
+ export async function derToEthereumSignature(viem, der, hash, address) {
56
+ const { r, s } = parseDerSignature(der);
57
+ const lowS = s > SECP256K1_HALF_N ? SECP256K1_N - s : s;
58
+ const rHex = viem.numberToHex(r, { size: 32 });
59
+ const sHex = viem.numberToHex(lowS, { size: 32 });
60
+ const recovered = [];
61
+ for (const yParity of [0, 1]) {
62
+ const signature = viem.serializeSignature({ r: rHex, s: sHex, yParity });
63
+ try {
64
+ const candidate = await viem.recoverAddress({ hash, signature });
65
+ if (candidate.toLowerCase() === address.toLowerCase())
66
+ return signature;
67
+ recovered.push(candidate);
68
+ }
69
+ catch {
70
+ // the other recovery id
71
+ }
72
+ }
73
+ throw new LocalError(`The KMS key signed as ${recovered.join(" or ") || "no recoverable address"}, not as this wallet's address ${address}.`, "signing with a KMS wallet", {
74
+ code: "SIGNER_ADDRESS_MISMATCH",
75
+ details: { expected_address: address, recovered_addresses: recovered },
76
+ next_actions: [{
77
+ type: "edit_request",
78
+ why: "The key behind this wallet's ARN is not the key it was imported from. Re-import the right key, or check wallet.json's key_arn.",
79
+ }],
80
+ });
81
+ }
82
+ function errorName(err) {
83
+ return err?.name === undefined ? "" : String(err.name);
84
+ }
85
+ /** A KMS/AWS failure as a named local error with its remedy; never renders a credential. */
86
+ export function kmsError(err, signer, context) {
87
+ if (err instanceof LocalError)
88
+ return err;
89
+ if (err instanceof PaidStackUnavailable) {
90
+ return new LocalError(`A KMS wallet needs ${err.missingPackages.join(", ")}, which is not installed.`, context, {
91
+ code: "KMS_SIGNER_UNAVAILABLE",
92
+ details: { missing_packages: err.missingPackages },
93
+ next_actions: [{ type: "upgrade_client", command: `npm install ${err.missingPackages.join(" ")}`, why: "Install the KMS client, then retry." }],
94
+ });
95
+ }
96
+ const name = errorName(err);
97
+ const message = err instanceof Error ? err.message : String(err);
98
+ if (name === "AccessDeniedException") {
99
+ const caller = /User: (arn:[^\s]+)/.exec(message)?.[1] ?? null;
100
+ return new LocalError(`${caller ?? "This AWS identity"} may not use KMS key ${signer.key_arn}.`, context, {
101
+ code: "KMS_ACCESS_DENIED",
102
+ details: { key_arn: signer.key_arn, caller_arn: caller },
103
+ next_actions: [{
104
+ type: "authenticate",
105
+ ...(signer.aws_profile ? { command: `aws sso login --profile ${signer.aws_profile}` } : {}),
106
+ why: "Sign in as the identity the key's policy names (for a seller key, that person's SellerSigner session).",
107
+ }],
108
+ });
109
+ }
110
+ const credentials = /CredentialsProviderError|ExpiredToken|UnrecognizedClient|InvalidSignature|TokenProviderError|SSO/i.test(name) ||
111
+ /token (?:has )?expired|sso session|could not load credentials|unable to load credentials|security token included in the request is expired/i.test(message);
112
+ return new LocalError(credentials
113
+ ? `The AWS session for KMS key ${signer.key_arn} is missing or expired.`
114
+ : `KMS key ${signer.key_arn} could not be reached (${name || "error"}).`, context, {
115
+ code: "KMS_SIGNER_UNAVAILABLE",
116
+ details: { key_arn: signer.key_arn, region: signer.region, aws_error: name || null },
117
+ next_actions: credentials
118
+ ? [{
119
+ type: "authenticate",
120
+ command: signer.aws_profile ? `aws sso login --profile ${signer.aws_profile}` : "aws sso login",
121
+ why: "Refresh the AWS session the key is reached through, then retry.",
122
+ }]
123
+ : [{ type: "retry", why: "Retry once KMS is reachable." }],
124
+ });
125
+ }
126
+ const clients = new Map();
127
+ /** One KMS client per (region, profile) per process. */
128
+ function kmsClient(stack, signer) {
129
+ const key = `${signer.region}|${signer.aws_profile ?? ""}`;
130
+ let client = clients.get(key);
131
+ if (!client) {
132
+ client = new stack.KMSClient({ region: signer.region, ...(signer.aws_profile ? { profile: signer.aws_profile } : {}) });
133
+ clients.set(key, client);
134
+ }
135
+ return client;
136
+ }
137
+ /** A viem account that signs through `signer` as `address`. */
138
+ export async function kmsAccount(signer, address, opts = {}) {
139
+ let stack;
140
+ try {
141
+ stack = opts.stack ?? await loadKmsStack();
142
+ }
143
+ catch (err) {
144
+ throw kmsError(err, signer, "loading the KMS signer");
145
+ }
146
+ const client = opts.client ?? kmsClient(stack, signer);
147
+ const { viem } = stack;
148
+ const signHash = async (hash) => {
149
+ let der;
150
+ try {
151
+ const out = await client.send(new stack.SignCommand({
152
+ KeyId: signer.key_arn,
153
+ Message: viem.hexToBytes(hash),
154
+ MessageType: "DIGEST",
155
+ SigningAlgorithm: "ECDSA_SHA_256",
156
+ }));
157
+ if (!out.Signature)
158
+ throw malformed("KMS returned no signature");
159
+ der = out.Signature;
160
+ }
161
+ catch (err) {
162
+ throw kmsError(err, signer, "signing with a KMS wallet");
163
+ }
164
+ return derToEthereumSignature(viem, der, hash, address);
165
+ };
166
+ const account = stack.toAccount({
167
+ address: viem.getAddress(address),
168
+ async sign({ hash }) {
169
+ return signHash(hash);
170
+ },
171
+ async signMessage({ message }) {
172
+ return signHash(viem.hashMessage(message));
173
+ },
174
+ async signTypedData(typedData) {
175
+ return signHash(viem.hashTypedData(typedData));
176
+ },
177
+ async signTransaction(transaction, options) {
178
+ const serializer = (options?.serializer ?? viem.serializeTransaction);
179
+ // As viem's own local account does: an EIP-4844 transaction is signed without its sidecars.
180
+ const signable = transaction.type === "eip4844"
181
+ ? { ...transaction, sidecars: false }
182
+ : transaction;
183
+ const signature = await signHash(viem.keccak256(await serializer(signable)));
184
+ return await serializer(transaction, viem.parseSignature(signature));
185
+ },
186
+ });
187
+ return account;
188
+ }
189
+ /**
190
+ * Read a KMS key's public key and metadata (read-only: `GetPublicKey` only)
191
+ * and derive its address; `KMS_KEY_UNSUITABLE` unless it is a secp256k1
192
+ * signing key.
193
+ */
194
+ export async function adoptKmsKey(signer, opts = {}) {
195
+ let stack;
196
+ try {
197
+ stack = opts.stack ?? await loadKmsStack();
198
+ }
199
+ catch (err) {
200
+ throw kmsError(err, signer, "importing a KMS wallet");
201
+ }
202
+ const client = opts.client ?? kmsClient(stack, signer);
203
+ let out;
204
+ try {
205
+ out = await client.send(new stack.GetPublicKeyCommand({ KeyId: signer.key_arn }));
206
+ }
207
+ catch (err) {
208
+ throw kmsError(err, signer, "importing a KMS wallet");
209
+ }
210
+ if (out.KeySpec !== "ECC_SECG_P256K1" || out.KeyUsage !== "SIGN_VERIFY" || !out.PublicKey) {
211
+ throw new LocalError(`KMS key ${signer.key_arn} is ${out.KeySpec ?? "unknown"} / ${out.KeyUsage ?? "unknown"}; a wallet needs ECC_SECG_P256K1 / SIGN_VERIFY.`, "importing a KMS wallet", {
212
+ code: "KMS_KEY_UNSUITABLE",
213
+ details: { key_arn: signer.key_arn, key_spec: out.KeySpec ?? null, key_usage: out.KeyUsage ?? null },
214
+ next_actions: [{ type: "edit_request", why: "Import an asymmetric secp256k1 signing key (ECC_SECG_P256K1, SIGN_VERIFY)." }],
215
+ });
216
+ }
217
+ return { address: addressFromSpki(stack.viem, out.PublicKey), key_spec: out.KeySpec, key_usage: out.KeyUsage };
218
+ }
219
+ const SECP256K1_SPKI_PREFIX = "3056301006072a8648ce3d020106052b8104000a034200";
220
+ /** The EVM address of a secp256k1 SubjectPublicKeyInfo (what KMS GetPublicKey returns). */
221
+ export function addressFromSpki(viem, der) {
222
+ const hex = bytesToHex(der);
223
+ if (!hex.startsWith(SECP256K1_SPKI_PREFIX) || hex.length !== SECP256K1_SPKI_PREFIX.length + 130 || hex.slice(SECP256K1_SPKI_PREFIX.length, SECP256K1_SPKI_PREFIX.length + 2) !== "04") {
224
+ throw new LocalError("The KMS public key is not a secp256k1 SubjectPublicKeyInfo with an uncompressed point.", "importing a KMS wallet", {
225
+ code: "KMS_KEY_UNSUITABLE",
226
+ next_actions: [{ type: "edit_request", why: "Import an asymmetric secp256k1 signing key (ECC_SECG_P256K1, SIGN_VERIFY)." }],
227
+ });
228
+ }
229
+ const hash = viem.keccak256(`0x${hex.slice(SECP256K1_SPKI_PREFIX.length + 2)}`);
230
+ return viem.getAddress(`0x${hash.slice(-40)}`);
231
+ }
232
+ /** Test seam: forget cached clients. */
233
+ export function resetKmsClientsForTests() {
234
+ clients.clear();
235
+ }
236
+ //# sourceMappingURL=kms.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kms.js","sourceRoot":"","sources":["../../../src/node/signers/kms.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * `r.wallets.send` (spec `wallet-signers`, "Wallets Send USDC From Themselves
3
+ * Or From An Owned Smart Account"; `mpp-tempo-client-surface`, "Sending
4
+ * pathUSD On Tempo"). Moves a stablecoin from the selected wallet, which may
5
+ * be key-backed or KMS-backed:
6
+ *
7
+ * - `base` / `base-sepolia`: USDC, from the wallet itself, or `from` a
8
+ * CoinbaseSmartWallet the wallet owns (one transaction from the wallet
9
+ * calling the smart account's `execute`); gas in ETH.
10
+ * - `tempo` / `tempo-moderato`: pathUSD from the wallet itself; Tempo has no
11
+ * gas token, so the fee is paid in pathUSD too.
12
+ *
13
+ * Without `confirm: true` it checks everything and returns a preview without
14
+ * signing. A send reports success only once the transaction is mined
15
+ * successfully; a revert is a failure carrying its hash.
16
+ */
17
+ import type { LocalAccount, Transport } from "viem";
18
+ export type SendNetwork = "base" | "base-sepolia" | "tempo" | "tempo-moderato";
19
+ export declare const SEND_NETWORKS: readonly SendNetwork[];
20
+ export interface SendOptions {
21
+ /** Decimal amount of the network's stablecoin, at most 6 decimal places (e.g. "10", "0.5"). */
22
+ amount: string;
23
+ to: string;
24
+ /** A CoinbaseSmartWallet the wallet owns, to send from instead of the wallet itself (Base only). */
25
+ from?: string;
26
+ network?: SendNetwork;
27
+ /** Sign and send. Without it, the checks run and a preview is returned. */
28
+ confirm?: boolean;
29
+ }
30
+ export interface SendPreview {
31
+ preview: true;
32
+ network: SendNetwork;
33
+ asset: "USDC" | "pathUSD";
34
+ amount_usd_micros: number;
35
+ /** The address the money leaves. */
36
+ from: string;
37
+ to: string;
38
+ /** The address that signs and pays the fee. */
39
+ sender: string;
40
+ balance_usd_micros: number;
41
+ /** Gas units the send is estimated to use; null when the node could not estimate. */
42
+ estimated_gas: number | null;
43
+ }
44
+ export interface SendResult {
45
+ tx_hash: string;
46
+ from: string;
47
+ to: string;
48
+ amount_usd_micros: number;
49
+ network: SendNetwork;
50
+ asset: "USDC" | "pathUSD";
51
+ explorer_url: string;
52
+ }
53
+ /** "10.5" → 10_500_000n; refuses anything that is not a positive amount with at most 6 decimals. */
54
+ export declare function parseStablecoinAmount(amount: string): bigint;
55
+ /** The CLI command for these options, as the sandbox refusal names it. */
56
+ export declare function sendCommand(opts: Partial<SendOptions>): string;
57
+ export interface SendDeps {
58
+ /** Test seam: the RPC transport (default: the chain's public RPC). */
59
+ transport?: Transport;
60
+ }
61
+ export declare function sendFromWallet(account: LocalAccount, opts: SendOptions, deps?: SendDeps): Promise<SendPreview | SendResult>;
62
+ //# sourceMappingURL=wallets-send.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wallets-send.d.ts","sourceRoot":"","sources":["../../src/node/wallets-send.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,EAAuB,YAAY,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AAIzE,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,cAAc,GAAG,OAAO,GAAG,gBAAgB,CAAC;AAE/E,eAAO,MAAM,aAAa,EAAE,SAAS,WAAW,EAAwD,CAAC;AAmBzG,MAAM,WAAW,WAAW;IAC1B,+FAA+F;IAC/F,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,MAAM,CAAC;IACX,oGAAoG;IACpG,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,2EAA2E;IAC3E,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,IAAI,CAAC;IACd,OAAO,EAAE,WAAW,CAAC;IACrB,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,oCAAoC;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,+CAA+C;IAC/C,MAAM,EAAE,MAAM,CAAC;IACf,kBAAkB,EAAE,MAAM,CAAC;IAC3B,qFAAqF;IACrF,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,iBAAiB,EAAE,MAAM,CAAC;IAC1B,OAAO,EAAE,WAAW,CAAC;IACrB,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;CACtB;AAQD,oGAAoG;AACpG,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAQ5D;AA4BD,0EAA0E;AAC1E,wBAAgB,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,MAAM,CAU9D;AAED,MAAM,WAAW,QAAQ;IACvB,sEAAsE;IACtE,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB;AAED,wBAAsB,cAAc,CAAC,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,GAAE,QAAa,GAAG,OAAO,CAAC,WAAW,GAAG,UAAU,CAAC,CAuFrI"}
@@ -0,0 +1,149 @@
1
+ import { LocalError } from "../errors.js";
2
+ import { PATH_USD, TEMPO_FEE_HEADROOM_USD_MICROS } from "./tempo.js";
3
+ export const SEND_NETWORKS = ["base", "base-sepolia", "tempo", "tempo-moderato"];
4
+ const TOKENS = {
5
+ base: { token: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", asset: "USDC" },
6
+ "base-sepolia": { token: "0x036CbD53842c5426634e7929541eC2318f3dCF7e", asset: "USDC" },
7
+ tempo: { token: PATH_USD, asset: "pathUSD" },
8
+ "tempo-moderato": { token: PATH_USD, asset: "pathUSD" },
9
+ };
10
+ const ERC20_ABI = [
11
+ { type: "function", name: "transfer", stateMutability: "nonpayable", inputs: [{ name: "to", type: "address" }, { name: "amount", type: "uint256" }], outputs: [{ type: "bool" }] },
12
+ { type: "function", name: "balanceOf", stateMutability: "view", inputs: [{ name: "account", type: "address" }], outputs: [{ type: "uint256" }] },
13
+ ];
14
+ const SMART_WALLET_ABI = [
15
+ { type: "function", name: "isOwnerAddress", stateMutability: "view", inputs: [{ name: "account", type: "address" }], outputs: [{ type: "bool" }] },
16
+ { type: "function", name: "execute", stateMutability: "payable", inputs: [{ name: "target", type: "address" }, { name: "value", type: "uint256" }, { name: "data", type: "bytes" }], outputs: [] },
17
+ ];
18
+ const CONTEXT = "sending from a wallet";
19
+ function badInput(message, code, details) {
20
+ return new LocalError(message, CONTEXT, { code, details, next_actions: [{ type: "edit_request", why: message }] });
21
+ }
22
+ /** "10.5" → 10_500_000n; refuses anything that is not a positive amount with at most 6 decimals. */
23
+ export function parseStablecoinAmount(amount) {
24
+ const text = typeof amount === "string" ? amount.trim() : "";
25
+ const match = /^(\d+)(?:\.(\d{1,6}))?$/.exec(text);
26
+ const micros = match ? BigInt(match[1]) * 1000000n + BigInt((match[2] ?? "").padEnd(6, "0") || "0") : 0n;
27
+ if (!match || micros <= 0n) {
28
+ throw badInput("The amount must be a positive number with at most 6 decimal places, e.g. 10 or 0.5.", "BAD_AMOUNT", { amount: text.slice(0, 32) });
29
+ }
30
+ return micros;
31
+ }
32
+ async function chainFor(network) {
33
+ const chains = await import("viem/chains");
34
+ switch (network) {
35
+ case "base": return chains.base;
36
+ case "base-sepolia": return chains.baseSepolia;
37
+ // Tempo pays fees in a TIP-20 stablecoin: name pathUSD so the fee comes from the same balance.
38
+ case "tempo": return chains.tempo.extend({ feeToken: PATH_USD });
39
+ case "tempo-moderato": return chains.tempoModerato.extend({ feeToken: PATH_USD });
40
+ }
41
+ }
42
+ function insufficient(asset, address, needed, held, unit) {
43
+ const shortfall = needed - held;
44
+ return new LocalError(`${address} holds too little ${asset} for this send: ${shortfall} ${unit === "wei" ? "wei" : "USD micros"} short.`, CONTEXT, {
45
+ code: "SEND_INSUFFICIENT_BALANCE",
46
+ details: unit === "wei"
47
+ ? { asset, address, needed_wei: needed.toString(), held_wei: held.toString(), shortfall_wei: shortfall.toString() }
48
+ : { asset, address, needed_usd_micros: Number(needed), held_usd_micros: Number(held), shortfall_usd_micros: Number(shortfall) },
49
+ next_actions: [{ type: "fund_wallet", why: `Send ${asset} to ${address}, then retry.` }],
50
+ });
51
+ }
52
+ /** The CLI command for these options, as the sandbox refusal names it. */
53
+ export function sendCommand(opts) {
54
+ const word = (v, placeholder) => typeof v === "string" && /^[A-Za-z0-9.x_-]+$/.test(v.trim()) ? v.trim() : placeholder;
55
+ return [
56
+ "run402 wallets send",
57
+ word(opts.amount, "<amount>"),
58
+ "--to", word(opts.to, "<address>"),
59
+ ...(opts.from ? ["--from", word(opts.from, "<smart-account>")] : []),
60
+ ...(opts.network && opts.network !== "base" ? ["--network", word(opts.network, "<network>")] : []),
61
+ ].join(" ");
62
+ }
63
+ export async function sendFromWallet(account, opts, deps = {}) {
64
+ const viem = await import("viem");
65
+ const network = opts.network ?? "base";
66
+ if (!SEND_NETWORKS.includes(network)) {
67
+ throw badInput(`--network must be one of ${SEND_NETWORKS.join(", ")}.`, "BAD_NETWORK", { network: String(network).slice(0, 32) });
68
+ }
69
+ const amount = parseStablecoinAmount(opts.amount);
70
+ if (typeof opts.to !== "string" || !viem.isAddress(opts.to, { strict: false })) {
71
+ throw badInput("--to must be a 0x address.", "BAD_ADDRESS", { field: "to" });
72
+ }
73
+ const to = viem.getAddress(opts.to);
74
+ const isTempo = network === "tempo" || network === "tempo-moderato";
75
+ let from = null;
76
+ if (opts.from !== undefined) {
77
+ if (isTempo)
78
+ throw badInput("--from (a smart account) is supported on Base only.", "SEND_FROM_UNSUPPORTED", { network });
79
+ if (!viem.isAddress(opts.from, { strict: false }))
80
+ throw badInput("--from must be a 0x address.", "BAD_ADDRESS", { field: "from" });
81
+ from = viem.getAddress(opts.from);
82
+ }
83
+ const chain = await chainFor(network);
84
+ const transport = deps.transport ?? viem.http();
85
+ const publicClient = viem.createPublicClient({ chain, transport });
86
+ const { token, asset } = TOKENS[network];
87
+ const sender = account.address;
88
+ const payer = from ?? sender;
89
+ if (from) {
90
+ const owner = await publicClient.readContract({ address: from, abi: SMART_WALLET_ABI, functionName: "isOwnerAddress", args: [sender] });
91
+ if (!owner) {
92
+ throw new LocalError(`${sender} is not an owner of smart account ${from}.`, CONTEXT, {
93
+ code: "SMART_ACCOUNT_NOT_OWNER",
94
+ details: { smart_account: from, wallet: sender, network },
95
+ next_actions: [{ type: "edit_request", why: "Select a wallet that owns this smart account with --wallet, or drop --from to send from the wallet itself." }],
96
+ });
97
+ }
98
+ }
99
+ const balance = await publicClient.readContract({ address: token, abi: ERC20_ABI, functionName: "balanceOf", args: [payer] });
100
+ // On Tempo the fee comes out of the same pathUSD balance.
101
+ const needed = isTempo ? amount + TEMPO_FEE_HEADROOM_USD_MICROS : amount;
102
+ if (balance < needed)
103
+ throw insufficient(asset, payer, needed, balance, "usd_micros");
104
+ const transfer = viem.encodeFunctionData({ abi: ERC20_ABI, functionName: "transfer", args: [to, amount] });
105
+ const call = from
106
+ ? { address: from, abi: SMART_WALLET_ABI, functionName: "execute", args: [token, 0n, transfer] }
107
+ : { address: token, abi: ERC20_ABI, functionName: "transfer", args: [to, amount] };
108
+ let gas = null;
109
+ try {
110
+ gas = await publicClient.estimateContractGas({ ...call, account });
111
+ }
112
+ catch {
113
+ gas = null;
114
+ }
115
+ if (!isTempo && gas !== null) {
116
+ const { maxFeePerGas } = await publicClient.estimateFeesPerGas();
117
+ const fee = gas * (maxFeePerGas ?? 0n);
118
+ const eth = await publicClient.getBalance({ address: sender });
119
+ if (eth < fee)
120
+ throw insufficient("ETH", sender, fee, eth, "wei");
121
+ }
122
+ if (!opts.confirm) {
123
+ return {
124
+ preview: true,
125
+ network,
126
+ asset,
127
+ amount_usd_micros: Number(amount),
128
+ from: payer,
129
+ to,
130
+ sender,
131
+ balance_usd_micros: Number(balance),
132
+ estimated_gas: gas === null ? null : Number(gas),
133
+ };
134
+ }
135
+ const walletClient = viem.createWalletClient({ account, chain, transport });
136
+ const hash = await walletClient.writeContract({ ...call, account, chain });
137
+ const explorer = chain.blockExplorers?.default.url ?? "";
138
+ const explorerUrl = explorer ? `${explorer.replace(/\/$/, "")}/tx/${hash}` : hash;
139
+ const receipt = await publicClient.waitForTransactionReceipt({ hash });
140
+ if (receipt.status !== "success") {
141
+ throw new LocalError(`The send transaction ${hash} reverted.`, CONTEXT, {
142
+ code: "SEND_REVERTED",
143
+ details: { tx_hash: hash, network, explorer_url: explorerUrl },
144
+ next_actions: [{ type: "edit_request", why: "Inspect the transaction on the explorer before retrying." }],
145
+ });
146
+ }
147
+ return { tx_hash: hash, from: payer, to, amount_usd_micros: Number(amount), network, asset, explorer_url: explorerUrl };
148
+ }
149
+ //# sourceMappingURL=wallets-send.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wallets-send.js","sourceRoot":"","sources":["../../src/node/wallets-send.ts"],"names":[],"mappings":"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"}
@@ -31,6 +31,8 @@ import { type WalletData } from "../../core-dist/wallet.js";
31
31
  import { LocalError, type NextAction } from "../errors.js";
32
32
  import type { Client } from "../kernel.js";
33
33
  import { Wallets, type WalletCreateResult } from "../namespaces/wallets.js";
34
+ import { type KmsAccountOptions } from "./signers/kms.js";
35
+ import { type SendDeps, type SendOptions, type SendPreview, type SendResult } from "./wallets-send.js";
34
36
  /**
35
37
  * The active profile's wallet, or null when there is none. A file that exists
36
38
  * but cannot be read as a wallet is `BAD_WALLET_FILE`, naming the file and
@@ -122,6 +124,8 @@ export interface WalletDescriptor {
122
124
  address: string | null;
123
125
  address_short: string | null;
124
126
  rail: string | null;
127
+ /** How the wallet signs: `local` (a key in wallet.json) or `aws_kms`; null when unknown. */
128
+ signer: "local" | "aws_kms" | null;
125
129
  active: boolean;
126
130
  }
127
131
  export interface WalletWarning {
@@ -138,6 +142,8 @@ export interface CurrentWalletResult {
138
142
  configured: boolean;
139
143
  created: string | null;
140
144
  rail: string | null;
145
+ /** How the wallet signs: `local` or `aws_kms`; null with no wallet. */
146
+ signer: "local" | "aws_kms" | null;
141
147
  faucet_used: boolean;
142
148
  path: string;
143
149
  next_actions?: NextAction[];
@@ -221,16 +227,38 @@ export declare class NodeWallets extends Wallets {
221
227
  cwd?: string;
222
228
  }): Promise<WalletUnbindResult>;
223
229
  /**
224
- * Adopt an existing private key as a new named wallet. `privateKey` may be a
225
- * function, called only after the name checks pass, so a caller reading the
226
- * key from a file or stdin reads nothing for a refused name. Refused on the
227
- * sandbox surface: its input is a private key.
230
+ * Adopt an existing signing authority as a new named wallet: a private key,
231
+ * or an AWS KMS key by reference (`{ kms: { keyId, awsProfile? } }`).
232
+ *
233
+ * A private key may be a function, called only after the name checks pass,
234
+ * so a caller reading the key from a file or stdin reads nothing for a
235
+ * refused name. A KMS key is adopted read-only: its public key and spec are
236
+ * read (`GetPublicKey`), nothing on the key is created, changed, or granted,
237
+ * and the profile holds the key's ARN, never a secret. Refused on the sandbox
238
+ * surface: it adopts a signing authority.
228
239
  */
229
- import(name: string, privateKey: string | (() => string)): Promise<{
240
+ import(name: string, source: string | (() => string) | {
241
+ kms: {
242
+ keyId: string;
243
+ awsProfile?: string;
244
+ };
245
+ }, opts?: KmsAccountOptions): Promise<{
230
246
  local_label: string;
231
247
  address: string;
232
248
  imported: true;
249
+ signer: "local" | "aws_kms";
250
+ key_arn?: string;
233
251
  }>;
252
+ /**
253
+ * Send a stablecoin from the selected wallet (key-backed or KMS-backed):
254
+ * USDC on `base` (default) / `base-sepolia`, optionally `from` a
255
+ * CoinbaseSmartWallet the wallet owns; pathUSD on `tempo` /
256
+ * `tempo-moderato`. Without `confirm: true` it runs every check and returns
257
+ * a preview without signing. Refused on the sandbox surface with
258
+ * `VALUE_TRANSFER_REQUIRES_CLI`: a transfer to an arbitrary address is a
259
+ * person's decision at the CLI.
260
+ */
261
+ send(opts: SendOptions, deps?: SendDeps & KmsAccountOptions): Promise<SendPreview | SendResult>;
234
262
  /** Delete a named wallet and its keys. Requires `{ confirm: true }`; `default` is protected. */
235
263
  remove(name: string, opts?: {
236
264
  confirm?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"wallets.d.ts","sourceRoot":"","sources":["../../src/node/wallets.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"wallets.d.ts","sourceRoot":"","sources":["../../src/node/wallets.ts"],"names":[],"mappings":"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"}