summaryrefslogtreecommitdiff
path: root/packages/taler-util/src/operation.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/taler-util/src/operation.ts')
-rw-r--r--packages/taler-util/src/operation.ts24
1 files changed, 13 insertions, 11 deletions
diff --git a/packages/taler-util/src/operation.ts b/packages/taler-util/src/operation.ts
index 07a216fe9..e2ab9d4e4 100644
--- a/packages/taler-util/src/operation.ts
+++ b/packages/taler-util/src/operation.ts
@@ -19,6 +19,7 @@
*/
import {
HttpResponse,
+ readResponseJsonOrErrorCode,
readSuccessResponseJsonOrThrow,
readTalerErrorResponse,
} from "./http-common.js";
@@ -126,7 +127,7 @@ export async function opKnownAlternativeFailure<T extends HttpStatusCode, B>(
s: T,
codec: Codec<B>,
): Promise<OperationAlternative<T, B>> {
- const body = await readSuccessResponseJsonOrThrow(resp, codec);
+ const body = (await readResponseJsonOrErrorCode(resp, codec)).response;
return { type: "fail", case: s, body };
}
@@ -138,22 +139,21 @@ export async function opKnownHttpFailure<T extends HttpStatusCode>(
return { type: "fail", case: s, detail };
}
-export async function opKnownTalerFailure<T extends TalerErrorCode>(
+export function opKnownTalerFailure<T extends TalerErrorCode>(
s: T,
- resp: HttpResponse,
-): Promise<OperationFail<T>> {
- const detail = await readTalerErrorResponse(resp);
+ detail: TalerErrorDetail,
+): OperationFail<T> {
return { type: "fail", case: s, detail };
}
-export function opUnknownFailure(resp: HttpResponse, text: string): never {
+export function opUnknownFailure(resp: HttpResponse, error: TalerErrorDetail): never {
throw TalerError.fromDetail(
TalerErrorCode.WALLET_UNEXPECTED_REQUEST_ERROR,
{
requestUrl: resp.requestUrl,
requestMethod: resp.requestMethod,
httpStatusCode: resp.status,
- errorResponse: text,
+ errorResponse: error,
},
`Unexpected HTTP status ${resp.status} in response`,
);
@@ -184,13 +184,15 @@ export type ResultByMethod<
p extends keyof TT,
> = TT[p] extends (...args: any[]) => infer Ret
? Ret extends Promise<infer Result>
- ? Result extends OperationResult<any, any>
- ? Result
- : never
- : never //api always use Promises
+ ? Result extends OperationResult<any, any>
+ ? Result
+ : never
+ : never //api always use Promises
: never; //error cases just for functions
export type FailCasesByMethod<TT extends object, p extends keyof TT> = Exclude<
ResultByMethod<TT, p>,
OperationOk<any>
>;
+
+export type RedirectResult = { redirectURL: URL }