aboutsummaryrefslogtreecommitdiff
path: root/packages/web-util/src/context/merchant-api.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/web-util/src/context/merchant-api.ts')
-rw-r--r--packages/web-util/src/context/merchant-api.ts64
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,