Merge branch 'feat/inda-383-daily-stat' into 'main'
[ProtonMail-WebClient.git] / packages / wallet / types / api.ts
blobe75bd691168aeabfd2ef31c10d57fd35f54717f2
1 // This file defines interfaces for model received from Wallet API
2 import type { WasmBitcoinUnit, WasmScriptType } from '@proton/andromeda';
4 export enum WalletPassphrase {
5     WithoutPassphrase = 0,
6     WithPassphrase = 1,
9 export enum WalletSetupMode {
10     Created = 0,
11     Imported = 1,
14 export enum WalletStatus {
15     Active = 1,
16     Disabled = 2,
19 export enum WalletType {
20     OnChain = 1,
21     Lightning = 2,
24 export interface Wallet {
25     // Autoincrement ID
26     WalletID: number;
27     // UserID owning the wallet
28     UserID: number;
29     // Name for the wallet
30     Name: string;
31     // Encrypted version of the mnemonic with the wallet key
32     Mnemonic: string;
33     // 0 = no passphrase, 1 = require passphrase
34     Passphrase: WalletPassphrase;
35     // Encrypted version of the public key with the wallet key, only used if wallet got imported with public key. In this case, it is a watch-only wallet and transaction broadcast route becomes unavailable.
36     PublicKey?: string;
37     // 0 = created by Proton, 1 = imported wallet
38     Imported: WalletSetupMode;
39     // Define wallet priority (1 is the primary wallet)
40     Priority: number;
41     // 1 = Active, 2 = Disabled
42     Status: number;
43     // Type of wallet (1 = On-chain, 2 = Lightning)
44     Type: WalletType;
45     // Creation time
46     CreateTime: number;
47     // Time of last update
48     ModifyTime: number;
51 export interface WalletKey {
52     // Autoincrement ID
53     WalletKeyID: number;
54     // WalletID owning the wallet key
55     WalletID: number;
56     // AES-GCM 256 bits symmetrical key encrypted with the account key
57     WalletKey: string;
58     // UserKeyID used to encrypt the WalletKey
59     UserKeyId: number;
60     // Creation time
61     CreateTime: number;
62     // Time of last update
63     ModifyTime: number;
66 export interface WalletSettings {
67     // WalletID owning the settings
68     WalletID: number;
69     // Hide accounts, only used for on-chain wallet
70     HideAccounts: number;
71     // Default description, only used for lightning wallet
72     InvoiceDefaultDescription: string;
73     // Default lightning invoice expiration time in seconds
74     InvoiceExpirationTime: number;
75     //
76     MaxChannelOpeningFee: number;
77     // Creation time
78     CreateTime: number;
79     // Time of last update
80     ModifyTime: number;
83 export interface UserWalletSettings {
84     // Primary key
85     UserID: number;
86     // Request 2FA for any amount above this threshold in sats
87     TwoFactorAmountThreshold: number;
88     // Hide empty used addresses
89     HideEmptyUsedAddresses: number;
90     // CurrencyID of the wallet
91     FiatCurrencyID: number;
92     // BitcoinUnitID of the wallet
93     BitcoinUnitID: number;
94     // Creation time
95     CreateTime: number;
96     // Time of last update
97     ModifyTime: number;
100 export interface WalletAccount {
101     // Autoincrement ID
102     WalletAccountID: number;
103     // WalletID owning the account
104     WalletID: number;
105     // Account index, used to get derivation path
106     Index: number;
107     // Encrypted version of the label of the account with the wallet key
108     Label: string;
109     // Type of accounts
110     ScriptType: WasmScriptType;
111     // Creation time
112     CreateTime: number;
113     // Time of last update
114     ModifyTime: number;
117 export interface Transaction {
118     // Autoincrement ID
119     TransactionLabelID: number;
120     // WalletID
121     WalletID: number;
122     // Encrypted version of the transaction label with the wallet key
123     Label: string;
124     // Encrypted version of the identification number for a bitcoin transaction with the wallet key
125     TxID: number;
126     // Creation time
127     CreateTime: number;
128     // Time of last update
129     ModifyTime: number;
132 export interface BitcoinUnit {
133     // Autoincrement ID
134     BitcoinUnitID: number;
135     // Name of the Bitcoin unit (e.g. satoshi, bitcoin)
136     Name: string;
137     // Symbol of the currency (e.g. sats and btc)
138     Symbol: WasmBitcoinUnit;
141 export interface FiatCurrency {
142     // Autoincrement ID
143     FiatCurrencyID: number;
144     // Name of the fiat currency (e.g. euro)
145     Name: string;
146     // Symbol of the currency (e.g. EUR)
147     Symbol: string;
150 export type ApiWallet = Wallet & { accounts: WalletAccount[]; settings: WalletSettings; key: WalletKey };