amped-defi 1.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 (189) hide show
  1. package/README.md +757 -0
  2. package/dist/__mocks__/@sodax/sdk.d.ts +24 -0
  3. package/dist/__mocks__/@sodax/sdk.d.ts.map +1 -0
  4. package/dist/__mocks__/@sodax/sdk.js +24 -0
  5. package/dist/__mocks__/@sodax/sdk.js.map +1 -0
  6. package/dist/__tests__/setup.d.ts +4 -0
  7. package/dist/__tests__/setup.d.ts.map +1 -0
  8. package/dist/__tests__/setup.js +32 -0
  9. package/dist/__tests__/setup.js.map +1 -0
  10. package/dist/index.d.ts +66 -0
  11. package/dist/index.d.ts.map +1 -0
  12. package/dist/index.js +281 -0
  13. package/dist/index.js.map +1 -0
  14. package/dist/policy/policyEngine.d.ts +119 -0
  15. package/dist/policy/policyEngine.d.ts.map +1 -0
  16. package/dist/policy/policyEngine.js +322 -0
  17. package/dist/policy/policyEngine.js.map +1 -0
  18. package/dist/providers/spokeProviderFactory.d.ts +38 -0
  19. package/dist/providers/spokeProviderFactory.d.ts.map +1 -0
  20. package/dist/providers/spokeProviderFactory.js +212 -0
  21. package/dist/providers/spokeProviderFactory.js.map +1 -0
  22. package/dist/sodax/client.d.ts +34 -0
  23. package/dist/sodax/client.d.ts.map +1 -0
  24. package/dist/sodax/client.js +99 -0
  25. package/dist/sodax/client.js.map +1 -0
  26. package/dist/tools/bridge.d.ts +105 -0
  27. package/dist/tools/bridge.d.ts.map +1 -0
  28. package/dist/tools/bridge.js +334 -0
  29. package/dist/tools/bridge.js.map +1 -0
  30. package/dist/tools/discovery.d.ts +141 -0
  31. package/dist/tools/discovery.d.ts.map +1 -0
  32. package/dist/tools/discovery.js +777 -0
  33. package/dist/tools/discovery.js.map +1 -0
  34. package/dist/tools/moneyMarket.d.ts +227 -0
  35. package/dist/tools/moneyMarket.d.ts.map +1 -0
  36. package/dist/tools/moneyMarket.js +867 -0
  37. package/dist/tools/moneyMarket.js.map +1 -0
  38. package/dist/tools/portfolio.d.ts +43 -0
  39. package/dist/tools/portfolio.d.ts.map +1 -0
  40. package/dist/tools/portfolio.js +538 -0
  41. package/dist/tools/portfolio.js.map +1 -0
  42. package/dist/tools/swap.d.ts +71 -0
  43. package/dist/tools/swap.d.ts.map +1 -0
  44. package/dist/tools/swap.js +762 -0
  45. package/dist/tools/swap.js.map +1 -0
  46. package/dist/tools/walletManagement.d.ts +80 -0
  47. package/dist/tools/walletManagement.d.ts.map +1 -0
  48. package/dist/tools/walletManagement.js +289 -0
  49. package/dist/tools/walletManagement.js.map +1 -0
  50. package/dist/types.d.ts +205 -0
  51. package/dist/types.d.ts.map +1 -0
  52. package/dist/types.js +5 -0
  53. package/dist/types.js.map +1 -0
  54. package/dist/utils/errorUtils.d.ts +2 -0
  55. package/dist/utils/errorUtils.d.ts.map +1 -0
  56. package/dist/utils/errorUtils.js +19 -0
  57. package/dist/utils/errorUtils.js.map +1 -0
  58. package/dist/utils/errors.d.ts +144 -0
  59. package/dist/utils/errors.d.ts.map +1 -0
  60. package/dist/utils/errors.js +310 -0
  61. package/dist/utils/errors.js.map +1 -0
  62. package/dist/utils/positionAggregator.d.ts +122 -0
  63. package/dist/utils/positionAggregator.d.ts.map +1 -0
  64. package/dist/utils/positionAggregator.js +377 -0
  65. package/dist/utils/positionAggregator.js.map +1 -0
  66. package/dist/utils/priceService.d.ts +45 -0
  67. package/dist/utils/priceService.d.ts.map +1 -0
  68. package/dist/utils/priceService.js +108 -0
  69. package/dist/utils/priceService.js.map +1 -0
  70. package/dist/utils/sodaxApi.d.ts +92 -0
  71. package/dist/utils/sodaxApi.d.ts.map +1 -0
  72. package/dist/utils/sodaxApi.js +143 -0
  73. package/dist/utils/sodaxApi.js.map +1 -0
  74. package/dist/utils/tokenResolver.d.ts +54 -0
  75. package/dist/utils/tokenResolver.d.ts.map +1 -0
  76. package/dist/utils/tokenResolver.js +252 -0
  77. package/dist/utils/tokenResolver.js.map +1 -0
  78. package/dist/wallet/backendConfig.d.ts +37 -0
  79. package/dist/wallet/backendConfig.d.ts.map +1 -0
  80. package/dist/wallet/backendConfig.js +125 -0
  81. package/dist/wallet/backendConfig.js.map +1 -0
  82. package/dist/wallet/backends/BankrBackend.d.ts +73 -0
  83. package/dist/wallet/backends/BankrBackend.d.ts.map +1 -0
  84. package/dist/wallet/backends/BankrBackend.js +315 -0
  85. package/dist/wallet/backends/BankrBackend.js.map +1 -0
  86. package/dist/wallet/backends/BankrWalletProvider.d.ts +75 -0
  87. package/dist/wallet/backends/BankrWalletProvider.d.ts.map +1 -0
  88. package/dist/wallet/backends/BankrWalletProvider.js +243 -0
  89. package/dist/wallet/backends/BankrWalletProvider.js.map +1 -0
  90. package/dist/wallet/backends/EnvBackend.d.ts +50 -0
  91. package/dist/wallet/backends/EnvBackend.d.ts.map +1 -0
  92. package/dist/wallet/backends/EnvBackend.js +114 -0
  93. package/dist/wallet/backends/EnvBackend.js.map +1 -0
  94. package/dist/wallet/backends/EvmWalletSkillBackend.d.ts +40 -0
  95. package/dist/wallet/backends/EvmWalletSkillBackend.d.ts.map +1 -0
  96. package/dist/wallet/backends/EvmWalletSkillBackend.js +81 -0
  97. package/dist/wallet/backends/EvmWalletSkillBackend.js.map +1 -0
  98. package/dist/wallet/backends/index.d.ts +10 -0
  99. package/dist/wallet/backends/index.d.ts.map +1 -0
  100. package/dist/wallet/backends/index.js +10 -0
  101. package/dist/wallet/backends/index.js.map +1 -0
  102. package/dist/wallet/index.d.ts +9 -0
  103. package/dist/wallet/index.d.ts.map +1 -0
  104. package/dist/wallet/index.js +12 -0
  105. package/dist/wallet/index.js.map +1 -0
  106. package/dist/wallet/providers/AmpedWalletProvider.d.ts +107 -0
  107. package/dist/wallet/providers/AmpedWalletProvider.d.ts.map +1 -0
  108. package/dist/wallet/providers/AmpedWalletProvider.js +208 -0
  109. package/dist/wallet/providers/AmpedWalletProvider.js.map +1 -0
  110. package/dist/wallet/providers/BankrBackend.d.ts +105 -0
  111. package/dist/wallet/providers/BankrBackend.d.ts.map +1 -0
  112. package/dist/wallet/providers/BankrBackend.js +327 -0
  113. package/dist/wallet/providers/BankrBackend.js.map +1 -0
  114. package/dist/wallet/providers/LocalKeyBackend.d.ts +62 -0
  115. package/dist/wallet/providers/LocalKeyBackend.d.ts.map +1 -0
  116. package/dist/wallet/providers/LocalKeyBackend.js +152 -0
  117. package/dist/wallet/providers/LocalKeyBackend.js.map +1 -0
  118. package/dist/wallet/providers/chainConfig.d.ts +209 -0
  119. package/dist/wallet/providers/chainConfig.d.ts.map +1 -0
  120. package/dist/wallet/providers/chainConfig.js +175 -0
  121. package/dist/wallet/providers/chainConfig.js.map +1 -0
  122. package/dist/wallet/providers/index.d.ts +30 -0
  123. package/dist/wallet/providers/index.d.ts.map +1 -0
  124. package/dist/wallet/providers/index.js +32 -0
  125. package/dist/wallet/providers/index.js.map +1 -0
  126. package/dist/wallet/providers/types.d.ts +156 -0
  127. package/dist/wallet/providers/types.d.ts.map +1 -0
  128. package/dist/wallet/providers/types.js +11 -0
  129. package/dist/wallet/providers/types.js.map +1 -0
  130. package/dist/wallet/skillWalletAdapter.d.ts +96 -0
  131. package/dist/wallet/skillWalletAdapter.d.ts.map +1 -0
  132. package/dist/wallet/skillWalletAdapter.js +280 -0
  133. package/dist/wallet/skillWalletAdapter.js.map +1 -0
  134. package/dist/wallet/types.d.ts +134 -0
  135. package/dist/wallet/types.d.ts.map +1 -0
  136. package/dist/wallet/types.js +138 -0
  137. package/dist/wallet/types.js.map +1 -0
  138. package/dist/wallet/walletManager.d.ts +111 -0
  139. package/dist/wallet/walletManager.d.ts.map +1 -0
  140. package/dist/wallet/walletManager.js +476 -0
  141. package/dist/wallet/walletManager.js.map +1 -0
  142. package/dist/wallet/walletRegistry.d.ts +95 -0
  143. package/dist/wallet/walletRegistry.d.ts.map +1 -0
  144. package/dist/wallet/walletRegistry.js +184 -0
  145. package/dist/wallet/walletRegistry.js.map +1 -0
  146. package/index.js +2 -0
  147. package/openclaw.plugin.json +37 -0
  148. package/package.json +69 -0
  149. package/src/__mocks__/@sodax/sdk.ts +28 -0
  150. package/src/__tests__/errors.test.ts +238 -0
  151. package/src/__tests__/policyEngine.test.ts +354 -0
  152. package/src/__tests__/positionAggregator.test.ts +271 -0
  153. package/src/__tests__/setup.ts +35 -0
  154. package/src/__tests__/sodaxApi.test.ts +203 -0
  155. package/src/__tests__/walletRegistry.test.ts +155 -0
  156. package/src/index.ts +376 -0
  157. package/src/policy/policyEngine.ts +389 -0
  158. package/src/providers/spokeProviderFactory.ts +283 -0
  159. package/src/sodax/client.ts +113 -0
  160. package/src/tools/bridge.ts +425 -0
  161. package/src/tools/discovery.ts +989 -0
  162. package/src/tools/moneyMarket.ts +1265 -0
  163. package/src/tools/portfolio.ts +697 -0
  164. package/src/tools/swap.ts +926 -0
  165. package/src/tools/walletManagement.ts +359 -0
  166. package/src/types.ts +228 -0
  167. package/src/utils/errorUtils.ts +16 -0
  168. package/src/utils/errors.ts +396 -0
  169. package/src/utils/positionAggregator.ts +559 -0
  170. package/src/utils/priceService.ts +153 -0
  171. package/src/utils/sodaxApi.ts +261 -0
  172. package/src/utils/tokenResolver.ts +286 -0
  173. package/src/wallet/backendConfig.ts +151 -0
  174. package/src/wallet/backends/BankrBackend.ts +399 -0
  175. package/src/wallet/backends/BankrWalletProvider.ts +329 -0
  176. package/src/wallet/backends/EnvBackend.ts +149 -0
  177. package/src/wallet/backends/EvmWalletSkillBackend.ts +110 -0
  178. package/src/wallet/backends/index.ts +10 -0
  179. package/src/wallet/index.ts +14 -0
  180. package/src/wallet/providers/AmpedWalletProvider.ts +267 -0
  181. package/src/wallet/providers/BankrBackend.ts +407 -0
  182. package/src/wallet/providers/LocalKeyBackend.ts +184 -0
  183. package/src/wallet/providers/chainConfig.ts +194 -0
  184. package/src/wallet/providers/index.ts +62 -0
  185. package/src/wallet/providers/types.ts +186 -0
  186. package/src/wallet/skillWalletAdapter.ts +335 -0
  187. package/src/wallet/types.ts +248 -0
  188. package/src/wallet/walletManager.ts +561 -0
  189. package/src/wallet/walletRegistry.ts +216 -0
