summaryrefslogtreecommitdiff
path: root/packages/taler-wallet-webextension/src/hooks
diff options
context:
space:
mode:
authorSebastian <sebasjm@gmail.com>2022-01-20 13:13:53 -0300
committerSebastian <sebasjm@gmail.com>2022-01-24 09:46:20 -0300
commit2a417881bb5c67cf889d54932025badf5a85a9e0 (patch)
tree6f2dc4cd5c08bbf0f8c6a04713e954145ce1f72a /packages/taler-wallet-webextension/src/hooks
parente38be8d8ec1bdf1c854a2391ae9f4641cb69a249 (diff)
downloadwallet-core-2a417881bb5c67cf889d54932025badf5a85a9e0.tar.gz
wallet-core-2a417881bb5c67cf889d54932025badf5a85a9e0.tar.bz2
wallet-core-2a417881bb5c67cf889d54932025badf5a85a9e0.zip
fix permission api, grouping all cta into same path
Diffstat (limited to 'packages/taler-wallet-webextension/src/hooks')
-rw-r--r--packages/taler-wallet-webextension/src/hooks/useAsyncAsHook.ts20
-rw-r--r--packages/taler-wallet-webextension/src/hooks/useBackupStatus.ts81
-rw-r--r--packages/taler-wallet-webextension/src/hooks/useExtendedPermissions.ts43
3 files changed, 32 insertions, 112 deletions
diff --git a/packages/taler-wallet-webextension/src/hooks/useAsyncAsHook.ts b/packages/taler-wallet-webextension/src/hooks/useAsyncAsHook.ts
index e9f03d0fa..6efa1d181 100644
--- a/packages/taler-wallet-webextension/src/hooks/useAsyncAsHook.ts
+++ b/packages/taler-wallet-webextension/src/hooks/useAsyncAsHook.ts
@@ -13,20 +13,30 @@
You should have received a copy of the GNU General Public License along with
TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
*/
-import { NotificationType } from "@gnu-taler/taler-util";
+import { NotificationType, TalerErrorDetails } from "@gnu-taler/taler-util";
import { useEffect, useState } from "preact/hooks";
import * as wxApi from "../wxApi";
+import { OperationFailedError } from "@gnu-taler/taler-wallet-core";
interface HookOk<T> {
hasError: false;
response: T;
}
-interface HookError {
+export type HookError = HookGenericError | HookOperationalError
+
+export interface HookGenericError {
hasError: true;
+ operational: false,
message: string;
}
+export interface HookOperationalError {
+ hasError: true;
+ operational: true,
+ details: TalerErrorDetails;
+}
+
export type HookResponse<T> = HookOk<T> | HookError | undefined;
//"withdraw-group-finished"
@@ -41,8 +51,10 @@ export function useAsyncAsHook<T>(
const response = await fn();
setHookResponse({ hasError: false, response });
} catch (e) {
- if (e instanceof Error) {
- setHookResponse({ hasError: true, message: e.message });
+ if (e instanceof OperationFailedError) {
+ setHookResponse({ hasError: true, operational: true, details: e.operationError });
+ } else if (e instanceof Error) {
+ setHookResponse({ hasError: true, operational: false, message: e.message });
}
}
}
diff --git a/packages/taler-wallet-webextension/src/hooks/useBackupStatus.ts b/packages/taler-wallet-webextension/src/hooks/useBackupStatus.ts
deleted file mode 100644
index df1e82676..000000000
--- a/packages/taler-wallet-webextension/src/hooks/useBackupStatus.ts
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- This file is part of GNU Taler
- (C) 2021 Taler Systems S.A.
-
- GNU Taler is free software; you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the Free Software
- Foundation; either version 3, or (at your option) any later version.
-
- GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
- A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along with
- GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
- */
-
-import {
- ProviderInfo,
- ProviderPaymentPaid,
- ProviderPaymentStatus,
- ProviderPaymentType,
-} from "@gnu-taler/taler-wallet-core";
-import { useEffect, useState } from "preact/hooks";
-import * as wxApi from "../wxApi";
-
-export interface BackupStatus {
- deviceName: string;
- providers: ProviderInfo[];
- sync: () => Promise<void>;
-}
-
-function getStatusTypeOrder(t: ProviderPaymentStatus) {
- return [
- ProviderPaymentType.InsufficientBalance,
- ProviderPaymentType.TermsChanged,
- ProviderPaymentType.Unpaid,
- ProviderPaymentType.Paid,
- ProviderPaymentType.Pending,
- ].indexOf(t.type);
-}
-
-function getStatusPaidOrder(a: ProviderPaymentPaid, b: ProviderPaymentPaid) {
- return a.paidUntil.t_ms === "never"
- ? -1
- : b.paidUntil.t_ms === "never"
- ? 1
- : a.paidUntil.t_ms - b.paidUntil.t_ms;
-}
-
-export function useBackupStatus(): BackupStatus | undefined {
- const [status, setStatus] = useState<BackupStatus | undefined>(undefined);
-
- useEffect(() => {
- async function run() {
- //create a first list of backup info by currency
- const status = await wxApi.getBackupInfo();
-
- const providers = status.providers.sort((a, b) => {
- if (
- a.paymentStatus.type === ProviderPaymentType.Paid &&
- b.paymentStatus.type === ProviderPaymentType.Paid
- ) {
- return getStatusPaidOrder(a.paymentStatus, b.paymentStatus);
- }
- return (
- getStatusTypeOrder(a.paymentStatus) -
- getStatusTypeOrder(b.paymentStatus)
- );
- });
-
- async function sync() {
- await wxApi.syncAllProviders();
- }
-
- setStatus({ deviceName: status.deviceId, providers, sync });
- }
- run();
- }, []);
-
- return status;
-}
diff --git a/packages/taler-wallet-webextension/src/hooks/useExtendedPermissions.ts b/packages/taler-wallet-webextension/src/hooks/useExtendedPermissions.ts
index aaab0aa43..12a913b1f 100644
--- a/packages/taler-wallet-webextension/src/hooks/useExtendedPermissions.ts
+++ b/packages/taler-wallet-webextension/src/hooks/useExtendedPermissions.ts
@@ -17,16 +17,13 @@
import { useState, useEffect } from "preact/hooks";
import * as wxApi from "../wxApi";
import { getPermissionsApi } from "../compat";
-import { extendedPermissions } from "../permissions";
+import { getReadRequestPermissions } from "../permissions";
export function useExtendedPermissions(): [boolean, () => void] {
const [enabled, setEnabled] = useState(false);
const toggle = () => {
- setEnabled((v) => !v);
- handleExtendedPerm(enabled).then((result) => {
- setEnabled(result);
- });
+ handleExtendedPerm(enabled, setEnabled)
};
useEffect(() => {
@@ -39,30 +36,22 @@ export function useExtendedPermissions(): [boolean, () => void] {
return [enabled, toggle];
}
-async function handleExtendedPerm(isEnabled: boolean): Promise<boolean> {
- let nextVal: boolean | undefined;
-
+function handleExtendedPerm(isEnabled: boolean, onChange: (value: boolean) => void): void {
if (!isEnabled) {
- const granted = await new Promise<boolean>((resolve, reject) => {
- // We set permissions here, since apparently FF wants this to be done
- // as the result of an input event ...
- getPermissionsApi().request(extendedPermissions, (granted: boolean) => {
- if (chrome.runtime.lastError) {
- console.error("error requesting permissions");
- console.error(chrome.runtime.lastError);
- reject(chrome.runtime.lastError);
- return;
- }
- console.log("permissions granted:", granted);
- resolve(granted);
- });
+ // We set permissions here, since apparently FF wants this to be done
+ // as the result of an input event ...
+ getPermissionsApi().request(getReadRequestPermissions(), async (granted: boolean) => {
+ if (chrome.runtime.lastError) {
+ console.error("error requesting permissions");
+ console.error(chrome.runtime.lastError);
+ onChange(false);
+ return;
+ }
+ console.log("permissions granted:", granted);
+ const res = await wxApi.setExtendedPermissions(granted);
+ onChange(res.newValue);
});
- const res = await wxApi.setExtendedPermissions(granted);
- nextVal = res.newValue;
} else {
- const res = await wxApi.setExtendedPermissions(false);
- nextVal = res.newValue;
+ wxApi.setExtendedPermissions(false).then(r => onChange(r.newValue));
}
- console.log("new permissions applied:", nextVal ?? false);
- return nextVal ?? false;
}