@antseed/node 0.2.155 → 0.2.157

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 (155) hide show
  1. package/dist/discovery/announcer.d.ts +13 -1
  2. package/dist/discovery/announcer.d.ts.map +1 -1
  3. package/dist/discovery/announcer.js +64 -9
  4. package/dist/discovery/announcer.js.map +1 -1
  5. package/dist/discovery/http-metadata-resolver.d.ts +1 -1
  6. package/dist/discovery/http-metadata-resolver.d.ts.map +1 -1
  7. package/dist/discovery/http-metadata-resolver.js +7 -1
  8. package/dist/discovery/http-metadata-resolver.js.map +1 -1
  9. package/dist/discovery/index.d.ts +3 -2
  10. package/dist/discovery/index.d.ts.map +1 -1
  11. package/dist/discovery/index.js +2 -1
  12. package/dist/discovery/index.js.map +1 -1
  13. package/dist/discovery/metadata/define-version.d.ts +40 -0
  14. package/dist/discovery/metadata/define-version.d.ts.map +1 -0
  15. package/dist/discovery/metadata/define-version.js +104 -0
  16. package/dist/discovery/metadata/define-version.js.map +1 -0
  17. package/dist/discovery/metadata/field.d.ts +26 -0
  18. package/dist/discovery/metadata/field.d.ts.map +1 -0
  19. package/dist/discovery/metadata/field.js +2 -0
  20. package/dist/discovery/metadata/field.js.map +1 -0
  21. package/dist/discovery/metadata/fields/offerings.d.ts +7 -0
  22. package/dist/discovery/metadata/fields/offerings.d.ts.map +1 -0
  23. package/dist/discovery/metadata/fields/offerings.js +52 -0
  24. package/dist/discovery/metadata/fields/offerings.js.map +1 -0
  25. package/dist/discovery/metadata/fields/on-chain-stats.d.ts +6 -0
  26. package/dist/discovery/metadata/fields/on-chain-stats.d.ts.map +1 -0
  27. package/dist/discovery/metadata/fields/on-chain-stats.js +30 -0
  28. package/dist/discovery/metadata/fields/on-chain-stats.js.map +1 -0
  29. package/dist/discovery/metadata/fields/peer-capabilities.d.ts +4 -0
  30. package/dist/discovery/metadata/fields/peer-capabilities.d.ts.map +1 -0
  31. package/dist/discovery/metadata/fields/peer-capabilities.js +21 -0
  32. package/dist/discovery/metadata/fields/peer-capabilities.js.map +1 -0
  33. package/dist/discovery/metadata/fields/peer-profile.d.ts +11 -0
  34. package/dist/discovery/metadata/fields/peer-profile.d.ts.map +1 -0
  35. package/dist/discovery/metadata/fields/peer-profile.js +58 -0
  36. package/dist/discovery/metadata/fields/peer-profile.js.map +1 -0
  37. package/dist/discovery/metadata/fields/provider-basics.d.ts +12 -0
  38. package/dist/discovery/metadata/fields/provider-basics.d.ts.map +1 -0
  39. package/dist/discovery/metadata/fields/provider-basics.js +87 -0
  40. package/dist/discovery/metadata/fields/provider-basics.js.map +1 -0
  41. package/dist/discovery/metadata/fields/service-api-protocols.d.ts +4 -0
  42. package/dist/discovery/metadata/fields/service-api-protocols.d.ts.map +1 -0
  43. package/dist/discovery/metadata/fields/service-api-protocols.js +40 -0
  44. package/dist/discovery/metadata/fields/service-api-protocols.js.map +1 -0
  45. package/dist/discovery/metadata/fields/service-capabilities.d.ts +7 -0
  46. package/dist/discovery/metadata/fields/service-capabilities.d.ts.map +1 -0
  47. package/dist/discovery/metadata/fields/service-capabilities.js +229 -0
  48. package/dist/discovery/metadata/fields/service-capabilities.js.map +1 -0
  49. package/dist/discovery/metadata/fields/service-categories.d.ts +4 -0
  50. package/dist/discovery/metadata/fields/service-categories.d.ts.map +1 -0
  51. package/dist/discovery/metadata/fields/service-categories.js +37 -0
  52. package/dist/discovery/metadata/fields/service-categories.js.map +1 -0
  53. package/dist/discovery/metadata/fields/service-health.d.ts +7 -0
  54. package/dist/discovery/metadata/fields/service-health.d.ts.map +1 -0
  55. package/dist/discovery/metadata/fields/service-health.js +90 -0
  56. package/dist/discovery/metadata/fields/service-health.js.map +1 -0
  57. package/dist/discovery/metadata/fields/service-unit-billing.d.ts +8 -0
  58. package/dist/discovery/metadata/fields/service-unit-billing.d.ts.map +1 -0
  59. package/dist/discovery/metadata/fields/service-unit-billing.js +81 -0
  60. package/dist/discovery/metadata/fields/service-unit-billing.js.map +1 -0
  61. package/dist/discovery/metadata/fields/verifications.d.ts +7 -0
  62. package/dist/discovery/metadata/fields/verifications.d.ts.map +1 -0
  63. package/dist/discovery/metadata/fields/verifications.js +96 -0
  64. package/dist/discovery/metadata/fields/verifications.js.map +1 -0
  65. package/dist/discovery/metadata/index.d.ts +27 -0
  66. package/dist/discovery/metadata/index.d.ts.map +1 -0
  67. package/dist/discovery/metadata/index.js +55 -0
  68. package/dist/discovery/metadata/index.js.map +1 -0
  69. package/dist/discovery/metadata/versions/v10.d.ts +5 -0
  70. package/dist/discovery/metadata/versions/v10.d.ts.map +1 -0
  71. package/dist/discovery/metadata/versions/v10.js +32 -0
  72. package/dist/discovery/metadata/versions/v10.js.map +1 -0
  73. package/dist/discovery/metadata/versions/v11.d.ts +5 -0
  74. package/dist/discovery/metadata/versions/v11.d.ts.map +1 -0
  75. package/dist/discovery/metadata/versions/v11.js +11 -0
  76. package/dist/discovery/metadata/versions/v11.js.map +1 -0
  77. package/dist/discovery/metadata/versions/v12.d.ts +5 -0
  78. package/dist/discovery/metadata/versions/v12.d.ts.map +1 -0
  79. package/dist/discovery/metadata/versions/v12.js +66 -0
  80. package/dist/discovery/metadata/versions/v12.js.map +1 -0
  81. package/dist/discovery/metadata/versions/v13.d.ts +5 -0
  82. package/dist/discovery/metadata/versions/v13.d.ts.map +1 -0
  83. package/dist/discovery/metadata/versions/v13.js +16 -0
  84. package/dist/discovery/metadata/versions/v13.js.map +1 -0
  85. package/dist/discovery/metadata/wire.d.ts +54 -0
  86. package/dist/discovery/metadata/wire.d.ts.map +1 -0
  87. package/dist/discovery/metadata/wire.js +149 -0
  88. package/dist/discovery/metadata/wire.js.map +1 -0
  89. package/dist/discovery/metadata-codec.d.ts +1 -38
  90. package/dist/discovery/metadata-codec.d.ts.map +1 -1
  91. package/dist/discovery/metadata-codec.js +3 -1154
  92. package/dist/discovery/metadata-codec.js.map +1 -1
  93. package/dist/discovery/metadata-server.d.ts +3 -2
  94. package/dist/discovery/metadata-server.d.ts.map +1 -1
  95. package/dist/discovery/metadata-server.js +4 -1
  96. package/dist/discovery/metadata-server.js.map +1 -1
  97. package/dist/discovery/metadata-validator.d.ts.map +1 -1
  98. package/dist/discovery/metadata-validator.js +62 -1
  99. package/dist/discovery/metadata-validator.js.map +1 -1
  100. package/dist/discovery/service-catalog.d.ts +13 -2
  101. package/dist/discovery/service-catalog.d.ts.map +1 -1
  102. package/dist/discovery/service-catalog.js +6 -1
  103. package/dist/discovery/service-catalog.js.map +1 -1
  104. package/dist/health/gas-auto-refuel.d.ts +138 -0
  105. package/dist/health/gas-auto-refuel.d.ts.map +1 -0
  106. package/dist/health/gas-auto-refuel.js +216 -0
  107. package/dist/health/gas-auto-refuel.js.map +1 -0
  108. package/dist/health/gas-health-monitor.d.ts +4 -0
  109. package/dist/health/gas-health-monitor.d.ts.map +1 -1
  110. package/dist/health/gas-health-monitor.js +13 -0
  111. package/dist/health/gas-health-monitor.js.map +1 -1
  112. package/dist/health/model-health-checker.d.ts +58 -33
  113. package/dist/health/model-health-checker.d.ts.map +1 -1
  114. package/dist/health/model-health-checker.js +250 -121
  115. package/dist/health/model-health-checker.js.map +1 -1
  116. package/dist/health/self-health-error.d.ts +20 -0
  117. package/dist/health/self-health-error.d.ts.map +1 -0
  118. package/dist/health/self-health-error.js +60 -0
  119. package/dist/health/self-health-error.js.map +1 -0
  120. package/dist/health/seller-events.d.ts +1 -1
  121. package/dist/health/seller-events.d.ts.map +1 -1
  122. package/dist/health/seller-events.js.map +1 -1
  123. package/dist/index.d.ts +7 -4
  124. package/dist/index.d.ts.map +1 -1
  125. package/dist/index.js +5 -2
  126. package/dist/index.js.map +1 -1
  127. package/dist/interfaces/seller-provider.d.ts +11 -5
  128. package/dist/interfaces/seller-provider.d.ts.map +1 -1
  129. package/dist/node.d.ts +8 -2
  130. package/dist/node.d.ts.map +1 -1
  131. package/dist/node.js +36 -89
  132. package/dist/node.js.map +1 -1
  133. package/dist/p2p/connection-manager.d.ts +5 -1
  134. package/dist/p2p/connection-manager.d.ts.map +1 -1
  135. package/dist/p2p/connection-manager.js +48 -13
  136. package/dist/p2p/connection-manager.js.map +1 -1
  137. package/dist/payments/chain-config.d.ts +11 -0
  138. package/dist/payments/chain-config.d.ts.map +1 -1
  139. package/dist/payments/chain-config.js +7 -0
  140. package/dist/payments/chain-config.js.map +1 -1
  141. package/dist/payments/evm/usdc-eth-swap-client.d.ts +45 -0
  142. package/dist/payments/evm/usdc-eth-swap-client.d.ts.map +1 -0
  143. package/dist/payments/evm/usdc-eth-swap-client.js +83 -0
  144. package/dist/payments/evm/usdc-eth-swap-client.js.map +1 -0
  145. package/dist/payments/index.d.ts +2 -0
  146. package/dist/payments/index.d.ts.map +1 -1
  147. package/dist/payments/index.js +2 -0
  148. package/dist/payments/index.js.map +1 -1
  149. package/dist/seller-request-handler.d.ts +9 -0
  150. package/dist/seller-request-handler.d.ts.map +1 -1
  151. package/dist/seller-request-handler.js +78 -12
  152. package/dist/seller-request-handler.js.map +1 -1
  153. package/dist/types/peer.d.ts +4 -2
  154. package/dist/types/peer.d.ts.map +1 -1
  155. package/package.json +4 -4