@@ -0,0 +1,107 @@
1
+ /**
2
+ * Amped Wallet Provider
3
+ *
4
+ * Custom wallet provider implementing IEvmWalletProvider from @sodax/types.
5
+ *
6
+ * This replaces wallet-sdk-core's EvmWalletProvider with a more flexible
7
+ * implementation that:
8
+ * 1. Supports all chains including LightLink and HyperEVM
9
+ * 2. Has pluggable backends (local keys, Bankr, etc.)
10
+ * 3. Provides a unified interface for the SODAX SDK
11
+ *
12
+ * Architecture:
13
+ * \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510
14
+ * \u2502 AmpedWalletProvider \u2502
15
+ * \u2502 (implements IEvmWalletProvider) \u2502
16
+ * \u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524
17
+ * \u2502 - SDK-compatible interface \u2502
18
+ * \u2502 - Chain resolution (all chains) \u2502
19
+ * \u2502 - Transaction formatting \u2502
20
+ * \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518
21
+ * \u2502
22
+ * \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510
23
+ * \u25bc \u25bc
24
+ * \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510
25
+ * \u2502 LocalKeyBack. \u2502 \u2502 BankrBackend \u2502
26
+ * \u2502 (evm-wallet) \u2502 \u2502 (API calls) \u2502
27
+ * \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518
28
+ */
29
+ import { createPublicClient, type Hash, type Address } from 'viem';
30
+ import type { EvmRawTransaction, EvmRawTransactionReceipt } from '@sodax/types';
31
+ import type { IWalletBackend, WalletBackendConfig, WalletBackendType, IAmpedWalletProvider, BankrBackendConfig } from './types';
32
+ /**
33
+ * Amped Wallet Provider
34
+ *
35
+ * A drop-in replacement for wallet-sdk-core's EvmWalletProvider
36
+ * that supports all SODAX chains including LightLink and HyperEVM.
37
+ */
38
+ export declare class AmpedWalletProvider implements IAmpedWalletProvider {
39
+ readonly publicClient: ReturnType<typeof createPublicClient>;
40
+ private readonly backend;
41
+ private readonly chainId;
42
+ private constructor();
43
+ /**
44
+ * Create an AmpedWalletProvider with a local key backend
45
+ *
46
+ * @param config - Configuration matching EvmWalletProvider's PrivateKeyEvmWalletConfig
47
+ * @returns AmpedWalletProvider instance
48
+ */
49
+ static fromPrivateKey(config: {
50
+ privateKey: `0x${string}`;
51
+ chainId: string | number;
52
+ rpcUrl?: string;
53
+ }): Promise<AmpedWalletProvider>;
54
+ /**
55
+ * Create an AmpedWalletProvider with a Bankr backend
56
+ *
57
+ * @param config - Bankr backend configuration
58
+ * @returns AmpedWalletProvider instance
59
+ */
60
+ static fromBankr(config: {
61
+ bankrApiUrl: string;
62
+ bankrApiKey: string;
63
+ userAddress: Address;
64
+ chainId: string | number;
65
+ rpcUrl?: string;
66
+ policy?: BankrBackendConfig['policy'];
67
+ }): Promise<AmpedWalletProvider>;
68
+ /**
69
+ * Create from generic backend configuration
70
+ */
71
+ static fromConfig(config: WalletBackendConfig): Promise<AmpedWalletProvider>;
72
+ /**
73
+ * Get the wallet address
74
+ */
75
+ getWalletAddress(): Promise<Address>;
76
+ /**
77
+ * Send a transaction
78
+ *
79
+ * Converts SDK's EvmRawTransaction format to internal format
80
+ * and delegates to the backend.
81
+ */
82
+ sendTransaction(evmRawTx: EvmRawTransaction): Promise<Hash>;
83
+ /**
84
+ * Wait for transaction receipt
85
+ *
86
+ * Converts internal receipt format to SDK's EvmRawTransactionReceipt format.
87
+ */
88
+ waitForTransactionReceipt(txHash: Hash): Promise<EvmRawTransactionReceipt>;
89
+ /**
90
+ * Get the underlying backend
91
+ */
92
+ getBackend(): IWalletBackend;
93
+ /**
94
+ * Get the backend type
95
+ */
96
+ getBackendType(): WalletBackendType;
97
+ /**
98
+ * Check if ready for transactions
99
+ */
100
+ isReady(): Promise<boolean>;
101
+ /**
102
+ * Get chain ID
103
+ */
104
+ getChainId(): number;
105
+ }
106
+ export type { IAmpedWalletProvider };
107
+ //# sourceMappingURL=AmpedWalletProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AmpedWalletProvider.d.ts","sourceRoot":"","sources":["../../../src/wallet/providers/AmpedWalletProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,EACL,kBAAkB,EAElB,KAAK,IAAI,EACT,KAAK,OAAO,EACb,MAAM,MAAM,CAAC;AACd,OAAO,KAAK,EAEV,iBAAiB,EACjB,wBAAwB,EACzB,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EACV,cAAc,EACd,mBAAmB,EACnB,iBAAiB,EACjB,oBAAoB,EAEpB,kBAAkB,EACnB,MAAM,SAAS,CAAC;AAKjB;;;;;GAKG;AACH,qBAAa,mBAAoB,YAAW,oBAAoB;IAC9D,QAAQ,CAAC,YAAY,EAAE,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC;IAE7D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiB;IACzC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IAEjC,OAAO;IASP;;;;;OAKG;WACU,cAAc,CAAC,MAAM,EAAE;QAClC,UAAU,EAAE,KAAK,MAAM,EAAE,CAAC;QAC1B,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;QACzB,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAmBhC;;;;;OAKG;WACU,SAAS,CAAC,MAAM,EAAE;QAC7B,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,EAAE,OAAO,CAAC;QACrB,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;QACzB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,kBAAkB,CAAC,QAAQ,CAAC,CAAC;KACvC,GAAG,OAAO,CAAC,mBAAmB,CAAC;IA0BhC;;OAEG;WACU,UAAU,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IA2BlF;;OAEG;IACG,gBAAgB,IAAI,OAAO,CAAC,OAAO,CAAC;IAI1C;;;;;OAKG;IACG,eAAe,CAAC,QAAQ,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAajE;;;;OAIG;IACG,yBAAyB,CAAC,MAAM,EAAE,IAAI,GAAG,OAAO,CAAC,wBAAwB,CAAC;IAkChF;;OAEG;IACH,UAAU,IAAI,cAAc;IAI5B;;OAEG;IACH,cAAc,IAAI,iBAAiB;IAInC;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;IAIjC;;OAEG;IACH,UAAU,IAAI,MAAM;CAGrB;AAGD,YAAY,EAAE,oBAAoB,EAAE,CAAC"}
@@ -0,0 +1,208 @@
1
+ /**
2
+ * Amped Wallet Provider
3
+ *
4
+ * Custom wallet provider implementing IEvmWalletProvider from @sodax/types.
5
+ *
6
+ * This replaces wallet-sdk-core's EvmWalletProvider with a more flexible
7
+ * implementation that:
8
+ * 1. Supports all chains including LightLink and HyperEVM
9
+ * 2. Has pluggable backends (local keys, Bankr, etc.)
10
+ * 3. Provides a unified interface for the SODAX SDK
11
+ *
12
+ * Architecture:
13
+ * \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510
14
+ * \u2502 AmpedWalletProvider \u2502
15
+ * \u2502 (implements IEvmWalletProvider) \u2502
16
+ * \u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524
17
+ * \u2502 - SDK-compatible interface \u2502
18
+ * \u2502 - Chain resolution (all chains) \u2502
19
+ * \u2502 - Transaction formatting \u2502
20
+ * \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518
21
+ * \u2502
22
+ * \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510
23
+ * \u25bc \u25bc
24
+ * \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510
25
+ * \u2502 LocalKeyBack. \u2502 \u2502 BankrBackend \u2502
26
+ * \u2502 (evm-wallet) \u2502 \u2502 (API calls) \u2502
27
+ * \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518
28
+ */
29
+ import { createPublicClient, http, } from 'viem';
30
+ import { createLocalKeyBackend } from './LocalKeyBackend';
31
+ import { createBankrBackend } from './BankrBackend';
32
+ import { getViemChain, getDefaultRpcUrl, resolveChainId } from './chainConfig';
33
+ /**
34
+ * Amped Wallet Provider
35
+ *
36
+ * A drop-in replacement for wallet-sdk-core's EvmWalletProvider
37
+ * that supports all SODAX chains including LightLink and HyperEVM.
38
+ */
39
+ export class AmpedWalletProvider {
40
+ publicClient;
41
+ backend;
42
+ chainId;
43
+ constructor(backend, publicClient) {
44
+ this.backend = backend;
45
+ this.publicClient = publicClient;
46
+ this.chainId = backend.getChainId();
47
+ console.log(`[AmpedWalletProvider] Initialized with ${backend.type} backend`);
48
+ console.log(`[AmpedWalletProvider] Chain ID: ${this.chainId}`);
49
+ }
50
+ /**
51
+ * Create an AmpedWalletProvider with a local key backend
52
+ *
53
+ * @param config - Configuration matching EvmWalletProvider's PrivateKeyEvmWalletConfig
54
+ * @returns AmpedWalletProvider instance
55
+ */
56
+ static async fromPrivateKey(config) {
57
+ const chainId = resolveChainId(config.chainId);
58
+ const rpcUrl = config.rpcUrl || getDefaultRpcUrl(chainId);
59
+ const chain = getViemChain(chainId);
60
+ // Create backend
61
+ const backend = await createLocalKeyBackend({
62
+ type: 'localKey',
63
+ privateKey: config.privateKey,
64
+ chainId: config.chainId,
65
+ rpcUrl,
66
+ });
67
+ // Use the backend's public client
68
+ const publicClient = backend.getPublicClient();
69
+ return new AmpedWalletProvider(backend, publicClient);
70
+ }
71
+ /**
72
+ * Create an AmpedWalletProvider with a Bankr backend
73
+ *
74
+ * @param config - Bankr backend configuration
75
+ * @returns AmpedWalletProvider instance
76
+ */
77
+ static async fromBankr(config) {
78
+ const chainId = resolveChainId(config.chainId);
79
+ const rpcUrl = config.rpcUrl || getDefaultRpcUrl(chainId);
80
+ const chain = getViemChain(chainId);
81
+ // Create backend
82
+ const backend = await createBankrBackend({
83
+ type: 'bankr',
84
+ bankrApiUrl: config.bankrApiUrl,
85
+ bankrApiKey: config.bankrApiKey,
86
+ userAddress: config.userAddress,
87
+ chainId: config.chainId,
88
+ rpcUrl,
89
+ policy: config.policy,
90
+ });
91
+ // Create public client (for read operations)
92
+ // Bankr backend doesn't have its own public client
93
+ const publicClient = createPublicClient({
94
+ chain,
95
+ transport: http(rpcUrl),
96
+ }); // Type cast needed due to viem's strict typing
97
+ return new AmpedWalletProvider(backend, publicClient);
98
+ }
99
+ /**
100
+ * Create from generic backend configuration
101
+ */
102
+ static async fromConfig(config) {
103
+ switch (config.type) {
104
+ case 'localKey':
105
+ return AmpedWalletProvider.fromPrivateKey({
106
+ privateKey: config.privateKey,
107
+ chainId: config.chainId,
108
+ rpcUrl: config.rpcUrl,
109
+ });
110
+ case 'bankr':
111
+ const bankrConfig = config;
112
+ return AmpedWalletProvider.fromBankr({
113
+ bankrApiUrl: bankrConfig.bankrApiUrl,
114
+ bankrApiKey: bankrConfig.bankrApiKey,
115
+ userAddress: bankrConfig.userAddress,
116
+ chainId: config.chainId,
117
+ rpcUrl: config.rpcUrl,
118
+ policy: bankrConfig.policy,
119
+ });
120
+ default:
121
+ throw new Error(`Unsupported backend type: ${config.type}`);
122
+ }
123
+ }
124
+ // ===== IEvmWalletProvider Implementation =====
125
+ /**
126
+ * Get the wallet address
127
+ */
128
+ async getWalletAddress() {
129
+ return this.backend.getAddress();
130
+ }
131
+ /**
132
+ * Send a transaction
133
+ *
134
+ * Converts SDK's EvmRawTransaction format to internal format
135
+ * and delegates to the backend.
136
+ */
137
+ async sendTransaction(evmRawTx) {
138
+ console.log(`[AmpedWalletProvider] sendTransaction`);
139
+ console.log(`[AmpedWalletProvider] From: ${evmRawTx.from}`);
140
+ console.log(`[AmpedWalletProvider] To: ${evmRawTx.to}`);
141
+ console.log(`[AmpedWalletProvider] Value: ${evmRawTx.value}`);
142
+ return this.backend.sendTransaction({
143
+ to: evmRawTx.to,
144
+ value: evmRawTx.value,
145
+ data: evmRawTx.data,
146
+ });
147
+ }
148
+ /**
149
+ * Wait for transaction receipt
150
+ *
151
+ * Converts internal receipt format to SDK's EvmRawTransactionReceipt format.
152
+ */
153
+ async waitForTransactionReceipt(txHash) {
154
+ console.log(`[AmpedWalletProvider] waitForTransactionReceipt: ${txHash}`);
155
+ const receipt = await this.backend.waitForTransaction(txHash);
156
+ // Convert to SDK format
157
+ return {
158
+ transactionHash: receipt.transactionHash,
159
+ transactionIndex: '0x0', // Not tracked in our simplified receipt
160
+ blockHash: receipt.blockHash,
161
+ blockNumber: `0x${receipt.blockNumber.toString(16)}`,
162
+ from: receipt.from,
163
+ to: receipt.to,
164
+ cumulativeGasUsed: '0x0', // Not tracked
165
+ gasUsed: `0x${receipt.gasUsed.toString(16)}`,
166
+ contractAddress: null, // Would need to check if this was a deployment
167
+ logs: receipt.logs.map(log => ({
168
+ address: log.address,
169
+ topics: log.topics,
170
+ data: log.data,
171
+ blockHash: receipt.blockHash,
172
+ blockNumber: `0x${receipt.blockNumber.toString(16)}`,
173
+ logIndex: '0x0',
174
+ transactionHash: receipt.transactionHash,
175
+ transactionIndex: '0x0',
176
+ removed: false,
177
+ })),
178
+ logsBloom: '0x',
179
+ status: receipt.status === 'success' ? '0x1' : '0x0',
180
+ };
181
+ }
182
+ // ===== IAmpedWalletProvider Extensions =====
183
+ /**
184
+ * Get the underlying backend
185
+ */
186
+ getBackend() {
187
+ return this.backend;
188
+ }
189
+ /**
190
+ * Get the backend type
191
+ */
192
+ getBackendType() {
193
+ return this.backend.type;
194
+ }
195
+ /**
196
+ * Check if ready for transactions
197
+ */
198
+ async isReady() {
199
+ return this.backend.isReady();
200
+ }
201
+ /**
202
+ * Get chain ID
203
+ */
204
+ getChainId() {
205
+ return this.chainId;
206
+ }
207
+ }
208
+ //# sourceMappingURL=AmpedWalletProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AmpedWalletProvider.js","sourceRoot":"","sources":["../../../src/wallet/providers/AmpedWalletProvider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,105 @@
1
+ /**
2
+ * Bankr Backend - Transaction Execution Layer
3
+ *
4
+ * CRITICAL: This backend is for EXECUTION ONLY, not routing.
5
+ *
6
+ * Architecture:
7
+ * SODAX SDK (routing) → BankrBackend (execution) → Blockchain
8
+ *
9
+ * What Bankr DOES:
10
+ * ✓ Signs the pre-computed transaction from SODAX
11
+ * ✓ Submits to blockchain via Bankr API
12
+ * ✓ Returns transaction hash
13
+ *
14
+ * What Bankr does NOT do:
15
+ * ✗ NO routing decisions
16
+ * ✗ NO DeFi protocol selection
17
+ * ✗ NO swap optimization
18
+ * ✗ NO interpretation of intent
19
+ *
20
+ * The SODAX SDK always handles routing logic. Bankr receives the exact
21
+ * transaction data (to, data, value, chainId) and submits it verbatim.
22
+ *
23
+ * @see SKILL.md "Transaction Execution Architecture" section
24
+ */
25
+ import type { Hash, Address } from 'viem';
26
+ import type { IWalletBackend, BankrBackendConfig, TransactionRequest, TransactionReceipt } from './types';
27
+ /**
28
+ * Bankr execution backend
29
+ *
30
+ * Delegates transaction execution to Bankr's Agent API.
31
+ * The agent never has direct access to private keys.
32
+ */
33
+ export declare class BankrBackend implements IWalletBackend {
34
+ readonly type: "bankr";
35
+ private readonly apiUrl;
36
+ private readonly apiKey;
37
+ private readonly userAddress;
38
+ private readonly chainId;
39
+ private readonly policy?;
40
+ private readonly pollIntervalMs;
41
+ private readonly maxPollAttempts;
42
+ constructor(config: BankrBackendConfig);
43
+ /**
44
+ * Get the wallet address (Bankr-provisioned)
45
+ */
46
+ getAddress(): Promise<Address>;
47
+ /**
48
+ * Send a transaction via Bankr Agent API
49
+ *
50
+ * Formats the transaction as a natural language prompt and submits
51
+ * to Bankr's async job system.
52
+ */
53
+ sendTransaction(tx: TransactionRequest): Promise<Hash>;
54
+ /**
55
+ * Wait for transaction confirmation
56
+ *
57
+ * Note: With Bankr, the transaction is already confirmed when we get
58
+ * the response. This method exists for interface compatibility but
59
+ * returns a minimal receipt.
60
+ */
61
+ waitForTransaction(txHash: Hash): Promise<TransactionReceipt>;
62
+ /**
63
+ * Check if backend is ready
64
+ *
65
+ * Verifies Bankr API connectivity with a simple balance query.
66
+ */
67
+ isReady(): Promise<boolean>;
68
+ /**
69
+ * Get the chain ID
70
+ */
71
+ getChainId(): number;
72
+ /**
73
+ * Submit a job to Bankr Agent API
74
+ */
75
+ private submitJob;
76
+ /**
77
+ * Poll for job completion
78
+ */
79
+ private pollJobUntilComplete;
80
+ /**
81
+ * Get job status from Bankr API
82
+ */
83
+ private getJobStatus;
84
+ /**
85
+ * Extract transaction hash from Bankr response
86
+ *
87
+ * The response may contain the tx hash in various formats:
88
+ * - In richData array
89
+ * - In the response text (e.g., "Transaction hash: 0x...")
90
+ */
91
+ private extractTransactionHash;
92
+ /**
93
+ * Validate transaction against policy
94
+ */
95
+ private validatePolicy;
96
+ /**
97
+ * Sleep helper
98
+ */
99
+ private sleep;
100
+ }
101
+ /**
102
+ * Create a BankrBackend from configuration
103
+ */
104
+ export declare function createBankrBackend(config: BankrBackendConfig): Promise<BankrBackend>;
105
+ //# sourceMappingURL=BankrBackend.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BankrBackend.d.ts","sourceRoot":"","sources":["../../../src/wallet/providers/BankrBackend.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC1C,OAAO,KAAK,EACV,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EACnB,MAAM,SAAS,CAAC;AAqDjB;;;;;GAKG;AACH,qBAAa,YAAa,YAAW,cAAc;IACjD,QAAQ,CAAC,IAAI,EAAG,OAAO,CAAU;IAEjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAU;IACtC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAA+B;IAGvD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAQ;IACvC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAO;gBAE3B,MAAM,EAAE,kBAAkB;IAYtC;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC;IAIpC;;;;;OAKG;IACG,eAAe,CAAC,EAAE,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IA0C5D;;;;;;OAMG;IACG,kBAAkB,CAAC,MAAM,EAAE,IAAI,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAiBnE;;;;OAIG;IACG,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;IAwBjC;;OAEG;IACH,UAAU,IAAI,MAAM;IAIpB;;OAEG;YACW,SAAS;IAwBvB;;OAEG;YACW,oBAAoB;IAwClC;;OAEG;YACW,YAAY;IAgB1B;;;;;;OAMG;IACH,OAAO,CAAC,sBAAsB;IAoC9B;;OAEG;YACW,cAAc;IAoB5B;;OAEG;IACH,OAAO,CAAC,KAAK;CAGd;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,YAAY,CAAC,CAU1F"}