@@ -3486,10 +3486,11 @@ export class Wallet implements IWallet {
34863486 }
34873487
34883488 const keyIds = this . keyIds ( ) ;
3489+ const fetchKeychain = ( id : string | undefined ) => ( id ? keychainsApi . get ( { id } ) : Promise . resolve ( undefined ) ) ;
34893490 const [ userKeychain , backupKeychain , bitgoKeychain ] = await Promise . all ( [
3490- keychainsApi . get ( { id : keyIds [ 0 ] } ) ,
3491- keychainsApi . get ( { id : keyIds [ 1 ] } ) ,
3492- keychainsApi . get ( { id : keyIds [ 2 ] } ) ,
3491+ keychainsApi . get ( { id : keyIds [ KeyIndices . USER ] } ) ,
3492+ fetchKeychain ( keyIds [ KeyIndices . BACKUP ] ) ,
3493+ fetchKeychain ( keyIds [ KeyIndices . BITGO ] ) ,
34933494 ] ) ;
34943495
34953496 const updated : Array < { type : string ; id : string } > = [ ] ;
@@ -3507,7 +3508,7 @@ export class Wallet implements IWallet {
35073508 if ( ! dryRun ) {
35083509 await this . bitgo
35093510 . put ( this . baseCoin . url ( `/key/${ encodeURIComponent ( userKeychain . id ) } ` ) )
3510- . send ( { encryptedPrv : newEncryptedPrv , originalEncryptedPrv : newEncryptedPrv } )
3511+ . send ( { encryptedPrv : newEncryptedPrv , originalEncryptedPrv : newEncryptedPrv , pub : userKeychain . pub } )
35113512 . result ( ) ;
35123513 }
35133514 updated . push ( { type : 'user' , id : userKeychain . id } ) ;
@@ -3519,8 +3520,8 @@ export class Wallet implements IWallet {
35193520 // Re-encrypt backup key. May be encrypted under the original passphrase if the wallet
35203521 // password was changed after creation — fall back to originalPassphrase if current fails.
35213522 // Source: server-stored encryptedPrv (preferred) or boxB for older/keycard-only wallets.
3522- const serverStored = ! ! backupKeychain . encryptedPrv ;
3523- const backupSource = backupKeychain . encryptedPrv ?? boxB ;
3523+ const serverStored = ! ! backupKeychain ? .encryptedPrv ;
3524+ const backupSource = backupKeychain ? .encryptedPrv ?? boxB ;
35243525 if ( backupSource ) {
35253526 if ( keychainsApi . getEncryptionVersion ( backupSource ) === 2 ) {
35263527 skipped . push ( { type : 'backup' , reason : 'already v2' } ) ;
@@ -3531,15 +3532,16 @@ export class Wallet implements IWallet {
35313532 originalPassphrase ,
35323533 'backup key'
35333534 ) ;
3534- backupKeychain . encryptedPrv = newEncryptedPrv ;
3535- if ( ! dryRun && serverStored ) {
3535+ if ( backupKeychain ) backupKeychain . encryptedPrv = newEncryptedPrv ;
3536+ if ( ! dryRun && serverStored && backupKeychain ) {
35363537 // Only PUT if the key was server-stored; boxB-only wallets have no server record.
35373538 await this . bitgo
35383539 . put ( this . baseCoin . url ( `/key/${ encodeURIComponent ( backupKeychain . id ) } ` ) )
35393540 . send ( { encryptedPrv : newEncryptedPrv } )
35403541 . result ( ) ;
35413542 }
3542- updated . push ( { type : serverStored ? 'backup' : 'backup (keycard only)' , id : backupKeychain . id } ) ;
3543+ const backupId = backupKeychain ?. id ?? boxB ?? 'unknown' ;
3544+ updated . push ( { type : serverStored ? 'backup' : 'backup (keycard only)' , id : backupId } ) ;
35433545 }
35443546 } else {
35453547 skipped . push ( { type : 'backup' , reason : 'public key only' } ) ;
@@ -3573,7 +3575,7 @@ export class Wallet implements IWallet {
35733575 ) ;
35743576 updated . push ( { type : 'user reducedEncryptedPrv (keycard only)' , id : userKeychain . id } ) ;
35753577 }
3576- if ( boxB && backupKeychain . encryptedPrv ) {
3578+ if ( boxB && backupKeychain ? .encryptedPrv ) {
35773579 // MPCv2: encryptedPrv exists server-side but reducedEncryptedPrv does not.
35783580 // Re-encrypt boxB so the new keycard uses the reduced form instead of the full blob.
35793581 backupKeychain . reducedEncryptedPrv = await this . reencryptCreationTimeKey (
@@ -3585,7 +3587,7 @@ export class Wallet implements IWallet {
35853587 updated . push ( { type : 'backup reducedEncryptedPrv (keycard only)' , id : backupKeychain . id } ) ;
35863588 }
35873589
3588- if ( ! generatePdf ) {
3590+ if ( ! generatePdf || ! backupKeychain || ! bitgoKeychain ) {
35893591 console . log ( 'Done (no PDF generator provided).' ) ;
35903592 return undefined ;
35913593 }
0 commit comments