Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 19 additions & 17 deletions src/background/services/monetization.ts
Original file line number Diff line number Diff line change
Expand Up @@ -91,15 +91,25 @@ export class MonetizationService {
);
return;
}
const { tabId, frameId, url } = getSender(sender);

const deps = {
storage: this.storage,
openPaymentsService: this.openPaymentsService,
outgoingPaymentGrantService: this.outgoingPaymentGrantService,
events: this.events,
tabState: this.tabState,
logger: this.logger,
message: this.message,
};

const { tabId, frameId, url: fullUrl } = getSender(sender);
const url = removeQueryParams(fullUrl!);
const sessions = this.tabState.getSessions(tabId);

const replacedSessions = new Set<string>();

// Initialize new sessions
for (const p of payload) {
const { requestId, walletAddress: receiver } = p;

for (const { requestId, walletAddress: receiver } of payload) {
// Q: How does this impact client side apps/routing?
const existingSession = sessions.get(requestId);
if (existingSession) {
Expand All @@ -114,14 +124,8 @@ export class MonetizationService {
requestId,
tabId,
frameId,
this.storage,
this.openPaymentsService,
this.outgoingPaymentGrantService,
this.events,
this.tabState,
removeQueryParams(url!),
this.logger,
this.message,
url,
deps,
);

sessions.set(requestId, session);
Expand Down Expand Up @@ -177,17 +181,15 @@ export class MonetizationService {
return;
}

for (const p of payload) {
const { requestId } = p;

for (const { requestId, intent } of payload) {
const session = sessions.get(requestId);
if (!session) continue;

if (p.intent === 'remove') {
if (intent === 'remove') {
needsAdjustAmount = true;
session.stop();
sessions.delete(requestId);
} else if (p.intent === 'disable') {
} else if (intent === 'disable') {
needsAdjustAmount = true;
session.disable();
} else {
Expand Down
45 changes: 25 additions & 20 deletions src/background/services/paymentSession.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,20 +17,11 @@ import {
} from '@/background/services/openPayments';
import { bigIntMax, convert, getNextSendableAmount } from '@/background/utils';
import type {
EventsService,
OpenPaymentsService,
OutgoingPaymentGrantService,
StorageService,
TabState,
} from '.';
import type {
BackgroundToContentMessage,
MessageManager,
MonetizationEventDetails,
MonetizationEventPayload,
} from '@/shared/messages';
import type { AmountValue } from '@/shared/types';
import type { Logger } from '@/shared/logger';
import type { Cradle as Cradle_ } from '@/background/container';
import {
OUTGOING_PAYMENT_POLLING_INITIAL_DELAY,
OUTGOING_PAYMENT_POLLING_INTERVAL,
Expand All @@ -47,17 +38,35 @@ interface CreateOutgoingPaymentParams {
incomingPaymentId: IncomingPayment['id'];
amount: string;
}
type Cradle = Pick<
Cradle_,
| 'storage'
| 'openPaymentsService'
| 'outgoingPaymentGrantService'
| 'events'
| 'tabState'
| 'logger'
| 'message'
>;

export class PaymentSession {
private rate: string;
private storage: Cradle['storage'];
private openPaymentsService: Cradle['openPaymentsService'];
private outgoingPaymentGrantService: Cradle['outgoingPaymentGrantService'];
private events: Cradle['events'];
private tabState: Cradle['tabState'];
private logger: Cradle['logger'];
private message: Cradle['message'];

private active = false;
/** Invalid receiver (providers not peered or other reasons) */
private isInvalid = false;
private countInvalidReceiver = 0;
private isDisabled = false;
private incomingPaymentUrl: string;
private incomingPaymentExpiresAt: number;
private amount: string;
private rate: AmountValue;
private amount: AmountValue;
private intervalInMs: number;
private shouldRetryImmediately = false;

Expand All @@ -69,15 +78,11 @@ export class PaymentSession {
private requestId: string,
private tabId: number,
private frameId: number,
private storage: StorageService,
private openPaymentsService: OpenPaymentsService,
private outgoingPaymentGrantService: OutgoingPaymentGrantService,
private events: EventsService,
private tabState: TabState,
private url: string,
private logger: Logger,
private message: MessageManager<BackgroundToContentMessage>,
) {}
private deps: Cradle,
) {
Object.assign(this, this.deps);
}

#adjustAmountLastRate: AmountValue;
#adjustAmountController = new AbortController();
Expand Down