@t2000/sdk 0.17.29 → 0.18.3

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 (259) hide show
  1. package/dist/adapters/index.d.cts +1 -1
  2. package/dist/adapters/index.d.ts +4 -10
  3. package/dist/adapters/index.js +2107 -15
  4. package/dist/adapters/index.js.map +1 -1
  5. package/dist/{index-DdtOBw42.d.ts → index-Co0lp99l.d.cts} +23 -1
  6. package/dist/{index-DdtOBw42.d.cts → index-Co0lp99l.d.ts} +23 -1
  7. package/dist/index.cjs +102 -1
  8. package/dist/index.cjs.map +1 -1
  9. package/dist/index.d.cts +8 -3
  10. package/dist/index.d.ts +654 -30
  11. package/dist/index.js +6154 -21
  12. package/dist/index.js.map +1 -1
  13. package/package.json +1 -1
  14. package/dist/adapters/cetus.d.ts +0 -29
  15. package/dist/adapters/cetus.d.ts.map +0 -1
  16. package/dist/adapters/cetus.js +0 -74
  17. package/dist/adapters/cetus.js.map +0 -1
  18. package/dist/adapters/cetus.test.d.ts +0 -2
  19. package/dist/adapters/cetus.test.d.ts.map +0 -1
  20. package/dist/adapters/cetus.test.js +0 -57
  21. package/dist/adapters/cetus.test.js.map +0 -1
  22. package/dist/adapters/compliance.test.d.ts +0 -8
  23. package/dist/adapters/compliance.test.d.ts.map +0 -1
  24. package/dist/adapters/compliance.test.js +0 -202
  25. package/dist/adapters/compliance.test.js.map +0 -1
  26. package/dist/adapters/index.d.ts.map +0 -1
  27. package/dist/adapters/navi.d.ts +0 -41
  28. package/dist/adapters/navi.d.ts.map +0 -1
  29. package/dist/adapters/navi.js +0 -102
  30. package/dist/adapters/navi.js.map +0 -1
  31. package/dist/adapters/navi.test.d.ts +0 -2
  32. package/dist/adapters/navi.test.d.ts.map +0 -1
  33. package/dist/adapters/navi.test.js +0 -164
  34. package/dist/adapters/navi.test.js.map +0 -1
  35. package/dist/adapters/registry.d.ts +0 -47
  36. package/dist/adapters/registry.d.ts.map +0 -1
  37. package/dist/adapters/registry.js +0 -162
  38. package/dist/adapters/registry.js.map +0 -1
  39. package/dist/adapters/registry.test.d.ts +0 -2
  40. package/dist/adapters/registry.test.d.ts.map +0 -1
  41. package/dist/adapters/registry.test.js +0 -197
  42. package/dist/adapters/registry.test.js.map +0 -1
  43. package/dist/adapters/suilend.d.ts +0 -71
  44. package/dist/adapters/suilend.d.ts.map +0 -1
  45. package/dist/adapters/suilend.js +0 -826
  46. package/dist/adapters/suilend.js.map +0 -1
  47. package/dist/adapters/suilend.test.d.ts +0 -2
  48. package/dist/adapters/suilend.test.d.ts.map +0 -1
  49. package/dist/adapters/suilend.test.js +0 -294
  50. package/dist/adapters/suilend.test.js.map +0 -1
  51. package/dist/adapters/types.d.ts +0 -160
  52. package/dist/adapters/types.d.ts.map +0 -1
  53. package/dist/adapters/types.js +0 -2
  54. package/dist/adapters/types.js.map +0 -1
  55. package/dist/auto-invest.d.ts +0 -23
  56. package/dist/auto-invest.d.ts.map +0 -1
  57. package/dist/auto-invest.js +0 -131
  58. package/dist/auto-invest.js.map +0 -1
  59. package/dist/auto-invest.test.d.ts +0 -2
  60. package/dist/auto-invest.test.d.ts.map +0 -1
  61. package/dist/auto-invest.test.js +0 -220
  62. package/dist/auto-invest.test.js.map +0 -1
  63. package/dist/constants.d.ts +0 -177
  64. package/dist/constants.d.ts.map +0 -1
  65. package/dist/constants.js +0 -135
  66. package/dist/constants.js.map +0 -1
  67. package/dist/contacts.d.ts +0 -25
  68. package/dist/contacts.d.ts.map +0 -1
  69. package/dist/contacts.js +0 -83
  70. package/dist/contacts.js.map +0 -1
  71. package/dist/contacts.test.d.ts +0 -2
  72. package/dist/contacts.test.d.ts.map +0 -1
  73. package/dist/contacts.test.js +0 -164
  74. package/dist/contacts.test.js.map +0 -1
  75. package/dist/errors.d.ts +0 -26
  76. package/dist/errors.d.ts.map +0 -1
  77. package/dist/errors.js +0 -81
  78. package/dist/errors.js.map +0 -1
  79. package/dist/errors.test.d.ts +0 -2
  80. package/dist/errors.test.d.ts.map +0 -1
  81. package/dist/errors.test.js +0 -48
  82. package/dist/errors.test.js.map +0 -1
  83. package/dist/gas/autoTopUp.d.ts +0 -18
  84. package/dist/gas/autoTopUp.d.ts.map +0 -1
  85. package/dist/gas/autoTopUp.js +0 -55
  86. package/dist/gas/autoTopUp.js.map +0 -1
  87. package/dist/gas/autoTopUp.test.d.ts +0 -2
  88. package/dist/gas/autoTopUp.test.d.ts.map +0 -1
  89. package/dist/gas/autoTopUp.test.js +0 -59
  90. package/dist/gas/autoTopUp.test.js.map +0 -1
  91. package/dist/gas/gasStation.d.ts +0 -23
  92. package/dist/gas/gasStation.d.ts.map +0 -1
  93. package/dist/gas/gasStation.js +0 -58
  94. package/dist/gas/gasStation.js.map +0 -1
  95. package/dist/gas/index.d.ts +0 -4
  96. package/dist/gas/index.d.ts.map +0 -1
  97. package/dist/gas/index.js +0 -4
  98. package/dist/gas/index.js.map +0 -1
  99. package/dist/gas/manager.d.ts +0 -24
  100. package/dist/gas/manager.d.ts.map +0 -1
  101. package/dist/gas/manager.js +0 -142
  102. package/dist/gas/manager.js.map +0 -1
  103. package/dist/gas/manager.test.d.ts +0 -2
  104. package/dist/gas/manager.test.d.ts.map +0 -1
  105. package/dist/gas/manager.test.js +0 -220
  106. package/dist/gas/manager.test.js.map +0 -1
  107. package/dist/gas/serialization.test.d.ts +0 -2
  108. package/dist/gas/serialization.test.d.ts.map +0 -1
  109. package/dist/gas/serialization.test.js +0 -47
  110. package/dist/gas/serialization.test.js.map +0 -1
  111. package/dist/index.d.ts.map +0 -1
  112. package/dist/invest.test.d.ts +0 -2
  113. package/dist/invest.test.d.ts.map +0 -1
  114. package/dist/invest.test.js +0 -256
  115. package/dist/invest.test.js.map +0 -1
  116. package/dist/portfolio.d.ts +0 -39
  117. package/dist/portfolio.d.ts.map +0 -1
  118. package/dist/portfolio.js +0 -201
  119. package/dist/portfolio.js.map +0 -1
  120. package/dist/portfolio.test.d.ts +0 -2
  121. package/dist/portfolio.test.d.ts.map +0 -1
  122. package/dist/portfolio.test.js +0 -301
  123. package/dist/portfolio.test.js.map +0 -1
  124. package/dist/protocols/cetus.d.ts +0 -73
  125. package/dist/protocols/cetus.d.ts.map +0 -1
  126. package/dist/protocols/cetus.js +0 -267
  127. package/dist/protocols/cetus.js.map +0 -1
  128. package/dist/protocols/cetus.test.d.ts +0 -2
  129. package/dist/protocols/cetus.test.d.ts.map +0 -1
  130. package/dist/protocols/cetus.test.js +0 -325
  131. package/dist/protocols/cetus.test.js.map +0 -1
  132. package/dist/protocols/navi.d.ts +0 -59
  133. package/dist/protocols/navi.d.ts.map +0 -1
  134. package/dist/protocols/navi.js +0 -945
  135. package/dist/protocols/navi.js.map +0 -1
  136. package/dist/protocols/navi.test.d.ts +0 -2
  137. package/dist/protocols/navi.test.d.ts.map +0 -1
  138. package/dist/protocols/navi.test.js +0 -339
  139. package/dist/protocols/navi.test.js.map +0 -1
  140. package/dist/protocols/protocolFee.d.ts +0 -17
  141. package/dist/protocols/protocolFee.d.ts.map +0 -1
  142. package/dist/protocols/protocolFee.js +0 -62
  143. package/dist/protocols/protocolFee.js.map +0 -1
  144. package/dist/protocols/protocolFee.test.d.ts +0 -2
  145. package/dist/protocols/protocolFee.test.d.ts.map +0 -1
  146. package/dist/protocols/protocolFee.test.js +0 -137
  147. package/dist/protocols/protocolFee.test.js.map +0 -1
  148. package/dist/protocols/sentinel.d.ts +0 -18
  149. package/dist/protocols/sentinel.d.ts.map +0 -1
  150. package/dist/protocols/sentinel.js +0 -188
  151. package/dist/protocols/sentinel.js.map +0 -1
  152. package/dist/protocols/sentinel.test.d.ts +0 -2
  153. package/dist/protocols/sentinel.test.d.ts.map +0 -1
  154. package/dist/protocols/sentinel.test.js +0 -199
  155. package/dist/protocols/sentinel.test.js.map +0 -1
  156. package/dist/protocols/yieldTracker.d.ts +0 -6
  157. package/dist/protocols/yieldTracker.d.ts.map +0 -1
  158. package/dist/protocols/yieldTracker.js +0 -29
  159. package/dist/protocols/yieldTracker.js.map +0 -1
  160. package/dist/safeguards/enforcer.d.ts +0 -18
  161. package/dist/safeguards/enforcer.d.ts.map +0 -1
  162. package/dist/safeguards/enforcer.js +0 -130
  163. package/dist/safeguards/enforcer.js.map +0 -1
  164. package/dist/safeguards/enforcer.test.d.ts +0 -2
  165. package/dist/safeguards/enforcer.test.d.ts.map +0 -1
  166. package/dist/safeguards/enforcer.test.js +0 -212
  167. package/dist/safeguards/enforcer.test.js.map +0 -1
  168. package/dist/safeguards/errors.d.ts +0 -24
  169. package/dist/safeguards/errors.d.ts.map +0 -1
  170. package/dist/safeguards/errors.js +0 -31
  171. package/dist/safeguards/errors.js.map +0 -1
  172. package/dist/safeguards/index.d.ts +0 -6
  173. package/dist/safeguards/index.d.ts.map +0 -1
  174. package/dist/safeguards/index.js +0 -4
  175. package/dist/safeguards/index.js.map +0 -1
  176. package/dist/safeguards/types.d.ts +0 -16
  177. package/dist/safeguards/types.d.ts.map +0 -1
  178. package/dist/safeguards/types.js +0 -13
  179. package/dist/safeguards/types.js.map +0 -1
  180. package/dist/strategy.d.ts +0 -22
  181. package/dist/strategy.d.ts.map +0 -1
  182. package/dist/strategy.js +0 -113
  183. package/dist/strategy.js.map +0 -1
  184. package/dist/strategy.test.d.ts +0 -2
  185. package/dist/strategy.test.d.ts.map +0 -1
  186. package/dist/strategy.test.js +0 -212
  187. package/dist/strategy.test.js.map +0 -1
  188. package/dist/t2000.d.ts +0 -219
  189. package/dist/t2000.d.ts.map +0 -1
  190. package/dist/t2000.integration.test.d.ts +0 -2
  191. package/dist/t2000.integration.test.d.ts.map +0 -1
  192. package/dist/t2000.integration.test.js +0 -954
  193. package/dist/t2000.integration.test.js.map +0 -1
  194. package/dist/t2000.js +0 -2416
  195. package/dist/t2000.js.map +0 -1
  196. package/dist/types.d.ts +0 -419
  197. package/dist/types.d.ts.map +0 -1
  198. package/dist/types.js +0 -2
  199. package/dist/types.js.map +0 -1
  200. package/dist/utils/format.d.ts +0 -22
  201. package/dist/utils/format.d.ts.map +0 -1
  202. package/dist/utils/format.js +0 -71
  203. package/dist/utils/format.js.map +0 -1
  204. package/dist/utils/format.test.d.ts +0 -2
  205. package/dist/utils/format.test.d.ts.map +0 -1
  206. package/dist/utils/format.test.js +0 -187
  207. package/dist/utils/format.test.js.map +0 -1
  208. package/dist/utils/hashcash.d.ts +0 -2
  209. package/dist/utils/hashcash.d.ts.map +0 -1
  210. package/dist/utils/hashcash.js +0 -27
  211. package/dist/utils/hashcash.js.map +0 -1
  212. package/dist/utils/hashcash.test.d.ts +0 -2
  213. package/dist/utils/hashcash.test.d.ts.map +0 -1
  214. package/dist/utils/hashcash.test.js +0 -40
  215. package/dist/utils/hashcash.test.js.map +0 -1
  216. package/dist/utils/retry.d.ts +0 -9
  217. package/dist/utils/retry.d.ts.map +0 -1
  218. package/dist/utils/retry.js +0 -47
  219. package/dist/utils/retry.js.map +0 -1
  220. package/dist/utils/simulate.d.ts +0 -15
  221. package/dist/utils/simulate.d.ts.map +0 -1
  222. package/dist/utils/simulate.js +0 -75
  223. package/dist/utils/simulate.js.map +0 -1
  224. package/dist/utils/simulate.test.d.ts +0 -2
  225. package/dist/utils/simulate.test.d.ts.map +0 -1
  226. package/dist/utils/simulate.test.js +0 -80
  227. package/dist/utils/simulate.test.js.map +0 -1
  228. package/dist/utils/sui.d.ts +0 -6
  229. package/dist/utils/sui.d.ts.map +0 -1
  230. package/dist/utils/sui.js +0 -28
  231. package/dist/utils/sui.js.map +0 -1
  232. package/dist/utils/sui.test.d.ts +0 -2
  233. package/dist/utils/sui.test.d.ts.map +0 -1
  234. package/dist/utils/sui.test.js +0 -58
  235. package/dist/utils/sui.test.js.map +0 -1
  236. package/dist/wallet/balance.d.ts +0 -4
  237. package/dist/wallet/balance.d.ts.map +0 -1
  238. package/dist/wallet/balance.js +0 -98
  239. package/dist/wallet/balance.js.map +0 -1
  240. package/dist/wallet/history.d.ts +0 -4
  241. package/dist/wallet/history.d.ts.map +0 -1
  242. package/dist/wallet/history.js +0 -38
  243. package/dist/wallet/history.js.map +0 -1
  244. package/dist/wallet/keyManager.d.ts +0 -9
  245. package/dist/wallet/keyManager.d.ts.map +0 -1
  246. package/dist/wallet/keyManager.js +0 -113
  247. package/dist/wallet/keyManager.js.map +0 -1
  248. package/dist/wallet/keyManager.test.d.ts +0 -2
  249. package/dist/wallet/keyManager.test.d.ts.map +0 -1
  250. package/dist/wallet/keyManager.test.js +0 -55
  251. package/dist/wallet/keyManager.test.js.map +0 -1
  252. package/dist/wallet/send.d.ts +0 -24
  253. package/dist/wallet/send.d.ts.map +0 -1
  254. package/dist/wallet/send.js +0 -95
  255. package/dist/wallet/send.js.map +0 -1
  256. package/dist/wallet/send.test.d.ts +0 -2
  257. package/dist/wallet/send.test.d.ts.map +0 -1
  258. package/dist/wallet/send.test.js +0 -69
  259. package/dist/wallet/send.test.js.map +0 -1
