agentwallet-sdk 5.0.4 → 5.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (262) hide show
  1. package/README.md +32 -11
  2. package/dist/ap2/index.d.ts +185 -0
  3. package/dist/ap2/index.d.ts.map +1 -0
  4. package/dist/ap2/index.js +255 -0
  5. package/dist/ap2/index.js.map +1 -0
  6. package/dist/bridge/unified.d.ts +101 -0
  7. package/dist/bridge/unified.d.ts.map +1 -0
  8. package/dist/bridge/unified.js +284 -0
  9. package/dist/bridge/unified.js.map +1 -0
  10. package/dist/chains.d.ts +62 -0
  11. package/dist/chains.d.ts.map +1 -0
  12. package/dist/chains.js +108 -0
  13. package/dist/chains.js.map +1 -0
  14. package/dist/fiat/index.d.ts +10 -0
  15. package/dist/fiat/index.d.ts.map +1 -0
  16. package/dist/fiat/index.js +9 -0
  17. package/dist/fiat/index.js.map +1 -0
  18. package/dist/fiat/onramp.d.ts +101 -0
  19. package/dist/fiat/onramp.d.ts.map +1 -0
  20. package/dist/fiat/onramp.js +155 -0
  21. package/dist/fiat/onramp.js.map +1 -0
  22. package/dist/fiat/providers/index.d.ts +16 -0
  23. package/dist/fiat/providers/index.d.ts.map +1 -0
  24. package/dist/fiat/providers/index.js +30 -0
  25. package/dist/fiat/providers/index.js.map +1 -0
  26. package/dist/fiat/providers/moonpay.d.ts +22 -0
  27. package/dist/fiat/providers/moonpay.d.ts.map +1 -0
  28. package/dist/fiat/providers/moonpay.js +107 -0
  29. package/dist/fiat/providers/moonpay.js.map +1 -0
  30. package/dist/fiat/providers/stripe.d.ts +26 -0
  31. package/dist/fiat/providers/stripe.d.ts.map +1 -0
  32. package/dist/fiat/providers/stripe.js +135 -0
  33. package/dist/fiat/providers/stripe.js.map +1 -0
  34. package/dist/fiat/providers/transak.d.ts +26 -0
  35. package/dist/fiat/providers/transak.d.ts.map +1 -0
  36. package/dist/fiat/providers/transak.js +119 -0
  37. package/dist/fiat/providers/transak.js.map +1 -0
  38. package/dist/fiat/types.d.ts +106 -0
  39. package/dist/fiat/types.d.ts.map +1 -0
  40. package/dist/fiat/types.js +13 -0
  41. package/dist/fiat/types.js.map +1 -0
  42. package/dist/flash/executor.d.ts +119 -0
  43. package/dist/flash/executor.d.ts.map +1 -0
  44. package/dist/flash/executor.js +195 -0
  45. package/dist/flash/executor.js.map +1 -0
  46. package/dist/flash/index.d.ts +28 -0
  47. package/dist/flash/index.d.ts.map +1 -0
  48. package/dist/flash/index.js +29 -0
  49. package/dist/flash/index.js.map +1 -0
  50. package/dist/flash/scanner.d.ts +133 -0
  51. package/dist/flash/scanner.d.ts.map +1 -0
  52. package/dist/flash/scanner.js +212 -0
  53. package/dist/flash/scanner.js.map +1 -0
  54. package/dist/flash/types.d.ts +136 -0
  55. package/dist/flash/types.d.ts.map +1 -0
  56. package/dist/flash/types.js +23 -0
  57. package/dist/flash/types.js.map +1 -0
  58. package/dist/gas/index.d.ts +4 -0
  59. package/dist/gas/index.d.ts.map +1 -0
  60. package/dist/gas/index.js +3 -0
  61. package/dist/gas/index.js.map +1 -0
  62. package/dist/gas/sponsor.d.ts +70 -0
  63. package/dist/gas/sponsor.d.ts.map +1 -0
  64. package/dist/gas/sponsor.js +193 -0
  65. package/dist/gas/sponsor.js.map +1 -0
  66. package/dist/gas/types.d.ts +76 -0
  67. package/dist/gas/types.d.ts.map +1 -0
  68. package/dist/gas/types.js +21 -0
  69. package/dist/gas/types.js.map +1 -0
  70. package/dist/identity/agent-identity.d.ts +276 -0
  71. package/dist/identity/agent-identity.d.ts.map +1 -0
  72. package/dist/identity/agent-identity.js +300 -0
  73. package/dist/identity/agent-identity.js.map +1 -0
  74. package/dist/identity/email-resolver.d.ts +235 -0
  75. package/dist/identity/email-resolver.js +283 -0
  76. package/dist/identity/erc6551.d.ts +441 -0
  77. package/dist/identity/erc6551.d.ts.map +1 -0
  78. package/dist/identity/erc6551.js +517 -0
  79. package/dist/identity/erc6551.js.map +1 -0
  80. package/dist/index.d.ts +286 -213
  81. package/dist/index.d.ts.map +1 -1
  82. package/dist/index.js +3 -1
  83. package/dist/index.js.map +1 -1
  84. package/dist/mev/index.d.ts +4 -0
  85. package/dist/mev/index.d.ts.map +1 -0
  86. package/dist/mev/index.js +8 -0
  87. package/dist/mev/index.js.map +1 -0
  88. package/dist/mev/protection.d.ts +54 -0
  89. package/dist/mev/protection.d.ts.map +1 -0
  90. package/dist/mev/protection.js +185 -0
  91. package/dist/mev/protection.js.map +1 -0
  92. package/dist/mev/risk.d.ts +19 -0
  93. package/dist/mev/risk.d.ts.map +1 -0
  94. package/dist/mev/risk.js +95 -0
  95. package/dist/mev/risk.js.map +1 -0
  96. package/dist/mev/types.d.ts +49 -0
  97. package/dist/mev/types.d.ts.map +1 -0
  98. package/dist/mev/types.js +2 -0
  99. package/dist/mev/types.js.map +1 -0
  100. package/dist/settlement/index.d.ts +4 -0
  101. package/dist/settlement/index.d.ts.map +1 -0
  102. package/dist/settlement/index.js +3 -0
  103. package/dist/settlement/index.js.map +1 -0
  104. package/dist/settlement/types.d.ts +66 -0
  105. package/dist/settlement/types.d.ts.map +1 -0
  106. package/dist/settlement/types.js +37 -0
  107. package/dist/settlement/types.js.map +1 -0
  108. package/dist/settlement/verifier.d.ts +75 -0
  109. package/dist/settlement/verifier.d.ts.map +1 -0
  110. package/dist/settlement/verifier.js +354 -0
  111. package/dist/settlement/verifier.js.map +1 -0
  112. package/dist/solana/bridge.d.ts +144 -0
  113. package/dist/solana/bridge.d.ts.map +1 -0
  114. package/dist/solana/bridge.js +352 -0
  115. package/dist/solana/bridge.js.map +1 -0
  116. package/dist/solana/index.d.ts +8 -0
  117. package/dist/solana/index.d.ts.map +1 -0
  118. package/dist/solana/index.js +6 -0
  119. package/dist/solana/index.js.map +1 -0
  120. package/dist/solana/swap.d.ts +85 -0
  121. package/dist/solana/swap.d.ts.map +1 -0
  122. package/dist/solana/swap.js +173 -0
  123. package/dist/solana/swap.js.map +1 -0
  124. package/dist/solana/types.d.ts +126 -0
  125. package/dist/solana/types.d.ts.map +1 -0
  126. package/dist/solana/types.js +10 -0
  127. package/dist/solana/types.js.map +1 -0
  128. package/dist/solana/wallet.d.ts +83 -0
  129. package/dist/solana/wallet.d.ts.map +1 -0
  130. package/dist/solana/wallet.js +164 -0
  131. package/dist/solana/wallet.js.map +1 -0
  132. package/dist/solana/x402.d.ts +69 -0
  133. package/dist/solana/x402.d.ts.map +1 -0
  134. package/dist/solana/x402.js +154 -0
  135. package/dist/solana/x402.js.map +1 -0
  136. package/dist/solver/adapter.d.ts +47 -0
  137. package/dist/solver/adapter.d.ts.map +1 -0
  138. package/dist/solver/adapter.js +146 -0
  139. package/dist/solver/adapter.js.map +1 -0
  140. package/dist/solver/analyzer.d.ts +48 -0
  141. package/dist/solver/analyzer.d.ts.map +1 -0
  142. package/dist/solver/analyzer.js +171 -0
  143. package/dist/solver/analyzer.js.map +1 -0
  144. package/dist/solver/builder.d.ts +31 -0
  145. package/dist/solver/builder.d.ts.map +1 -0
  146. package/dist/solver/builder.js +60 -0
  147. package/dist/solver/builder.js.map +1 -0
  148. package/dist/solver/index.d.ts +22 -0
  149. package/dist/solver/index.d.ts.map +1 -0
  150. package/dist/solver/index.js +25 -0
  151. package/dist/solver/index.js.map +1 -0
  152. package/dist/solver/types.d.ts +115 -0
  153. package/dist/solver/types.d.ts.map +1 -0
  154. package/dist/solver/types.js +10 -0
  155. package/dist/solver/types.js.map +1 -0
  156. package/dist/spend-guard/index.d.ts +125 -0
  157. package/dist/spend-guard/index.d.ts.map +1 -0
  158. package/dist/spend-guard/index.js +150 -0
  159. package/dist/spend-guard/index.js.map +1 -0
  160. package/dist/swap/router/cache.d.ts +13 -0
  161. package/dist/swap/router/cache.d.ts.map +1 -0
  162. package/dist/swap/router/cache.js +30 -0
  163. package/dist/swap/router/cache.js.map +1 -0
  164. package/dist/swap/router/flashbots.d.ts +10 -0
  165. package/dist/swap/router/flashbots.d.ts.map +1 -0
  166. package/dist/swap/router/flashbots.js +43 -0
  167. package/dist/swap/router/flashbots.js.map +1 -0
  168. package/dist/swap/router/health.d.ts +17 -0
  169. package/dist/swap/router/health.d.ts.map +1 -0
  170. package/dist/swap/router/health.js +38 -0
  171. package/dist/swap/router/health.js.map +1 -0
  172. package/dist/swap/router/index.d.ts +10 -0
  173. package/dist/swap/router/index.d.ts.map +1 -0
  174. package/dist/swap/router/index.js +10 -0
  175. package/dist/swap/router/index.js.map +1 -0
  176. package/dist/swap/router/providers/cowswap.d.ts +11 -0
  177. package/dist/swap/router/providers/cowswap.d.ts.map +1 -0
  178. package/dist/swap/router/providers/cowswap.js +79 -0
  179. package/dist/swap/router/providers/cowswap.js.map +1 -0
  180. package/dist/swap/router/providers/index.d.ts +20 -0
  181. package/dist/swap/router/providers/index.d.ts.map +1 -0
  182. package/dist/swap/router/providers/index.js +32 -0
  183. package/dist/swap/router/providers/index.js.map +1 -0
  184. package/dist/swap/router/providers/jupiter.d.ts +12 -0
  185. package/dist/swap/router/providers/jupiter.d.ts.map +1 -0
  186. package/dist/swap/router/providers/jupiter.js +73 -0
  187. package/dist/swap/router/providers/jupiter.js.map +1 -0
  188. package/dist/swap/router/providers/lifi.d.ts +11 -0
  189. package/dist/swap/router/providers/lifi.d.ts.map +1 -0
  190. package/dist/swap/router/providers/lifi.js +123 -0
  191. package/dist/swap/router/providers/lifi.js.map +1 -0
  192. package/dist/swap/router/providers/oneinch.d.ts +13 -0
  193. package/dist/swap/router/providers/oneinch.d.ts.map +1 -0
  194. package/dist/swap/router/providers/oneinch.js +71 -0
  195. package/dist/swap/router/providers/oneinch.js.map +1 -0
  196. package/dist/swap/router/providers/paraswap.d.ts +11 -0
  197. package/dist/swap/router/providers/paraswap.d.ts.map +1 -0
  198. package/dist/swap/router/providers/paraswap.js +73 -0
  199. package/dist/swap/router/providers/paraswap.js.map +1 -0
  200. package/dist/swap/router/providers/uniswap.d.ts +31 -0
  201. package/dist/swap/router/providers/uniswap.d.ts.map +1 -0
  202. package/dist/swap/router/providers/uniswap.js +237 -0
  203. package/dist/swap/router/providers/uniswap.js.map +1 -0
  204. package/dist/swap/router/providers/zerox.d.ts +13 -0
  205. package/dist/swap/router/providers/zerox.d.ts.map +1 -0
  206. package/dist/swap/router/providers/zerox.js +94 -0
  207. package/dist/swap/router/providers/zerox.js.map +1 -0
  208. package/dist/swap/router/router.d.ts +86 -0
  209. package/dist/swap/router/router.d.ts.map +1 -0
  210. package/dist/swap/router/router.js +224 -0
  211. package/dist/swap/router/router.js.map +1 -0
  212. package/dist/swap/router/rsi/engine.d.ts +60 -0
  213. package/dist/swap/router/rsi/engine.d.ts.map +1 -0
  214. package/dist/swap/router/rsi/engine.js +483 -0
  215. package/dist/swap/router/rsi/engine.js.map +1 -0
  216. package/dist/swap/router/rsi/index.d.ts +3 -0
  217. package/dist/swap/router/rsi/index.d.ts.map +1 -0
  218. package/dist/swap/router/rsi/index.js +3 -0
  219. package/dist/swap/router/rsi/index.js.map +1 -0
  220. package/dist/swap/router/rsi/types.d.ts +106 -0
  221. package/dist/swap/router/rsi/types.d.ts.map +1 -0
  222. package/dist/swap/router/rsi/types.js +3 -0
  223. package/dist/swap/router/rsi/types.js.map +1 -0
  224. package/dist/swap/router/types.d.ts +120 -0
  225. package/dist/swap/router/types.d.ts.map +1 -0
  226. package/dist/swap/router/types.js +16 -0
  227. package/dist/swap/router/types.js.map +1 -0
  228. package/dist/tax/engine.d.ts +131 -0
  229. package/dist/tax/engine.d.ts.map +1 -0
  230. package/dist/tax/engine.js +307 -0
  231. package/dist/tax/engine.js.map +1 -0
  232. package/dist/tax/index.d.ts +9 -0
  233. package/dist/tax/index.d.ts.map +1 -0
  234. package/dist/tax/index.js +12 -0
  235. package/dist/tax/index.js.map +1 -0
  236. package/dist/tax/lots.d.ts +60 -0
  237. package/dist/tax/lots.d.ts.map +1 -0
  238. package/dist/tax/lots.js +129 -0
  239. package/dist/tax/lots.js.map +1 -0
  240. package/dist/tax/types.d.ts +113 -0
  241. package/dist/tax/types.d.ts.map +1 -0
  242. package/dist/tax/types.js +18 -0
  243. package/dist/tax/types.js.map +1 -0
  244. package/dist/verifiable-intent/index.d.ts +84 -0
  245. package/dist/verifiable-intent/index.js +385 -0
  246. package/dist/yield/index.d.ts +26 -0
  247. package/dist/yield/index.d.ts.map +1 -0
  248. package/dist/yield/index.js +29 -0
  249. package/dist/yield/index.js.map +1 -0
  250. package/dist/yield/rates.d.ts +114 -0
  251. package/dist/yield/rates.d.ts.map +1 -0
  252. package/dist/yield/rates.js +351 -0
  253. package/dist/yield/rates.js.map +1 -0
  254. package/dist/yield/types.d.ts +134 -0
  255. package/dist/yield/types.d.ts.map +1 -0
  256. package/dist/yield/types.js +24 -0
  257. package/dist/yield/types.js.map +1 -0
  258. package/dist/yield/vault.d.ts +112 -0
  259. package/dist/yield/vault.d.ts.map +1 -0
  260. package/dist/yield/vault.js +264 -0
  261. package/dist/yield/vault.js.map +1 -0
  262. package/package.json +3 -3
