-
Notifications
You must be signed in to change notification settings - Fork 12
/
serializers.ts
174 lines (168 loc) · 5.13 KB
/
serializers.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
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
import BigNumber from "bignumber.js";
import {
deserializeAlgorandTransaction,
serializeAlgorandTransaction,
} from "./families/algorand/serializer";
import {
deserializeBitcoinTransaction,
serializeBitcoinTransaction,
} from "./families/bitcoin/serializer";
import {
deserializeCosmosTransaction,
serializeCosmosTransaction,
} from "./families/cosmos/serializer";
import {
deserializeCryptoOrgTransaction,
serializeCryptoOrgTransaction,
} from "./families/crypto_org/serializer";
import {
deserializeEthereumTransaction,
serializeEthereumTransaction,
} from "./families/ethereum/serializer";
import {
deserializePolkadotTransaction,
serializePolkadotTransaction,
} from "./families/polkadot/serializer";
import {
deserializeRippleTransaction,
serializeRippleTransaction,
} from "./families/ripple/serializer";
import {
deserializeStellarTransaction,
serializeStellarTransaction,
} from "./families/stellar/serializer";
import {
deserializeTezosTransaction,
serializeTezosTransaction,
} from "./families/tezos/serializer";
import {
deserializeTronTransaction,
serializeTronTransaction,
} from "./families/tron/serializer";
import FAMILIES from "./families/types";
import type { RawAccount, RawTransaction } from "./rawTypes";
import type { Account, Transaction } from "./types";
/**
* Serialize an [[Account]] object in order to send it over JSON-RPC protocol
* to the Ledger Live platform
* @param account - The account object to serialize
*
* @returns The raw representation of the provided account object
*/
export function serializeAccount({
id,
name,
address,
currency,
balance,
spendableBalance,
blockHeight,
lastSyncDate,
}: Account): RawAccount {
return {
id,
name,
address,
currency,
balance: balance.toString(),
spendableBalance: spendableBalance.toString(),
blockHeight,
lastSyncDate: lastSyncDate.toISOString(),
};
}
/**
* Deserialize a [[RawAccount]] object after it has been received over JSON-RPC
* protocol from the Ledger Live platform
* @param rawAccount - The raw account representation to deserialize
*
* @returns The object account of the provided raw account representation
*/
export function deserializeAccount({
id,
name,
address,
currency,
balance,
spendableBalance,
blockHeight,
lastSyncDate,
}: RawAccount): Account {
return {
id,
name,
address,
currency,
balance: new BigNumber(balance),
spendableBalance: new BigNumber(spendableBalance),
blockHeight,
lastSyncDate: new Date(lastSyncDate),
};
}
/**
* Serialize an [[Transaction]] object in order to send it over JSON-RPC
* protocol to the Ledger Live platform
* @param transaction - The transaction object to serialize
*
* @returns The raw representation of the provided transaction object
*/
export function serializeTransaction(transaction: Transaction): RawTransaction {
switch (transaction.family) {
case FAMILIES.ETHEREUM:
return serializeEthereumTransaction(transaction);
case FAMILIES.BITCOIN:
return serializeBitcoinTransaction(transaction);
case FAMILIES.ALGORAND:
return serializeAlgorandTransaction(transaction);
case FAMILIES.CRYPTO_ORG:
return serializeCryptoOrgTransaction(transaction);
case FAMILIES.RIPPLE:
return serializeRippleTransaction(transaction);
case FAMILIES.COSMOS:
return serializeCosmosTransaction(transaction);
case FAMILIES.TEZOS:
return serializeTezosTransaction(transaction);
case FAMILIES.POLKADOT:
return serializePolkadotTransaction(transaction);
case FAMILIES.STELLAR:
return serializeStellarTransaction(transaction);
case FAMILIES.TRON:
return serializeTronTransaction(transaction);
default:
throw new Error("Can't serialize transaction: family not supported");
}
}
/**
* Deserialize a [[RawTransaction]] object after it has been received over
* JSON-RPC protocol from the Ledger Live platform
* @param rawTransaction - The raw transaction representation to deserialize
*
* @returns The object transaction of the provided raw transaction representation
*/
export function deserializeTransaction(
rawTransaction: RawTransaction
): Transaction {
switch (rawTransaction.family) {
case FAMILIES.ETHEREUM:
return deserializeEthereumTransaction(rawTransaction);
case FAMILIES.BITCOIN:
return deserializeBitcoinTransaction(rawTransaction);
case FAMILIES.ALGORAND:
return deserializeAlgorandTransaction(rawTransaction);
case FAMILIES.CRYPTO_ORG:
return deserializeCryptoOrgTransaction(rawTransaction);
case FAMILIES.RIPPLE:
return deserializeRippleTransaction(rawTransaction);
case FAMILIES.COSMOS:
return deserializeCosmosTransaction(rawTransaction);
case FAMILIES.TEZOS:
return deserializeTezosTransaction(rawTransaction);
case FAMILIES.POLKADOT:
return deserializePolkadotTransaction(rawTransaction);
case FAMILIES.STELLAR:
return deserializeStellarTransaction(rawTransaction);
case FAMILIES.TRON:
return deserializeTronTransaction(rawTransaction);
default:
throw new Error("Can't deserialize transaction: family not supported");
}
}