agentwallet-sdk 2.4.1 → 3.0.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 (85) hide show
  1. package/README.md +264 -19
  2. package/dist/bridge/client.d.ts +17 -49
  3. package/dist/bridge/client.d.ts.map +1 -1
  4. package/dist/bridge/client.js +94 -124
  5. package/dist/bridge/client.js.map +1 -1
  6. package/dist/bridge/index.d.ts +4 -2
  7. package/dist/bridge/index.d.ts.map +1 -1
  8. package/dist/bridge/index.js +8 -2
  9. package/dist/bridge/index.js.map +1 -1
  10. package/dist/bridge/types.d.ts +100 -19
  11. package/dist/bridge/types.d.ts.map +1 -1
  12. package/dist/bridge/types.js +167 -18
  13. package/dist/bridge/types.js.map +1 -1
  14. package/dist/bridge/unified.d.ts +101 -0
  15. package/dist/bridge/unified.d.ts.map +1 -0
  16. package/dist/bridge/unified.js +284 -0
  17. package/dist/bridge/unified.js.map +1 -0
  18. package/dist/chains.d.ts +62 -0
  19. package/dist/chains.d.ts.map +1 -0
  20. package/dist/chains.js +108 -0
  21. package/dist/chains.js.map +1 -0
  22. package/dist/index.d.ts +15 -506
  23. package/dist/index.d.ts.map +1 -1
  24. package/dist/index.js +13 -3
  25. package/dist/index.js.map +1 -1
  26. package/dist/solana/bridge.d.ts +144 -0
  27. package/dist/solana/bridge.d.ts.map +1 -0
  28. package/dist/solana/bridge.js +352 -0
  29. package/dist/solana/bridge.js.map +1 -0
  30. package/dist/solana/index.d.ts +8 -0
  31. package/dist/solana/index.d.ts.map +1 -0
  32. package/dist/solana/index.js +6 -0
  33. package/dist/solana/index.js.map +1 -0
  34. package/dist/solana/swap.d.ts +85 -0
  35. package/dist/solana/swap.d.ts.map +1 -0
  36. package/dist/solana/swap.js +173 -0
  37. package/dist/solana/swap.js.map +1 -0
  38. package/dist/solana/types.d.ts +126 -0
  39. package/dist/solana/types.d.ts.map +1 -0
  40. package/dist/solana/types.js +10 -0
  41. package/dist/solana/types.js.map +1 -0
  42. package/dist/solana/wallet.d.ts +83 -0
  43. package/dist/solana/wallet.d.ts.map +1 -0
  44. package/dist/solana/wallet.js +164 -0
  45. package/dist/solana/wallet.js.map +1 -0
  46. package/dist/solana/x402.d.ts +69 -0
  47. package/dist/solana/x402.d.ts.map +1 -0
  48. package/dist/solana/x402.js +154 -0
  49. package/dist/solana/x402.js.map +1 -0
  50. package/dist/swap/SwapModule.d.ts +4 -1
  51. package/dist/swap/SwapModule.d.ts.map +1 -1
  52. package/dist/swap/SwapModule.js +7 -2
  53. package/dist/swap/SwapModule.js.map +1 -1
  54. package/dist/swap/types.d.ts +4 -2
  55. package/dist/swap/types.d.ts.map +1 -1
  56. package/dist/swap/types.js.map +1 -1
  57. package/dist/types.d.ts +2 -1
  58. package/dist/types.d.ts.map +1 -1
  59. package/dist/types.js +1 -0
  60. package/dist/types.js.map +1 -1
  61. package/dist/x402/index.d.ts +1 -1
  62. package/dist/x402/index.d.ts.map +1 -1
  63. package/dist/x402/index.js +1 -1
  64. package/dist/x402/index.js.map +1 -1
  65. package/dist/x402/types.d.ts +5 -3
  66. package/dist/x402/types.d.ts.map +1 -1
  67. package/dist/x402/types.js +17 -2
  68. package/dist/x402/types.js.map +1 -1
  69. package/package.json +30 -10
  70. package/dist/bridge/__tests__/bridge.test.d.ts +0 -2
  71. package/dist/bridge/__tests__/bridge.test.d.ts.map +0 -1
  72. package/dist/bridge/__tests__/bridge.test.js +0 -508
  73. package/dist/bridge/__tests__/bridge.test.js.map +0 -1
  74. package/dist/swap/__tests__/swap.test.d.ts +0 -2
  75. package/dist/swap/__tests__/swap.test.d.ts.map +0 -1
  76. package/dist/swap/__tests__/swap.test.js +0 -272
  77. package/dist/swap/__tests__/swap.test.js.map +0 -1
  78. package/dist/x402/__tests__/budget.test.d.ts +0 -2
  79. package/dist/x402/__tests__/budget.test.d.ts.map +0 -1
  80. package/dist/x402/__tests__/budget.test.js +0 -114
  81. package/dist/x402/__tests__/budget.test.js.map +0 -1
  82. package/dist/x402/__tests__/client.test.d.ts +0 -2
  83. package/dist/x402/__tests__/client.test.d.ts.map +0 -1
  84. package/dist/x402/__tests__/client.test.js +0 -107
  85. package/dist/x402/__tests__/client.test.js.map +0 -1
