aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian <sebasjm@gmail.com>2021-07-01 00:35:41 -0300
committerSebastian <sebasjm@gmail.com>2021-07-01 00:35:50 -0300
commita8e4f2d612fcf29c1b19bed999441211ed51ac08 (patch)
tree92c3cc110f6a723f659523f1b6d891ee361c0694
parent23dab91ee9e2ffcac381cc27183716b6881e0a88 (diff)
take backup info from wallet-core
-rw-r--r--packages/taler-wallet-webextension/src/hooks/useProvidersByCurrency.ts106
-rw-r--r--packages/taler-wallet-webextension/src/popup/Backup.stories.tsx5
-rw-r--r--packages/taler-wallet-webextension/src/popup/BackupPage.tsx9
-rw-r--r--packages/taler-wallet-webextension/src/wxApi.ts41
4 files changed, 76 insertions, 85 deletions
diff --git a/packages/taler-wallet-webextension/src/hooks/useProvidersByCurrency.ts b/packages/taler-wallet-webextension/src/hooks/useProvidersByCurrency.ts
index 9b600ee2b..dedaf6f86 100644
--- a/packages/taler-wallet-webextension/src/hooks/useProvidersByCurrency.ts
+++ b/packages/taler-wallet-webextension/src/hooks/useProvidersByCurrency.ts
@@ -1,88 +1,44 @@
import { Amounts } from "@gnu-taler/taler-util";
-// import { ProviderInfo } from "@gnu-taler/taler-wallet-core/src/operations/backup/index.js";
+import { ProviderInfo } from "@gnu-taler/taler-wallet-core/src/operations/backup";
+import { useEffect, useState } from "preact/hooks";
+import * as wxApi from "../wxApi";
export interface ProvidersByCurrency {
- [s:string] : any | undefined
+ [s: string]: ProviderInfo | undefined
}
-
-const list = {
- "trustedAuditors": [],
- "trustedExchanges": [
- {
- "currency": "ARS",
- "exchangeBaseUrl": "http://exchange.taler:8081/",
- "exchangeMasterPub": "WHA6G542TW8B10N3E857M3P252HV7B896TSP1HP6NREG96ADA4MG"
- },
- {
- "currency": "KUDOS",
- "exchangeBaseUrl": "https://exchange.demo.taler.net/",
- "exchangeMasterPub": "FH1Y8ZMHCTPQ0YFSZECDH8C9407JR3YN0MF1706PTG24Q4NEWGV0"
- },
- {
- "currency": "USD",
- "exchangeBaseUrl": "https://exchange.demo.taler.net/",
- "exchangeMasterPub": "FH1Y8ZMHCTPQ0YFSZECDH8C9407JR3YN0MF1706PTG24Q4NEWGV0"
- },
- {
- "currency": "EUR",
- "exchangeBaseUrl": "https://exchange.demo.taler.net/",
- "exchangeMasterPub": "FH1Y8ZMHCTPQ0YFSZECDH8C9407JR3YN0MF1706PTG24Q4NEWGV0"
- }
- ]
+export interface BackupStatus {
+ deviceName: string;
+ providers: ProvidersByCurrency
}
-const status = {
- "deviceId": "thenameofthisdevice",
- "walletRootPub": "83DYRKK262TG72H1SD09CTWXQFC151P2DXF9WYH30J8EQ7EAZMCG",
- "providers": [
- {
- "active": false,
- "syncProviderBaseUrl": "http://sync.demo.taler.net/",
- "paymentProposalIds": [],
- "paymentStatus": {
- "type": "unpaid"
- },
- "terms": {
- "annualFee": "KUDOS:0.1",
- "storageLimitInMegabytes": 16,
- "supportedProtocolVersion": "0.0"
- }
- }, {
- "active": true,
- "syncProviderBaseUrl": "http://sync.taler:9967/",
- "lastSuccessfulBackupTimestamp": {
- "t_ms": 1625063925078
- },
- "paymentProposalIds": [
- "43Q5WWRJPNS4SE9YKS54H9THDS94089EDGXW9EHBPN6E7M184XEG"
- ],
- "paymentStatus": {
- "type": "paid",
- "paidUntil": {
- "t_ms": 1656599921000
+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.reduce((p, c) => {
+ if (c.terms) {
+ p[Amounts.parseOrThrow(c.terms.annualFee).currency] = c
}
- },
- "terms": {
- "annualFee": "ARS:1",
- "storageLimitInMegabytes": 16,
- "supportedProtocolVersion": "0.0"
- }
- }
-
- ]
-}
+ return p
+ }, {} as ProvidersByCurrency)
+
+ //add all the known currency with no backup info
+ const list = await wxApi.listKnownCurrencies()
+ const currencies = list.exchanges.map(e => e.name).concat(list.auditors.map(a => a.name))
+ currencies.forEach(c => {
+ if (!providers[c]) {
+ providers[c] = undefined
+ }
+ })
-export function useProvidersByCurrency(): ProvidersByCurrency {
- const currencies = list.trustedExchanges.map(e => e.currency)
- const providerByCurrency = status.providers.reduce((p, c) => {
- if (c.terms) {
- p[Amounts.parseOrThrow(c.terms.annualFee).currency] = c
+ setStatus({ deviceName: status.deviceId, providers })
}
- return p
- }, {} as Record<string, any | undefined>)
+ run()
+ }, [])
-
- return providerByCurrency
+ return status
}
diff --git a/packages/taler-wallet-webextension/src/popup/Backup.stories.tsx b/packages/taler-wallet-webextension/src/popup/Backup.stories.tsx
index 0f51f3897..856360ebf 100644
--- a/packages/taler-wallet-webextension/src/popup/Backup.stories.tsx
+++ b/packages/taler-wallet-webextension/src/popup/Backup.stories.tsx
@@ -19,6 +19,7 @@
* @author Sebastian Javier Marchano (sebasjm)
*/
+import { ProviderPaymentType } from '@gnu-taler/taler-wallet-core/src/operations/backup';
import { FunctionalComponent } from 'preact';
import { BackupView as TestedComponent } from './BackupPage';
@@ -52,7 +53,7 @@ export const Example = createExample(TestedComponent, {
"43Q5WWRJPNS4SE9YKS54H9THDS94089EDGXW9EHBPN6E7M184XEG"
],
"paymentStatus": {
- "type": 'paid',
+ "type": ProviderPaymentType.Paid,
"paidUntil": {
"t_ms": 1656599921000
}
@@ -68,7 +69,7 @@ export const Example = createExample(TestedComponent, {
"syncProviderBaseUrl": "http://sync.demo.taler.net/",
"paymentProposalIds": [],
"paymentStatus": {
- "type": 'unpaid',
+ "type": ProviderPaymentType.Unpaid,
},
"terms": {
"annualFee": "KUDOS:0.1",
diff --git a/packages/taler-wallet-webextension/src/popup/BackupPage.tsx b/packages/taler-wallet-webextension/src/popup/BackupPage.tsx
index d13f5244d..9900720d9 100644
--- a/packages/taler-wallet-webextension/src/popup/BackupPage.tsx
+++ b/packages/taler-wallet-webextension/src/popup/BackupPage.tsx
@@ -19,11 +19,14 @@ import { Timestamp } from "@gnu-taler/taler-util";
// import { ProviderPaymentStatus } from "@gnu-taler/taler-wallet-core/src/operations/backup";
import { formatDuration, intervalToDuration } from "date-fns";
import { JSX, VNode } from "preact";
-import { ProvidersByCurrency, useProvidersByCurrency } from "../hooks/useProvidersByCurrency";
+import { ProvidersByCurrency, useBackupStatus } from "../hooks/useProvidersByCurrency";
export function BackupPage(): VNode {
- const providers = useProvidersByCurrency()
- return <BackupView deviceName={"thisdevicename"} providers={providers}/>;
+ const status = useBackupStatus()
+ if (!status) {
+ return <div>Loading...</div>
+ }
+ return <BackupView deviceName={status.deviceName} providers={status.providers}/>;
}
export interface ViewProps {
diff --git a/packages/taler-wallet-webextension/src/wxApi.ts b/packages/taler-wallet-webextension/src/wxApi.ts
index bba8ea1d3..81f418d40 100644
--- a/packages/taler-wallet-webextension/src/wxApi.ts
+++ b/packages/taler-wallet-webextension/src/wxApi.ts
@@ -38,7 +38,8 @@ import {
DeleteTransactionRequest,
RetryTransactionRequest,
} from "@gnu-taler/taler-util";
-import { OperationFailedError } from "@gnu-taler/taler-wallet-core";
+import { BackupProviderState, OperationFailedError } from "@gnu-taler/taler-wallet-core";
+import { BackupInfo } from "@gnu-taler/taler-wallet-core/src/operations/backup";
export interface ExtendedPermissionsResponse {
newValue: boolean;
@@ -132,18 +133,48 @@ export function getTransactions(): Promise<TransactionsResponse> {
return callBackend("getTransactions", {});
}
+interface CurrencyInfo {
+ name: string;
+ baseUrl: string;
+ pub: string;
+}
+interface ListOfKnownCurrencies {
+ auditors: CurrencyInfo[],
+ exchanges: CurrencyInfo[],
+}
+
+/**
+ * Get a list of currencies from known auditors and exchanges
+ */
+export function listKnownCurrencies(): Promise<ListOfKnownCurrencies> {
+ return callBackend("listCurrencies", {}).then(result => {
+ console.log("result list", result)
+ const auditors = result.trustedAuditors.map((a: Record<string, string>) => ({
+ name: a.currency,
+ baseUrl: a.auditorBaseUrl,
+ pub: a.auditorPub,
+ }))
+ const exchanges = result.trustedExchanges.map((a: Record<string, string>) => ({
+ name: a.currency,
+ baseUrl: a.exchangeBaseUrl,
+ pub: a.exchangeMasterPub,
+ }))
+ return { auditors, exchanges }
+ });
+}
+
/**
- * Get currency from known auditors and exchanges
+ * Get information about the current state of wallet backups.
*/
- export function listCurrencies(): Promise<TransactionsResponse> {
- return callBackend("listCurrencies", {});
+ export function getBackupInfo(): Promise<BackupInfo> {
+ return callBackend("getBackupInfo", {})
}
/**
* Retry a transaction
* @param transactionId
* @returns
*/
- export function retryTransaction(transactionId: string): Promise<void> {
+export function retryTransaction(transactionId: string): Promise<void> {
return callBackend("retryTransaction", {
transactionId
} as RetryTransactionRequest);