@@ -0,0 +1,120 @@
1
+ export type SwapStrategy = 'best-net-output' | 'fastest' | 'lowest-gas' | 'mev-protected';
2
+ /** Unified quote format returned by every provider */
3
+ export interface AggregatorQuote {
4
+ /** Provider name (e.g. '1inch', '0x', 'paraswap', 'cowswap', 'lifi', 'uniswap', 'jupiter') */
5
+ provider: string;
6
+ /** Input token symbol or address */
7
+ fromToken: string;
8
+ /** Output token symbol or address */
9
+ toToken: string;
10
+ /** Input amount in smallest unit (e.g. wei, lamports) */
11
+ fromAmount: bigint;
12
+ /** Expected output amount in smallest unit */
13
+ toAmount: bigint;
14
+ /** Gas estimate in wei (0 for Solana/gasless) */
15
+ gasEstimate: bigint;
16
+ /** Gas cost in USD */
17
+ gasEstimateUsd: number;
18
+ /** Provider platform fee in basis points */
19
+ platformFee: number;
20
+ /** toAmount adjusted for gas cost — used for ranking */
21
+ netOutput: bigint;
22
+ /** Price impact as percentage (e.g. 0.3 = 0.3%) */
23
+ priceImpact: number;
24
+ /** DEX route path (e.g. ['Uniswap V3', 'Curve']) */
25
+ route: string[];
26
+ /** Estimated execution time in milliseconds */
27
+ estimatedTimeMs: number;
28
+ /** Whether this quote is MEV-protected (CowSwap, 1inch Fusion) */
29
+ mevProtected: boolean;
30
+ /** Ready-to-submit transaction data (if provided by aggregator) */
31
+ txData?: {
32
+ to: string;
33
+ data: string;
34
+ value: bigint;
35
+ gasLimit: bigint;
36
+ };
37
+ /** Token decimals for the output token (needed for USD normalization) */
38
+ toTokenDecimals?: number;
39
+ /** USD price of one unit of the output token */
40
+ toTokenPriceUsd?: number;
41
+ /** Raw provider response for debugging */
42
+ metadata?: Record<string, unknown>;
43
+ }
44
+ /** Receipt from waitForTransaction */
45
+ export interface TransactionReceipt {
46
+ status: 'success' | 'reverted';
47
+ blockNumber?: number;
48
+ gasUsed?: bigint;
49
+ [key: string]: unknown;
50
+ }
51
+ /** Result after executing a swap */
52
+ export interface AggregatorSwapResult {
53
+ /** Transaction hash (EVM) or signature (Solana) */
54
+ txHash: string;
55
+ /** Quote that was executed */
56
+ quote: AggregatorQuote;
57
+ /** Chain the swap was executed on */
58
+ chain: string;
59
+ /** Receipt (populated when waitForReceipt: true) */
60
+ receipt?: TransactionReceipt;
61
+ /** Whether the transaction succeeded (populated when waitForReceipt: true) */
62
+ success?: boolean;
63
+ }
64
+ /** Parameters for requesting a quote */
65
+ export interface QuoteParams {
66
+ /** Token symbol or address (e.g. 'USDC' or '0x833589...') */
67
+ fromToken: string;
68
+ /** Token symbol or address */
69
+ toToken: string;
70
+ /** Human-readable amount (e.g. '100' for 100 USDC) */
71
+ amount: string;
72
+ /** Chain name: 'ethereum', 'base', 'arbitrum', 'optimism', 'polygon', 'solana', etc. */
73
+ chain: string;
74
+ /** Sender address (required by some providers for accurate quotes) */
75
+ fromAddress?: string;
76
+ /** Slippage tolerance in bps (default: 50 = 0.5%) */
77
+ slippageBps?: number;
78
+ }
79
+ /** Provider interface — each aggregator implements this */
80
+ export interface ISwapProvider {
81
+ /** Provider identifier */
82
+ readonly name: string;
83
+ /** Chains this provider supports (lowercase) */
84
+ readonly supportedChains: string[];
85
+ /** Fetch a quote; returns null if unsupported or on error */
86
+ getQuote(params: QuoteParams, timeoutMs: number): Promise<AggregatorQuote | null>;
87
+ }
88
+ /** SmartSwapRouter configuration */
89
+ export interface SmartSwapConfig {
90
+ /** Providers to query (default: all available for chain) */
91
+ providers?: string[];
92
+ /** Ranking strategy (default: 'best-net-output') */
93
+ strategy?: SwapStrategy;
94
+ /** Per-provider timeout in ms (default: 5000) */
95
+ timeoutMs?: number;
96
+ /** Default slippage in bps (default: 50) */
97
+ slippageBps?: number;
98
+ /** Providers to exclude */
99
+ excludeProviders?: string[];
100
+ /** API keys for providers that require them */
101
+ apiKeys?: {
102
+ oneInch?: string;
103
+ zerox?: string;
104
+ };
105
+ /** Quote cache TTL in ms (default: 3000, set to 0 to disable) */
106
+ cacheTtlMs?: number;
107
+ /** Max consecutive failures before a provider is marked unhealthy (default: 3) */
108
+ healthMaxFailures?: number;
109
+ /** Cooldown in ms before retrying an unhealthy provider (default: 60000) */
110
+ healthCooldownMs?: number;
111
+ /** [MAX-ADDED] RSI engine config — opt-in self-improvement (default: disabled) */
112
+ rsi?: import('./rsi/types.js').RSIConfig;
113
+ /** [MAX-ADDED] Wallet goals for RSI optimization */
114
+ goals?: import('./rsi/types.js').WalletGoals;
115
+ }
116
+ /** Chain name → chain ID mapping for EVM chains */
117
+ export declare const CHAIN_IDS: Record<string, number>;
118
+ /** Reverse mapping: chain ID → name */
119
+ export declare const CHAIN_NAMES: Record<number, string>;
120
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/swap/router/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ // [MAX-ADDED] SmartSwapRouter types — multi-DEX meta-aggregation for agentwallet-sdk
2
+ // Separate from the existing Uniswap-specific SwapQuote in ../types.ts
3
+ /** Chain name → chain ID mapping for EVM chains */
4
+ export const CHAIN_IDS = {
5
+ ethereum: 1,
6
+ base: 8453,
7
+ arbitrum: 42161,
8
+ optimism: 10,
9
+ polygon: 137,
10
+ avalanche: 43114,
11
+ bnb: 56,
12
+ gnosis: 100,
13
+ };
14
+ /** Reverse mapping: chain ID → name */
15
+ export const CHAIN_NAMES = Object.fromEntries(Object.entries(CHAIN_IDS).map(([k, v]) => [v, k]));
16
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/swap/router/types.ts"],"names":[],"mappings":"AAAA,qFAAqF;AACrF,uEAAuE;AA4HvE,mDAAmD;AACnD,MAAM,CAAC,MAAM,SAAS,GAA2B;IAC/C,QAAQ,EAAE,CAAC;IACX,IAAI,EAAE,IAAI;IACV,QAAQ,EAAE,KAAK;IACf,QAAQ,EAAE,EAAE;IACZ,OAAO,EAAE,GAAG;IACZ,SAAS,EAAE,KAAK;IAChB,GAAG,EAAE,EAAE;IACP,MAAM,EAAE,GAAG;CACZ,CAAC;AAEF,uCAAuC;AACvC,MAAM,CAAC,MAAM,WAAW,GAA2B,MAAM,CAAC,WAAW,CACnE,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAClD,CAAC"}
@@ -0,0 +1,131 @@
1
+ /**
2
+ * Tax / P&L Engine — Core Engine
3
+ *
4
+ * ⚠️ DISCLAIMER: This module is for informational purposes only.
5
+ * Tax laws are complex, jurisdiction-specific, and change frequently.
6
+ * Always consult a qualified tax professional before filing. This is NOT tax advice.
7
+ *
8
+ * Key rules modeled (US-centric):
9
+ * - Every token swap = taxable disposal of fromToken + acquisition of toToken
10
+ * - Short-term gain: held < 365 days → taxed as ordinary income
11
+ * - Long-term gain: held ≥ 365 days → preferential capital gains rates
12
+ * - Yield received = ordinary income (full rate)
13
+ * - Gas fees = reduce net gain (treated as selling expense)
14
+ * - Wash sale rule: NOT applicable to crypto as of 2024 (no legislation yet)
15
+ * - Fiat on-ramp = establishes cost basis, NOT a taxable event
16
+ * - Bridge (cross-chain move) = generally NOT taxable (same owner, same asset)
17
+ */
18
+ import type { TaxEngineConfig, TaxEvent, TaxLot, RealizedGain, TaxSummary } from './types.js';
19
+ export declare class TaxEngine {
20
+ private config;
21
+ private lotManager;
22
+ private events;
23
+ private gains;
24
+ constructor(config?: TaxEngineConfig);
25
+ /**
26
+ * Record a swap — the most common taxable event in DeFi.
27
+ *
28
+ * A swap creates two sub-events:
29
+ * 1. Disposal of fromToken (taxable — creates realized gain/loss)
30
+ * 2. Acquisition of toToken (establishes new cost basis)
31
+ *
32
+ * Returns the RealizedGain record, or null if no lots were tracked
33
+ * (zero cost basis scenario — gain equals full proceeds).
34
+ */
35
+ recordSwap(params: {
36
+ txHash: string;
37
+ chain: string;
38
+ timestamp: number;
39
+ fromToken: string;
40
+ fromTokenAddress: string;
41
+ fromAmount: bigint;
42
+ fromValueUsd: number;
43
+ toToken: string;
44
+ toTokenAddress: string;
45
+ toAmount: bigint;
46
+ toValueUsd: number;
47
+ gasPaidUsd?: number;
48
+ }): RealizedGain | null;
49
+ /**
50
+ * Record yield received from a DeFi protocol (taxable as ordinary income).
51
+ *
52
+ * Yield is treated as income at the fair market value when received.
53
+ * The cost basis of the new lot = market value at receipt.
54
+ */
55
+ recordYieldReceived(params: {
56
+ txHash?: string;
57
+ chain: string;
58
+ timestamp: number;
59
+ token: string;
60
+ tokenAddress: string;
61
+ amount: bigint;
62
+ valueUsd: number;
63
+ protocol: string;
64
+ }): void;
65
+ /**
66
+ * Record a fiat on-ramp (buying crypto with fiat currency).
67
+ *
68
+ * This is NOT a taxable event — it establishes the cost basis for future disposals.
69
+ * The cost basis = amount paid in fiat (USD).
70
+ */
71
+ recordFiatOnRamp(params: {
72
+ txHash?: string;
73
+ chain: string;
74
+ timestamp: number;
75
+ token: string;
76
+ tokenAddress: string;
77
+ amount: bigint;
78
+ paidUsd: number;
79
+ }): void;
80
+ /**
81
+ * Generate an annual tax summary.
82
+ *
83
+ * ⚠️ For informational purposes only. Consult a tax professional.
84
+ */
85
+ getSummary(year?: number): TaxSummary;
86
+ /**
87
+ * Export to CSV format compatible with TurboTax, Koinly, CoinTracker, and similar tools.
88
+ *
89
+ * ⚠️ For informational purposes only. Consult a tax professional.
90
+ * All USD values are formatted to 2 decimal places to prevent CSV parsing issues.
91
+ */
92
+ exportCSV(year?: number): string;
93
+ /**
94
+ * Export to JSON (for programmatic use, custom reporting, CPA handoff).
95
+ *
96
+ * ⚠️ For informational purposes only. Consult a tax professional.
97
+ */
98
+ exportJSON(year?: number): {
99
+ summary: TaxSummary;
100
+ gains: RealizedGain[];
101
+ events: TaxEvent[];
102
+ };
103
+ /**
104
+ * Export full engine state for persistence across sessions.
105
+ */
106
+ exportState(): {
107
+ lots: Record<string, TaxLot[]>;
108
+ events: TaxEvent[];
109
+ gains: RealizedGain[];
110
+ };
111
+ /**
112
+ * Load state from a previous session (e.g., from database or JSON file).
113
+ * After loading, new swaps will correctly build on existing lot inventory.
114
+ */
115
+ loadState(state: {
116
+ lots: Record<string, TaxLot[]>;
117
+ events: TaxEvent[];
118
+ gains: RealizedGain[];
119
+ }): void;
120
+ /**
121
+ * Determine if a disposal is short-term or long-term.
122
+ *
123
+ * Uses the acquisition timestamp of the earliest lot consumed (conservative
124
+ * for FIFO; oldest lot determines the holding period of the bulk of the disposal).
125
+ *
126
+ * Rule: held ≥ 365 days = long-term; held < 365 days = short-term.
127
+ * If no lots were tracked, defaults to short-term (conservative).
128
+ */
129
+ private determineGainType;
130
+ }
131
+ //# sourceMappingURL=engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/tax/engine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EACV,eAAe,EACf,QAAQ,EACR,MAAM,EACN,YAAY,EACZ,UAAU,EAEX,MAAM,YAAY,CAAC;AAMpB,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,KAAK,CAAsB;gBAEvB,MAAM,GAAE,eAAoB;IAWxC;;;;;;;;;OASG;IACH,UAAU,CAAC,MAAM,EAAE;QACjB,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;QAClB,gBAAgB,EAAE,MAAM,CAAC;QACzB,UAAU,EAAE,MAAM,CAAC;QACnB,YAAY,EAAE,MAAM,CAAC;QACrB,OAAO,EAAE,MAAM,CAAC;QAChB,cAAc,EAAE,MAAM,CAAC;QACvB,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,GAAG,YAAY,GAAG,IAAI;IA4EvB;;;;;OAKG;IACH,mBAAmB,CAAC,MAAM,EAAE;QAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,EAAE,MAAM,CAAC;QAClB,KAAK,EAAE,MAAM,CAAC;QACd,YAAY,EAAE,MAAM,CAAC;QACrB,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;KAClB,GAAG,IAAI;IAiCR;;;;;OAKG;IACH,gBAAgB,CAAC,MAAM,EAAE;QACvB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,EAAE,MAAM,CAAC;QAClB,KAAK,EAAE,MAAM,CAAC;QACd,YAAY,EAAE,MAAM,CAAC;QACrB,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;KACjB,GAAG,IAAI;IAgCR;;;;OAIG;IACH,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,UAAU;IAwCrC;;;;;OAKG;IACH,SAAS,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM;IAoChC;;;;OAIG;IACH,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG;QACzB,OAAO,EAAE,UAAU,CAAC;QACpB,KAAK,EAAE,YAAY,EAAE,CAAC;QACtB,MAAM,EAAE,QAAQ,EAAE,CAAC;KACpB;IAiBD;;OAEG;IACH,WAAW,IAAI;QACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QAC/B,MAAM,EAAE,QAAQ,EAAE,CAAC;QACnB,KAAK,EAAE,YAAY,EAAE,CAAC;KACvB;IAQD;;;OAGG;IACH,SAAS,CAAC,KAAK,EAAE;QACf,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QAC/B,MAAM,EAAE,QAAQ,EAAE,CAAC;QACnB,KAAK,EAAE,YAAY,EAAE,CAAC;KACvB,GAAG,IAAI;IAQR;;;;;;;;OAQG;IACH,OAAO,CAAC,iBAAiB;CAiB1B"}
@@ -0,0 +1,307 @@
1
+ /**
2
+ * Tax / P&L Engine — Core Engine
3
+ *
4
+ * ⚠️ DISCLAIMER: This module is for informational purposes only.
5
+ * Tax laws are complex, jurisdiction-specific, and change frequently.
6
+ * Always consult a qualified tax professional before filing. This is NOT tax advice.
7
+ *
8
+ * Key rules modeled (US-centric):
9
+ * - Every token swap = taxable disposal of fromToken + acquisition of toToken
10
+ * - Short-term gain: held < 365 days → taxed as ordinary income
11
+ * - Long-term gain: held ≥ 365 days → preferential capital gains rates
12
+ * - Yield received = ordinary income (full rate)
13
+ * - Gas fees = reduce net gain (treated as selling expense)
14
+ * - Wash sale rule: NOT applicable to crypto as of 2024 (no legislation yet)
15
+ * - Fiat on-ramp = establishes cost basis, NOT a taxable event
16
+ * - Bridge (cross-chain move) = generally NOT taxable (same owner, same asset)
17
+ */
18
+ import { LotManager } from './lots.js';
19
+ /** One year in milliseconds */
20
+ const ONE_YEAR_MS = 365 * 24 * 60 * 60 * 1000;
21
+ export class TaxEngine {
22
+ constructor(config = {}) {
23
+ this.events = [];
24
+ this.gains = [];
25
+ this.config = {
26
+ method: 'fifo',
27
+ taxYear: new Date().getFullYear(),
28
+ jurisdiction: 'US',
29
+ trackGasFees: true,
30
+ ...config,
31
+ };
32
+ this.lotManager = new LotManager();
33
+ }
34
+ /**
35
+ * Record a swap — the most common taxable event in DeFi.
36
+ *
37
+ * A swap creates two sub-events:
38
+ * 1. Disposal of fromToken (taxable — creates realized gain/loss)
39
+ * 2. Acquisition of toToken (establishes new cost basis)
40
+ *
41
+ * Returns the RealizedGain record, or null if no lots were tracked
42
+ * (zero cost basis scenario — gain equals full proceeds).
43
+ */
44
+ recordSwap(params) {
45
+ // 1. Dispose of fromToken lots using the configured cost basis method
46
+ const disposals = this.lotManager.disposeLots({
47
+ token: params.fromToken,
48
+ chain: params.chain,
49
+ amount: params.fromAmount,
50
+ method: this.config.method,
51
+ });
52
+ const totalCostBasis = disposals.reduce((sum, d) => sum + d.costBasisUsed, 0);
53
+ // 2. Calculate realized gain/loss
54
+ // gain = proceeds − cost basis − gas fees paid
55
+ const gasPaidUsd = this.config.trackGasFees ? (params.gasPaidUsd ?? 0) : 0;
56
+ const realizedGainUsd = params.fromValueUsd - totalCostBasis - gasPaidUsd;
57
+ // 3. Determine hold duration → short-term vs long-term
58
+ const gainType = this.determineGainType(disposals, params.timestamp);
59
+ // 4. Build the RealizedGain record
60
+ const gain = {
61
+ eventId: `swap-${params.txHash}`,
62
+ txHash: params.txHash,
63
+ timestamp: params.timestamp,
64
+ chain: params.chain,
65
+ token: params.fromToken,
66
+ amountDisposed: params.fromAmount,
67
+ proceedsUsd: params.fromValueUsd,
68
+ costBasisUsd: totalCostBasis,
69
+ realizedGainUsd,
70
+ gainType,
71
+ lotsUsed: disposals.map(d => ({
72
+ lotId: d.lotId,
73
+ amountUsed: d.amountUsed,
74
+ costBasisUsed: d.costBasisUsed,
75
+ })),
76
+ };
77
+ this.gains.push(gain);
78
+ // 5. Add new lot for toToken — cost basis = fair market value at acquisition
79
+ this.lotManager.addLot({
80
+ id: `lot-${params.txHash}-${params.toToken}`,
81
+ token: params.toToken,
82
+ tokenAddress: params.toTokenAddress,
83
+ chain: params.chain,
84
+ amount: params.toAmount,
85
+ costBasisUsd: params.toValueUsd,
86
+ costBasisPerUnit: Number(params.toAmount) > 0
87
+ ? params.toValueUsd / Number(params.toAmount)
88
+ : 0,
89
+ acquiredAt: params.timestamp,
90
+ acquiredTxHash: params.txHash,
91
+ acquiredFrom: 'swap',
92
+ });
93
+ // 6. Record the TaxEvent
94
+ this.events.push({
95
+ id: `event-${params.txHash}`,
96
+ type: 'swap',
97
+ timestamp: params.timestamp,
98
+ txHash: params.txHash,
99
+ chain: params.chain,
100
+ disposedToken: params.fromToken,
101
+ disposedAmount: params.fromAmount,
102
+ disposedValueUsd: params.fromValueUsd,
103
+ acquiredToken: params.toToken,
104
+ acquiredAmount: params.toAmount,
105
+ acquiredValueUsd: params.toValueUsd,
106
+ gasPaidUsd,
107
+ });
108
+ // Return null if no lots were tracked (pre-existing wallet, zero cost basis)
109
+ return disposals.length > 0 ? gain : null;
110
+ }
111
+ /**
112
+ * Record yield received from a DeFi protocol (taxable as ordinary income).
113
+ *
114
+ * Yield is treated as income at the fair market value when received.
115
+ * The cost basis of the new lot = market value at receipt.
116
+ */
117
+ recordYieldReceived(params) {
118
+ const lotId = `lot-yield-${params.txHash ?? params.timestamp}-${params.token}`;
119
+ // Add a lot — cost basis = FMV at receipt (income already recognized)
120
+ this.lotManager.addLot({
121
+ id: lotId,
122
+ token: params.token,
123
+ tokenAddress: params.tokenAddress,
124
+ chain: params.chain,
125
+ amount: params.amount,
126
+ costBasisUsd: params.valueUsd,
127
+ costBasisPerUnit: Number(params.amount) > 0
128
+ ? params.valueUsd / Number(params.amount)
129
+ : 0,
130
+ acquiredAt: params.timestamp,
131
+ acquiredTxHash: params.txHash,
132
+ acquiredFrom: 'yield-received',
133
+ });
134
+ // Record the event (acquiredValueUsd = income amount for getSummary)
135
+ this.events.push({
136
+ id: `event-yield-${params.txHash ?? params.timestamp}`,
137
+ type: 'yield-received',
138
+ timestamp: params.timestamp,
139
+ txHash: params.txHash,
140
+ chain: params.chain,
141
+ acquiredToken: params.token,
142
+ acquiredAmount: params.amount,
143
+ acquiredValueUsd: params.valueUsd,
144
+ notes: `Yield from ${params.protocol}`,
145
+ });
146
+ }
147
+ /**
148
+ * Record a fiat on-ramp (buying crypto with fiat currency).
149
+ *
150
+ * This is NOT a taxable event — it establishes the cost basis for future disposals.
151
+ * The cost basis = amount paid in fiat (USD).
152
+ */
153
+ recordFiatOnRamp(params) {
154
+ const lotId = `lot-fiat-${params.txHash ?? params.timestamp}-${params.token}`;
155
+ this.lotManager.addLot({
156
+ id: lotId,
157
+ token: params.token,
158
+ tokenAddress: params.tokenAddress,
159
+ chain: params.chain,
160
+ amount: params.amount,
161
+ costBasisUsd: params.paidUsd,
162
+ costBasisPerUnit: Number(params.amount) > 0
163
+ ? params.paidUsd / Number(params.amount)
164
+ : 0,
165
+ acquiredAt: params.timestamp,
166
+ acquiredTxHash: params.txHash,
167
+ acquiredFrom: 'fiat-on-ramp',
168
+ });
169
+ // Record event — not taxable, no gain created
170
+ this.events.push({
171
+ id: `event-fiat-${params.txHash ?? params.timestamp}`,
172
+ type: 'fiat-on-ramp',
173
+ timestamp: params.timestamp,
174
+ txHash: params.txHash,
175
+ chain: params.chain,
176
+ acquiredToken: params.token,
177
+ acquiredAmount: params.amount,
178
+ acquiredValueUsd: params.paidUsd,
179
+ notes: 'Fiat on-ramp — establishes cost basis, not taxable',
180
+ });
181
+ }
182
+ /**
183
+ * Generate an annual tax summary.
184
+ *
185
+ * ⚠️ For informational purposes only. Consult a tax professional.
186
+ */
187
+ getSummary(year) {
188
+ const targetYear = year ?? this.config.taxYear;
189
+ const yearStart = new Date(targetYear, 0, 1).getTime();
190
+ const yearEnd = new Date(targetYear + 1, 0, 1).getTime();
191
+ const yearGains = this.gains.filter(g => g.timestamp >= yearStart && g.timestamp < yearEnd);
192
+ const yearEvents = this.events.filter(e => e.timestamp >= yearStart && e.timestamp < yearEnd);
193
+ const shortTermGain = yearGains
194
+ .filter(g => g.gainType === 'short-term')
195
+ .reduce((sum, g) => sum + g.realizedGainUsd, 0);
196
+ const longTermGain = yearGains
197
+ .filter(g => g.gainType === 'long-term')
198
+ .reduce((sum, g) => sum + g.realizedGainUsd, 0);
199
+ const ordinaryIncome = yearEvents
200
+ .filter(e => e.type === 'yield-received')
201
+ .reduce((sum, e) => sum + (e.acquiredValueUsd ?? 0), 0);
202
+ const totalGasPaid = yearEvents
203
+ .reduce((sum, e) => sum + (e.gasPaidUsd ?? 0), 0);
204
+ return {
205
+ year: targetYear,
206
+ totalProceeds: yearGains.reduce((sum, g) => sum + g.proceedsUsd, 0),
207
+ totalCostBasis: yearGains.reduce((sum, g) => sum + g.costBasisUsd, 0),
208
+ shortTermGain,
209
+ longTermGain,
210
+ totalNetGain: shortTermGain + longTermGain,
211
+ ordinaryIncome,
212
+ totalGasPaid,
213
+ taxableEventCount: yearGains.length,
214
+ };
215
+ }
216
+ /**
217
+ * Export to CSV format compatible with TurboTax, Koinly, CoinTracker, and similar tools.
218
+ *
219
+ * ⚠️ For informational purposes only. Consult a tax professional.
220
+ * All USD values are formatted to 2 decimal places to prevent CSV parsing issues.
221
+ */
222
+ exportCSV(year) {
223
+ const targetYear = year ?? this.config.taxYear;
224
+ const yearStart = new Date(targetYear, 0, 1).getTime();
225
+ const yearEnd = new Date(targetYear + 1, 0, 1).getTime();
226
+ const yearGains = this.gains.filter(g => g.timestamp >= yearStart && g.timestamp < yearEnd);
227
+ const headers = [
228
+ 'Date',
229
+ 'Type',
230
+ 'Asset',
231
+ 'Proceeds (USD)',
232
+ 'Cost Basis (USD)',
233
+ 'Gain/Loss (USD)',
234
+ 'Gain Type',
235
+ 'Tx Hash',
236
+ 'Chain',
237
+ ];
238
+ const rows = yearGains.map(g => [
239
+ new Date(g.timestamp).toISOString().split('T')[0],
240
+ 'Sale/Swap',
241
+ g.token,
242
+ g.proceedsUsd.toFixed(2),
243
+ g.costBasisUsd.toFixed(2),
244
+ g.realizedGainUsd.toFixed(2),
245
+ g.gainType === 'long-term' ? 'Long-term' : 'Short-term',
246
+ g.txHash ?? '',
247
+ g.chain,
248
+ ]);
249
+ return [headers, ...rows].map(row => row.join(',')).join('\n');
250
+ }
251
+ /**
252
+ * Export to JSON (for programmatic use, custom reporting, CPA handoff).
253
+ *
254
+ * ⚠️ For informational purposes only. Consult a tax professional.
255
+ */
256
+ exportJSON(year) {
257
+ const summary = this.getSummary(year);
258
+ const targetYear = year ?? this.config.taxYear;
259
+ const yearStart = new Date(targetYear, 0, 1).getTime();
260
+ const yearEnd = new Date(targetYear + 1, 0, 1).getTime();
261
+ return {
262
+ summary,
263
+ gains: this.gains.filter(g => g.timestamp >= yearStart && g.timestamp < yearEnd),
264
+ events: this.events.filter(e => e.timestamp >= yearStart && e.timestamp < yearEnd),
265
+ };
266
+ }
267
+ /**
268
+ * Export full engine state for persistence across sessions.
269
+ */
270
+ exportState() {
271
+ return {
272
+ lots: this.lotManager.exportState(),
273
+ events: this.events,
274
+ gains: this.gains,
275
+ };
276
+ }
277
+ /**
278
+ * Load state from a previous session (e.g., from database or JSON file).
279
+ * After loading, new swaps will correctly build on existing lot inventory.
280
+ */
281
+ loadState(state) {
282
+ this.lotManager.loadState(state.lots);
283
+ this.events = state.events;
284
+ this.gains = state.gains;
285
+ }
286
+ // ─── Private Helpers ───
287
+ /**
288
+ * Determine if a disposal is short-term or long-term.
289
+ *
290
+ * Uses the acquisition timestamp of the earliest lot consumed (conservative
291
+ * for FIFO; oldest lot determines the holding period of the bulk of the disposal).
292
+ *
293
+ * Rule: held ≥ 365 days = long-term; held < 365 days = short-term.
294
+ * If no lots were tracked, defaults to short-term (conservative).
295
+ */
296
+ determineGainType(disposals, disposalTimestamp) {
297
+ if (disposals.length === 0)
298
+ return 'short-term';
299
+ // Find the earliest acquisition date among all lots used in this disposal
300
+ const earliestAcquiredAt = disposals.reduce((earliest, d) => Math.min(earliest, d.acquiredAt), Infinity);
301
+ if (earliestAcquiredAt === Infinity)
302
+ return 'short-term';
303
+ const holdDurationMs = disposalTimestamp - earliestAcquiredAt;
304
+ return holdDurationMs >= ONE_YEAR_MS ? 'long-term' : 'short-term';
305
+ }
306
+ }
307
+ //# sourceMappingURL=engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/tax/engine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Tax / P&L Engine — Barrel Export
3
+ *
4
+ * ⚠️ DISCLAIMER: For informational purposes only. Consult a tax professional.
5
+ */
6
+ export type { TaxEventType, CostBasisMethod, GainType, TaxLot, TaxEvent, RealizedGain, TaxSummary, TaxExportRow, TaxEngineConfig, } from './types.js';
7
+ export { LotManager } from './lots.js';
8
+ export { TaxEngine } from './engine.js';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tax/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,YAAY,EACV,YAAY,EACZ,eAAe,EACf,QAAQ,EACR,MAAM,EACN,QAAQ,EACR,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,eAAe,GAChB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * @premium This module is part of AgentWallet Premium.
3
+ * Contact: https://github.com/up2itnow/AgentNexus2 for access.
4
+ */
5
+ /**
6
+ * Tax / P&L Engine — Barrel Export
7
+ *
8
+ * ⚠️ DISCLAIMER: For informational purposes only. Consult a tax professional.
9
+ */
10
+ export { LotManager } from './lots.js';
11
+ export { TaxEngine } from './engine.js';
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tax/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAcH,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC"}