@@ -0,0 +1,173 @@
1
+ // [MAX-ADDED] JupiterSwapClient — DEX aggregator for Solana agents.
2
+ // Jupiter is the dominant swap aggregator on Solana (equivalent to Uniswap on EVM).
3
+ // API docs: https://station.jup.ag/docs/apis/swap-api
4
+ import { VersionedTransaction } from '@solana/web3.js';
5
+ import { SOLANA_USDC_MINT, SOL_NATIVE_MINT } from './types.js';
6
+ /** Jupiter Aggregator V6 API base URL */
7
+ const JUPITER_API_BASE = 'https://quote-api.jup.ag/v6';
8
+ /** Platform fee: 0.875% (same as EVM SwapModule) in basis points */
9
+ export const JUPITER_PLATFORM_FEE_BPS = 88; // 0.875% ≈ 88 bps (rounded)
10
+ /** Default slippage: 50 bps = 0.5% */
11
+ export const JUPITER_DEFAULT_SLIPPAGE_BPS = 50;
12
+ /**
13
+ * JupiterSwapClient — wraps Jupiter Aggregator V6 for best-route token swaps on Solana.
14
+ *
15
+ * Features:
16
+ * - Best-route quote from Jupiter
17
+ * - 0.875% platform fee (matches EVM SwapModule)
18
+ * - SOL ↔ USDC default routes
19
+ * - Full slippage control
20
+ * - No real RPC calls in mocked tests
21
+ */
22
+ export class JupiterSwapClient {
23
+ constructor(config) {
24
+ this.wallet = config.wallet;
25
+ this.feeWallet = config.feeWallet;
26
+ this.apiBase = config.apiBase ?? JUPITER_API_BASE;
27
+ this.defaultSlippageBps = config.defaultSlippageBps ?? JUPITER_DEFAULT_SLIPPAGE_BPS;
28
+ }
29
+ /**
30
+ * Get the best-route quote from Jupiter.
31
+ *
32
+ * @param inputMint - Input token mint (use SOL_NATIVE_MINT for native SOL)
33
+ * @param outputMint - Output token mint
34
+ * @param amount - Input amount in token base units
35
+ * @param slippageBps - Slippage tolerance in bps (default: 50)
36
+ * @returns JupiterQuote with route and output amount
37
+ */
38
+ async getQuote(inputMint, outputMint, amount, slippageBps) {
39
+ const slip = slippageBps ?? this.defaultSlippageBps;
40
+ const params = new URLSearchParams({
41
+ inputMint,
42
+ outputMint,
43
+ amount: amount.toString(),
44
+ slippageBps: slip.toString(),
45
+ ...(this.feeWallet
46
+ ? {
47
+ platformFeeBps: JUPITER_PLATFORM_FEE_BPS.toString(),
48
+ feeAccount: this.feeWallet,
49
+ }
50
+ : {}),
51
+ });
52
+ const url = `${this.apiBase}/quote?${params.toString()}`;
53
+ const res = await fetch(url);
54
+ if (!res.ok) {
55
+ const text = await res.text();
56
+ throw new Error(`Jupiter quote failed (${res.status}): ${text}`);
57
+ }
58
+ const quote = (await res.json());
59
+ return quote;
60
+ }
61
+ /**
62
+ * Execute a swap via Jupiter.
63
+ *
64
+ * Flow:
65
+ * 1. Get best-route quote from Jupiter
66
+ * 2. Request swap transaction from Jupiter
67
+ * 3. Deserialize + sign + broadcast via SolanaWallet
68
+ *
69
+ * @returns JupiterSwapResult with signature and amounts
70
+ */
71
+ async swap(params) {
72
+ const slippageBps = params.slippageBps ?? this.defaultSlippageBps;
73
+ // Step 1: Get quote
74
+ const quote = await this.getQuote(params.inputMint, params.outputMint, params.amount, slippageBps);
75
+ // Step 2: Get swap transaction from Jupiter
76
+ const swapRes = await fetch(`${this.apiBase}/swap`, {
77
+ method: 'POST',
78
+ headers: { 'Content-Type': 'application/json' },
79
+ body: JSON.stringify({
80
+ quoteResponse: quote,
81
+ userPublicKey: this.wallet.getAddress(),
82
+ ...(this.feeWallet
83
+ ? { feeAccount: this.feeWallet }
84
+ : {}),
85
+ dynamicComputeUnitLimit: true,
86
+ prioritizationFeeLamports: 'auto',
87
+ }),
88
+ });
89
+ if (!swapRes.ok) {
90
+ const text = await swapRes.text();
91
+ throw new Error(`Jupiter swap tx failed (${swapRes.status}): ${text}`);
92
+ }
93
+ const { swapTransaction } = (await swapRes.json());
94
+ // Step 3: Deserialize, sign, and broadcast
95
+ const connection = this.wallet.getConnection();
96
+ const txBuf = Uint8Array.from(atob(swapTransaction), (c) => c.charCodeAt(0));
97
+ const versionedTx = VersionedTransaction.deserialize(txBuf);
98
+ // Sign with wallet keypair — need internal access
99
+ // We expose a method on SolanaWallet for versioned tx signing
100
+ const signedTx = await this._signVersionedTx(versionedTx);
101
+ const signature = await connection.sendRawTransaction(signedTx.serialize(), {
102
+ skipPreflight: false,
103
+ preflightCommitment: 'confirmed',
104
+ });
105
+ // Confirm
106
+ const { blockhash, lastValidBlockHeight } = await connection.getLatestBlockhash();
107
+ await connection.confirmTransaction({ signature, blockhash, lastValidBlockHeight }, 'confirmed');
108
+ return {
109
+ txSignature: signature,
110
+ inputMint: params.inputMint,
111
+ outputMint: params.outputMint,
112
+ inputAmount: params.amount,
113
+ outputAmount: BigInt(quote.outAmount),
114
+ slippageBps,
115
+ platformFeeBps: JUPITER_PLATFORM_FEE_BPS,
116
+ };
117
+ }
118
+ /**
119
+ * Convenience: Swap SOL → USDC.
120
+ */
121
+ async swapSolToUsdc(lamports, slippageBps) {
122
+ return this.swap({
123
+ inputMint: SOL_NATIVE_MINT,
124
+ outputMint: SOLANA_USDC_MINT,
125
+ amount: lamports,
126
+ slippageBps,
127
+ });
128
+ }
129
+ /**
130
+ * Convenience: Swap USDC → SOL.
131
+ */
132
+ async swapUsdcToSol(microUsdc, slippageBps) {
133
+ return this.swap({
134
+ inputMint: SOLANA_USDC_MINT,
135
+ outputMint: SOL_NATIVE_MINT,
136
+ amount: microUsdc,
137
+ slippageBps,
138
+ });
139
+ }
140
+ /**
141
+ * Calculate the platform fee for a given input amount.
142
+ * Mirrors EVM SwapModule's calcProtocolFee() for consistency.
143
+ *
144
+ * @param amount - Input amount in token base units
145
+ * @returns Fee amount in token base units (floored)
146
+ */
147
+ calcPlatformFee(amount) {
148
+ return (amount * BigInt(JUPITER_PLATFORM_FEE_BPS)) / 10000n;
149
+ }
150
+ /**
151
+ * Sign a versioned transaction (Jupiter uses VersionedTransaction internally).
152
+ * Routes through the wallet's keypair via a controlled interface.
153
+ */
154
+ async _signVersionedTx(tx) {
155
+ // Access internal keypair through the wallet's exposed signing interface
156
+ // SolanaWallet exposes getPublicKey() but we need the keypair for versioned tx
157
+ // We handle this by adding a signVersionedTransaction method to SolanaWallet
158
+ const connection = this.wallet.getConnection();
159
+ const { blockhash } = await connection.getLatestBlockhash('confirmed');
160
+ tx.message.recentBlockhash = blockhash;
161
+ // Use the wallet's sign method — wallet class exposes this for versioned txs
162
+ return this.wallet._signVersionedTransaction(tx);
163
+ }
164
+ }
165
+ /**
166
+ * Factory: create a JupiterSwapClient attached to an existing SolanaWallet.
167
+ */
168
+ export function attachJupiterSwap(wallet, options = {}) {
169
+ return new JupiterSwapClient({ wallet, ...options });
170
+ }
171
+ // Re-export convenience constants
172
+ export { SOLANA_USDC_MINT, SOL_NATIVE_MINT };
173
+ //# sourceMappingURL=swap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"swap.js","sourceRoot":"","sources":["../../src/solana/swap.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,126 @@
1
+ /** USDC SPL token mint on Solana Mainnet (Circle official) */
2
+ export declare const SOLANA_USDC_MINT = "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v";
3
+ /** USDC SPL token mint on Solana Devnet (Circle official devnet) */
4
+ export declare const SOLANA_USDC_DEVNET_MINT = "4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU";
5
+ /** SOL native mint placeholder (used to represent native SOL in transfer params) */
6
+ export declare const SOL_NATIVE_MINT = "So11111111111111111111111111111111111111112";
7
+ /** Solana commitment level — matches @solana/web3.js Commitment type */
8
+ export type SolanaCommitment = 'processed' | 'confirmed' | 'finalized';
9
+ /**
10
+ * Configuration for SolanaWallet.
11
+ *
12
+ * Supply ONE of:
13
+ * - `secretKey` (Uint8Array — 64-byte keypair from Keypair.secretKey)
14
+ * - `privateKeyBase58` (base58-encoded 64-byte secret key)
15
+ * - neither → generates a fresh random keypair (useful for testing/ephemeral agents)
16
+ */
17
+ export interface SolanaWalletConfig {
18
+ /** Solana RPC endpoint URL (e.g. https://api.mainnet-beta.solana.com) */
19
+ rpcUrl: string;
20
+ /** 64-byte keypair secret key as Uint8Array */
21
+ secretKey?: Uint8Array;
22
+ /** Base58-encoded 64-byte secret key */
23
+ privateKeyBase58?: string;
24
+ /** Commitment level for reads (default: 'confirmed') */
25
+ commitment?: SolanaCommitment;
26
+ }
27
+ /**
28
+ * Parameters for transferring SOL or SPL tokens.
29
+ *
30
+ * If `mint` is omitted or set to SOL_NATIVE_MINT, transfers native SOL.
31
+ * Otherwise, performs an SPL token transfer.
32
+ *
33
+ * `amount` is always in the smallest unit:
34
+ * - SOL: lamports (1 SOL = 1_000_000_000 lamports)
35
+ * - USDC: micro-USDC (1 USDC = 1_000_000 μUSDC, 6 decimals)
36
+ */
37
+ export interface SolanaTransferParams {
38
+ /** Recipient public key (base58) */
39
+ recipient: string;
40
+ /** Amount in smallest units (lamports for SOL, token base units for SPL) */
41
+ amount: bigint;
42
+ /** SPL token mint address. Omit for native SOL transfer. */
43
+ mint?: string;
44
+ }
45
+ /** Jupiter quote response (subset of full API response) */
46
+ export interface JupiterQuote {
47
+ inputMint: string;
48
+ inAmount: string;
49
+ outputMint: string;
50
+ outAmount: string;
51
+ otherAmountThreshold: string;
52
+ swapMode: string;
53
+ slippageBps: number;
54
+ priceImpactPct: string;
55
+ routePlan: JupiterRoutePlan[];
56
+ /** Platform fee breakdown (if applied) */
57
+ platformFee?: {
58
+ amount: string;
59
+ feeBps: number;
60
+ };
61
+ }
62
+ export interface JupiterRoutePlan {
63
+ swapInfo: {
64
+ ammKey: string;
65
+ label?: string;
66
+ inputMint: string;
67
+ outputMint: string;
68
+ inAmount: string;
69
+ outAmount: string;
70
+ feeAmount: string;
71
+ feeMint: string;
72
+ };
73
+ percent: number;
74
+ }
75
+ /** Parameters for executing a Jupiter swap */
76
+ export interface JupiterSwapParams {
77
+ inputMint: string;
78
+ outputMint: string;
79
+ /** Amount in token base units */
80
+ amount: bigint;
81
+ /** Slippage in basis points (e.g. 50 = 0.5%) */
82
+ slippageBps?: number;
83
+ }
84
+ /** Result of a completed Jupiter swap */
85
+ export interface JupiterSwapResult {
86
+ txSignature: string;
87
+ inputMint: string;
88
+ outputMint: string;
89
+ inputAmount: bigint;
90
+ outputAmount: bigint;
91
+ slippageBps: number;
92
+ platformFeeBps: number;
93
+ }
94
+ /** Solana x402 payment proof — returned after signing an SPL token transfer */
95
+ export interface SolanaX402PaymentProof {
96
+ /** x402 protocol version */
97
+ x402Version: number;
98
+ /** Network identifier */
99
+ network: 'solana:mainnet' | 'solana:devnet';
100
+ /** SPL token mint that was transferred */
101
+ mint: string;
102
+ /** Recipient public key (base58) */
103
+ recipient: string;
104
+ /** Amount in token base units */
105
+ amount: string;
106
+ /** Sender public key (base58) */
107
+ sender: string;
108
+ /** Serialized signed transaction (base64) */
109
+ signedTransaction: string;
110
+ /** Transaction signature after broadcast */
111
+ txSignature?: string;
112
+ }
113
+ /** Solana x402 payment requirements (from 402 response) */
114
+ export interface SolanaX402Requirements {
115
+ scheme: string;
116
+ network: 'solana:mainnet' | 'solana:devnet';
117
+ /** SPL token mint address */
118
+ asset: string;
119
+ /** Amount in token base units */
120
+ amount: string;
121
+ /** Recipient public key (base58) */
122
+ payTo: string;
123
+ maxTimeoutSeconds: number;
124
+ extra: Record<string, unknown>;
125
+ }
126
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/solana/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ // [MAX-ADDED] Solana-specific types for agent-wallet-sdk v3.0.0
2
+ // Solana is NOT EVM — different key primitives, account model, and token standard (SPL).
3
+ // ─── USDC Mint Addresses ───────────────────────────────────────────────────
4
+ /** USDC SPL token mint on Solana Mainnet (Circle official) */
5
+ export const SOLANA_USDC_MINT = 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v';
6
+ /** USDC SPL token mint on Solana Devnet (Circle official devnet) */
7
+ export const SOLANA_USDC_DEVNET_MINT = '4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU';
8
+ /** SOL native mint placeholder (used to represent native SOL in transfer params) */
9
+ export const SOL_NATIVE_MINT = 'So11111111111111111111111111111111111111112';
10
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/solana/types.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAChE,yFAAyF;AAEzF,8EAA8E;AAE9E,8DAA8D;AAC9D,MAAM,CAAC,MAAM,gBAAgB,GAAG,8CAA8C,CAAC;AAE/E,oEAAoE;AACpE,MAAM,CAAC,MAAM,uBAAuB,GAAG,8CAA8C,CAAC;AAEtF,oFAAoF;AACpF,MAAM,CAAC,MAAM,eAAe,GAAG,6CAA6C,CAAC"}
@@ -0,0 +1,83 @@
1
+ import { Connection, PublicKey, Transaction } from '@solana/web3.js';
2
+ import type { SolanaWalletConfig, SolanaTransferParams } from './types.js';
3
+ /**
4
+ * SolanaWallet — non-custodial agent wallet for Solana.
5
+ *
6
+ * Supports:
7
+ * - Ed25519 keypair (generated or supplied)
8
+ * - Native SOL balance + transfer
9
+ * - SPL token balance + transfer (USDC, etc.)
10
+ * - Transaction signing
11
+ *
12
+ * Non-custodial guarantee: private key stays local in memory.
13
+ * Never serialized, never logged, never transmitted.
14
+ */
15
+ export declare class SolanaWallet {
16
+ private keypair;
17
+ private connection;
18
+ private commitment;
19
+ constructor(config: SolanaWalletConfig);
20
+ /**
21
+ * Create a SolanaWallet from a base58-encoded private key string.
22
+ * Convenience factory for config-driven agent setups.
23
+ */
24
+ static fromBase58(privateKeyBase58: string, rpcUrl: string): SolanaWallet;
25
+ /**
26
+ * Create a SolanaWallet with a freshly generated keypair.
27
+ * Useful for one-off agent wallets or testing.
28
+ */
29
+ static generate(rpcUrl: string): SolanaWallet;
30
+ /**
31
+ * Returns the wallet's base58 public key (the "address" on Solana).
32
+ */
33
+ getAddress(): string;
34
+ /**
35
+ * Returns the wallet's public key object.
36
+ */
37
+ getPublicKey(): PublicKey;
38
+ /**
39
+ * Get balance.
40
+ *
41
+ * @param mint - SPL token mint (omit or pass SOL_NATIVE_MINT for native SOL)
42
+ * @returns Balance in smallest units (lamports for SOL, base units for SPL tokens)
43
+ */
44
+ getBalance(mint?: string): Promise<bigint>;
45
+ /**
46
+ * Transfer SOL or SPL tokens.
47
+ *
48
+ * For SOL: `amount` in lamports.
49
+ * For SPL: `amount` in token base units (e.g. 1_000_000 for 1 USDC).
50
+ *
51
+ * @returns Transaction signature string
52
+ */
53
+ transfer(params: SolanaTransferParams): Promise<string>;
54
+ /**
55
+ * Sign a transaction with the local keypair (without broadcasting).
56
+ * Useful for x402 payment proofs and offline signing flows.
57
+ */
58
+ signTransaction(tx: Transaction): Transaction;
59
+ /**
60
+ * Sign and serialize a transaction to base64.
61
+ * Used for x402 payment proof construction.
62
+ */
63
+ signTransactionBase64(tx: Transaction): Promise<string>;
64
+ /**
65
+ * Get mint info (decimals, supply) for an SPL token.
66
+ */
67
+ getMintInfo(mint: string): Promise<{
68
+ decimals: number;
69
+ supply: bigint;
70
+ }>;
71
+ /**
72
+ * Sign a VersionedTransaction (used by JupiterSwapClient and bridge).
73
+ * Jupiter V6 returns VersionedTransactions that require this signing path.
74
+ *
75
+ * Internal method — prefixed with underscore to signal controlled access.
76
+ */
77
+ _signVersionedTransaction(tx: import('@solana/web3.js').VersionedTransaction): import('@solana/web3.js').VersionedTransaction;
78
+ /**
79
+ * Expose the underlying connection for advanced usage.
80
+ */
81
+ getConnection(): Connection;
82
+ }
83
+ //# sourceMappingURL=wallet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wallet.d.ts","sourceRoot":"","sources":["../../src/solana/wallet.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,UAAU,EAEV,SAAS,EAET,WAAW,EAGZ,MAAM,iBAAiB,CAAC;AAQzB,OAAO,KAAK,EAAE,kBAAkB,EAAE,oBAAoB,EAAoB,MAAM,YAAY,CAAC;AAG7F;;;;;;;;;;;GAWG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,UAAU,CAAmB;gBAEzB,MAAM,EAAE,kBAAkB;IAetC;;;OAGG;IACH,MAAM,CAAC,UAAU,CAAC,gBAAgB,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,YAAY;IAIzE;;;OAGG;IACH,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY;IAI7C;;OAEG;IACH,UAAU,IAAI,MAAM;IAIpB;;OAEG;IACH,YAAY,IAAI,SAAS;IAIzB;;;;;OAKG;IACG,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAoBhD;;;;;;;OAOG;IACG,QAAQ,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,MAAM,CAAC;IAkD7D;;;OAGG;IACH,eAAe,CAAC,EAAE,EAAE,WAAW,GAAG,WAAW;IAK7C;;;OAGG;IACG,qBAAqB,CAAC,EAAE,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC;IAQ7D;;OAEG;IACG,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAQ9E;;;;;OAKG;IACH,yBAAyB,CAAC,EAAE,EAAE,OAAO,iBAAiB,EAAE,oBAAoB,GAAG,OAAO,iBAAiB,EAAE,oBAAoB;IAK7H;;OAEG;IACH,aAAa,IAAI,UAAU;CAG5B"}
@@ -0,0 +1,164 @@
1
+ // [MAX-ADDED] SolanaWallet — non-custodial Solana wallet for AI agents.
2
+ // Uses @solana/web3.js + @solana/spl-token. Key never leaves this class.
3
+ import { Connection, Keypair, PublicKey, SystemProgram, Transaction, sendAndConfirmTransaction, } from '@solana/web3.js';
4
+ import { getOrCreateAssociatedTokenAccount, createTransferInstruction, getAccount, getMint, } from '@solana/spl-token';
5
+ import bs58 from 'bs58';
6
+ import { SOL_NATIVE_MINT } from './types.js';
7
+ /**
8
+ * SolanaWallet — non-custodial agent wallet for Solana.
9
+ *
10
+ * Supports:
11
+ * - Ed25519 keypair (generated or supplied)
12
+ * - Native SOL balance + transfer
13
+ * - SPL token balance + transfer (USDC, etc.)
14
+ * - Transaction signing
15
+ *
16
+ * Non-custodial guarantee: private key stays local in memory.
17
+ * Never serialized, never logged, never transmitted.
18
+ */
19
+ export class SolanaWallet {
20
+ constructor(config) {
21
+ this.commitment = config.commitment ?? 'confirmed';
22
+ this.connection = new Connection(config.rpcUrl, this.commitment);
23
+ if (config.secretKey) {
24
+ this.keypair = Keypair.fromSecretKey(config.secretKey);
25
+ }
26
+ else if (config.privateKeyBase58) {
27
+ const decoded = bs58.decode(config.privateKeyBase58);
28
+ this.keypair = Keypair.fromSecretKey(decoded);
29
+ }
30
+ else {
31
+ // Generate fresh keypair — useful for ephemeral agent wallets
32
+ this.keypair = Keypair.generate();
33
+ }
34
+ }
35
+ /**
36
+ * Create a SolanaWallet from a base58-encoded private key string.
37
+ * Convenience factory for config-driven agent setups.
38
+ */
39
+ static fromBase58(privateKeyBase58, rpcUrl) {
40
+ return new SolanaWallet({ rpcUrl, privateKeyBase58 });
41
+ }
42
+ /**
43
+ * Create a SolanaWallet with a freshly generated keypair.
44
+ * Useful for one-off agent wallets or testing.
45
+ */
46
+ static generate(rpcUrl) {
47
+ return new SolanaWallet({ rpcUrl });
48
+ }
49
+ /**
50
+ * Returns the wallet's base58 public key (the "address" on Solana).
51
+ */
52
+ getAddress() {
53
+ return this.keypair.publicKey.toBase58();
54
+ }
55
+ /**
56
+ * Returns the wallet's public key object.
57
+ */
58
+ getPublicKey() {
59
+ return this.keypair.publicKey;
60
+ }
61
+ /**
62
+ * Get balance.
63
+ *
64
+ * @param mint - SPL token mint (omit or pass SOL_NATIVE_MINT for native SOL)
65
+ * @returns Balance in smallest units (lamports for SOL, base units for SPL tokens)
66
+ */
67
+ async getBalance(mint) {
68
+ if (!mint || mint === SOL_NATIVE_MINT) {
69
+ const lamports = await this.connection.getBalance(this.keypair.publicKey);
70
+ return BigInt(lamports);
71
+ }
72
+ // SPL token balance
73
+ const mintPubkey = new PublicKey(mint);
74
+ const { getAssociatedTokenAddress } = await import('@solana/spl-token');
75
+ const ata = await getAssociatedTokenAddress(mintPubkey, this.keypair.publicKey);
76
+ try {
77
+ const account = await getAccount(this.connection, ata, this.commitment);
78
+ return BigInt(account.amount.toString());
79
+ }
80
+ catch {
81
+ // Account doesn't exist yet — balance is 0
82
+ return 0n;
83
+ }
84
+ }
85
+ /**
86
+ * Transfer SOL or SPL tokens.
87
+ *
88
+ * For SOL: `amount` in lamports.
89
+ * For SPL: `amount` in token base units (e.g. 1_000_000 for 1 USDC).
90
+ *
91
+ * @returns Transaction signature string
92
+ */
93
+ async transfer(params) {
94
+ const tx = new Transaction();
95
+ const recipient = new PublicKey(params.recipient);
96
+ if (!params.mint || params.mint === SOL_NATIVE_MINT) {
97
+ // Native SOL transfer
98
+ tx.add(SystemProgram.transfer({
99
+ fromPubkey: this.keypair.publicKey,
100
+ toPubkey: recipient,
101
+ lamports: Number(params.amount),
102
+ }));
103
+ }
104
+ else {
105
+ // SPL token transfer
106
+ const mintPubkey = new PublicKey(params.mint);
107
+ // Get or create sender's ATA
108
+ const senderAta = await getOrCreateAssociatedTokenAccount(this.connection, this.keypair, mintPubkey, this.keypair.publicKey);
109
+ // Get or create recipient's ATA
110
+ const recipientAta = await getOrCreateAssociatedTokenAccount(this.connection, this.keypair, mintPubkey, recipient);
111
+ tx.add(createTransferInstruction(senderAta.address, recipientAta.address, this.keypair.publicKey, Number(params.amount)));
112
+ }
113
+ const signature = await sendAndConfirmTransaction(this.connection, tx, [this.keypair], {
114
+ commitment: this.commitment,
115
+ });
116
+ return signature;
117
+ }
118
+ /**
119
+ * Sign a transaction with the local keypair (without broadcasting).
120
+ * Useful for x402 payment proofs and offline signing flows.
121
+ */
122
+ signTransaction(tx) {
123
+ tx.sign(this.keypair);
124
+ return tx;
125
+ }
126
+ /**
127
+ * Sign and serialize a transaction to base64.
128
+ * Used for x402 payment proof construction.
129
+ */
130
+ async signTransactionBase64(tx) {
131
+ const { blockhash } = await this.connection.getLatestBlockhash(this.commitment);
132
+ tx.recentBlockhash = blockhash;
133
+ tx.feePayer = this.keypair.publicKey;
134
+ tx.sign(this.keypair);
135
+ return tx.serialize().toString('base64');
136
+ }
137
+ /**
138
+ * Get mint info (decimals, supply) for an SPL token.
139
+ */
140
+ async getMintInfo(mint) {
141
+ const mintInfo = await getMint(this.connection, new PublicKey(mint), this.commitment);
142
+ return {
143
+ decimals: mintInfo.decimals,
144
+ supply: BigInt(mintInfo.supply.toString()),
145
+ };
146
+ }
147
+ /**
148
+ * Sign a VersionedTransaction (used by JupiterSwapClient and bridge).
149
+ * Jupiter V6 returns VersionedTransactions that require this signing path.
150
+ *
151
+ * Internal method — prefixed with underscore to signal controlled access.
152
+ */
153
+ _signVersionedTransaction(tx) {
154
+ tx.sign([this.keypair]);
155
+ return tx;
156
+ }
157
+ /**
158
+ * Expose the underlying connection for advanced usage.
159
+ */
160
+ getConnection() {
161
+ return this.connection;
162
+ }
163
+ }
164
+ //# sourceMappingURL=wallet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wallet.js","sourceRoot":"","sources":["../../src/solana/wallet.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,69 @@
1
+ import type { SolanaX402PaymentProof, SolanaX402Requirements } from './types.js';
2
+ import { SOLANA_USDC_MINT, SOLANA_USDC_DEVNET_MINT } from './types.js';
3
+ import { SolanaWallet } from './wallet.js';
4
+ /** Supported Solana x402 networks */
5
+ export type SolanaX402Network = 'solana:mainnet' | 'solana:devnet';
6
+ /** Default USDC mint per network */
7
+ export declare const SOLANA_NETWORK_USDC: Record<SolanaX402Network, string>;
8
+ /**
9
+ * SolanaX402Client — handles x402 payment flows on Solana.
10
+ *
11
+ * Flow:
12
+ * 1. Receive x402 PaymentRequired with network='solana:mainnet'
13
+ * 2. Build an SPL token transfer transaction (USDC → payTo)
14
+ * 3. Sign with agent's Ed25519 keypair
15
+ * 4. Return base64-serialized signed tx as payment proof
16
+ * 5. Optionally broadcast and return tx signature
17
+ *
18
+ * Non-custodial: private key never leaves the SolanaWallet instance.
19
+ */
20
+ export declare class SolanaX402Client {
21
+ private wallet;
22
+ constructor(wallet: SolanaWallet);
23
+ /**
24
+ * Determine if this client can handle a given x402 network string.
25
+ */
26
+ canHandle(network: string): network is SolanaX402Network;
27
+ /**
28
+ * Build and sign a USDC SPL token payment for x402.
29
+ *
30
+ * Does NOT broadcast — returns signed tx as base64 for the caller to submit.
31
+ * This matches the x402 pattern where the client returns a payment proof
32
+ * that the facilitator can verify and then settle.
33
+ *
34
+ * @param requirements - Payment requirements from the x402 402 response
35
+ * @returns SolanaX402PaymentProof with signed transaction
36
+ */
37
+ buildPaymentProof(requirements: SolanaX402Requirements): Promise<SolanaX402PaymentProof>;
38
+ /**
39
+ * Build payment proof AND broadcast the transaction to Solana.
40
+ * Returns the proof enriched with the on-chain tx signature.
41
+ *
42
+ * @param requirements - Payment requirements from 402 response
43
+ * @returns SolanaX402PaymentProof with txSignature populated
44
+ */
45
+ pay(requirements: SolanaX402Requirements): Promise<SolanaX402PaymentProof>;
46
+ /**
47
+ * Validate that payment requirements are acceptable before paying.
48
+ *
49
+ * Checks:
50
+ * - Network is Solana (mainnet or devnet)
51
+ * - Asset is USDC or native SOL
52
+ * - Amount > 0
53
+ * - maxTimeoutSeconds is reasonable
54
+ */
55
+ validateRequirements(requirements: SolanaX402Requirements, options?: {
56
+ allowedMints?: string[];
57
+ maxAmount?: bigint;
58
+ }): {
59
+ valid: boolean;
60
+ reason?: string;
61
+ };
62
+ }
63
+ /**
64
+ * Factory: create a SolanaX402Client from a SolanaWallet.
65
+ */
66
+ export declare function createSolanaX402Client(wallet: SolanaWallet): SolanaX402Client;
67
+ export type { SolanaX402PaymentProof, SolanaX402Requirements };
68
+ export { SOLANA_USDC_MINT, SOLANA_USDC_DEVNET_MINT };
69
+ //# sourceMappingURL=x402.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"x402.d.ts","sourceRoot":"","sources":["../../src/solana/x402.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EACV,sBAAsB,EACtB,sBAAsB,EACvB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,gBAAgB,EAAE,uBAAuB,EAAmB,MAAM,YAAY,CAAC;AACxF,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAK3C,qCAAqC;AACrC,MAAM,MAAM,iBAAiB,GAAG,gBAAgB,GAAG,eAAe,CAAC;AAEnE,oCAAoC;AACpC,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,iBAAiB,EAAE,MAAM,CAGjE,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAe;gBAEjB,MAAM,EAAE,YAAY;IAIhC;;OAEG;IACH,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,IAAI,iBAAiB;IAIxD;;;;;;;;;OASG;IACG,iBAAiB,CACrB,YAAY,EAAE,sBAAsB,GACnC,OAAO,CAAC,sBAAsB,CAAC;IA4DlC;;;;;;OAMG;IACG,GAAG,CAAC,YAAY,EAAE,sBAAsB,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAahF;;;;;;;;OAQG;IACH,oBAAoB,CAClB,YAAY,EAAE,sBAAsB,EACpC,OAAO,GAAE;QAAE,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAO,GAC5D;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE;CAsCvC;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,YAAY,GAAG,gBAAgB,CAE7E;AAGD,YAAY,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,CAAC"}