@@ -0,0 +1,138 @@
1
+ /** Refuel once the wallet holds less than this (10× the default pause minimum). */
2
+ export declare const DEFAULT_REFUEL_TRIGGER_WEI = 500000000000000n;
3
+ /** USDC swapped per refuel (10 USDC, base units). */
4
+ export declare const DEFAULT_REFUEL_SWAP_USDC_UNITS = 10000000n;
5
+ /** Most USDC swapped in any 24 hours (30 USDC, base units), so a gas leak cannot drain earnings. */
6
+ export declare const DEFAULT_REFUEL_MAX_USDC_PER_DAY_UNITS = 30000000n;
7
+ export declare const DEFAULT_REFUEL_SLIPPAGE_BPS = 100;
8
+ /** Smallest swap worth making (1 USDC); below this the refuel is skipped. */
9
+ export declare const MIN_REFUEL_SWAP_USDC_UNITS = 1000000n;
10
+ /** Wait after a refuel before another, so a balance read that lags the swap does not trigger a second one. */
11
+ export declare const REFUEL_SUCCESS_COOLDOWN_MS: number;
12
+ /** First retry delay after a failed refuel; doubles per failure up to the max. */
13
+ export declare const REFUEL_FAILURE_BACKOFF_MS: number;
14
+ export declare const REFUEL_MAX_BACKOFF_MS: number;
15
+ /** A refuel, kept for the daily cap (and persisted by the caller across restarts). */
16
+ export interface GasRefuelRecord {
17
+ at: number;
18
+ usdcUnits: string;
19
+ /** Empty while `pending`. */
20
+ txHash: string;
21
+ /**
22
+ * Saved before the swap is sent and replaced once it is mined (or dropped if it
23
+ * fails). One left behind by a process that exited mid-swap still counts toward
24
+ * the daily cap, since the swap may have gone through.
25
+ */
26
+ pending?: boolean;
27
+ }
28
+ export type GasRefuelSkipReason = 'daily_cap' | 'insufficient_usdc' | 'insufficient_eth';
29
+ export type GasRefuelEvent = {
30
+ status: 'refueled';
31
+ address: string;
32
+ record: GasRefuelRecord;
33
+ expectedEthWei: bigint;
34
+ balanceWei: bigint;
35
+ } | {
36
+ status: 'failed';
37
+ address: string;
38
+ error: string;
39
+ balanceWei: bigint;
40
+ retryAt: number;
41
+ } | {
42
+ status: 'skipped';
43
+ address: string;
44
+ reason: GasRefuelSkipReason;
45
+ balanceWei: bigint;
46
+ detail: string;
47
+ };
48
+ export interface GasRefuelSnapshot {
49
+ address: string;
50
+ triggerBalanceWei: bigint;
51
+ swapUsdcUnits: bigint;
52
+ maxUsdcPerDayUnits: bigint;
53
+ usdcLast24hUnits: bigint;
54
+ inFlight: boolean;
55
+ lastRefuel: GasRefuelRecord | null;
56
+ lastError: string | null;
57
+ /** Why the last refuel attempt was skipped, until one goes through. */
58
+ skipped: GasRefuelSkipReason | null;
59
+ nextAttemptAt: number | null;
60
+ }
61
+ /** The chain operations a refuel needs (implemented by `UsdcEthSwapClient`). */
62
+ export interface GasRefuelSwapper {
63
+ quote(amountIn: bigint): Promise<bigint>;
64
+ usdcBalance(address: string): Promise<bigint>;
65
+ maxSwapCostWei(): Promise<bigint>;
66
+ swap(amountIn: bigint, minEthOut: bigint): Promise<string>;
67
+ }
68
+ export interface GasAutoRefuelConfig {
69
+ /** Seller wallet: pays the swap's gas and receives the ETH. */
70
+ address: string;
71
+ swapper: GasRefuelSwapper;
72
+ triggerBalanceWei?: bigint;
73
+ swapUsdcUnits?: bigint;
74
+ maxUsdcPerDayUnits?: bigint;
75
+ slippageBps?: number;
76
+ /** Earlier refuels (e.g. loaded from disk) so the daily cap survives restarts. */
77
+ history?: GasRefuelRecord[];
78
+ /**
79
+ * Persist the last 24 hours of refuels: before each swap is sent (with it as
80
+ * `pending`) and after it settles, even after `stop()`, so the daily cap still
81
+ * counts it after a restart.
82
+ */
83
+ saveHistory?: (records: GasRefuelRecord[]) => Promise<void>;
84
+ onEvent?: (event: GasRefuelEvent) => void | Promise<void>;
85
+ now?: () => number;
86
+ }
87
+ /**
88
+ * Tops the seller wallet up with ETH before it runs out: when a balance
89
+ * reading is under the trigger, swap some of the wallet's own USDC (its
90
+ * earnings) for ETH, paying gas from the ETH still there. Swaps are capped per
91
+ * day, spaced by a cooldown, and backed off after failures. Feed it every
92
+ * balance reading via `onBalance` (e.g. from `GasHealthMonitor`).
93
+ */
94
+ export declare class GasAutoRefueler {
95
+ private readonly _address;
96
+ private readonly _swapper;
97
+ private readonly _triggerBalanceWei;
98
+ private readonly _swapUsdcUnits;
99
+ private readonly _maxUsdcPerDayUnits;
100
+ private readonly _slippageBps;
101
+ private readonly _onEvent;
102
+ private readonly _saveHistory;
103
+ private readonly _now;
104
+ private _history;
105
+ private _inFlight;
106
+ private _nextAttemptAt;
107
+ private _failures;
108
+ private _lastError;
109
+ private _skipped;
110
+ private _stopped;
111
+ constructor(config: GasAutoRefuelConfig);
112
+ /**
113
+ * No more refuels after this. One already running finishes and its history is
114
+ * still saved, but it reports nothing; the returned promise settles when it is done.
115
+ */
116
+ stop(): Promise<void>;
117
+ /** Every refuel in the last 24 hours (what the daily cap counts). */
118
+ get recentHistory(): GasRefuelRecord[];
119
+ getSnapshot(): GasRefuelSnapshot;
120
+ /**
121
+ * A fresh balance reading. Starts a refuel when it is under the trigger and
122
+ * none is running or cooling down. Resolves when that refuel is done.
123
+ */
124
+ onBalance(balanceWei: bigint): Promise<void>;
125
+ private _refuel;
126
+ /** Save the history; a failure is logged, or thrown when `required` (the reservation before a swap). */
127
+ private _persist;
128
+ /** Report a skip once per reason, not on every reading while it lasts. */
129
+ private _skip;
130
+ private _emit;
131
+ }
132
+ /**
133
+ * Whether a swap error proves no USDC left the wallet: it reverted (in gas
134
+ * estimation or on-chain), the node refused to broadcast it, or another tx took
135
+ * its nonce. A timeout or lost RPC response proves nothing.
136
+ */
137
+ export declare function swapCertainlyNotSpent(err: unknown): boolean;
138
+ //# sourceMappingURL=gas-auto-refuel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gas-auto-refuel.d.ts","sourceRoot":"","sources":["../../src/health/gas-auto-refuel.ts"],"names":[],"mappings":"AAGA,mFAAmF;AACnF,eAAO,MAAM,0BAA0B,mBAAuB,CAAC;AAC/D,qDAAqD;AACrD,eAAO,MAAM,8BAA8B,YAAc,CAAC;AAC1D,oGAAoG;AACpG,eAAO,MAAM,qCAAqC,YAAc,CAAC;AACjE,eAAO,MAAM,2BAA2B,MAAM,CAAC;AAC/C,6EAA6E;AAC7E,eAAO,MAAM,0BAA0B,WAAa,CAAC;AACrD,8GAA8G;AAC9G,eAAO,MAAM,0BAA0B,QAAc,CAAC;AACtD,kFAAkF;AAClF,eAAO,MAAM,yBAAyB,QAAa,CAAC;AACpD,eAAO,MAAM,qBAAqB,QAAkB,CAAC;AAGrD,sFAAsF;AACtF,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,6BAA6B;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,MAAM,mBAAmB,GAAG,WAAW,GAAG,mBAAmB,GAAG,kBAAkB,CAAC;AAEzF,MAAM,MAAM,cAAc,GACtB;IAAE,MAAM,EAAE,UAAU,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,eAAe,CAAC;IAAC,cAAc,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAC5G;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACzF;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,mBAAmB,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAE5G,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,eAAe,GAAG,IAAI,CAAC;IACnC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,uEAAuE;IACvE,OAAO,EAAE,mBAAmB,GAAG,IAAI,CAAC;IACpC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED,gFAAgF;AAChF,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACzC,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC9C,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAClC,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CAC5D;AAED,MAAM,WAAW,mBAAmB;IAClC,+DAA+D;IAC/D,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,gBAAgB,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kFAAkF;IAClF,OAAO,CAAC,EAAE,eAAe,EAAE,CAAC;IAC5B;;;;OAIG;IACH,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,eAAe,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5D,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1D,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB;AAED;;;;;;GAMG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmB;IAC5C,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAS;IAC5C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAS;IAC7C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAiC;IAC1D,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAqC;IAClE,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAe;IACpC,OAAO,CAAC,QAAQ,CAAoB;IACpC,OAAO,CAAC,SAAS,CAA8B;IAC/C,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,QAAQ,CAAoC;IACpD,OAAO,CAAC,QAAQ,CAAS;gBAEb,MAAM,EAAE,mBAAmB;IAavC;;;OAGG;IACH,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAKrB,qEAAqE;IACrE,IAAI,aAAa,IAAI,eAAe,EAAE,CAGrC;IAED,WAAW,IAAI,iBAAiB;IAgBhC;;;OAGG;IACH,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YAe9B,OAAO;IAmErB,wGAAwG;YAC1F,QAAQ;IAUtB,0EAA0E;IAC1E,OAAO,CAAC,KAAK;YAOC,KAAK;CAQpB;AAKD;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAK3D"}
@@ -0,0 +1,216 @@
1
+ import { formatEther, formatUnits } from 'ethers';
2
+ import { debugLog, debugWarn } from '../utils/debug.js';
3
+ /** Refuel once the wallet holds less than this (10× the default pause minimum). */
4
+ export const DEFAULT_REFUEL_TRIGGER_WEI = 500000000000000n;
5
+ /** USDC swapped per refuel (10 USDC, base units). */
6
+ export const DEFAULT_REFUEL_SWAP_USDC_UNITS = 10000000n;
7
+ /** Most USDC swapped in any 24 hours (30 USDC, base units), so a gas leak cannot drain earnings. */
8
+ export const DEFAULT_REFUEL_MAX_USDC_PER_DAY_UNITS = 30000000n;
9
+ export const DEFAULT_REFUEL_SLIPPAGE_BPS = 100;
10
+ /** Smallest swap worth making (1 USDC); below this the refuel is skipped. */
11
+ export const MIN_REFUEL_SWAP_USDC_UNITS = 1000000n;
12
+ /** Wait after a refuel before another, so a balance read that lags the swap does not trigger a second one. */
13
+ export const REFUEL_SUCCESS_COOLDOWN_MS = 10 * 60_000;
14
+ /** First retry delay after a failed refuel; doubles per failure up to the max. */
15
+ export const REFUEL_FAILURE_BACKOFF_MS = 5 * 60_000;
16
+ export const REFUEL_MAX_BACKOFF_MS = 6 * 60 * 60_000;
17
+ const DAY_MS = 24 * 60 * 60_000;
18
+ /**
19
+ * Tops the seller wallet up with ETH before it runs out: when a balance
20
+ * reading is under the trigger, swap some of the wallet's own USDC (its
21
+ * earnings) for ETH, paying gas from the ETH still there. Swaps are capped per
22
+ * day, spaced by a cooldown, and backed off after failures. Feed it every
23
+ * balance reading via `onBalance` (e.g. from `GasHealthMonitor`).
24
+ */
25
+ export class GasAutoRefueler {
26
+ _address;
27
+ _swapper;
28
+ _triggerBalanceWei;
29
+ _swapUsdcUnits;
30
+ _maxUsdcPerDayUnits;
31
+ _slippageBps;
32
+ _onEvent;
33
+ _saveHistory;
34
+ _now;
35
+ _history;
36
+ _inFlight = null;
37
+ _nextAttemptAt = 0;
38
+ _failures = 0;
39
+ _lastError = null;
40
+ _skipped = null;
41
+ _stopped = false;
42
+ constructor(config) {
43
+ this._address = config.address;
44
+ this._swapper = config.swapper;
45
+ this._triggerBalanceWei = config.triggerBalanceWei ?? DEFAULT_REFUEL_TRIGGER_WEI;
46
+ this._swapUsdcUnits = config.swapUsdcUnits ?? DEFAULT_REFUEL_SWAP_USDC_UNITS;
47
+ this._maxUsdcPerDayUnits = config.maxUsdcPerDayUnits ?? DEFAULT_REFUEL_MAX_USDC_PER_DAY_UNITS;
48
+ this._slippageBps = BigInt(config.slippageBps ?? DEFAULT_REFUEL_SLIPPAGE_BPS);
49
+ this._onEvent = config.onEvent;
50
+ this._saveHistory = config.saveHistory;
51
+ this._now = config.now ?? Date.now;
52
+ this._history = [...(config.history ?? [])];
53
+ }
54
+ /**
55
+ * No more refuels after this. One already running finishes and its history is
56
+ * still saved, but it reports nothing; the returned promise settles when it is done.
57
+ */
58
+ stop() {
59
+ this._stopped = true;
60
+ return this._inFlight ?? Promise.resolve();
61
+ }
62
+ /** Every refuel in the last 24 hours (what the daily cap counts). */
63
+ get recentHistory() {
64
+ const since = this._now() - DAY_MS;
65
+ return this._history.filter((record) => record.at > since);
66
+ }
67
+ getSnapshot() {
68
+ const recent = this.recentHistory;
69
+ return {
70
+ address: this._address,
71
+ triggerBalanceWei: this._triggerBalanceWei,
72
+ swapUsdcUnits: this._swapUsdcUnits,
73
+ maxUsdcPerDayUnits: this._maxUsdcPerDayUnits,
74
+ usdcLast24hUnits: recent.reduce((sum, record) => sum + BigInt(record.usdcUnits), 0n),
75
+ inFlight: this._inFlight !== null,
76
+ lastRefuel: this._history.filter((record) => !record.pending).at(-1) ?? null,
77
+ lastError: this._lastError,
78
+ skipped: this._skipped,
79
+ nextAttemptAt: this._nextAttemptAt > this._now() ? this._nextAttemptAt : null,
80
+ };
81
+ }
82
+ /**
83
+ * A fresh balance reading. Starts a refuel when it is under the trigger and
84
+ * none is running or cooling down. Resolves when that refuel is done.
85
+ */
86
+ onBalance(balanceWei) {
87
+ if (this._stopped)
88
+ return Promise.resolve();
89
+ if (balanceWei >= this._triggerBalanceWei) {
90
+ // Funded (by a refuel or by hand): a later shortfall reports its skip reason afresh.
91
+ this._skipped = null;
92
+ return Promise.resolve();
93
+ }
94
+ if (this._inFlight)
95
+ return this._inFlight;
96
+ if (this._now() < this._nextAttemptAt)
97
+ return Promise.resolve();
98
+ this._inFlight = this._refuel(balanceWei).finally(() => {
99
+ this._inFlight = null;
100
+ });
101
+ return this._inFlight;
102
+ }
103
+ async _refuel(balanceWei) {
104
+ let reservation = null;
105
+ try {
106
+ const recent = this.recentHistory;
107
+ const usedToday = recent.reduce((sum, record) => sum + BigInt(record.usdcUnits), 0n);
108
+ const leftToday = this._maxUsdcPerDayUnits - usedToday;
109
+ if (leftToday < MIN_REFUEL_SWAP_USDC_UNITS) {
110
+ // Try again once the oldest refuel in the window ages out.
111
+ this._nextAttemptAt = (recent[0]?.at ?? this._now()) + DAY_MS;
112
+ this._skip('daily_cap', balanceWei, `swapped ${formatUnits(usedToday, 6)} USDC in the last 24h (cap ${formatUnits(this._maxUsdcPerDayUnits, 6)})`);
113
+ return;
114
+ }
115
+ const usdcBalance = await this._swapper.usdcBalance(this._address);
116
+ const amount = [this._swapUsdcUnits, leftToday, usdcBalance].reduce((a, b) => (b < a ? b : a));
117
+ if (amount < MIN_REFUEL_SWAP_USDC_UNITS) {
118
+ this._nextAttemptAt = this._now() + REFUEL_SUCCESS_COOLDOWN_MS;
119
+ this._skip('insufficient_usdc', balanceWei, `wallet holds ${formatUnits(usdcBalance, 6)} USDC`);
120
+ return;
121
+ }
122
+ const maxCost = await this._swapper.maxSwapCostWei();
123
+ if (balanceWei < maxCost) {
124
+ this._nextAttemptAt = this._now() + REFUEL_SUCCESS_COOLDOWN_MS;
125
+ this._skip('insufficient_eth', balanceWei, `a swap can cost up to ${formatEther(maxCost)} ETH; wallet holds ${formatEther(balanceWei)} ETH`);
126
+ return;
127
+ }
128
+ const expected = await this._swapper.quote(amount);
129
+ const minOut = (expected * (10000n - this._slippageBps)) / 10000n;
130
+ debugLog(`[GasRefuel] ${this._address} at ${formatEther(balanceWei)} ETH: swapping ${formatUnits(amount, 6)} USDC for ~${formatEther(expected)} ETH`);
131
+ // Reserve the spend on disk first: if the process exits before the swap is mined, a restart still counts it.
132
+ const pending = { at: this._now(), usdcUnits: amount.toString(), txHash: '', pending: true };
133
+ this._history = [...this.recentHistory, pending];
134
+ try {
135
+ await this._persist({ required: true });
136
+ }
137
+ catch (err) {
138
+ // Without the reservation on disk a restart could not count this swap, so it is not sent.
139
+ this._history = this._history.filter((entry) => entry !== pending);
140
+ throw new Error(`could not save the refuel reservation, so no swap was sent: ${err instanceof Error ? err.message : err}`);
141
+ }
142
+ reservation = pending;
143
+ const txHash = await this._swapper.swap(amount, minOut);
144
+ const record = { at: this._now(), usdcUnits: amount.toString(), txHash };
145
+ this._history = [...this.recentHistory.filter((entry) => entry !== reservation), record];
146
+ reservation = null;
147
+ await this._persist();
148
+ this._failures = 0;
149
+ this._lastError = null;
150
+ this._skipped = null;
151
+ this._nextAttemptAt = this._now() + REFUEL_SUCCESS_COOLDOWN_MS;
152
+ void this._emit({ status: 'refueled', address: this._address, record, expectedEthWei: expected, balanceWei });
153
+ }
154
+ catch (err) {
155
+ // Release the reservation only when the swap certainly spent nothing. Otherwise (a timeout, a lost
156
+ // RPC response) it may still be mined, so the pending spend keeps counting until it ages out.
157
+ if (reservation && swapCertainlyNotSpent(err)) {
158
+ const dropped = reservation;
159
+ this._history = this._history.filter((entry) => entry !== dropped);
160
+ await this._persist();
161
+ }
162
+ const error = err instanceof Error ? err.message : String(err);
163
+ this._failures += 1;
164
+ const backoff = Math.min(REFUEL_MAX_BACKOFF_MS, REFUEL_FAILURE_BACKOFF_MS * 2 ** (this._failures - 1));
165
+ this._nextAttemptAt = this._now() + backoff;
166
+ this._lastError = error;
167
+ debugWarn(`[GasRefuel] ${this._address} refuel failed: ${error}`);
168
+ void this._emit({ status: 'failed', address: this._address, error, balanceWei, retryAt: this._nextAttemptAt });
169
+ }
170
+ }
171
+ /** Save the history; a failure is logged, or thrown when `required` (the reservation before a swap). */
172
+ async _persist(options = {}) {
173
+ if (!this._saveHistory)
174
+ return;
175
+ try {
176
+ await this._saveHistory(this.recentHistory);
177
+ }
178
+ catch (err) {
179
+ if (options.required)
180
+ throw err;
181
+ debugWarn(`[GasRefuel] could not save refuel history: ${err instanceof Error ? err.message : err}`);
182
+ }
183
+ }
184
+ /** Report a skip once per reason, not on every reading while it lasts. */
185
+ _skip(reason, balanceWei, detail) {
186
+ if (this._skipped === reason)
187
+ return;
188
+ this._skipped = reason;
189
+ debugLog(`[GasRefuel] ${this._address} refuel skipped (${reason}): ${detail}`);
190
+ void this._emit({ status: 'skipped', address: this._address, reason, balanceWei, detail });
191
+ }
192
+ async _emit(event) {
193
+ if (this._stopped || !this._onEvent)
194
+ return;
195
+ try {
196
+ await this._onEvent(event);
197
+ }
198
+ catch (err) {
199
+ debugWarn(`[GasRefuel] onEvent failed: ${err instanceof Error ? err.message : err}`);
200
+ }
201
+ }
202
+ }
203
+ /** ethers codes for a transaction the node refused before broadcasting it. */
204
+ const NOT_BROADCAST_CODES = new Set(['INSUFFICIENT_FUNDS', 'NONCE_EXPIRED', 'REPLACEMENT_UNDERPRICED']);
205
+ /**
206
+ * Whether a swap error proves no USDC left the wallet: it reverted (in gas
207
+ * estimation or on-chain), the node refused to broadcast it, or another tx took
208
+ * its nonce. A timeout or lost RPC response proves nothing.
209
+ */
210
+ export function swapCertainlyNotSpent(err) {
211
+ const { code, message } = (err ?? {});
212
+ return code === 'CALL_EXCEPTION'
213
+ || (typeof code === 'string' && NOT_BROADCAST_CODES.has(code))
214
+ || message === 'Transaction was dropped or replaced';
215
+ }
216
+ //# sourceMappingURL=gas-auto-refuel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gas-auto-refuel.js","sourceRoot":"","sources":["../../src/health/gas-auto-refuel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAExD,mFAAmF;AACnF,MAAM,CAAC,MAAM,0BAA0B,GAAG,gBAAoB,CAAC;AAC/D,qDAAqD;AACrD,MAAM,CAAC,MAAM,8BAA8B,GAAG,SAAW,CAAC;AAC1D,oGAAoG;AACpG,MAAM,CAAC,MAAM,qCAAqC,GAAG,SAAW,CAAC;AACjE,MAAM,CAAC,MAAM,2BAA2B,GAAG,GAAG,CAAC;AAC/C,6EAA6E;AAC7E,MAAM,CAAC,MAAM,0BAA0B,GAAG,QAAU,CAAC;AACrD,8GAA8G;AAC9G,MAAM,CAAC,MAAM,0BAA0B,GAAG,EAAE,GAAG,MAAM,CAAC;AACtD,kFAAkF;AAClF,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,GAAG,MAAM,CAAC;AACpD,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC;AACrD,MAAM,MAAM,GAAG,EAAE,GAAG,EAAE,GAAG,MAAM,CAAC;AAiEhC;;;;;;GAMG;AACH,MAAM,OAAO,eAAe;IACT,QAAQ,CAAS;IACjB,QAAQ,CAAmB;IAC3B,kBAAkB,CAAS;IAC3B,cAAc,CAAS;IACvB,mBAAmB,CAAS;IAC5B,YAAY,CAAS;IACrB,QAAQ,CAAiC;IACzC,YAAY,CAAqC;IACjD,IAAI,CAAe;IAC5B,QAAQ,CAAoB;IAC5B,SAAS,GAAyB,IAAI,CAAC;IACvC,cAAc,GAAG,CAAC,CAAC;IACnB,SAAS,GAAG,CAAC,CAAC;IACd,UAAU,GAAkB,IAAI,CAAC;IACjC,QAAQ,GAA+B,IAAI,CAAC;IAC5C,QAAQ,GAAG,KAAK,CAAC;IAEzB,YAAY,MAA2B;QACrC,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC;QAC/B,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC;QAC/B,IAAI,CAAC,kBAAkB,GAAG,MAAM,CAAC,iBAAiB,IAAI,0BAA0B,CAAC;QACjF,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,aAAa,IAAI,8BAA8B,CAAC;QAC7E,IAAI,CAAC,mBAAmB,GAAG,MAAM,CAAC,kBAAkB,IAAI,qCAAqC,CAAC;QAC9F,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,IAAI,2BAA2B,CAAC,CAAC;QAC9E,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC;QAC/B,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,WAAW,CAAC;QACvC,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC;QACnC,IAAI,CAAC,QAAQ,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC;IAC9C,CAAC;IAED;;;OAGG;IACH,IAAI;QACF,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,OAAO,IAAI,CAAC,SAAS,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAC7C,CAAC;IAED,qEAAqE;IACrE,IAAI,aAAa;QACf,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,MAAM,CAAC;QACnC,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC;IAC7D,CAAC;IAED,WAAW;QACT,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC;QAClC,OAAO;YACL,OAAO,EAAE,IAAI,CAAC,QAAQ;YACtB,iBAAiB,EAAE,IAAI,CAAC,kBAAkB;YAC1C,aAAa,EAAE,IAAI,CAAC,cAAc;YAClC,kBAAkB,EAAE,IAAI,CAAC,mBAAmB;YAC5C,gBAAgB,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC;YACpF,QAAQ,EAAE,IAAI,CAAC,SAAS,KAAK,IAAI;YACjC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI;YAC5E,SAAS,EAAE,IAAI,CAAC,UAAU;YAC1B,OAAO,EAAE,IAAI,CAAC,QAAQ;YACtB,aAAa,EAAE,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI;SAC9E,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,SAAS,CAAC,UAAkB;QAC1B,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;QAC5C,IAAI,UAAU,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC1C,qFAAqF;YACrF,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;YACrB,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;QAC3B,CAAC;QACD,IAAI,IAAI,CAAC,SAAS;YAAE,OAAO,IAAI,CAAC,SAAS,CAAC;QAC1C,IAAI,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,cAAc;YAAE,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;QAChE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE;YACrD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACxB,CAAC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAEO,KAAK,CAAC,OAAO,CAAC,UAAkB;QACtC,IAAI,WAAW,GAA2B,IAAI,CAAC;QAC/C,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC;YAClC,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC;YACrF,MAAM,SAAS,GAAG,IAAI,CAAC,mBAAmB,GAAG,SAAS,CAAC;YACvD,IAAI,SAAS,GAAG,0BAA0B,EAAE,CAAC;gBAC3C,2DAA2D;gBAC3D,IAAI,CAAC,cAAc,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,MAAM,CAAC;gBAC9D,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,UAAU,EAAE,WAAW,WAAW,CAAC,SAAS,EAAE,CAAC,CAAC,8BAA8B,WAAW,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;gBACnJ,OAAO;YACT,CAAC;YACD,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACnE,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/F,IAAI,MAAM,GAAG,0BAA0B,EAAE,CAAC;gBACxC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,0BAA0B,CAAC;gBAC/D,IAAI,CAAC,KAAK,CAAC,mBAAmB,EAAE,UAAU,EAAE,gBAAgB,WAAW,CAAC,WAAW,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;gBAChG,OAAO;YACT,CAAC;YACD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC;YACrD,IAAI,UAAU,GAAG,OAAO,EAAE,CAAC;gBACzB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,0BAA0B,CAAC;gBAC/D,IAAI,CAAC,KAAK,CAAC,kBAAkB,EAAE,UAAU,EAAE,yBAAyB,WAAW,CAAC,OAAO,CAAC,sBAAsB,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;gBAC7I,OAAO;YACT,CAAC;YACD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACnD,MAAM,MAAM,GAAG,CAAC,QAAQ,GAAG,CAAC,MAAO,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,MAAO,CAAC;YACpE,QAAQ,CAAC,eAAe,IAAI,CAAC,QAAQ,OAAO,WAAW,CAAC,UAAU,CAAC,kBAAkB,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,cAAc,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YACtJ,6GAA6G;YAC7G,MAAM,OAAO,GAAoB,EAAE,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YAC9G,IAAI,CAAC,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;YACjD,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;YAC1C,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,0FAA0F;gBAC1F,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,OAAO,CAAC,CAAC;gBACnE,MAAM,IAAI,KAAK,CAAC,+DAA+D,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;YAC7H,CAAC;YACD,WAAW,GAAG,OAAO,CAAC;YACtB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YACxD,MAAM,MAAM,GAAoB,EAAE,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,CAAC;YAC1F,IAAI,CAAC,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,WAAW,CAAC,EAAE,MAAM,CAAC,CAAC;YACzF,WAAW,GAAG,IAAI,CAAC;YACnB,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;YACtB,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;YACnB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;YACvB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;YACrB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,0BAA0B,CAAC;YAC/D,KAAK,IAAI,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC,CAAC;QAChH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,mGAAmG;YACnG,8FAA8F;YAC9F,IAAI,WAAW,IAAI,qBAAqB,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC9C,MAAM,OAAO,GAAG,WAAW,CAAC;gBAC5B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,OAAO,CAAC,CAAC;gBACnE,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;YACxB,CAAC;YACD,MAAM,KAAK,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC/D,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC;YACpB,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,qBAAqB,EAAE,yBAAyB,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC;YACvG,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,OAAO,CAAC;YAC5C,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;YACxB,SAAS,CAAC,eAAe,IAAI,CAAC,QAAQ,mBAAmB,KAAK,EAAE,CAAC,CAAC;YAClE,KAAK,IAAI,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;QACjH,CAAC;IACH,CAAC;IAED,wGAAwG;IAChG,KAAK,CAAC,QAAQ,CAAC,UAAkC,EAAE;QACzD,IAAI,CAAC,IAAI,CAAC,YAAY;YAAE,OAAO;QAC/B,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC9C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,OAAO,CAAC,QAAQ;gBAAE,MAAM,GAAG,CAAC;YAChC,SAAS,CAAC,8CAA8C,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;QACtG,CAAC;IACH,CAAC;IAED,0EAA0E;IAClE,KAAK,CAAC,MAA2B,EAAE,UAAkB,EAAE,MAAc;QAC3E,IAAI,IAAI,CAAC,QAAQ,KAAK,MAAM;YAAE,OAAO;QACrC,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC;QACvB,QAAQ,CAAC,eAAe,IAAI,CAAC,QAAQ,oBAAoB,MAAM,MAAM,MAAM,EAAE,CAAC,CAAC;QAC/E,KAAK,IAAI,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC;IAC7F,CAAC;IAEO,KAAK,CAAC,KAAK,CAAC,KAAqB;QACvC,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,OAAO;QAC5C,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,SAAS,CAAC,+BAA+B,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;QACvF,CAAC;IACH,CAAC;CACF;AAED,8EAA8E;AAC9E,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAC,CAAC,oBAAoB,EAAE,eAAe,EAAE,yBAAyB,CAAC,CAAC,CAAC;AAExG;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CAAC,GAAY;IAChD,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,GAAG,IAAI,EAAE,CAA0C,CAAC;IAC/E,OAAO,IAAI,KAAK,gBAAgB;WAC3B,CAAC,OAAO,IAAI,KAAK,QAAQ,IAAI,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;WAC3D,OAAO,KAAK,qCAAqC,CAAC;AACzD,CAAC"}
@@ -49,6 +49,8 @@ export interface GasHealthMonitorConfig {
49
49
  * `node.pauseAdvertising(...)` / `node.resumeAdvertising()`).
