@framers/agentos-ext-wallet 0.2.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 (108) hide show
  1. package/LICENSE +98 -0
  2. package/dist/AgentWalletManager.d.ts +68 -0
  3. package/dist/AgentWalletManager.d.ts.map +1 -0
  4. package/dist/AgentWalletManager.js +238 -0
  5. package/dist/AgentWalletManager.js.map +1 -0
  6. package/dist/SpendingPolicyEnforcer.d.ts +33 -0
  7. package/dist/SpendingPolicyEnforcer.d.ts.map +1 -0
  8. package/dist/SpendingPolicyEnforcer.js +128 -0
  9. package/dist/SpendingPolicyEnforcer.js.map +1 -0
  10. package/dist/cards/CardManager.d.ts +71 -0
  11. package/dist/cards/CardManager.d.ts.map +1 -0
  12. package/dist/cards/CardManager.js +212 -0
  13. package/dist/cards/CardManager.js.map +1 -0
  14. package/dist/cards/LithicCardAdapter.d.ts +40 -0
  15. package/dist/cards/LithicCardAdapter.d.ts.map +1 -0
  16. package/dist/cards/LithicCardAdapter.js +116 -0
  17. package/dist/cards/LithicCardAdapter.js.map +1 -0
  18. package/dist/cards/MccCategoryMap.d.ts +36 -0
  19. package/dist/cards/MccCategoryMap.d.ts.map +1 -0
  20. package/dist/cards/MccCategoryMap.js +113 -0
  21. package/dist/cards/MccCategoryMap.js.map +1 -0
  22. package/dist/cards/types.d.ts +131 -0
  23. package/dist/cards/types.d.ts.map +1 -0
  24. package/dist/cards/types.js +12 -0
  25. package/dist/cards/types.js.map +1 -0
  26. package/dist/chains/EvmWalletAdapter.d.ts +30 -0
  27. package/dist/chains/EvmWalletAdapter.d.ts.map +1 -0
  28. package/dist/chains/EvmWalletAdapter.js +135 -0
  29. package/dist/chains/EvmWalletAdapter.js.map +1 -0
  30. package/dist/chains/SolanaWalletAdapter.d.ts +32 -0
  31. package/dist/chains/SolanaWalletAdapter.d.ts.map +1 -0
  32. package/dist/chains/SolanaWalletAdapter.js +128 -0
  33. package/dist/chains/SolanaWalletAdapter.js.map +1 -0
  34. package/dist/index.d.ts +61 -0
  35. package/dist/index.d.ts.map +1 -0
  36. package/dist/index.js +228 -0
  37. package/dist/index.js.map +1 -0
  38. package/dist/tools/CardSpendingSummaryTool.d.ts +14 -0
  39. package/dist/tools/CardSpendingSummaryTool.d.ts.map +1 -0
  40. package/dist/tools/CardSpendingSummaryTool.js +40 -0
  41. package/dist/tools/CardSpendingSummaryTool.js.map +1 -0
  42. package/dist/tools/CardStatusTool.d.ts +21 -0
  43. package/dist/tools/CardStatusTool.d.ts.map +1 -0
  44. package/dist/tools/CardStatusTool.js +48 -0
  45. package/dist/tools/CardStatusTool.js.map +1 -0
  46. package/dist/tools/CheckBalanceTool.d.ts +23 -0
  47. package/dist/tools/CheckBalanceTool.d.ts.map +1 -0
  48. package/dist/tools/CheckBalanceTool.js +116 -0
  49. package/dist/tools/CheckBalanceTool.js.map +1 -0
  50. package/dist/tools/FreezeCardTool.d.ts +15 -0
  51. package/dist/tools/FreezeCardTool.d.ts.map +1 -0
  52. package/dist/tools/FreezeCardTool.js +39 -0
  53. package/dist/tools/FreezeCardTool.js.map +1 -0
  54. package/dist/tools/IssueCardTool.d.ts +22 -0
  55. package/dist/tools/IssueCardTool.d.ts.map +1 -0
  56. package/dist/tools/IssueCardTool.js +55 -0
  57. package/dist/tools/IssueCardTool.js.map +1 -0
  58. package/dist/tools/PayWithCardTool.d.ts +29 -0
  59. package/dist/tools/PayWithCardTool.d.ts.map +1 -0
  60. package/dist/tools/PayWithCardTool.js +79 -0
  61. package/dist/tools/PayWithCardTool.js.map +1 -0
  62. package/dist/tools/SendCryptoTool.d.ts +33 -0
  63. package/dist/tools/SendCryptoTool.d.ts.map +1 -0
  64. package/dist/tools/SendCryptoTool.js +136 -0
  65. package/dist/tools/SendCryptoTool.js.map +1 -0
  66. package/dist/tools/UnfreezeCardTool.d.ts +15 -0
  67. package/dist/tools/UnfreezeCardTool.d.ts.map +1 -0
  68. package/dist/tools/UnfreezeCardTool.js +39 -0
  69. package/dist/tools/UnfreezeCardTool.js.map +1 -0
  70. package/dist/tools/WalletHistoryTool.d.ts +35 -0
  71. package/dist/tools/WalletHistoryTool.d.ts.map +1 -0
  72. package/dist/tools/WalletHistoryTool.js +75 -0
  73. package/dist/tools/WalletHistoryTool.js.map +1 -0
  74. package/dist/types.d.ts +146 -0
  75. package/dist/types.d.ts.map +1 -0
  76. package/dist/types.js +29 -0
  77. package/dist/types.js.map +1 -0
  78. package/manifest.json +98 -0
  79. package/package.json +78 -0
  80. package/src/AgentWalletManager.ts +324 -0
  81. package/src/SpendingPolicyEnforcer.ts +169 -0
  82. package/src/cards/CardManager.ts +274 -0
  83. package/src/cards/LithicCardAdapter.ts +159 -0
  84. package/src/cards/MccCategoryMap.ts +138 -0
  85. package/src/cards/types.ts +169 -0
  86. package/src/chains/EvmWalletAdapter.ts +170 -0
  87. package/src/chains/SolanaWalletAdapter.ts +184 -0
  88. package/src/index.ts +315 -0
  89. package/src/tools/CardSpendingSummaryTool.ts +52 -0
  90. package/src/tools/CardStatusTool.ts +68 -0
  91. package/src/tools/CheckBalanceTool.ts +145 -0
  92. package/src/tools/FreezeCardTool.ts +52 -0
  93. package/src/tools/IssueCardTool.ts +76 -0
  94. package/src/tools/PayWithCardTool.ts +109 -0
  95. package/src/tools/SendCryptoTool.ts +185 -0
  96. package/src/tools/UnfreezeCardTool.ts +52 -0
  97. package/src/tools/WalletHistoryTool.ts +113 -0
  98. package/src/types.ts +230 -0
  99. package/test/AgentWalletManager.spec.ts +301 -0
  100. package/test/CardManager.spec.ts +428 -0
  101. package/test/LithicCardAdapter.spec.ts +224 -0
  102. package/test/MccCategoryMap.spec.ts +153 -0
  103. package/test/SpendingPolicyEnforcer.spec.ts +254 -0
  104. package/test/card-integration.spec.ts +242 -0
  105. package/test/card-tools.spec.ts +285 -0
  106. package/test/integration.spec.ts +171 -0
  107. package/test/wallet-tools.spec.ts +275 -0
  108. package/tsconfig.json +22 -0
