Skip to content

Commit 0e8941b

Browse files
refactor: use message.send() directly, move message to container (#534)
Co-authored-by: Radu-Cristian Popa <[email protected]>
1 parent 8d5bcd7 commit 0e8941b

23 files changed

+348
-416
lines changed

src/background/container.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@ import {
1515
import { createLogger, Logger } from '@/shared/logger'
1616
import { LOG_LEVEL } from '@/shared/defines'
1717
import { tFactory, type Translation } from '@/shared/helpers'
18+
import {
19+
MessageManager,
20+
type BackgroundToContentMessage
21+
} from '@/shared/messages'
1822

1923
export interface Cradle {
2024
logger: Logger
@@ -24,6 +28,7 @@ export interface Cradle {
2428
storage: StorageService
2529
openPaymentsService: OpenPaymentsService
2630
monetizationService: MonetizationService
31+
message: MessageManager<BackgroundToContentMessage>
2732
sendToPopup: SendToPopup
2833
tabEvents: TabEvents
2934
background: Background
@@ -64,6 +69,7 @@ export const configureContainer = () => {
6469
.inject(() => ({
6570
logger: logger.getLogger('monetization')
6671
})),
72+
message: asClass(MessageManager<BackgroundToContentMessage>).singleton(),
6773
tabEvents: asClass(TabEvents).singleton(),
6874
sendToPopup: asClass(SendToPopup).singleton(),
6975
background: asClass(Background)

src/background/lib/messages.ts

Lines changed: 0 additions & 35 deletions
This file was deleted.

src/background/services/background.ts

Lines changed: 24 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,5 @@
11
import type { Browser } from 'webextension-polyfill'
2-
import {
3-
type ToBackgroundMessage,
4-
PopupToBackgroundAction,
5-
ContentToBackgroundAction
6-
} from '@/shared/messages'
2+
import type { ToBackgroundMessage } from '@/shared/messages'
73
import {
84
failure,
95
getNextOccurrence,
@@ -135,83 +131,89 @@ export class Background {
135131
this.logger.debug('Received message', message)
136132
try {
137133
switch (message.action) {
138-
case PopupToBackgroundAction.GET_CONTEXT_DATA:
134+
// region Popup
135+
case 'GET_CONTEXT_DATA':
139136
return success(await this.monetizationService.getPopupData())
140137

141-
case PopupToBackgroundAction.CONNECT_WALLET:
138+
case 'CONNECT_WALLET':
142139
await this.openPaymentsService.connectWallet(message.payload)
143140
if (message.payload.recurring) {
144141
this.scheduleResetOutOfFundsState()
145142
}
146143
return
147144

148-
case PopupToBackgroundAction.RECONNECT_WALLET: {
145+
case 'RECONNECT_WALLET': {
149146
await this.openPaymentsService.reconnectWallet()
150147
await this.monetizationService.resumePaymentSessionActiveTab()
151148
await this.updateVisualIndicatorsForCurrentTab()
152149
return success(undefined)
153150
}
154151

155-
case PopupToBackgroundAction.ADD_FUNDS:
152+
case 'ADD_FUNDS':
156153
await this.openPaymentsService.addFunds(message.payload)
157154
await this.browser.alarms.clear(ALARM_RESET_OUT_OF_FUNDS)
158155
if (message.payload.recurring) {
159156
this.scheduleResetOutOfFundsState()
160157
}
161158
return
162159

163-
case PopupToBackgroundAction.DISCONNECT_WALLET:
160+
case 'DISCONNECT_WALLET':
164161
await this.openPaymentsService.disconnectWallet()
165162
await this.browser.alarms.clear(ALARM_RESET_OUT_OF_FUNDS)
166163
await this.updateVisualIndicatorsForCurrentTab()
167164
this.sendToPopup.send('SET_STATE', { state: {}, prevState: {} })
168165
return
169166

170-
case PopupToBackgroundAction.TOGGLE_WM: {
167+
case 'TOGGLE_WM': {
171168
await this.monetizationService.toggleWM()
172169
await this.updateVisualIndicatorsForCurrentTab()
173170
return
174171
}
175172

176-
case PopupToBackgroundAction.PAY_WEBSITE:
173+
case 'UPDATE_RATE_OF_PAY':
174+
return success(
175+
await this.storage.updateRate(message.payload.rateOfPay)
176+
)
177+
178+
case 'PAY_WEBSITE':
177179
return success(
178180
await this.monetizationService.pay(message.payload.amount)
179181
)
180182

181-
case ContentToBackgroundAction.CHECK_WALLET_ADDRESS_URL:
183+
// endregion
184+
185+
// region Content
186+
case 'CHECK_WALLET_ADDRESS_URL':
182187
return success(
183188
await getWalletInformation(message.payload.walletAddressUrl)
184189
)
185190

186-
case ContentToBackgroundAction.START_MONETIZATION:
191+
case 'START_MONETIZATION':
187192
await this.monetizationService.startPaymentSession(
188193
message.payload,
189194
sender
190195
)
191196
return
192197

193-
case ContentToBackgroundAction.STOP_MONETIZATION:
198+
case 'STOP_MONETIZATION':
194199
await this.monetizationService.stopPaymentSession(
195200
message.payload,
196201
sender
197202
)
198203
return
199204

200-
case ContentToBackgroundAction.RESUME_MONETIZATION:
205+
case 'RESUME_MONETIZATION':
201206
await this.monetizationService.resumePaymentSession(
202207
message.payload,
203208
sender
204209
)
205210
return
206211

207-
case PopupToBackgroundAction.UPDATE_RATE_OF_PAY:
208-
return success(
209-
await this.storage.updateRate(message.payload.rateOfPay)
210-
)
211-
212-
case ContentToBackgroundAction.IS_WM_ENABLED:
212+
case 'IS_WM_ENABLED':
213213
return success(await this.storage.getWMState())
214214

215+
// endregion
216+
215217
default:
216218
return
217219
}

src/background/services/monetization.ts

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import {
55
StopMonetizationPayload
66
} from '@/shared/messages'
77
import { PaymentSession } from './paymentSession'
8-
import { emitToggleWM } from '../lib/messages'
98
import { computeRate, getCurrentActiveTab, getSender, getTabId } from '../utils'
109
import { isOutOfBalanceError } from './openPayments'
1110
import { isOkState, removeQueryParams } from '@/shared/helpers'
@@ -21,6 +20,7 @@ export class MonetizationService {
2120
private browser: Cradle['browser']
2221
private events: Cradle['events']
2322
private tabState: Cradle['tabState']
23+
private message: Cradle['message']
2424

2525
constructor({
2626
logger,
@@ -29,7 +29,8 @@ export class MonetizationService {
2929
storage,
3030
events,
3131
openPaymentsService,
32-
tabState
32+
tabState,
33+
message
3334
}: Cradle) {
3435
Object.assign(this, {
3536
logger,
@@ -38,7 +39,8 @@ export class MonetizationService {
3839
storage,
3940
browser,
4041
events,
41-
tabState
42+
tabState,
43+
message
4244
})
4345

4446
this.registerEventListeners()
@@ -98,7 +100,8 @@ export class MonetizationService {
98100
this.events,
99101
this.tabState,
100102
removeQueryParams(url!),
101-
this.logger
103+
this.logger,
104+
this.message
102105
)
103106

104107
sessions.set(requestId, session)
@@ -236,7 +239,7 @@ export class MonetizationService {
236239
async toggleWM() {
237240
const { enabled } = await this.storage.get(['enabled'])
238241
await this.storage.set({ enabled: !enabled })
239-
emitToggleWM({ enabled: !enabled })
242+
await this.message.sendToActiveTab('EMIT_TOGGLE_WM', { enabled: !enabled })
240243
}
241244

242245
async pay(amount: string) {

src/background/services/paymentSession.ts

Lines changed: 35 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import {
44
type OutgoingPayment,
55
type WalletAddress
66
} from '@interledger/open-payments/dist/types'
7-
import { sendMonetizationEvent } from '../lib/messages'
87
import { bigIntMax, convert } from '@/shared/helpers'
98
import { transformBalance } from '@/popup/lib/utils'
109
import {
@@ -16,7 +15,12 @@ import {
1615
} from './openPayments'
1716
import { getNextSendableAmount } from '@/background/utils'
1817
import type { EventsService, OpenPaymentsService, TabState } from '.'
19-
import type { MonetizationEventDetails } from '@/shared/messages'
18+
import type {
19+
BackgroundToContentMessage,
20+
MessageManager,
21+
MonetizationEventDetails,
22+
MonetizationEventPayload
23+
} from '@/shared/messages'
2024
import type { AmountValue } from '@/shared/types'
2125
import type { Logger } from '@/shared/logger'
2226

@@ -54,7 +58,8 @@ export class PaymentSession {
5458
private events: EventsService,
5559
private tabState: TabState,
5660
private url: string,
57-
private logger: Logger
61+
private logger: Logger,
62+
private message: MessageManager<BackgroundToContentMessage>
5863
) {}
5964

6065
async adjustAmount(rate: AmountValue): Promise<void> {
@@ -223,13 +228,9 @@ export class PaymentSession {
223228
this.debug(`Overpaying: waitTime=${waitTime}`)
224229

225230
if (monetizationEvent && source !== 'tab-change') {
226-
sendMonetizationEvent({
227-
tabId: this.tabId,
228-
frameId: this.frameId,
229-
payload: {
230-
requestId: this.requestId,
231-
details: monetizationEvent
232-
}
231+
this.sendMonetizationEvent({
232+
requestId: this.requestId,
233+
details: monetizationEvent
233234
})
234235
}
235236

@@ -278,6 +279,15 @@ export class PaymentSession {
278279
}
279280
}
280281

282+
private async sendMonetizationEvent(payload: MonetizationEventPayload) {
283+
await this.message.sendToTab(
284+
this.tabId,
285+
this.frameId,
286+
'MONETIZATION_EVENT',
287+
payload
288+
)
289+
}
290+
281291
private get canContinuePayment() {
282292
return this.active && !this.isDisabled && !this.isInvalid
283293
}
@@ -392,22 +402,18 @@ export class PaymentSession {
392402
if (outgoingPayment) {
393403
const { receiveAmount, receiver: incomingPayment } = outgoingPayment
394404

395-
sendMonetizationEvent({
396-
tabId: this.tabId,
397-
frameId: this.frameId,
398-
payload: {
399-
requestId: this.requestId,
400-
details: {
401-
amountSent: {
402-
currency: receiveAmount.assetCode,
403-
value: transformBalance(
404-
receiveAmount.value,
405-
receiveAmount.assetScale
406-
)
407-
},
408-
incomingPayment,
409-
paymentPointer: this.receiver.id
410-
}
405+
this.sendMonetizationEvent({
406+
requestId: this.requestId,
407+
details: {
408+
amountSent: {
409+
currency: receiveAmount.assetCode,
410+
value: transformBalance(
411+
receiveAmount.value,
412+
receiveAmount.assetScale
413+
)
414+
},
415+
incomingPayment,
416+
paymentPointer: this.receiver.id
411417
}
412418
})
413419
}
@@ -439,13 +445,9 @@ export class PaymentSession {
439445
paymentPointer: this.receiver.id
440446
}
441447

442-
sendMonetizationEvent({
443-
tabId: this.tabId,
444-
frameId: this.frameId,
445-
payload: {
446-
requestId: this.requestId,
447-
details: monetizationEventDetails
448-
}
448+
this.sendMonetizationEvent({
449+
requestId: this.requestId,
450+
details: monetizationEventDetails
449451
})
450452

451453
// TO DO: find a better source of truth for deciding if overpaying is applicable

src/content/container.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,17 @@ import { ContentScript } from './services/contentScript'
55
import { MonetizationTagManager } from './services/monetizationTagManager'
66
import { LOG_LEVEL } from '@/shared/defines'
77
import { FrameManager } from './services/frameManager'
8+
import {
9+
type ContentToBackgroundMessage,
10+
MessageManager
11+
} from '@/shared/messages'
812

913
export interface Cradle {
1014
logger: Logger
1115
browser: Browser
1216
document: Document
1317
window: Window
18+
message: MessageManager<ContentToBackgroundMessage>
1419
monetizationTagManager: MonetizationTagManager
1520
frameManager: FrameManager
1621
contentScript: ContentScript
@@ -28,6 +33,7 @@ export const configureContainer = () => {
2833
browser: asValue(browser),
2934
document: asValue(document),
3035
window: asValue(window),
36+
message: asClass(MessageManager<ContentToBackgroundMessage>).singleton(),
3137
frameManager: asClass(FrameManager)
3238
.singleton()
3339
.inject(() => ({

0 commit comments

Comments
 (0)