@bitgo-beta/sdk-core 8.2.1-beta.202 → 8.2.1-beta.2021
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/account-lib/baseCoin/baseTransaction.d.ts +0 -1
- package/dist/src/account-lib/baseCoin/baseTransaction.d.ts.map +1 -1
- package/dist/src/account-lib/baseCoin/baseTransactionBuilder.d.ts +3 -3
- package/dist/src/account-lib/baseCoin/baseTransactionBuilder.d.ts.map +1 -1
- package/dist/src/account-lib/baseCoin/baseTransactionBuilder.js +4 -3
- package/dist/src/account-lib/baseCoin/ed25519KeyPair.d.ts +1 -0
- package/dist/src/account-lib/baseCoin/ed25519KeyPair.d.ts.map +1 -1
- package/dist/src/account-lib/baseCoin/ed25519KeyPair.js +41 -29
- package/dist/src/account-lib/baseCoin/enum.d.ts +58 -5
- package/dist/src/account-lib/baseCoin/enum.d.ts.map +1 -1
- package/dist/src/account-lib/baseCoin/enum.js +109 -10
- package/dist/src/account-lib/baseCoin/errors.d.ts +3 -0
- package/dist/src/account-lib/baseCoin/errors.d.ts.map +1 -1
- package/dist/src/account-lib/baseCoin/errors.js +8 -2
- package/dist/src/account-lib/baseCoin/iface.d.ts +19 -35
- package/dist/src/account-lib/baseCoin/iface.d.ts.map +1 -1
- package/dist/src/account-lib/baseCoin/iface.js +26 -18
- package/dist/src/account-lib/baseCoin/index.d.ts +1 -1
- package/dist/src/account-lib/baseCoin/index.d.ts.map +1 -1
- package/dist/src/account-lib/baseCoin/index.js +8 -5
- package/dist/src/account-lib/baseCoin/messages/baseMessage.d.ts +88 -0
- package/dist/src/account-lib/baseCoin/messages/baseMessage.d.ts.map +1 -0
- package/dist/src/account-lib/baseCoin/messages/baseMessage.js +154 -0
- package/dist/src/account-lib/baseCoin/messages/baseMessageBuilder.d.ts +67 -0
- package/dist/src/account-lib/baseCoin/messages/baseMessageBuilder.d.ts.map +1 -0
- package/dist/src/account-lib/baseCoin/messages/baseMessageBuilder.js +144 -0
- package/dist/src/account-lib/baseCoin/messages/baseMessageBuilderFactory.d.ts +33 -0
- package/dist/src/account-lib/baseCoin/messages/baseMessageBuilderFactory.d.ts.map +1 -0
- package/dist/src/account-lib/baseCoin/messages/baseMessageBuilderFactory.js +45 -0
- package/dist/src/account-lib/baseCoin/messages/iface.d.ts +164 -0
- package/dist/src/account-lib/baseCoin/messages/iface.d.ts.map +1 -0
- package/dist/src/account-lib/baseCoin/messages/iface.js +3 -0
- package/dist/src/account-lib/baseCoin/messages/index.d.ts +6 -0
- package/dist/src/account-lib/baseCoin/messages/index.d.ts.map +1 -0
- package/dist/src/account-lib/baseCoin/messages/index.js +22 -0
- package/dist/src/account-lib/baseCoin/messages/simple/index.d.ts +3 -0
- package/dist/src/account-lib/baseCoin/messages/simple/index.d.ts.map +1 -0
- package/dist/src/account-lib/baseCoin/messages/simple/index.js +19 -0
- package/dist/src/account-lib/baseCoin/messages/simple/simpleMessage.d.ts +13 -0
- package/dist/src/account-lib/baseCoin/messages/simple/simpleMessage.d.ts.map +1 -0
- package/dist/src/account-lib/baseCoin/messages/simple/simpleMessage.js +28 -0
- package/dist/src/account-lib/baseCoin/messages/simple/simpleMessageBuilder.d.ts +21 -0
- package/dist/src/account-lib/baseCoin/messages/simple/simpleMessageBuilder.d.ts.map +1 -0
- package/dist/src/account-lib/baseCoin/messages/simple/simpleMessageBuilder.js +28 -0
- package/dist/src/account-lib/baseCoin/secp256k1ExtendedKeyPair.d.ts +1 -2
- package/dist/src/account-lib/baseCoin/secp256k1ExtendedKeyPair.d.ts.map +1 -1
- package/dist/src/account-lib/baseCoin/secp256k1ExtendedKeyPair.js +38 -26
- package/dist/src/account-lib/index.js +23 -9
- package/dist/src/account-lib/mpc/index.d.ts +1 -1
- package/dist/src/account-lib/mpc/index.d.ts.map +1 -1
- package/dist/src/account-lib/mpc/index.js +6 -2
- package/dist/src/account-lib/mpc/tss/ecdsa/ecdsa.d.ts +2 -3
- package/dist/src/account-lib/mpc/tss/ecdsa/ecdsa.d.ts.map +1 -1
- package/dist/src/account-lib/mpc/tss/ecdsa/ecdsa.js +376 -354
- package/dist/src/account-lib/mpc/tss/ecdsa/index.js +23 -9
- package/dist/src/account-lib/mpc/tss/ecdsa/rangeproof.d.ts +2 -2
- package/dist/src/account-lib/mpc/tss/ecdsa/rangeproof.d.ts.map +1 -1
- package/dist/src/account-lib/mpc/tss/ecdsa/rangeproof.js +3 -3
- package/dist/src/account-lib/mpc/tss/ecdsa/types.d.ts +46 -53
- package/dist/src/account-lib/mpc/tss/ecdsa/types.d.ts.map +1 -1
- package/dist/src/account-lib/mpc/tss/ecdsa/types.js +1 -1
- package/dist/src/account-lib/mpc/tss/eddsa/eddsa.d.ts +0 -1
- package/dist/src/account-lib/mpc/tss/eddsa/eddsa.d.ts.map +1 -1
- package/dist/src/account-lib/mpc/tss/eddsa/eddsa.js +66 -69
- package/dist/src/account-lib/mpc/tss/eddsa/index.js +23 -9
- package/dist/src/account-lib/mpc/tss/eddsa/types.d.ts +1 -1
- package/dist/src/account-lib/mpc/tss/eddsa/types.d.ts.map +1 -1
- package/dist/src/account-lib/mpc/tss/eddsa/types.js +1 -1
- package/dist/src/account-lib/mpc/tss/index.js +23 -9
- package/dist/src/account-lib/mpc/util.d.ts +7 -1
- package/dist/src/account-lib/mpc/util.d.ts.map +1 -1
- package/dist/src/account-lib/mpc/util.js +24 -1
- package/dist/src/account-lib/staking/index.js +6 -2
- package/dist/src/account-lib/staking/utils.js +3 -3
- package/dist/src/account-lib/util/crypto.d.ts +8 -2
- package/dist/src/account-lib/util/crypto.d.ts.map +1 -1
- package/dist/src/account-lib/util/crypto.js +69 -38
- package/dist/src/account-lib/util/ed25519KeyDeriver.d.ts +2 -1
- package/dist/src/account-lib/util/ed25519KeyDeriver.d.ts.map +1 -1
- package/dist/src/account-lib/util/ed25519KeyDeriver.js +5 -3
- package/dist/src/api/bip32path.js +2 -3
- package/dist/src/api/index.js +6 -2
- package/dist/src/api/types.d.ts +31 -0
- package/dist/src/api/types.d.ts.map +1 -1
- package/dist/src/api/types.js +1 -1
- package/dist/src/bitgo/address-book/address-book.d.ts.map +1 -1
- package/dist/src/bitgo/address-book/address-book.js +20 -12
- package/dist/src/bitgo/address-book/index.js +6 -2
- package/dist/src/bitgo/address-book/types.d.ts +36 -36
- package/dist/src/bitgo/address-book/types.d.ts.map +1 -1
- package/dist/src/bitgo/baseCoin/baseCoin.d.ts +123 -12
- package/dist/src/bitgo/baseCoin/baseCoin.d.ts.map +1 -1
- package/dist/src/bitgo/baseCoin/baseCoin.js +203 -16
- package/dist/src/bitgo/baseCoin/iBaseCoin.d.ts +290 -27
- package/dist/src/bitgo/baseCoin/iBaseCoin.d.ts.map +1 -1
- package/dist/src/bitgo/baseCoin/iBaseCoin.js +14 -3
- package/dist/src/bitgo/baseCoin/index.js +6 -2
- package/dist/src/bitgo/bip32util.d.ts +3 -16
- package/dist/src/bitgo/bip32util.d.ts.map +1 -1
- package/dist/src/bitgo/bip32util.js +4 -56
- package/dist/src/bitgo/bitcoin.d.ts +0 -1
- package/dist/src/bitgo/bitcoin.d.ts.map +1 -1
- package/dist/src/bitgo/bitcoin.js +26 -13
- package/dist/src/bitgo/bitgoBase.d.ts +17 -4
- package/dist/src/bitgo/bitgoBase.d.ts.map +1 -1
- package/dist/src/bitgo/bitgoBase.js +1 -1
- package/dist/src/bitgo/coinFactory.d.ts +17 -3
- package/dist/src/bitgo/coinFactory.d.ts.map +1 -1
- package/dist/src/bitgo/coinFactory.js +26 -3
- package/dist/src/bitgo/config.d.ts +3 -101
- package/dist/src/bitgo/config.d.ts.map +1 -1
- package/dist/src/bitgo/config.js +26 -15
- package/dist/src/bitgo/defi/defiVault.d.ts +137 -0
- package/dist/src/bitgo/defi/defiVault.d.ts.map +1 -0
- package/dist/src/bitgo/defi/defiVault.js +379 -0
- package/dist/src/bitgo/defi/iDefiVault.d.ts +81 -0
- package/dist/src/bitgo/defi/iDefiVault.d.ts.map +1 -0
- package/dist/src/bitgo/defi/iDefiVault.js +6 -0
- package/dist/src/bitgo/defi/index.d.ts +3 -0
- package/dist/src/bitgo/defi/index.d.ts.map +1 -0
- package/dist/src/bitgo/defi/index.js +22 -0
- package/dist/src/bitgo/ecdh.d.ts +0 -1
- package/dist/src/bitgo/ecdh.d.ts.map +1 -1
- package/dist/src/bitgo/ecdh.js +26 -13
- package/dist/src/bitgo/enterprise/enterprise.d.ts +9 -4
- package/dist/src/bitgo/enterprise/enterprise.d.ts.map +1 -1
- package/dist/src/bitgo/enterprise/enterprise.js +47 -21
- package/dist/src/bitgo/enterprise/enterprises.js +27 -13
- package/dist/src/bitgo/enterprise/iEnterprise.d.ts +5 -3
- package/dist/src/bitgo/enterprise/iEnterprise.d.ts.map +1 -1
- package/dist/src/bitgo/enterprise/iEnterprise.js +1 -1
- package/dist/src/bitgo/enterprise/index.js +6 -2
- package/dist/src/bitgo/environments.d.ts +68 -3
- package/dist/src/bitgo/environments.d.ts.map +1 -1
- package/dist/src/bitgo/environments.js +414 -34
- package/dist/src/bitgo/errors.d.ts +182 -1
- package/dist/src/bitgo/errors.d.ts.map +1 -1
- package/dist/src/bitgo/errors.js +177 -3
- package/dist/src/bitgo/evm/evmUtils.d.ts +26 -0
- package/dist/src/bitgo/evm/evmUtils.d.ts.map +1 -0
- package/dist/src/bitgo/evm/evmUtils.js +50 -0
- package/dist/src/bitgo/index.d.ts +5 -1
- package/dist/src/bitgo/index.d.ts.map +1 -1
- package/dist/src/bitgo/index.js +31 -11
- package/dist/src/bitgo/inscriptionBuilder/iInscriptionBuilder.d.ts +3 -3
- package/dist/src/bitgo/inscriptionBuilder/iInscriptionBuilder.d.ts.map +1 -1
- package/dist/src/bitgo/inscriptionBuilder/iInscriptionBuilder.js +1 -1
- package/dist/src/bitgo/inscriptionBuilder/index.js +6 -2
- package/dist/src/bitgo/internal/index.js +6 -2
- package/dist/src/bitgo/internal/internal.js +5 -6
- package/dist/src/bitgo/internal/keycard.d.ts +12 -8
- package/dist/src/bitgo/internal/keycard.d.ts.map +1 -1
- package/dist/src/bitgo/internal/keycard.js +60 -48
- package/dist/src/bitgo/keychain/decryptKeychain.d.ts +14 -0
- package/dist/src/bitgo/keychain/decryptKeychain.d.ts.map +1 -0
- package/dist/src/bitgo/keychain/decryptKeychain.js +36 -0
- package/dist/src/bitgo/keychain/iKeychains.d.ts +128 -11
- package/dist/src/bitgo/keychain/iKeychains.d.ts.map +1 -1
- package/dist/src/bitgo/keychain/iKeychains.js +2 -2
- package/dist/src/bitgo/keychain/index.d.ts +1 -0
- package/dist/src/bitgo/keychain/index.d.ts.map +1 -1
- package/dist/src/bitgo/keychain/index.js +7 -2
- package/dist/src/bitgo/keychain/keychains.d.ts +55 -7
- package/dist/src/bitgo/keychain/keychains.d.ts.map +1 -1
- package/dist/src/bitgo/keychain/keychains.js +282 -52
- package/dist/src/bitgo/keychain/ovcJsonCodec.d.ts +3 -3
- package/dist/src/bitgo/keychain/ovcJsonCodec.d.ts.map +1 -1
- package/dist/src/bitgo/keychain/ovcJsonCodec.js +23 -9
- package/dist/src/bitgo/legacyBitcoin.d.ts +0 -1
- package/dist/src/bitgo/legacyBitcoin.d.ts.map +1 -1
- package/dist/src/bitgo/legacyBitcoin.js +27 -13
- package/dist/src/bitgo/lightning/lightningWalletUtil.d.ts +7 -0
- package/dist/src/bitgo/lightning/lightningWalletUtil.d.ts.map +1 -0
- package/dist/src/bitgo/lightning/lightningWalletUtil.js +25 -0
- package/dist/src/bitgo/market/iMarkets.d.ts +2 -2
- package/dist/src/bitgo/market/iMarkets.d.ts.map +1 -1
- package/dist/src/bitgo/market/index.js +6 -2
- package/dist/src/bitgo/market/markets.js +23 -9
- package/dist/src/bitgo/pendingApproval/iPendingApproval.d.ts +5 -1
- package/dist/src/bitgo/pendingApproval/iPendingApproval.d.ts.map +1 -1
- package/dist/src/bitgo/pendingApproval/iPendingApproval.js +4 -4
- package/dist/src/bitgo/pendingApproval/index.js +6 -2
- package/dist/src/bitgo/pendingApproval/pendingApproval.d.ts +20 -8
- package/dist/src/bitgo/pendingApproval/pendingApproval.d.ts.map +1 -1
- package/dist/src/bitgo/pendingApproval/pendingApproval.js +246 -111
- package/dist/src/bitgo/pendingApproval/pendingApprovals.js +23 -9
- package/dist/src/bitgo/proofs/WalletProofs.d.ts +19 -0
- package/dist/src/bitgo/proofs/WalletProofs.d.ts.map +1 -0
- package/dist/src/bitgo/proofs/WalletProofs.js +37 -0
- package/dist/src/bitgo/proofs/index.d.ts +2 -0
- package/dist/src/bitgo/proofs/index.d.ts.map +1 -0
- package/dist/src/bitgo/proofs/index.js +6 -0
- package/dist/src/bitgo/proofs/types.d.ts +80 -0
- package/dist/src/bitgo/proofs/types.d.ts.map +1 -0
- package/dist/src/bitgo/proofs/types.js +80 -0
- package/dist/src/bitgo/recovery/index.js +6 -2
- package/dist/src/bitgo/recovery/initiate.d.ts +13 -3
- package/dist/src/bitgo/recovery/initiate.d.ts.map +1 -1
- package/dist/src/bitgo/recovery/initiate.js +49 -41
- package/dist/src/bitgo/safe/derivableEd25519Pub.d.ts +88 -0
- package/dist/src/bitgo/safe/derivableEd25519Pub.d.ts.map +1 -0
- package/dist/src/bitgo/safe/derivableEd25519Pub.js +204 -0
- package/dist/src/bitgo/safe/iSafe.d.ts +87 -0
- package/dist/src/bitgo/safe/iSafe.d.ts.map +1 -0
- package/dist/src/bitgo/safe/iSafe.js +3 -0
- package/dist/src/bitgo/safe/iSafes.d.ts +94 -0
- package/dist/src/bitgo/safe/iSafes.d.ts.map +1 -0
- package/dist/src/bitgo/safe/iSafes.js +3 -0
- package/dist/src/bitgo/safe/index.d.ts +7 -0
- package/dist/src/bitgo/safe/index.d.ts.map +1 -0
- package/dist/src/bitgo/safe/index.js +23 -0
- package/dist/src/bitgo/safe/safe.d.ts +61 -0
- package/dist/src/bitgo/safe/safe.d.ts.map +1 -0
- package/dist/src/bitgo/safe/safe.js +230 -0
- package/dist/src/bitgo/safe/safeDerivation.d.ts +30 -0
- package/dist/src/bitgo/safe/safeDerivation.d.ts.map +1 -0
- package/dist/src/bitgo/safe/safeDerivation.js +122 -0
- package/dist/src/bitgo/safe/safes.d.ts +107 -0
- package/dist/src/bitgo/safe/safes.d.ts.map +1 -0
- package/dist/src/bitgo/safe/safes.js +315 -0
- package/dist/src/bitgo/staking/goStakingInterfaces.d.ts +136 -0
- package/dist/src/bitgo/staking/goStakingInterfaces.d.ts.map +1 -0
- package/dist/src/bitgo/staking/goStakingInterfaces.js +3 -0
- package/dist/src/bitgo/staking/goStakingWallet.d.ts +62 -0
- package/dist/src/bitgo/staking/goStakingWallet.d.ts.map +1 -0
- package/dist/src/bitgo/staking/goStakingWallet.js +141 -0
- package/dist/src/bitgo/staking/iGoStakingWallet.d.ts +17 -0
- package/dist/src/bitgo/staking/iGoStakingWallet.d.ts.map +1 -0
- package/dist/src/bitgo/staking/iGoStakingWallet.js +3 -0
- package/dist/src/bitgo/staking/iStakingWallet.d.ts +157 -8
- package/dist/src/bitgo/staking/iStakingWallet.d.ts.map +1 -1
- package/dist/src/bitgo/staking/iStakingWallet.js +2 -2
- package/dist/src/bitgo/staking/index.d.ts +3 -0
- package/dist/src/bitgo/staking/index.d.ts.map +1 -1
- package/dist/src/bitgo/staking/index.js +9 -2
- package/dist/src/bitgo/staking/stakingWallet.d.ts +21 -8
- package/dist/src/bitgo/staking/stakingWallet.d.ts.map +1 -1
- package/dist/src/bitgo/staking/stakingWallet.js +140 -7
- package/dist/src/bitgo/trading/iTradingAccount.d.ts +13 -1
- package/dist/src/bitgo/trading/iTradingAccount.d.ts.map +1 -1
- package/dist/src/bitgo/trading/iTradingAccount.js +1 -1
- package/dist/src/bitgo/trading/index.d.ts +1 -0
- package/dist/src/bitgo/trading/index.d.ts.map +1 -1
- package/dist/src/bitgo/trading/index.js +7 -2
- package/dist/src/bitgo/trading/network/decrypt-aes-gcm.d.ts +8 -0
- package/dist/src/bitgo/trading/network/decrypt-aes-gcm.d.ts.map +1 -0
- package/dist/src/bitgo/trading/network/decrypt-aes-gcm.js +31 -0
- package/dist/src/bitgo/trading/network/decrypt-rsa.d.ts +8 -0
- package/dist/src/bitgo/trading/network/decrypt-rsa.d.ts.map +1 -0
- package/dist/src/bitgo/trading/network/decrypt-rsa.js +23 -0
- package/dist/src/bitgo/trading/network/decrypt.d.ts +14 -0
- package/dist/src/bitgo/trading/network/decrypt.d.ts.map +1 -0
- package/dist/src/bitgo/trading/network/decrypt.js +23 -0
- package/dist/src/bitgo/trading/network/encrypt-aes-gcm.d.ts +8 -0
- package/dist/src/bitgo/trading/network/encrypt-aes-gcm.d.ts.map +1 -0
- package/dist/src/bitgo/trading/network/encrypt-aes-gcm.js +25 -0
- package/dist/src/bitgo/trading/network/encrypt-rsa-browser.d.ts +8 -0
- package/dist/src/bitgo/trading/network/encrypt-rsa-browser.d.ts.map +1 -0
- package/dist/src/bitgo/trading/network/encrypt-rsa-browser.js +65 -0
- package/dist/src/bitgo/trading/network/encrypt-rsa.d.ts +8 -0
- package/dist/src/bitgo/trading/network/encrypt-rsa.d.ts.map +1 -0
- package/dist/src/bitgo/trading/network/encrypt-rsa.js +23 -0
- package/dist/src/bitgo/trading/network/encrypt.d.ts +37 -0
- package/dist/src/bitgo/trading/network/encrypt.d.ts.map +1 -0
- package/dist/src/bitgo/trading/network/encrypt.js +58 -0
- package/dist/src/bitgo/trading/network/index.d.ts +2 -0
- package/dist/src/bitgo/trading/network/index.d.ts.map +1 -1
- package/dist/src/bitgo/trading/network/index.js +8 -2
- package/dist/src/bitgo/trading/network/network.d.ts +4 -3
- package/dist/src/bitgo/trading/network/network.d.ts.map +1 -1
- package/dist/src/bitgo/trading/network/network.js +24 -27
- package/dist/src/bitgo/trading/network/types.d.ts +79 -46
- package/dist/src/bitgo/trading/network/types.d.ts.map +1 -1
- package/dist/src/bitgo/trading/network/types.js +1 -1
- package/dist/src/bitgo/trading/network/utils.d.ts +20 -0
- package/dist/src/bitgo/trading/network/utils.d.ts.map +1 -0
- package/dist/src/bitgo/trading/network/utils.js +54 -0
- package/dist/src/bitgo/trading/tradingAccount.d.ts +15 -1
- package/dist/src/bitgo/trading/tradingAccount.d.ts.map +1 -1
- package/dist/src/bitgo/trading/tradingAccount.js +55 -7
- package/dist/src/bitgo/tss/bitgoPubKeys.d.ts +49 -0
- package/dist/src/bitgo/tss/bitgoPubKeys.d.ts.map +1 -0
- package/dist/src/bitgo/tss/bitgoPubKeys.js +92 -0
- package/dist/src/bitgo/tss/common.d.ts +41 -6
- package/dist/src/bitgo/tss/common.d.ts.map +1 -1
- package/dist/src/bitgo/tss/common.js +124 -17
- package/dist/src/bitgo/tss/ecdsa/ecdsa.d.ts +6 -4
- package/dist/src/bitgo/tss/ecdsa/ecdsa.d.ts.map +1 -1
- package/dist/src/bitgo/tss/ecdsa/ecdsa.js +78 -66
- package/dist/src/bitgo/tss/ecdsa/ecdsaMPCv2.d.ts +15 -0
- package/dist/src/bitgo/tss/ecdsa/ecdsaMPCv2.d.ts.map +1 -0
- package/dist/src/bitgo/tss/ecdsa/ecdsaMPCv2.js +167 -0
- package/dist/src/bitgo/tss/ecdsa/index.d.ts +1 -0
- package/dist/src/bitgo/tss/ecdsa/index.d.ts.map +1 -1
- package/dist/src/bitgo/tss/ecdsa/index.js +25 -10
- package/dist/src/bitgo/tss/ecdsa/types.d.ts +27 -27
- package/dist/src/bitgo/tss/ecdsa/types.d.ts.map +1 -1
- package/dist/src/bitgo/tss/ecdsa/types.js +3 -3
- package/dist/src/bitgo/tss/eddsa/eddsa.d.ts +15 -6
- package/dist/src/bitgo/tss/eddsa/eddsa.d.ts.map +1 -1
- package/dist/src/bitgo/tss/eddsa/eddsa.js +47 -40
- package/dist/src/bitgo/tss/eddsa/eddsaMPCv2.d.ts +42 -0
- package/dist/src/bitgo/tss/eddsa/eddsaMPCv2.d.ts.map +1 -0
- package/dist/src/bitgo/tss/eddsa/eddsaMPCv2.js +104 -0
- package/dist/src/bitgo/tss/eddsa/index.js +23 -9
- package/dist/src/bitgo/tss/eddsa/types.d.ts +4 -4
- package/dist/src/bitgo/tss/eddsa/types.d.ts.map +1 -1
- package/dist/src/bitgo/tss/index.d.ts +3 -2
- package/dist/src/bitgo/tss/index.d.ts.map +1 -1
- package/dist/src/bitgo/tss/index.js +26 -10
- package/dist/src/bitgo/tss/types.d.ts +3 -3
- package/dist/src/bitgo/tss/types.d.ts.map +1 -1
- package/dist/src/bitgo/tss/types.js +2 -2
- package/dist/src/bitgo/types.d.ts +3 -3
- package/dist/src/bitgo/types.d.ts.map +1 -1
- package/dist/src/bitgo/utils/abstractUtxoCoinUtil.d.ts +10 -0
- package/dist/src/bitgo/utils/abstractUtxoCoinUtil.d.ts.map +1 -1
- package/dist/src/bitgo/utils/abstractUtxoCoinUtil.js +76 -14
- package/dist/src/bitgo/utils/codecProps.js +24 -11
- package/dist/src/bitgo/utils/codecs.d.ts +11 -0
- package/dist/src/bitgo/utils/codecs.d.ts.map +1 -0
- package/dist/src/bitgo/utils/codecs.js +59 -0
- package/dist/src/bitgo/utils/decode.d.ts.map +1 -1
- package/dist/src/bitgo/utils/decode.js +30 -16
- package/dist/src/bitgo/utils/index.d.ts +4 -2
- package/dist/src/bitgo/utils/index.d.ts.map +1 -1
- package/dist/src/bitgo/utils/index.js +27 -11
- package/dist/src/bitgo/utils/messageTypes.d.ts +40 -0
- package/dist/src/bitgo/utils/messageTypes.d.ts.map +1 -0
- package/dist/src/bitgo/utils/messageTypes.js +17 -0
- package/dist/src/bitgo/utils/mpcUtils.d.ts +4 -4
- package/dist/src/bitgo/utils/mpcUtils.d.ts.map +1 -1
- package/dist/src/bitgo/utils/mpcUtils.js +175 -14
- package/dist/src/bitgo/utils/notEmpty.d.ts +2 -0
- package/dist/src/bitgo/utils/notEmpty.d.ts.map +1 -0
- package/dist/src/bitgo/utils/notEmpty.js +7 -0
- package/dist/src/bitgo/utils/opengpgUtils.d.ts +11 -7
- package/dist/src/bitgo/utils/opengpgUtils.d.ts.map +1 -1
- package/dist/src/bitgo/utils/opengpgUtils.js +79 -62
- package/dist/src/bitgo/utils/postWithCodec.d.ts.map +1 -1
- package/dist/src/bitgo/utils/postWithCodec.js +4 -38
- package/dist/src/bitgo/utils/promise-utils.d.ts +1 -1
- package/dist/src/bitgo/utils/promise-utils.d.ts.map +1 -1
- package/dist/src/bitgo/utils/promise-utils.js +2 -3
- package/dist/src/bitgo/utils/transactionUtils.d.ts +9 -0
- package/dist/src/bitgo/utils/transactionUtils.d.ts.map +1 -0
- package/dist/src/bitgo/utils/transactionUtils.js +29 -0
- package/dist/src/bitgo/utils/triple.d.ts +1 -1
- package/dist/src/bitgo/utils/triple.d.ts.map +1 -1
- package/dist/src/bitgo/utils/triple.js +2 -3
- package/dist/src/bitgo/utils/tss/addressVerification.d.ts +62 -0
- package/dist/src/bitgo/utils/tss/addressVerification.d.ts.map +1 -0
- package/dist/src/bitgo/utils/tss/addressVerification.js +93 -0
- package/dist/src/bitgo/utils/tss/baseTSSUtils.d.ts +94 -17
- package/dist/src/bitgo/utils/tss/baseTSSUtils.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/baseTSSUtils.js +305 -45
- package/dist/src/bitgo/utils/tss/baseTypes.d.ts +432 -55
- package/dist/src/bitgo/utils/tss/baseTypes.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/baseTypes.js +47 -22
- package/dist/src/bitgo/utils/tss/ecdsa/SMC/utils.d.ts +23 -0
- package/dist/src/bitgo/utils/tss/ecdsa/SMC/utils.d.ts.map +1 -0
- package/dist/src/bitgo/utils/tss/ecdsa/SMC/utils.js +157 -0
- package/dist/src/bitgo/utils/tss/ecdsa/base.d.ts +28 -0
- package/dist/src/bitgo/utils/tss/ecdsa/base.d.ts.map +1 -0
- package/dist/src/bitgo/utils/tss/ecdsa/base.js +53 -0
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsa.d.ts +25 -51
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsa.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsa.js +173 -246
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.d.ts +216 -0
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.d.ts.map +1 -0
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.js +1053 -0
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2KeyGenSender.d.ts +8 -0
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2KeyGenSender.d.ts.map +1 -0
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2KeyGenSender.js +16 -0
- package/dist/src/bitgo/utils/tss/ecdsa/index.d.ts +4 -0
- package/dist/src/bitgo/utils/tss/ecdsa/index.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/ecdsa/index.js +10 -2
- package/dist/src/bitgo/utils/tss/ecdsa/types.d.ts +7 -10
- package/dist/src/bitgo/utils/tss/ecdsa/types.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/ecdsa/types.js +1 -1
- package/dist/src/bitgo/utils/tss/ecdsa/typesMPCv2.d.ts +107 -0
- package/dist/src/bitgo/utils/tss/ecdsa/typesMPCv2.d.ts.map +1 -0
- package/dist/src/bitgo/utils/tss/ecdsa/typesMPCv2.js +55 -0
- package/dist/src/bitgo/utils/tss/eddsa/SMC/utils.d.ts +21 -0
- package/dist/src/bitgo/utils/tss/eddsa/SMC/utils.d.ts.map +1 -0
- package/dist/src/bitgo/utils/tss/eddsa/SMC/utils.js +118 -0
- package/dist/src/bitgo/utils/tss/eddsa/base.d.ts +18 -0
- package/dist/src/bitgo/utils/tss/eddsa/base.d.ts.map +1 -0
- package/dist/src/bitgo/utils/tss/eddsa/base.js +64 -0
- package/dist/src/bitgo/utils/tss/eddsa/eddsa.d.ts +38 -11
- package/dist/src/bitgo/utils/tss/eddsa/eddsa.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/eddsa/eddsa.js +254 -96
- package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2.d.ts +204 -0
- package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2.d.ts.map +1 -0
- package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2.js +862 -0
- package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2KeyGenSender.d.ts +6 -0
- package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2KeyGenSender.d.ts.map +1 -0
- package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2KeyGenSender.js +16 -0
- package/dist/src/bitgo/utils/tss/eddsa/index.d.ts +4 -0
- package/dist/src/bitgo/utils/tss/eddsa/index.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/eddsa/index.js +29 -8
- package/dist/src/bitgo/utils/tss/eddsa/types.d.ts +12 -7
- package/dist/src/bitgo/utils/tss/eddsa/types.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/eddsa/types.js +1 -1
- package/dist/src/bitgo/utils/tss/eddsa/typesEddsaMPCv2.d.ts +40 -0
- package/dist/src/bitgo/utils/tss/eddsa/typesEddsaMPCv2.d.ts.map +1 -0
- package/dist/src/bitgo/utils/tss/eddsa/typesEddsaMPCv2.js +44 -0
- package/dist/src/bitgo/utils/tss/index.d.ts +5 -0
- package/dist/src/bitgo/utils/tss/index.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/index.js +29 -10
- package/dist/src/bitgo/utils/tss/preHashedSignable.d.ts +23 -0
- package/dist/src/bitgo/utils/tss/preHashedSignable.d.ts.map +1 -0
- package/dist/src/bitgo/utils/tss/preHashedSignable.js +26 -0
- package/dist/src/bitgo/utils/tss/recipientUtils.d.ts +41 -0
- package/dist/src/bitgo/utils/tss/recipientUtils.d.ts.map +1 -0
- package/dist/src/bitgo/utils/tss/recipientUtils.js +142 -0
- package/dist/src/bitgo/utils/tss/redpallas/SMC/utils.d.ts +29 -0
- package/dist/src/bitgo/utils/tss/redpallas/SMC/utils.d.ts.map +1 -0
- package/dist/src/bitgo/utils/tss/redpallas/SMC/utils.js +126 -0
- package/dist/src/bitgo/utils/tss/redpallas/index.d.ts +4 -0
- package/dist/src/bitgo/utils/tss/redpallas/index.d.ts.map +1 -0
- package/dist/src/bitgo/utils/tss/redpallas/index.js +20 -0
- package/dist/src/bitgo/utils/tss/redpallas/redpallasMPCv2.d.ts +27 -0
- package/dist/src/bitgo/utils/tss/redpallas/redpallasMPCv2.d.ts.map +1 -0
- package/dist/src/bitgo/utils/tss/redpallas/redpallasMPCv2.js +43 -0
- package/dist/src/bitgo/utils/tss/redpallas/redpallasMPCv2KeyGenSender.d.ts +45 -0
- package/dist/src/bitgo/utils/tss/redpallas/redpallasMPCv2KeyGenSender.d.ts.map +1 -0
- package/dist/src/bitgo/utils/tss/redpallas/redpallasMPCv2KeyGenSender.js +55 -0
- package/dist/src/bitgo/utils/tss/serializedTxHexVerify.d.ts +8 -0
- package/dist/src/bitgo/utils/tss/serializedTxHexVerify.d.ts.map +1 -0
- package/dist/src/bitgo/utils/tss/serializedTxHexVerify.js +13 -0
- package/dist/src/bitgo/utils/tss/signableConsistency.d.ts +12 -0
- package/dist/src/bitgo/utils/tss/signableConsistency.d.ts.map +1 -0
- package/dist/src/bitgo/utils/tss/signableConsistency.js +9 -0
- package/dist/src/bitgo/utils/txRequest.d.ts +10 -0
- package/dist/src/bitgo/utils/txRequest.d.ts.map +1 -0
- package/dist/src/bitgo/utils/txRequest.js +49 -0
- package/dist/src/bitgo/utils/util.js +24 -10
- package/dist/src/bitgo/utils/wallet.d.ts +7 -0
- package/dist/src/bitgo/utils/wallet.d.ts.map +1 -0
- package/dist/src/bitgo/utils/wallet.js +48 -0
- package/dist/src/bitgo/v1Wallets.d.ts +170 -0
- package/dist/src/bitgo/v1Wallets.d.ts.map +1 -0
- package/dist/src/bitgo/v1Wallets.js +3 -0
- package/dist/src/bitgo/wallet/BuildParams.d.ts +81 -1
- package/dist/src/bitgo/wallet/BuildParams.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/BuildParams.js +85 -11
- package/dist/src/bitgo/wallet/iWallet.d.ts +580 -31
- package/dist/src/bitgo/wallet/iWallet.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/iWallet.js +1 -1
- package/dist/src/bitgo/wallet/iWallets.d.ts +310 -16
- package/dist/src/bitgo/wallet/iWallets.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/iWallets.js +84 -3
- package/dist/src/bitgo/wallet/index.d.ts +1 -0
- package/dist/src/bitgo/wallet/index.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/index.js +7 -2
- package/dist/src/bitgo/wallet/safeKeychain.d.ts +52 -0
- package/dist/src/bitgo/wallet/safeKeychain.d.ts.map +1 -0
- package/dist/src/bitgo/wallet/safeKeychain.js +97 -0
- package/dist/src/bitgo/wallet/wallet.d.ts +365 -28
- package/dist/src/bitgo/wallet/wallet.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/wallet.js +2202 -381
- package/dist/src/bitgo/wallet/wallets.d.ts +93 -4
- package/dist/src/bitgo/wallet/wallets.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/wallets.js +1242 -155
- package/dist/src/bitgo/walletUtil/iMessageProvider.d.ts +12 -0
- package/dist/src/bitgo/walletUtil/iMessageProvider.d.ts.map +1 -0
- package/dist/src/bitgo/walletUtil/iMessageProvider.js +3 -0
- package/dist/src/bitgo/walletUtil/index.d.ts +3 -0
- package/dist/src/bitgo/walletUtil/index.d.ts.map +1 -0
- package/dist/src/bitgo/walletUtil/index.js +19 -0
- package/dist/src/bitgo/walletUtil/midnightMessageProvider.d.ts +22 -0
- package/dist/src/bitgo/walletUtil/midnightMessageProvider.d.ts.map +1 -0
- package/dist/src/bitgo/walletUtil/midnightMessageProvider.js +95 -0
- package/dist/src/bitgo/walletUtil/signAccountBasedMidnightClaimMessages.d.ts +9 -0
- package/dist/src/bitgo/walletUtil/signAccountBasedMidnightClaimMessages.d.ts.map +1 -0
- package/dist/src/bitgo/walletUtil/signAccountBasedMidnightClaimMessages.js +72 -0
- package/dist/src/bitgo/walletUtil/utxoMessageProof.d.ts +15 -0
- package/dist/src/bitgo/walletUtil/utxoMessageProof.d.ts.map +1 -0
- package/dist/src/bitgo/walletUtil/utxoMessageProof.js +40 -0
- package/dist/src/bitgo/webhook/index.js +6 -2
- package/dist/src/bitgo/webhook/webhooks.js +23 -9
- package/dist/src/coins/fiat.d.ts +45 -0
- package/dist/src/coins/fiat.d.ts.map +1 -0
- package/dist/src/coins/fiat.js +94 -0
- package/dist/src/coins/index.d.ts +1 -6
- package/dist/src/coins/index.d.ts.map +1 -1
- package/dist/src/coins/index.js +7 -8
- package/dist/src/coins/ofc.d.ts +21 -2
- package/dist/src/coins/ofc.d.ts.map +1 -1
- package/dist/src/coins/ofc.js +29 -3
- package/dist/src/coins/ofcToken.d.ts +15 -4
- package/dist/src/coins/ofcToken.d.ts.map +1 -1
- package/dist/src/coins/ofcToken.js +43 -5
- package/dist/src/coins/susd.d.ts +3 -2
- package/dist/src/coins/susd.d.ts.map +1 -1
- package/dist/src/coins/susd.js +5 -1
- package/dist/src/common.js +27 -13
- package/dist/src/index.d.ts +9 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +40 -11
- package/dist/src/lightning.d.ts +20 -0
- package/dist/src/lightning.d.ts.map +1 -0
- package/dist/src/lightning.js +13 -0
- package/dist/src/units.js +5 -6
- package/dist/test/unit/account-lib/baseCoin/messages/baseMessage.d.ts +2 -0
- package/dist/test/unit/account-lib/baseCoin/messages/baseMessage.d.ts.map +1 -0
- package/dist/test/unit/account-lib/baseCoin/messages/baseMessage.js +207 -0
- package/dist/test/unit/account-lib/baseCoin/messages/baseMessageBuilder.d.ts +2 -0
- package/dist/test/unit/account-lib/baseCoin/messages/baseMessageBuilder.d.ts.map +1 -0
- package/dist/test/unit/account-lib/baseCoin/messages/baseMessageBuilder.js +174 -0
- package/dist/test/unit/account-lib/baseCoin/messages/baseMessageBuilderFactory.d.ts +2 -0
- package/dist/test/unit/account-lib/baseCoin/messages/baseMessageBuilderFactory.d.ts.map +1 -0
- package/dist/test/unit/account-lib/baseCoin/messages/baseMessageBuilderFactory.js +108 -0
- package/dist/test/unit/account-lib/baseCoin/messages/fixtures.d.ts +46 -0
- package/dist/test/unit/account-lib/baseCoin/messages/fixtures.d.ts.map +1 -0
- package/dist/test/unit/account-lib/baseCoin/messages/fixtures.js +69 -0
- package/dist/test/unit/account-lib/mpc/tss/ecdsa/ecdsa.js +91 -29
- package/dist/test/unit/account-lib/mpc/util.d.ts +2 -0
- package/dist/test/unit/account-lib/mpc/util.d.ts.map +1 -0
- package/dist/test/unit/account-lib/mpc/util.js +53 -0
- package/dist/test/unit/bitgo/address-book/address-book.d.ts +2 -0
- package/dist/test/unit/bitgo/address-book/address-book.d.ts.map +1 -0
- package/dist/test/unit/bitgo/address-book/address-book.js +159 -0
- package/dist/test/unit/bitgo/defi/defiVault.d.ts +2 -0
- package/dist/test/unit/bitgo/defi/defiVault.d.ts.map +1 -0
- package/dist/test/unit/bitgo/defi/defiVault.js +600 -0
- package/dist/test/unit/bitgo/environment.d.ts +2 -0
- package/dist/test/unit/bitgo/environment.d.ts.map +1 -0
- package/dist/test/unit/bitgo/environment.js +38 -0
- package/dist/test/unit/bitgo/errors.d.ts +2 -0
- package/dist/test/unit/bitgo/errors.d.ts.map +1 -0
- package/dist/test/unit/bitgo/errors.js +262 -0
- package/dist/test/unit/bitgo/keychain/keychains.d.ts +2 -0
- package/dist/test/unit/bitgo/keychain/keychains.d.ts.map +1 -0
- package/dist/test/unit/bitgo/keychain/keychains.js +138 -0
- package/dist/test/unit/bitgo/recovery/initiate.d.ts +2 -0
- package/dist/test/unit/bitgo/recovery/initiate.d.ts.map +1 -0
- package/dist/test/unit/bitgo/recovery/initiate.js +159 -0
- package/dist/test/unit/bitgo/safe/derivableEd25519Pub.d.ts +2 -0
- package/dist/test/unit/bitgo/safe/derivableEd25519Pub.d.ts.map +1 -0
- package/dist/test/unit/bitgo/safe/derivableEd25519Pub.js +137 -0
- package/dist/test/unit/bitgo/safe/fixtures/derivableEd25519Pub.json +197 -0
- package/dist/test/unit/bitgo/safe/safe.d.ts +2 -0
- package/dist/test/unit/bitgo/safe/safe.d.ts.map +1 -0
- package/dist/test/unit/bitgo/safe/safe.js +277 -0
- package/dist/test/unit/bitgo/safe/safes.d.ts +2 -0
- package/dist/test/unit/bitgo/safe/safes.d.ts.map +1 -0
- package/dist/test/unit/bitgo/safe/safes.js +364 -0
- package/dist/test/unit/bitgo/trading/network/encrypt.d.ts +2 -0
- package/dist/test/unit/bitgo/trading/network/encrypt.d.ts.map +1 -0
- package/dist/test/unit/bitgo/trading/network/encrypt.js +71 -0
- package/dist/test/unit/bitgo/trading/network/network.test.d.ts +2 -0
- package/dist/test/unit/bitgo/trading/network/network.test.d.ts.map +1 -0
- package/dist/test/unit/bitgo/trading/network/network.test.js +136 -0
- package/dist/test/unit/bitgo/trading/tradingAccount.d.ts +2 -0
- package/dist/test/unit/bitgo/trading/tradingAccount.d.ts.map +1 -0
- package/dist/test/unit/bitgo/trading/tradingAccount.js +192 -0
- package/dist/test/unit/bitgo/tss/bitgoPubKeys.d.ts +2 -0
- package/dist/test/unit/bitgo/tss/bitgoPubKeys.d.ts.map +1 -0
- package/dist/test/unit/bitgo/tss/bitgoPubKeys.js +66 -0
- package/dist/test/unit/bitgo/utils/abstractUtxoCoinUtil.js +45 -4
- package/dist/test/unit/bitgo/utils/messageTypes.d.ts +2 -0
- package/dist/test/unit/bitgo/utils/messageTypes.d.ts.map +1 -0
- package/dist/test/unit/bitgo/utils/messageTypes.js +64 -0
- package/dist/test/unit/bitgo/utils/mpcUtils.wrapApprove.d.ts +2 -0
- package/dist/test/unit/bitgo/utils/mpcUtils.wrapApprove.d.ts.map +1 -0
- package/dist/test/unit/bitgo/utils/mpcUtils.wrapApprove.js +106 -0
- package/dist/test/unit/bitgo/utils/notEmpty.d.ts +2 -0
- package/dist/test/unit/bitgo/utils/notEmpty.d.ts.map +1 -0
- package/dist/test/unit/bitgo/utils/notEmpty.js +15 -0
- package/dist/test/unit/bitgo/utils/postWithCodec.js +32 -38
- package/dist/test/unit/bitgo/utils/tss/addressVerification.d.ts +2 -0
- package/dist/test/unit/bitgo/utils/tss/addressVerification.d.ts.map +1 -0
- package/dist/test/unit/bitgo/utils/tss/addressVerification.js +251 -0
- package/dist/test/unit/bitgo/utils/tss/baseTSSUtils.d.ts +2 -0
- package/dist/test/unit/bitgo/utils/tss/baseTSSUtils.d.ts.map +1 -0
- package/dist/test/unit/bitgo/utils/tss/baseTSSUtils.js +348 -0
- package/dist/test/unit/bitgo/utils/tss/ecdsa/ecdsaEncryptionVersion.d.ts +2 -0
- package/dist/test/unit/bitgo/utils/tss/ecdsa/ecdsaEncryptionVersion.d.ts.map +1 -0
- package/dist/test/unit/bitgo/utils/tss/ecdsa/ecdsaEncryptionVersion.js +94 -0
- package/dist/test/unit/bitgo/utils/tss/ecdsa/ecdsaMPCv2.d.ts +2 -0
- package/dist/test/unit/bitgo/utils/tss/ecdsa/ecdsaMPCv2.d.ts.map +1 -0
- package/dist/test/unit/bitgo/utils/tss/ecdsa/ecdsaMPCv2.js +999 -0
- package/dist/test/unit/bitgo/utils/tss/ecdsa/gpgKeys.d.ts +5 -0
- package/dist/test/unit/bitgo/utils/tss/ecdsa/gpgKeys.d.ts.map +1 -0
- package/dist/test/unit/bitgo/utils/tss/ecdsa/gpgKeys.js +36 -0
- package/dist/test/unit/bitgo/utils/tss/eddsa/eddsaExternalSigner.d.ts +2 -0
- package/dist/test/unit/bitgo/utils/tss/eddsa/eddsaExternalSigner.d.ts.map +1 -0
- package/dist/test/unit/bitgo/utils/tss/eddsa/eddsaExternalSigner.js +158 -0
- package/dist/test/unit/bitgo/utils/tss/eddsa/eddsaMPCv2.d.ts +2 -0
- package/dist/test/unit/bitgo/utils/tss/eddsa/eddsaMPCv2.d.ts.map +1 -0
- package/dist/test/unit/bitgo/utils/tss/eddsa/eddsaMPCv2.js +1918 -0
- package/dist/test/unit/bitgo/utils/tss/eddsa/smcUtil.d.ts +2 -0
- package/dist/test/unit/bitgo/utils/tss/eddsa/smcUtil.d.ts.map +1 -0
- package/dist/test/unit/bitgo/utils/tss/eddsa/smcUtil.js +311 -0
- package/dist/test/unit/bitgo/utils/tss/preHashedSignable.d.ts +2 -0
- package/dist/test/unit/bitgo/utils/tss/preHashedSignable.d.ts.map +1 -0
- package/dist/test/unit/bitgo/utils/tss/preHashedSignable.js +55 -0
- package/dist/test/unit/bitgo/utils/tss/recipientUtils.d.ts +2 -0
- package/dist/test/unit/bitgo/utils/tss/recipientUtils.d.ts.map +1 -0
- package/dist/test/unit/bitgo/utils/tss/recipientUtils.js +374 -0
- package/dist/test/unit/bitgo/utils/tss/redpallas/redpallasMPCv2.d.ts +2 -0
- package/dist/test/unit/bitgo/utils/tss/redpallas/redpallasMPCv2.d.ts.map +1 -0
- package/dist/test/unit/bitgo/utils/tss/redpallas/redpallasMPCv2.js +80 -0
- package/dist/test/unit/bitgo/utils/tss/redpallas/smcUtil.d.ts +2 -0
- package/dist/test/unit/bitgo/utils/tss/redpallas/smcUtil.d.ts.map +1 -0
- package/dist/test/unit/bitgo/utils/tss/redpallas/smcUtil.js +279 -0
- package/dist/test/unit/bitgo/utils/tss/redpallasBitgoGpgKey.d.ts +2 -0
- package/dist/test/unit/bitgo/utils/tss/redpallasBitgoGpgKey.d.ts.map +1 -0
- package/dist/test/unit/bitgo/utils/tss/redpallasBitgoGpgKey.js +111 -0
- package/dist/test/unit/bitgo/utils/txRequest.d.ts +2 -0
- package/dist/test/unit/bitgo/utils/txRequest.d.ts.map +1 -0
- package/dist/test/unit/bitgo/utils/txRequest.js +179 -0
- package/dist/test/unit/bitgo/utils/wallet.d.ts +2 -0
- package/dist/test/unit/bitgo/utils/wallet.d.ts.map +1 -0
- package/dist/test/unit/bitgo/utils/wallet.js +55 -0
- package/dist/test/unit/bitgo/wallet/BuildParams.d.ts +2 -0
- package/dist/test/unit/bitgo/wallet/BuildParams.d.ts.map +1 -0
- package/dist/test/unit/bitgo/wallet/BuildParams.js +141 -0
- package/dist/test/unit/bitgo/wallet/SendTransactionRequest.js +79 -9
- package/dist/test/unit/bitgo/wallet/getAccountResources.d.ts +2 -0
- package/dist/test/unit/bitgo/wallet/getAccountResources.d.ts.map +1 -0
- package/dist/test/unit/bitgo/wallet/getAccountResources.js +133 -0
- package/dist/test/unit/bitgo/wallet/getPotentialStuckTxs.d.ts +2 -0
- package/dist/test/unit/bitgo/wallet/getPotentialStuckTxs.d.ts.map +1 -0
- package/dist/test/unit/bitgo/wallet/getPotentialStuckTxs.js +88 -0
- package/dist/test/unit/bitgo/wallet/getResourceDelegations.d.ts +2 -0
- package/dist/test/unit/bitgo/wallet/getResourceDelegations.d.ts.map +1 -0
- package/dist/test/unit/bitgo/wallet/getResourceDelegations.js +118 -0
- package/dist/test/unit/bitgo/wallet/ofcWalletAddressCreation.d.ts +2 -0
- package/dist/test/unit/bitgo/wallet/ofcWalletAddressCreation.d.ts.map +1 -0
- package/dist/test/unit/bitgo/wallet/ofcWalletAddressCreation.js +141 -0
- package/dist/test/unit/bitgo/wallet/ofcWalletSignTransaction.d.ts +2 -0
- package/dist/test/unit/bitgo/wallet/ofcWalletSignTransaction.d.ts.map +1 -0
- package/dist/test/unit/bitgo/wallet/ofcWalletSignTransaction.js +185 -0
- package/dist/test/unit/bitgo/wallet/prebuildTransactionTypes.d.ts +2 -0
- package/dist/test/unit/bitgo/wallet/prebuildTransactionTypes.d.ts.map +1 -0
- package/dist/test/unit/bitgo/wallet/prebuildTransactionTypes.js +20 -0
- package/dist/test/unit/bitgo/wallet/resourceManagement.d.ts +3 -0
- package/dist/test/unit/bitgo/wallet/resourceManagement.d.ts.map +1 -0
- package/dist/test/unit/bitgo/wallet/resourceManagement.js +441 -0
- package/dist/test/unit/bitgo/wallet/safeGetUserPrv.d.ts +5 -0
- package/dist/test/unit/bitgo/wallet/safeGetUserPrv.d.ts.map +1 -0
- package/dist/test/unit/bitgo/wallet/safeGetUserPrv.js +671 -0
- package/dist/test/unit/bitgo/wallet/tokenApproval.d.ts +2 -0
- package/dist/test/unit/bitgo/wallet/tokenApproval.d.ts.map +1 -0
- package/dist/test/unit/bitgo/wallet/tokenApproval.js +201 -0
- package/dist/test/unit/bitgo/wallet/walletEvmAddressCreation.d.ts +2 -0
- package/dist/test/unit/bitgo/wallet/walletEvmAddressCreation.d.ts.map +1 -0
- package/dist/test/unit/bitgo/wallet/walletEvmAddressCreation.js +181 -0
- package/dist/test/unit/bitgo/wallet/walletOptionsCodecs.d.ts +2 -0
- package/dist/test/unit/bitgo/wallet/walletOptionsCodecs.d.ts.map +1 -0
- package/dist/test/unit/bitgo/wallet/walletOptionsCodecs.js +69 -0
- package/dist/test/unit/bitgo/wallet/walletTssAddressVerification.d.ts +2 -0
- package/dist/test/unit/bitgo/wallet/walletTssAddressVerification.d.ts.map +1 -0
- package/dist/test/unit/bitgo/wallet/walletTssAddressVerification.js +320 -0
- package/dist/test/unit/bitgo/wallet/walletsEncryptionVersion.d.ts +2 -0
- package/dist/test/unit/bitgo/wallet/walletsEncryptionVersion.d.ts.map +1 -0
- package/dist/test/unit/bitgo/wallet/walletsEncryptionVersion.js +293 -0
- package/dist/test/unit/bitgo/wallet/walletsEvmKeyring.d.ts +2 -0
- package/dist/test/unit/bitgo/wallet/walletsEvmKeyring.d.ts.map +1 -0
- package/dist/test/unit/bitgo/wallet/walletsEvmKeyring.js +216 -0
- package/dist/test/unit/bitgo/wallet/walletsExternalSigner.d.ts +2 -0
- package/dist/test/unit/bitgo/wallet/walletsExternalSigner.d.ts.map +1 -0
- package/dist/test/unit/bitgo/wallet/walletsExternalSigner.js +675 -0
- package/dist/test/unit/bitgo/wallet/walletsGoAccount.d.ts +2 -0
- package/dist/test/unit/bitgo/wallet/walletsGoAccount.d.ts.map +1 -0
- package/dist/test/unit/bitgo/wallet/walletsGoAccount.js +150 -0
- package/dist/test/unit/bitgo/wallet/walletsWebauthn.d.ts +2 -0
- package/dist/test/unit/bitgo/wallet/walletsWebauthn.d.ts.map +1 -0
- package/dist/test/unit/bitgo/wallet/walletsWebauthn.js +201 -0
- package/dist/test/unit/coins/ofc.d.ts +2 -0
- package/dist/test/unit/coins/ofc.d.ts.map +1 -0
- package/dist/test/unit/coins/ofc.js +124 -0
- package/dist/test/unit/lightning.d.ts +2 -0
- package/dist/test/unit/lightning.d.ts.map +1 -0
- package/dist/test/unit/lightning.js +23 -0
- package/dist/test/unit/units.d.ts.map +1 -1
- package/dist/test/unit/units.js +64 -64
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +23 -21
- package/.eslintignore +0 -5
- package/CHANGELOG.md +0 -1712
- package/dist/src/account-lib/baseCoin/blsKeyPair.d.ts +0 -77
- package/dist/src/account-lib/baseCoin/blsKeyPair.d.ts.map +0 -1
- package/dist/src/account-lib/baseCoin/blsKeyPair.js +0 -209
- package/dist/src/bitgo/lightning/iLightning.d.ts +0 -186
- package/dist/src/bitgo/lightning/iLightning.d.ts.map +0 -1
- package/dist/src/bitgo/lightning/iLightning.js +0 -106
- package/dist/src/bitgo/lightning/index.d.ts +0 -5
- package/dist/src/bitgo/lightning/index.d.ts.map +0 -1
- package/dist/src/bitgo/lightning/index.js +0 -17
- package/dist/src/bitgo/lightning/lightning.d.ts +0 -25
- package/dist/src/bitgo/lightning/lightning.d.ts.map +0 -1
- package/dist/src/bitgo/lightning/lightning.js +0 -111
- package/dist/src/bitgo/lightning/lightningUtils.d.ts +0 -46
- package/dist/src/bitgo/lightning/lightningUtils.d.ts.map +0 -1
- package/dist/src/bitgo/lightning/lightningUtils.js +0 -133
- package/dist/src/bitgo/lightning/lnurlCodec.d.ts +0 -3
- package/dist/src/bitgo/lightning/lnurlCodec.d.ts.map +0 -1
- package/dist/src/bitgo/lightning/lnurlCodec.js +0 -28
- package/dist/src/bitgo/utils/blsUtils.d.ts +0 -52
- package/dist/src/bitgo/utils/blsUtils.d.ts.map +0 -1
- package/dist/src/bitgo/utils/blsUtils.js +0 -237
- package/dist/src/bitgo/utils/iBlsUtils.d.ts +0 -14
- package/dist/src/bitgo/utils/iBlsUtils.d.ts.map +0 -1
- package/dist/src/bitgo/utils/iBlsUtils.js +0 -3
- package/dist/src/coins/fiateur.d.ts +0 -31
- package/dist/src/coins/fiateur.d.ts.map +0 -1
- package/dist/src/coins/fiateur.js +0 -57
- package/dist/src/coins/fiatgbp.d.ts +0 -31
- package/dist/src/coins/fiatgbp.d.ts.map +0 -1
- package/dist/src/coins/fiatgbp.js +0 -57
- package/dist/src/coins/fiatusd.d.ts +0 -31
- package/dist/src/coins/fiatusd.d.ts.map +0 -1
- package/dist/src/coins/fiatusd.js +0 -57
- package/dist/src/coins/tfiateur.d.ts +0 -11
- package/dist/src/coins/tfiateur.d.ts.map +0 -1
- package/dist/src/coins/tfiateur.js +0 -17
- package/dist/src/coins/tfiatgbp.d.ts +0 -11
- package/dist/src/coins/tfiatgbp.d.ts.map +0 -1
- package/dist/src/coins/tfiatgbp.js +0 -17
- package/dist/src/coins/tfiatusd.d.ts +0 -11
- package/dist/src/coins/tfiatusd.d.ts.map +0 -1
- package/dist/src/coins/tfiatusd.js +0 -17
- package/dist/src/openssl/index.d.ts +0 -5
- package/dist/src/openssl/index.d.ts.map +0 -1
- package/dist/src/openssl/index.js +0 -9
- package/dist/test/unit/openssl.d.ts +0 -2
- package/dist/test/unit/openssl.d.ts.map +0 -1
- package/dist/test/unit/openssl.js +0 -39
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"walletsGoAccount.d.ts","sourceRoot":"","sources":["../../../../../test/unit/bitgo/wallet/walletsGoAccount.ts"],"names":[],"mappings":"AAEA,OAAO,QAAQ,CAAC"}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
const assert = __importStar(require("assert"));
|
|
37
|
+
const sinon = __importStar(require("sinon"));
|
|
38
|
+
require("should");
|
|
39
|
+
const wallets_1 = require("../../../../src/bitgo/wallet/wallets");
|
|
40
|
+
describe('Wallets - GoAccount (OFC trading) wallet creation', function () {
|
|
41
|
+
let wallets;
|
|
42
|
+
let mockBitGo;
|
|
43
|
+
let mockBaseCoin;
|
|
44
|
+
let mockKeychains;
|
|
45
|
+
let postChain;
|
|
46
|
+
const userPrv = 'xprvSomeUserPrivateKey';
|
|
47
|
+
const userPub = 'xpub661MyMwAqRbcFtXgS5sYJABqqG9YLmC4Q1Rdap9gSE8NqtwybGhePY2gZ29ESFjqJoCu1Rupje8YtGqsefD265TMg7usUDFdp6W1EGMcet8';
|
|
48
|
+
beforeEach(function () {
|
|
49
|
+
mockKeychains = {
|
|
50
|
+
create: sinon.stub().returns({ pub: userPub, prv: userPrv }),
|
|
51
|
+
add: sinon.stub().callsFake(async (params) => ({ id: 'user-key-id', ...params })),
|
|
52
|
+
};
|
|
53
|
+
const mockWalletData = { id: 'wallet-id', keys: ['user-key-id'] };
|
|
54
|
+
postChain = {
|
|
55
|
+
send: sinon.stub(),
|
|
56
|
+
};
|
|
57
|
+
postChain.send.returns({
|
|
58
|
+
result: sinon.stub().resolves(mockWalletData),
|
|
59
|
+
});
|
|
60
|
+
mockBitGo = {
|
|
61
|
+
post: sinon.stub().returns(postChain),
|
|
62
|
+
encrypt: sinon
|
|
63
|
+
.stub()
|
|
64
|
+
.callsFake(async ({ password, input }) => `encrypted:${password}:${input}`),
|
|
65
|
+
setRequestTracer: sinon.stub(),
|
|
66
|
+
};
|
|
67
|
+
mockBaseCoin = {
|
|
68
|
+
getFamily: sinon.stub().returns('ofc'),
|
|
69
|
+
getChain: sinon.stub().returns('ofc'),
|
|
70
|
+
getDefaultMultisigType: sinon.stub().returns('onchain'),
|
|
71
|
+
supportsTss: sinon.stub().returns(false),
|
|
72
|
+
keychains: sinon.stub().returns(mockKeychains),
|
|
73
|
+
url: sinon.stub().returns('/test/url'),
|
|
74
|
+
};
|
|
75
|
+
wallets = new wallets_1.Wallets(mockBitGo, mockBaseCoin);
|
|
76
|
+
});
|
|
77
|
+
afterEach(function () {
|
|
78
|
+
sinon.restore();
|
|
79
|
+
});
|
|
80
|
+
it('should forward userKeySigningRequired: false in coinSpecific when provided', async function () {
|
|
81
|
+
const result = await wallets.generateWallet({
|
|
82
|
+
label: 'Test OFC Wallet',
|
|
83
|
+
passphrase: 'test-passphrase',
|
|
84
|
+
enterprise: 'enterprise-123',
|
|
85
|
+
passcodeEncryptionCode: 'pce-code',
|
|
86
|
+
type: 'trading',
|
|
87
|
+
userKeySigningRequired: false,
|
|
88
|
+
});
|
|
89
|
+
assert.ok(postChain.send.calledOnce, 'POST /wallet/add should be called once');
|
|
90
|
+
const sentParams = postChain.send.firstCall.args[0];
|
|
91
|
+
sentParams.should.have.property('coinSpecific');
|
|
92
|
+
sentParams.coinSpecific.should.have.property('userKeySigningRequired', false);
|
|
93
|
+
const keychainParams = mockKeychains.add.firstCall.args[0];
|
|
94
|
+
keychainParams.should.have.property('encryptedPrv', `encrypted:test-passphrase:${userPrv}`);
|
|
95
|
+
keychainParams.should.have.property('originalPasscodeEncryptionCode', 'pce-code');
|
|
96
|
+
result.should.have.property('encryptedWalletPassphrase', 'encrypted:pce-code:test-passphrase');
|
|
97
|
+
});
|
|
98
|
+
it('should forward userKeySigningRequired: true in coinSpecific when explicitly set', async function () {
|
|
99
|
+
await wallets.generateWallet({
|
|
100
|
+
label: 'Test OFC Wallet',
|
|
101
|
+
passphrase: 'test-passphrase',
|
|
102
|
+
enterprise: 'enterprise-123',
|
|
103
|
+
passcodeEncryptionCode: 'pce-code',
|
|
104
|
+
type: 'trading',
|
|
105
|
+
userKeySigningRequired: true,
|
|
106
|
+
});
|
|
107
|
+
const sentParams = postChain.send.firstCall.args[0];
|
|
108
|
+
sentParams.coinSpecific.should.have.property('userKeySigningRequired', true);
|
|
109
|
+
});
|
|
110
|
+
it('should omit coinSpecific when userKeySigningRequired is not provided', async function () {
|
|
111
|
+
await wallets.generateWallet({
|
|
112
|
+
label: 'Test OFC Wallet',
|
|
113
|
+
passphrase: 'test-passphrase',
|
|
114
|
+
enterprise: 'enterprise-123',
|
|
115
|
+
passcodeEncryptionCode: 'pce-code',
|
|
116
|
+
type: 'trading',
|
|
117
|
+
});
|
|
118
|
+
const sentParams = postChain.send.firstCall.args[0];
|
|
119
|
+
sentParams.should.not.have.property('coinSpecific');
|
|
120
|
+
});
|
|
121
|
+
it('should generate a public-only user key when user key signing is disabled and password fields are omitted', async function () {
|
|
122
|
+
const result = await wallets.generateWallet({
|
|
123
|
+
label: 'Passwordless OFC Wallet',
|
|
124
|
+
enterprise: 'enterprise-123',
|
|
125
|
+
type: 'trading',
|
|
126
|
+
userKeySigningRequired: false,
|
|
127
|
+
});
|
|
128
|
+
assert.ok(mockKeychains.add.calledOnce, 'user key should be uploaded once');
|
|
129
|
+
const keychainParams = mockKeychains.add.firstCall.args[0];
|
|
130
|
+
keychainParams.should.have.property('pub', userPub);
|
|
131
|
+
keychainParams.should.not.have.property('encryptedPrv');
|
|
132
|
+
keychainParams.should.not.have.property('originalPasscodeEncryptionCode');
|
|
133
|
+
assert.ok(postChain.send.calledOnce, 'POST /wallet/add should be called once');
|
|
134
|
+
postChain.send.firstCall.args[0].coinSpecific.should.have.property('userKeySigningRequired', false);
|
|
135
|
+
result.should.not.have.property('encryptedWalletPassphrase');
|
|
136
|
+
result.should.not.have.property('warning');
|
|
137
|
+
});
|
|
138
|
+
it('should reject passwordless generation when only one password field is supplied', async function () {
|
|
139
|
+
await assert.rejects(wallets.generateWallet({
|
|
140
|
+
label: 'Passwordless OFC Wallet',
|
|
141
|
+
enterprise: 'enterprise-123',
|
|
142
|
+
type: 'trading',
|
|
143
|
+
userKeySigningRequired: false,
|
|
144
|
+
passphrase: 'partial-password-input',
|
|
145
|
+
}), /error\(s\) parsing generate go account request params/);
|
|
146
|
+
assert.strictEqual(mockKeychains.add.called, false);
|
|
147
|
+
assert.strictEqual(postChain.send.called, false);
|
|
148
|
+
});
|
|
149
|
+
});
|
|
150
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FsbGV0c0dvQWNjb3VudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Rlc3QvdW5pdC9iaXRnby93YWxsZXQvd2FsbGV0c0dvQWNjb3VudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtDQUFpQztBQUNqQyw2Q0FBK0I7QUFDL0Isa0JBQWdCO0FBQ2hCLGtFQUErRDtBQUUvRCxRQUFRLENBQUMsbURBQW1ELEVBQUU7SUFDNUQsSUFBSSxPQUFnQixDQUFDO0lBQ3JCLElBQUksU0FBYyxDQUFDO0lBQ25CLElBQUksWUFBaUIsQ0FBQztJQUN0QixJQUFJLGFBQWtCLENBQUM7SUFDdkIsSUFBSSxTQUFjLENBQUM7SUFFbkIsTUFBTSxPQUFPLEdBQUcsd0JBQXdCLENBQUM7SUFDekMsTUFBTSxPQUFPLEdBQ1gsaUhBQWlILENBQUM7SUFFcEgsVUFBVSxDQUFDO1FBQ1QsYUFBYSxHQUFHO1lBQ2QsTUFBTSxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsQ0FBQztZQUM1RCxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLGFBQWEsRUFBRSxHQUFHLE1BQU0sRUFBRSxDQUFDLENBQUM7U0FDbEYsQ0FBQztRQUVGLE1BQU0sY0FBYyxHQUFHLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDO1FBRWxFLFNBQVMsR0FBRztZQUNWLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFO1NBQ25CLENBQUM7UUFDRixTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztZQUNy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QUN4RCxDQUFDO1FBRUYsTUFBTSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNwRCxNQUFNLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ25ELENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCAqIGFzIHNpbm9uIGZyb20gJ3Npbm9uJztcbmltcG9ydCAnc2hvdWxkJztcbmltcG9ydCB7IFdhbGxldHMgfSBmcm9tICcuLi8uLi8uLi8uLi9zcmMvYml0Z28vd2FsbGV0L3dhbGxldHMnO1xuXG5kZXNjcmliZSgnV2FsbGV0cyAtIEdvQWNjb3VudCAoT0ZDIHRyYWRpbmcpIHdhbGxldCBjcmVhdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgbGV0IHdhbGxldHM6IFdhbGxldHM7XG4gIGxldCBtb2NrQml0R286IGFueTtcbiAgbGV0IG1vY2tCYXNlQ29pbjogYW55O1xuICBsZXQgbW9ja0tleWNoYWluczogYW55O1xuICBsZXQgcG9zdENoYWluOiBhbnk7XG5cbiAgY29uc3QgdXNlclBydiA9ICd4cHJ2U29tZVVzZXJQcml2YXRlS2V5JztcbiAgY29uc3QgdXNlclB1YiA9XG4gICAgJ3hwdWI2NjFNeU13QXFSYmNGdFhnUzVzWUpBQnFxRzlZTG1DNFExUmRhcDlnU0U4TnF0d3liR2hlUFkyZ1oyOUVTRmpxSm9DdTFSdXBqZThZdEdxc2VmRDI2NVRNZzd1c1VERmRwNlcxRUdNY2V0OCc7XG5cbiAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgbW9ja0tleWNoYWlucyA9IHtcbiAgICAgIGNyZWF0ZTogc2lub24uc3R1YigpLnJldHVybnMoeyBwdWI6IHVzZXJQdWIsIHBydjogdXNlclBydiB9KSxcbiAgICAgIGFkZDogc2lub24uc3R1YigpLmNhbGxzRmFrZShhc3luYyAocGFyYW1zKSA9PiAoeyBpZDogJ3VzZXIta2V5LWlkJywgLi4ucGFyYW1zIH0pKSxcbiAgICB9O1xuXG4gICAgY29uc3QgbW9ja1dhbGxldERhdGEgPSB7IGlkOiAnd2FsbGV0LWlkJywga2V5czogWyd1c2VyLWtleS1pZCddIH07XG5cbiAgICBwb3N0Q2hhaW4gPSB7XG4gICAgICBzZW5kOiBzaW5vbi5zdHViKCksXG4gICAgfTtcbiAgICBwb3N0Q2hhaW4uc2VuZC5yZXR1cm5zKHtcbiAgICAgIHJlc3VsdDogc2lub24uc3R1YigpLnJlc29sdmVzKG1vY2tXYWxsZXREYXRhKSxcbiAgICB9KTtcblxuICAgIG1vY2tCaXRHbyA9IHtcbiAgICAgIHBvc3Q6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKHBvc3RDaGFpbiksXG4gICAgICBlbmNyeXB0OiBzaW5vblxuICAgICAgICAuc3R1YigpXG4gICAgICAgIC5jYWxsc0Zha2UoXG4gICAgICAgICAgYXN5bmMgKHsgcGFzc3dvcmQsIGlucHV0IH06IHsgcGFzc3dvcmQ6IHN0cmluZzsgaW5wdXQ6IHN0cmluZyB9KSA9PiBgZW5jcnlwdGVkOiR7cGFzc3dvcmR9OiR7aW5wdXR9YFxuICAgICAgICApLFxuICAgICAgc2V0UmVxdWVzdFRyYWNlcjogc2lub24uc3R1YigpLFxuICAgIH07XG5cbiAgICBtb2NrQmFzZUNvaW4gPSB7XG4gICAgICBnZXRGYW1pbHk6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKCdvZmMnKSxcbiAgICAgIGdldENoYWluOiBzaW5vbi5zdHViKCkucmV0dXJucygnb2ZjJyksXG4gICAgICBnZXREZWZhdWx0TXVsdGlzaWdUeXBlOiBzaW5vbi5zdHViKCkucmV0dXJucygnb25jaGFpbicpLFxuICAgICAgc3VwcG9ydHNUc3M6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKGZhbHNlKSxcbiAgICAgIGtleWNoYWluczogc2lub24uc3R1YigpLnJldHVybnMobW9ja0tleWNoYWlucyksXG4gICAgICB1cmw6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKCcvdGVzdC91cmwnKSxcbiAgICB9O1xuXG4gICAgd2FsbGV0cyA9IG5ldyBXYWxsZXRzKG1vY2tCaXRHbywgbW9ja0Jhc2VDb2luKTtcbiAgfSk7XG5cbiAgYWZ0ZXJFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICBzaW5vbi5yZXN0b3JlKCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgZm9yd2FyZCB1c2VyS2V5U2lnbmluZ1JlcXVpcmVkOiBmYWxzZSBpbiBjb2luU3BlY2lmaWMgd2hlbiBwcm92aWRlZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB3YWxsZXRzLmdlbmVyYXRlV2FsbGV0KHtcbiAgICAgIGxhYmVsOiAnVGVzdCBPRkMgV2FsbGV0JyxcbiAgICAgIHBhc3NwaHJhc2U6ICd0ZXN0LXBhc3NwaHJhc2UnLFxuICAgICAgZW50ZXJwcmlzZTogJ2VudGVycHJpc2UtMTIzJyxcbiAgICAgIHBhc3Njb2RlRW5jcnlwdGlvbkNvZGU6ICdwY2UtY29kZScsXG4gICAgICB0eXBlOiAndHJhZGluZycsXG4gICAgICB1c2VyS2V5U2lnbmluZ1JlcXVpcmVkOiBmYWxzZSxcbiAgICB9KTtcblxuICAgIGFzc2VydC5vayhwb3N0Q2hhaW4uc2VuZC5jYWxsZWRPbmNlLCAnUE9TVCAvd2FsbGV0L2FkZCBzaG91bGQgYmUgY2FsbGVkIG9uY2UnKTtcbiAgICBjb25zdCBzZW50UGFyYW1zID0gcG9zdENoYWluLnNlbmQuZmlyc3RDYWxsLmFyZ3NbMF07XG4gICAgc2VudFBhcmFtcy5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnY29pblNwZWNpZmljJyk7XG4gICAgc2VudFBhcmFtcy5jb2luU3BlY2lmaWMuc2hvdWxkLmhhdmUucHJvcGVydHkoJ3VzZXJLZXlTaWduaW5nUmVxdWlyZWQnLCBmYWxzZSk7XG5cbiAgICBjb25zdCBrZXljaGFpblBhcmFtcyA9IG1vY2tLZXljaGFpbnMuYWRkLmZpcnN0Q2FsbC5hcmdzWzBdO1xuICAgIGtleWNoYWluUGFyYW1zLnNob3VsZC5oYXZlLnByb3BlcnR5KCdlbmNyeXB0ZWRQcnYnLCBgZW5jcnlwdGVkOnRlc3QtcGFzc3BocmFzZToke3VzZXJQcnZ9YCk7XG4gICAga2V5Y2hhaW5QYXJhbXMuc2hvdWxkLmhhdmUucHJvcGVydHkoJ29yaWdpbmFsUGFzc2NvZGVFbmNyeXB0aW9uQ29kZScsICdwY2UtY29kZScpO1xuICAgIHJlc3VsdC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnZW5jcnlwdGVkV2FsbGV0UGFzc3BocmFzZScsICdlbmNyeXB0ZWQ6cGNlLWNvZGU6dGVzdC1wYXNzcGhyYXNlJyk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgZm9yd2FyZCB1c2VyS2V5U2lnbmluZ1JlcXVpcmVkOiB0cnVlIGluIGNvaW5TcGVjaWZpYyB3aGVuIGV4cGxpY2l0bHkgc2V0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGF3YWl0IHdhbGxldHMuZ2VuZXJhdGVXYWxsZXQoe1xuICAgICAgbGFiZWw6ICdUZXN0IE9GQyBXYWxsZXQnLFxuICAgICAgcGFzc3BocmFzZTogJ3Rlc3QtcGFzc3BocmFzZScsXG4gICAgICBlbnRlcnByaXNlOiAnZW50ZXJwcmlzZS0xMjMnLFxuICAgICAgcGFzc2NvZGVFbmNyeXB0aW9uQ29kZTogJ3BjZS1jb2RlJyxcbiAgICAgIHR5cGU6ICd0cmFkaW5nJyxcbiAgICAgIHVzZXJLZXlTaWduaW5nUmVxdWlyZWQ6IHRydWUsXG4gICAgfSk7XG5cbiAgICBjb25zdCBzZW50UGFyYW1zID0gcG9zdENoYWluLnNlbmQuZmlyc3RDYWxsLmFyZ3NbMF07XG4gICAgc2VudFBhcmFtcy5jb2luU3BlY2lmaWMuc2hvdWxkLmhhdmUucHJvcGVydHkoJ3VzZXJLZXlTaWduaW5nUmVxdWlyZWQnLCB0cnVlKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBvbWl0IGNvaW5TcGVjaWZpYyB3aGVuIHVzZXJLZXlTaWduaW5nUmVxdWlyZWQgaXMgbm90IHByb3ZpZGVkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGF3YWl0IHdhbGxldHMuZ2VuZXJhdGVXYWxsZXQoe1xuICAgICAgbGFiZWw6ICdUZXN0IE9GQyBXYWxsZXQnLFxuICAgICAgcGFzc3BocmFzZTogJ3Rlc3QtcGFzc3BocmFzZScsXG4gICAgICBlbnRlcnByaXNlOiAnZW50ZXJwcmlzZS0xMjMnLFxuICAgICAgcGFzc2NvZGVFbmNyeXB0aW9uQ29kZTogJ3BjZS1jb2RlJyxcbiAgICAgIHR5cGU6ICd0cmFkaW5nJyxcbiAgICB9KTtcblxuICAgIGNvbnN0IHNlbnRQYXJhbXMgPSBwb3N0Q2hhaW4uc2VuZC5maXJzdENhbGwuYXJnc1swXTtcbiAgICBzZW50UGFyYW1zLnNob3VsZC5ub3QuaGF2ZS5wcm9wZXJ0eSgnY29pblNwZWNpZmljJyk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgZ2VuZXJhdGUgYSBwdWJsaWMtb25seSB1c2VyIGtleSB3aGVuIHVzZXIga2V5IHNpZ25pbmcgaXMgZGlzYWJsZWQgYW5kIHBhc3N3b3JkIGZpZWxkcyBhcmUgb21pdHRlZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB3YWxsZXRzLmdlbmVyYXRlV2FsbGV0KHtcbiAgICAgIGxhYmVsOiAnUGFzc3dvcmRsZXNzIE9GQyBXYWxsZXQnLFxuICAgICAgZW50ZXJwcmlzZTogJ2VudGVycHJpc2UtMTIzJyxcbiAgICAgIHR5cGU6ICd0cmFkaW5nJyxcbiAgICAgIHVzZXJLZXlTaWduaW5nUmVxdWlyZWQ6IGZhbHNlLFxuICAgIH0pO1xuXG4gICAgYXNzZXJ0Lm9rKG1vY2tLZXljaGFpbnMuYWRkLmNhbGxlZE9uY2UsICd1c2VyIGtleSBzaG91bGQgYmUgdXBsb2FkZWQgb25jZScpO1xuICAgIGNvbnN0IGtleWNoYWluUGFyYW1zID0gbW9ja0tleWNoYWlucy5hZGQuZmlyc3RDYWxsLmFyZ3NbMF07XG4gICAga2V5Y2hhaW5QYXJhbXMuc2hvdWxkLmhhdmUucHJvcGVydHkoJ3B1YicsIHVzZXJQdWIpO1xuICAgIGtleWNoYWluUGFyYW1zLnNob3VsZC5ub3QuaGF2ZS5wcm9wZXJ0eSgnZW5jcnlwdGVkUHJ2Jyk7XG4gICAga2V5Y2hhaW5QYXJhbXMuc2hvdWxkLm5vdC5oYXZlLnByb3BlcnR5KCdvcmlnaW5hbFBhc3Njb2RlRW5jcnlwdGlvbkNvZGUnKTtcblxuICAgIGFzc2VydC5vayhwb3N0Q2hhaW4uc2VuZC5jYWxsZWRPbmNlLCAnUE9TVCAvd2FsbGV0L2FkZCBzaG91bGQgYmUgY2FsbGVkIG9uY2UnKTtcbiAgICBwb3N0Q2hhaW4uc2VuZC5maXJzdENhbGwuYXJnc1swXS5jb2luU3BlY2lmaWMuc2hvdWxkLmhhdmUucHJvcGVydHkoJ3VzZXJLZXlTaWduaW5nUmVxdWlyZWQnLCBmYWxzZSk7XG4gICAgcmVzdWx0LnNob3VsZC5ub3QuaGF2ZS5wcm9wZXJ0eSgnZW5jcnlwdGVkV2FsbGV0UGFzc3BocmFzZScpO1xuICAgIHJlc3VsdC5zaG91bGQubm90LmhhdmUucHJvcGVydHkoJ3dhcm5pbmcnKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCByZWplY3QgcGFzc3dvcmRsZXNzIGdlbmVyYXRpb24gd2hlbiBvbmx5IG9uZSBwYXNzd29yZCBmaWVsZCBpcyBzdXBwbGllZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhcbiAgICAgIHdhbGxldHMuZ2VuZXJhdGVXYWxsZXQoe1xuICAgICAgICBsYWJlbDogJ1Bhc3N3b3JkbGVzcyBPRkMgV2FsbGV0JyxcbiAgICAgICAgZW50ZXJwcmlzZTogJ2VudGVycHJpc2UtMTIzJyxcbiAgICAgICAgdHlwZTogJ3RyYWRpbmcnLFxuICAgICAgICB1c2VyS2V5U2lnbmluZ1JlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgcGFzc3BocmFzZTogJ3BhcnRpYWwtcGFzc3dvcmQtaW5wdXQnLFxuICAgICAgfSksXG4gICAgICAvZXJyb3JcXChzXFwpIHBhcnNpbmcgZ2VuZXJhdGUgZ28gYWNjb3VudCByZXF1ZXN0IHBhcmFtcy9cbiAgICApO1xuXG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKG1vY2tLZXljaGFpbnMuYWRkLmNhbGxlZCwgZmFsc2UpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChwb3N0Q2hhaW4uc2VuZC5jYWxsZWQsIGZhbHNlKTtcbiAgfSk7XG59KTtcbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"walletsWebauthn.d.ts","sourceRoot":"","sources":["../../../../../test/unit/bitgo/wallet/walletsWebauthn.ts"],"names":[],"mappings":"AAEA,OAAO,QAAQ,CAAC"}
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
const assert = __importStar(require("assert"));
|
|
37
|
+
const sinon = __importStar(require("sinon"));
|
|
38
|
+
require("should");
|
|
39
|
+
const wallets_1 = require("../../../../src/bitgo/wallet/wallets");
|
|
40
|
+
describe('Wallets - WebAuthn wallet creation', function () {
|
|
41
|
+
let wallets;
|
|
42
|
+
let mockBitGo;
|
|
43
|
+
let mockBaseCoin;
|
|
44
|
+
let mockKeychains;
|
|
45
|
+
const userPrv = 'xprvSomeUserPrivateKey';
|
|
46
|
+
const userPub = 'xpub661MyMwAqRbcFtXgS5sYJABqqG9YLmC4Q1Rdap9gSE8NqtwybGhePY2gZ29ESFjqJoCu1Rupje8YtGqsefD265TMg7usUDFdp6W1EGMcet8';
|
|
47
|
+
const backupPub = 'xpub661MyMwAqRbcGczjuMoRm6dXaLDEhW1u34gKenbeYqAix21mdUKJyuyu5F1rzYGVxyL6tmgBUAEPrEz92mBXjByMRiJdba9wpnN37RLLAXa';
|
|
48
|
+
const bitgoPub = 'xpub661MyMwAqRbcEYS8w7XLSVeEsBXy79zSzH1J8vCdxAZningWLdN3zgtU6LBpB85b3D2yc8sfvZU521AAwdZafEz7mnzBBsz4wKY5fTtTQBm';
|
|
49
|
+
beforeEach(function () {
|
|
50
|
+
mockKeychains = {
|
|
51
|
+
create: sinon.stub().returns({ pub: userPub, prv: userPrv }),
|
|
52
|
+
add: sinon.stub().resolves({ id: 'user-key-id', pub: userPub, encryptedPrv: 'encrypted-prv' }),
|
|
53
|
+
createBackup: sinon.stub().resolves({ id: 'backup-key-id', pub: backupPub }),
|
|
54
|
+
createBitGo: sinon.stub().resolves({ id: 'bitgo-key-id', pub: bitgoPub }),
|
|
55
|
+
};
|
|
56
|
+
const mockWalletData = { id: 'wallet-id', keys: ['user-key-id', 'backup-key-id', 'bitgo-key-id'] };
|
|
57
|
+
mockBitGo = {
|
|
58
|
+
post: sinon.stub().returns({
|
|
59
|
+
send: sinon.stub().returns({
|
|
60
|
+
result: sinon.stub().resolves(mockWalletData),
|
|
61
|
+
}),
|
|
62
|
+
}),
|
|
63
|
+
encrypt: sinon
|
|
64
|
+
.stub()
|
|
65
|
+
.callsFake(async ({ password, input }) => `encrypted:${password}:${input}`),
|
|
66
|
+
setRequestTracer: sinon.stub(),
|
|
67
|
+
};
|
|
68
|
+
mockBaseCoin = {
|
|
69
|
+
isEVM: sinon.stub().returns(false),
|
|
70
|
+
supportsTss: sinon.stub().returns(false),
|
|
71
|
+
getFamily: sinon.stub().returns('btc'),
|
|
72
|
+
getDefaultMultisigType: sinon.stub().returns('onchain'),
|
|
73
|
+
keychains: sinon.stub().returns(mockKeychains),
|
|
74
|
+
url: sinon.stub().returns('/test/url'),
|
|
75
|
+
isValidMofNSetup: sinon.stub().returns(true),
|
|
76
|
+
getConfig: sinon.stub().returns({ features: [] }),
|
|
77
|
+
supplementGenerateWallet: sinon.stub().callsFake((params) => Promise.resolve(params)),
|
|
78
|
+
signMessage: sinon.stub().resolves(Buffer.from('aabbcc', 'hex')),
|
|
79
|
+
};
|
|
80
|
+
wallets = new wallets_1.Wallets(mockBitGo, mockBaseCoin);
|
|
81
|
+
});
|
|
82
|
+
afterEach(function () {
|
|
83
|
+
sinon.restore();
|
|
84
|
+
});
|
|
85
|
+
describe('generateWallet with webauthnInfo', function () {
|
|
86
|
+
it('should add webauthnInfo (with enterpriseId) to keychain params when webauthnInfo is provided', async function () {
|
|
87
|
+
const webauthnInfo = {
|
|
88
|
+
otpDeviceId: 'device-123',
|
|
89
|
+
prfSalt: 'salt-abc',
|
|
90
|
+
passphrase: 'prf-derived-passphrase',
|
|
91
|
+
};
|
|
92
|
+
await wallets.generateWallet({
|
|
93
|
+
label: 'Test Wallet',
|
|
94
|
+
passphrase: 'wallet-passphrase',
|
|
95
|
+
enterprise: 'enterprise-123',
|
|
96
|
+
webauthnInfo,
|
|
97
|
+
});
|
|
98
|
+
assert.strictEqual(mockKeychains.add.calledOnce, true);
|
|
99
|
+
const addParams = mockKeychains.add.firstCall.args[0];
|
|
100
|
+
addParams.should.not.have.property('webauthnDevices');
|
|
101
|
+
addParams.should.have.property('webauthnInfo');
|
|
102
|
+
addParams.webauthnInfo.should.have.property('otpDeviceId', webauthnInfo.otpDeviceId);
|
|
103
|
+
addParams.webauthnInfo.should.have.property('prfSalt', webauthnInfo.prfSalt);
|
|
104
|
+
addParams.webauthnInfo.should.have.property('enterpriseId', 'enterprise-123');
|
|
105
|
+
addParams.webauthnInfo.should.have.property('encryptedPrv');
|
|
106
|
+
});
|
|
107
|
+
it('should encrypt user private key with the webauthn passphrase', async function () {
|
|
108
|
+
const webauthnPassphrase = 'prf-derived-passphrase';
|
|
109
|
+
await wallets.generateWallet({
|
|
110
|
+
label: 'Test Wallet',
|
|
111
|
+
passphrase: 'wallet-passphrase',
|
|
112
|
+
webauthnInfo: {
|
|
113
|
+
otpDeviceId: 'device-123',
|
|
114
|
+
prfSalt: 'salt-abc',
|
|
115
|
+
passphrase: webauthnPassphrase,
|
|
116
|
+
},
|
|
117
|
+
});
|
|
118
|
+
const addParams = mockKeychains.add.firstCall.args[0];
|
|
119
|
+
const expectedEncryptedPrv = `encrypted:${webauthnPassphrase}:${userPrv}`;
|
|
120
|
+
addParams.webauthnInfo.should.have.property('encryptedPrv', expectedEncryptedPrv);
|
|
121
|
+
});
|
|
122
|
+
it('should also encrypt user private key with wallet passphrase when webauthnInfo is provided', async function () {
|
|
123
|
+
const walletPassphrase = 'wallet-passphrase';
|
|
124
|
+
await wallets.generateWallet({
|
|
125
|
+
label: 'Test Wallet',
|
|
126
|
+
passphrase: walletPassphrase,
|
|
127
|
+
webauthnInfo: {
|
|
128
|
+
otpDeviceId: 'device-123',
|
|
129
|
+
prfSalt: 'salt-abc',
|
|
130
|
+
passphrase: 'prf-derived-passphrase',
|
|
131
|
+
},
|
|
132
|
+
});
|
|
133
|
+
const addParams = mockKeychains.add.firstCall.args[0];
|
|
134
|
+
const expectedEncryptedPrv = `encrypted:${walletPassphrase}:${userPrv}`;
|
|
135
|
+
addParams.should.have.property('encryptedPrv', expectedEncryptedPrv);
|
|
136
|
+
});
|
|
137
|
+
it('should use separate encrypt calls for wallet passphrase and webauthn passphrase', async function () {
|
|
138
|
+
const walletPassphrase = 'wallet-passphrase';
|
|
139
|
+
const webauthnPassphrase = 'prf-derived-passphrase';
|
|
140
|
+
await wallets.generateWallet({
|
|
141
|
+
label: 'Test Wallet',
|
|
142
|
+
passphrase: walletPassphrase,
|
|
143
|
+
webauthnInfo: {
|
|
144
|
+
otpDeviceId: 'device-123',
|
|
145
|
+
prfSalt: 'salt-abc',
|
|
146
|
+
passphrase: webauthnPassphrase,
|
|
147
|
+
},
|
|
148
|
+
});
|
|
149
|
+
const encryptCalls = mockBitGo.encrypt.getCalls();
|
|
150
|
+
const passwordsUsed = encryptCalls.map((call) => call.args[0].password);
|
|
151
|
+
passwordsUsed.should.containEql(walletPassphrase);
|
|
152
|
+
passwordsUsed.should.containEql(webauthnPassphrase);
|
|
153
|
+
});
|
|
154
|
+
it('should not add webauthnInfo when webauthnInfo is not provided', async function () {
|
|
155
|
+
await wallets.generateWallet({
|
|
156
|
+
label: 'Test Wallet',
|
|
157
|
+
passphrase: 'wallet-passphrase',
|
|
158
|
+
});
|
|
159
|
+
assert.strictEqual(mockKeychains.add.calledOnce, true);
|
|
160
|
+
const addParams = mockKeychains.add.firstCall.args[0];
|
|
161
|
+
addParams.should.not.have.property('webauthnInfo');
|
|
162
|
+
addParams.should.not.have.property('webauthnDevices');
|
|
163
|
+
});
|
|
164
|
+
it('should not add webauthnInfo when userKey is explicitly provided (no prv available)', async function () {
|
|
165
|
+
// When a user-provided public key is used, there is no private key to encrypt, so webauthnInfo is skipped
|
|
166
|
+
await wallets.generateWallet({
|
|
167
|
+
label: 'Test Wallet',
|
|
168
|
+
userKey: userPub,
|
|
169
|
+
backupXpub: backupPub,
|
|
170
|
+
webauthnInfo: {
|
|
171
|
+
otpDeviceId: 'device-123',
|
|
172
|
+
prfSalt: 'salt-abc',
|
|
173
|
+
passphrase: 'prf-derived-passphrase',
|
|
174
|
+
},
|
|
175
|
+
});
|
|
176
|
+
// add is called for both user keychain (pub-only) and backup keychain - neither should have webauthnInfo
|
|
177
|
+
const allAddCalls = mockKeychains.add.getCalls();
|
|
178
|
+
assert.ok(allAddCalls.length > 0, 'expected keychains().add to be called at least once');
|
|
179
|
+
for (const call of allAddCalls) {
|
|
180
|
+
call.args[0].should.not.have.property('webauthnInfo');
|
|
181
|
+
call.args[0].should.not.have.property('webauthnDevices');
|
|
182
|
+
}
|
|
183
|
+
});
|
|
184
|
+
it('should return wallet with keychains when webauthnInfo is provided', async function () {
|
|
185
|
+
const result = await wallets.generateWallet({
|
|
186
|
+
label: 'Test Wallet',
|
|
187
|
+
passphrase: 'wallet-passphrase',
|
|
188
|
+
webauthnInfo: {
|
|
189
|
+
otpDeviceId: 'device-123',
|
|
190
|
+
prfSalt: 'salt-abc',
|
|
191
|
+
passphrase: 'prf-derived-passphrase',
|
|
192
|
+
},
|
|
193
|
+
});
|
|
194
|
+
result.should.have.property('wallet');
|
|
195
|
+
result.should.have.property('userKeychain');
|
|
196
|
+
result.should.have.property('backupKeychain');
|
|
197
|
+
result.should.have.property('bitgoKeychain');
|
|
198
|
+
});
|
|
199
|
+
});
|
|
200
|
+
});
|
|
201
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FsbGV0c1dlYmF1dGhuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGVzdC91bml0L2JpdGdvL3dhbGxldC93YWxsZXRzV2ViYXV0aG4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwrQ0FBaUM7QUFDakMsNkNBQStCO0FBQy9CLGtCQUFnQjtBQUNoQixrRUFBK0Q7QUFFL0QsUUFBUSxDQUFDLG9DQUFvQyxFQUFFO0lBQzdDLElBQUksT0FBZ0IsQ0FBQztJQUNyQixJQUFJLFNBQWMsQ0FBQztJQUNuQixJQUFJLFlBQWlCLENBQUM7SUFDdEIsSUFBSSxhQUFrQixDQUFDO0lBRXZCLE1BQU0sT0FBTyxHQUFHLHdCQUF3QixDQUFDO0lBQ3pDLE1BQU0sT0FBTyxHQUNYLGlIQUFpSCxDQUFDO0lBQ3BILE1BQU0sU0FBUyxHQUNiLGlIQUFpSCxDQUFDO0lBQ3BILE1BQU0sUUFBUSxHQUNaLGlIQUFpSCxDQUFDO0lBRXBILFVBQVUsQ0FBQztRQUNULGFBQWEsR0FBRztZQUNkLE1BQU0sRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLENBQUM7WUFDNUQsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLEVBQUUsYUFBYSxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxDQUFDO1lBQzlGLFlBQVksRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxFQUFFLGVBQWUsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLENBQUM7WUFDNUUsV0FBVyxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLEVB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LE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUMvQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCAqIGFzIHNpbm9uIGZyb20gJ3Npbm9uJztcbmltcG9ydCAnc2hvdWxkJztcbmltcG9ydCB7IFdhbGxldHMgfSBmcm9tICcuLi8uLi8uLi8uLi9zcmMvYml0Z28vd2FsbGV0L3dhbGxldHMnO1xuXG5kZXNjcmliZSgnV2FsbGV0cyAtIFdlYkF1dGhuIHdhbGxldCBjcmVhdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgbGV0IHdhbGxldHM6IFdhbGxldHM7XG4gIGxldCBtb2NrQml0R286IGFueTtcbiAgbGV0IG1vY2tCYXNlQ29pbjogYW55O1xuICBsZXQgbW9ja0tleWNoYWluczogYW55O1xuXG4gIGNvbnN0IHVzZXJQcnYgPSAneHBydlNvbWVVc2VyUHJpdmF0ZUtleSc7XG4gIGNvbnN0IHVzZXJQdWIgPVxuICAgICd4cHViNjYxTXlNd0FxUmJjRnRYZ1M1c1lKQUJxcUc5WUxtQzRRMVJkYXA5Z1NFOE5xdHd5YkdoZVBZMmdaMjlFU0ZqcUpvQ3UxUnVwamU4WXRHcXNlZkQyNjVUTWc3dXNVREZkcDZXMUVHTWNldDgnO1xuICBjb25zdCBiYWNrdXBQdWIgPVxuICAgICd4cHViNjYxTXlNd0FxUmJjR2N6anVNb1JtNmRYYUxERWhXMXUzNGdLZW5iZVlxQWl4MjFtZFVLSnl1eXU1RjFyellHVnh5TDZ0bWdCVUFFUHJFejkybUJYakJ5TVJpSmRiYTl3cG5OMzdSTExBWGEnO1xuICBjb25zdCBiaXRnb1B1YiA9XG4gICAgJ3hwdWI2NjFNeU13QXFSYmNFWVM4dzdYTFNWZUVzQlh5Nzl6U3pIMUo4dkNkeEFabmluZ1dMZE4zemd0VTZMQnBCODViM0QyeWM4c2Z2WlU1MjFBQXdkWmFmRXo3bW56QkJzejR3S1k1ZlR0VFFCbSc7XG5cbiAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgbW9ja0tleWNoYWlucyA9IHtcbiAgICAgIGNyZWF0ZTogc2lub24uc3R1YigpLnJldHVybnMoeyBwdWI6IHVzZXJQdWIsIHBydjogdXNlclBydiB9KSxcbiAgICAgIGFkZDogc2lub24uc3R1YigpLnJlc29sdmVzKHsgaWQ6ICd1c2VyLWtleS1pZCcsIHB1YjogdXNlclB1YiwgZW5jcnlwdGVkUHJ2OiAnZW5jcnlwdGVkLXBydicgfSksXG4gICAgICBjcmVhdGVCYWNrdXA6IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyh7IGlkOiAnYmFja3VwLWtleS1pZCcsIHB1YjogYmFja3VwUHViIH0pLFxuICAgICAgY3JlYXRlQml0R286IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyh7IGlkOiAnYml0Z28ta2V5LWlkJywgcHViOiBiaXRnb1B1YiB9KSxcbiAgICB9O1xuXG4gICAgY29uc3QgbW9ja1dhbGxldERhdGEgPSB7IGlkOiAnd2FsbGV0LWlkJywga2V5czogWyd1c2VyLWtleS1pZCcsICdiYWNrdXAta2V5LWlkJywgJ2JpdGdvLWtleS1pZCddIH07XG5cbiAgICBtb2NrQml0R28gPSB7XG4gICAgICBwb3N0OiBzaW5vbi5zdHViKCkucmV0dXJucyh7XG4gICAgICAgIHNlbmQ6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKHtcbiAgICAgICAgICByZXN1bHQ6IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyhtb2NrV2FsbGV0RGF0YSksXG4gICAgICAgIH0pLFxuICAgICAgfSksXG4gICAgICBlbmNyeXB0OiBzaW5vblxuICAgICAgICAuc3R1YigpXG4gICAgICAgIC5jYWxsc0Zha2UoXG4gICAgICAgICAgYXN5bmMgKHsgcGFzc3dvcmQsIGlucHV0IH06IHsgcGFzc3dvcmQ6IHN0cmluZzsgaW5wdXQ6IHN0cmluZyB9KSA9PiBgZW5jcnlwdGVkOiR7cGFzc3dvcmR9OiR7aW5wdXR9YFxuICAgICAgICApLFxuICAgICAgc2V0UmVxdWVzdFRyYWNlcjogc2lub24uc3R1YigpLFxuICAgIH07XG5cbiAgICBtb2NrQmFzZUNvaW4gPSB7XG4gICAgICBpc0VWTTogc2lub24uc3R1YigpLnJldHVybnMoZmFsc2UpLFxuICAgICAgc3VwcG9ydHNUc3M6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKGZhbHNlKSxcbiAgICAgIGdldEZhbWlseTogc2lub24uc3R1YigpLnJldHVybnMoJ2J0YycpLFxuICAgICAgZ2V0RGVmYXVsdE11bHRpc2lnVHlwZTogc2lub24uc3R1YigpLnJldHVybnMoJ29uY2hhaW4nKSxcbiAgICAgIGtleWNoYWluczogc2lub24uc3R1YigpLnJldHVybnMobW9ja0tleWNoYWlucyksXG4gICAgICB1cmw6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKCcvdGVzdC91cmwnKSxcbiAgICAgIGlzVmFsaWRNb2ZOU2V0dXA6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKHRydWUpLFxuICAgICAgZ2V0Q29uZmlnOiBzaW5vbi5zdHViKCkucmV0dXJucyh7IGZlYXR1cmVzOiBbXSB9KSxcbiAgICAgIHN1cHBsZW1lbnRHZW5lcmF0ZVdhbGxldDogc2lub24uc3R1YigpLmNhbGxzRmFrZSgocGFyYW1zOiBhbnkpID0+IFByb21pc2UucmVzb2x2ZShwYXJhbXMpKSxcbiAgICAgIHNpZ25NZXNzYWdlOiBzaW5vbi5zdHViKCkucmVzb2x2ZXMoQnVmZmVyLmZyb20oJ2FhYmJjYycsICdoZXgnKSksXG4gICAgfTtcblxuICAgIHdhbGxldHMgPSBuZXcgV2FsbGV0cyhtb2NrQml0R28sIG1vY2tCYXNlQ29pbik7XG4gIH0pO1xuXG4gIGFmdGVyRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgc2lub24ucmVzdG9yZSgpO1xuICB9KTtcblxuICBkZXNjcmliZSgnZ2VuZXJhdGVXYWxsZXQgd2l0aCB3ZWJhdXRobkluZm8nLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBhZGQgd2ViYXV0aG5JbmZvICh3aXRoIGVudGVycHJpc2VJZCkgdG8ga2V5Y2hhaW4gcGFyYW1zIHdoZW4gd2ViYXV0aG5JbmZvIGlzIHByb3ZpZGVkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgd2ViYXV0aG5JbmZvID0ge1xuICAgICAgICBvdHBEZXZpY2VJZDogJ2RldmljZS0xMjMnLFxuICAgICAgICBwcmZTYWx0OiAnc2FsdC1hYmMnLFxuICAgICAgICBwYXNzcGhyYXNlOiAncHJmLWRlcml2ZWQtcGFzc3BocmFzZScsXG4gICAgICB9O1xuXG4gICAgICBhd2FpdCB3YWxsZXRzLmdlbmVyYXRlV2FsbGV0KHtcbiAgICAgICAgbGFiZWw6ICdUZXN0IFdhbGxldCcsXG4gICAgICAgIHBhc3NwaHJhc2U6ICd3YWxsZXQtcGFzc3BocmFzZScsXG4gICAgICAgIGVudGVycHJpc2U6ICdlbnRlcnByaXNlLTEyMycsXG4gICAgICAgIHdlYmF1dGhuSW5mbyxcbiAgICAgIH0pO1xuXG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwobW9ja0tleWNoYWlucy5hZGQuY2FsbGVkT25jZSwgdHJ1ZSk7XG4gICAgICBjb25zdCBhZGRQYXJhbXMgPSBtb2NrS2V5Y2hhaW5zLmFkZC5maXJzdENhbGwuYXJnc1swXTtcbiAgICAgIGFkZFBhcmFtcy5zaG91bGQubm90LmhhdmUucHJvcGVydHkoJ3dlYmF1dGhuRGV2aWNlcycpO1xuICAgICAgYWRkUGFyYW1zLnNob3VsZC5oYXZlLnByb3BlcnR5KCd3ZWJhdXRobkluZm8nKTtcbiAgICAgIGFkZFBhcmFtcy53ZWJhdXRobkluZm8uc2hvdWxkLmhhdmUucHJvcGVydHkoJ290cERldmljZUlkJywgd2ViYXV0aG5JbmZvLm90cERldmljZUlkKTtcbiAgICAgIGFkZFBhcmFtcy53ZWJhdXRobkluZm8uc2hvdWxkLmhhdmUucHJvcGVydHkoJ3ByZlNhbHQnLCB3ZWJhdXRobkluZm8ucHJmU2FsdCk7XG4gICAgICBhZGRQYXJhbXMud2ViYXV0aG5JbmZvLnNob3VsZC5oYXZlLnByb3BlcnR5KCdlbnRlcnByaXNlSWQnLCAnZW50ZXJwcmlzZS0xMjMnKTtcbiAgICAgIGFkZFBhcmFtcy53ZWJhdXRobkluZm8uc2hvdWxkLmhhdmUucHJvcGVydHkoJ2VuY3J5cHRlZFBydicpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBlbmNyeXB0IHVzZXIgcHJpdmF0ZSBrZXkgd2l0aCB0aGUgd2ViYXV0aG4gcGFzc3BocmFzZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHdlYmF1dGhuUGFzc3BocmFzZSA9ICdwcmYtZGVyaXZlZC1wYXNzcGhyYXNlJztcblxuICAgICAgYXdhaXQgd2FsbGV0cy5nZW5lcmF0ZVdhbGxldCh7XG4gICAgICAgIGxhYmVsOiAnVGVzdCBXYWxsZXQnLFxuICAgICAgICBwYXNzcGhyYXNlOiAnd2FsbGV0LXBhc3NwaHJhc2UnLFxuICAgICAgICB3ZWJhdXRobkluZm86IHtcbiAgICAgICAgICBvdHBEZXZpY2VJZDogJ2RldmljZS0xMjMnLFxuICAgICAgICAgIHByZlNhbHQ6ICdzYWx0LWFiYycsXG4gICAgICAgICAgcGFzc3BocmFzZTogd2ViYXV0aG5QYXNzcGhyYXNlLFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGFkZFBhcmFtcyA9IG1vY2tLZXljaGFpbnMuYWRkLmZpcnN0Q2FsbC5hcmdzWzBdO1xuICAgICAgY29uc3QgZXhwZWN0ZWRFbmNyeXB0ZWRQcnYgPSBgZW5jcnlwdGVkOiR7d2ViYXV0aG5QYXNzcGhyYXNlfToke3VzZXJQcnZ9YDtcbiAgICAgIGFkZFBhcmFtcy53ZWJhdXRobkluZm8uc2hvdWxkLmhhdmUucHJvcGVydHkoJ2VuY3J5cHRlZFBydicsIGV4cGVjdGVkRW5jcnlwdGVkUHJ2KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYWxzbyBlbmNyeXB0IHVzZXIgcHJpdmF0ZSBrZXkgd2l0aCB3YWxsZXQgcGFzc3BocmFzZSB3aGVuIHdlYmF1dGhuSW5mbyBpcyBwcm92aWRlZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHdhbGxldFBhc3NwaHJhc2UgPSAnd2FsbGV0LXBhc3NwaHJhc2UnO1xuXG4gICAgICBhd2FpdCB3YWxsZXRzLmdlbmVyYXRlV2FsbGV0KHtcbiAgICAgICAgbGFiZWw6ICdUZXN0IFdhbGxldCcsXG4gICAgICAgIHBhc3NwaHJhc2U6IHdhbGxldFBhc3NwaHJhc2UsXG4gICAgICAgIHdlYmF1dGhuSW5mbzoge1xuICAgICAgICAgIG90cERldmljZUlkOiAnZGV2aWNlLTEyMycsXG4gICAgICAgICAgcHJmU2FsdDogJ3NhbHQtYWJjJyxcbiAgICAgICAgICBwYXNzcGhyYXNlOiAncHJmLWRlcml2ZWQtcGFzc3BocmFzZScsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgYWRkUGFyYW1zID0gbW9ja0tleWNoYWlucy5hZGQuZmlyc3RDYWxsLmFyZ3NbMF07XG4gICAgICBjb25zdCBleHBlY3RlZEVuY3J5cHRlZFBydiA9IGBlbmNyeXB0ZWQ6JHt3YWxsZXRQYXNzcGhyYXNlfToke3VzZXJQcnZ9YDtcbiAgICAgIGFkZFBhcmFtcy5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnZW5jcnlwdGVkUHJ2JywgZXhwZWN0ZWRFbmNyeXB0ZWRQcnYpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB1c2Ugc2VwYXJhdGUgZW5jcnlwdCBjYWxscyBmb3Igd2FsbGV0IHBhc3NwaHJhc2UgYW5kIHdlYmF1dGhuIHBhc3NwaHJhc2UnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB3YWxsZXRQYXNzcGhyYXNlID0gJ3dhbGxldC1wYXNzcGhyYXNlJztcbiAgICAgIGNvbnN0IHdlYmF1dGhuUGFzc3BocmFzZSA9ICdwcmYtZGVyaXZlZC1wYXNzcGhyYXNlJztcblxuICAgICAgYXdhaXQgd2FsbGV0cy5nZW5lcmF0ZVdhbGxldCh7XG4gICAgICAgIGxhYmVsOiAnVGVzdCBXYWxsZXQnLFxuICAgICAgICBwYXNzcGhyYXNlOiB3YWxsZXRQYXNzcGhyYXNlLFxuICAgICAgICB3ZWJhdXRobkluZm86IHtcbiAgICAgICAgICBvdHBEZXZpY2VJZDogJ2RldmljZS0xMjMnLFxuICAgICAgICAgIHByZlNhbHQ6ICdzYWx0LWFiYycsXG4gICAgICAgICAgcGFzc3BocmFzZTogd2ViYXV0aG5QYXNzcGhyYXNlLFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGVuY3J5cHRDYWxscyA9IG1vY2tCaXRHby5lbmNyeXB0LmdldENhbGxzKCk7XG4gICAgICBjb25zdCBwYXNzd29yZHNVc2VkID0gZW5jcnlwdENhbGxzLm1hcCgoY2FsbDogc2lub24uU2lub25TcHlDYWxsKSA9PiBjYWxsLmFyZ3NbMF0ucGFzc3dvcmQpO1xuICAgICAgcGFzc3dvcmRzVXNlZC5zaG91bGQuY29udGFpbkVxbCh3YWxsZXRQYXNzcGhyYXNlKTtcbiAgICAgIHBhc3N3b3Jkc1VzZWQuc2hvdWxkLmNvbnRhaW5FcWwod2ViYXV0aG5QYXNzcGhyYXNlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgbm90IGFkZCB3ZWJhdXRobkluZm8gd2hlbiB3ZWJhdXRobkluZm8gaXMgbm90IHByb3ZpZGVkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQgd2FsbGV0cy5nZW5lcmF0ZVdhbGxldCh7XG4gICAgICAgIGxhYmVsOiAnVGVzdCBXYWxsZXQnLFxuICAgICAgICBwYXNzcGhyYXNlOiAnd2FsbGV0LXBhc3NwaHJhc2UnLFxuICAgICAgfSk7XG5cbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChtb2NrS2V5Y2hhaW5zLmFkZC5jYWxsZWRPbmNlLCB0cnVlKTtcbiAgICAgIGNvbnN0IGFkZFBhcmFtcyA9IG1vY2tLZXljaGFpbnMuYWRkLmZpcnN0Q2FsbC5hcmdzWzBdO1xuICAgICAgYWRkUGFyYW1zLnNob3VsZC5ub3QuaGF2ZS5wcm9wZXJ0eSgnd2ViYXV0aG5JbmZvJyk7XG4gICAgICBhZGRQYXJhbXMuc2hvdWxkLm5vdC5oYXZlLnByb3BlcnR5KCd3ZWJhdXRobkRldmljZXMnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgbm90IGFkZCB3ZWJhdXRobkluZm8gd2hlbiB1c2VyS2V5IGlzIGV4cGxpY2l0bHkgcHJvdmlkZWQgKG5vIHBydiBhdmFpbGFibGUpJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gV2hlbiBhIHVzZXItcHJvdmlkZWQgcHVibGljIGtleSBpcyB1c2VkLCB0aGVyZSBpcyBubyBwcml2YXRlIGtleSB0byBlbmNyeXB0LCBzbyB3ZWJhdXRobkluZm8gaXMgc2tpcHBlZFxuICAgICAgYXdhaXQgd2FsbGV0cy5nZW5lcmF0ZVdhbGxldCh7XG4gICAgICAgIGxhYmVsOiAnVGVzdCBXYWxsZXQnLFxuICAgICAgICB1c2VyS2V5OiB1c2VyUHViLFxuICAgICAgICBiYWNrdXBYcHViOiBiYWNrdXBQdWIsXG4gICAgICAgIHdlYmF1dGhuSW5mbzoge1xuICAgICAgICAgIG90cERldmljZUlkOiAnZGV2aWNlLTEyMycsXG4gICAgICAgICAgcHJmU2FsdDogJ3NhbHQtYWJjJyxcbiAgICAgICAgICBwYXNzcGhyYXNlOiAncHJmLWRlcml2ZWQtcGFzc3BocmFzZScsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgLy8gYWRkIGlzIGNhbGxlZCBmb3IgYm90aCB1c2VyIGtleWNoYWluIChwdWItb25seSkgYW5kIGJhY2t1cCBrZXljaGFpbiAtIG5laXRoZXIgc2hvdWxkIGhhdmUgd2ViYXV0aG5JbmZvXG4gICAgICBjb25zdCBhbGxBZGRDYWxscyA9IG1vY2tLZXljaGFpbnMuYWRkLmdldENhbGxzKCk7XG4gICAgICBhc3NlcnQub2soYWxsQWRkQ2FsbHMubGVuZ3RoID4gMCwgJ2V4cGVjdGVkIGtleWNoYWlucygpLmFkZCB0byBiZSBjYWxsZWQgYXQgbGVhc3Qgb25jZScpO1xuICAgICAgZm9yIChjb25zdCBjYWxsIG9mIGFsbEFkZENhbGxzKSB7XG4gICAgICAgIGNhbGwuYXJnc1swXS5zaG91bGQubm90LmhhdmUucHJvcGVydHkoJ3dlYmF1dGhuSW5mbycpO1xuICAgICAgICBjYWxsLmFyZ3NbMF0uc2hvdWxkLm5vdC5oYXZlLnByb3BlcnR5KCd3ZWJhdXRobkRldmljZXMnKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHdhbGxldCB3aXRoIGtleWNoYWlucyB3aGVuIHdlYmF1dGhuSW5mbyBpcyBwcm92aWRlZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHdhbGxldHMuZ2VuZXJhdGVXYWxsZXQoe1xuICAgICAgICBsYWJlbDogJ1Rlc3QgV2FsbGV0JyxcbiAgICAgICAgcGFzc3BocmFzZTogJ3dhbGxldC1wYXNzcGhyYXNlJyxcbiAgICAgICAgd2ViYXV0aG5JbmZvOiB7XG4gICAgICAgICAgb3RwRGV2aWNlSWQ6ICdkZXZpY2UtMTIzJyxcbiAgICAgICAgICBwcmZTYWx0OiAnc2FsdC1hYmMnLFxuICAgICAgICAgIHBhc3NwaHJhc2U6ICdwcmYtZGVyaXZlZC1wYXNzcGhyYXNlJyxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICByZXN1bHQuc2hvdWxkLmhhdmUucHJvcGVydHkoJ3dhbGxldCcpO1xuICAgICAgcmVzdWx0LnNob3VsZC5oYXZlLnByb3BlcnR5KCd1c2VyS2V5Y2hhaW4nKTtcbiAgICAgIHJlc3VsdC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnYmFja3VwS2V5Y2hhaW4nKTtcbiAgICAgIHJlc3VsdC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnYml0Z29LZXljaGFpbicpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ofc.d.ts","sourceRoot":"","sources":["../../../../test/unit/coins/ofc.ts"],"names":[],"mappings":"AAIA,OAAO,QAAQ,CAAC"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
/**
|
|
7
|
+
* @prettier
|
|
8
|
+
*/
|
|
9
|
+
const sinon_1 = __importDefault(require("sinon"));
|
|
10
|
+
require("should");
|
|
11
|
+
const coins_1 = require("../../../src/coins");
|
|
12
|
+
const src_1 = require("../../../src");
|
|
13
|
+
const TEST_TOKEN_CONFIG = {
|
|
14
|
+
coin: 'ofcusdt',
|
|
15
|
+
decimalPlaces: 6,
|
|
16
|
+
name: 'OFCUSDT',
|
|
17
|
+
type: 'ofcusdt',
|
|
18
|
+
backingCoin: 'usdt',
|
|
19
|
+
isFiat: false,
|
|
20
|
+
};
|
|
21
|
+
describe('Ofc / OfcToken', function () {
|
|
22
|
+
let mockBitGo;
|
|
23
|
+
let signMessageStub;
|
|
24
|
+
const hexSignature = 'deadbeef';
|
|
25
|
+
const signatureBytes = Buffer.from('aabbccdd', 'hex');
|
|
26
|
+
const walletData = {
|
|
27
|
+
id: 'wallet-id',
|
|
28
|
+
keys: ['userKey', 'bitgoKey'],
|
|
29
|
+
type: 'trading',
|
|
30
|
+
multisigType: 'onchain',
|
|
31
|
+
enterprise: 'ent-id',
|
|
32
|
+
userKeySigningRequired: false,
|
|
33
|
+
};
|
|
34
|
+
beforeEach(function () {
|
|
35
|
+
signMessageStub = sinon_1.default.stub(src_1.BaseCoin.prototype, 'signMessage').resolves(signatureBytes);
|
|
36
|
+
mockBitGo = {
|
|
37
|
+
url: sinon_1.default.stub().returns('https://test.bitgo.com/'),
|
|
38
|
+
post: sinon_1.default.stub(),
|
|
39
|
+
};
|
|
40
|
+
});
|
|
41
|
+
afterEach(function () {
|
|
42
|
+
sinon_1.default.restore();
|
|
43
|
+
});
|
|
44
|
+
describe('signMessage', function () {
|
|
45
|
+
let ofc;
|
|
46
|
+
beforeEach(function () {
|
|
47
|
+
mockBitGo.post.returnsThis();
|
|
48
|
+
mockBitGo.send = sinon_1.default.stub().returnsThis();
|
|
49
|
+
mockBitGo.result = sinon_1.default.stub().resolves({ signature: hexSignature });
|
|
50
|
+
ofc = new coins_1.Ofc(mockBitGo);
|
|
51
|
+
mockBitGo.coin = sinon_1.default.stub().returns(ofc);
|
|
52
|
+
});
|
|
53
|
+
describe('with a Wallet instance', function () {
|
|
54
|
+
it('should delegate to wallet.toTradingAccount().signPayload() and return a Buffer', async function () {
|
|
55
|
+
const wallet = new src_1.Wallet(mockBitGo, ofc, walletData);
|
|
56
|
+
const message = 'test message';
|
|
57
|
+
const result = await ofc.signMessage(wallet, message);
|
|
58
|
+
mockBitGo.send.calledOnceWith({ payload: message }).should.be.true();
|
|
59
|
+
mockBitGo.result.calledOnce.should.be.true();
|
|
60
|
+
result.should.deepEqual(Buffer.from(hexSignature, 'hex'));
|
|
61
|
+
});
|
|
62
|
+
});
|
|
63
|
+
describe('with a prv key', function () {
|
|
64
|
+
it('should delegate to the base class signMessage with the exact key and message', async function () {
|
|
65
|
+
const key = {
|
|
66
|
+
prv: 'xprv9s21ZrQH143K3QTDL4LXw2F7HEK3wJUD2nW2nRk4stbPy6cq3jPPqhuCo36EkzGH6qiT9mJHBvuPKtLRYD4NxFb5hgXMQBB2LLT6mxLDHHo',
|
|
67
|
+
};
|
|
68
|
+
const message = 'test message';
|
|
69
|
+
const result = await ofc.signMessage(key, message);
|
|
70
|
+
signMessageStub.calledOnceWith(key, message).should.be.true();
|
|
71
|
+
result.should.equal(signatureBytes);
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
});
|
|
75
|
+
describe('signTransaction (OfcToken)', function () {
|
|
76
|
+
let ofcToken;
|
|
77
|
+
const payload = '{"amount":"100","from":"alice","to":"bob"}';
|
|
78
|
+
beforeEach(function () {
|
|
79
|
+
ofcToken = new coins_1.OfcToken(mockBitGo, TEST_TOKEN_CONFIG);
|
|
80
|
+
mockBitGo.coin = sinon_1.default.stub().returns(ofcToken);
|
|
81
|
+
});
|
|
82
|
+
describe('with wallet and no prv (BitGo remote signing)', function () {
|
|
83
|
+
it('should POST to the wallet sign endpoint with the payload and return the halfSigned result', async function () {
|
|
84
|
+
const sendStub = sinon_1.default.stub();
|
|
85
|
+
const resultStub = sinon_1.default.stub().resolves({ signature: hexSignature });
|
|
86
|
+
sendStub.returns({ result: resultStub });
|
|
87
|
+
mockBitGo.post.returns({ send: sendStub });
|
|
88
|
+
const wallet = new src_1.Wallet(mockBitGo, ofcToken, walletData);
|
|
89
|
+
const expectedUrl = ofcToken.url('/wallet/' + walletData.id + '/tx/sign');
|
|
90
|
+
const result = await ofcToken.signTransaction({ txPrebuild: { payload }, wallet });
|
|
91
|
+
mockBitGo.post.calledOnceWith(expectedUrl).should.be.true();
|
|
92
|
+
sendStub.calledOnceWith({ payload }).should.be.true();
|
|
93
|
+
result.should.deepEqual({ halfSigned: { payload, signature: hexSignature } });
|
|
94
|
+
});
|
|
95
|
+
});
|
|
96
|
+
describe('with wallet and prv (local signing routed through wallet)', function () {
|
|
97
|
+
it('should pass prv directly to signPayload and sign via baseCoin.signMessage', async function () {
|
|
98
|
+
const prv = 'test-prv';
|
|
99
|
+
const wallet = new src_1.Wallet(mockBitGo, ofcToken, walletData);
|
|
100
|
+
const result = await ofcToken.signTransaction({ txPrebuild: { payload }, wallet, prv });
|
|
101
|
+
signMessageStub.calledOnceWith({ prv }, payload).should.be.true();
|
|
102
|
+
mockBitGo.post.called.should.be.false();
|
|
103
|
+
result.should.deepEqual({ halfSigned: { payload, signature: signatureBytes.toString('hex') } });
|
|
104
|
+
});
|
|
105
|
+
});
|
|
106
|
+
describe('with prv only (local signing without wallet)', function () {
|
|
107
|
+
it('should pass the prv to baseCoin.signMessage and return the correct halfSigned result', async function () {
|
|
108
|
+
const prv = 'test-prv';
|
|
109
|
+
const result = await ofcToken.signTransaction({ txPrebuild: { payload }, prv });
|
|
110
|
+
signMessageStub.calledOnceWith({ prv }, payload).should.be.true();
|
|
111
|
+
mockBitGo.post.called.should.be.false();
|
|
112
|
+
result.should.deepEqual({ halfSigned: { payload, signature: signatureBytes.toString('hex') } });
|
|
113
|
+
});
|
|
114
|
+
});
|
|
115
|
+
describe('with neither wallet nor prv', function () {
|
|
116
|
+
it('should throw an error', async function () {
|
|
117
|
+
await ofcToken
|
|
118
|
+
.signTransaction({ txPrebuild: { payload } })
|
|
119
|
+
.should.be.rejectedWith('You must pass in either one of wallet or prv');
|
|
120
|
+
});
|
|
121
|
+
});
|
|
122
|
+
});
|
|
123
|
+
});
|
|
124
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2ZjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC91bml0L2NvaW5zL29mYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBOztHQUVHO0FBQ0gsa0RBQTBCO0FBQzFCLGtCQUFnQjtBQUNoQiw4Q0FBMkU7QUFDM0Usc0NBQWdEO0FBRWhELE1BQU0saUJBQWlCLEdBQUc7SUFDeEIsSUFBSSxFQUFFLFNBQVM7SUFDZixhQUFhLEVBQUUsQ0FBQztJQUNoQixJQUFJLEVBQUUsU0FBUztJQUNmLElBQUksRUFBRSxTQUFTO0lBQ2YsV0FBVyxFQUFFLE1BQU07SUFDbkIsTUFBTSxFQUFFLEtBQUs7Q0FDZCxDQUFDO0FBRUYsUUFBUSxDQUFDLGdCQUFnQixFQUFFO0lBQ3pCLElBQUksU0FBYyxDQUFDO0lBQ25CLElBQUksZUFBZ0MsQ0FBQztJQUNyQyxNQUFNLFlBQVksR0FBRyxVQUFVLENBQUM7SUFDaEMsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDdEQsTUFBTSxVQUFVLEdBQUc7UUFDakIsRUFBRSxFQUFFLFdBQVc7UUFDZixJQUFJLEVBQUUsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDO1FBQzdCLElBQUksRUFBRSxTQUFTO1FBQ2YsWUFBWSxFQUFFLFNBQVM7UUFDdkIsVUFBVSxFQUFFLFFBQVE7UUFDcEIsc0JBQXNCLEVBQUUsS0FBSztLQUM5QixDQUFDO0lBRUYsVUFBVSxDQUFDO1FBQ1QsZUFBZSxHQUFHLGVBQUssQ0FBQyxJQUFJLENBQUMsY0FBUSxDQUFDLFNBQVMsRUFBRSxhQUFhLENBQUMsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDekYsU0FBUyxHQUFHO1lBQ1YsR0FBRyxFQUFFLGVBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMseUJBQXlCLENBQUM7WUFDcEQsSUFBSSxFQUFFLGVBQUssQ0FBQyxJ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S0FBSyxFQUFFLENBQUM7Z0JBQ3hDLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQUUsVUFBVSxFQUFFLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxjQUFjLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ2xHLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxRQUFRLENBQUMsNkJBQTZCLEVBQUU7WUFDdEMsRUFBRSxDQUFDLHVCQUF1QixFQUFFLEtBQUs7Z0JBQy9CLE1BQU0sUUFBUTtxQkFDWCxlQUFlLENBQUMsRUFBRSxVQUFVLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBNEIsQ0FBQztxQkFDdEUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsOENBQThDLENBQUMsQ0FBQztZQUM1RSxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQHByZXR0aWVyXG4gKi9cbmltcG9ydCBzaW5vbiBmcm9tICdzaW5vbic7XG5pbXBvcnQgJ3Nob3VsZCc7XG5pbXBvcnQgeyBPZmMsIE9mY1Rva2VuLCBTaWduVHJhbnNhY3Rpb25PcHRpb25zIH0gZnJvbSAnLi4vLi4vLi4vc3JjL2NvaW5zJztcbmltcG9ydCB7IEJhc2VDb2luLCBXYWxsZXQgfSBmcm9tICcuLi8uLi8uLi9zcmMnO1xuXG5jb25zdCBURVNUX1RPS0VOX0NPTkZJRyA9IHtcbiAgY29pbjogJ29mY3VzZHQnLFxuICBkZWNpbWFsUGxhY2VzOiA2LFxuICBuYW1lOiAnT0ZDVVNEVCcsXG4gIHR5cGU6ICdvZmN1c2R0JyxcbiAgYmFja2luZ0NvaW46ICd1c2R0JyxcbiAgaXNGaWF0OiBmYWxzZSxcbn07XG5cbmRlc2NyaWJlKCdPZmMgLyBPZmNUb2tlbicsIGZ1bmN0aW9uICgpIHtcbiAgbGV0IG1vY2tCaXRHbzogYW55O1xuICBsZXQgc2lnbk1lc3NhZ2VTdHViOiBzaW5vbi5TaW5vblN0dWI7XG4gIGNvbnN0IGhleFNpZ25hdHVyZSA9ICdkZWFkYmVlZic7XG4gIGNvbnN0IHNpZ25hdHVyZUJ5dGVzID0gQnVmZmVyLmZyb20oJ2FhYmJjY2RkJywgJ2hleCcpO1xuICBjb25zdCB3YWxsZXREYXRhID0ge1xuICAgIGlkOiAnd2FsbGV0LWlkJyxcbiAgICBrZXlzOiBbJ3VzZXJLZXknLCAnYml0Z29LZXknXSxcbiAgICB0eXBlOiAndHJhZGluZycsXG4gICAgbXVsdGlzaWdUeXBlOiAnb25jaGFpbicsXG4gICAgZW50ZXJwcmlzZTogJ2VudC1pZCcsXG4gICAgdXNlcktleVNpZ25pbmdSZXF1aXJlZDogZmFsc2UsXG4gIH07XG5cbiAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgc2lnbk1lc3NhZ2VTdHViID0gc2lub24uc3R1YihCYXNlQ29pbi5wcm90b3R5cGUsICdzaWduTWVzc2FnZScpLnJlc29sdmVzKHNpZ25hdHVyZUJ5dGVzKTtcbiAgICBtb2NrQml0R28gPSB7XG4gICAgICB1cmw6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKCdodHRwczovL3Rlc3QuYml0Z28uY29tLycpLFxuICAgICAgcG9zdDogc2lub24uc3R1YigpLFxuICAgIH07XG4gIH0pO1xuXG4gIGFmdGVyRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgc2lub24ucmVzdG9yZSgpO1xuICB9KTtcblxuICBkZXNjcmliZSgnc2lnbk1lc3NhZ2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgbGV0IG9mYzogT2ZjO1xuXG4gICAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBtb2NrQml0R28ucG9zdC5yZXR1cm5zVGhpcygpO1xuICAgICAgbW9ja0JpdEdvLnNlbmQgPSBzaW5vbi5zdHViKCkucmV0dXJuc1RoaXMoKTtcbiAgICAgIG1vY2tCaXRHby5yZXN1bHQgPSBzaW5vbi5zdHViKCkucmVzb2x2ZXMoeyBzaWduYXR1cmU6IGhleFNpZ25hdHVyZSB9KTtcbiAgICAgIG9mYyA9IG5ldyBPZmMobW9ja0JpdEdvKTtcbiAgICAgIG1vY2tCaXRHby5jb2luID0gc2lub24uc3R1YigpLnJldHVybnMob2ZjKTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCd3aXRoIGEgV2FsbGV0IGluc3RhbmNlJywgZnVuY3Rpb24gKCkge1xuICAgICAgaXQoJ3Nob3VsZCBkZWxlZ2F0ZSB0byB3YWxsZXQudG9UcmFkaW5nQWNjb3VudCgpLnNpZ25QYXlsb2FkKCkgYW5kIHJldHVybiBhIEJ1ZmZlcicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3Qgd2FsbGV0ID0gbmV3IFdhbGxldChtb2NrQml0R28sIG9mYywgd2FsbGV0RGF0YSk7XG5cbiAgICAgICAgY29uc3QgbWVzc2FnZSA9ICd0ZXN0IG1lc3NhZ2UnO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBvZmMuc2lnbk1lc3NhZ2Uod2FsbGV0LCBtZXNzYWdlKTtcblxuICAgICAgICBtb2NrQml0R28uc2VuZC5jYWxsZWRPbmNlV2l0aCh7IHBheWxvYWQ6IG1lc3NhZ2UgfSkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgICAgbW9ja0JpdEdvLnJlc3VsdC5jYWxsZWRPbmNlLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICAgIHJlc3VsdC5zaG91bGQuZGVlcEVxdWFsKEJ1ZmZlci5mcm9tKGhleFNpZ25hdHVyZSwgJ2hleCcpKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3dpdGggYSBwcnYga2V5JywgZnVuY3Rpb24gKCkge1xuICAgICAgaXQoJ3Nob3VsZCBkZWxlZ2F0ZSB0byB0aGUgYmFzZSBjbGFzcyBzaWduTWVzc2FnZSB3aXRoIHRoZSBleGFjdCBrZXkgYW5kIG1lc3NhZ2UnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IHtcbiAgICAgICAgICBwcnY6ICd4cHJ2OXMyMVpyUUgxNDNLM1FUREw0TFh3MkY3SEVLM3dKVUQyblcyblJrNHN0YlB5NmNxM2pQUHFodUNvMzZFa3pHSDZxaVQ5bUpIQnZ1UEt0TFJZRDROeEZiNWhnWE1RQkIyTExUNm14TERISG8nLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBtZXNzYWdlID0gJ3Rlc3QgbWVzc2FnZSc7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG9mYy5zaWduTWVzc2FnZShrZXksIG1lc3NhZ2UpO1xuXG4gICAgICAgIHNpZ25NZXNzYWdlU3R1Yi5jYWxsZWRPbmNlV2l0aChrZXksIG1lc3NhZ2UpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICAgIHJlc3VsdC5zaG91bGQuZXF1YWwoc2lnbmF0dXJlQnl0ZXMpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdzaWduVHJhbnNhY3Rpb24gKE9mY1Rva2VuKScsIGZ1bmN0aW9uICgpIHtcbiAgICBsZXQgb2ZjVG9rZW46IE9mY1Rva2VuO1xuICAgIGNvbnN0IHBheWxvYWQgPSAne1wiYW1vdW50XCI6XCIxMDBcIixcImZyb21cIjpcImFsaWNlXCIsXCJ0b1wiOlwiYm9iXCJ9JztcblxuICAgIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgb2ZjVG9rZW4gPSBuZXcgT2ZjVG9rZW4obW9ja0JpdEdvLCBURVNUX1RPS0VOX0NPTkZJRyk7XG4gICAgICBtb2NrQml0R28uY29pbiA9IHNpbm9uLnN0dWIoKS5yZXR1cm5zKG9mY1Rva2VuKTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCd3aXRoIHdhbGxldCBhbmQgbm8gcHJ2IChCaXRHbyByZW1vdGUgc2lnbmluZyknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpdCgnc2hvdWxkIFBPU1QgdG8gdGhlIHdhbGxldCBzaWduIGVuZHBvaW50IHdpdGggdGhlIHBheWxvYWQgYW5kIHJldHVybiB0aGUgaGFsZlNpZ25lZCByZXN1bHQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHNlbmRTdHViID0gc2lub24uc3R1YigpO1xuICAgICAgICBjb25zdCByZXN1bHRTdHViID0gc2lub24uc3R1YigpLnJlc29sdmVzKHsgc2lnbmF0dXJlOiBoZXhTaWduYXR1cmUgfSk7XG4gICAgICAgIHNlbmRTdHViLnJldHVybnMoeyByZXN1bHQ6IHJlc3VsdFN0dWIgfSk7XG4gICAgICAgIG1vY2tCaXRHby5wb3N0LnJldHVybnMoeyBzZW5kOiBzZW5kU3R1YiB9KTtcblxuICAgICAgICBjb25zdCB3YWxsZXQgPSBuZXcgV2FsbGV0KG1vY2tCaXRHbywgb2ZjVG9rZW4sIHdhbGxldERhdGEpO1xuICAgICAgICBjb25zdCBleHBlY3RlZFVybCA9IG9mY1Rva2VuLnVybCgnL3dhbGxldC8nICsgd2FsbGV0RGF0YS5pZCArICcvdHgvc2lnbicpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBvZmNUb2tlbi5zaWduVHJhbnNhY3Rpb24oeyB0eFByZWJ1aWxkOiB7IHBheWxvYWQgfSwgd2FsbGV0IH0pO1xuXG4gICAgICAgIG1vY2tCaXRHby5wb3N0LmNhbGxlZE9uY2VXaXRoKGV4cGVjdGVkVXJsKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAgICBzZW5kU3R1Yi5jYWxsZWRPbmNlV2l0aCh7IHBheWxvYWQgfSkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgICAgcmVzdWx0LnNob3VsZC5kZWVwRXF1YWwoeyBoYWxmU2lnbmVkOiB7IHBheWxvYWQsIHNpZ25hdHVyZTogaGV4U2lnbmF0dXJlIH0gfSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCd3aXRoIHdhbGxldCBhbmQgcHJ2IChsb2NhbCBzaWduaW5nIHJvdXRlZCB0aHJvdWdoIHdhbGxldCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpdCgnc2hvdWxkIHBhc3MgcHJ2IGRpcmVjdGx5IHRvIHNpZ25QYXlsb2FkIGFuZCBzaWduIHZpYSBiYXNlQ29pbi5zaWduTWVzc2FnZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgcHJ2ID0gJ3Rlc3QtcHJ2JztcbiAgICAgICAgY29uc3Qgd2FsbGV0ID0gbmV3IFdhbGxldChtb2NrQml0R28sIG9mY1Rva2VuLCB3YWxsZXREYXRhKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgb2ZjVG9rZW4uc2lnblRyYW5zYWN0aW9uKHsgdHhQcmVidWlsZDogeyBwYXlsb2FkIH0sIHdhbGxldCwgcHJ2IH0pO1xuXG4gICAgICAgIHNpZ25NZXNzYWdlU3R1Yi5jYWxsZWRPbmNlV2l0aCh7IHBydiB9LCBwYXlsb2FkKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAgICBtb2NrQml0R28ucG9zdC5jYWxsZWQuc2hvdWxkLmJlLmZhbHNlKCk7XG4gICAgICAgIHJlc3VsdC5zaG91bGQuZGVlcEVxdWFsKHsgaGFsZlNpZ25lZDogeyBwYXlsb2FkLCBzaWduYXR1cmU6IHNpZ25hdHVyZUJ5dGVzLnRvU3RyaW5nKCdoZXgnKSB9IH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnd2l0aCBwcnYgb25seSAobG9jYWwgc2lnbmluZyB3aXRob3V0IHdhbGxldCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpdCgnc2hvdWxkIHBhc3MgdGhlIHBydiB0byBiYXNlQ29pbi5zaWduTWVzc2FnZSBhbmQgcmV0dXJuIHRoZSBjb3JyZWN0IGhhbGZTaWduZWQgcmVzdWx0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBwcnYgPSAndGVzdC1wcnYnO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG9mY1Rva2VuLnNpZ25UcmFuc2FjdGlvbih7IHR4UHJlYnVpbGQ6IHsgcGF5bG9hZCB9LCBwcnYgfSk7XG5cbiAgICAgICAgc2lnbk1lc3NhZ2VTdHViLmNhbGxlZE9uY2VXaXRoKHsgcHJ2IH0sIHBheWxvYWQpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICAgIG1vY2tCaXRHby5wb3N0LmNhbGxlZC5zaG91bGQuYmUuZmFsc2UoKTtcbiAgICAgICAgcmVzdWx0LnNob3VsZC5kZWVwRXF1YWwoeyBoYWxmU2lnbmVkOiB7IHBheWxvYWQsIHNpZ25hdHVyZTogc2lnbmF0dXJlQnl0ZXMudG9TdHJpbmcoJ2hleCcpIH0gfSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCd3aXRoIG5laXRoZXIgd2FsbGV0IG5vciBwcnYnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpdCgnc2hvdWxkIHRocm93IGFuIGVycm9yJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBhd2FpdCBvZmNUb2tlblxuICAgICAgICAgIC5zaWduVHJhbnNhY3Rpb24oeyB0eFByZWJ1aWxkOiB7IHBheWxvYWQgfSB9IGFzIFNpZ25UcmFuc2FjdGlvbk9wdGlvbnMpXG4gICAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ1lvdSBtdXN0IHBhc3MgaW4gZWl0aGVyIG9uZSBvZiB3YWxsZXQgb3IgcHJ2Jyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lightning.d.ts","sourceRoot":"","sources":["../../../test/unit/lightning.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
require("should");
|
|
4
|
+
const lightning_1 = require("../../src/lightning");
|
|
5
|
+
describe('lightning', () => {
|
|
6
|
+
describe('isBolt11Invoice', () => {
|
|
7
|
+
it('should return true for a valid bolt11 invoice', () => {
|
|
8
|
+
const invoice = 'lnbc500n1p3zv5vkpp5x0thcaz8wep54clc2xt5895azjdzmthyskzzh9yslggy74qtvl6sdpdg3hkuct5d9hkugrxdaezqjn0dphk2fmnypkk2mtsdahkccqzpgxqyz5vqsp5v80q4vq4pwakq2l0hcqgtelgajsymv4ud4jdcrqtnzhvet55qlus9qyyssquqh2wl2m866qs5n72c5vg6wmqx9vzwhs5ypualq4mcu76h2tdkcq3jtjwtggfff7xwtdqxlnwqk8cxpzryjghrmmq3syraswp9vjr7cqry9l96';
|
|
9
|
+
(0, lightning_1.isBolt11Invoice)(invoice).should.equal(true);
|
|
10
|
+
});
|
|
11
|
+
it('should return false for non-string values', () => {
|
|
12
|
+
(0, lightning_1.isBolt11Invoice)(undefined).should.equal(false);
|
|
13
|
+
(0, lightning_1.isBolt11Invoice)(null).should.equal(false);
|
|
14
|
+
(0, lightning_1.isBolt11Invoice)(123).should.equal(false);
|
|
15
|
+
(0, lightning_1.isBolt11Invoice)({}).should.equal(false);
|
|
16
|
+
});
|
|
17
|
+
it('should return false for invalid invoice strings', () => {
|
|
18
|
+
(0, lightning_1.isBolt11Invoice)('').should.equal(false);
|
|
19
|
+
(0, lightning_1.isBolt11Invoice)('not-an-invoice').should.equal(false);
|
|
20
|
+
});
|
|
21
|
+
});
|
|
22
|
+
});
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlnaHRuaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdGVzdC91bml0L2xpZ2h0bmluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLGtCQUFnQjtBQUVoQixtREFBc0Q7QUFFdEQsUUFBUSxDQUFDLFdBQVcsRUFBRSxHQUFHLEVBQUU7SUFDekIsUUFBUSxDQUFDLGlCQUFpQixFQUFFLEdBQUcsRUFBRTtRQUMvQixFQUFFLENBQUMsK0NBQStDLEVBQUUsR0FBRyxFQUFFO1lBQ3ZELE1BQU0sT0FBTyxHQUNYLGlUQUFpVCxDQUFDO1lBRXBULElBQUEsMkJBQWUsRUFBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzlDLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDJDQUEyQyxFQUFFLEdBQUcsRUFBRTtZQUNuRCxJQUFBLDJCQUFlLEVBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMvQyxJQUFBLDJCQUFlLEVBQUMsSUFBVyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNqRCxJQUFBLDJCQUFlLEVBQUMsR0FBVSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNoRCxJQUFBLDJCQUFlLEVBQUMsRUFBUyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqRCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxpREFBaUQsRUFBRSxHQUFHLEVBQUU7WUFDekQsSUFBQSwyQkFBZSxFQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDeEMsSUFBQSwyQkFBZSxFQUFDLGdCQUFnQixDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4RCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgJ3Nob3VsZCc7XG5cbmltcG9ydCB7IGlzQm9sdDExSW52b2ljZSB9IGZyb20gJy4uLy4uL3NyYy9saWdodG5pbmcnO1xuXG5kZXNjcmliZSgnbGlnaHRuaW5nJywgKCkgPT4ge1xuICBkZXNjcmliZSgnaXNCb2x0MTFJbnZvaWNlJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgZm9yIGEgdmFsaWQgYm9sdDExIGludm9pY2UnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnZvaWNlID1cbiAgICAgICAgJ2xuYmM1MDBuMXAzenY1dmtwcDV4MHRoY2F6OHdlcDU0Y2xjMnh0NTg5NWF6amR6bXRoeXNrenpoOXlzbGdneTc0cXR2bDZzZHBkZzNoa3VjdDVkOWhrdWdyeGRhZXpxam4wZHBoazJmbW55cGtrMm10c2RhaGtjY3F6cGd4cXl6NXZxc3A1djgwcTR2cTRwd2FrcTJsMGhjcWd0ZWxnYWpzeW12NHVkNGpkY3JxdG56aHZldDU1cWx1czlxeXlzc3F1cWgyd2wybTg2NnFzNW43MmM1dmc2d21xeDl2endoczV5cHVhbHE0bWN1NzZoMnRka2NxM2p0and0Z2dmZmY3eHd0ZHF4bG53cWs4Y3hwenJ5amdocm1tcTNzeXJhc3dwOXZqcjdjcXJ5OWw5Nic7XG5cbiAgICAgIGlzQm9sdDExSW52b2ljZShpbnZvaWNlKS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSBmb3Igbm9uLXN0cmluZyB2YWx1ZXMnLCAoKSA9PiB7XG4gICAgICBpc0JvbHQxMUludm9pY2UodW5kZWZpbmVkKS5zaG91bGQuZXF1YWwoZmFsc2UpO1xuICAgICAgaXNCb2x0MTFJbnZvaWNlKG51bGwgYXMgYW55KS5zaG91bGQuZXF1YWwoZmFsc2UpO1xuICAgICAgaXNCb2x0MTFJbnZvaWNlKDEyMyBhcyBhbnkpLnNob3VsZC5lcXVhbChmYWxzZSk7XG4gICAgICBpc0JvbHQxMUludm9pY2Uoe30gYXMgYW55KS5zaG91bGQuZXF1YWwoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2UgZm9yIGludmFsaWQgaW52b2ljZSBzdHJpbmdzJywgKCkgPT4ge1xuICAgICAgaXNCb2x0MTFJbnZvaWNlKCcnKS5zaG91bGQuZXF1YWwoZmFsc2UpO1xuICAgICAgaXNCb2x0MTFJbnZvaWNlKCdub3QtYW4taW52b2ljZScpLnNob3VsZC5lcXVhbChmYWxzZSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"units.d.ts","sourceRoot":"","sources":["../../../test/unit/units.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"units.d.ts","sourceRoot":"","sources":["../../../test/unit/units.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,CAAC"}
|