50
50
  */
51
51
  onChange?: (event: GasHealthEvent) => void | Promise<void>;
52
+ /** Invoked with every successful reading (e.g. `GasAutoRefueler.onBalance`). */
53
+ onBalance?: (balanceWei: bigint) => void | Promise<void>;
52
54
  }
53
55
  /**
54
56
  * Periodically reads the seller wallet's ETH balance and reports when it drops
@@ -70,6 +72,7 @@ export declare class GasHealthMonitor {
70
72
  private readonly _relaxedBalanceFactor;
71
73
  private readonly _minBalanceWei;
72
74
  private readonly _onChange;
75
+ private readonly _onBalance;
73
76
  private _timer;
74
77
  private _stopped;
75
78
  private _checkInFlight;
@@ -87,6 +90,7 @@ export declare class GasHealthMonitor {
87
90
  /** Read the balance once and emit a change event on a threshold crossing. */
88
91
  checkNow(): Promise<void>;
89
92
  private _check;
93
+ private _notifyBalance;
90
94
  private _emitChange;
91
95
  }
92
96
  //# sourceMappingURL=gas-health-monitor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"gas-health-monitor.d.ts","sourceRoot":"","sources":["../../src/health/gas-health-monitor.ts"],"names":[],"mappings":"AAGA,gFAAgF;AAChF,eAAO,MAAM,6BAA6B,QAAS,CAAC;AACpD;;;;;GAKG;AACH,eAAO,MAAM,2BAA2B,kBAAsB,CAAC;AAC/D,iDAAiD;AACjD,eAAO,MAAM,qCAAqC,QAAa,CAAC;AAChE,0HAA0H;AAC1H,eAAO,MAAM,6BAA6B,IAAI,CAAC;AAC/C,2GAA2G;AAC3G,eAAO,MAAM,sBAAsB,MAAM,CAAC;AAE1C,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,UAAU,GAAG,UAAU,CAAC;IAChC,+EAA+E;IAC/E,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;IAClB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,sBAAsB;IACrC,+EAA+E;IAC/E,OAAO,EAAE,MAAM,CAAC;IAChB,8EAA8E;IAC9E,UAAU,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACjD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,2FAA2F;IAC3F,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B;;;;OAIG;IACH,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5D;AAED;;;;;;;;;;;GAWG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAuC;IACnE,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAS;IAC5C,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAS;IAC/C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAqC;IAC/D,OAAO,CAAC,MAAM,CAA+C;IAC7D,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,cAAc,CAA8B;IACpD,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,cAAc,CAAuB;gBAEjC,MAAM,EAAE,sBAAsB;IAU1C,uEAAuE;IACvE,KAAK,IAAI,IAAI;IAYb,IAAI,IAAI,IAAI;IASZ,OAAO,CAAC,QAAQ;IAIhB,mEAAmE;IACnE,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED,WAAW,IAAI,iBAAiB;IAUhC,6EAA6E;IACvE,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;YAQjB,MAAM;IAwBpB,OAAO,CAAC,WAAW;CAiBpB"}
