1
- import { PacketVersionMap } from '@cypherock/communication' ;
2
-
3
1
import { commandHandler76 } from '../../handlers' ;
4
2
import { logger } from '../../utils' ;
5
3
import { CyFlow , CyFlowRunOptions , ExitFlowError } from '../index' ;
6
4
7
- import { createCoinIndexes , formatCoinsForDB } from './helper' ;
5
+ import { createCoinIndex , formatCoinsForDB } from './helper' ;
8
6
9
7
export interface CoinAdderRunOptions extends CyFlowRunOptions {
10
8
walletId : string ;
11
- selectedCoins : string [ ] ;
12
- isResync : boolean ;
9
+ selectedCoin : {
10
+ accountIndex : number ;
11
+ accountType : string ;
12
+ id : string ;
13
+ } ;
13
14
pinExists : boolean ;
14
15
passphraseExists : boolean ;
15
16
}
@@ -41,124 +42,19 @@ export class CoinAdder extends CyFlow {
41
42
super ( ) ;
42
43
}
43
44
44
- async runLegacy ( {
45
- connection,
46
- walletId,
47
- selectedCoins,
48
- isResync,
49
- pinExists,
50
- passphraseExists
51
- } : CoinAdderRunOptions ) {
52
- const resyncIndex = isResync ? '01' : '00' ;
53
- await connection . sendData (
54
- 45 ,
55
- walletId + resyncIndex + createCoinIndexes ( '1.0.0' , selectedCoins )
56
- ) ;
57
-
58
- const data = await connection . receiveData ( [ 46 , 75 , 76 ] , 30000 ) ;
59
- if ( data . commandType === 75 ) {
60
- this . emit ( 'locked' ) ;
61
- throw new ExitFlowError ( ) ;
62
- }
63
- if ( data . commandType === 76 ) {
64
- commandHandler76 ( data , this ) ;
65
- }
66
- const coinConfirmed = data . data ;
67
- if ( parseInt ( coinConfirmed , 10 ) ) {
68
- this . emit ( 'coinsConfirmed' , true ) ;
69
- } else {
70
- this . emit ( 'coinsConfirmed' , false ) ;
71
- throw new ExitFlowError ( ) ;
72
- }
73
-
74
- if ( passphraseExists ) {
75
- const passphraseData = await connection . receiveData ( [ 91 , 90 ] , 90000 ) ;
76
-
77
- if ( passphraseData . commandType === 91 ) {
78
- this . emit ( 'coinsConfirmed' , false ) ;
79
- throw new ExitFlowError ( ) ;
80
- }
81
-
82
- if ( ! passphraseData . data . startsWith ( '01' ) ) {
83
- throw new Error ( 'Invalid data from device.' ) ;
84
- }
85
-
86
- this . emit ( 'passphraseEntered' ) ;
87
- }
88
-
89
- if ( pinExists ) {
90
- const pinData = await connection . receiveData ( [ 47 , 79 , 81 ] , 90000 ) ;
91
- if ( pinData . commandType === 79 ) {
92
- this . emit ( 'coinsConfirmed' , false ) ;
93
- throw new ExitFlowError ( ) ;
94
- }
95
-
96
- if ( pinData . commandType === 81 ) {
97
- this . emit ( 'noWalletOnCard' ) ;
98
- throw new ExitFlowError ( ) ;
99
- }
100
-
101
- const pinEntered = pinData . data ;
102
- if ( parseInt ( pinEntered , 10 ) ) {
103
- this . emit ( 'pinEntered' , true ) ;
104
- } else {
105
- this . emit ( 'pinEntered' , false ) ;
106
- throw new ExitFlowError ( ) ;
107
- }
108
- }
109
-
110
- const data1 = await connection . receiveData ( [ 48 , 79 , 81 , 71 ] , 90000 ) ;
111
- if ( data1 . commandType === 79 ) {
112
- this . emit ( 'coinsConfirmed' , false ) ;
113
- throw new ExitFlowError ( ) ;
114
- }
115
- if ( data1 . commandType === 81 ) {
116
- this . emit ( 'noWalletOnCard' ) ;
117
- throw new ExitFlowError ( ) ;
118
- }
119
- if ( data1 . commandType === 71 ) {
120
- this . emit ( 'cardError' ) ;
121
- throw new ExitFlowError ( ) ;
122
- }
123
-
124
- this . emit ( 'cardTapped' ) ;
125
-
126
- const xPubDetails = await connection . receiveData ( [ 49 ] , 60000 ) ;
127
- if ( ! xPubDetails ) {
128
- //I don't remember why I had put this condition.
129
- this . emit ( 'unknownError' ) ;
130
- throw new Error ( 'No xpub details found' ) ;
131
- }
132
-
133
- await connection . sendData ( 42 , '01' ) ;
134
- if ( ! isResync ) {
135
- const xpubList = await formatCoinsForDB (
136
- walletId ,
137
- xPubDetails . data ,
138
- selectedCoins
139
- ) ;
140
- logger . debug ( 'Xpub list' , { xpubList } ) ;
141
- this . emit ( 'xpubList' , xpubList ) ;
142
- } else {
143
- this . emit ( 'xpubList' , [ ] ) ;
144
- }
145
- }
146
-
147
45
async runOperation ( {
148
46
connection,
149
47
sdkVersion,
150
48
walletId,
151
- selectedCoins,
152
- isResync,
49
+ selectedCoin,
153
50
pinExists,
154
51
passphraseExists
155
52
} : CoinAdderRunOptions ) {
156
- const resyncIndex = isResync ? '01' : '00' ;
157
53
const sequenceNumber = connection . getNewSequenceNumber ( ) ;
54
+ const addCoinData = walletId + createCoinIndex ( sdkVersion , selectedCoin ) ;
158
55
await connection . sendCommand ( {
159
56
commandType : 45 ,
160
- data :
161
- walletId + resyncIndex + createCoinIndexes ( sdkVersion , selectedCoins ) ,
57
+ data : addCoinData ,
162
58
sequenceNumber
163
59
} ) ;
164
60
@@ -247,17 +143,9 @@ export class CoinAdder extends CyFlow {
247
143
throw new ExitFlowError ( ) ;
248
144
}
249
145
250
- if ( ! isResync ) {
251
- const xpubList = await formatCoinsForDB (
252
- walletId ,
253
- data . data ,
254
- selectedCoins
255
- ) ;
256
- logger . debug ( 'Xpub list' , { xpubList } ) ;
257
- this . emit ( 'xpubList' , xpubList ) ;
258
- } else {
259
- this . emit ( 'xpubList' , [ ] ) ;
260
- }
146
+ const xpubList = await formatCoinsForDB ( walletId , data . data , selectedCoin ) ;
147
+ logger . debug ( 'Xpub list' , { xpubList } ) ;
148
+ this . emit ( 'xpubList' , xpubList ) ;
261
149
}
262
150
263
151
/**
@@ -274,12 +162,7 @@ export class CoinAdder extends CyFlow {
274
162
const ready = await this . deviceReady ( connection ) ;
275
163
276
164
if ( ready ) {
277
- const packetVersion = connection . getPacketVersion ( ) ;
278
- if ( packetVersion === PacketVersionMap . v3 ) {
279
- await this . runOperation ( params ) ;
280
- } else if ( packetVersion === PacketVersionMap . v2 ) {
281
- await this . runLegacy ( params ) ;
282
- }
165
+ await this . runOperation ( params ) ;
283
166
} else {
284
167
this . emit ( 'notReady' ) ;
285
168
}
0 commit comments