@@ -27,7 +27,7 @@ import {
27
27
} from "../interfaces" ;
28
28
import log from "../loglevel" ;
29
29
import { Some } from "../some" ;
30
- import { kCombinations , normalizeKeysResult , thresholdSame } from "./common" ;
30
+ import { kCombinations , normalizeKeysResult , normalizeLegacyKeysResult , thresholdSame } from "./common" ;
31
31
import { generateAddressFromPrivKey , generateAddressFromPubKey , keccak256 } from "./keyUtils" ;
32
32
import { lagrangeInterpolation } from "./langrangeInterpolatePoly" ;
33
33
import { decryptNodeData , getMetadata , getOrSetNonce } from "./metadataUtils" ;
@@ -93,6 +93,7 @@ export const GetPubKeyOrKeyAssign = async (params: {
93
93
}
94
94
}
95
95
96
+ const serverTimeOffsets : number [ ] = [ ] ;
96
97
// nonceResult must exist except for extendedVerifierId and legacy networks along with keyResult
97
98
if ( ( keyResult && ( nonceResult || extendedVerifierId || LEGACY_NETWORKS_ROUTE_MAP [ network as TORUS_LEGACY_NETWORK_TYPE ] ) ) || errorResult ) {
98
99
if ( keyResult ) {
@@ -106,10 +107,14 @@ export const GetPubKeyOrKeyAssign = async (params: {
106
107
const nodeIndex = parseInt ( x1 . result . node_index ) ;
107
108
if ( nodeIndex ) nodeIndexes . push ( nodeIndex ) ;
108
109
}
110
+ const serverTimeOffset = x1 . result . server_time_offset ? parseInt ( x1 . result . server_time_offset , 10 ) : 0 ;
111
+ serverTimeOffsets . push ( serverTimeOffset ) ;
109
112
}
110
113
} ) ;
111
114
}
112
- return Promise . resolve ( { keyResult, nodeIndexes, errorResult, nonceResult } ) ;
115
+
116
+ const serverTimeOffset = Math . max ( ...serverTimeOffsets ) ;
117
+ return Promise . resolve ( { keyResult, serverTimeOffset, nodeIndexes, errorResult, nonceResult } ) ;
113
118
}
114
119
return Promise . reject (
115
120
new Error (
@@ -643,6 +648,7 @@ export async function retrieveOrImportShare(params: {
643
648
nonce : metadataNonce ,
644
649
typeOfUser,
645
650
upgraded : isUpgraded ,
651
+ serverTimeOffset : serverTimeOffsetResponse ,
646
652
} ,
647
653
nodesData : {
648
654
nodeIndexes : nodeIndexes . map ( ( x ) => x . toNumber ( ) ) ,
@@ -669,11 +675,25 @@ export const legacyKeyLookup = async (endpoints: string[], verifier: string, ver
669
675
~ ~ ( endpoints . length / 2 ) + 1
670
676
) ;
671
677
const keyResult = thresholdSame (
672
- lookupShares . map ( ( x3 ) => x3 && x3 . result ) ,
678
+ lookupShares . map ( ( x3 ) => x3 && normalizeLegacyKeysResult ( x3 . result ) ) ,
673
679
~ ~ ( endpoints . length / 2 ) + 1
674
680
) ;
681
+
682
+ const serverTimeOffsets : number [ ] = [ ] ;
683
+ // nonceResult must exist except for extendedVerifierId and legacy networks along with keyResult
684
+ if ( keyResult ) {
685
+ lookupResults . forEach ( ( x1 ) => {
686
+ if ( x1 && x1 . result ) {
687
+ const timeOffSet = x1 . result . server_time_offset ;
688
+ const serverTimeOffset = timeOffSet ? parseInt ( timeOffSet , 10 ) : 0 ;
689
+ serverTimeOffsets . push ( serverTimeOffset ) ;
690
+ }
691
+ } ) ;
692
+ }
693
+
694
+ const serverTimeOffset = Math . max ( ...serverTimeOffsets ) ;
675
695
if ( keyResult || errorResult ) {
676
- return Promise . resolve ( { keyResult, errorResult } ) ;
696
+ return Promise . resolve ( { keyResult, errorResult, serverTimeOffset } ) ;
677
697
}
678
698
return Promise . reject ( new Error ( `invalid results ${ JSON . stringify ( lookupResults ) } ` ) ) ;
679
699
} ) ;
0 commit comments