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,73 @@
1
+ /**
2
+ * Bankr Backend - Transaction Execution via Bankr API
3
+ *
4
+ * Submits raw transactions to Bankr's Agent API using the
5
+ * arbitrary transaction format documented at:
6
+ * https://github.com/BankrBot/openclaw-skills/blob/main/bankr/references/arbitrary-transaction.md
7
+ *
8
+ * Supported chains: Ethereum (1), Polygon (137), Base (8453)
9
+ */
10
+ import type { Address, Hash } from 'viem';
11
+ import type { IWalletBackend, RawTransaction } from '../types';
12
+ /**
13
+ * Bankr backend configuration
14
+ */
15
+ export interface BankrBackendConfig {
16
+ nickname?: string;
17
+ apiKey: string;
18
+ apiUrl?: string;
19
+ }
20
+ /**
21
+ * Bankr wallet backend
22
+ * Submits raw transactions via Bankr Agent API
23
+ */
24
+ export declare class BankrBackend implements IWalletBackend {
25
+ readonly type: "bankr";
26
+ readonly nickname: string;
27
+ readonly supportedChains: readonly ["ethereum", "polygon", "base"];
28
+ private readonly apiUrl;
29
+ private readonly apiKey;
30
+ private cachedAddress;
31
+ private cachedSolanaAddress;
32
+ private readonly pollIntervalMs;
33
+ private readonly maxPollAttempts;
34
+ constructor(config: BankrBackendConfig);
35
+ /**
36
+ * Load cached address from disk
37
+ */
38
+ private loadCachedAddress;
39
+ /**
40
+ * Save address to disk cache
41
+ */
42
+ private saveCachedAddress;
43
+ getAddress(): Promise<Address>;
44
+ /**
45
+ * Get the Solana wallet address from Bankr
46
+ */
47
+ getSolanaAddress(): Promise<string | null>;
48
+ supportsChain(chainId: string): boolean;
49
+ isReady(): Promise<boolean>;
50
+ /**
51
+ * Send raw transaction via Bankr
52
+ * Uses the arbitrary transaction format
53
+ */
54
+ sendRawTransaction(tx: RawTransaction): Promise<Hash>;
55
+ /**
56
+ * Submit prompt and wait for text response
57
+ */
58
+ private submitAndWait;
59
+ /**
60
+ * Submit prompt and wait for job completion
61
+ */
62
+ private submitAndWaitForJob;
63
+ /**
64
+ * Extract transaction hash from Bankr response
65
+ */
66
+ private extractTransactionHash;
67
+ private sleep;
68
+ }
69
+ /**
70
+ * Create a Bankr backend from API key
71
+ */
72
+ export declare function createBankrBackend(config: BankrBackendConfig): BankrBackend;
73
+ //# sourceMappingURL=BankrBackend.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BankrBackend.d.ts","sourceRoot":"","sources":["../../../src/wallet/backends/BankrBackend.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC1C,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AA0C/D;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,qBAAa,YAAa,YAAW,cAAc;IACjD,QAAQ,CAAC,IAAI,EAAG,OAAO,CAAU;IACjC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,eAAe,2CAA0B;IAElD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,aAAa,CAAwB;IAC7C,OAAO,CAAC,mBAAmB,CAAuB;IAGlD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAQ;IACvC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAO;gBAE3B,MAAM,EAAE,kBAAkB;IAetC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAczB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAanB,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC;IA8BpC;;OAEG;IACG,gBAAgB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAoDhD,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAKjC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;IAoBjC;;;OAGG;IACG,kBAAkB,CAAC,EAAE,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAmC3D;;OAEG;YACW,aAAa;IAK3B;;OAEG;YACW,mBAAmB;IAqEjC;;OAEG;IACH,OAAO,CAAC,sBAAsB;IA4B9B,OAAO,CAAC,KAAK;CAGd;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,kBAAkB,GAAG,YAAY,CAE3E"}
@@ -0,0 +1,315 @@
1
+ /**
2
+ * Bankr Backend - Transaction Execution via Bankr API
3
+ *
4
+ * Submits raw transactions to Bankr's Agent API using the
5
+ * arbitrary transaction format documented at:
6
+ * https://github.com/BankrBot/openclaw-skills/blob/main/bankr/references/arbitrary-transaction.md
7
+ *
8
+ * Supported chains: Ethereum (1), Polygon (137), Base (8453)
9
+ */
10
+ import { BANKR_SUPPORTED_CHAINS, isBankrSupportedChain } from '../types';
11
+ import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'fs';
12
+ import { join } from 'path';
13
+ import { homedir } from 'os';
14
+ /**
15
+ * Disk cache path for bankr address
16
+ */
17
+ const BANKR_CACHE_DIR = join(homedir(), '.openclaw', 'cache');
18
+ const getBankrCachePath = (nickname) => join(BANKR_CACHE_DIR, `bankr-${nickname}-address.json`);
19
+ /**
20
+ * Bankr wallet backend
21
+ * Submits raw transactions via Bankr Agent API
22
+ */
23
+ export class BankrBackend {
24
+ type = 'bankr';
25
+ nickname;
26
+ supportedChains = BANKR_SUPPORTED_CHAINS;
27
+ apiUrl;
28
+ apiKey;
29
+ cachedAddress = null;
30
+ cachedSolanaAddress = null;
31
+ // Polling configuration
32
+ pollIntervalMs = 2000;
33
+ maxPollAttempts = 150; // 5 minutes max
34
+ constructor(config) {
35
+ this.nickname = config.nickname || 'bankr';
36
+ this.apiUrl = config.apiUrl || 'https://api.bankr.bot';
37
+ this.apiKey = config.apiKey;
38
+ // Try to load cached address from disk
39
+ this.loadCachedAddress();
40
+ console.log(`[BankrBackend] Initialized as "${this.nickname}"`);
41
+ console.log(`[BankrBackend] Supported chains: ${this.supportedChains.join(', ')}`);
42
+ if (this.cachedAddress) {
43
+ console.log(`[BankrBackend] Loaded cached address: ${this.cachedAddress}`);
44
+ }
45
+ }
46
+ /**
47
+ * Load cached address from disk
48
+ */
49
+ loadCachedAddress() {
50
+ const cachePath = getBankrCachePath(this.nickname);
51
+ if (existsSync(cachePath)) {
52
+ try {
53
+ const data = JSON.parse(readFileSync(cachePath, 'utf-8'));
54
+ if (data.address && data.address.match(/^0x[a-fA-F0-9]{40}$/)) {
55
+ this.cachedAddress = data.address;
56
+ }
57
+ }
58
+ catch (e) {
59
+ console.warn(`[BankrBackend] Failed to load cached address: ${e}`);
60
+ }
61
+ }
62
+ }
63
+ /**
64
+ * Save address to disk cache
65
+ */
66
+ saveCachedAddress(address) {
67
+ const cachePath = getBankrCachePath(this.nickname);
68
+ try {
69
+ if (!existsSync(BANKR_CACHE_DIR)) {
70
+ mkdirSync(BANKR_CACHE_DIR, { recursive: true });
71
+ }
72
+ writeFileSync(cachePath, JSON.stringify({ address, timestamp: Date.now() }));
73
+ console.log(`[BankrBackend] Cached address to ${cachePath}`);
74
+ }
75
+ catch (e) {
76
+ console.warn(`[BankrBackend] Failed to cache address: ${e}`);
77
+ }
78
+ }
79
+ async getAddress() {
80
+ if (this.cachedAddress)
81
+ return this.cachedAddress;
82
+ // Query Bankr for the wallet address
83
+ console.log('[BankrBackend] Fetching wallet address from Bankr...');
84
+ try {
85
+ const response = await this.submitAndWait('What is my EVM wallet address?');
86
+ // Extract address from response
87
+ const addressMatch = response.match(/0x[a-fA-F0-9]{40}/);
88
+ if (!addressMatch) {
89
+ console.warn('[BankrBackend] Could not parse address from response:', response.slice(0, 100));
90
+ throw new Error('[BankrBackend] Could not determine wallet address from Bankr');
91
+ }
92
+ this.cachedAddress = addressMatch[0];
93
+ // Save to disk for next time
94
+ this.saveCachedAddress(this.cachedAddress);
95
+ console.log(`[BankrBackend] Wallet address: ${this.cachedAddress}`);
96
+ return this.cachedAddress;
97
+ }
98
+ catch (error) {
99
+ console.error('[BankrBackend] Failed to get address:', error);
100
+ throw error;
101
+ }
102
+ }
103
+ /**
104
+ * Get the Solana wallet address from Bankr
105
+ */
106
+ async getSolanaAddress() {
107
+ if (this.cachedSolanaAddress)
108
+ return this.cachedSolanaAddress;
109
+ // Check for cached address on disk
110
+ const cachePath = `${process.env.HOME}/.openclaw/cache/bankr-${this.nickname}-solana-address.json`;
111
+ try {
112
+ const fs = await import('fs');
113
+ if (fs.existsSync(cachePath)) {
114
+ const cached = JSON.parse(fs.readFileSync(cachePath, 'utf8'));
115
+ if (cached.address && Date.now() - cached.timestamp < 86400000) {
116
+ this.cachedSolanaAddress = cached.address;
117
+ console.log(`[BankrBackend] Loaded cached Solana address: ${this.cachedSolanaAddress}`);
118
+ return this.cachedSolanaAddress;
119
+ }
120
+ }
121
+ }
122
+ catch (e) {
123
+ // Cache miss, continue to query
124
+ }
125
+ console.log('[BankrBackend] Fetching Solana wallet address from Bankr...');
126
+ try {
127
+ const response = await this.submitAndWait('What is my Solana wallet address?');
128
+ // Solana addresses are base58, typically 32-44 chars, no 0x prefix
129
+ const solanaMatch = response.match(/[1-9A-HJ-NP-Za-km-z]{32,44}/);
130
+ if (!solanaMatch) {
131
+ console.warn('[BankrBackend] Could not parse Solana address from response');
132
+ return null;
133
+ }
134
+ this.cachedSolanaAddress = solanaMatch[0];
135
+ console.log(`[BankrBackend] Solana address: ${this.cachedSolanaAddress}`);
136
+ // Cache to disk
137
+ try {
138
+ const fs = await import('fs');
139
+ const path = await import('path');
140
+ const cacheDir = path.dirname(cachePath);
141
+ if (!fs.existsSync(cacheDir))
142
+ fs.mkdirSync(cacheDir, { recursive: true });
143
+ fs.writeFileSync(cachePath, JSON.stringify({ address: this.cachedSolanaAddress, timestamp: Date.now() }));
144
+ }
145
+ catch (e) {
146
+ console.warn('[BankrBackend] Failed to cache Solana address:', e);
147
+ }
148
+ return this.cachedSolanaAddress;
149
+ }
150
+ catch (error) {
151
+ console.error('[BankrBackend] Failed to get Solana address:', error);
152
+ return null;
153
+ }
154
+ }
155
+ supportsChain(chainId) {
156
+ // Normalize chain ID to handle SODAX format (0x2105.base -> base)
157
+ return isBankrSupportedChain(chainId);
158
+ }
159
+ async isReady() {
160
+ if (!this.apiKey)
161
+ return false;
162
+ try {
163
+ // Test API connectivity
164
+ const response = await fetch(`${this.apiUrl}/agent/prompt`, {
165
+ method: 'POST',
166
+ headers: {
167
+ 'X-API-Key': this.apiKey,
168
+ 'Content-Type': 'application/json',
169
+ },
170
+ body: JSON.stringify({ prompt: 'ping' }),
171
+ });
172
+ return response.status !== 503 && response.status !== 502;
173
+ }
174
+ catch {
175
+ return false;
176
+ }
177
+ }
178
+ /**
179
+ * Send raw transaction via Bankr
180
+ * Uses the arbitrary transaction format
181
+ */
182
+ async sendRawTransaction(tx) {
183
+ console.log(`[BankrBackend] Sending raw transaction`);
184
+ console.log(`[BankrBackend] To: ${tx.to}`);
185
+ console.log(`[BankrBackend] Chain: ${tx.chainId}`);
186
+ console.log(`[BankrBackend] Value: ${tx.value}`);
187
+ console.log(`[BankrBackend] Data: ${tx.data.slice(0, 20)}...`);
188
+ // Format as documented in arbitrary-transaction.md
189
+ const txJson = JSON.stringify({
190
+ to: tx.to,
191
+ data: tx.data,
192
+ value: tx.value,
193
+ chainId: tx.chainId,
194
+ }, null, 2);
195
+ // Use the documented prompt format
196
+ const prompt = `Submit this transaction:
197
+ ${txJson}`;
198
+ console.log(`[BankrBackend] Submitting to Bankr API...`);
199
+ const result = await this.submitAndWaitForJob(prompt);
200
+ // Extract transaction hash from response
201
+ const txHash = this.extractTransactionHash(result);
202
+ if (!txHash) {
203
+ const errorMsg = result.error || result.response || 'Unknown error';
204
+ throw new Error(`[BankrBackend] Transaction failed: ${errorMsg}`);
205
+ }
206
+ console.log(`[BankrBackend] Transaction hash: ${txHash}`);
207
+ return txHash;
208
+ }
209
+ /**
210
+ * Submit prompt and wait for text response
211
+ */
212
+ async submitAndWait(prompt) {
213
+ const result = await this.submitAndWaitForJob(prompt);
214
+ return result.response || '';
215
+ }
216
+ /**
217
+ * Submit prompt and wait for job completion
218
+ */
219
+ async submitAndWaitForJob(prompt) {
220
+ // Submit job
221
+ const submitResponse = await fetch(`${this.apiUrl}/agent/prompt`, {
222
+ method: 'POST',
223
+ headers: {
224
+ 'X-API-Key': this.apiKey,
225
+ 'Content-Type': 'application/json',
226
+ },
227
+ body: JSON.stringify({ prompt }),
228
+ });
229
+ if (!submitResponse.ok) {
230
+ const error = await submitResponse.text();
231
+ throw new Error(`[BankrBackend] Failed to submit job: ${submitResponse.status} ${error}`);
232
+ }
233
+ const submitData = await submitResponse.json();
234
+ if (!submitData.success || !submitData.jobId) {
235
+ throw new Error(`[BankrBackend] Invalid job response: ${JSON.stringify(submitData)}`);
236
+ }
237
+ const jobId = submitData.jobId;
238
+ console.log(`[BankrBackend] Job submitted: ${jobId}`);
239
+ // Poll for completion
240
+ let lastStatus = '';
241
+ for (let attempt = 0; attempt < this.maxPollAttempts; attempt++) {
242
+ await this.sleep(this.pollIntervalMs);
243
+ const statusResponse = await fetch(`${this.apiUrl}/agent/job/${jobId}`, {
244
+ method: 'GET',
245
+ headers: { 'X-API-Key': this.apiKey },
246
+ });
247
+ if (!statusResponse.ok) {
248
+ const error = await statusResponse.text();
249
+ throw new Error(`[BankrBackend] Failed to get job status: ${statusResponse.status} ${error}`);
250
+ }
251
+ const result = await statusResponse.json();
252
+ // Log status changes
253
+ if (result.status !== lastStatus) {
254
+ console.log(`[BankrBackend] Job ${jobId}: ${result.status}`);
255
+ lastStatus = result.status;
256
+ }
257
+ // Log progress updates
258
+ if (result.statusUpdates && result.statusUpdates.length > 0) {
259
+ const lastUpdate = result.statusUpdates[result.statusUpdates.length - 1];
260
+ console.log(`[BankrBackend] Progress: ${lastUpdate.message}`);
261
+ }
262
+ // Check terminal states
263
+ switch (result.status) {
264
+ case 'completed':
265
+ return result;
266
+ case 'failed':
267
+ throw new Error(`[BankrBackend] Job failed: ${result.error || 'Unknown error'}`);
268
+ case 'cancelled':
269
+ throw new Error(`[BankrBackend] Job was cancelled`);
270
+ }
271
+ }
272
+ throw new Error(`[BankrBackend] Job ${jobId} timed out`);
273
+ }
274
+ /**
275
+ * Extract transaction hash from Bankr response
276
+ */
277
+ extractTransactionHash(result) {
278
+ // Check richData for transaction info
279
+ if (result.richData) {
280
+ for (const item of result.richData) {
281
+ if (item.transactionHash)
282
+ return item.transactionHash;
283
+ if (item.txHash)
284
+ return item.txHash;
285
+ if (item.hash)
286
+ return item.hash;
287
+ }
288
+ }
289
+ // Try to extract from response text
290
+ if (result.response) {
291
+ // Look for 0x + 64 hex chars
292
+ const hashMatch = result.response.match(/0x[a-fA-F0-9]{64}/);
293
+ if (hashMatch)
294
+ return hashMatch[0];
295
+ // Check for failure indicators
296
+ if (result.response.toLowerCase().includes('reverted') ||
297
+ result.response.toLowerCase().includes('failed') ||
298
+ result.response.toLowerCase().includes('insufficient')) {
299
+ console.error(`[BankrBackend] Transaction failed: ${result.response}`);
300
+ return null;
301
+ }
302
+ }
303
+ return null;
304
+ }
305
+ sleep(ms) {
306
+ return new Promise(resolve => setTimeout(resolve, ms));
307
+ }
308
+ }
309
+ /**
310
+ * Create a Bankr backend from API key
311
+ */
312
+ export function createBankrBackend(config) {
313
+ return new BankrBackend(config);
314
+ }
315
+ //# sourceMappingURL=BankrBackend.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BankrBackend.js","sourceRoot":"","sources":["../../../src/wallet/backends/BankrBackend.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,75 @@
1
+ /**
2
+ * Bankr Wallet Provider for SODAX SDK
3
+ *
4
+ * Implements IEvmWalletProvider interface to allow SODAX SDK
5
+ * to execute transactions through Bankr's API.
6
+ *
7
+ * Instead of signing locally, transactions are submitted to Bankr
8
+ * which signs and broadcasts them server-side.
9
+ *
10
+ * Supported chains: Ethereum (1), Polygon (137), Base (8453)
11
+ */
12
+ import type { Address, Hash, PublicClient } from 'viem';
13
+ import type { IEvmWalletProvider, EvmRawTransaction, EvmRawTransactionReceipt } from '@sodax/types';
14
+ /**
15
+ * Configuration for BankrWalletProvider
16
+ */
17
+ export interface BankrWalletProviderConfig {
18
+ apiKey: string;
19
+ apiUrl?: string;
20
+ chainId: number;
21
+ rpcUrl?: string;
22
+ /** Pre-cached address (avoids initial API call) */
23
+ cachedAddress?: Address;
24
+ }
25
+ /**
26
+ * Bankr Wallet Provider
27
+ *
28
+ * Implements IEvmWalletProvider for use with SODAX SDK's SpokeProvider.
29
+ * Transactions are signed and broadcast via Bankr's Agent API.
30
+ */
31
+ export declare class BankrWalletProvider implements IEvmWalletProvider {
32
+ readonly publicClient: PublicClient;
33
+ private readonly apiUrl;
34
+ private readonly apiKey;
35
+ private readonly chainId;
36
+ private cachedAddress;
37
+ private readonly pollIntervalMs;
38
+ private readonly maxPollAttempts;
39
+ constructor(config: BankrWalletProviderConfig);
40
+ /**
41
+ * Get the Bankr wallet address
42
+ */
43
+ getWalletAddress(): Promise<Address>;
44
+ /**
45
+ * Send a transaction via Bankr
46
+ *
47
+ * This is the key method - it receives raw transaction data from SODAX SDK
48
+ * and submits it to Bankr for signing and broadcasting.
49
+ */
50
+ sendTransaction(evmRawTx: EvmRawTransaction): Promise<Hash>;
51
+ /**
52
+ * Wait for transaction receipt
53
+ *
54
+ * Uses the public client to query the blockchain directly.
55
+ */
56
+ waitForTransactionReceipt(txHash: Hash): Promise<EvmRawTransactionReceipt>;
57
+ /**
58
+ * Submit prompt and wait for text response
59
+ */
60
+ private submitAndWait;
61
+ /**
62
+ * Submit prompt and wait for job completion
63
+ */
64
+ private submitAndWaitForJob;
65
+ /**
66
+ * Extract transaction hash from Bankr response
67
+ */
68
+ private extractTransactionHash;
69
+ private sleep;
70
+ }
71
+ /**
72
+ * Create a BankrWalletProvider
73
+ */
74
+ export declare function createBankrWalletProvider(config: BankrWalletProviderConfig): BankrWalletProvider;
75
+ //# sourceMappingURL=BankrWalletProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BankrWalletProvider.d.ts","sourceRoot":"","sources":["../../../src/wallet/backends/BankrWalletProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,MAAM,CAAC;AAGxD,OAAO,KAAK,EACV,kBAAkB,EAClB,iBAAiB,EACjB,wBAAwB,EACzB,MAAM,cAAc,CAAC;AAuCtB;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mDAAmD;IACnD,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED;;;;;GAKG;AACH,qBAAa,mBAAoB,YAAW,kBAAkB;IAC5D,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IAEpC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,aAAa,CAAiB;IAGtC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAQ;IACvC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAO;gBAE3B,MAAM,EAAE,yBAAyB;IAwB7C;;OAEG;IACG,gBAAgB,IAAI,OAAO,CAAC,OAAO,CAAC;IAwB1C;;;;;OAKG;IACG,eAAe,CAAC,QAAQ,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAkCjE;;;;OAIG;IACG,yBAAyB,CAAC,MAAM,EAAE,IAAI,GAAG,OAAO,CAAC,wBAAwB,CAAC;IAqChF;;OAEG;YACW,aAAa;IAK3B;;OAEG;YACW,mBAAmB;IA+DjC;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAoB9B,OAAO,CAAC,KAAK;CAGd;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,yBAAyB,GAAG,mBAAmB,CAEhG"}