diff options
Diffstat (limited to 'packages/taler-util/src/notifications.ts')
-rw-r--r-- | packages/taler-util/src/notifications.ts | 453 |
1 files changed, 212 insertions, 241 deletions
diff --git a/packages/taler-util/src/notifications.ts b/packages/taler-util/src/notifications.ts index 289dcb689..d4dfe7589 100644 --- a/packages/taler-util/src/notifications.ts +++ b/packages/taler-util/src/notifications.ts @@ -1,6 +1,6 @@ /* This file is part of GNU Taler - (C) 2019 GNUnet e.V. + (C) 2019-2023 Taler Systems S.A. GNU Taler is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -22,257 +22,228 @@ /** * Imports. */ -import { TalerErrorDetails } from "./walletTypes.js"; +import { AbsoluteTime } from "./time.js"; +import { TransactionState } from "./transactions-types.js"; +import { ExchangeEntryState, TalerErrorDetail } from "./wallet-types.js"; export enum NotificationType { - CoinWithdrawn = "coin-withdrawn", - ProposalAccepted = "proposal-accepted", - ProposalDownloaded = "proposal-downloaded", - RefundsSubmitted = "refunds-submitted", - RecoupStarted = "recoup-started", - RecoupFinished = "recoup-finished", - RefreshRevealed = "refresh-revealed", - RefreshMelted = "refresh-melted", - RefreshStarted = "refresh-started", - RefreshUnwarranted = "refresh-unwarranted", - ReserveUpdated = "reserve-updated", - ReserveConfirmed = "reserve-confirmed", - ReserveCreated = "reserve-created", - WithdrawGroupCreated = "withdraw-group-created", - WithdrawGroupFinished = "withdraw-group-finished", - WaitingForRetry = "waiting-for-retry", - RefundStarted = "refund-started", - RefundQueried = "refund-queried", - RefundFinished = "refund-finished", - ExchangeOperationError = "exchange-operation-error", - RefreshOperationError = "refresh-operation-error", - RecoupOperationError = "recoup-operation-error", - RefundApplyOperationError = "refund-apply-error", - RefundStatusOperationError = "refund-status-error", - ProposalOperationError = "proposal-error", + BalanceChange = "balance-change", BackupOperationError = "backup-error", - TipOperationError = "tip-error", - PayOperationError = "pay-error", - PayOperationSuccess = "pay-operation-success", - WithdrawOperationError = "withdraw-error", - ReserveNotYetFound = "reserve-not-yet-found", - ReserveOperationError = "reserve-error", - InternalError = "internal-error", - PendingOperationProcessed = "pending-operation-processed", - ProposalRefused = "proposal-refused", - ReserveRegisteredWithBank = "reserve-registered-with-bank", - DepositOperationError = "deposit-operation-error", -} - -export interface ProposalAcceptedNotification { - type: NotificationType.ProposalAccepted; - proposalId: string; -} - -export interface InternalErrorNotification { - type: NotificationType.InternalError; - message: string; - exception: any; -} - -export interface ReserveNotYetFoundNotification { - type: NotificationType.ReserveNotYetFound; - reservePub: string; -} - -export interface CoinWithdrawnNotification { - type: NotificationType.CoinWithdrawn; -} - -export interface RefundStartedNotification { - type: NotificationType.RefundStarted; -} - -export interface RefundQueriedNotification { - type: NotificationType.RefundQueried; -} - -export interface ProposalDownloadedNotification { - type: NotificationType.ProposalDownloaded; - proposalId: string; -} - -export interface RefundsSubmittedNotification { - type: NotificationType.RefundsSubmitted; - proposalId: string; -} - -export interface RecoupStartedNotification { - type: NotificationType.RecoupStarted; -} - -export interface RecoupFinishedNotification { - type: NotificationType.RecoupFinished; -} - -export interface RefreshMeltedNotification { - type: NotificationType.RefreshMelted; -} - -export interface RefreshRevealedNotification { - type: NotificationType.RefreshRevealed; -} - -export interface RefreshStartedNotification { - type: NotificationType.RefreshStarted; -} - -export interface RefreshRefusedNotification { - type: NotificationType.RefreshUnwarranted; -} - -export interface ReserveConfirmedNotification { - type: NotificationType.ReserveConfirmed; -} - -export interface WithdrawalGroupCreatedNotification { - type: NotificationType.WithdrawGroupCreated; - withdrawalGroupId: string; -} - -export interface WithdrawalGroupFinishedNotification { - type: NotificationType.WithdrawGroupFinished; - reservePub: string; -} - -export interface WaitingForRetryNotification { - type: NotificationType.WaitingForRetry; - numPending: number; - numGivingLiveness: number; -} - -export interface RefundFinishedNotification { - type: NotificationType.RefundFinished; -} - -export interface ExchangeOperationErrorNotification { - type: NotificationType.ExchangeOperationError; - error: TalerErrorDetails; -} - -export interface RefreshOperationErrorNotification { - type: NotificationType.RefreshOperationError; - error: TalerErrorDetails; -} + TransactionStateTransition = "transaction-state-transition", + /** + * @deprecated + */ + WithdrawalOperationTransition = "withdrawal-operation-transition", + ExchangeStateTransition = "exchange-state-transition", + Idle = "idle", + TaskObservabilityEvent = "task-observability-event", + RequestObservabilityEvent = "request-observability-event", +} + +export interface ErrorInfoSummary { + code: number; + hint?: string; + message?: string; +} + +export interface TransactionStateTransitionNotification { + type: NotificationType.TransactionStateTransition; + transactionId: string; + oldTxState: TransactionState; + newTxState: TransactionState; + errorInfo?: ErrorInfoSummary; + + /** + * Additional "user data" that is dependent on the + * state transition. + * + * Usage should be avoided. + * + * Currently used to notify the iOS app about + * the KYC URL. + */ + experimentalUserData?: any; +} + +export interface ExchangeStateTransitionNotification { + type: NotificationType.ExchangeStateTransition; + /** + * Identification of the exchange entry that this + * notification is about. + */ + exchangeBaseUrl: string; + + /** + * If missing, the notification means that + * the exchange entry is newly created. + */ + oldExchangeState?: ExchangeEntryState; + + /** + * New state of the exchange. + */ + newExchangeState: ExchangeEntryState; + + /** + * Summary of the error that occurred when trying to update the exchange entry, + * if applicable. + */ + errorInfo?: ErrorInfoSummary; +} + +export interface BalanceChangeNotification { + type: NotificationType.BalanceChange; + + /** + * Transaction ID of the transaction that caused the balance update. + * + * Only used as a hint for debugging, should not be relied upon by clients. + */ + hintTransactionId: string; +} + +export interface TaskProgressNotification { + type: NotificationType.TaskObservabilityEvent; + taskId: string; + event: ObservabilityEvent; +} + +export interface RequestProgressNotification { + type: NotificationType.RequestObservabilityEvent; + requestId: string; + operation: string; + event: ObservabilityEvent; +} + +export enum ObservabilityEventType { + HttpFetchStart = "http-fetch-start", + HttpFetchFinishError = "http-fetch-finish-error", + HttpFetchFinishSuccess = "http-fetch-finish-success", + DbQueryStart = "db-query-start", + DbQueryFinishSuccess = "db-query-finish-success", + DbQueryFinishError = "db-query-finish-error", + RequestStart = "request-start", + RequestFinishSuccess = "request-finish-success", + RequestFinishError = "request-finish-error", + TaskStart = "task-start", + TaskStop = "task-stop", + TaskReset = "task-reset", + ShepherdTaskResult = "sheperd-task-result", + DeclareTaskDependency = "declare-task-dependency", + CryptoStart = "crypto-start", + CryptoFinishSuccess = "crypto-finish-success", + CryptoFinishError = "crypto-finish-error", + Message = "message", +} + +export type ObservabilityEvent = + | { + id: string; + when: AbsoluteTime; + type: ObservabilityEventType.HttpFetchStart; + url: string; + } + | { + id: string; + when: AbsoluteTime; + type: ObservabilityEventType.HttpFetchFinishSuccess; + url: string; + status: number; + } + | { + id: string; + when: AbsoluteTime; + type: ObservabilityEventType.HttpFetchFinishError; + url: string; + error: TalerErrorDetail; + } + | { + type: ObservabilityEventType.DbQueryStart; + name: string; + location: string; + } + | { + type: ObservabilityEventType.DbQueryFinishSuccess; + name: string; + location: string; + } + | { + type: ObservabilityEventType.DbQueryFinishError; + name: string; + location: string; + } + | { + type: ObservabilityEventType.RequestStart; + } + | { + type: ObservabilityEventType.RequestFinishSuccess; + durationMs: number; + } + | { + type: ObservabilityEventType.RequestFinishError; + } + | { + type: ObservabilityEventType.TaskStart; + taskId: string; + } + | { + type: ObservabilityEventType.TaskStop; + taskId: string; + } + | { + type: ObservabilityEventType.TaskReset; + taskId: string; + } + | { + type: ObservabilityEventType.DeclareTaskDependency; + taskId: string; + } + | { + type: ObservabilityEventType.CryptoStart; + operation: string; + } + | { + type: ObservabilityEventType.CryptoFinishSuccess; + operation: string; + } + | { + type: ObservabilityEventType.CryptoFinishError; + operation: string; + } + | { + type: ObservabilityEventType.ShepherdTaskResult; + resultType: string; + } + | { + type: ObservabilityEventType.Message; + contents: string; + }; export interface BackupOperationErrorNotification { type: NotificationType.BackupOperationError; - error: TalerErrorDetails; -} - -export interface RefundStatusOperationErrorNotification { - type: NotificationType.RefundStatusOperationError; - error: TalerErrorDetails; -} - -export interface RefundApplyOperationErrorNotification { - type: NotificationType.RefundApplyOperationError; - error: TalerErrorDetails; -} - -export interface PayOperationErrorNotification { - type: NotificationType.PayOperationError; - error: TalerErrorDetails; -} - -export interface ProposalOperationErrorNotification { - type: NotificationType.ProposalOperationError; - error: TalerErrorDetails; -} - -export interface TipOperationErrorNotification { - type: NotificationType.TipOperationError; - error: TalerErrorDetails; -} - -export interface WithdrawOperationErrorNotification { - type: NotificationType.WithdrawOperationError; - error: TalerErrorDetails; -} - -export interface RecoupOperationErrorNotification { - type: NotificationType.RecoupOperationError; - error: TalerErrorDetails; -} - -export interface DepositOperationErrorNotification { - type: NotificationType.DepositOperationError; - error: TalerErrorDetails; -} - -export interface ReserveOperationErrorNotification { - type: NotificationType.ReserveOperationError; - error: TalerErrorDetails; -} - -export interface ReserveCreatedNotification { - type: NotificationType.ReserveCreated; - reservePub: string; + error: TalerErrorDetail; } - -export interface PendingOperationProcessedNotification { - type: NotificationType.PendingOperationProcessed; -} - -export interface ProposalRefusedNotification { - type: NotificationType.ProposalRefused; -} - -export interface ReserveRegisteredWithBankNotification { - type: NotificationType.ReserveRegisteredWithBank; -} - /** - * Notification sent when a pay (or pay replay) operation succeeded. + * This notification is required to signal UI that + * the withdrawal operation changed the state. * - * We send this notification because the confirmPay request can return - * a "confirmed" response that indicates that the payment has been confirmed - * by the user, but we're still waiting for the payment to succeed or fail. + * https://bugs.gnunet.org/view.php?id=8099 */ -export interface PayOperationSuccessNotification { - type: NotificationType.PayOperationSuccess; - proposalId: string; +export interface WithdrawalOperationTransitionNotification { + type: NotificationType.WithdrawalOperationTransition; + uri: string; +} + +export interface IdleNotification { + type: NotificationType.Idle; } export type WalletNotification = + | BalanceChangeNotification + | WithdrawalOperationTransitionNotification | BackupOperationErrorNotification - | WithdrawOperationErrorNotification - | ReserveOperationErrorNotification - | ExchangeOperationErrorNotification - | RefreshOperationErrorNotification - | RefundStatusOperationErrorNotification - | RefundApplyOperationErrorNotification - | ProposalOperationErrorNotification - | PayOperationErrorNotification - | TipOperationErrorNotification - | ProposalAcceptedNotification - | ProposalDownloadedNotification - | RefundsSubmittedNotification - | RecoupStartedNotification - | RecoupFinishedNotification - | RefreshMeltedNotification - | RefreshRevealedNotification - | RefreshStartedNotification - | RefreshRefusedNotification - | ReserveCreatedNotification - | ReserveConfirmedNotification - | WithdrawalGroupFinishedNotification - | WaitingForRetryNotification - | RefundStartedNotification - | RefundFinishedNotification - | RefundQueriedNotification - | WithdrawalGroupCreatedNotification - | CoinWithdrawnNotification - | RecoupOperationErrorNotification - | DepositOperationErrorNotification - | InternalErrorNotification - | PendingOperationProcessedNotification - | ProposalRefusedNotification - | ReserveRegisteredWithBankNotification - | ReserveNotYetFoundNotification - | PayOperationSuccessNotification; + | ExchangeStateTransitionNotification + | TransactionStateTransitionNotification + | TaskProgressNotification + | RequestProgressNotification + | IdleNotification; |