diff options
author | Florian Dold <florian@dold.me> | 2024-02-27 23:23:36 +0100 |
---|---|---|
committer | Florian Dold <florian@dold.me> | 2024-02-27 23:23:36 +0100 |
commit | 6584d9e054faf9a927708f1f7f51bcbed7873afb (patch) | |
tree | 128dbdef9dbcbe7ed8e7aa90fb4e5fd2980e480c /packages/taler-wallet-core/src/wallet.ts | |
parent | 2c86a9ec76b60ad065da65e5d2adfd1a79189ae6 (diff) | |
download | wallet-core-6584d9e054faf9a927708f1f7f51bcbed7873afb.tar.xz |
observability
Diffstat (limited to 'packages/taler-wallet-core/src/wallet.ts')
-rw-r--r-- | packages/taler-wallet-core/src/wallet.ts | 65 |
1 files changed, 50 insertions, 15 deletions
diff --git a/packages/taler-wallet-core/src/wallet.ts b/packages/taler-wallet-core/src/wallet.ts index c3aa68303..ea3c4bb83 100644 --- a/packages/taler-wallet-core/src/wallet.ts +++ b/packages/taler-wallet-core/src/wallet.ts @@ -204,6 +204,7 @@ import { ObservableDbAccess, ObservableHttpClientLibrary, ObservableTaskScheduler, + observeTalerCrypto, } from "./observable-wrappers.js"; import { confirmPay, @@ -1363,6 +1364,40 @@ export function getVersion(wex: WalletExecutionContext): WalletCoreVersion { return result; } +export function getObservedWalletExecutionContext( + ws: InternalWalletState, + cancellationToken: CancellationToken, + oc: ObservabilityContext, +) { + const wex: WalletExecutionContext = { + ws, + cancellationToken, + cryptoApi: observeTalerCrypto(ws.cryptoApi, oc), + db: new ObservableDbAccess(ws.db, oc), + http: new ObservableHttpClientLibrary(ws.http, oc), + taskScheduler: new ObservableTaskScheduler(ws.taskScheduler, oc), + oc, + }; + return wex; +} + +export function getNormalWalletExecutionContext( + ws: InternalWalletState, + cancellationToken: CancellationToken, + oc: ObservabilityContext, +) { + const wex: WalletExecutionContext = { + ws, + cancellationToken, + cryptoApi: ws.cryptoApi, + db: ws.db, + http: ws.http, + taskScheduler: ws.taskScheduler, + oc, + }; + return wex; +} + /** * Handle a request to the wallet-core API. */ @@ -1372,28 +1407,28 @@ async function handleCoreApiRequest( id: string, payload: unknown, ): Promise<CoreApiResponse> { - const oc: ObservabilityContext = { - observe(evt) { - if (ws.config.testing.emitObservabilityEvents) { + let wex: WalletExecutionContext; + let oc: ObservabilityContext; + + if (ws.config.testing.emitObservabilityEvents) { + oc = { + observe(evt) { ws.notify({ type: NotificationType.RequestObservabilityEvent, operation, requestId: id, event: evt, }); - } - }, - }; + }, + }; - const wex: WalletExecutionContext = { - ws, - cancellationToken: CancellationToken.CONTINUE, - cryptoApi: ws.cryptoApi, - db: new ObservableDbAccess(ws.db, oc), - http: new ObservableHttpClientLibrary(ws.http, oc), - taskScheduler: new ObservableTaskScheduler(ws.taskScheduler, oc), - oc, - }; + wex = getObservedWalletExecutionContext(ws, CancellationToken.CONTINUE, oc); + } else { + oc = { + observe(evt) {}, + }; + wex = getNormalWalletExecutionContext(ws, CancellationToken.CONTINUE, oc); + } try { await ws.ensureWalletDbOpen(); |