import db from the wallet web extension
This commit is contained in:
parent
4b289cde5d
commit
cea0ac02b6
@ -1088,3 +1088,11 @@ export const codecForWithdrawFakebankRequest = (): Codec<WithdrawFakebankRequest
|
||||
.property("bank", codecForString())
|
||||
.property("exchange", codecForString())
|
||||
.build("WithdrawFakebankRequest");
|
||||
|
||||
export interface ImportDb {
|
||||
dump: any;
|
||||
}
|
||||
export const codecForImportDbRequest = (): Codec<ImportDb> =>
|
||||
buildCodecForObject<ImportDb>()
|
||||
.property("dump", codecForAny())
|
||||
.build("ImportDbRequest")
|
||||
|
@ -45,6 +45,7 @@ import {
|
||||
PaytoUri,
|
||||
codecForGetFeeForDeposit,
|
||||
codecForListKnownBankAccounts,
|
||||
codecForImportDbRequest,
|
||||
} from "@gnu-taler/taler-util";
|
||||
import {
|
||||
addBackupProvider,
|
||||
@ -130,6 +131,7 @@ import {
|
||||
AuditorTrustRecord,
|
||||
CoinSourceType,
|
||||
exportDb,
|
||||
importDb,
|
||||
ReserveRecordStatus,
|
||||
WalletStoresV1,
|
||||
} from "./db.js";
|
||||
@ -997,6 +999,11 @@ async function dispatchRequestInternal(
|
||||
const dbDump = await exportDb(ws.db.idbHandle());
|
||||
return dbDump;
|
||||
}
|
||||
case "importDb": {
|
||||
const req = codecForImportDbRequest().decode(payload);
|
||||
await importDb(ws.db.idbHandle(), req.dump);
|
||||
return [];
|
||||
}
|
||||
}
|
||||
throw OperationFailedError.fromCode(
|
||||
TalerErrorCode.WALLET_CORE_API_OPERATION_UNKNOWN,
|
||||
|
@ -18,7 +18,7 @@ import { NotificationType } from "@gnu-taler/taler-util";
|
||||
import { PendingTaskInfo } from "@gnu-taler/taler-wallet-core";
|
||||
import { format } from "date-fns";
|
||||
import { Fragment, h, VNode } from "preact";
|
||||
import { useState } from "preact/hooks";
|
||||
import { useRef, useState } from "preact/hooks";
|
||||
import { Diagnostics } from "../components/Diagnostics";
|
||||
import { NotifyUpdateFadeOut } from "../components/styled";
|
||||
import { Time } from "../components/Time";
|
||||
@ -83,11 +83,34 @@ export function View({
|
||||
content,
|
||||
});
|
||||
}
|
||||
const fileRef = useRef<HTMLInputElement>(null);
|
||||
async function onImportDatabase(str: string): Promise<void> {
|
||||
return wxApi.importDB(JSON.parse(str));
|
||||
}
|
||||
return (
|
||||
<div>
|
||||
<p>Debug tools:</p>
|
||||
<button onClick={confirmReset}>reset</button>
|
||||
<br />
|
||||
<button onClick={() => fileRef?.current?.click()}>import database</button>
|
||||
<input
|
||||
ref={fileRef}
|
||||
style={{ display: "none" }}
|
||||
type="file"
|
||||
onChange={async (e) => {
|
||||
const f: FileList | null = e.currentTarget.files;
|
||||
if (!f || f.length != 1) {
|
||||
return Promise.reject();
|
||||
}
|
||||
const buf = await f[0].arrayBuffer();
|
||||
const str = new Uint8Array(buf).reduce(
|
||||
(data, byte) => data + String.fromCharCode(byte),
|
||||
"",
|
||||
);
|
||||
return onImportDatabase(str);
|
||||
}}
|
||||
/>
|
||||
<br />
|
||||
<button onClick={onExportDatabase}>export database</button>
|
||||
{downloadedDatabase && (
|
||||
<div>
|
||||
@ -152,6 +175,8 @@ export function reload(): void {
|
||||
}
|
||||
}
|
||||
|
||||
function runIntegrationTest() {}
|
||||
|
||||
export async function confirmReset(): Promise<void> {
|
||||
if (
|
||||
confirm(
|
||||
|
@ -110,7 +110,6 @@ export function View({
|
||||
setAmount(num);
|
||||
setFee(undefined);
|
||||
}
|
||||
const feeHasBeenCalculated = fee !== undefined;
|
||||
const currency = balance.currency;
|
||||
const amountStr: AmountString = `${currency}:${amount}`;
|
||||
const feeSum =
|
||||
@ -151,7 +150,7 @@ export function View({
|
||||
: !parsedAmount
|
||||
? "Invalid amount"
|
||||
: Amounts.cmp(balance, parsedAmount) === -1
|
||||
? `To much, your current balance is ${Amounts.stringifyValue(balance)}`
|
||||
? `Too much, your current balance is ${Amounts.stringifyValue(balance)}`
|
||||
: undefined;
|
||||
|
||||
const totalToDeposit = parsedAmount
|
||||
@ -159,7 +158,7 @@ export function View({
|
||||
: Amounts.getZero(currency);
|
||||
|
||||
const unableToDeposit =
|
||||
Amounts.isZero(totalToDeposit) && feeHasBeenCalculated;
|
||||
Amounts.isZero(totalToDeposit) || fee === undefined || error !== undefined;
|
||||
|
||||
return (
|
||||
<Fragment>
|
||||
@ -224,12 +223,13 @@ export function View({
|
||||
</section>
|
||||
<footer>
|
||||
<div />
|
||||
<ButtonPrimary
|
||||
disabled={unableToDeposit}
|
||||
onClick={() => onSend(accountURI, amountStr)}
|
||||
>
|
||||
Deposit {Amounts.stringifyValue(totalToDeposit)} {currency}
|
||||
</ButtonPrimary>
|
||||
{unableToDeposit ? (
|
||||
<ButtonPrimary disabled>Deposit</ButtonPrimary>
|
||||
) : (
|
||||
<ButtonPrimary onClick={() => onSend(accountURI, amountStr)}>
|
||||
Deposit {Amounts.stringifyValue(totalToDeposit)} {currency}
|
||||
</ButtonPrimary>
|
||||
)}
|
||||
</footer>
|
||||
</Fragment>
|
||||
);
|
||||
|
@ -376,6 +376,10 @@ export function exportDB(): Promise<any> {
|
||||
return callBackend("exportDb", {});
|
||||
}
|
||||
|
||||
export function importDB(dump: any): Promise<void> {
|
||||
return callBackend("importDb", { dump })
|
||||
}
|
||||
|
||||
export function onUpdateNotification(messageTypes: Array<NotificationType>, doCallback: () => void): () => void {
|
||||
// eslint-disable-next-line no-undef
|
||||
const port = chrome.runtime.connect({ name: "notifications" });
|
||||
|
Loading…
Reference in New Issue
Block a user