From a927a5649f3ad3931eae793a1cfe66c59d1fea41 Mon Sep 17 00:00:00 2001 From: Jim Hamill Date: Sun, 10 Aug 2025 02:23:09 +0000 Subject: [PATCH] Emit Oracle Price Message in Rates Adapter --- packages/stack/src/rates/base-rates.ts | 4 +++- packages/stack/src/rates/rates-oracle.ts | 12 ++++++++++-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/packages/stack/src/rates/base-rates.ts b/packages/stack/src/rates/base-rates.ts index 49d23d5..e7d8c86 100644 --- a/packages/stack/src/rates/base-rates.ts +++ b/packages/stack/src/rates/base-rates.ts @@ -11,7 +11,9 @@ export type RatesEventMap = { }; }; -export abstract class BaseRates extends EventEmitter { +export abstract class BaseRates< + T extends RatesEventMap = RatesEventMap, +> extends EventEmitter { /** Starts the given rates adapter so that it will emit events on price updates. */ public abstract start(): Promise; diff --git a/packages/stack/src/rates/rates-oracle.ts b/packages/stack/src/rates/rates-oracle.ts index 24b06ec..19bb8eb 100644 --- a/packages/stack/src/rates/rates-oracle.ts +++ b/packages/stack/src/rates/rates-oracle.ts @@ -5,10 +5,17 @@ import { OraclePriceMessage, } from '@generalprotocols/oracle-client'; -import { BaseRates } from './index.js'; +import { type RatesEventMap, BaseRates } from './index.js'; + +// Add the Oracle Price Message to our Events for this Adapter. +export type RatesOracleEventMap = RatesEventMap & { + rateUpdated: { + oraclePriceMessage: OraclePriceMessage; + }; +}; // TODO: Add RatesHistorical trait since Oracles can provide historical rates. -export class RatesOracle extends BaseRates { +export class RatesOracle extends BaseRates { /** * Create a new rates oracle. * @@ -153,6 +160,7 @@ export class RatesOracle extends BaseRates { numeratorUnitCode: oracle.SOURCE_NUMERATOR_UNIT_CODE, denominatorUnitCode: oracle.SOURCE_DENOMINATOR_UNIT_CODE, price: priceValue, + oraclePriceMessage: message, }); } }