diff options
Diffstat (limited to 'packages/web-util/src/context/merchant-api.ts')
-rw-r--r-- | packages/web-util/src/context/merchant-api.ts | 64 |
1 files changed, 39 insertions, 25 deletions
diff --git a/packages/web-util/src/context/merchant-api.ts b/packages/web-util/src/context/merchant-api.ts index 9e2869b62..26d9c9e85 100644 --- a/packages/web-util/src/context/merchant-api.ts +++ b/packages/web-util/src/context/merchant-api.ts @@ -23,7 +23,6 @@ import { TalerError, TalerMerchantApi, TalerMerchantInstanceCacheEviction, - TalerMerchantInstanceHttpClient, TalerMerchantManagementCacheEviction, TalerMerchantManagementHttpClient, } from "@gnu-taler/taler-util"; @@ -35,14 +34,13 @@ import { h, } from "preact"; import { useContext, useEffect, useState } from "preact/hooks"; +import { BrowserFetchHttpLib } from "../index.browser.js"; import { APIClient, ActiviyTracker, MerchantLib, Subscriber, } from "./activity.js"; -import { useTranslationContext } from "./translation.js"; -import { BrowserFetchHttpLib, ErrorLoading } from "../index.browser.js"; /** * @@ -56,6 +54,7 @@ export type MerchantContextType = { hints: VersionHint[]; onActivity: Subscriber<ObservabilityEvent>; cancelRequest: (eventId: string) => void; + changeBackend: (url: URL) => void; }; // FIXME: below @@ -94,14 +93,17 @@ export const MerchantApiProvider = ({ baseUrl: URL; evictors?: Evictors; children: ComponentChildren; - frameOnError: FunctionComponent<{ state: ConfigResultFail<TalerMerchantApi.VersionResponse> | undefined }>; + frameOnError: FunctionComponent<{ + state: ConfigResultFail<TalerMerchantApi.VersionResponse> | undefined; + }>; }): VNode => { const [checked, setChecked] = useState<ConfigResult<TalerMerchantApi.VersionResponse>>(); - const { i18n } = useTranslationContext(); + + const [merchantEndpoint, changeMerchantEndpoint] = useState(baseUrl); const { getRemoteConfig, VERSION, lib, cancelRequest, onActivity } = - buildMerchantApiClient(baseUrl, evictors); + buildMerchantApiClient(merchantEndpoint, evictors); useEffect(() => { getRemoteConfig() @@ -128,11 +130,12 @@ export const MerchantApiProvider = ({ } const value: MerchantContextType = { - url: baseUrl, + url: merchantEndpoint, config: checked.config, onActivity: onActivity, lib, cancelRequest, + changeBackend: changeMerchantEndpoint, hints: checked.hints, }; return h(MerchantContext.Provider, { @@ -157,40 +160,51 @@ function buildMerchantApiClient( }, }); - const management = new TalerMerchantManagementHttpClient( + const instance = new TalerMerchantManagementHttpClient( url.href, httpLib, evictors.management, ); - const instance = (instanceId: string) => - new TalerMerchantInstanceHttpClient( - management.getSubInstanceAPI(instanceId).href, - httpLib, - evictors.instance ? evictors.instance(instanceId) : undefined, - ); const authenticate = new TalerAuthenticationHttpClient( - management.getAuthenticationAPI().href, + instance.getAuthenticationAPI().href, httpLib, ); - const impersonate = (instanceId: string) => - new TalerAuthenticationHttpClient( - instance(instanceId).getAuthenticationAPI().href, - httpLib, - ); + + // const instance = (instanceId: string): TalerMerchantInstanceHttpClient => { + // return new TalerMerchantInstanceHttpClient( + // management.getSubInstanceAPI(instanceId).href, + // httpLib, + // evictors.instance ? evictors.instance(instanceId) : undefined, + // ); + // } + // const impersonate = (instanceId: string): TalerAuthenticationHttpClient => { + // return new TalerAuthenticationHttpClient( + // instance(instanceId).getAuthenticationAPI().href, + // httpLib, + // ); + // } + const rootUrl = url; + function getSubInstanceAPI(instanceId: string): MerchantLib { + const newURL = new URL(`instance/${instanceId}/`, rootUrl); + const api = buildMerchantApiClient(newURL, evictors); + return api.lib; + } async function getRemoteConfig(): Promise<TalerMerchantApi.VersionResponse> { - const resp = await management.getConfig(); + const resp = await instance.getConfig(); + if (resp.type === "fail") { + throw TalerError.fromUncheckedDetail(resp.detail) + } return resp.body; } return { getRemoteConfig, - VERSION: management.PROTOCOL_VERSION, + VERSION: instance.PROTOCOL_VERSION, lib: { - management, - authenticate, - impersonate, instance, + authenticate, + subInstanceApi: getSubInstanceAPI, }, onActivity: tracker.subscribe, cancelRequest: httpLib.cancelRequest, |