@@ -0,0 +1,131 @@
1
+ /**
2
+ * @fileoverview Types for the virtual card subsystem (Lithic integration).
3
+ * @module wallet/cards/types
4
+ */
5
+ import type { SpendCategory } from '../types.js';
6
+ export type CardType = 'VIRTUAL' | 'PHYSICAL';
7
+ export type CardState = 'OPEN' | 'PAUSED' | 'CLOSED' | 'PENDING_FULFILLMENT';
8
+ export type CardNetwork = 'VISA' | 'MASTERCARD';
9
+ export type CardTxStatus = 'PENDING' | 'SETTLED' | 'DECLINED' | 'VOIDED';
10
+ export type SpendLimitDuration = 'TRANSACTION' | 'MONTHLY' | 'ANNUALLY' | 'FOREVER';
11
+ export interface CardConfig {
12
+ enabled: boolean;
13
+ /** Card provider. Only 'lithic' is supported. */
14
+ provider: 'lithic';
15
+ /** Default per-card spending limit in USD. */
16
+ defaultSpendLimitUsd: number;
17
+ /** Whether physical card issuance is allowed. */
18
+ allowPhysical: boolean;
19
+ }
20
+ export declare const DEFAULT_CARD_CONFIG: CardConfig;
21
+ export interface AgentCardRecord {
22
+ id: string;
23
+ agentId: string;
24
+ /** Lithic's card token identifier. */
25
+ lithicCardToken: string;
26
+ last4: string;
27
+ cardType: CardType;
28
+ state: CardState;
29
+ spendLimitUsd: number;
30
+ spendLimitDuration: SpendLimitDuration;
31
+ network: CardNetwork;
32
+ /** Agent-assigned label for the card. */
33
+ memo?: string;
34
+ createdAt: number;
35
+ }
36
+ export interface CardTransactionRecord {
37
+ id: string;
38
+ /** FK to AgentCardRecord.id */
39
+ cardId: string;
40
+ /** Lithic's transaction token. */
41
+ lithicTxToken: string;
42
+ merchantName?: string;
43
+ /** 4-digit Merchant Category Code. */
44
+ merchantMcc: string;
45
+ /** Resolved spend category. */
46
+ category: SpendCategory;
47
+ amountUsd: number;
48
+ status: CardTxStatus;
49
+ createdAt: number;
50
+ }
51
+ export interface ICardStore {
52
+ getCard(agentId: string): Promise<AgentCardRecord | null>;
53
+ saveCard(record: AgentCardRecord): Promise<void>;
54
+ updateCardState(agentId: string, state: CardState): Promise<void>;
55
+ insertTransaction(record: CardTransactionRecord): Promise<void>;
56
+ updateTransactionStatus(id: string, status: CardTxStatus): Promise<void>;
57
+ getTransactions(cardId: string, limit?: number): Promise<CardTransactionRecord[]>;
58
+ getTransactionsByPeriod(cardId: string, since: number): Promise<CardTransactionRecord[]>;
59
+ }
60
+ export interface CreateCardParams {
61
+ type: CardType;
62
+ memo?: string;
63
+ spend_limit: number;
64
+ spend_limit_duration: SpendLimitDuration;
65
+ state?: CardState;
66
+ }
67
+ export interface UpdateCardParams {
68
+ state?: CardState;
69
+ spend_limit?: number;
70
+ spend_limit_duration?: SpendLimitDuration;
71
+ memo?: string;
72
+ }
73
+ export interface LithicCardResponse {
74
+ token: string;
75
+ last_four: string;
76
+ type: CardType;
77
+ state: CardState;
78
+ spend_limit: number;
79
+ spend_limit_duration: SpendLimitDuration;
80
+ pan?: string;
81
+ cvv?: string;
82
+ exp_month?: string;
83
+ exp_year?: string;
84
+ funding: {
85
+ token: string;
86
+ type: string;
87
+ };
88
+ }
89
+ export interface LithicTransaction {
90
+ token: string;
91
+ card_token: string;
92
+ amount: number;
93
+ merchant: {
94
+ descriptor: string;
95
+ mcc: string;
96
+ city?: string;
97
+ state?: string;
98
+ country?: string;
99
+ };
100
+ status: 'PENDING' | 'SETTLED' | 'DECLINED' | 'VOIDED';
101
+ created: string;
102
+ }
103
+ export interface ListTxOpts {
104
+ begin?: string;
105
+ end?: string;
106
+ page_size?: number;
107
+ }
108
+ export interface AuthRuleParams {
109
+ allowed_mcc?: string[];
110
+ blocked_mcc?: string[];
111
+ }
112
+ export interface ICardAdapter {
113
+ createCard(params: CreateCardParams): Promise<LithicCardResponse>;
114
+ getCard(cardToken: string): Promise<LithicCardResponse>;
115
+ updateCard(cardToken: string, updates: UpdateCardParams): Promise<LithicCardResponse>;
116
+ pauseCard(cardToken: string): Promise<void>;
117
+ resumeCard(cardToken: string): Promise<void>;
118
+ closeCard(cardToken: string): Promise<void>;
119
+ listTransactions(cardToken: string, opts?: ListTxOpts): Promise<LithicTransaction[]>;
120
+ createAuthRule(cardToken: string, rule: AuthRuleParams): Promise<void>;
121
+ }
122
+ export interface SpendingSummary {
123
+ totalUsd: number;
124
+ period: 'day' | 'month';
125
+ byCategory: Array<{
126
+ category: SpendCategory;
127
+ amountUsd: number;
128
+ }>;
129
+ transactionCount: number;
130
+ }
131
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/cards/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ // @ts-nocheck
2
+ /**
3
+ * @fileoverview Types for the virtual card subsystem (Lithic integration).
4
+ * @module wallet/cards/types
5
+ */
6
+ export const DEFAULT_CARD_CONFIG = {
7
+ enabled: false,
8
+ provider: 'lithic',
9
+ defaultSpendLimitUsd: 500,
10
+ allowPhysical: false,
11
+ };
12
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/cards/types.ts"],"names":[],"mappings":"AAAA,cAAc;AACd;;;GAGG;AA4BH,MAAM,CAAC,MAAM,mBAAmB,GAAe;IAC7C,OAAO,EAAE,KAAK;IACd,QAAQ,EAAE,QAAQ;IAClB,oBAAoB,EAAE,GAAG;IACzB,aAAa,EAAE,KAAK;CACrB,CAAC"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * @fileoverview EVM chain adapter for the Agent Personal Wallet.
3
+ *
4
+ * Supports Ethereum, Base, and Polygon via ethers.js v6 (dynamic import).
5
+ *
6
+ * @module wunderland/wallet/chains/EvmWalletAdapter
7
+ */
8
+ import type { ChainId, IChainWalletAdapter, WalletTxStatus } from '../types.js';
9
+ /** Well-known ERC-20 addresses per chain. */
10
+ export declare const KNOWN_TOKENS: Record<string, Record<string, string>>;
11
+ export interface EvmWalletAdapterOptions {
12
+ chain: ChainId;
13
+ rpcUrl?: string;
14
+ }
15
+ export declare class EvmWalletAdapter implements IChainWalletAdapter {
16
+ readonly chain: ChainId;
17
+ private rpcUrl;
18
+ constructor(opts: EvmWalletAdapterOptions);
19
+ generateKeypair(): Promise<{
20
+ publicKey: string;
21
+ secretKey: Uint8Array;
22
+ }>;
23
+ getBalance(address: string): Promise<bigint>;
24
+ getTokenBalance(address: string, tokenAddress: string): Promise<bigint>;
25
+ signTransfer(secretKey: Uint8Array, to: string, amountRaw: bigint): Promise<Uint8Array>;
26
+ signTokenTransfer(secretKey: Uint8Array, to: string, tokenAddress: string, amountRaw: bigint): Promise<Uint8Array>;
27
+ broadcast(signedTx: Uint8Array): Promise<string>;
28
+ getTransactionStatus(txHash: string): Promise<WalletTxStatus>;
29
+ }
30
+ //# sourceMappingURL=EvmWalletAdapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EvmWalletAdapter.d.ts","sourceRoot":"","sources":["../../src/chains/EvmWalletAdapter.ts"],"names":[],"mappings":"AACA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AA2BhF,6CAA6C;AAC7C,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAa/D,CAAC;AASF,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,gBAAiB,YAAW,mBAAmB;IAC1D,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,OAAO,CAAC,MAAM,CAAS;gBAEX,IAAI,EAAE,uBAAuB;IAKnC,eAAe,IAAI,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,UAAU,CAAA;KAAE,CAAC;IAYxE,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAM5C,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAQvE,YAAY,CAChB,SAAS,EAAE,UAAU,EACrB,EAAE,EAAE,MAAM,EACV,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,UAAU,CAAC;IAchB,iBAAiB,CACrB,SAAS,EAAE,UAAU,EACrB,EAAE,EAAE,MAAM,EACV,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,UAAU,CAAC;IAYhB,SAAS,CAAC,QAAQ,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;IAQhD,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;CASpE"}
@@ -0,0 +1,135 @@
1
+ // @ts-nocheck
2
+ /**
3
+ * @fileoverview EVM chain adapter for the Agent Personal Wallet.
4
+ *
5
+ * Supports Ethereum, Base, and Polygon via ethers.js v6 (dynamic import).
6
+ *
7
+ * @module wunderland/wallet/chains/EvmWalletAdapter
8
+ */
9
+ // Lazily resolved ethers module (dynamic import — not a hard dependency)
10
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
11
+ let _ethers = null;
12
+ async function getEthers() {
13
+ if (!_ethers) {
14
+ try {
15
+ _ethers = await import('ethers');
16
+ }
17
+ catch {
18
+ throw new Error('Missing dependency: ethers is required for EVM wallet support. '
19
+ + 'Install it with: npm install ethers');
20
+ }
21
+ }
22
+ return _ethers;
23
+ }
24
+ /** Default RPC endpoints per chain. */
25
+ const DEFAULT_RPC = {
26
+ ethereum: 'https://eth.llamarpc.com',
27
+ base: 'https://mainnet.base.org',
28
+ polygon: 'https://polygon-rpc.com',
29
+ };
30
+ /** Well-known ERC-20 addresses per chain. */
31
+ export const KNOWN_TOKENS = {
32
+ ethereum: {
33
+ USDC: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',
34
+ USDT: '0xdAC17F958D2ee523a2206206994597C13D831ec7',
35
+ },
36
+ base: {
37
+ USDC: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913',
38
+ USDT: '0xfde4C96c8593536E31F229EA8f37b2ADa2699bb2',
39
+ },
40
+ polygon: {
41
+ USDC: '0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359',
42
+ USDT: '0xc2132D05D31c914a87C6611C10748AEb04B58e8F',
43
+ },
44
+ };
45
+ /** Minimal ERC-20 ABI for balance + transfer. */
46
+ const ERC20_ABI = [
47
+ 'function balanceOf(address owner) view returns (uint256)',
48
+ 'function transfer(address to, uint256 amount) returns (bool)',
49
+ 'function decimals() view returns (uint8)',
50
+ ];
51
+ export class EvmWalletAdapter {
52
+ chain;
53
+ rpcUrl;
54
+ constructor(opts) {
55
+ this.chain = opts.chain;
56
+ this.rpcUrl = opts.rpcUrl || DEFAULT_RPC[opts.chain] || DEFAULT_RPC.ethereum;
57
+ }
58
+ async generateKeypair() {
59
+ const { Wallet } = await getEthers();
60
+ const wallet = Wallet.createRandom();
61
+ // ethers v6 returns hex private key — convert to Uint8Array
62
+ const privKeyHex = wallet.privateKey.slice(2); // remove 0x
63
+ const secretKey = hexToBytes(privKeyHex);
64
+ return {
65
+ publicKey: wallet.address,
66
+ secretKey,
67
+ };
68
+ }
69
+ async getBalance(address) {
70
+ const { JsonRpcProvider } = await getEthers();
71
+ const provider = new JsonRpcProvider(this.rpcUrl);
72
+ return await provider.getBalance(address);
73
+ }
74
+ async getTokenBalance(address, tokenAddress) {
75
+ const { JsonRpcProvider, Contract } = await getEthers();
76
+ const provider = new JsonRpcProvider(this.rpcUrl);
77
+ const contract = new Contract(tokenAddress, ERC20_ABI, provider);
78
+ const balance = await contract.balanceOf(address);
79
+ return balance;
80
+ }
81
+ async signTransfer(secretKey, to, amountRaw) {
82
+ const { JsonRpcProvider, Wallet } = await getEthers();
83
+ const provider = new JsonRpcProvider(this.rpcUrl);
84
+ const wallet = new Wallet(bytesToHex(secretKey), provider);
85
+ const tx = await wallet.populateTransaction({
86
+ to,
87
+ value: amountRaw,
88
+ });
89
+ const signed = await wallet.signTransaction(tx);
90
+ return hexToBytes(signed.slice(2));
91
+ }
92
+ async signTokenTransfer(secretKey, to, tokenAddress, amountRaw) {
93
+ const { JsonRpcProvider, Wallet, Contract } = await getEthers();
94
+ const provider = new JsonRpcProvider(this.rpcUrl);
95
+ const wallet = new Wallet(bytesToHex(secretKey), provider);
96
+ const contract = new Contract(tokenAddress, ERC20_ABI, wallet);
97
+ const tx = await contract.transfer.populateTransaction(to, amountRaw);
98
+ const populated = await wallet.populateTransaction(tx);
99
+ const signed = await wallet.signTransaction(populated);
100
+ return hexToBytes(signed.slice(2));
101
+ }
102
+ async broadcast(signedTx) {
103
+ const { JsonRpcProvider } = await getEthers();
104
+ const provider = new JsonRpcProvider(this.rpcUrl);
105
+ const txResponse = await provider.broadcastTransaction('0x' + bytesToHex(signedTx));
106
+ await txResponse.wait(1);
107
+ return txResponse.hash;
108
+ }
109
+ async getTransactionStatus(txHash) {
110
+ const { JsonRpcProvider } = await getEthers();
111
+ const provider = new JsonRpcProvider(this.rpcUrl);
112
+ const receipt = await provider.getTransactionReceipt(txHash);
113
+ if (!receipt)
114
+ return 'pending';
115
+ if (receipt.status === 1)
116
+ return 'confirmed';
117
+ return 'failed';
118
+ }
119
+ }
120
+ // ---------------------------------------------------------------------------
121
+ // Hex <-> bytes helpers
122
+ // ---------------------------------------------------------------------------
123
+ function hexToBytes(hex) {
124
+ const bytes = new Uint8Array(hex.length / 2);
125
+ for (let i = 0; i < bytes.length; i++) {
126
+ bytes[i] = parseInt(hex.substring(i * 2, i * 2 + 2), 16);
127
+ }
128
+ return bytes;
129
+ }
130
+ function bytesToHex(bytes) {
131
+ return Array.from(bytes)
132
+ .map((b) => b.toString(16).padStart(2, '0'))
133
+ .join('');
134
+ }
135
+ //# sourceMappingURL=EvmWalletAdapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EvmWalletAdapter.js","sourceRoot":"","sources":["../../src/chains/EvmWalletAdapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * @fileoverview Solana chain adapter for the Agent Personal Wallet.
3
+ *
4
+ * Uses dynamic imports for @solana/web3.js so it remains an optional dependency.
5
+ * Patterns derived from the existing SolanaProvider in anchor-providers.
6
+ *
7
+ * @module wunderland/wallet/chains/SolanaWalletAdapter
8
+ */
9
+ import type { IChainWalletAdapter, WalletTxStatus } from '../types.js';
10
+ export interface SolanaWalletAdapterOptions {
11
+ /** RPC endpoint URL. Defaults to mainnet-beta. */
12
+ rpcUrl?: string;
13
+ /** Commitment level for queries. */
14
+ commitment?: 'processed' | 'confirmed' | 'finalized';
15
+ }
16
+ export declare class SolanaWalletAdapter implements IChainWalletAdapter {
17
+ readonly chain: "solana";
18
+ private rpcUrl;
19
+ private commitment;
20
+ constructor(opts?: SolanaWalletAdapterOptions);
21
+ generateKeypair(): Promise<{
22
+ publicKey: string;
23
+ secretKey: Uint8Array;
24
+ }>;
25
+ getBalance(address: string): Promise<bigint>;
26
+ getTokenBalance(address: string, tokenMint: string): Promise<bigint>;
27
+ signTransfer(secretKey: Uint8Array, to: string, amountRaw: bigint): Promise<Uint8Array>;
28
+ signTokenTransfer(secretKey: Uint8Array, to: string, tokenMint: string, amountRaw: bigint): Promise<Uint8Array>;
29
+ broadcast(signedTx: Uint8Array): Promise<string>;
30
+ getTransactionStatus(txHash: string): Promise<WalletTxStatus>;
31
+ }
32
+ //# sourceMappingURL=SolanaWalletAdapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SolanaWalletAdapter.d.ts","sourceRoot":"","sources":["../../src/chains/SolanaWalletAdapter.ts"],"names":[],"mappings":"AACA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAmBvE,MAAM,WAAW,0BAA0B;IACzC,kDAAkD;IAClD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oCAAoC;IACpC,UAAU,CAAC,EAAE,WAAW,GAAG,WAAW,GAAG,WAAW,CAAC;CACtD;AAED,qBAAa,mBAAoB,YAAW,mBAAmB;IAC7D,QAAQ,CAAC,KAAK,EAAG,QAAQ,CAAU;IACnC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,UAAU,CAA0C;gBAEhD,IAAI,GAAE,0BAA+B;IAK3C,eAAe,IAAI,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,UAAU,CAAA;KAAE,CAAC;IASxE,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAO5C,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAepE,YAAY,CAChB,SAAS,EAAE,UAAU,EACrB,EAAE,EAAE,MAAM,EACV,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,UAAU,CAAC;IAoBhB,iBAAiB,CACrB,SAAS,EAAE,UAAU,EACrB,EAAE,EAAE,MAAM,EACV,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,UAAU,CAAC;IAqDhB,SAAS,CAAC,QAAQ,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;IAYhD,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;CAYpE"}
@@ -0,0 +1,128 @@
1
+ // @ts-nocheck
2
+ /**
3
+ * @fileoverview Solana chain adapter for the Agent Personal Wallet.
4
+ *
5
+ * Uses dynamic imports for @solana/web3.js so it remains an optional dependency.
6
+ * Patterns derived from the existing SolanaProvider in anchor-providers.
7
+ *
8
+ * @module wunderland/wallet/chains/SolanaWalletAdapter
9
+ */
10
+ // Lazily resolved modules
11
+ let _web3 = null;
12
+ async function getWeb3() {
13
+ if (!_web3) {
14
+ try {
15
+ _web3 = await import('@solana/web3.js');
16
+ }
17
+ catch {
18
+ throw new Error('Missing dependency: @solana/web3.js is required for Solana wallet support. '
19
+ + 'Install it with: npm install @solana/web3.js');
20
+ }
21
+ }
22
+ return _web3;
23
+ }
24
+ export class SolanaWalletAdapter {
25
+ chain = 'solana';
26
+ rpcUrl;
27
+ commitment;
28
+ constructor(opts = {}) {
29
+ this.rpcUrl = opts.rpcUrl || 'https://api.mainnet-beta.solana.com';
30
+ this.commitment = opts.commitment || 'confirmed';
31
+ }
32
+ async generateKeypair() {
33
+ const { Keypair } = await getWeb3();
34
+ const kp = Keypair.generate();
35
+ return {
36
+ publicKey: kp.publicKey.toBase58(),
37
+ secretKey: kp.secretKey,
38
+ };
39
+ }
40
+ async getBalance(address) {
41
+ const { Connection, PublicKey } = await getWeb3();
42
+ const conn = new Connection(this.rpcUrl, this.commitment);
43
+ const lamports = await conn.getBalance(new PublicKey(address));
44
+ return BigInt(lamports);
45
+ }
46
+ async getTokenBalance(address, tokenMint) {
47
+ const { Connection, PublicKey } = await getWeb3();
48
+ const conn = new Connection(this.rpcUrl, this.commitment);
49
+ const ownerPk = new PublicKey(address);
50
+ const mintPk = new PublicKey(tokenMint);
51
+ // Find the associated token account
52
+ const accounts = await conn.getTokenAccountsByOwner(ownerPk, { mint: mintPk });
53
+ if (accounts.value.length === 0)
54
+ return 0n;
55
+ // Parse account data to get amount
56
+ const info = await conn.getTokenAccountBalance(accounts.value[0].pubkey);
57
+ return BigInt(info.value.amount);
58
+ }
59
+ async signTransfer(secretKey, to, amountRaw) {
60
+ const { Keypair, PublicKey, SystemProgram, Transaction, Connection } = await getWeb3();
61
+ const conn = new Connection(this.rpcUrl, this.commitment);
62
+ const signer = Keypair.fromSecretKey(secretKey);
63
+ const tx = new Transaction().add(SystemProgram.transfer({
64
+ fromPubkey: signer.publicKey,
65
+ toPubkey: new PublicKey(to),
66
+ lamports: Number(amountRaw),
67
+ }));
68
+ tx.feePayer = signer.publicKey;
69
+ tx.recentBlockhash = (await conn.getLatestBlockhash()).blockhash;
70
+ tx.sign(signer);
71
+ return tx.serialize();
72
+ }
73
+ async signTokenTransfer(secretKey, to, tokenMint, amountRaw) {
74
+ // SPL token transfers require @solana/spl-token — use dynamic import
75
+ const { Keypair, PublicKey, Transaction, Connection } = await getWeb3();
76
+ let splToken;
77
+ try {
78
+ splToken = await import('@solana/spl-token');
79
+ }
80
+ catch {
81
+ throw new Error('Missing dependency: @solana/spl-token is required for SPL token transfers. '
82
+ + 'Install it with: npm install @solana/spl-token');
83
+ }
84
+ const conn = new Connection(this.rpcUrl, this.commitment);
85
+ const signer = Keypair.fromSecretKey(secretKey);
86
+ const mintPk = new PublicKey(tokenMint);
87
+ const destPk = new PublicKey(to);
88
+ // Get or create associated token accounts
89
+ const sourceAta = splToken.getAssociatedTokenAddressSync(mintPk, signer.publicKey);
90
+ const destAta = splToken.getAssociatedTokenAddressSync(mintPk, destPk);
91
+ const tx = new Transaction();
92
+ // Create destination ATA if it doesn't exist
93
+ const destAccount = await conn.getAccountInfo(destAta);
94
+ if (!destAccount) {
95
+ tx.add(splToken.createAssociatedTokenAccountInstruction(signer.publicKey, destAta, destPk, mintPk));
96
+ }
97
+ tx.add(splToken.createTransferInstruction(sourceAta, destAta, signer.publicKey, Number(amountRaw)));
98
+ tx.feePayer = signer.publicKey;
99
+ tx.recentBlockhash = (await conn.getLatestBlockhash()).blockhash;
100
+ tx.sign(signer);
101
+ return tx.serialize();
102
+ }
103
+ async broadcast(signedTx) {
104
+ const { Connection } = await getWeb3();
105
+ const conn = new Connection(this.rpcUrl, this.commitment);
106
+ const sig = await conn.sendRawTransaction(signedTx, {
107
+ skipPreflight: false,
108
+ preflightCommitment: this.commitment,
109
+ });
110
+ // Wait for confirmation
111
+ await conn.confirmTransaction(sig, this.commitment);
112
+ return sig;
113
+ }
114
+ async getTransactionStatus(txHash) {
115
+ const { Connection } = await getWeb3();
116
+ const conn = new Connection(this.rpcUrl, this.commitment);
117
+ const status = await conn.getSignatureStatus(txHash);
118
+ if (!status.value)
119
+ return 'pending';
120
+ if (status.value.err)
121
+ return 'failed';
122
+ if (status.value.confirmationStatus === 'finalized' || status.value.confirmationStatus === 'confirmed') {
123
+ return 'confirmed';
124
+ }
125
+ return 'pending';
126
+ }
127
+ }
128
+ //# sourceMappingURL=SolanaWalletAdapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SolanaWalletAdapter.js","sourceRoot":"","sources":["../../src/chains/SolanaWalletAdapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * @fileoverview Agent Personal Wallet Extension Pack.
3
+ *
4
+ * Provides autonomous crypto spending tools with configurable guardrails:
5
+ * - check_wallet_balance — query balances across Solana/EVM chains
6
+ * - send_crypto — send with spending policy enforcement
7
+ * - wallet_transaction_history — view recent transactions
8
+ *
9
+ * @module @framers/agentos-ext-wallet
10
+ */
11
+ export interface ExtensionContext {
12
+ options?: Record<string, unknown>;
13
+ secrets?: Record<string, string>;
14
+ getSecret?: (key: string) => string | undefined;
15
+ logger?: {
16
+ info: (msg: string) => void;
17
+ warn?: (msg: string) => void;
18
+ };
19
+ }
20
+ export interface ExtensionPack {
21
+ name: string;
22
+ version: string;
23
+ descriptors: Array<{
24
+ id: string;
25
+ kind: string;
26
+ priority?: number;
27
+ payload: unknown;
28
+ }>;
29
+ onActivate?: () => Promise<void>;
30
+ onDeactivate?: () => Promise<void>;
31
+ }
32
+ export declare function createExtensionPack(context: ExtensionContext): ExtensionPack;
33
+ export { AgentWalletManager, ApprovalRequiredError, SpendingPolicyViolation } from './AgentWalletManager.js';
34
+ export type { AgentWalletManagerOptions, IWalletStore } from './AgentWalletManager.js';
35
+ export { SpendingPolicyEnforcer } from './SpendingPolicyEnforcer.js';
36
+ export type { ISpendingLedgerStore } from './SpendingPolicyEnforcer.js';
37
+ export type { AgentWalletRecord, CategoryBudget, ChainId, IChainWalletAdapter, SpendCategory, SpendCheckResult, SpendingLedgerEntry, SpendingPolicyConfig, TokenInfo, TokenSymbol, WalletConfig, WalletDirection, WalletTransactionRecord, WalletTxStatus, } from './types.js';
38
+ export { DEFAULT_SPENDING_POLICY, DEFAULT_WALLET_CONFIG } from './types.js';
39
+ export { SolanaWalletAdapter } from './chains/SolanaWalletAdapter.js';
40
+ export type { SolanaWalletAdapterOptions } from './chains/SolanaWalletAdapter.js';
41
+ export { EvmWalletAdapter, KNOWN_TOKENS } from './chains/EvmWalletAdapter.js';
42
+ export type { EvmWalletAdapterOptions } from './chains/EvmWalletAdapter.js';
43
+ export { createCheckBalanceTool } from './tools/CheckBalanceTool.js';
44
+ export { createSendCryptoTool } from './tools/SendCryptoTool.js';
45
+ export { createWalletHistoryTool } from './tools/WalletHistoryTool.js';
46
+ export { createIssueCardTool } from './tools/IssueCardTool.js';
47
+ export { createCardStatusTool } from './tools/CardStatusTool.js';
48
+ export { createFreezeCardTool } from './tools/FreezeCardTool.js';
49
+ export { createUnfreezeCardTool } from './tools/UnfreezeCardTool.js';
50
+ export { createCardSpendingSummaryTool } from './tools/CardSpendingSummaryTool.js';
51
+ export { createPayWithCardTool } from './tools/PayWithCardTool.js';
52
+ export { CardManager } from './cards/CardManager.js';
53
+ export type { CardManagerOptions } from './cards/CardManager.js';
54
+ export { CardSpendingBlockedError } from './cards/CardManager.js';
55
+ export { LithicCardAdapter, LithicApiError } from './cards/LithicCardAdapter.js';
56
+ export type { LithicCardAdapterOptions } from './cards/LithicCardAdapter.js';
57
+ export { MccCategoryMap } from './cards/MccCategoryMap.js';
58
+ export type { AgentCardRecord, CardConfig, CardTransactionRecord, CardTxStatus, CardState, CardType, CardNetwork, ICardAdapter, ICardStore, LithicCardResponse, LithicTransaction, SpendingSummary, SpendLimitDuration, } from './cards/types.js';
59
+ export { DEFAULT_CARD_CONFIG } from './cards/types.js';
60
+ export default createExtensionPack;
61
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}