@@ -1,18 +0,0 @@
1
- import type { SuiJsonRpcClient } from '@mysten/sui/jsonRpc';
2
- import type { Ed25519Keypair } from '@mysten/sui/keypairs/ed25519';
3
- export interface AutoTopUpResult {
4
- success: boolean;
5
- tx: string;
6
- usdcSpent: number;
7
- suiReceived: number;
8
- }
9
- export declare function shouldAutoTopUp(client: SuiJsonRpcClient, address: string): Promise<boolean>;
10
- /**
11
- * Self-fund a USDC→SUI swap to replenish gas.
12
- *
13
- * Uses the agent's remaining SUI to pay for the swap gas (~0.007 SUI).
14
- * This avoids the chicken-and-egg problem of needing gas station sponsorship
15
- * to get gas, and works even when the gas station is down.
16
- */
17
- export declare function executeAutoTopUp(client: SuiJsonRpcClient, keypair: Ed25519Keypair): Promise<AutoTopUpResult>;
18
- //# sourceMappingURL=autoTopUp.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"autoTopUp.d.ts","sourceRoot":"","sources":["../../src/gas/autoTopUp.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAYnE,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,wBAAsB,eAAe,CACnC,MAAM,EAAE,gBAAgB,EACxB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,OAAO,CAAC,CAUlB;AAED;;;;;;GAMG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,gBAAgB,EACxB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,eAAe,CAAC,CAyC1B"}
@@ -1,55 +0,0 @@
1
- import { SUPPORTED_ASSETS, AUTO_TOPUP_THRESHOLD, AUTO_TOPUP_AMOUNT, AUTO_TOPUP_MIN_USDC, MIST_PER_SUI, } from '../constants.js';
2
- import { buildSwapTx } from '../protocols/cetus.js';
3
- const AUTO_TOPUP_MIN_SUI_FOR_GAS = 5000000n; // 0.005 SUI — minimum to self-fund the swap
4
- export async function shouldAutoTopUp(client, address) {
5
- const [suiBalance, usdcBalance] = await Promise.all([
6
- client.getBalance({ owner: address, coinType: SUPPORTED_ASSETS.SUI.type }),
7
- client.getBalance({ owner: address, coinType: SUPPORTED_ASSETS.USDC.type }),
8
- ]);
9
- const suiRaw = BigInt(suiBalance.totalBalance);
10
- const usdcRaw = BigInt(usdcBalance.totalBalance);
11
- return suiRaw < AUTO_TOPUP_THRESHOLD && suiRaw >= AUTO_TOPUP_MIN_SUI_FOR_GAS && usdcRaw >= AUTO_TOPUP_MIN_USDC;
12
- }
13
- /**
14
- * Self-fund a USDC→SUI swap to replenish gas.
15
- *
16
- * Uses the agent's remaining SUI to pay for the swap gas (~0.007 SUI).
17
- * This avoids the chicken-and-egg problem of needing gas station sponsorship
18
- * to get gas, and works even when the gas station is down.
19
- */
20
- export async function executeAutoTopUp(client, keypair) {
21
- const address = keypair.getPublicKey().toSuiAddress();
22
- const topupAmountHuman = Number(AUTO_TOPUP_AMOUNT) / 1e6; // $1 USDC
23
- const { tx } = await buildSwapTx({
24
- client,
25
- address,
26
- fromAsset: 'USDC',
27
- toAsset: 'SUI',
28
- amount: topupAmountHuman,
29
- });
30
- const result = await client.signAndExecuteTransaction({
31
- signer: keypair,
32
- transaction: tx,
33
- options: { showEffects: true, showBalanceChanges: true },
34
- });
35
- await client.waitForTransaction({ digest: result.digest });
36
- let suiReceived = 0;
37
- if (result.balanceChanges) {
38
- for (const change of result.balanceChanges) {
39
- if (change.coinType === SUPPORTED_ASSETS.SUI.type &&
40
- change.owner &&
41
- typeof change.owner === 'object' &&
42
- 'AddressOwner' in change.owner &&
43
- change.owner.AddressOwner === address) {
44
- suiReceived += Number(change.amount) / Number(MIST_PER_SUI);
45
- }
46
- }
47
- }
48
- return {
49
- success: true,
50
- tx: result.digest,
51
- usdcSpent: topupAmountHuman,
52
- suiReceived: Math.abs(suiReceived),
53
- };
54
- }
55
- //# sourceMappingURL=autoTopUp.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"autoTopUp.js","sourceRoot":"","sources":["../../src/gas/autoTopUp.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,iBAAiB,EACjB,mBAAmB,EACnB,YAAY,GACb,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpD,MAAM,0BAA0B,GAAG,QAAU,CAAC,CAAC,4CAA4C;AAS3F,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,MAAwB,EACxB,OAAe;IAEf,MAAM,CAAC,UAAU,EAAE,WAAW,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAClD,MAAM,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,gBAAgB,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QAC1E,MAAM,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;KAC5E,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;IAC/C,MAAM,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;IAEjD,OAAO,MAAM,GAAG,oBAAoB,IAAI,MAAM,IAAI,0BAA0B,IAAI,OAAO,IAAI,mBAAmB,CAAC;AACjH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,MAAwB,EACxB,OAAuB;IAEvB,MAAM,OAAO,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,YAAY,EAAE,CAAC;IACtD,MAAM,gBAAgB,GAAG,MAAM,CAAC,iBAAiB,CAAC,GAAG,GAAG,CAAC,CAAC,UAAU;IAEpE,MAAM,EAAE,EAAE,EAAE,GAAG,MAAM,WAAW,CAAC;QAC/B,MAAM;QACN,OAAO;QACP,SAAS,EAAE,MAAM;QACjB,OAAO,EAAE,KAAK;QACd,MAAM,EAAE,gBAAgB;KACzB,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,yBAAyB,CAAC;QACpD,MAAM,EAAE,OAAO;QACf,WAAW,EAAE,EAAE;QACf,OAAO,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE;KACzD,CAAC,CAAC;IAEH,MAAM,MAAM,CAAC,kBAAkB,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IAE3D,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;QAC1B,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;YAC3C,IACE,MAAM,CAAC,QAAQ,KAAK,gBAAgB,CAAC,GAAG,CAAC,IAAI;gBAC7C,MAAM,CAAC,KAAK;gBACZ,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ;gBAChC,cAAc,IAAI,MAAM,CAAC,KAAK;gBAC9B,MAAM,CAAC,KAAK,CAAC,YAAY,KAAK,OAAO,EACrC,CAAC;gBACD,WAAW,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;YAC9D,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO;QACL,OAAO,EAAE,IAAI;QACb,EAAE,EAAE,MAAM,CAAC,MAAM;QACjB,SAAS,EAAE,gBAAgB;QAC3B,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC;KACnC,CAAC;AACJ,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=autoTopUp.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"autoTopUp.test.d.ts","sourceRoot":"","sources":["../../src/gas/autoTopUp.test.ts"],"names":[],"mappings":""}
@@ -1,59 +0,0 @@
1
- import { describe, it, expect, vi, beforeEach } from 'vitest';
2
- import { AUTO_TOPUP_THRESHOLD, AUTO_TOPUP_MIN_USDC, SUPPORTED_ASSETS } from '../constants.js';
3
- vi.mock('./gasStation.js', () => ({
4
- requestGasSponsorship: vi.fn(),
5
- reportGasUsage: vi.fn(),
6
- }));
7
- import { shouldAutoTopUp } from './autoTopUp.js';
8
- function mockClient(suiBalance, usdcBalance) {
9
- return {
10
- getBalance: vi.fn().mockImplementation(({ coinType }) => {
11
- if (coinType === SUPPORTED_ASSETS.SUI.type) {
12
- return Promise.resolve({ totalBalance: suiBalance.toString() });
13
- }
14
- return Promise.resolve({ totalBalance: usdcBalance.toString() });
15
- }),
16
- getCoins: vi.fn().mockResolvedValue({ data: [] }),
17
- };
18
- }
19
- describe('shouldAutoTopUp', () => {
20
- beforeEach(() => {
21
- vi.clearAllMocks();
22
- });
23
- it('returns true when SUI < threshold AND USDC >= min', async () => {
24
- const client = mockClient(AUTO_TOPUP_THRESHOLD - 1n, // just under 0.05 SUI
25
- AUTO_TOPUP_MIN_USDC);
26
- const result = await shouldAutoTopUp(client, '0x' + 'a'.repeat(64));
27
- expect(result).toBe(true);
28
- });
29
- it('returns false when SUI >= threshold', async () => {
30
- const client = mockClient(AUTO_TOPUP_THRESHOLD, // exactly 0.05 SUI
31
- 10000000n);
32
- const result = await shouldAutoTopUp(client, '0x' + 'a'.repeat(64));
33
- expect(result).toBe(false);
34
- });
35
- it('returns false when USDC < min', async () => {
36
- const client = mockClient(1000000n, // 0.001 SUI (low)
37
- AUTO_TOPUP_MIN_USDC - 1n);
38
- const result = await shouldAutoTopUp(client, '0x' + 'a'.repeat(64));
39
- expect(result).toBe(false);
40
- });
41
- it('returns false when both SUI and USDC are sufficient', async () => {
42
- const client = mockClient(100000000n, // 0.1 SUI (plenty)
43
- 10000000n);
44
- const result = await shouldAutoTopUp(client, '0x' + 'a'.repeat(64));
45
- expect(result).toBe(false);
46
- });
47
- it('returns false when both are zero', async () => {
48
- const client = mockClient(0n, 0n);
49
- const result = await shouldAutoTopUp(client, '0x' + 'a'.repeat(64));
50
- expect(result).toBe(false);
51
- });
52
- it('threshold constant is 0.05 SUI (50_000_000 MIST)', () => {
53
- expect(AUTO_TOPUP_THRESHOLD).toBe(50000000n);
54
- });
55
- it('min USDC constant is $2 (2_000_000 raw)', () => {
56
- expect(AUTO_TOPUP_MIN_USDC).toBe(2000000n);
57
- });
58
- });
59
- //# sourceMappingURL=autoTopUp.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"autoTopUp.test.js","sourceRoot":"","sources":["../../src/gas/autoTopUp.test.ts"],"names":[],"mappings":"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"}
@@ -1,23 +0,0 @@
1
- export type GasRequestType = 'bootstrap' | 'auto-topup' | 'fallback';
2
- export interface GasSponsorResponse {
3
- txBytes: string;
4
- sponsorSignature: string;
5
- gasEstimateUsd: number;
6
- type: GasRequestType;
7
- }
8
- export interface GasStatusResponse {
9
- circuitBreaker: boolean;
10
- suiPrice: number;
11
- bootstrapUsed?: number;
12
- bootstrapRemaining?: number;
13
- }
14
- /**
15
- * Request gas sponsorship from the gas station.
16
- *
17
- * Sends `txJson` (preferred) or `txBcsBytes` (base64-encoded BCS from tx.build(),
18
- * used when serialize() fails due to v1/v2 SDK mismatch with aggregator).
19
- */
20
- export declare function requestGasSponsorship(txJson: string, sender: string, type?: GasRequestType, txBcsBytes?: string): Promise<GasSponsorResponse>;
21
- export declare function reportGasUsage(sender: string, txDigest: string, gasCostSui: number, usdcCharged: number, type: GasRequestType): Promise<void>;
22
- export declare function getGasStatus(address?: string): Promise<GasStatusResponse>;
23
- //# sourceMappingURL=gasStation.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"gasStation.d.ts","sourceRoot":"","sources":["../../src/gas/gasStation.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,cAAc,GAAG,WAAW,GAAG,YAAY,GAAG,UAAU,CAAC;AAErE,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,cAAc,CAAC;CACtB;AAED,MAAM,WAAW,iBAAiB;IAChC,cAAc,EAAE,OAAO,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;;;;GAKG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,cAAc,EACrB,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,kBAAkB,CAAC,CA8C7B;AAED,wBAAsB,cAAc,CAClC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC,IAAI,CAAC,CAUf;AAED,wBAAsB,YAAY,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAU/E"}
@@ -1,58 +0,0 @@
1
- import { API_BASE_URL } from '../constants.js';
2
- import { T2000Error } from '../errors.js';
3
- /**
4
- * Request gas sponsorship from the gas station.
5
- *
6
- * Sends `txJson` (preferred) or `txBcsBytes` (base64-encoded BCS from tx.build(),
7
- * used when serialize() fails due to v1/v2 SDK mismatch with aggregator).
8
- */
9
- export async function requestGasSponsorship(txJson, sender, type, txBcsBytes) {
10
- const payload = { sender, type };
11
- if (txBcsBytes) {
12
- payload.txBcsBytes = txBcsBytes;
13
- }
14
- else {
15
- payload.txJson = txJson;
16
- payload.txBytes = Buffer.from(txJson).toString('base64');
17
- }
18
- const res = await fetch(`${API_BASE_URL}/api/gas`, {
19
- method: 'POST',
20
- headers: { 'Content-Type': 'application/json' },
21
- body: JSON.stringify(payload),
22
- });
23
- const data = (await res.json());
24
- if (!res.ok) {
25
- const errorCode = data.error;
26
- if (errorCode === 'CIRCUIT_BREAKER' || errorCode === 'POOL_DEPLETED') {
27
- throw new T2000Error('GAS_STATION_UNAVAILABLE', data.message ?? 'Gas station temporarily unavailable', { retryAfter: data.retryAfter }, true);
28
- }
29
- if (errorCode === 'GAS_FEE_EXCEEDED') {
30
- throw new T2000Error('GAS_FEE_EXCEEDED', data.message ?? 'Gas fee exceeds ceiling', { retryAfter: data.retryAfter }, true);
31
- }
32
- throw new T2000Error('GAS_STATION_UNAVAILABLE', data.message ?? 'Gas sponsorship request failed', undefined, true);
33
- }
34
- return data;
35
- }
36
- export async function reportGasUsage(sender, txDigest, gasCostSui, usdcCharged, type) {
37
- try {
38
- await fetch(`${API_BASE_URL}/api/gas/report`, {
39
- method: 'POST',
40
- headers: { 'Content-Type': 'application/json' },
41
- body: JSON.stringify({ sender, txDigest, gasCostSui, usdcCharged, type }),
42
- });
43
- }
44
- catch {
45
- // Non-critical — best-effort reporting
46
- }
47
- }
48
- export async function getGasStatus(address) {
49
- const url = new URL(`${API_BASE_URL}/api/gas/status`);
50
- if (address)
51
- url.searchParams.set('address', address);
52
- const res = await fetch(url.toString());
53
- if (!res.ok) {
54
- throw new T2000Error('GAS_STATION_UNAVAILABLE', 'Failed to fetch gas status', undefined, true);
55
- }
56
- return (await res.json());
57
- }
58
- //# sourceMappingURL=gasStation.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"gasStation.js","sourceRoot":"","sources":["../../src/gas/gasStation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAkB1C;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,MAAc,EACd,MAAc,EACd,IAAqB,EACrB,UAAmB;IAEnB,MAAM,OAAO,GAA4B,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IAC1D,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,CAAC,UAAU,GAAG,UAAU,CAAC;IAClC,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;QACxB,OAAO,CAAC,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC3D,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,YAAY,UAAU,EAAE;QACjD,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;QAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;KAC9B,CAAC,CAAC;IAEH,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAA4B,CAAC;IAE3D,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,SAAS,GAAG,IAAI,CAAC,KAAe,CAAC;QAEvC,IAAI,SAAS,KAAK,iBAAiB,IAAI,SAAS,KAAK,eAAe,EAAE,CAAC;YACrE,MAAM,IAAI,UAAU,CAClB,yBAAyB,EACxB,IAAI,CAAC,OAAkB,IAAI,qCAAqC,EACjE,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,EAC/B,IAAI,CACL,CAAC;QACJ,CAAC;QACD,IAAI,SAAS,KAAK,kBAAkB,EAAE,CAAC;YACrC,MAAM,IAAI,UAAU,CAClB,kBAAkB,EACjB,IAAI,CAAC,OAAkB,IAAI,yBAAyB,EACrD,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,EAC/B,IAAI,CACL,CAAC;QACJ,CAAC;QAED,MAAM,IAAI,UAAU,CAClB,yBAAyB,EACxB,IAAI,CAAC,OAAkB,IAAI,gCAAgC,EAC5D,SAAS,EACT,IAAI,CACL,CAAC;IACJ,CAAC;IAED,OAAO,IAAqC,CAAC;AAC/C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,MAAc,EACd,QAAgB,EAChB,UAAkB,EAClB,WAAmB,EACnB,IAAoB;IAEpB,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,GAAG,YAAY,iBAAiB,EAAE;YAC5C,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;SAC1E,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,uCAAuC;IACzC,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAAgB;IACjD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,YAAY,iBAAiB,CAAC,CAAC;IACtD,IAAI,OAAO;QAAE,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAEtD,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;IACxC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,IAAI,UAAU,CAAC,yBAAyB,EAAE,4BAA4B,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;IACjG,CAAC;IAED,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAsB,CAAC;AACjD,CAAC"}
@@ -1,4 +0,0 @@
1
- export { executeWithGas, type GasExecutionResult } from './manager.js';
2
- export { shouldAutoTopUp, executeAutoTopUp, type AutoTopUpResult } from './autoTopUp.js';
3
- export { requestGasSponsorship, reportGasUsage, getGasStatus, type GasSponsorResponse, type GasStatusResponse, type GasRequestType, } from './gasStation.js';
4
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/gas/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,KAAK,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACvE,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,KAAK,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACzF,OAAO,EACL,qBAAqB,EACrB,cAAc,EACd,YAAY,EACZ,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,cAAc,GACpB,MAAM,iBAAiB,CAAC"}
package/dist/gas/index.js DELETED
@@ -1,4 +0,0 @@
1
- export { executeWithGas } from './manager.js';
2
- export { shouldAutoTopUp, executeAutoTopUp } from './autoTopUp.js';
3
- export { requestGasSponsorship, reportGasUsage, getGasStatus, } from './gasStation.js';
4
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/gas/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAA2B,MAAM,cAAc,CAAC;AACvE,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAwB,MAAM,gBAAgB,CAAC;AACzF,OAAO,EACL,qBAAqB,EACrB,cAAc,EACd,YAAY,GAIb,MAAM,iBAAiB,CAAC"}
@@ -1,24 +0,0 @@
1
- import type { SuiJsonRpcClient } from '@mysten/sui/jsonRpc';
2
- import type { Ed25519Keypair } from '@mysten/sui/keypairs/ed25519';
3
- import { Transaction } from '@mysten/sui/transactions';
4
- import type { GasMethod } from '../types.js';
5
- import type { SafeguardEnforcer } from '../safeguards/enforcer.js';
6
- import type { TxMetadata } from '../safeguards/types.js';
7
- export interface GasExecutionResult {
8
- digest: string;
9
- effects: unknown;
10
- gasMethod: GasMethod;
11
- gasCostSui: number;
12
- }
13
- /**
14
- * Gas resolution chain:
15
- * 1. Self-funded (agent has enough SUI)
16
- * 2. Auto-topup (swap USDC→SUI, then self-fund)
17
- * 3. Gas Station sponsored (fallback)
18
- * 4. Fail with INSUFFICIENT_GAS
19
- */
20
- export declare function executeWithGas(client: SuiJsonRpcClient, keypair: Ed25519Keypair, buildTx: () => Transaction | Promise<Transaction>, options?: {
21
- metadata?: TxMetadata;
22
- enforcer?: SafeguardEnforcer;
23
- }): Promise<GasExecutionResult>;
24
- //# sourceMappingURL=manager.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/gas/manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAMvD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAI7C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEzD,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,SAAS,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACpB;AAyHD;;;;;;GAMG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,gBAAgB,EACxB,OAAO,EAAE,cAAc,EACvB,OAAO,EAAE,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,EACjD,OAAO,CAAC,EAAE;IAAE,QAAQ,CAAC,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,EAAE,iBAAiB,CAAA;CAAE,GAChE,OAAO,CAAC,kBAAkB,CAAC,CA8C7B"}
@@ -1,142 +0,0 @@
1
- import { SUPPORTED_ASSETS, AUTO_TOPUP_THRESHOLD, } from '../constants.js';
2
- import { T2000Error, isMoveAbort, parseMoveAbortMessage } from '../errors.js';
3
- import { shouldAutoTopUp, executeAutoTopUp } from './autoTopUp.js';
4
- import { requestGasSponsorship, reportGasUsage } from './gasStation.js';
5
- function extractGasCost(effects) {
6
- if (!effects?.gasUsed)
7
- return 0;
8
- return (Number(effects.gasUsed.computationCost) +
9
- Number(effects.gasUsed.storageCost) -
10
- Number(effects.gasUsed.storageRebate)) / 1e9;
11
- }
12
- async function getSuiBalance(client, address) {
13
- const bal = await client.getBalance({ owner: address, coinType: SUPPORTED_ASSETS.SUI.type });
14
- return BigInt(bal.totalBalance);
15
- }
16
- async function trySelfFunded(client, keypair, tx) {
17
- const address = keypair.getPublicKey().toSuiAddress();
18
- const suiBalance = await getSuiBalance(client, address);
19
- // Need at least 0.05 SUI for gas
20
- if (suiBalance < AUTO_TOPUP_THRESHOLD)
21
- return null;
22
- tx.setSender(address);
23
- const result = await client.signAndExecuteTransaction({
24
- signer: keypair,
25
- transaction: tx,
26
- options: { showEffects: true },
27
- });
28
- await client.waitForTransaction({ digest: result.digest });
29
- return {
30
- digest: result.digest,
31
- effects: result.effects,
32
- gasMethod: 'self-funded',
33
- gasCostSui: extractGasCost(result.effects),
34
- };
35
- }
36
- async function tryAutoTopUpThenSelfFund(client, keypair, buildTx) {
37
- const address = keypair.getPublicKey().toSuiAddress();
38
- const canTopUp = await shouldAutoTopUp(client, address);
39
- if (!canTopUp)
40
- return null;
41
- await executeAutoTopUp(client, keypair);
42
- // Rebuild the transaction with fresh object versions (auto-topup changed coin state)
43
- const tx = await buildTx();
44
- tx.setSender(address);
45
- const result = await client.signAndExecuteTransaction({
46
- signer: keypair,
47
- transaction: tx,
48
- options: { showEffects: true },
49
- });
50
- await client.waitForTransaction({ digest: result.digest });
51
- return {
52
- digest: result.digest,
53
- effects: result.effects,
54
- gasMethod: 'auto-topup',
55
- gasCostSui: extractGasCost(result.effects),
56
- };
57
- }
58
- async function trySponsored(client, keypair, tx) {
59
- const address = keypair.getPublicKey().toSuiAddress();
60
- tx.setSender(address);
61
- // Use serialize() for pure v2 transactions, fall back to build() for
62
- // mixed v1/v2 transactions (e.g. Cetus aggregator adds v1 commands).
63
- let txJson;
64
- let txBcsBase64;
65
- try {
66
- txJson = tx.serialize();
67
- }
68
- catch {
69
- const bcsBytes = await tx.build({ client });
70
- txBcsBase64 = Buffer.from(bcsBytes).toString('base64');
71
- }
72
- const sponsoredResult = await requestGasSponsorship(txJson ?? '', address, undefined, txBcsBase64);
73
- const sponsoredTxBytes = Buffer.from(sponsoredResult.txBytes, 'base64');
74
- const { signature: agentSig } = await keypair.signTransaction(sponsoredTxBytes);
75
- const result = await client.executeTransactionBlock({
76
- transactionBlock: sponsoredResult.txBytes,
77
- signature: [agentSig, sponsoredResult.sponsorSignature],
78
- options: { showEffects: true },
79
- });
80
- await client.waitForTransaction({ digest: result.digest });
81
- // Report gas usage (best-effort)
82
- const gasCost = extractGasCost(result.effects);
83
- reportGasUsage(address, result.digest, gasCost, 0, sponsoredResult.type);
84
- return {
85
- digest: result.digest,
86
- effects: result.effects,
87
- gasMethod: 'sponsored',
88
- gasCostSui: gasCost,
89
- };
90
- }
91
- /**
92
- * Gas resolution chain:
93
- * 1. Self-funded (agent has enough SUI)
94
- * 2. Auto-topup (swap USDC→SUI, then self-fund)
95
- * 3. Gas Station sponsored (fallback)
96
- * 4. Fail with INSUFFICIENT_GAS
97
- */
98
- export async function executeWithGas(client, keypair, buildTx, options) {
99
- if (options?.enforcer && options?.metadata) {
100
- options.enforcer.check(options.metadata);
101
- }
102
- const errors = [];
103
- // Step 1: Try self-funded
104
- try {
105
- const tx = await buildTx();
106
- const result = await trySelfFunded(client, keypair, tx);
107
- if (result)
108
- return result;
109
- errors.push('self-funded: SUI below threshold');
110
- }
111
- catch (err) {
112
- const msg = err instanceof Error ? err.message : String(err);
113
- if (isMoveAbort(msg)) {
114
- throw new T2000Error('TRANSACTION_FAILED', parseMoveAbortMessage(msg));
115
- }
116
- errors.push(`self-funded: ${msg}`);
117
- }
118
- // Step 2: Try auto-topup (self-fund swap for gas) then self-fund the main tx
119
- try {
120
- const result = await tryAutoTopUpThenSelfFund(client, keypair, buildTx);
121
- if (result)
122
- return result;
123
- errors.push('auto-topup: not eligible (low USDC or sufficient SUI)');
124
- }
125
- catch (err) {
126
- errors.push(`auto-topup: ${err instanceof Error ? err.message : String(err)}`);
127
- }
128
- // Step 3: Try gas station sponsored
129
- try {
130
- const tx = await buildTx();
131
- const result = await trySponsored(client, keypair, tx);
132
- if (result)
133
- return result;
134
- errors.push('sponsored: returned null');
135
- }
136
- catch (err) {
137
- errors.push(`sponsored: ${err instanceof Error ? err.message : String(err)}`);
138
- }
139
- // Step 4: All methods failed
140
- throw new T2000Error('INSUFFICIENT_GAS', `No SUI for gas and Gas Station unavailable. Fund your wallet with SUI or USDC. [${errors.join(' | ')}]`, { reason: 'all_gas_methods_exhausted', errors });
141
- }
142
- //# sourceMappingURL=manager.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/gas/manager.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=manager.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"manager.test.d.ts","sourceRoot":"","sources":["../../src/gas/manager.test.ts"],"names":[],"mappings":""}