-
Notifications
You must be signed in to change notification settings - Fork 55
/
types.ts
110 lines (95 loc) · 2.77 KB
/
types.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
import { BehaviorObservable } from './util';
import { Cardano, EpochRewards } from '@cardano-sdk/core';
import { Observable } from 'rxjs';
export enum TransactionFailure {
InvalidTransaction = 'INVALID_TRANSACTION',
FailedToSubmit = 'FAILED_TO_SUBMIT',
Unknown = 'UNKNOWN',
CannotTrack = 'CANNOT_TRACK',
Timeout = 'TIMEOUT'
}
export interface Balance extends Cardano.Value {
rewards: Cardano.Lovelace;
deposit: Cardano.Lovelace;
}
export interface TransactionalObservables<T> {
total$: BehaviorObservable<T>;
available$: BehaviorObservable<T>;
}
export interface TransactionalTracker<T> extends TransactionalObservables<T> {
shutdown(): void;
}
export type Milliseconds = number;
export interface PollingConfig {
readonly interval?: Milliseconds;
/**
* Max timeout for exponential backoff on errors
*/
readonly maxInterval?: Milliseconds;
}
export enum TransactionDirection {
Incoming = 'Incoming',
Outgoing = 'Outgoing'
}
export interface DirectionalTransaction {
tx: Cardano.TxAlonzo;
direction: TransactionDirection;
}
export interface FailedTx {
tx: Cardano.NewTxAlonzo;
reason: TransactionFailure;
error?: Cardano.TxSubmissionError;
}
export interface TransactionsTracker {
readonly history: {
all$: BehaviorObservable<DirectionalTransaction[]>;
outgoing$: BehaviorObservable<Cardano.TxAlonzo[]>;
incoming$: BehaviorObservable<Cardano.TxAlonzo[]>;
};
readonly outgoing: {
readonly inFlight$: BehaviorObservable<Cardano.NewTxAlonzo[]>;
readonly submitting$: Observable<Cardano.NewTxAlonzo>;
readonly pending$: Observable<Cardano.NewTxAlonzo>;
readonly failed$: Observable<FailedTx>;
readonly confirmed$: Observable<Cardano.NewTxAlonzo>;
};
readonly incoming$: Observable<Cardano.TxAlonzo>;
shutdown(): void;
}
export interface RewardsHistory {
all: EpochRewards[];
lastReward: EpochRewards | null;
avgReward: Cardano.Lovelace | null;
lifetimeRewards: Cardano.Lovelace;
}
export interface Delegatee {
/**
* Rewards at the end of current epoch will
* be from this stake pool
*/
currentEpoch?: Cardano.StakePool;
nextEpoch?: Cardano.StakePool;
nextNextEpoch: Cardano.StakePool;
}
export enum StakeKeyStatus {
Registering = 'REGISTERING',
Registered = 'REGISTERED',
Unregistering = 'UNREGISTERING',
Unregistered = 'UNREGISTERED'
}
export interface RewardBalance {
total: Cardano.Lovelace;
available: Cardano.Lovelace;
}
export interface RewardAccount {
address: Cardano.RewardAccount;
keyStatus: StakeKeyStatus;
delegatee?: Delegatee;
rewardBalance: RewardBalance;
// Maybe add rewardsHistory for each reward account too
}
export interface DelegationTracker {
rewardsHistory$: BehaviorObservable<RewardsHistory>;
rewardAccounts$: Observable<RewardAccount[]>;
shutdown(): void;
}