aboutsummaryrefslogtreecommitdiff
path: root/packages/merchant-backoffice-ui
diff options
context:
space:
mode:
Diffstat (limited to 'packages/merchant-backoffice-ui')
-rw-r--r--packages/merchant-backoffice-ui/src/paths/instance/accounts/create/CreatePage.tsx83
-rw-r--r--packages/merchant-backoffice-ui/src/paths/instance/accounts/create/index.tsx80
-rw-r--r--packages/merchant-backoffice-ui/src/paths/instance/transfers/list/index.tsx2
3 files changed, 75 insertions, 90 deletions
diff --git a/packages/merchant-backoffice-ui/src/paths/instance/accounts/create/CreatePage.tsx b/packages/merchant-backoffice-ui/src/paths/instance/accounts/create/CreatePage.tsx
index 8b583308f..2f19d0c91 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/accounts/create/CreatePage.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/instance/accounts/create/CreatePage.tsx
@@ -19,7 +19,13 @@
* @author Sebastian Javier Marchano (sebasjm)
*/
-import { TalerMerchantApi } from "@gnu-taler/taler-util";
+import {
+ HttpStatusCode,
+ TalerError,
+ TalerMerchantApi,
+ TranslatedString,
+ assertUnreachable,
+} from "@gnu-taler/taler-util";
import { useTranslationContext } from "@gnu-taler/web-util/browser";
import { Fragment, h, VNode } from "preact";
import { useState } from "preact/hooks";
@@ -34,6 +40,7 @@ import { InputSelector } from "../../../../components/form/InputSelector.js";
import { ImportingAccountModal } from "../../../../components/modal/index.js";
import { undefinedIfEmpty } from "../../../../utils/table.js";
import { safeConvertURL } from "../update/UpdatePage.js";
+import { testRevenueAPI } from "./index.js";
type Entity = TalerMerchantApi.AccountAddDetails;
@@ -50,6 +57,9 @@ export function CreatePage({ onCreate, onBack }: Props): VNode {
const [importing, setImporting] = useState(false);
const [state, setState] = useState<Partial<Entity>>({});
const facadeURL = safeConvertURL(state.credit_facade_url);
+ const [testError, setTestError] = useState<TranslatedString | undefined>(
+ undefined,
+ );
const errors: FormErrors<Entity> = {
payto_uri: !state.payto_uri ? i18n.str`required` : undefined,
@@ -110,6 +120,46 @@ export function CreatePage({ onCreate, onBack }: Props): VNode {
credit_facade_url,
});
};
+
+ async function testAccountInfo() {
+ const revenueAPI = !state.credit_facade_url
+ ? undefined
+ : new URL("./", state.credit_facade_url);
+
+ if (revenueAPI) {
+ const resp = await testRevenueAPI(
+ revenueAPI,
+ state.credit_facade_credentials,
+ );
+ if (resp instanceof TalerError) {
+ setTestError(i18n.str`The request to check the revenue API failed.`);
+ return;
+ }
+ if (resp.type === "fail") {
+ switch (resp.case) {
+ case HttpStatusCode.BadRequest: {
+ setTestError(i18n.str`Server replied with "bad request".`);
+ return;
+ }
+ case HttpStatusCode.Unauthorized: {
+ setTestError(i18n.str`Unauthorized, try with another credentials.`);
+
+ return;
+ }
+ case HttpStatusCode.NotFound: {
+ setTestError(
+ i18n.str`The endpoint doesn't seems to be a Taler Revenue API.`,
+ );
+ return;
+ }
+ default: {
+ assertUnreachable(resp);
+ }
+ }
+ }
+ }
+ }
+
return (
<div>
{importing && (
@@ -119,27 +169,30 @@ export function CreatePage({ onCreate, onBack }: Props): VNode {
}}
onConfirm={(ac) => {
const u = new URL(ac.infoURL);
- const user = u.username
- const pwd = u.password
+ const user = u.username;
+ const pwd = u.password;
u.password = "";
u.username = "";
const credit_facade_url = u.href;
setState({
payto_uri: ac.accountURI,
- credit_facade_credentials: user || pwd ? {
- type: "basic",
- password: pwd,
- username: user,
- }: undefined,
+ credit_facade_credentials:
+ user || pwd
+ ? {
+ type: "basic",
+ password: pwd,
+ username: user,
+ }
+ : undefined,
credit_facade_url,
- })
+ });
// if (u.username && ac.accesToken) {
// state.credit_facade_credentials = {
// type: "bearer",
// token: ac.accesToken,
// username: u.username,
// };
- // } else
+ // } else
setImporting(false);
}}
/>
@@ -196,6 +249,16 @@ export function CreatePage({ onCreate, onBack }: Props): VNode {
class="button is-info"
data-tooltip={i18n.str`Need to complete marked fields`}
onClick={() => {
+ testAccountInfo();
+ }}
+ >
+ <i18n.Translate>Test account info</i18n.Translate>
+ </button>
+
+ <button
+ class="button is-info"
+ data-tooltip={i18n.str`Need to complete marked fields`}
+ onClick={() => {
setImporting(true);
}}
>
diff --git a/packages/merchant-backoffice-ui/src/paths/instance/accounts/create/index.tsx b/packages/merchant-backoffice-ui/src/paths/instance/accounts/create/index.tsx
index 7abff255c..9e0830e6e 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/accounts/create/index.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/instance/accounts/create/index.tsx
@@ -52,6 +52,7 @@ export default function CreateValidator({ onConfirm, onBack }: Props): VNode {
const { lib: api } = useSessionContext();
const { state } = useSessionContext();
const [notif, setNotif] = useState<Notification | undefined>(undefined);
+ const [tested, setTested] = useState(false);
const { i18n } = useTranslationContext();
return (
@@ -60,68 +61,6 @@ export default function CreateValidator({ onConfirm, onBack }: Props): VNode {
<CreatePage
onBack={onBack}
onCreate={async (request: Entity) => {
- const revenueAPI = !request.credit_facade_url
- ? undefined
- : new URL("./", request.credit_facade_url);
-
- if (revenueAPI) {
- const resp = await testRevenueAPI(
- revenueAPI,
- request.credit_facade_credentials,
- request.payto_uri,
- );
- if (resp instanceof TalerError) {
- setNotif({
- message: i18n.str`Could not add bank account`,
- type: "ERROR",
- description: i18n.str`The request to check the revenue API failed.`,
- details: JSON.stringify(resp.errorDetail, undefined, 2),
- });
- return;
- }
- if (resp.type === "fail") {
- switch (resp.case) {
- case HttpStatusCode.BadRequest: {
- setNotif({
- message: i18n.str`Could not add bank account`,
- type: "ERROR",
- description: i18n.str`Server replied with "bad request".`,
- });
- return;
-
- }
- case HttpStatusCode.Unauthorized: {
- setNotif({
- message: i18n.str`Could not add bank account`,
- type: "ERROR",
- description: i18n.str`Unauthorized, try with another credentials.`,
- });
- return;
-
- }
- case HttpStatusCode.NotFound: {
- setNotif({
- message: i18n.str`Could not add bank account`,
- type: "ERROR",
- description: i18n.str`The endpoint doesn't seems to be a Taler Revenue API`,
- });
- return;
- }
- case TestRevenueErrorType.ANOTHER_ACCOUNT: {
- setNotif({
- message: i18n.str`Could not add bank account`,
- type: "ERROR",
- description: i18n.str`The account info URL returned information from an account which is not the same in the account form: ${resp.detail.hint} and ${request.payto_uri}`,
- });
- return;
- }
- default: {
- assertUnreachable(resp);
- }
- }
- }
- }
-
return api.instance
.addBankAccount(state.token, request)
.then(() => {
@@ -147,11 +86,9 @@ export enum TestRevenueErrorType {
export async function testRevenueAPI(
revenueAPI: URL,
creds: FacadeCredentials | undefined,
- account: PaytoString,
): Promise<OperationOk<void> | OperationFail<HttpStatusCode.NotFound>
| OperationFail<HttpStatusCode.Unauthorized>
| OperationFail<HttpStatusCode.BadRequest>
-| OperationFail<TestRevenueErrorType.ANOTHER_ACCOUNT>
| TalerError> {
const api = new TalerRevenueHttpClient(
revenueAPI.href,
@@ -176,21 +113,6 @@ export async function testRevenueAPI(
return config;
}
- const history = await api.getHistory(auth);
-
- if (history.type === "fail") {
- return history;
- }
- if (history.body.credit_account !== account) {
- return {
- type: "fail",
- case: TestRevenueErrorType.ANOTHER_ACCOUNT,
- detail: {
- code: 1,
- hint: history.body.credit_account
- },
- };
- }
} catch (err) {
if (err instanceof TalerError) {
return err;
diff --git a/packages/merchant-backoffice-ui/src/paths/instance/transfers/list/index.tsx b/packages/merchant-backoffice-ui/src/paths/instance/transfers/list/index.tsx
index 267d41711..6a16446d8 100644
--- a/packages/merchant-backoffice-ui/src/paths/instance/transfers/list/index.tsx
+++ b/packages/merchant-backoffice-ui/src/paths/instance/transfers/list/index.tsx
@@ -112,7 +112,7 @@ export default function ListTransfer({ onCreate }: Props): VNode {
onCreate={onCreate}
onDelete={async (transfer) => {
try {
- const resp = await lib.instance.deleteWireTransfer(state.token, transfer.wtid);
+ const resp = await lib.instance.deleteWireTransfer(state.token, String(transfer.transfer_serial_id));
if (resp.type === "ok") {
setNotif({
message: i18n.str`Wire transfer "${transfer.wtid.substring(0,16)}..." has been deleted`,