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
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@ import { cip30 as walletCip30 } from '@cardano-sdk/wallet';
import { ensureUiIsOpenAndLoaded } from './util';
import { userPromptService } from './services/dappService';
import { authenticator } from './authenticator';
import { dAppConnectorActivity$, wallet$ } from './wallet';
import { wallet$ } from './wallet';
import { dAppConnectorActivity$ } from './session/poll-controller';
import { runtime, Tabs, tabs } from 'webextension-polyfill';
import { cip30, exposeApi, RemoteApiPropertyType } from '@cardano-sdk/web-extension';
import { DAPP_CHANNELS } from '../../../utils/constants';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,18 @@ import {
UnhandledError,
WalletMode
} from '../../types';
import { Subject, of, BehaviorSubject, merge, map, fromEvent, Observable } from 'rxjs';
import {
Subject,
of,
BehaviorSubject,
merge,
map,
fromEvent,
Observable,
filter,
withLatestFrom,
interval
} from 'rxjs';
import { walletRoutePaths } from '@routes/wallet-paths';
import { backgroundServiceProperties } from '../config';
import { ActiveWallet, exposeApi } from '@cardano-sdk/web-extension';
Expand All @@ -30,6 +41,7 @@ import { logger } from '@lace/common';
import { POPUP_WINDOW_NAMI_TITLE } from '@utils/constants';
import { catchAndBrandExtensionApiError } from '@utils/catch-and-brand-extension-api-error';
import { initCardanoTokenPrices } from './cardanoTokenPrices';
import { pollController$ } from '../session/poll-controller';

export const requestMessage$ = new Subject<Message>();
export const backendFailures$ = new BehaviorSubject(0);
Expand Down Expand Up @@ -320,8 +332,15 @@ export const exposeBackgroundService = (wallet$: Observable<ActiveWallet>): void
fetchAdaPrice(coinPrices);
fetchBitcoinPrice(coinPrices);
};
// Fetch the prices initially, regardless of the session status
updatePrices();
setInterval(updatePrices, ADA_PRICE_CHECK_INTERVAL);
// Fetch the prices periodically, only if the session is active
interval(ADA_PRICE_CHECK_INTERVAL)
.pipe(
withLatestFrom(pollController$),
filter(([, isActive]) => isActive)
)
.subscribe(updatePrices);

exposeApi<BackgroundService>(
{
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import { Subject, tap } from 'rxjs';
import { TrackerSubject } from '@cardano-sdk/util-rxjs';
import { logger } from '@lace/common';
import { createUserSessionTracker } from './user-session-tracker';
import { isLacePopupOpen$ } from './is-lace-popup-open';
import { isLaceTabActive$ } from './is-lace-tab-active';
import { SESSION_TIMEOUT } from '../config';

export const dAppConnectorActivity$ = new Subject<void>();

export const pollController$ = new TrackerSubject(
createUserSessionTracker(isLacePopupOpen$, isLaceTabActive$, dAppConnectorActivity$, SESSION_TIMEOUT).pipe(
tap((isActive) => logger.debug('Session active:', isActive))
)
);
Original file line number Diff line number Diff line change
@@ -1,19 +1,7 @@
/* eslint-disable unicorn/no-null, no-magic-numbers, promise/catch-or-return, promise/no-nesting */
import { runtime, storage as webStorage } from 'webextension-polyfill';
import {
BehaviorSubject,
combineLatest,
defaultIfEmpty,
EMPTY,
firstValueFrom,
from,
map,
Observable,
of,
Subject,
tap
} from 'rxjs';
import { getProviders, SESSION_TIMEOUT } from './config';
import { BehaviorSubject, combineLatest, defaultIfEmpty, EMPTY, firstValueFrom, from, map, Observable, of } from 'rxjs';
import { getProviders } from './config';
import { createPersonalWallet, createSharedWallet, DEFAULT_POLLING_CONFIG, storage } from '@cardano-sdk/wallet';
import { Cardano } from '@cardano-sdk/core';
import {
Expand Down Expand Up @@ -47,8 +35,7 @@ import { ExtensionDocumentStore } from './storage/extension-document-store';
import { ExtensionBlobKeyValueStore } from './storage/extension-blob-key-value-store';
import { ExtensionBlobCollectionStore } from './storage/extension-blob-collection-store';
import { migrateCollectionStore, migrateWalletStores, shouldAttemptWalletStoresMigration } from './storage/migrations';
import { createUserSessionTracker, isLacePopupOpen$, isLaceTabActive$ } from './session';
import { TrackerSubject } from '@cardano-sdk/util-rxjs';
import { pollController$ } from './session/poll-controller';
import { ExperimentName, FeatureFlags } from '../types/feature-flags';
import { TX_HISTORY_LIMIT_SIZE } from '@utils/constants';
import { Bitcoin } from '@lace/bitcoin';
Expand All @@ -65,13 +52,6 @@ if (!isBackgroundProcess()) {
throw new TypeError('This module should only be imported in service worker');
}

export const dAppConnectorActivity$ = new Subject<void>();
const pollController$ = new TrackerSubject(
createUserSessionTracker(isLacePopupOpen$, isLaceTabActive$, dAppConnectorActivity$, SESSION_TIMEOUT).pipe(
tap((isActive) => logger.debug('Session active:', isActive))
)
);

const networkMagicToChainName = (networkMagic: Cardano.NetworkMagic): Wallet.ChainName => {
switch (networkMagic) {
case Wallet.Cardano.ChainIds.Mainnet.networkMagic:
Expand Down
Loading