@valve-tech/gas-oracle 0.5.0 → 0.6.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.
package/CHANGELOG.md CHANGED
@@ -5,6 +5,84 @@ All notable changes to `@valve-tech/gas-oracle` are documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/).
7
7
 
8
+ ## [0.6.0] — 2026-05-05
9
+
10
+ ### Added
11
+
12
+ - **`source?: ChainSource` on `CreateGasOracleOptions`.** New
13
+ preferred construction shape: build a `ChainSource` once and share
14
+ it across multiple consumers (gas-oracle, tx-tracker, future
15
+ derived views). One upstream poll cycle feeds every attached
16
+ consumer; the consumer that constructed the source owns its
17
+ lifecycle. `oracle.start()` / `oracle.stop()` only attach and
18
+ detach the oracle's own subscribers — they do **not** start or
19
+ stop a source the consumer handed in. See
20
+ [`docs/tx-tracker-spec.md`](https://github.com/valve-tech/evm-toolkit/blob/main/docs/tx-tracker-spec.md)
21
+ §3.3 for the design.
22
+ - **`@valve-tech/chain-source` is now a workspace dependency.** The
23
+ oracle internally consumes ChainSource for its block + mempool
24
+ streams and on-demand RPC passthroughs.
25
+
26
+ ### Changed
27
+
28
+ - **`client?` is now optional alongside `source?`; exactly one must
29
+ be provided.** Existing v0.5.x call sites passing `client` work
30
+ unchanged — internally the oracle constructs a private
31
+ `ChainSource` and owns its lifecycle (start/stop is symmetric).
32
+ Passing both throws at construction. Passing neither throws.
33
+ - **The poll cycle is now subscribe-driven.** Internally the oracle
34
+ attaches to `source.subscribeBlocks` / `source.subscribeMempool`;
35
+ on each new block emit it fetches `eth_feeHistory` on demand and
36
+ reduces. Mempool snapshots arrive via the source's own tick.
37
+ Consumer-visible state shape and update timing match v0.5.x for
38
+ the `client` path; the per-tick RPC pattern shifts (see Notes).
39
+ - **Block-gated polling now lives at the source layer.** The
40
+ efficiency win (skip the expensive full-block fetch when the head
41
+ hasn't moved) is implemented in `@valve-tech/chain-source`'s tick
42
+ via head-probe gating, so every consumer benefits — not just
43
+ gas-oracle.
44
+
45
+ ### Deprecated
46
+
47
+ - **`CreateGasOracleOptions.blockGatedPolling`** is now a no-op.
48
+ Block-gated polling is unconditional at the source layer (see
49
+ Changed); passing `false` no longer disables it, and passing
50
+ `true` matches the always-on behavior. The option is retained for
51
+ backward compatibility with v0.5.x call sites and may be removed
52
+ in a future major.
53
+
54
+ ### Notes
55
+
56
+ - **Per-tick RPC pattern shift in `client` mode.** v0.5.0 with
57
+ `blockGatedPolling: true` (default) ran one `eth_blockNumber`
58
+ probe per tick and fanned out the full cycle (block + feeHistory
59
+ + mempool) only on head change. The migrated oracle's private
60
+ source runs one probe + one mempool fetch per tick (mempool is
61
+ intentionally not gated — txs come and go between blocks), then
62
+ fetches block + feeHistory on head change. Net effect on a
63
+ static head: 1 extra `txpool_content` per tick relative to v0.5.0
64
+ (mempool stats stay fresh between blocks rather than going stale
65
+ until the head moves). Consumer-visible state shape is identical.
66
+ - **Mempool freshness improved.** Previously, gas-oracle's reducer
67
+ used the mempool snapshot fetched in the same cycle as the block,
68
+ with `null` when that fetch failed. The migrated reducer uses
69
+ the most recent successful mempool snapshot — when the upstream
70
+ intermittently gates `txpool_content`, the oracle now uses the
71
+ last good snapshot rather than dropping mempool stats entirely.
72
+ - **`pollOnce` continues to bypass head-probe gating.** It uses
73
+ `source.getBlock`, `source.getFeeHistory`, and
74
+ `source.getMempoolSnapshot` directly, so two `pollOnce()` calls
75
+ on the same head still produce two reduces (matching v0.5.x's
76
+ "force fresh sample" semantic).
77
+ - **Consumer-visible API is unchanged otherwise.** All other
78
+ `CreateGasOracleOptions` fields (`pauseWhenIdle`, `staleAfter`,
79
+ `pauseWhenHidden`, `keepMempoolSnapshot`, `priorityFeeDecayCap`,
80
+ `priorityModel`, `baseFeeLivenessBlocks`, `poll`) work the same
81
+ way. Public exports (`fetchOracleInputs`, `fetchHeadBlockNumber`,
82
+ `normalizeMempool`, etc.) are unchanged — `sampleGasFees` still
83
+ uses `fetchOracleInputs` for one-shot snapshots without standing
84
+ up a long-lived source.
85
+
8
86
  ## [0.5.0] — 2026-05-05
9
87
 
10
88
  ### Notes
package/dist/oracle.d.ts CHANGED
@@ -11,21 +11,50 @@
11
11
  * process, instantiate many oracles. They don't share any state.
12
12
  */
13
13
  import type { PublicClient } from 'viem';
14
+ import { type ChainSource, type NormalizedMempool } from '@valve-tech/chain-source';
14
15
  import { type OraclePollInputs } from './transport.js';
15
- import { type NormalizedMempool } from './mempool.js';
16
16
  import type { GasOracleState, PollOptions, PriorityModel } from './types.js';
17
17
  export interface CreateGasOracleOptions {
18
- /** viem PublicClient pointed at the upstream RPC for this chain. */
19
- client: PublicClient;
18
+ /**
19
+ * Pre-built `ChainSource`. Preferred for new code: lets multiple
20
+ * derived views (gas-oracle, tx-tracker, …) share one upstream poll
21
+ * cycle. The consumer that constructed the source owns its
22
+ * lifecycle — `oracle.start()` / `oracle.stop()` only attach and
23
+ * detach the oracle's own subscribers; they do NOT start or stop
24
+ * the source.
25
+ *
26
+ * Exactly one of `source` or `client` must be provided. Passing
27
+ * both throws at construction.
28
+ */
29
+ source?: ChainSource;
30
+ /**
31
+ * viem PublicClient pointed at the upstream RPC for this chain.
32
+ * Backward-compat shorthand: when provided, the oracle constructs
33
+ * a private `ChainSource` internally and owns its lifecycle
34
+ * (`start()` starts the source, `stop()` stops it). Existing v0.5.x
35
+ * call sites work unchanged.
36
+ *
37
+ * Exactly one of `source` or `client` must be provided.
38
+ */
39
+ client?: PublicClient;
20
40
  /** EVM chain ID. Echoed back in `state.chainId`; not validated. */
21
41
  chainId: number;
22
- /** Polling interval in ms. Default 10_000. */
42
+ /**
43
+ * Polling interval in ms. Default 10_000. Only consulted when the
44
+ * oracle is constructing its own private `ChainSource` (i.e. when
45
+ * `client` is provided). When a `source` is provided, the source's
46
+ * own poll interval governs.
47
+ */
23
48
  pollIntervalMs?: number;
24
49
  /**
25
50
  * Optional error sink. Called for each sub-RPC that fails inside a
26
51
  * poll cycle. Default behavior is to swallow — the oracle keeps running
27
52
  * on partial data. Useful for routing failures into a debug logger or
28
53
  * a metrics counter.
54
+ *
55
+ * When the oracle owns a private `ChainSource` (i.e. `client` mode),
56
+ * this sink is forwarded to the source so RPC errors at the upstream
57
+ * layer surface here too.
29
58
  */
30
59
  onError?: (method: string, err: unknown) => void;
31
60
  /**
@@ -101,20 +130,14 @@ export interface CreateGasOracleOptions {
101
130
  */
102
131
  staleAfter?: number;
103
132
  /**
104
- * When `true` (default), each tick first fires a cheap
105
- * `eth_blockNumber` probe. If the head hasn't moved since the
106
- * previous tick, the rest of the cycle is skipped no expensive
107
- * `eth_getBlockByNumber(_, true)` / `eth_feeHistory` /
108
- * `txpool_content`. The fee landscape can't change without a new
109
- * block, so polling faster than block time is wasted RPC.
110
- *
111
- * For chains with sub-second blocks (some L2s), this is a no-op
112
- * because the head moves every tick anyway. For PulseChain (~10s)
113
- * and Ethereum (12s) on a 10s poll interval, this collapses ~90%
114
- * of ticks down to a single probe call.
115
- *
116
- * `pollOnce()` always bypasses the gate — explicit out-of-band
117
- * polls fire the full cycle.
133
+ * @deprecated v0.6.0 block-gated polling now lives in
134
+ * `@valve-tech/chain-source` itself, via head-probe gating in its
135
+ * tick. The option is retained for backward compatibility but is a
136
+ * no-op: passing `false` no longer disables gating, and passing
137
+ * `true` is the always-on behavior at the source layer. The
138
+ * efficiency win (skip the expensive full-block fetch when the head
139
+ * hasn't moved) now benefits every consumer of `ChainSource` — not
140
+ * just gas-oracle so the gate moved down a layer.
118
141
  */
119
142
  blockGatedPolling?: boolean;
120
143
  /**
@@ -180,7 +203,9 @@ export declare const reducePollInputs: (input: {
180
203
  /**
181
204
  * Build a configured oracle. Nothing happens until you call `start()`.
182
205
  *
183
- * @example
206
+ * Two construction shapes — pick one:
207
+ *
208
+ * // v0.5.x backward-compat: oracle owns a private ChainSource.
184
209
  * import { createPublicClient, http } from 'viem'
185
210
  * import { mainnet } from 'viem/chains'
186
211
  * import { createGasOracle } from '@valve-tech/gas-oracle'
@@ -190,6 +215,14 @@ export declare const reducePollInputs: (input: {
190
215
  * oracle.subscribe((state) => publishToRedis(state))
191
216
  * oracle.start()
192
217
  *
218
+ * // v0.6.0+: share a ChainSource with other consumers (e.g. tx-tracker).
219
+ * import { createChainSource } from '@valve-tech/chain-source'
220
+ *
221
+ * const source = createChainSource({ client })
222
+ * const oracle = createGasOracle({ source, chainId: 1 })
223
+ * const tracker = createTxTracker({ source, chainId: 1 }) // future
224
+ * source.start(); oracle.start(); tracker.start()
225
+ *
193
226
  * // Later — sub-ms read, no RPC:
194
227
  * const tier = oracle.getState()?.tiers.standard
195
228
  */
@@ -1 +1 @@
1
- {"version":3,"file":"oracle.d.ts","sourceRoot":"","sources":["../src/oracle.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"oracle.d.ts","sourceRoot":"","sources":["../src/oracle.ts"],"names":[],"mappings":"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"}
package/dist/oracle.js CHANGED
@@ -10,9 +10,9 @@
10
10
  * One oracle instance per chain. If you need many chains in one
11
11
  * process, instantiate many oracles. They don't share any state.
12
12
  */
13
- import { fetchHeadBlockNumber, fetchOracleInputs, } from './transport.js';
13
+ import { createChainSource, } from '@valve-tech/chain-source';
14
+ import { fetchOracleInputs } from './transport.js';
14
15
  import { computeBlobBaseFee, computeTiers, detectTrend, flattenTxPool, } from './math.js';
15
- import { normalizeMempool } from './mempool.js';
16
16
  import { blockToSample, mempoolToSamples } from './samples.js';
17
17
  const DEFAULT_POLL_INTERVAL_MS = 10000;
18
18
  const TREND_WINDOW = 5;
@@ -113,7 +113,9 @@ export const reducePollInputs = (input) => {
113
113
  /**
114
114
  * Build a configured oracle. Nothing happens until you call `start()`.
115
115
  *
116
- * @example
116
+ * Two construction shapes — pick one:
117
+ *
118
+ * // v0.5.x backward-compat: oracle owns a private ChainSource.
117
119
  * import { createPublicClient, http } from 'viem'
118
120
  * import { mainnet } from 'viem/chains'
119
121
  * import { createGasOracle } from '@valve-tech/gas-oracle'
@@ -123,12 +125,33 @@ export const reducePollInputs = (input) => {
123
125
  * oracle.subscribe((state) => publishToRedis(state))
124
126
  * oracle.start()
125
127
  *
128
+ * // v0.6.0+: share a ChainSource with other consumers (e.g. tx-tracker).
129
+ * import { createChainSource } from '@valve-tech/chain-source'
130
+ *
131
+ * const source = createChainSource({ client })
132
+ * const oracle = createGasOracle({ source, chainId: 1 })
133
+ * const tracker = createTxTracker({ source, chainId: 1 }) // future
134
+ * source.start(); oracle.start(); tracker.start()
135
+ *
126
136
  * // Later — sub-ms read, no RPC:
127
137
  * const tier = oracle.getState()?.tiers.standard
128
138
  */
129
139
  export const createGasOracle = (options) => {
130
- // Validate at the boundary so misconfigured callers fail fast rather
131
- // than producing silently-wrong tier numbers later.
140
+ // Validate exactly-one of source/client at the boundary. Misconfigured
141
+ // callers fail fast at construction rather than producing silently
142
+ // bad behavior at run time.
143
+ const hasSource = options.source !== undefined;
144
+ const hasClient = options.client !== undefined;
145
+ if (hasSource && hasClient) {
146
+ throw new Error('createGasOracle: pass exactly one of `source` or `client`, not both. ' +
147
+ 'Use `source` to share an upstream poll cycle with other consumers; ' +
148
+ 'use `client` for the v0.5.x backward-compat shorthand (oracle constructs a private source).');
149
+ }
150
+ if (!hasSource && !hasClient) {
151
+ throw new Error('createGasOracle: pass exactly one of `source` or `client`. ' +
152
+ 'Use `source` to share an upstream poll cycle with other consumers; ' +
153
+ 'use `client` for the v0.5.x backward-compat shorthand.');
154
+ }
132
155
  if (options.priorityFeeDecayCap !== undefined &&
133
156
  options.priorityFeeDecayCap !== null) {
134
157
  const cap = options.priorityFeeDecayCap;
@@ -143,14 +166,32 @@ export const createGasOracle = (options) => {
143
166
  const pollIntervalMs = options.pollIntervalMs ?? DEFAULT_POLL_INTERVAL_MS;
144
167
  const retainMempool = options.keepMempoolSnapshot === true;
145
168
  const pauseWhenIdle = options.pauseWhenIdle !== false;
146
- const blockGatedPolling = options.blockGatedPolling !== false;
147
169
  const staleAfter = options.staleAfter ?? 0;
148
170
  const pauseWhenHidden = options.pauseWhenHidden === true;
171
+ const fetchFeeHistoryEnabled = options.poll?.feeHistory !== false;
172
+ const fetchMempoolEnabled = options.poll?.mempool !== false;
173
+ // Adopt or construct the ChainSource. `ownsSource` controls whether
174
+ // the oracle's start/stop also drives the source's lifecycle — when
175
+ // a source was provided externally, the consumer manages it.
176
+ const ownsSource = !hasSource;
177
+ const source = options.source ??
178
+ createChainSource({
179
+ // hasClient is true when hasSource is false, by the validation above.
180
+ client: options.client,
181
+ pollIntervalMs,
182
+ poll: options.poll,
183
+ onError: options.onError,
184
+ });
149
185
  let state = null;
186
+ // Cached mempool snapshot powering `getMempoolSnapshot()` — populated
187
+ // only when `keepMempoolSnapshot` is on.
150
188
  let mempoolSnapshot = null;
151
- let timer = null;
189
+ // Latest mempool snapshot received from `source.subscribeMempool`.
190
+ // Used as input to the next reduce regardless of `keepMempoolSnapshot`.
191
+ let latestMempool = null;
192
+ let unsubBlocks = null;
193
+ let unsubMempool = null;
152
194
  let staleTimer = null;
153
- let lastSeenBlock = null;
154
195
  let started = false;
155
196
  let visibilityListener = null;
156
197
  const subscribers = new Set();
@@ -162,14 +203,10 @@ export const createGasOracle = (options) => {
162
203
  catch { /* swallow per-subscriber errors */ }
163
204
  }
164
205
  };
165
- // The expensive cycle: full RPC fan-out + reduce + notify. Used
166
- // unconditionally by `pollOnce()` and as the second step of the
167
- // tick when block-gating allows.
168
- const fullCycle = async () => {
169
- const inputs = await fetchOracleInputs(options.client, {
170
- onError: options.onError,
171
- poll: options.poll,
172
- });
206
+ // Reduce a (block, feeHistory, mempool) tuple into the next state +
207
+ // notify. Shared between the subscribe-driven path (timer ticks) and
208
+ // the on-demand path (`pollOnce`).
209
+ const reduceAndPublish = (inputs) => {
173
210
  const next = reducePollInputs({
174
211
  inputs,
175
212
  chainId: options.chainId,
@@ -180,65 +217,73 @@ export const createGasOracle = (options) => {
180
217
  });
181
218
  if (next) {
182
219
  state = next;
183
- lastSeenBlock = next.blockNumber;
184
- if (retainMempool) {
185
- // Re-normalize each cycle. `inputs.txPool` is null when the
186
- // mempool RPC is gated/disabled — store an empty snapshot
187
- // rather than leaving stale data from a prior cycle around.
188
- mempoolSnapshot = normalizeMempool(inputs.txPool);
189
- }
190
220
  notify(next);
191
221
  }
192
222
  return next;
193
223
  };
194
- // The interval-driven cycle. Cheap-probes the head block first;
195
- // skips the expensive bits when the head hasn't moved.
196
- const tickCycle = async () => {
197
- if (blockGatedPolling) {
198
- const head = await fetchHeadBlockNumber(options.client, options.onError ? (err) => options.onError('eth_blockNumber', err) : undefined);
199
- if (head !== null && lastSeenBlock !== null && head === lastSeenBlock) {
200
- // Head hasn't moved — no fee-landscape change is possible.
201
- // Skip the expensive cycle. State and subscribers are
202
- // unchanged from the previous tick.
203
- return state;
204
- }
205
- // head === null (probe failed) falls through to fullCycle —
206
- // we'd rather pay one extra cycle than block on a flaky
207
- // upstream that can't even report `eth_blockNumber`.
224
+ // Block-event handler. Fires once per de-duped block emit from the
225
+ // source. Fetches feeHistory on demand (so a static head doesn't
226
+ // re-fetch it), then reduces with the most recent mempool snapshot.
227
+ const handleBlock = async (block) => {
228
+ const feeHistory = fetchFeeHistoryEnabled
229
+ ? await source.getFeeHistory(20, [10, 25, 50, 75, 90])
230
+ : null;
231
+ reduceAndPublish({ block, feeHistory, txPool: latestMempool });
232
+ };
233
+ // Mempool-event handler. Caches the latest snapshot for the next
234
+ // block reduce + powers `getMempoolSnapshot()` when retention is on.
235
+ const handleMempool = (snapshot) => {
236
+ latestMempool = snapshot;
237
+ if (retainMempool) {
238
+ mempoolSnapshot = snapshot;
208
239
  }
209
- return fullCycle();
210
240
  };
211
- const startLoop = () => {
212
- if (timer !== null)
241
+ const attachToSource = () => {
242
+ if (unsubBlocks !== null)
213
243
  return;
244
+ unsubBlocks = source.subscribeBlocks((b) => {
245
+ void handleBlock(b);
246
+ });
247
+ unsubMempool = source.subscribeMempool(handleMempool);
248
+ // Start the source's poll loop when we own it. This is gated on
249
+ // attach (not on `oracle.start()`) so `pauseWhenIdle` truly
250
+ // suppresses RPC traffic — no consumers means no polling. Source
251
+ // start/stop is idempotent so subscribe → unsubscribe → subscribe
252
+ // cycles are safe.
253
+ if (ownsSource)
254
+ source.start();
214
255
  if (staleTimer !== null) {
215
256
  clearTimeout(staleTimer);
216
257
  staleTimer = null;
217
258
  }
218
- // Fire-and-forget the first cycle so callers don't block on RPC
219
- // latency. The interval picks up from there.
220
- void tickCycle();
221
- timer = setInterval(() => { void tickCycle(); }, pollIntervalMs);
222
259
  };
223
- const pauseLoop = () => {
224
- if (timer !== null) {
225
- clearInterval(timer);
226
- timer = null;
260
+ const detachFromSource = () => {
261
+ if (unsubBlocks !== null) {
262
+ unsubBlocks();
263
+ unsubBlocks = null;
264
+ }
265
+ if (unsubMempool !== null) {
266
+ unsubMempool();
267
+ unsubMempool = null;
227
268
  }
228
269
  if (staleTimer !== null) {
229
270
  clearTimeout(staleTimer);
230
271
  staleTimer = null;
231
272
  }
273
+ // Stop the private source when we detach. External sources stay
274
+ // running — other consumers may still need them.
275
+ if (ownsSource)
276
+ source.stop();
232
277
  };
233
- const scheduleIdlePause = () => {
278
+ const scheduleIdleDetach = () => {
234
279
  if (staleAfter <= 0) {
235
- pauseLoop();
280
+ detachFromSource();
236
281
  return;
237
282
  }
238
283
  if (staleTimer !== null)
239
284
  return;
240
285
  staleTimer = setTimeout(() => {
241
- pauseLoop();
286
+ detachFromSource();
242
287
  staleTimer = null;
243
288
  }, staleAfter);
244
289
  };
@@ -250,13 +295,13 @@ export const createGasOracle = (options) => {
250
295
  return;
251
296
  const listener = () => {
252
297
  if (documentRef.hidden) {
253
- pauseLoop();
298
+ detachFromSource();
254
299
  return;
255
300
  }
256
- // Tab became visible — resume if we have a reason to (no
257
- // subscriber-gating, OR subscribers are present).
301
+ // Tab became visible — re-attach if we have a reason to (no
302
+ // subscriber gating, OR subscribers are present).
258
303
  if (!pauseWhenIdle || subscribers.size > 0) {
259
- startLoop();
304
+ attachToSource();
260
305
  }
261
306
  };
262
307
  documentRef.addEventListener('visibilitychange', listener);
@@ -275,44 +320,67 @@ export const createGasOracle = (options) => {
275
320
  return;
276
321
  started = true;
277
322
  setupVisibilityHandling();
278
- // Only actually start the loop if (a) we don't gate on
279
- // subscribers, OR (b) there's already a subscriber attached
280
- // (rare but valid: subscribe before start). Visibility wins
281
- // over both never poll while hidden if pauseWhenHidden is on.
323
+ // Subscriber + visibility gating: attach our subscribers to the
324
+ // source only when there's a reason. Source.start() is driven
325
+ // from inside `attachToSource()` (when ownsSource), so a
326
+ // pauseWhenIdle oracle with no subscribers issues zero RPCs
327
+ // beyond the one-time capability probe.
282
328
  if (pauseWhenHidden && isHidden())
283
329
  return;
284
330
  if (!pauseWhenIdle || subscribers.size > 0) {
285
- startLoop();
331
+ attachToSource();
286
332
  }
287
333
  },
288
334
  stop: () => {
289
- pauseLoop();
335
+ // detachFromSource() also stops the private source when we own
336
+ // it — see attachToSource for the matching start. External
337
+ // sources stay running for other consumers.
338
+ detachFromSource();
290
339
  teardownVisibilityHandling();
291
340
  state = null;
292
341
  mempoolSnapshot = null;
293
- lastSeenBlock = null;
342
+ latestMempool = null;
294
343
  started = false;
295
344
  },
296
345
  getState: () => state,
297
346
  getMempoolSnapshot: () => mempoolSnapshot,
298
- // pollOnce explicitly bypasses block-gating caller asked for a
299
- // sample, give them a full one. State/lastSeenBlock are still
300
- // updated so the next tick can gate against this.
301
- pollOnce: () => fullCycle(),
347
+ // `pollOnce` forces a fresh reduce regardless of head-probe gating
348
+ // or block dedup at the source layer. Goes through the source's
349
+ // on-demand methods rather than `subscribeBlocks` because dedup
350
+ // would swallow a same-head pollOnce and never fire the subscriber.
351
+ pollOnce: async () => {
352
+ const block = await source.getBlock('latest');
353
+ if (!block)
354
+ return null;
355
+ const [feeHistory, freshMempool] = await Promise.all([
356
+ fetchFeeHistoryEnabled
357
+ ? source.getFeeHistory(20, [10, 25, 50, 75, 90])
358
+ : Promise.resolve(null),
359
+ fetchMempoolEnabled
360
+ ? source.getMempoolSnapshot()
361
+ : Promise.resolve(null),
362
+ ]);
363
+ latestMempool = freshMempool;
364
+ if (retainMempool) {
365
+ mempoolSnapshot = freshMempool;
366
+ }
367
+ return reduceAndPublish({ block, feeHistory, txPool: freshMempool });
368
+ },
302
369
  subscribe: (cb) => {
303
370
  subscribers.add(cb);
304
- // 0 → 1 transition: kick the loop awake (or cancel the
305
- // stale-after pause that was about to fire).
371
+ // 0 → 1 transition: re-attach to the source if subscriber-gating
372
+ // had us detached.
306
373
  if (started && pauseWhenIdle && subscribers.size === 1) {
307
374
  if (!pauseWhenHidden || !isHidden()) {
308
- startLoop();
375
+ attachToSource();
309
376
  }
310
377
  }
311
378
  return () => {
312
379
  subscribers.delete(cb);
313
- // n → 0 transition: schedule pause.
380
+ // n → 0 transition: schedule detach (immediate or after
381
+ // `staleAfter` window).
314
382
  if (started && pauseWhenIdle && subscribers.size === 0) {
315
- scheduleIdlePause();
383
+ scheduleIdleDetach();
316
384
  }
317
385
  };
318
386
  },
@@ -1 +1 @@
1
- {"version":3,"file":"oracle.js","sourceRoot":"","sources":["../src/oracle.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"oracle.js","sourceRoot":"","sources":["../src/oracle.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"viem-transport.d.ts","sourceRoot":"","sources":["../src/viem-transport.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,OAAO,EAAU,KAAK,SAAS,EAAE,MAAM,MAAM,CAAA;AAE7C,OAAO,EAAmB,KAAK,sBAAsB,EAAkB,MAAM,aAAa,CAAA;AAC1F,OAAO,KAAK,EAAkB,QAAQ,EAAsB,MAAM,YAAY,CAAA;AAE9E,MAAM,WAAW,gBAAgB;IAC/B;;;OAGG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B;;;;;OAKG;IACH,YAAY,CAAC,EAAE,QAAQ,GAAG,KAAK,CAAA;IAC/B;;;OAGG;IACH,wBAAwB,CAAC,EAAE,QAAQ,GAAG,KAAK,CAAA;CAC5C;AAED,MAAM,WAAW,oBAAqB,SAAQ,IAAI,CAAC,sBAAsB,EAAE,QAAQ,CAAC;IAClF;;;;OAIG;IACH,SAAS,CAAC,EAAE,gBAAgB,CAAA;IAC5B;;;;;OAKG;IACH,SAAS,CAAC,EAAE,OAAO,GAAG,MAAM,CAAA;CAC7B;AAED,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG;IAAE,aAAa,EAAE,MAAM,IAAI,CAAA;CAAE,CAAA;AA8G1E;;;;;;;;;;GAUG;AACH,eAAO,MAAM,aAAa,GACxB,gBAAgB,SAAS,EACzB,SAAS,oBAAoB,KAC5B,kBAiCF,CAAA"}
1
+ {"version":3,"file":"viem-transport.d.ts","sourceRoot":"","sources":["../src/viem-transport.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,OAAO,EAAU,KAAK,SAAS,EAAE,MAAM,MAAM,CAAA;AAE7C,OAAO,EAAmB,KAAK,sBAAsB,EAAkB,MAAM,aAAa,CAAA;AAC1F,OAAO,KAAK,EAAkB,QAAQ,EAAsB,MAAM,YAAY,CAAA;AAE9E,MAAM,WAAW,gBAAgB;IAC/B;;;OAGG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B;;;;;OAKG;IACH,YAAY,CAAC,EAAE,QAAQ,GAAG,KAAK,CAAA;IAC/B;;;OAGG;IACH,wBAAwB,CAAC,EAAE,QAAQ,GAAG,KAAK,CAAA;CAC5C;AAED,MAAM,WAAW,oBAAqB,SAAQ,IAAI,CAAC,sBAAsB,EAAE,QAAQ,CAAC;IAClF;;;;OAIG;IACH,SAAS,CAAC,EAAE,gBAAgB,CAAA;IAC5B;;;;;OAKG;IACH,SAAS,CAAC,EAAE,OAAO,GAAG,MAAM,CAAA;CAC7B;AAED,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG;IAAE,aAAa,EAAE,MAAM,IAAI,CAAA;CAAE,CAAA;AA8G1E;;;;;;;;;;GAUG;AACH,eAAO,MAAM,aAAa,GACxB,gBAAgB,SAAS,EACzB,SAAS,oBAAoB,KAC5B,kBAyCF,CAAA"}
@@ -146,7 +146,15 @@ export const withGasOracle = (innerTransport, options) => {
146
146
  // most built-in transports don't require a chain config for request
147
147
  // dispatch — chainId validation happens elsewhere.
148
148
  const oracleInner = innerTransport({});
149
- const oracleClient = { request: oracleInner.request };
149
+ // Expose `transport: oracleInner` so chain-source's structural
150
+ // capability probe (`typeof transport.subscribe === 'function'`)
151
+ // can see whether the inner transport supports WS subscriptions —
152
+ // a webSocket() transport carries `subscribe`, http() does not.
153
+ // Without `transport` here, the probe throws on construction.
154
+ const oracleClient = {
155
+ request: oracleInner.request,
156
+ transport: oracleInner,
157
+ };
150
158
  // viem-transport intercepts RPC methods, which is a pull-based
151
159
  // access pattern (state read inside the request handler). Default
152
160
  // `pauseWhenIdle: false` so the cache stays warm across intercepts
@@ -1 +1 @@
1
- {"version":3,"file":"viem-transport.js","sourceRoot":"","sources":["../src/viem-transport.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"viem-transport.js","sourceRoot":"","sources":["../src/viem-transport.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,OAAO,EAAE,MAAM,EAAkB,MAAM,MAAM,CAAA;AAE7C,OAAO,EAAE,eAAe,EAA+C,MAAM,aAAa,CAAA;AAyC1F;;;;;GAKG;AACH,MAAM,WAAW,GAAG,MAAM,CAAC,wBAAwB,CAAC,CAAA;AAEpD,MAAM,KAAK,GAAG,CAAC,CAAS,EAAU,EAAE,CAAC,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;AAE1D,MAAM,UAAU,GAAe,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,CAAA;AAEtE;;;;GAIG;AACH,MAAM,UAAU,GAAG,CACjB,IAAwB,EACxB,MAA0B,EACF,EAAE;IAC1B,IAAI,MAAM,KAAK,CAAC,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;QACjC,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAA;IAC3C,CAAC;IACD,IAAI,MAAM,KAAK,CAAC,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;QACjC,OAAO;YACL,YAAY,EAAE,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC;YACtC,oBAAoB,EAAE,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC;SACvD,CAAA;IACH,CAAC;IACD,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;QACjB,OAAO;YACL,YAAY,EAAE,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC;YACtC,oBAAoB,EAAE,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC;YACtD,gBAAgB,EAAE,KAAK,CAAC,IAAI,CAAC,gBAAgB,IAAI,EAAE,CAAC;SACrD,CAAA;IACH,CAAC;IACD,yCAAyC;IACzC,MAAM,GAAG,GAA2B;QAClC,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC;QAC9B,YAAY,EAAE,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC;QACtC,oBAAoB,EAAE,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC;KACvD,CAAA;IACD,IAAI,IAAI,CAAC,gBAAgB,KAAK,IAAI,EAAE,CAAC;QACnC,GAAG,CAAC,gBAAgB,GAAG,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;IACrD,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC,CAAA;AAED,MAAM,mBAAmB,GAAG,CAC1B,KAAqB,EACrB,MAAiB,EACQ,EAAE;IAC3B,MAAM,MAAM,GAAG,OAAO,MAAM,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IACpE,MAAM,KAAK,GAA2C,EAAE,CAAA;IACxD,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC9B,KAAK,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAA;IACrD,CAAC;IACD,MAAM,GAAG,GAA4B;QACnC,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC;QAC7B,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,WAAW,EAAE,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC;QACrC,WAAW,EAAE,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC;QACnC,mBAAmB,EAAE,KAAK,CAAC,OAAO,CAAC,YAAY;QAC/C,KAAK;KACN,CAAA;IACD,IAAI,KAAK,CAAC,IAAI;QAAE,GAAG,CAAC,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;IAC/D,OAAO,GAAG,CAAA;AACZ,CAAC,CAAA;AAED;;;;;GAKG;AACH,MAAM,iBAAiB,GAAG,KAAK,EAC7B,IAA4C,EAC5C,MAAiB,EACjB,SAA2B,EACY,EAAE;IACzC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,EAAE,CAAA;IAEhC,IAAI,IAAI,CAAC,MAAM,KAAK,oBAAoB,IAAI,SAAS,CAAC,kBAAkB,KAAK,KAAK,EAAE,CAAC;QACnF,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAA;QAC5D,IAAI,CAAC,KAAK;YAAE,OAAO,WAAW,CAAA;QAC9B,OAAO,mBAAmB,CAAC,KAAK,EAAE,MAAmB,CAAC,CAAA;IACxD,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,KAAK,cAAc,EAAE,CAAC;QACnC,MAAM,IAAI,GAAG,SAAS,CAAC,YAAY,CAAA;QACnC,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,KAAK;YAAE,OAAO,WAAW,CAAA;QAC5D,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAA;QAC5D,IAAI,CAAC,KAAK;YAAE,OAAO,WAAW,CAAA;QAC9B,OAAO,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAA;IAC1C,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,KAAK,0BAA0B,EAAE,CAAC;QAC/C,MAAM,IAAI,GAAG,SAAS,CAAC,wBAAwB,CAAA;QAC/C,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,KAAK;YAAE,OAAO,WAAW,CAAA;QAC5D,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAA;QAC5D,IAAI,CAAC,KAAK;YAAE,OAAO,WAAW,CAAA;QAC9B,OAAO,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,oBAAoB,CAAC,CAAA;IACtD,CAAC;IAED,OAAO,WAAW,CAAA;AACpB,CAAC,CAAA;AAED;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAC3B,cAAyB,EACzB,OAA6B,EACT,EAAE;IACtB,MAAM,SAAS,GAAqB;QAClC,kBAAkB,EAAE,IAAI;QACxB,GAAG,OAAO,CAAC,SAAS;KACrB,CAAA;IAED,wEAAwE;IACxE,oEAAoE;IACpE,mDAAmD;IACnD,MAAM,WAAW,GAAG,cAAc,CAAC,EAAE,CAAC,CAAA;IACtC,+DAA+D;IAC/D,iEAAiE;IACjE,kEAAkE;IAClE,gEAAgE;IAChE,8DAA8D;IAC9D,MAAM,YAAY,GAAG;QACnB,OAAO,EAAE,WAAW,CAAC,OAAO;QAC5B,SAAS,EAAE,WAAW;KACuC,CAAA;IAC/D,+DAA+D;IAC/D,kEAAkE;IAClE,mEAAmE;IACnE,kEAAkE;IAClE,MAAM,MAAM,GAAG,eAAe,CAAC;QAC7B,aAAa,EAAE,KAAK;QACpB,GAAG,OAAO;QACV,MAAM,EAAE,YAAY;KACrB,CAAC,CAAA;IACF,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,KAAK,OAAO;QAAE,MAAM,CAAC,KAAK,EAAE,CAAA;IAE9D,MAAM,OAAO,GAAG,MAAM,CAAC;QACrB,OAAO,EAAE,KAAK,EAAE,IAA4C,EAAE,EAAE;YAC9D,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,CAAA;YAC/D,IAAI,MAAM,KAAK,WAAW;gBAAE,OAAO,MAAM,CAAA;YACzC,+DAA+D;YAC/D,gEAAgE;YAChE,OAAO,WAAW,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAW,CAAC,CAAA;QACnF,CAAC;KACF,CAAC,CAAA;IAEF,OAAO,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;AACvE,CAAC,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@valve-tech/gas-oracle",
3
- "version": "0.5.0",
3
+ "version": "0.6.0",
4
4
  "description": "Multi-tier gas-fee oracle for EVM chains. Computes slow/standard/fast/instant tier recommendations from block-included tips, mempool pending tips, and base-fee trend, with a configurable downside-decay cap and a chain-aware EIP-1559 priority cutoff. viem-native — pass it a PublicClient and it does the rest. Ships viem-actions and viem-transport subpaths for drop-in client extension and transport-wrapping.",
5
5
  "license": "MIT",
6
6
  "homepage": "https://github.com/valve-tech/evm-toolkit/tree/main/packages/gas-oracle#readme",
@@ -58,6 +58,9 @@
58
58
  "test:coverage": "vitest run --coverage",
59
59
  "prepare": "yarn build"
60
60
  },
61
+ "dependencies": {
62
+ "@valve-tech/chain-source": "^0.6.0"
63
+ },
61
64
  "peerDependencies": {
62
65
  "viem": "^2.0.0"
63
66
  }