@@ -1612,12 +1612,13 @@ export class Wallet implements IWallet {
1612
1612
async prepareSharedKeychain (
1613
1613
walletPassphrase : string | undefined ,
1614
1614
pubkey : string ,
1615
- path : string
1615
+ path : string ,
1616
+ keychain ?: KeychainWithEncryptedPrv
1616
1617
) : Promise < SharedKeyChain > {
1617
1618
let sharedKeychain : SharedKeyChain = { } ;
1618
1619
1619
1620
try {
1620
- const keychain = await this . getEncryptedUserKeychain ( ) ;
1621
+ keychain = keychain ?? ( await this . getEncryptedUserKeychain ( ) ) ;
1621
1622
1622
1623
// Decrypt the user key with a passphrase
1623
1624
if ( keychain . encryptedPrv ) {
@@ -1664,12 +1665,7 @@ export class Wallet implements IWallet {
1664
1665
return sharedKeychain ;
1665
1666
}
1666
1667
1667
- /**
1668
- * Share this wallet with another BitGo user.
1669
- * @param params
1670
- * @returns {* }
1671
- */
1672
- async shareWallet ( params : ShareWalletOptions = { } ) : Promise < any > {
1668
+ async validateShareWalletOptions ( params : ShareWalletOptions ) : Promise < { needsKeychain : boolean ; sharing : any } > {
1673
1669
common . validateParams ( params , [ 'email' , 'permissions' ] , [ 'walletPassphrase' , 'message' ] ) ;
1674
1670
if ( params . reshare !== undefined && ! _ . isBoolean ( params . reshare ) ) {
1675
1671
throw new Error ( 'Expected reshare to be a boolean.' ) ;
@@ -1689,12 +1685,15 @@ export class Wallet implements IWallet {
1689
1685
}
1690
1686
1691
1687
const sharing = ( await this . bitgo . getSharingKey ( { email : params . email . toLowerCase ( ) } ) ) as any ;
1692
- let sharedKeychain ;
1693
- if ( needsKeychain ) {
1694
- sharedKeychain = await this . prepareSharedKeychain ( params . walletPassphrase , sharing . pubkey , sharing . path ) ;
1695
- }
1688
+ return { needsKeychain : ! ! needsKeychain , sharing } ;
1689
+ }
1696
1690
1697
- const options : CreateShareOptions = {
1691
+ prepareCreateShareOptions (
1692
+ params : ShareWalletOptions ,
1693
+ sharing : { userId : string } ,
1694
+ sharedKeychain : KeychainWithEncryptedPrv | undefined
1695
+ ) : CreateShareOptions {
1696
+ return {
1698
1697
user : sharing . userId ,
1699
1698
permissions : params . permissions ,
1700
1699
reshare : params . reshare ,
@@ -1703,8 +1702,21 @@ export class Wallet implements IWallet {
1703
1702
skipKeychain : Object . keys ( sharedKeychain ?? { } ) . length === 0 ,
1704
1703
keychain : Object . keys ( sharedKeychain ?? { } ) . length === 0 ? undefined : sharedKeychain ,
1705
1704
} ;
1705
+ }
1706
+
1707
+ /**
1708
+ * Share this wallet with another BitGo user.
1709
+ * @param params
1710
+ * @returns {* }
1711
+ */
1712
+ async shareWallet ( params : ShareWalletOptions = { } ) : Promise < any > {
1713
+ const { needsKeychain, sharing } = await this . validateShareWalletOptions ( params ) ;
1714
+ let sharedKeychain ;
1715
+ if ( needsKeychain ) {
1716
+ sharedKeychain = await this . prepareSharedKeychain ( params . walletPassphrase , sharing . pubkey , sharing . path ) ;
1717
+ }
1706
1718
1707
- return await this . createShare ( options ) ;
1719
+ return await this . createShare ( this . prepareCreateShareOptions ( params , sharing , sharedKeychain ) ) ;
1708
1720
}
1709
1721
1710
1722
/**
0 commit comments