pending fixes

This commit is contained in:
Florian Dold 2019-12-06 03:23:35 +01:00
parent 4159367d8c
commit e01f94e345
No known key found for this signature in database
GPG Key ID: D2E4F00F29D02A4B
3 changed files with 53 additions and 16 deletions

View File

@ -139,25 +139,17 @@ async function gatherReservePending(
if (!reserve.retryInfo.active) {
return;
}
resp.nextRetryDelay = updateRetryDelay(
resp.nextRetryDelay,
now,
reserve.retryInfo.nextRetry,
);
if (onlyDue && reserve.retryInfo.nextRetry.t_ms > now.t_ms) {
return;
}
switch (reserve.reserveStatus) {
case ReserveRecordStatus.DORMANT:
// nothing to report as pending
break;
case ReserveRecordStatus.WITHDRAWING:
case ReserveRecordStatus.UNCONFIRMED:
case ReserveRecordStatus.QUERYING_STATUS:
case ReserveRecordStatus.REGISTERING_BANK:
if (onlyDue) {
break;
}
resp.pendingOperations.push({
type: "reserve",
givesLifeness: true,
givesLifeness: false,
stage: reserve.reserveStatus,
timestampCreated: reserve.created,
reserveType,
@ -166,6 +158,31 @@ async function gatherReservePending(
});
break;
case ReserveRecordStatus.WAIT_CONFIRM_BANK:
if (onlyDue) {
break;
}
resp.pendingOperations.push({
type: "reserve",
givesLifeness: false,
stage: reserve.reserveStatus,
timestampCreated: reserve.created,
reserveType,
reservePub: reserve.reservePub,
bankWithdrawConfirmUrl: reserve.bankWithdrawConfirmUrl,
retryInfo: reserve.retryInfo,
});
break;
case ReserveRecordStatus.WITHDRAWING:
case ReserveRecordStatus.QUERYING_STATUS:
case ReserveRecordStatus.REGISTERING_BANK:
resp.nextRetryDelay = updateRetryDelay(
resp.nextRetryDelay,
now,
reserve.retryInfo.nextRetry,
);
if (onlyDue && reserve.retryInfo.nextRetry.t_ms > now.t_ms) {
return;
}
resp.pendingOperations.push({
type: "reserve",
givesLifeness: true,
@ -173,7 +190,6 @@ async function gatherReservePending(
timestampCreated: reserve.created,
reserveType,
reservePub: reserve.reservePub,
bankWithdrawConfirmUrl: reserve.bankWithdrawConfirmUrl,
retryInfo: reserve.retryInfo,
});
break;
@ -265,7 +281,10 @@ async function gatherWithdrawalPending(
if (onlyDue && wsr.retryInfo.nextRetry.t_ms > now.t_ms) {
return;
}
const numCoinsWithdrawn = wsr.withdrawn.reduce((a, x) => a + (x ? 1 : 0), 0);
const numCoinsWithdrawn = wsr.withdrawn.reduce(
(a, x) => a + (x ? 1 : 0),
0,
);
const numCoinsTotal = wsr.withdrawn.length;
resp.pendingOperations.push({
type: "withdraw",
@ -352,7 +371,7 @@ async function gatherPurchasePending(
resp: PendingOperationsResponse,
onlyDue: boolean = false,
): Promise<void> {
await tx.iter(Stores.purchases).forEach((pr) => {
await tx.iter(Stores.purchases).forEach(pr => {
if (!pr.firstSuccessfulPayTimestamp) {
resp.nextRetryDelay = updateRetryDelay(
resp.nextRetryDelay,

View File

@ -174,6 +174,8 @@ export async function createReserve(
},
);
ws.notify({ type: NotificationType.ReserveCreated });
// Asynchronously process the reserve, but return
// to the caller already.
processReserve(ws, resp.reservePub, true).catch(e => {
@ -244,6 +246,7 @@ async function registerReserveWithBank(
r.retryInfo = initRetryInfo();
return r;
});
ws.notify( { type: NotificationType.Wildcard });
return processReserveBankStatus(ws, reservePub);
}
@ -284,6 +287,8 @@ async function processReserveBankStatusImpl(
throw e;
}
ws.notify( { type: NotificationType.Wildcard });
if (status.selection_done) {
if (reserve.reserveStatus === ReserveRecordStatus.REGISTERING_BANK) {
await registerReserveWithBank(ws, reservePub);
@ -322,6 +327,7 @@ async function processReserveBankStatusImpl(
return r;
});
}
ws.notify( { type: NotificationType.Wildcard });
}
async function incrementReserveRetry(

View File

@ -519,6 +519,7 @@ export const enum NotificationType {
ReserveUpdated = "reserve-updated",
ReserveConfirmed = "reserve-confirmed",
ReserveDepleted = "reserve-depleted",
ReserveCreated = "reserve-created",
WithdrawSessionCreated = "withdraw-session-created",
WithdrawSessionFinished = "withdraw-session-finished",
WaitingForRetry = "waiting-for-retry",
@ -534,6 +535,7 @@ export const enum NotificationType {
PayOperationError = "pay-error",
WithdrawOperationError = "withdraw-error",
ReserveOperationError = "reserve-error",
Wildcard = "wildcard",
}
export interface ProposalAcceptedNotification {
@ -656,6 +658,14 @@ export interface ReserveOperationErrorNotification {
type: NotificationType.ReserveOperationError;
}
export interface ReserveCreatedNotification {
type: NotificationType.ReserveCreated;
}
export interface WildcardNotification {
type: NotificationType.Wildcard;
}
export type WalletNotification =
| WithdrawOperationErrorNotification
| ReserveOperationErrorNotification
@ -676,6 +686,7 @@ export type WalletNotification =
| RefreshStartedNotification
| RefreshRefusedNotification
| ReserveUpdatedNotification
| ReserveCreatedNotification
| ReserveConfirmedNotification
| WithdrawSessionFinishedNotification
| ReserveDepletedNotification
@ -684,7 +695,8 @@ export type WalletNotification =
| RefundFinishedNotification
| RefundQueriedNotification
| WithdrawSessionCreatedNotification
| CoinWithdrawnNotification;
| CoinWithdrawnNotification
| WildcardNotification;
export interface OperationError {
type: string;