/* This file is part of TALER (C) 2016 GNUnet e.V. 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. 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 TALER; see the file COPYING. If not, see */ /** * Interface to the wallet through WebExtension messaging. */ /** * Imports. */ import { AmountJson, CheckPayResult, CoinRecord, ConfirmPayResult, CurrencyRecord, DenominationRecord, ExchangeRecord, OfferRecord, PreCoinRecord, ReserveCreationInfo, ReserveRecord, } from "../types"; async function callBackend(type: string, detail?: any): Promise { return new Promise((resolve, reject) => { chrome.runtime.sendMessage({ type, detail }, (resp) => { if (resp && resp.error) { reject(resp); } else { resolve(resp); } }); }); } /** * Query the wallet for the coins that would be used to withdraw * from a given reserve. */ export function getReserveCreationInfo(baseUrl: string, amount: AmountJson): Promise { return callBackend("reserve-creation-info", { baseUrl, amount }); } /** * Get all exchanges the wallet knows about. */ export function getExchanges(): Promise { return callBackend("get-exchanges"); } /** * Get all currencies the exchange knows about. */ export function getCurrencies(): Promise { return callBackend("get-currencies"); } /** * Get information about a specific currency. */ export function getCurrency(name: string): Promise { return callBackend("currency-info", {name}); } /** * Get information about a specific exchange. */ export function getExchangeInfo(baseUrl: string): Promise { return callBackend("exchange-info", {baseUrl}); } /** * Replace an existing currency record with the one given. The currency to * replace is specified inside the currency record. */ export function updateCurrency(currencyRecord: CurrencyRecord): Promise { return callBackend("update-currency", { currencyRecord }); } /** * Get all reserves the wallet has at an exchange. */ export function getReserves(exchangeBaseUrl: string): Promise { return callBackend("get-reserves", { exchangeBaseUrl }); } /** * Get all reserves for which a payback is available. */ export function getPaybackReserves(): Promise { return callBackend("get-payback-reserves"); } /** * Withdraw the payback that is available for a reserve. */ export function withdrawPaybackReserve(reservePub: string): Promise { return callBackend("withdraw-payback-reserve", { reservePub }); } /** * Get all coins withdrawn from the given exchange. */ export function getCoins(exchangeBaseUrl: string): Promise { return callBackend("get-coins", { exchangeBaseUrl }); } /** * Get all precoins withdrawn from the given exchange. */ export function getPreCoins(exchangeBaseUrl: string): Promise { return callBackend("get-precoins", { exchangeBaseUrl }); } /** * Get all denoms offered by the given exchange. */ export function getDenoms(exchangeBaseUrl: string): Promise { return callBackend("get-denoms", { exchangeBaseUrl }); } /** * Start refreshing a coin. */ export function refresh(coinPub: string): Promise { return callBackend("refresh-coin", { coinPub }); } /** * Request payback for a coin. Only works for non-refreshed coins. */ export function payback(coinPub: string): Promise { return callBackend("payback-coin", { coinPub }); } /** * Get an offer stored in the wallet by its offer id. * Note that the numeric offer id is not to be confused with * the string order_id from the contract terms. */ export function getOffer(offerId: number) { return callBackend("get-offer", { offerId }); } /** * Check if payment is possible or already done. */ export function checkPay(offer: OfferRecord): Promise { return callBackend("check-pay", { offer }); } /** * Pay for an offer. */ export function confirmPay(offer: OfferRecord): Promise { return callBackend("confirm-pay", { offer }); } /** * Hash a contract. Throws if its not a valid contract. */ export function hashContract(contract: object): Promise { return callBackend("confirm-pay", { contract }); } /** * Save an offer in the wallet. Returns the offer id that * the offer is stored under. */ export function saveOffer(offer: object): Promise { return callBackend("save-offer", { offer }); } /** * Mark a reserve as confirmed. */ export function confirmReserve(reservePub: string): Promise { return callBackend("confirm-reserve", { reservePub }); } /** * Query for a payment by fulfillment URL. */ export function queryPayment(url: string): Promise { return callBackend("query-payment", { url }); } /** * Add a new history item. */ export function putHistory(historyEntry: any): Promise { return callBackend("put-history-entry", { historyEntry }); } /** * Mark a payment as succeeded. */ export function paymentSucceeded(contractTermsHash: string, merchantSig: string): Promise { return callBackend("payment-succeeded", { contractTermsHash, merchantSig }); } /** * Mark a payment as succeeded. */ export function paymentFailed(contractTermsHash: string): Promise { return callBackend("payment-failed", { contractTermsHash }); } /** * Get the payment cookie for the current tab, or undefined if no payment * cookie was set. */ export function getTabCookie(contractTermsHash: string, merchantSig: string): Promise { return callBackend("get-tab-cookie"); } /** * Generate a contract nonce (EdDSA key pair), store it in the wallet's * database and return the public key. */ export function generateNonce(): Promise { return callBackend("generate-nonce"); }