diff options
author | Florian Dold <florian@dold.me> | 2022-10-04 16:32:12 +0200 |
---|---|---|
committer | Florian Dold <florian@dold.me> | 2022-10-04 16:32:12 +0200 |
commit | 9758c90c6bcbd8306553af901aea29115ee680a9 (patch) | |
tree | dc69d3dcb7e424183203e8c31fe0dc7618b4c876 /taler-wallet.rst | |
parent | 34f9ac958f1e2dc4e33e40c330531963f6d09d22 (diff) | |
download | docs-9758c90c6bcbd8306553af901aea29115ee680a9.tar.gz docs-9758c90c6bcbd8306553af901aea29115ee680a9.tar.bz2 docs-9758c90c6bcbd8306553af901aea29115ee680a9.zip |
remove docs for wallet API that are now auto-generated
Diffstat (limited to 'taler-wallet.rst')
-rw-r--r-- | taler-wallet.rst | 943 |
1 files changed, 0 insertions, 943 deletions
diff --git a/taler-wallet.rst b/taler-wallet.rst index 0d889a3a..5dc47c5f 100644 --- a/taler-wallet.rst +++ b/taler-wallet.rst @@ -86,10 +86,6 @@ Please see :ref:`Build-apps-from-source` in the :doc:`taler-developer-manual`. APIs and Data Formats ===================== -.. warning:: - - These APIs are still a work in progress and *not* final. - Envelope Format --------------- @@ -153,487 +149,6 @@ following envelope: details: unknown; } -Balances --------- - -Balances are the amounts of digital cash held by the wallet. - -:name: ``"getBalances"`` -:description: Get a list of balances per currency. -:response: - .. ts:def:: BalancesResponse - - interface BalancesResponse { - // a list of balances sorted by currency. - // (currencies with shorter names first, then lexically ascending). - // - // Note: Even when a currency has no balance, but pending or past transactions, - // it should be included in this list with a balance of zero. - balances: Balance[]; - } - - .. ts:def:: Balance - - // Balance for one currency. - // The currency can be derived from any of the - // "Amount" fields, as the currency is present even - // when the amount is zero. - interface Balance { - // The total Amount that is currently available to be spent - // including amounts tied up in ongoing refresh operations. These are hidden from the user. - // If the user tries to spend coins locked up this way, - // the wallet will give an error message different from "insufficient balance". - available: Amount; - - // the total incoming amount that will be added to the available balance - // when all pending transactions succeed (including internal refreshes) - pendingIncoming: Amount; - - // the total outgoing amount that will be subtracted from the available balance - // when all pending transactions succeed (including internal refreshes) - pendingOutgoing: Amount; - - // true if the balance requires user-interaction, e.g. accepting a tip - // (DEV: can be left out of a first implementation) - requiresUserInput: boolean; - } - -Transactions ------------- - -Transactions are all operations or events that affect the balance. - -:Name: ``"getTransactions"`` -:Description: Get a list of past and pending transactions. -:Request: - .. ts:def:: TransactionsRequest - - interface TransactionsRequest { - // return only transactions in the given currency, if present - currency?: string; - - // if present, results will be limited to transactions related to the given search string - search?: string; - } -:Response: - .. ts:def:: TransactionsResponse - - interface TransactionsResponse { - // a list of past and pending transactions sorted by pending, timestamp and transactionId. - // In case two events are both pending and have the same timestamp, - // they are sorted by the transactionId - // (i.e. pending before non-pending transactions, newer before older - // and if all equal transactionId lexically ascending). - transactions: Transaction[]; - } - - .. ts:def:: Transaction - - interface Transaction { - // opaque unique ID for the transaction, used as a starting point for paginating queries - // and for invoking actions on the transaction (e.g. deleting/hiding it from the history) - transactionId: string; - - // the type of the transaction; different types might provide additional information - type: TransactionType; - - // main timestamp of the transaction - timestamp: Timestamp; - - // true if the transaction is still pending, false otherwise - // If a transaction is not longer pending, its timestamp will be updated, - // but its transactionId will remain unchanged - pending: boolean; - - // if present, the transaction encountered a fatal error that needs to be shown to the user - error?: TransactionError; - - // Raw amount of the transaction (exclusive of fees or other extra costs) - amountRaw: Amount; - - // Amount added or removed from the wallet's balance (including all fees and other costs) - amountEffective: Amount; - } - - .. ts:def:: TransactionType - - type TransactionType = ( - TransactionWithdrawal | - TransactionPayment | - TransactionRefund | - TransactionTip | - TransactionRefresh - ) - - .. ts:def:: TransactionError - - interface TransactionError { - // TALER_EC_* unique error code. - // The action(s) offered and message displayed on the transaction item depend on this code. - ec: number; - - // English-only error hint, if available. - hint?: string; - - // Error details specific to "ec", if applicable/available - details?: any; - } - - .. ts:def:: WithdrawalDetails - - export type WithdrawalDetails = - | WithdrawalDetailsForManualTransfer - | WithdrawalDetailsForTalerBankIntegrationApi; - - .. ts:def:: WithdrawalDetailsForManualTransfer - - interface WithdrawalDetailsForManualTransfer { - type: "manual-transfer"; - - // Payto URIs that the exchange supports. - // Already contains the amount and message. - exchangePaytoUris: string[]; - - // Public key of the newly created reserve. - // Not useful for the UI, but required for integration testing. - reservePub: string; - } - - .. ts:def:: WithdrawalDetailsForTalerBankIntegrationApi - - interface WithdrawalDetailsForTalerBankIntegrationApi { - type: "taler-bank-integration-api"; - - // Set to true if the bank has confirmed the withdrawal, false if not. - // An unconfirmed withdrawal usually requires user-input and should be highlighted in the UI. - // See also bankConfirmationUrl below. - confirmed: boolean; - - // If the withdrawal is unconfirmed, this can include a URL for user - // initiated confirmation. - bankConfirmationUrl?: string; - } - - .. ts:def:: TransactionWithdrawal - - // This should only be used for actual withdrawals - // and not for tips that have their own transactions type. - interface TransactionWithdrawal extends Transaction { - type: string = "withdrawal", - - // Exchange that was withdrawn from. - exchangeBaseUrl: string; - - // Amount that has been subtracted from the reserve's balance for this withdrawal. - amountRaw: Amount; - - // Amount that actually was (or will be) added to the wallet's balance. - // Should always be shown as a positive amount. - amountEffective: Amount; - - // Further details - withdrawalDetails: WithdrawalDetails; - } - - .. ts:def:: TransactionPayment - - interface TransactionPayment extends Transaction { - type: string = "payment", - - // Additional information about the payment. - info: OrderShortInfo; - - // Wallet-internal end-to-end identifier for the payment - // (assigned before the order is even downloaded, thus the name). - proposalId: string; - - // The current status of this payment. - status: PaymentStatus; - - // Amount that must be paid for the contract - amountRaw: Amount; - - // Amount that was paid, including deposit, wire and refresh fees. - // Should always be shown as a negative amount. - amountEffective: Amount; - } - - .. ts:def:: OrderShortInfo - - interface OrderShortInfo { - // Order ID, uniquely identifies the order within a merchant instance - orderId: string; - - // More information about the merchant - merchant: Merchant; - - // Summary of the order, given by the merchant - summary: string; - - // Map from IETF BCP 47 language tags to localized summaries - summary_i18n?: { [lang_tag: string]: string }; - - // List of products that are part of the order - products: Product[]; - - // URL of the fulfillment, given by the merchant - fulfillmentUrl?: string; - - // Message shown to the user after the payment is complete. - fulfillmentMessage?: string; - - // Map from IETF BCP 47 language tags to localized fulfillment messages - fulfillmentMessage_i18n: { [lang_tag: string]: string }; - } - - .. ts:def:: PaymentStatus - - enum PaymentStatus { - // Explicitly aborted after timeout / failure - Aborted = "aborted", - - // Payment failed, wallet will auto-retry. - // User should be given the option to retry now / abort. - Failed = "failed", - - // Paid successfully - Paid = "paid", - - // Only offered, user must accept / decline - Offered = "offered", - - // User accepted, payment is processing. - Accepted = "accepted", - } - - .. ts:def:: TransactionRefund - - interface TransactionRefund extends Transaction { - type: string = "refund", - - // ID for the transaction that is refunded - refundedTransactionId: string; - - // Additional information about the refunded payment - info: OrderShortInfo; - - // Part of the refund that couldn't be applied because the refund permissions were expired - amountInvalid: Amount; - - // Amount that has been refunded by the merchant. - // Corresponds to amountRefundGranted from the applyRefund response. - amountRaw: Amount; - - // Amount will be added to the wallet's balance after fees and refreshing. - // Should always be shown as a positive amount. - amountEffective: Amount; - } - - .. ts:def:: TransactionTip - - interface TransactionTip extends Transaction { - type: string = "tip", - - // The current status of this tip. - status: TipStatus; - - // Exchange that the tip will be (or was) withdrawn from - exchangeBaseUrl: string; - - // More information about the merchant that sent the tip - merchant: Merchant; - - // Raw amount of the tip, without extra fees that apply - amountRaw: Amount; - - // Amount will be (or was) added to the wallet's balance after fees and refreshing. - // Should always be shown as a positive amount. - amountEffective: Amount; - } - - .. ts:def:: TipStatus - - enum TipStatus { - // Only offered, user must accept / decline - Offered = "offered", - - // User accepted, tip is processing. - Accepted = "accepted", - - // User declined. - Declined = "declined", - - // Received successfully - Received = "received", - } - - .. ts:def:: TransactionRefresh - - // A transaction shown for refreshes that are not associated to other transactions - // such as a refresh necessary before coin expiration. - // It should only be returned by the API if the effective amount is different from zero. - interface TransactionRefresh extends Transaction { - type: string = "refresh", - - // Exchange that the coins are refreshed with - exchangeBaseUrl: string; - - // Raw amount that is refreshed - amountRaw: Amount; - - // Amount that will be paid as fees for the refresh. - // Should always be shown as a negative amount. - amountEffective: Amount; - } - - -:Name: ``"deleteTransaction"`` -:Description: Delete a transaction by ID. -:Request: - .. ts:def:: DeleteTransactionRequest - - interface DeleteTransactionRequest { - // Transaction ID (opaque!) as returned in - // the transaction list response. - transactionId: string; - } -:Response: Returns an empty object - -Refunds -------- - -:Name: ``"applyRefund"`` -:Description: Process a refund from a ``taler://refund`` URI. -:Request: - .. ts:def:: WalletApplyRefundRequest - - interface WalletApplyRefundRequest { - talerRefundUri: string; - } -:Response: - .. ts:def:: WalletApplyRefundResponse - - interface WalletApplyRefundResponse { - // Identifier for the purchase that was refunded - // DEPRECATED: Will disappear soon. - contractTermsHash: string; - - amountEffectivePaid: Amount; - - amountRefundGranted: Amount; - - amountRefundGone: Amount; - - pendingAtExchange: boolean; - - // Short info about the order being refunded. - info: OrderShortInfo; - } - -Exchange Management -------------------- - -List Exchanges -~~~~~~~~~~~~~~ - -:Name: ``"listExchanges"`` -:Description: - List all exchanges. -:Response: - .. ts:def:: ExchangesListResponse - - interface ExchangesListResponse { - exchanges: ExchangeListItem[]; - } - - .. ts:def:: ExchangeListItem - - interface ExchangeListItem { - exchangeBaseUrl: string; - currency: string; - paytoUris: string[]; - } - -Add Exchange -~~~~~~~~~~~~ - -:Name: ``"addExchange"`` -:Description: - Add an exchange. -:Request: - .. ts:def:: ExchangeAddRequest - - interface ExchangeAddRequest { - exchangeBaseUrl: string; - } -:Response: - On success, the response is an `ExchangeListItem`. - - -Force Exchange Update -~~~~~~~~~~~~~~~~~~~~~ - -:Name: ``"forceUpdateExchange"`` -:Description: - Force updating an exchange. - Re-queries current cryptographic key material, wire information - and terms of service from the exchange. Also applies denomination revocations - if applicable. -:Request: - .. ts:def:: ExchangeForceUpdateRequest - - interface ExchangeForceUpdateRequest { - exchangeBaseUrl: string; - } -:Response: - On success, the response is an `ExchangeListItem`. - - -Get Terms of Service -~~~~~~~~~~~~~~~~~~~~ - -:Name: ``"getExchangeTos"`` -:Description: - Get the exchange's current ToS and which version of the ToS (if any) - the user has accepted. -:Request: - .. ts:def:: ExchangeGetTosRequest - - interface ExchangeGetTosRequest { - exchangeBaseUrl: string; - } -:Response: - .. ts:def:: ExchangeGetTosResult - - interface GetExchangeTosResult { - // Markdown version of the current ToS. - content: string; - - // Version tag of the current ToS. - currentEtag: string; - - // Version tag of the last ToS that the user has accepted, - // if any. - acceptedEtag: string | undefined; - } - -Set Accepted Terms of Service Version -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -:Name: ``"setExchangeTosAccepted"`` -:Description: - Store that the user has accepted a version of the exchange's ToS. -:Request: - .. ts:def:: ExchangeSetTosAccepted - - interface ExchangeGetTosRequest { - exchangeBaseUrl: string; - etag: string; - } -:Response: - On success, the response is an empty object. - - Withdrawal ---------- @@ -657,464 +172,6 @@ A typical API sequence for *manual* withdrawals can for example look like this: #. ``"acceptManualWithdrawal"`` after the user confirmed withdrawal with associated fees -Get Details For Bank-integrated Withdrawal -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -:Name: ``"getWithdrawalDetailsForUri"`` -:Description: - Get information about exchanges for a bank-integrated withdrawal from a ``taler://withdraw`` URI. -:Request: - .. ts:def:: GetWithdrawalUriDetailsRequest - - interface GetWithdrawalUriDetailsRequest { - talerWithdrawUri: string; - } -:Response: - .. ts:def:: WithdrawalDetailsForUri - - interface WithdrawalDetailsForUri { - // The amount that the user wants to withdraw - amount: Amount; - - // Exchange suggested by the wallet - defaultExchangeBaseUrl?: string; - - // A list of exchanges that can be used for this withdrawal - possibleExchanges: ExchangeListItem[]; - } - -Get Withdrawal Details -~~~~~~~~~~~~~~~~~~~~~~ - -:Name: ``"getWithdrawalDetailsForAmount"`` -:Description: - Get information about fees and exchange for a withdrawal of a given amount. - Can be used for both bank-integrated and manual withdrawals. -:Request: - .. ts:def:: WithdrawalDetailsRequest - - interface WithdrawalDetailsRequest { - exchangeBaseUrl: string; - amount: Amount; - } -:Response: - .. ts:def:: WithdrawalDetails - - interface WithdrawalDetails { - // Did the user accept the current version of the exchange's terms of service? - tosAccepted: boolean; - - // Amount that will be transferred to the exchange. - amountRaw: Amount; - - // Amount that will be added to the user's wallet balance. - amountEffective: Amount; - } - -Accept Bank-integrated Withdrawal -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -:Name: ``"acceptWithdrawal"`` -:Description: - Accept a bank-integrated withdrawal, where the bank transfers funds automatically. -:Request: - .. ts:def:: GetManualWithdrawalDetailsRequest - - interface AcceptWithdrawalRequest { - talerWithdrawUri: string; - exchangeBaseUrl: string; - } -:Response: - .. ts:def:: AcceptWithdrawalResponse - - interface AcceptWithdrawalResponse { - // a URL for user initiated confirmation. - bankConfirmationUrl?: string; - } - -Accept Manual Withdrawal -~~~~~~~~~~~~~~~~~~~~~~~~ - -:Name: ``"acceptManualWithdrawal"`` -:Description: - Accept a manual withdrawal, where the user has to transfer funds manually. -:Request: - .. ts:def:: AcceptManualWithdrawalRequest - - interface AcceptManualWithdrawalRequest { - exchangeBaseUrl: string; - amount: Amount; - } -:Response: - .. ts:def:: AcceptManualWithdrawalResponse - - interface AcceptManualWithdrawalResponse { - // Payto URIs to fund the withdrawal, - // with amount and message provided. - exchangePaytoUris: string[]; - } - -Deposits --------- - -Deposits are direct payments into a payment target (given via -a payto URI). They don't involve a merchant. - -:Name: ``"createDepositGroup"`` -:Description: - Deposit funds directly into a payment target. -:Request: - .. ts:def:: CreateDepositGroupRequest - - interface CreateDepositGroupRequest { - depositPaytoUri: string; - amount: Amount; - } -:Response: - .. ts:def:: CreateDepositGroupResponse - - interface CreateDepositGroupResponse { - depositGroupId: string; - } - - -Payments --------- - -Prepare Pay -~~~~~~~~~~~ - -:Name: ``"preparePay"`` -:Description: - Fetch information about a payment request from a merchant. -:Request: - .. ts:def:: PreparePayRequest - - interface PreparePayRequest { - talerPayUri: string; - } -:Response: - .. ts:def:: PreparePayResponse - - type PreparePayResponse = - | PreparePayPaymentPossibleResponse - | PreparePayAlreadyConfirmedResponse - | PreparePayInsufficientBalanceResponse; - - .. ts:def:: PreparePayPaymentPossibleResponse - - interface PreparePayPaymentPossibleResponse { - status: "payment-possible"; - - proposalId: string; - - // Verbatim contract terms as generated by the merchant. - contractTerms: ContractTerms; - - // Amount that the merchant is asking for. - amountRaw: Amount; - - // Amount that will effectively be subtracted from the wallet's - // balance when accepting this proposal. - amountEffective: Amount; - } - - .. ts:def:: PreparePayInsufficientBalanceResponse - - interface PreparePayInsufficientBalanceResponse { - status: "insufficient-balance"; - - proposalId: string; - - // Amount that the merchant is asking for. - amountRaw: Amount; - - // Verbatim contract terms as generated by the merchant. - contractTerms: ContractTerms; - } - - .. ts:def:: PreparePayAlreadyConfirmedResponse - - interface PreparePayAlreadyConfirmedResponse { - status: "already-confirmed"; - - proposalId: string; - - // Did the payment succeed? - paid: boolean; - - // Amount that the merchant is asking for. - amountRaw: Amount; - - // Amount that will be subtracted from the wallet balance - amountEffective: Amount; - - // Verbatim contract terms as generated by the merchant. - contractTerms: ContractTerms; - } - - -Confirm Payment -~~~~~~~~~~~~~~~ - -:Name: ``"confirmPay"`` -:Description: - Confirm making a payment. - -:Request: - .. ts:def:: GetManualWithdrawalDetailsRequest - - interface ConfirmPayRequest { - proposalId: string; - } -:Response: - .. ts:def:: ConfirmPayResultDone - - interface ConfirmPayResultDone { - type: "done"; - - contractTerms: ContractTerms; - } - - .. ts:def:: ConfirmPayResultPending - - // Payment was marked as confirmed, - // but the attempt(s) to pay were not successful yet. - interface ConfirmPayPending { - type: "pending"; - - lastError: TransactionError; - } - - .. ts:def:: ConfirmPayResult - - type ConfirmPayResult = - | ConfirmPayResultDone; - | ConfirmPayResultPending; - -Abort Failed Payment -~~~~~~~~~~~~~~~~~~~~ - -:Name: ``"abortFailedPayWithRefund"`` -:Description: - Abort a failed payment and try to get a refund for the - partially paid amount. -:Request: - .. ts:def:: AbortPayWithRefundRequest - - export interface AbortPayWithRefundRequest { - proposalId: string; - } -:Response: - On success, the response is an empty object. - -Tipping API Calls ------------------ - -Preparing a tip -~~~~~~~~~~~~~~~ - -:Name: ``"prepareTip"`` -:Description: - Prepare to accept a tip based in a ``taler://tip`` URI. -:Request: - .. ts:def:: PrepareTipRequest - - interface PrepareTipRequest { - talerTipUri: string; - } -:Response: - .. ts:def:: PrepareTipResult - - interface PrepareTipResult { - // Unique ID for the tip assigned by the wallet. - // Typically different from the merchant-generated tip ID. - walletTipId: string; - - // Has the tip already been accepted? - accepted: boolean; - tipAmountRaw: Amount; - tipAmountEffective: Amount; - exchangeBaseUrl: string; - expirationTimestamp: Timestamp; - } - - -Accepting a tip -~~~~~~~~~~~~~~~ - -:Name: ``"acceptTip"`` -:Description: - Prepare to accept a tip based in a ``taler://tip`` URI. -:Request: - .. ts:def:: AcceptTipRequest - - interface AcceptTipRequest { - walletTipId: string; - } -:Response: - On success, the response is an empty object. - -Testing API calls ------------------ - -The following API calls are useful for testing. - -Withdraw balance from the TESTKUDOS environment -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -:Name: ``"withdrawTestkudos"`` -:Description: - Withdraw a balance from the ``TESTKUDOS`` environment. -:Request: - The request parameters are ignored. -:Response: - On success, the response is an empty object. - -Withdraw balance from a test environment -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -:Name: ``"withdrawTestBalance"`` -:Description: - Withdraw a balance from a test environment. -:Request: - .. ts:def:: WithdrawTestBalanceRequest - - interface WithdrawTestBalanceRequest { - amount: string; - bankBaseUrl: string; - exchangeBaseUrl: string; - } -:Response: - On success, the response is an empty object. - -Run integration test -~~~~~~~~~~~~~~~~~~~~ - -:Name: ``"runIntegrationTest"`` -:Description: - Run a basic integration test that does a withdrawal, payment, - refund and again a payment. Useful to generate test data - in the integration tests of other components. -:Request: - .. ts:def:: IntegrationTestArgs - - interface IntegrationTestArgs { - exchangeBaseUrl: string; - bankBaseUrl: string; - merchantBaseUrl: string; - merchantApiKey: string; - amountToWithdraw: string; - amountToSpend: string; - } -:Response: - On success, the response is an empty object. - -Make a test payment -~~~~~~~~~~~~~~~~~~~ - -:Name: ``"testPay"`` -:Description: - Make a test payment with existing funds. -:Request: - .. ts:def:: TestPayArgs - - interface TestPayArgs { - merchantBaseUrl: string; - merchantApiKey: string; - amount: string; - summary: string; - } - - -Dump all coins to JSON -~~~~~~~~~~~~~~~~~~~~~~ - -:Name: ``"dumpCoins"`` -:Description: - Make a test payment with existing funds. -:Request: - The request object is ignored. -:Response: - .. code:: ts - - interface CoinDumpJson { - coins: Array<{ - /** - * The coin's denomination's public key. - */ - denom_pub: string; - /** - * Hash of denom_pub. - */ - denom_pub_hash: string; - /** - * Value of the denomination (without any fees). - */ - denom_value: string; - /** - * Public key of the coin. - */ - coin_pub: string; - /** - * Base URL of the exchange for the coin. - */ - exchange_base_url: string; - /** - * Remaining value on the coin, to the knowledge of - * the wallet. - */ - remaining_value: string; - /** - * Public key of the parent coin. - * Only present if this coin was obtained via refreshing. - */ - refresh_parent_coin_pub: string | undefined; - /** - * Public key of the reserve for this coin. - * Only present if this coin was obtained via refreshing. - */ - withdrawal_reserve_pub: string | undefined; - /** - * Is the coin suspended? - * Suspended coins are not considered for payments. - */ - coin_suspended: boolean; - }>; - } - - -Suspend/unsuspend a coin -~~~~~~~~~~~~~~~~~~~~~~~~ - -A suspended coin will not be used by the wallet for payments. -This functionality is only used for testing. - -:Name: ``"setCoinSuspended"`` -:Description: - Make a test payment with existing funds. -:Request: - .. ts:def:: SetCoinSuspendedRequest - - interface SetCoinSuspendedRequest { - coinPub: string; - suspended: boolean; - } -:Request: - On success, the response is an empty object. - -Global Errors -------------- - -* Backup/Sync/Anastasis failed -* refresh after pay failed for multiple attempts - (depending on online status) -* scheduled refresh (to avoid expiration) failed -* general recoups (?) -* failed recoup -* (maybe) fatal errors during withdrawal -* pending refund failed permanently (?) - Integration Tests ================= |