wallet-core: report refresh errors properly
This commit is contained in:
parent
e56d3ba8eb
commit
4762018dc1
@ -122,6 +122,13 @@ export interface DetailsMap {
|
||||
[TalerErrorCode.WALLET_PEER_PUSH_PAYMENT_INSUFFICIENT_BALANCE]: {
|
||||
insufficientBalanceDetails: PayPeerInsufficientBalanceDetails;
|
||||
};
|
||||
[TalerErrorCode.WALLET_REFRESH_GROUP_INCOMPLETE]: {
|
||||
numErrors: number;
|
||||
/**
|
||||
* Errors, can be truncated.
|
||||
*/
|
||||
errors: TalerErrorDetail[];
|
||||
};
|
||||
}
|
||||
|
||||
type ErrBody<Y> = Y extends keyof DetailsMap ? DetailsMap[Y] : empty;
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -36,14 +36,18 @@ import {
|
||||
ExchangeProtocolVersion,
|
||||
ExchangeRefreshRevealRequest,
|
||||
fnutil,
|
||||
getErrorDetailFromException,
|
||||
getRandomBytes,
|
||||
HashCodeString,
|
||||
HttpStatusCode,
|
||||
j2s,
|
||||
Logger,
|
||||
makeErrorDetail,
|
||||
NotificationType,
|
||||
RefreshGroupId,
|
||||
RefreshReason,
|
||||
TalerErrorCode,
|
||||
TalerErrorDetail,
|
||||
TalerProtocolTimestamp,
|
||||
URL,
|
||||
} from "@gnu-taler/taler-util";
|
||||
@ -755,13 +759,18 @@ export async function processRefreshGroup(
|
||||
}
|
||||
// Process refresh sessions of the group in parallel.
|
||||
logger.trace("processing refresh sessions for old coins");
|
||||
let errors: TalerErrorDetail[] = [];
|
||||
let inShutdown = false;
|
||||
const ps = refreshGroup.oldCoinPubs.map((x, i) =>
|
||||
processRefreshSession(ws, refreshGroupId, i).catch((x) => {
|
||||
if (x instanceof CryptoApiStoppedError) {
|
||||
inShutdown = true;
|
||||
logger.info(
|
||||
"crypto API stopped while processing refresh group, probably the wallet is currently shutting down.",
|
||||
);
|
||||
} else if (x instanceof TalerError) {
|
||||
return;
|
||||
}
|
||||
if (x instanceof TalerError) {
|
||||
logger.warn("process refresh session got exception (TalerError)");
|
||||
logger.warn(`exc ${x}`);
|
||||
logger.warn(`exc stack ${x.stack}`);
|
||||
@ -771,6 +780,7 @@ export async function processRefreshGroup(
|
||||
logger.warn(`exc ${x}`);
|
||||
logger.warn(`exc stack ${x.stack}`);
|
||||
}
|
||||
errors.push(getErrorDetailFromException(x));
|
||||
}),
|
||||
);
|
||||
try {
|
||||
@ -781,6 +791,25 @@ export async function processRefreshGroup(
|
||||
logger.warn("process refresh sessions got exception");
|
||||
logger.warn(`exception: ${e}`);
|
||||
}
|
||||
if (inShutdown) {
|
||||
return {
|
||||
type: OperationAttemptResultType.Pending,
|
||||
result: undefined,
|
||||
};
|
||||
}
|
||||
if (errors.length > 0) {
|
||||
return {
|
||||
type: OperationAttemptResultType.Error,
|
||||
errorDetail: makeErrorDetail(
|
||||
TalerErrorCode.WALLET_REFRESH_GROUP_INCOMPLETE,
|
||||
{
|
||||
numErrors: errors.length,
|
||||
errors: errors.slice(0, 5),
|
||||
},
|
||||
),
|
||||
};
|
||||
}
|
||||
|
||||
return {
|
||||
type: OperationAttemptResultType.Finished,
|
||||
result: undefined,
|
||||
|
Loading…
Reference in New Issue
Block a user