@@ -83,6 +83,30 @@ export class SessionManager implements SessionStorage {
8383 public createOnDeviceConfig ( host : string ) : ( deviceConfig : DeviceConfig ) => Promise < void > {
8484 return async ( deviceConfig : DeviceConfig ) => {
8585 this . sessionDevices . set ( host , { ...deviceConfig } )
86+ await this . persistDeviceConfig ( host , deviceConfig )
87+ }
88+ }
89+
90+ private async persistDeviceConfig ( host : string , deviceConfig : DeviceConfig ) : Promise < void > {
91+ if ( ! deviceConfig . deviceToken || ! deviceConfig . privateKey ) return
92+
93+ const username = this . _lastUsername
94+ if ( ! username ) return
95+
96+ try {
97+ const parsed = await this . configLoader . load ( )
98+ const config : KeeperJsonConfig = parsed && Object . keys ( parsed ) . length > 0 ? parsed : { }
99+
100+ config . device_token = Buffer . from ( deviceConfig . deviceToken ) . toString ( 'base64url' )
101+ config . private_key = Buffer . from ( deviceConfig . privateKey ) . toString ( 'base64url' )
102+ config . user = username
103+ config . server = host
104+
105+ await this . configLoader . save ( config )
106+ this . _keeperConfig = null
107+ this . _deviceCache = null
108+ } catch ( err ) {
109+ logger . warn ( 'Failed to persist device config:' , extractErrorMessage ( err ) )
86110 }
87111 }
88112
@@ -135,12 +159,15 @@ export class SessionManager implements SessionStorage {
135159 const device = ( parsed . devices || [ ] ) . find (
136160 ( configDevice ) => configDevice . device_token === user . last_device ! . device_token
137161 )
138- if ( device ?. server_info ) {
139- const serverInfo = device . server_info . find ( ( entry ) => entry . server === host )
140- if ( serverInfo ) {
141- serverInfo . clone_code = encodedCloneCode
142- updated = true
162+ if ( device ) {
163+ device . server_info = device . server_info || [ ]
164+ let serverInfo = device . server_info . find ( ( entry ) => entry . server === host )
165+ if ( ! serverInfo ) {
166+ serverInfo = { server : host }
167+ device . server_info . push ( serverInfo )
143168 }
169+ serverInfo . clone_code = encodedCloneCode
170+ updated = true
144171 }
145172 }
146173
0 commit comments