diff options
author | Sebastian <sebasjm@gmail.com> | 2022-11-08 13:00:34 -0300 |
---|---|---|
committer | Sebastian <sebasjm@gmail.com> | 2022-11-08 13:00:34 -0300 |
commit | 5c742afbdf9aaa767c3e4617c48a98439e400fa2 (patch) | |
tree | 336aa5fc9bc02879e989aef4fe2a82a7b167ef8d /packages/taler-wallet-core/src/operations | |
parent | 43c7cff75055f72c7d59a7180ae8da2554456d8d (diff) | |
download | wallet-core-5c742afbdf9aaa767c3e4617c48a98439e400fa2.tar.xz |
feature: 7440 add expiration to p2p
Diffstat (limited to 'packages/taler-wallet-core/src/operations')
3 files changed, 44 insertions, 35 deletions
diff --git a/packages/taler-wallet-core/src/operations/backup/import.ts b/packages/taler-wallet-core/src/operations/backup/import.ts index 3159c60af..5fd220113 100644 --- a/packages/taler-wallet-core/src/operations/backup/import.ts +++ b/packages/taler-wallet-core/src/operations/backup/import.ts @@ -26,7 +26,7 @@ import { BackupRefreshReason, BackupRefundState, BackupWgType, - codecForContractTerms, + codecForMerchantContractTerms, CoinStatus, DenomKeyType, DenomSelectionState, @@ -638,7 +638,7 @@ export async function importBackup( break; } } - const parsedContractTerms = codecForContractTerms().decode( + const parsedContractTerms = codecForMerchantContractTerms().decode( backupPurchase.contract_terms_raw, ); const amount = Amounts.parseOrThrow(parsedContractTerms.amount); diff --git a/packages/taler-wallet-core/src/operations/pay-merchant.ts b/packages/taler-wallet-core/src/operations/pay-merchant.ts index 4483a57c0..bb391d468 100644 --- a/packages/taler-wallet-core/src/operations/pay-merchant.ts +++ b/packages/taler-wallet-core/src/operations/pay-merchant.ts @@ -34,7 +34,7 @@ import { Amounts, ApplyRefundResponse, codecForAbortResponse, - codecForContractTerms, + codecForMerchantContractTerms, codecForMerchantOrderRefundPickupResponse, codecForMerchantOrderStatusPaid, codecForMerchantPayResponse, @@ -456,7 +456,7 @@ export async function processDownloadProposal( let parsedContractTerms: MerchantContractTerms; try { - parsedContractTerms = codecForContractTerms().decode( + parsedContractTerms = codecForMerchantContractTerms().decode( proposalResp.contract_terms, ); } catch (e) { @@ -1584,7 +1584,7 @@ export async function runPayForConfirmPay( const numRetry = opRetry?.retryInfo.retryCounter ?? 0; if ( res.errorDetail.code === - TalerErrorCode.WALLET_PAY_MERCHANT_SERVER_ERROR && + TalerErrorCode.WALLET_PAY_MERCHANT_SERVER_ERROR && numRetry < maxRetry ) { // Pretend the operation is pending instead of reporting diff --git a/packages/taler-wallet-core/src/operations/pay-peer.ts b/packages/taler-wallet-core/src/operations/pay-peer.ts index b6acef2dc..f31a7f37c 100644 --- a/packages/taler-wallet-core/src/operations/pay-peer.ts +++ b/packages/taler-wallet-core/src/operations/pay-peer.ts @@ -57,6 +57,10 @@ import { parsePayPullUri, parsePayPushUri, PeerContractTerms, + PreparePeerPullPaymentRequest, + PreparePeerPullPaymentResponse, + PreparePeerPushPaymentRequest, + PreparePeerPushPaymentResponse, RefreshReason, strcmp, TalerProtocolTimestamp, @@ -218,28 +222,30 @@ export async function selectPeerCoins( return undefined; } +export async function preparePeerPushPayment( + ws: InternalWalletState, + req: PreparePeerPushPaymentRequest, +): Promise<PreparePeerPushPaymentResponse> { + // FIXME: look up for the exchange and calculate fee + return { + amountEffective: req.amount, + amountRaw: req.amount, + }; +} + export async function initiatePeerToPeerPush( ws: InternalWalletState, req: InitiatePeerPushPaymentRequest, ): Promise<InitiatePeerPushPaymentResponse> { - const instructedAmount = Amounts.parseOrThrow(req.amount); + const instructedAmount = Amounts.parseOrThrow( + req.partialContractTerms.amount, + ); + const purseExpiration = req.partialContractTerms.purse_expiration; + const contractTerms = req.partialContractTerms; const pursePair = await ws.cryptoApi.createEddsaKeypair({}); const mergePair = await ws.cryptoApi.createEddsaKeypair({}); - const purseExpiration: TalerProtocolTimestamp = AbsoluteTime.toTimestamp( - AbsoluteTime.addDuration( - AbsoluteTime.now(), - Duration.fromSpec({ days: 2 }), - ), - ); - - const contractTerms = { - ...req.partialContractTerms, - purse_expiration: purseExpiration, - amount: req.amount, - }; - const hContractTerms = ContractTermsUtil.hashContractTerms(contractTerms); const econtractResp = await ws.cryptoApi.encryptContractForMerge({ @@ -751,6 +757,16 @@ export async function checkPeerPullPayment( }; } +export async function preparePeerPullPayment( + ws: InternalWalletState, + req: PreparePeerPullPaymentRequest, +): Promise<PreparePeerPullPaymentResponse> { + //FIXME: look up for exchange details and use purse fee + return { + amountEffective: req.amount, + amountRaw: req.amount, + }; +} /** * Initiate a peer pull payment. */ @@ -769,24 +785,17 @@ export async function initiatePeerPullPayment( const pursePair = await ws.cryptoApi.createEddsaKeypair({}); const mergePair = await ws.cryptoApi.createEddsaKeypair({}); - const purseExpiration: TalerProtocolTimestamp = AbsoluteTime.toTimestamp( - AbsoluteTime.addDuration( - AbsoluteTime.now(), - Duration.fromSpec({ days: 2 }), - ), + const instructedAmount = Amounts.parseOrThrow( + req.partialContractTerms.amount, ); + const purseExpiration = req.partialContractTerms.purse_expiration; + const contractTerms = req.partialContractTerms; const reservePayto = talerPaytoFromExchangeReserve( req.exchangeBaseUrl, mergeReserveInfo.reservePub, ); - const contractTerms = { - ...req.partialContractTerms, - amount: req.amount, - purse_expiration: purseExpiration, - }; - const econtractResp = await ws.cryptoApi.encryptContractForDeposit({ contractTerms, pursePriv: pursePair.priv, @@ -796,7 +805,7 @@ export async function initiatePeerPullPayment( const hContractTerms = ContractTermsUtil.hashContractTerms(contractTerms); const purseFee = Amounts.stringify( - Amounts.zeroOfCurrency(Amounts.parseOrThrow(req.amount).currency), + Amounts.zeroOfCurrency(instructedAmount.currency), ); const sigRes = await ws.cryptoApi.signReservePurseCreate({ @@ -804,7 +813,7 @@ export async function initiatePeerPullPayment( flags: WalletAccountMergeFlags.CreateWithPurseFee, mergePriv: mergePair.priv, mergeTimestamp: mergeTimestamp, - purseAmount: req.amount, + purseAmount: req.partialContractTerms.amount, purseExpiration: purseExpiration, purseFee: purseFee, pursePriv: pursePair.priv, @@ -817,7 +826,7 @@ export async function initiatePeerPullPayment( .mktx((x) => [x.peerPullPaymentInitiations, x.contractTerms]) .runReadWrite(async (tx) => { await tx.peerPullPaymentInitiations.put({ - amount: req.amount, + amount: req.partialContractTerms.amount, contractTermsHash: hContractTerms, exchangeBaseUrl: req.exchangeBaseUrl, pursePriv: pursePair.priv, @@ -840,7 +849,7 @@ export async function initiatePeerPullPayment( purse_fee: purseFee, purse_pub: pursePair.pub, purse_sig: sigRes.purseSig, - purse_value: req.amount, + purse_value: req.partialContractTerms.amount, reserve_sig: sigRes.accountSig, econtract: econtractResp.econtract, }; @@ -862,7 +871,7 @@ export async function initiatePeerPullPayment( logger.info(`reserve merge response: ${j2s(resp)}`); const wg = await internalCreateWithdrawalGroup(ws, { - amount: Amounts.parseOrThrow(req.amount), + amount: instructedAmount, wgInfo: { withdrawalType: WithdrawalRecordType.PeerPullCredit, contractTerms, |