summaryrefslogtreecommitdiff
path: root/packages/anastasis-core/src/challenge-feedback-types.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/anastasis-core/src/challenge-feedback-types.ts')
-rw-r--r--packages/anastasis-core/src/challenge-feedback-types.ts159
1 files changed, 159 insertions, 0 deletions
diff --git a/packages/anastasis-core/src/challenge-feedback-types.ts b/packages/anastasis-core/src/challenge-feedback-types.ts
new file mode 100644
index 000000000..de615b315
--- /dev/null
+++ b/packages/anastasis-core/src/challenge-feedback-types.ts
@@ -0,0 +1,159 @@
+/*
+ This file is part of GNU Anastasis
+ (C) 2021-2022 Anastasis SARL
+
+ GNU Anastasis is free software; you can redistribute it and/or modify it under the
+ terms of the GNU Affero General Public License as published by the Free Software
+ Foundation; either version 3, or (at your option) any later version.
+
+ GNU Anastasis is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+ A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License along with
+ GNU Anastasis; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
+ */
+
+/**
+ * Imports.
+ */
+import { AmountString, HttpStatusCode } from "@gnu-taler/taler-util";
+
+export enum ChallengeFeedbackStatus {
+ Solved = "solved",
+ CodeInFile = "code-in-file",
+ CodeSent = "code-sent",
+ ServerFailure = "server-failure",
+ TruthUnknown = "truth-unknown",
+ TalerPayment = "taler-payment",
+ Unsupported = "unsupported",
+ RateLimitExceeded = "rate-limit-exceeded",
+ IbanInstructions = "iban-instructions",
+ IncorrectAnswer = "incorrect-answer",
+}
+
+export type ChallengeFeedback =
+ | ChallengeFeedbackSolved
+ | ChallengeFeedbackCodeInFile
+ | ChallengeFeedbackCodeSent
+ | ChallengeFeedbackIncorrectAnswer
+ | ChallengeFeedbackTalerPaymentRequired
+ | ChallengeFeedbackServerFailure
+ | ChallengeFeedbackRateLimitExceeded
+ | ChallengeFeedbackTruthUnknown
+ | ChallengeFeedbackUnsupported
+ | ChallengeFeedbackBankTransferRequired;
+
+/**
+ * Challenge has been solved and the key share has
+ * been retrieved.
+ */
+export interface ChallengeFeedbackSolved {
+ state: ChallengeFeedbackStatus.Solved;
+}
+
+export interface ChallengeFeedbackIncorrectAnswer {
+ state: ChallengeFeedbackStatus.IncorrectAnswer;
+}
+
+export interface ChallengeFeedbackCodeInFile {
+ state: ChallengeFeedbackStatus.CodeInFile;
+ filename: string;
+ display_hint: string;
+}
+
+export interface ChallengeFeedbackCodeSent {
+ state: ChallengeFeedbackStatus.CodeSent;
+ display_hint: string;
+ address_hint: string;
+}
+
+/**
+ * The challenge given by the server is unsupported
+ * by the current anastasis client.
+ */
+export interface ChallengeFeedbackUnsupported {
+ state: ChallengeFeedbackStatus.Unsupported;
+
+ /**
+ * Human-readable identifier of the unsupported method.
+ */
+ unsupported_method: string;
+}
+
+/**
+ * The user tried to answer too often with a wrong answer.
+ */
+export interface ChallengeFeedbackRateLimitExceeded {
+ state: ChallengeFeedbackStatus.RateLimitExceeded;
+}
+
+/**
+ * Instructions for performing authentication via an
+ * IBAN bank transfer.
+ */
+export interface ChallengeFeedbackBankTransferRequired {
+ state: ChallengeFeedbackStatus.IbanInstructions;
+
+ /**
+ * Amount that should be transferred for a successful authentication.
+ */
+ challenge_amount: AmountString;
+
+ /**
+ * Account that should be credited.
+ */
+ target_iban: string;
+
+ /**
+ * Creditor name.
+ */
+ target_business_name: string;
+
+ /**
+ * Unstructured remittance information that should
+ * be contained in the bank transfer.
+ */
+ wire_transfer_subject: string;
+
+ answer_code: number;
+}
+
+/**
+ * The server experienced a temporary failure.
+ */
+export interface ChallengeFeedbackServerFailure {
+ state: ChallengeFeedbackStatus.ServerFailure;
+ http_status: HttpStatusCode | 0;
+
+ /**
+ * Taler-style error response, if available.
+ */
+ error_response?: any;
+}
+
+/**
+ * The truth is unknown to the provider. There
+ * is no reason to continue trying to solve any
+ * challenges in the policy.
+ */
+export interface ChallengeFeedbackTruthUnknown {
+ state: ChallengeFeedbackStatus.TruthUnknown;
+}
+
+/**
+ * A payment is required before the user can
+ * even attempt to solve the challenge.
+ */
+export interface ChallengeFeedbackTalerPaymentRequired {
+ state: ChallengeFeedbackStatus.TalerPayment;
+
+ taler_pay_uri: string;
+
+ provider: string;
+
+ /**
+ * FIXME: Why is this required?!
+ */
+ payment_secret: string;
+}