aboutsummaryrefslogtreecommitdiff
path: root/packages/web-util/src
diff options
context:
space:
mode:
authorSebastian <sebasjm@gmail.com>2024-04-04 16:24:55 -0300
committerSebastian <sebasjm@gmail.com>2024-04-04 16:25:08 -0300
commit072ac43b9f69807b8514eb11f8214637561a2573 (patch)
treeb5b464682589f2b80dc4d8f547e9d549a4df353a /packages/web-util/src
parent01838bfcc74a2e4e828885d5ab0d6f64cc96f328 (diff)
downloadwallet-core-072ac43b9f69807b8514eb11f8214637561a2573.tar.xz
fix some API differences including whatwg-url params
Diffstat (limited to 'packages/web-util/src')
-rw-r--r--packages/web-util/src/context/activity.ts5
-rw-r--r--packages/web-util/src/context/bank-api.ts47
-rw-r--r--packages/web-util/src/context/merchant-api.ts64
-rw-r--r--packages/web-util/src/utils/http-impl.sw.ts5
4 files changed, 70 insertions, 51 deletions
diff --git a/packages/web-util/src/context/activity.ts b/packages/web-util/src/context/activity.ts
index c38f133a1..9a16f6673 100644
--- a/packages/web-util/src/context/activity.ts
+++ b/packages/web-util/src/context/activity.ts
@@ -55,10 +55,9 @@ export interface APIClient<T, C> {
}
export interface MerchantLib {
- management: TalerMerchantManagementHttpClient;
+ instance: TalerMerchantManagementHttpClient;
authenticate: TalerAuthenticationHttpClient;
- instance: (instanceId: string) => TalerMerchantInstanceHttpClient;
- impersonate: (instanceId: string) => TalerAuthenticationHttpClient;
+ subInstanceApi: (instanceId: string) => MerchantLib;
}
export interface BankLib {
diff --git a/packages/web-util/src/context/bank-api.ts b/packages/web-util/src/context/bank-api.ts
index a5e5654ac..d2938f150 100644
--- a/packages/web-util/src/context/bank-api.ts
+++ b/packages/web-util/src/context/bank-api.ts
@@ -25,7 +25,7 @@ import {
TalerCoreBankCacheEviction,
TalerCoreBankHttpClient,
TalerCorebankApi,
- TalerError
+ TalerError,
} from "@gnu-taler/taler-util";
import {
ComponentChildren,
@@ -56,7 +56,8 @@ export type BankContextType = {
// @ts-expect-error default value to undefined, should it be another thing?
const BankContext = createContext<BankContextType>(undefined);
-export const useBankCoreApiContext = (): BankContextType => useContext(BankContext);
+export const useBankCoreApiContext = (): BankContextType =>
+ useContext(BankContext);
enum VersionHint {
NONE,
@@ -65,7 +66,7 @@ enum VersionHint {
type Evictors = {
conversion?: CacheEvictor<TalerBankConversionCacheEviction>;
bank?: CacheEvictor<TalerCoreBankCacheEviction>;
-}
+};
type ConfigResult<T> =
| undefined
@@ -81,13 +82,15 @@ export const BankApiProvider = ({
}: {
baseUrl: URL;
children: ComponentChildren;
- evictors?: Evictors,
+ evictors?: Evictors;
frameOnError: FunctionComponent<{ children: ComponentChildren }>;
}): VNode => {
- const [checked, setChecked] = useState<ConfigResult<TalerCorebankApi.Config>>();
+ const [checked, setChecked] =
+ useState<ConfigResult<TalerCorebankApi.Config>>();
const { i18n } = useTranslationContext();
- const { getRemoteConfig, VERSION, lib, cancelRequest, onActivity } = buildBankApiClient(baseUrl, evictors);
+ const { getRemoteConfig, VERSION, lib, cancelRequest, onActivity } =
+ buildBankApiClient(baseUrl, evictors);
useEffect(() => {
getRemoteConfig()
@@ -110,7 +113,9 @@ export const BankApiProvider = ({
}, []);
if (checked === undefined) {
- return h(frameOnError, { children: h("div", {}, "checking compatibility with server...") });
+ return h(frameOnError, {
+ children: h("div", {}, "checking compatibility with server..."),
+ });
}
if (checked.type === "error") {
return h(frameOnError, {
@@ -141,7 +146,9 @@ export const BankApiProvider = ({
});
};
-function buildBankApiClient(url: URL, evictors: Evictors,
+function buildBankApiClient(
+ url: URL,
+ evictors: Evictors,
): APIClient<BankLib, TalerCorebankApi.Config> {
const httpFetch = new BrowserFetchHttpLib({
enableThrottling: true,
@@ -154,11 +161,7 @@ function buildBankApiClient(url: URL, evictors: Evictors,
},
});
- const bank = new TalerCoreBankHttpClient(
- url.href,
- httpLib,
- evictors.bank,
- );
+ const bank = new TalerCoreBankHttpClient(url.href, httpLib, evictors.bank);
const conversion = new TalerBankConversionHttpClient(
bank.getConversionInfoAPI().href,
httpLib,
@@ -170,32 +173,36 @@ function buildBankApiClient(url: URL, evictors: Evictors,
httpLib,
);
- async function getRemoteConfig() {
- const resp = await bank.getConfig()
- return resp.body
+ async function getRemoteConfig(): Promise<TalerCorebankApi.Config> {
+ const resp = await bank.getConfig();
+ if (resp.type === "fail") {
+ throw TalerError.fromUncheckedDetail(resp.detail);
+ }
+ return resp.body;
}
return {
getRemoteConfig,
VERSION: bank.PROTOCOL_VERSION,
lib: {
- bank, conversion, auth
+ bank,
+ conversion,
+ auth,
},
onActivity: tracker.subscribe,
cancelRequest: httpLib.cancelRequest,
};
}
-
export const BankApiProviderTesting = ({
children,
value,
}: {
- value: BankContextType
+ value: BankContextType;
children: ComponentChildren;
}): VNode => {
return h(BankContext.Provider, {
value,
children,
});
-}
+};
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,
diff --git a/packages/web-util/src/utils/http-impl.sw.ts b/packages/web-util/src/utils/http-impl.sw.ts
index 4d7f3a8a1..3c4b8b587 100644
--- a/packages/web-util/src/utils/http-impl.sw.ts
+++ b/packages/web-util/src/utils/http-impl.sw.ts
@@ -18,11 +18,10 @@
* Imports.
*/
import {
+ Duration,
RequestThrottler,
- TalerErrorCode,
TalerError,
- Duration,
- CancellationToken,
+ TalerErrorCode
} from "@gnu-taler/taler-util";
import {