/*
This file is part of TALER
(C) 2017 Inria and 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
*/
/**
* Type definitions for messages between content scripts/pages and backend.
*/
// Messages are already documented in wxApi.
/* tslint:disable:completed-docs */
import * as types from "../types";
/**
* Message type information.
*/
export interface MessageMap {
"balances": {
request: { };
response: types.WalletBalance;
};
"dump-db": {
request: { };
response: any;
};
"import-db": {
request: {
dump: object;
};
response: void;
};
"get-tab-cookie": {
request: { }
response: any;
};
"ping": {
request: { };
response: void;
};
"reset-db": {
request: { };
response: void;
};
"create-reserve": {
request: {
amount: types.AmountJson;
exchange: string
};
response: void;
};
"confirm-reserve": {
request: { reservePub: string };
response: void;
}
"generate-nonce": {
request: { }
response: string;
};
"confirm-pay": {
request: { proposalId: number; };
response: types.ConfirmPayResult;
};
"check-pay": {
request: { proposalId: number; };
response: types.CheckPayResult;
};
"query-payment": {
request: { };
response: void;
};
"exchange-info": {
request: { baseUrl: string };
response: types.ExchangeRecord;
};
"currency-info": {
request: { name: string };
response: types.CurrencyRecord;
};
"hash-contract": {
request: { contract: object };
response: string;
};
"put-history-entry": {
request: { historyEntry: types.HistoryRecord };
response: void;
};
"save-proposal": {
request: { proposal: types.ProposalRecord };
response: void;
};
"reserve-creation-info": {
request: { baseUrl: string, amount: types.AmountJson };
response: types.ReserveCreationInfo;
}
"get-history": {
request: { };
response: types.HistoryRecord[];
};
"get-proposal": {
request: { proposalId: number };
response: types.ProposalRecord | undefined;
};
"get-coins": {
request: { exchangeBaseUrl: string };
response: any;
};
"refresh-coin": {
request: { coinPub: string };
response: any;
};
"get-currencies": {
request: { };
response: types.CurrencyRecord[];
};
"update-currency": {
request: { currencyRecord: types.CurrencyRecord };
response: void;
};
"get-exchanges": {
request: { };
response: types.ExchangeRecord[];
};
"get-reserves": {
request: { exchangeBaseUrl: string };
response: types.ReserveRecord[];
};
"get-payback-reserves": {
request: { };
response: types.ReserveRecord[];
};
"withdraw-payback-reserve": {
request: { reservePub: string };
response: void;
}
"get-precoins": {
request: { exchangeBaseUrl: string };
response: types.PreCoinRecord[];
};
"get-denoms": {
request: { exchangeBaseUrl: string };
response: types.DenominationRecord[];
};
"payback-coin": {
request: { coinPub: string };
response: void;
};
"payment-failed": {
request: { contractTermsHash: string };
response: void;
};
"payment-succeeded": {
request: { contractTermsHash: string; merchantSig: string };
response: void;
};
"check-upgrade": {
request: { };
response: void;
};
}
/**
* String literal types for messages.
*/
export type MessageType = keyof MessageMap;
/**
* Make a request whose details match the request type.
*/
export function makeRequest(type: T, details: MessageMap[T]["request"]) {
return { type, details };
}
/**
* Make a response that matches the request type.
*/
export function makeResponse(type: T, response: MessageMap[T]["response"]) {
return response;
}