1
+ {"version":3,"file":"gas-health-monitor.d.ts","sourceRoot":"","sources":["../../src/health/gas-health-monitor.ts"],"names":[],"mappings":"AAGA,gFAAgF;AAChF,eAAO,MAAM,6BAA6B,QAAS,CAAC;AACpD;;;;;GAKG;AACH,eAAO,MAAM,2BAA2B,kBAAsB,CAAC;AAC/D,iDAAiD;AACjD,eAAO,MAAM,qCAAqC,QAAa,CAAC;AAChE,0HAA0H;AAC1H,eAAO,MAAM,6BAA6B,IAAI,CAAC;AAC/C,2GAA2G;AAC3G,eAAO,MAAM,sBAAsB,MAAM,CAAC;AAE1C,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,UAAU,GAAG,UAAU,CAAC;IAChC,+EAA+E;IAC/E,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;IAClB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,sBAAsB;IACrC,+EAA+E;IAC/E,OAAO,EAAE,MAAM,CAAC;IAChB,8EAA8E;IAC9E,UAAU,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACjD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,2FAA2F;IAC3F,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B;;;;OAIG;IACH,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3D,gFAAgF;IAChF,SAAS,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1D;AAED;;;;;;;;;;;GAWG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAuC;IACnE,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAS;IAC5C,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAS;IAC/C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAqC;IAC/D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAsC;IACjE,OAAO,CAAC,MAAM,CAA+C;IAC7D,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,cAAc,CAA8B;IACpD,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,cAAc,CAAuB;gBAEjC,MAAM,EAAE,sBAAsB;IAW1C,uEAAuE;IACvE,KAAK,IAAI,IAAI;IAYb,IAAI,IAAI,IAAI;IASZ,OAAO,CAAC,QAAQ;IAIhB,mEAAmE;IACnE,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED,WAAW,IAAI,iBAAiB;IAUhC,6EAA6E;IACvE,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;YAQjB,MAAM;YAyBN,cAAc;IAS5B,OAAO,CAAC,WAAW;CAiBpB"}
@@ -35,6 +35,7 @@ export class GasHealthMonitor {
35
35
  _relaxedBalanceFactor;
36
36
  _minBalanceWei;
37
37
  _onChange;
38
+ _onBalance;
38
39
  _timer = null;
39
40
  _stopped = false;
40
41
  _checkInFlight = null;
@@ -49,6 +50,7 @@ export class GasHealthMonitor {
49
50
  this._minBalanceWei = config.minBalanceWei ?? DEFAULT_MIN_GAS_BALANCE_WEI;
50
51
  this._relaxedBalanceFactor = config.relaxedBalanceFactor ?? RELAXED_BALANCE_FACTOR;
51
52
  this._onChange = config.onChange;
53
+ this._onBalance = config.onBalance;
52
54
  }
53
55
  /** Start periodic checks. The first check runs immediately (async). */
54
56
  start() {
@@ -111,6 +113,7 @@ export class GasHealthMonitor {
111
113
  return;
112
114
  this._lastBalanceWei = balanceWei;
113
115
  this._lastCheckedAt = Date.now();
116
+ void this._notifyBalance(balanceWei);
114
117
  const depleted = balanceWei < this._minBalanceWei;
115
118
  if (depleted === this._depleted)
116
119
  return;
@@ -122,6 +125,16 @@ export class GasHealthMonitor {
122
125
  minBalanceWei: this._minBalanceWei,
123
126
  });
124
127
  }
128
+ async _notifyBalance(balanceWei) {
129
+ if (!this._onBalance)
130
+ return;
131
+ try {
132
+ await this._onBalance(balanceWei);
133
+ }
134
+ catch (err) {
135
+ debugWarn(`[GasHealth] onBalance failed: ${err instanceof Error ? err.message : err}`);
136
+ }
137
+ }
125
138
  _emitChange(event) {
126
139
  debugLog(`[GasHealth] ${event.address} ${event.status} `
127
140
  + `(${formatEther(event.balanceWei)} ETH, minimum ${formatEther(event.minBalanceWei)} ETH)`);
@@ -1 +1 @@
1
- {"version":3,"file":"gas-health-monitor.js","sourceRoot":"","sources":["../../src/health/gas-health-monitor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"gas-health-monitor.js","sourceRoot":"","sources":["../../src/health/gas-health-monitor.ts"],"names":[],"mappings":"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"}