diff --git a/src/background/container.ts b/src/background/container.ts index bf547f65a..54f0a0821 100644 --- a/src/background/container.ts +++ b/src/background/container.ts @@ -19,6 +19,8 @@ import { EventsService, Heartbeat, Deduplicator, + PaymentSession, + PaymentManager, } from './services'; import { createLogger, type Logger, type RootLogger } from '@/shared/logger'; import { LOG_LEVEL } from '@/shared/defines'; @@ -59,6 +61,8 @@ export interface Cradle { tabState: TabState; windowState: WindowState; heartbeat: Heartbeat; + PaymentSession: typeof PaymentSession; + PaymentManager: typeof PaymentManager; } export const configureContainer = () => { @@ -134,6 +138,8 @@ export const configureContainer = () => { logger: logger.getLogger('window-state'), })), heartbeat: asClass(Heartbeat).singleton(), + PaymentSession: asValue(PaymentSession), + PaymentManager: asValue(PaymentManager), }); return container; diff --git a/src/background/services/index.ts b/src/background/services/index.ts index 6bae3fb97..870c69575 100644 --- a/src/background/services/index.ts +++ b/src/background/services/index.ts @@ -11,3 +11,5 @@ export { SendToPort } from './sendToPort'; export { EventsService } from './events'; export { Deduplicator } from './deduplicator'; export { Heartbeat } from './heartbeat'; +export { PaymentManager } from './paymentManager'; +export { PaymentSession } from './paymentSession'; diff --git a/src/background/services/monetization.ts b/src/background/services/monetization.ts index d49f4a7ac..c49d65856 100644 --- a/src/background/services/monetization.ts +++ b/src/background/services/monetization.ts @@ -6,7 +6,6 @@ import type { StartMonetizationPayload, StopMonetizationPayload, } from '@/shared/messages'; -import { PaymentManager } from './paymentManager'; import { getSender, getTabId } from '@/background/utils'; import { OUTGOING_PAYMENT_POLLING_MAX_DURATION } from '@/background/config'; import { @@ -29,6 +28,8 @@ export class MonetizationService { private tabState: Cradle['tabState']; private windowState: Cradle['windowState']; private message: Cradle['message']; + private PaymentSession: Cradle['PaymentSession']; + private PaymentManager: Cradle['PaymentManager']; constructor({ logger, @@ -41,6 +42,8 @@ export class MonetizationService { tabState, windowState, message, + PaymentSession, + PaymentManager, }: Cradle) { Object.assign(this, { logger, @@ -53,6 +56,8 @@ export class MonetizationService { tabState, windowState, message, + PaymentSession, + PaymentManager, }); this.registerEventListeners(); @@ -93,7 +98,7 @@ export class MonetizationService { let paymentManager = this.tabState.paymentManagers.get(tabId); if (!paymentManager) { const url = removeQueryParams(this.tabState.url.get(tabId) || fullUrl!); - paymentManager = new PaymentManager( + paymentManager = new this.PaymentManager( tabId, url, connectedWallet, @@ -109,6 +114,7 @@ export class MonetizationService { ), rootLogger: this.rootLogger, message: this.message, + PaymentSession: this.PaymentSession, }, ); this.tabState.paymentManagers.set(tabId, paymentManager); diff --git a/src/background/services/paymentManager.ts b/src/background/services/paymentManager.ts index 2ecebd442..de4ecae25 100644 --- a/src/background/services/paymentManager.ts +++ b/src/background/services/paymentManager.ts @@ -4,7 +4,7 @@ import type { WalletAddress, } from '@interledger/open-payments'; import type { Cradle as Cradle_ } from '@/background/container'; -import { PaymentSession } from './paymentSession'; +import type { PaymentSession } from './paymentSession'; import { MIN_PAYMENT_WAIT, OUTGOING_PAYMENT_POLLING_MAX_ATTEMPTS, @@ -17,7 +17,6 @@ import { sleep, Timeout, } from '@/shared/helpers'; -import { isOutOfBalanceError } from './openPayments'; type Cradle = Pick< Cradle_, @@ -29,6 +28,7 @@ type Cradle = Pick< | 'events' | 'tabState' | 'message' + | 'PaymentSession' >; /** Payable amount to increase by {@linkcode Interval.units} every {@linkcode Interval.duration}ms. */ @@ -159,7 +159,6 @@ export class PaymentManager { this.tabId, this.sender, this.rootLogger, - PaymentSession, this.deps, ); this.streams.set(frameId, stream); @@ -202,6 +201,7 @@ export class PaymentManager { payableSessions: PaymentSession[], signal?: AbortSignal, ) { + const { isOutOfBalanceError } = await import('./openPayments'); const outgoingPayments = new Map( payableSessions.map((session, i) => [ session.id, @@ -497,8 +497,7 @@ export class PaymentStream { private readonly tabId: TabId, private sender: WalletAddress, private rootLogger: Cradle['rootLogger'], - private PaymentSessionConstructor: typeof PaymentSession, - private deps: ConstructorParameters[6], + private deps: Cradle, ) { this.iter = this.sessionsIter(this); } @@ -510,7 +509,7 @@ export class PaymentStream { session.enable(); // if was disabled earlier return session; } - session = new this.PaymentSessionConstructor( + session = new this.deps.PaymentSession( receiver, sessionId, this.tabId,