From 6cf2cceb4c66b64b52ff9546a99ac481cfbed168 Mon Sep 17 00:00:00 2001 From: Jim Hamill Date: Wed, 30 Apr 2025 06:27:53 +0000 Subject: [PATCH] fix(Rates): Various fixes --- packages/stack/src/rates/rates-bitpay.ts | 6 +++--- packages/stack/src/rates/rates-coinbase.ts | 5 ++--- packages/stack/src/rates/rates-composite.ts | 8 ++++---- 3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/packages/stack/src/rates/rates-bitpay.ts b/packages/stack/src/rates/rates-bitpay.ts index 10c6506..ad72c97 100644 --- a/packages/stack/src/rates/rates-bitpay.ts +++ b/packages/stack/src/rates/rates-bitpay.ts @@ -32,7 +32,7 @@ export class RatesBitPay extends BaseRates { // Default to 60 second refresh. refreshIntervalMs: 60_000, // Default to browser/node fetch function - fetch: fetch, + fetch: (...args) => globalThis.fetch(...args), // Merge any user-specified options in. ...opts, }; @@ -98,7 +98,7 @@ export class RatesBitPay extends BaseRates { : `${this.opts.baseURL}/rates/${cryptoCode.toLowerCase()}`; // Fetch from BitPay API - const ratesRes = await this.opts.fetch(endpoint, {}); + const ratesRes = await this.opts.fetch(endpoint); // If request failed, throw an error if (!ratesRes.ok) { @@ -170,7 +170,7 @@ export type RatesBitPayOptions = { /** * Optional fetch-like function (e.g. global fetch) for HTTP calls. */ - fetch: (url: string, options: RequestInit) => Promise; + fetch: (url: string, options?: RequestInit) => Promise; }; // The rates payload schema we receive from BitPay's API. diff --git a/packages/stack/src/rates/rates-coinbase.ts b/packages/stack/src/rates/rates-coinbase.ts index 801ae00..1656afb 100644 --- a/packages/stack/src/rates/rates-coinbase.ts +++ b/packages/stack/src/rates/rates-coinbase.ts @@ -32,7 +32,7 @@ export class RatesCoinbase extends BaseRates { // Default to 60 second refresh. refreshIntervalMs: 60_000, // Default to browser/node fetch function - fetch: fetch, + fetch: (...args) => globalThis.fetch(...args), // Merge any user-specified options in. ...opts, }; @@ -101,7 +101,6 @@ export class RatesCoinbase extends BaseRates { // Fetch from Coinbase API. const priceRes = await this.opts.fetch( `${this.opts.baseURL}/v2/exchange-rates?currency=${currencyCode}`, - {}, ); // If request failed, throw an error. @@ -163,7 +162,7 @@ export type RatesCoinbaseOptions = { /** * Optional fetch-like function (e.g. global fetch) for HTTP calls. */ - fetch: (url: string, options: RequestInit) => Promise; + fetch: (url: string, options?: RequestInit) => Promise; }; // The rates payload schema we receive from Coinbase's API. diff --git a/packages/stack/src/rates/rates-composite.ts b/packages/stack/src/rates/rates-composite.ts index 383e8de..58b6f90 100644 --- a/packages/stack/src/rates/rates-composite.ts +++ b/packages/stack/src/rates/rates-composite.ts @@ -24,7 +24,7 @@ export class RatesComposite extends BaseRates { constructor( private adapters: BaseRates[], private policy: RatesCompositePolicy = ratesAveragePolicy, - private refreshIntervalMs: number = 1000, + private refreshIntervalMs: number = 60000, ) { super(); @@ -36,9 +36,6 @@ export class RatesComposite extends BaseRates { * Start all rate adapters and setup event listeners */ public async start(): Promise { - // Start all adapters - await Promise.all(this.adapters.map((adapter) => adapter.start())); - // Setup event listeners for all adapters for (let i = 0; i < this.adapters.length; i++) { const adapter = this.adapters[i]; @@ -59,6 +56,9 @@ export class RatesComposite extends BaseRates { this.unsubscribeFunctions.push(unsubscribe); } + // Start all adapters + await Promise.all(this.adapters.map((adapter) => adapter.start())); + // Start periodic refresh to emit combined rates this.startPeriodicRefresh(); }