@bitgo-beta/abstract-utxo 1.1.1-beta.192 → 1.1.1-beta.1921
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/README.md +76 -0
- package/dist/cjs/src/abstractUtxoCoin.d.ts +461 -0
- package/dist/cjs/src/abstractUtxoCoin.d.ts.map +1 -0
- package/dist/cjs/src/abstractUtxoCoin.js +705 -0
- package/dist/cjs/src/address/fixedScript.d.ts +44 -0
- package/dist/cjs/src/address/fixedScript.d.ts.map +1 -0
- package/dist/cjs/src/address/fixedScript.js +105 -0
- package/dist/cjs/src/address/index.d.ts +2 -0
- package/dist/cjs/src/address/index.d.ts.map +1 -0
- package/dist/cjs/src/address/index.js +8 -0
- package/dist/cjs/src/config.d.ts.map +1 -0
- package/dist/cjs/src/config.js +14 -0
- package/dist/cjs/src/descriptor/NamedDescriptor.d.ts +19 -0
- package/dist/cjs/src/descriptor/NamedDescriptor.d.ts.map +1 -0
- package/dist/cjs/src/descriptor/NamedDescriptor.js +77 -0
- package/dist/cjs/src/descriptor/assertDescriptorWalletAddress.d.ts +5 -0
- package/dist/cjs/src/descriptor/assertDescriptorWalletAddress.d.ts.map +1 -0
- package/dist/cjs/src/descriptor/assertDescriptorWalletAddress.js +33 -0
- package/dist/cjs/src/descriptor/builder/builder.d.ts +12 -0
- package/dist/cjs/src/descriptor/builder/builder.d.ts.map +1 -0
- package/dist/cjs/src/descriptor/builder/builder.js +37 -0
- package/dist/cjs/src/descriptor/builder/index.d.ts +3 -0
- package/dist/cjs/src/descriptor/builder/index.d.ts.map +1 -0
- package/dist/cjs/src/descriptor/builder/index.js +8 -0
- package/dist/cjs/src/descriptor/builder/parse.d.ts +5 -0
- package/dist/cjs/src/descriptor/builder/parse.d.ts.map +1 -0
- package/dist/cjs/src/descriptor/builder/parse.js +116 -0
- package/dist/cjs/src/descriptor/createWallet/createDescriptorWallet.d.ts +20 -0
- package/dist/cjs/src/descriptor/createWallet/createDescriptorWallet.d.ts.map +1 -0
- package/dist/cjs/src/descriptor/createWallet/createDescriptorWallet.js +41 -0
- package/dist/cjs/src/descriptor/createWallet/createDescriptors.d.ts +12 -0
- package/dist/cjs/src/descriptor/createWallet/createDescriptors.d.ts.map +1 -0
- package/dist/cjs/src/descriptor/createWallet/createDescriptors.js +33 -0
- package/dist/cjs/src/descriptor/createWallet/index.d.ts +3 -0
- package/dist/cjs/src/descriptor/createWallet/index.d.ts.map +1 -0
- package/dist/cjs/src/descriptor/createWallet/index.js +19 -0
- package/dist/cjs/src/descriptor/descriptorWallet.d.ts +19 -0
- package/dist/cjs/src/descriptor/descriptorWallet.d.ts.map +1 -0
- package/dist/cjs/src/descriptor/descriptorWallet.js +54 -0
- package/dist/cjs/src/descriptor/index.d.ts +8 -0
- package/dist/cjs/src/descriptor/index.d.ts.map +1 -0
- package/dist/cjs/src/descriptor/index.js +53 -0
- package/dist/cjs/src/descriptor/validatePolicy.d.ts +22 -0
- package/dist/cjs/src/descriptor/validatePolicy.d.ts.map +1 -0
- package/dist/cjs/src/descriptor/validatePolicy.js +92 -0
- package/dist/cjs/src/impl/bch/bch.d.ts +22 -0
- package/dist/cjs/src/impl/bch/bch.d.ts.map +1 -0
- package/dist/cjs/src/impl/bch/bch.js +43 -0
- package/dist/cjs/src/impl/bch/index.d.ts +3 -0
- package/dist/cjs/src/impl/bch/index.d.ts.map +1 -0
- package/dist/cjs/src/impl/bch/index.js +19 -0
- package/dist/cjs/src/impl/bch/tbch.d.ts +12 -0
- package/dist/cjs/src/impl/bch/tbch.d.ts.map +1 -0
- package/dist/cjs/src/impl/bch/tbch.js +15 -0
- package/dist/cjs/src/impl/bcha/bcha.d.ts +9 -0
- package/dist/cjs/src/impl/bcha/bcha.d.ts.map +1 -0
- package/dist/cjs/src/impl/bcha/bcha.js +15 -0
- package/dist/cjs/src/impl/bcha/index.d.ts +3 -0
- package/dist/cjs/src/impl/bcha/index.d.ts.map +1 -0
- package/dist/cjs/src/impl/bcha/index.js +19 -0
- package/dist/cjs/src/impl/bcha/tbcha.d.ts +12 -0
- package/dist/cjs/src/impl/bcha/tbcha.d.ts.map +1 -0
- package/dist/cjs/src/impl/bcha/tbcha.js +15 -0
- package/dist/cjs/src/impl/bsv/bsv.d.ts +9 -0
- package/dist/cjs/src/impl/bsv/bsv.d.ts.map +1 -0
- package/dist/cjs/src/impl/bsv/bsv.js +15 -0
- package/dist/cjs/src/impl/bsv/index.d.ts +3 -0
- package/dist/cjs/src/impl/bsv/index.d.ts.map +1 -0
- package/dist/cjs/src/impl/bsv/index.js +19 -0
- package/dist/cjs/src/impl/bsv/tbsv.d.ts +12 -0
- package/dist/cjs/src/impl/bsv/tbsv.d.ts.map +1 -0
- package/dist/cjs/src/impl/bsv/tbsv.js +15 -0
- package/dist/cjs/src/impl/btc/btc.d.ts +15 -0
- package/dist/cjs/src/impl/btc/btc.d.ts.map +1 -0
- package/dist/cjs/src/impl/btc/btc.js +22 -0
- package/dist/cjs/src/impl/btc/index.d.ts +7 -0
- package/dist/cjs/src/impl/btc/index.d.ts.map +1 -0
- package/dist/cjs/src/impl/btc/index.js +23 -0
- package/dist/cjs/src/impl/btc/inscriptionBuilder.d.ts +61 -0
- package/dist/cjs/src/impl/btc/inscriptionBuilder.d.ts.map +1 -0
- package/dist/cjs/src/impl/btc/inscriptionBuilder.js +171 -0
- package/dist/cjs/src/impl/btc/tbtc.d.ts +12 -0
- package/dist/cjs/src/impl/btc/tbtc.d.ts.map +1 -0
- package/dist/cjs/src/impl/btc/tbtc.js +15 -0
- package/dist/cjs/src/impl/btc/tbtc4.d.ts +12 -0
- package/dist/cjs/src/impl/btc/tbtc4.d.ts.map +1 -0
- package/dist/cjs/src/impl/btc/tbtc4.js +15 -0
- package/dist/cjs/src/impl/btc/tbtcbgsig.d.ts +12 -0
- package/dist/cjs/src/impl/btc/tbtcbgsig.d.ts.map +1 -0
- package/dist/cjs/src/impl/btc/tbtcbgsig.js +15 -0
- package/dist/cjs/src/impl/btc/tbtcsig.d.ts +12 -0
- package/dist/cjs/src/impl/btc/tbtcsig.d.ts.map +1 -0
- package/dist/cjs/src/impl/btc/tbtcsig.js +15 -0
- package/dist/cjs/src/impl/btg/btg.d.ts +9 -0
- package/dist/cjs/src/impl/btg/btg.d.ts.map +1 -0
- package/dist/cjs/src/impl/btg/btg.js +15 -0
- package/dist/cjs/src/impl/btg/index.d.ts +2 -0
- package/dist/cjs/src/impl/btg/index.d.ts.map +1 -0
- package/dist/cjs/src/impl/btg/index.js +18 -0
- package/dist/cjs/src/impl/dash/dash.d.ts +9 -0
- package/dist/cjs/src/impl/dash/dash.d.ts.map +1 -0
- package/dist/cjs/src/impl/dash/dash.js +15 -0
- package/dist/cjs/src/impl/dash/index.d.ts +3 -0
- package/dist/cjs/src/impl/dash/index.d.ts.map +1 -0
- package/dist/cjs/src/impl/dash/index.js +19 -0
- package/dist/cjs/src/impl/dash/tdash.d.ts +12 -0
- package/dist/cjs/src/impl/dash/tdash.d.ts.map +1 -0
- package/dist/cjs/src/impl/dash/tdash.js +15 -0
- package/dist/cjs/src/impl/doge/doge.d.ts +35 -0
- package/dist/cjs/src/impl/doge/doge.d.ts.map +1 -0
- package/dist/cjs/src/impl/doge/doge.js +79 -0
- package/dist/cjs/src/impl/doge/index.d.ts +3 -0
- package/dist/cjs/src/impl/doge/index.d.ts.map +1 -0
- package/dist/cjs/src/impl/doge/index.js +19 -0
- package/dist/cjs/src/impl/doge/tdoge.d.ts +12 -0
- package/dist/cjs/src/impl/doge/tdoge.d.ts.map +1 -0
- package/dist/cjs/src/impl/doge/tdoge.js +15 -0
- package/dist/cjs/src/impl/index.d.ts +10 -0
- package/dist/cjs/src/impl/index.d.ts.map +1 -0
- package/dist/cjs/src/impl/index.js +46 -0
- package/dist/cjs/src/impl/ltc/index.d.ts +3 -0
- package/dist/cjs/src/impl/ltc/index.d.ts.map +1 -0
- package/dist/cjs/src/impl/ltc/index.js +19 -0
- package/dist/cjs/src/impl/ltc/ltc.d.ts +8 -0
- package/dist/cjs/src/impl/ltc/ltc.d.ts.map +1 -0
- package/dist/cjs/src/impl/ltc/ltc.js +15 -0
- package/dist/cjs/src/impl/ltc/tltc.d.ts +8 -0
- package/dist/cjs/src/impl/ltc/tltc.d.ts.map +1 -0
- package/dist/cjs/src/impl/ltc/tltc.js +15 -0
- package/dist/cjs/src/impl/zec/index.d.ts +3 -0
- package/dist/cjs/src/impl/zec/index.d.ts.map +1 -0
- package/dist/cjs/src/impl/zec/index.js +19 -0
- package/dist/cjs/src/impl/zec/tzec.d.ts +9 -0
- package/dist/cjs/src/impl/zec/tzec.d.ts.map +1 -0
- package/dist/cjs/src/impl/zec/tzec.js +15 -0
- package/dist/cjs/src/impl/zec/zec.d.ts +12 -0
- package/dist/cjs/src/impl/zec/zec.d.ts.map +1 -0
- package/dist/cjs/src/impl/zec/zec.js +15 -0
- package/dist/cjs/src/index.d.ts +23 -0
- package/dist/cjs/src/index.d.ts.map +1 -0
- package/dist/cjs/src/index.js +62 -0
- package/dist/cjs/src/keychains.d.ts +56 -0
- package/dist/cjs/src/keychains.d.ts.map +1 -0
- package/dist/cjs/src/keychains.js +144 -0
- package/dist/cjs/src/names.d.ts +36 -0
- package/dist/cjs/src/names.d.ts.map +1 -0
- package/dist/cjs/src/names.js +231 -0
- package/dist/cjs/src/offlineVault/OfflineVaultHalfSigned.d.ts +9 -0
- package/dist/cjs/src/offlineVault/OfflineVaultHalfSigned.d.ts.map +1 -0
- package/dist/cjs/src/offlineVault/OfflineVaultHalfSigned.js +23 -0
- package/dist/cjs/src/offlineVault/OfflineVaultSignable.d.ts +46 -0
- package/dist/cjs/src/offlineVault/OfflineVaultSignable.d.ts.map +1 -0
- package/dist/cjs/src/offlineVault/OfflineVaultSignable.js +55 -0
- package/dist/cjs/src/offlineVault/TransactionExplanation.d.ts +16 -0
- package/dist/cjs/src/offlineVault/TransactionExplanation.d.ts.map +1 -0
- package/dist/cjs/src/offlineVault/TransactionExplanation.js +15 -0
- package/dist/cjs/src/offlineVault/descriptor/index.d.ts +2 -0
- package/dist/cjs/src/offlineVault/descriptor/index.d.ts.map +1 -0
- package/dist/cjs/src/offlineVault/descriptor/index.js +18 -0
- package/dist/cjs/src/offlineVault/descriptor/transaction.d.ts +39 -0
- package/dist/cjs/src/offlineVault/descriptor/transaction.d.ts.map +1 -0
- package/dist/cjs/src/offlineVault/descriptor/transaction.js +80 -0
- package/dist/cjs/src/offlineVault/index.d.ts +6 -0
- package/dist/cjs/src/offlineVault/index.d.ts.map +1 -0
- package/dist/cjs/src/offlineVault/index.js +44 -0
- package/dist/{src → cjs/src}/recovery/RecoveryProvider.d.ts +1 -3
- package/dist/cjs/src/recovery/RecoveryProvider.d.ts.map +1 -0
- package/dist/cjs/src/recovery/RecoveryProvider.js +22 -0
- package/dist/cjs/src/recovery/backupKeyRecovery.d.ts +158 -0
- package/dist/cjs/src/recovery/backupKeyRecovery.d.ts.map +1 -0
- package/dist/cjs/src/recovery/backupKeyRecovery.js +411 -0
- package/dist/{src → cjs/src}/recovery/baseApi.d.ts +3 -6
- package/dist/cjs/src/recovery/baseApi.d.ts.map +1 -0
- package/dist/cjs/src/recovery/baseApi.js +73 -0
- package/dist/{src → cjs/src}/recovery/coingeckoApi.d.ts +0 -3
- package/dist/cjs/src/recovery/coingeckoApi.d.ts.map +1 -0
- package/dist/cjs/src/recovery/coingeckoApi.js +44 -0
- package/dist/{src → cjs/src}/recovery/crossChainRecovery.d.ts +21 -9
- package/dist/cjs/src/recovery/crossChainRecovery.d.ts.map +1 -0
- package/dist/cjs/src/recovery/crossChainRecovery.js +299 -0
- package/dist/{src → cjs/src}/recovery/index.d.ts +0 -1
- package/dist/cjs/src/recovery/index.d.ts.map +1 -0
- package/dist/{src → cjs/src}/recovery/index.js +6 -3
- package/dist/cjs/src/recovery/mempoolApi.d.ts.map +1 -0
- package/dist/cjs/src/recovery/mempoolApi.js +36 -0
- package/dist/cjs/src/recovery/psbt.d.ts +62 -0
- package/dist/cjs/src/recovery/psbt.d.ts.map +1 -0
- package/dist/cjs/src/recovery/psbt.js +153 -0
- package/dist/cjs/src/tnumber.d.ts +4 -0
- package/dist/cjs/src/tnumber.d.ts.map +1 -0
- package/dist/cjs/src/tnumber.js +12 -0
- package/dist/cjs/src/transaction/bip322.d.ts +27 -0
- package/dist/cjs/src/transaction/bip322.d.ts.map +1 -0
- package/dist/cjs/src/transaction/bip322.js +139 -0
- package/dist/cjs/src/transaction/common/verifyPayGoAmount.d.ts +2 -0
- package/dist/cjs/src/transaction/common/verifyPayGoAmount.d.ts.map +1 -0
- package/dist/cjs/src/transaction/common/verifyPayGoAmount.js +3 -0
- package/dist/cjs/src/transaction/decode.d.ts +13 -0
- package/dist/cjs/src/transaction/decode.d.ts.map +1 -0
- package/dist/cjs/src/transaction/decode.js +88 -0
- package/dist/cjs/src/transaction/descriptor/explainPsbt.d.ts +5 -0
- package/dist/cjs/src/transaction/descriptor/explainPsbt.d.ts.map +1 -0
- package/dist/cjs/src/transaction/descriptor/explainPsbt.js +45 -0
- package/dist/cjs/src/transaction/descriptor/index.d.ts +7 -0
- package/dist/cjs/src/transaction/descriptor/index.d.ts.map +1 -0
- package/dist/cjs/src/transaction/descriptor/index.js +14 -0
- package/dist/cjs/src/transaction/descriptor/parse.d.ts +19 -0
- package/dist/cjs/src/transaction/descriptor/parse.d.ts.map +1 -0
- package/dist/cjs/src/transaction/descriptor/parse.js +90 -0
- package/dist/cjs/src/transaction/descriptor/parseToAmountType.d.ts +14 -0
- package/dist/cjs/src/transaction/descriptor/parseToAmountType.d.ts.map +1 -0
- package/dist/cjs/src/transaction/descriptor/parseToAmountType.js +60 -0
- package/dist/cjs/src/transaction/descriptor/recipient.d.ts +5 -0
- package/dist/cjs/src/transaction/descriptor/recipient.d.ts.map +1 -0
- package/dist/cjs/src/transaction/descriptor/recipient.js +3 -0
- package/dist/cjs/src/transaction/descriptor/signPsbt.d.ts +24 -0
- package/dist/cjs/src/transaction/descriptor/signPsbt.d.ts.map +1 -0
- package/dist/cjs/src/transaction/descriptor/signPsbt.js +44 -0
- package/dist/cjs/src/transaction/descriptor/verifyTransaction.d.ts +37 -0
- package/dist/cjs/src/transaction/descriptor/verifyTransaction.d.ts.map +1 -0
- package/dist/cjs/src/transaction/descriptor/verifyTransaction.js +81 -0
- package/dist/cjs/src/transaction/explainTransaction.d.ts +21 -0
- package/dist/cjs/src/transaction/explainTransaction.d.ts.map +1 -0
- package/dist/cjs/src/transaction/explainTransaction.js +90 -0
- package/dist/cjs/src/transaction/fetchInputs.d.ts +27 -0
- package/dist/cjs/src/transaction/fetchInputs.d.ts.map +1 -0
- package/dist/cjs/src/transaction/fetchInputs.js +111 -0
- package/dist/cjs/src/transaction/fixedScript/SigningError.d.ts +24 -0
- package/dist/cjs/src/transaction/fixedScript/SigningError.d.ts.map +1 -0
- package/dist/cjs/src/transaction/fixedScript/SigningError.js +32 -0
- package/dist/cjs/src/transaction/fixedScript/explainPsbtWasm.d.ts +41 -0
- package/dist/cjs/src/transaction/fixedScript/explainPsbtWasm.d.ts.map +1 -0
- package/dist/cjs/src/transaction/fixedScript/explainPsbtWasm.js +120 -0
- package/dist/cjs/src/transaction/fixedScript/explainTransaction.d.ts +80 -0
- package/dist/cjs/src/transaction/fixedScript/explainTransaction.d.ts.map +1 -0
- package/dist/cjs/src/transaction/fixedScript/explainTransaction.js +346 -0
- package/dist/cjs/src/transaction/fixedScript/index.d.ts +10 -0
- package/dist/cjs/src/transaction/fixedScript/index.d.ts.map +1 -0
- package/dist/cjs/src/transaction/fixedScript/index.js +34 -0
- package/dist/cjs/src/transaction/fixedScript/musig2.d.ts +4 -0
- package/dist/cjs/src/transaction/fixedScript/musig2.d.ts.map +1 -0
- package/dist/cjs/src/transaction/fixedScript/musig2.js +3 -0
- package/dist/cjs/src/transaction/fixedScript/parseOutput.d.ts +28 -0
- package/dist/cjs/src/transaction/fixedScript/parseOutput.d.ts.map +1 -0
- package/dist/cjs/src/transaction/fixedScript/parseOutput.js +216 -0
- package/dist/cjs/src/transaction/fixedScript/parseTransaction.d.ts +8 -0
- package/dist/cjs/src/transaction/fixedScript/parseTransaction.d.ts.map +1 -0
- package/dist/cjs/src/transaction/fixedScript/parseTransaction.js +227 -0
- package/dist/cjs/src/transaction/fixedScript/replayProtection.d.ts +10 -0
- package/dist/cjs/src/transaction/fixedScript/replayProtection.d.ts.map +1 -0
- package/dist/cjs/src/transaction/fixedScript/replayProtection.js +44 -0
- package/dist/cjs/src/transaction/fixedScript/signLegacyTransaction.d.ts +32 -0
- package/dist/cjs/src/transaction/fixedScript/signLegacyTransaction.d.ts.map +1 -0
- package/dist/cjs/src/transaction/fixedScript/signLegacyTransaction.js +156 -0
- package/dist/cjs/src/transaction/fixedScript/signPsbtUtxolib.d.ts +20 -0
- package/dist/cjs/src/transaction/fixedScript/signPsbtUtxolib.d.ts.map +1 -0
- package/dist/cjs/src/transaction/fixedScript/signPsbtUtxolib.js +157 -0
- package/dist/cjs/src/transaction/fixedScript/signPsbtWasm.d.ts +20 -0
- package/dist/cjs/src/transaction/fixedScript/signPsbtWasm.d.ts.map +1 -0
- package/dist/cjs/src/transaction/fixedScript/signPsbtWasm.js +116 -0
- package/dist/cjs/src/transaction/fixedScript/signTransaction.d.ts +34 -0
- package/dist/cjs/src/transaction/fixedScript/signTransaction.d.ts.map +1 -0
- package/dist/cjs/src/transaction/fixedScript/signTransaction.js +78 -0
- package/dist/cjs/src/transaction/fixedScript/verifyTransaction.d.ts +21 -0
- package/dist/cjs/src/transaction/fixedScript/verifyTransaction.d.ts.map +1 -0
- package/dist/cjs/src/transaction/fixedScript/verifyTransaction.js +199 -0
- package/dist/cjs/src/transaction/getPayGoVerificationPubkey.d.ts +9 -0
- package/dist/cjs/src/transaction/getPayGoVerificationPubkey.d.ts.map +1 -0
- package/dist/cjs/src/transaction/getPayGoVerificationPubkey.js +20 -0
- package/dist/cjs/src/transaction/index.d.ts +10 -0
- package/dist/cjs/src/transaction/index.d.ts.map +1 -0
- package/dist/cjs/src/transaction/index.js +54 -0
- package/dist/cjs/src/transaction/outputDifference.d.ts +44 -0
- package/dist/cjs/src/transaction/outputDifference.d.ts.map +1 -0
- package/dist/cjs/src/transaction/outputDifference.js +51 -0
- package/dist/cjs/src/transaction/parseTransaction.d.ts +4 -0
- package/dist/cjs/src/transaction/parseTransaction.d.ts.map +1 -0
- package/dist/cjs/src/transaction/parseTransaction.js +48 -0
- package/dist/cjs/src/transaction/recipient.d.ts +34 -0
- package/dist/cjs/src/transaction/recipient.d.ts.map +1 -0
- package/dist/cjs/src/transaction/recipient.js +69 -0
- package/dist/cjs/src/transaction/signTransaction.d.ts +6 -0
- package/dist/cjs/src/transaction/signTransaction.d.ts.map +1 -0
- package/dist/cjs/src/transaction/signTransaction.js +115 -0
- package/dist/cjs/src/transaction/types.d.ts +50 -0
- package/dist/cjs/src/transaction/types.d.ts.map +1 -0
- package/dist/cjs/src/transaction/types.js +7 -0
- package/dist/cjs/src/transaction/verifyTransaction.d.ts +4 -0
- package/dist/cjs/src/transaction/verifyTransaction.d.ts.map +1 -0
- package/dist/cjs/src/transaction/verifyTransaction.js +50 -0
- package/dist/cjs/src/unspent.d.ts +55 -0
- package/dist/cjs/src/unspent.d.ts.map +1 -0
- package/dist/cjs/src/unspent.js +12 -0
- package/dist/cjs/src/verifyKey.d.ts +21 -0
- package/dist/cjs/src/verifyKey.d.ts.map +1 -0
- package/dist/cjs/src/verifyKey.js +108 -0
- package/dist/cjs/src/wallet.d.ts +15 -0
- package/dist/cjs/src/wallet.d.ts.map +1 -0
- package/dist/cjs/src/wallet.js +8 -0
- package/dist/cjs/src/wasmUtil.d.ts +34 -0
- package/dist/cjs/src/wasmUtil.d.ts.map +1 -0
- package/dist/cjs/src/wasmUtil.js +95 -0
- package/dist/cjs/test/integration/impl/bch/bch.d.ts +2 -0
- package/dist/cjs/test/integration/impl/bch/bch.d.ts.map +1 -0
- package/dist/cjs/test/integration/impl/bch/bch.js +76 -0
- package/dist/cjs/test/unit/address.d.ts +2 -0
- package/dist/cjs/test/unit/address.d.ts.map +1 -0
- package/dist/cjs/test/unit/address.js +152 -0
- package/dist/cjs/test/unit/bip322.d.ts +2 -0
- package/dist/cjs/test/unit/bip322.d.ts.map +1 -0
- package/dist/cjs/test/unit/bip322.js +410 -0
- package/dist/cjs/test/unit/buildSignSendLegacyFormat.d.ts +2 -0
- package/dist/cjs/test/unit/buildSignSendLegacyFormat.d.ts.map +1 -0
- package/dist/cjs/test/unit/buildSignSendLegacyFormat.js +99 -0
- package/dist/cjs/test/unit/coins.d.ts +2 -0
- package/dist/cjs/test/unit/coins.d.ts.map +1 -0
- package/dist/cjs/test/unit/coins.js +161 -0
- package/dist/cjs/test/unit/customChangeWallet.d.ts +2 -0
- package/dist/cjs/test/unit/customChangeWallet.d.ts.map +1 -0
- package/dist/cjs/test/unit/customChangeWallet.js +215 -0
- package/dist/cjs/test/unit/customChangeWalletFixtures.d.ts +2 -0
- package/dist/cjs/test/unit/customChangeWalletFixtures.d.ts.map +1 -0
- package/dist/cjs/test/unit/customChangeWalletFixtures.js +53 -0
- package/dist/cjs/test/unit/customSigner.d.ts +2 -0
- package/dist/cjs/test/unit/customSigner.d.ts.map +1 -0
- package/dist/cjs/test/unit/customSigner.js +99 -0
- package/dist/cjs/test/unit/descriptor/NamedDescriptor.d.ts +2 -0
- package/dist/cjs/test/unit/descriptor/NamedDescriptor.d.ts.map +1 -0
- package/dist/cjs/test/unit/descriptor/NamedDescriptor.js +51 -0
- package/dist/cjs/test/unit/descriptor/builder.d.ts +2 -0
- package/dist/cjs/test/unit/descriptor/builder.d.ts.map +1 -0
- package/dist/cjs/test/unit/descriptor/builder.js +78 -0
- package/dist/cjs/test/unit/descriptor/createWallet/createDescriptors.d.ts +2 -0
- package/dist/cjs/test/unit/descriptor/createWallet/createDescriptors.d.ts.map +1 -0
- package/dist/cjs/test/unit/descriptor/createWallet/createDescriptors.js +53 -0
- package/dist/cjs/test/unit/descriptor/descriptorWallet.d.ts +2 -0
- package/dist/cjs/test/unit/descriptor/descriptorWallet.d.ts.map +1 -0
- package/dist/cjs/test/unit/descriptor/descriptorWallet.js +62 -0
- package/dist/cjs/test/unit/descriptorAddress.d.ts +3 -0
- package/dist/cjs/test/unit/descriptorAddress.d.ts.map +1 -0
- package/dist/cjs/test/unit/descriptorAddress.js +103 -0
- package/dist/cjs/test/unit/explainTransaction.d.ts +2 -0
- package/dist/cjs/test/unit/explainTransaction.d.ts.map +1 -0
- package/dist/cjs/test/unit/explainTransaction.js +97 -0
- package/dist/cjs/test/unit/fixtures/bip322/fixtures.d.ts +15 -0
- package/dist/cjs/test/unit/fixtures/bip322/fixtures.d.ts.map +1 -0
- package/dist/cjs/test/unit/fixtures/bip322/fixtures.js +51 -0
- package/dist/cjs/test/unit/fixtures/psbtHexProof.d.ts +4 -0
- package/dist/cjs/test/unit/fixtures/psbtHexProof.d.ts.map +1 -0
- package/dist/cjs/test/unit/fixtures/psbtHexProof.js +9 -0
- package/dist/cjs/test/unit/impl/bch/unit/bch.d.ts +2 -0
- package/dist/cjs/test/unit/impl/bch/unit/bch.d.ts.map +1 -0
- package/dist/cjs/test/unit/impl/bch/unit/bch.js +71 -0
- package/dist/cjs/test/unit/impl/bcha/unit/index.d.ts +2 -0
- package/dist/cjs/test/unit/impl/bcha/unit/index.d.ts.map +1 -0
- package/dist/cjs/test/unit/impl/bcha/unit/index.js +41 -0
- package/dist/cjs/test/unit/impl/bsv/unit/index.d.ts +2 -0
- package/dist/cjs/test/unit/impl/bsv/unit/index.d.ts.map +1 -0
- package/dist/cjs/test/unit/impl/bsv/unit/index.js +34 -0
- package/dist/cjs/test/unit/impl/btg/unit/index.d.ts +2 -0
- package/dist/cjs/test/unit/impl/btg/unit/index.d.ts.map +1 -0
- package/dist/cjs/test/unit/impl/btg/unit/index.js +33 -0
- package/dist/cjs/test/unit/impl/dash/unit/index.d.ts +2 -0
- package/dist/cjs/test/unit/impl/dash/unit/index.d.ts.map +1 -0
- package/dist/cjs/test/unit/impl/dash/unit/index.js +34 -0
- package/dist/cjs/test/unit/impl/doge/unit/index.d.ts +2 -0
- package/dist/cjs/test/unit/impl/doge/unit/index.d.ts.map +1 -0
- package/dist/cjs/test/unit/impl/doge/unit/index.js +34 -0
- package/dist/cjs/test/unit/impl/zec/unit/index.d.ts +2 -0
- package/dist/cjs/test/unit/impl/zec/unit/index.d.ts.map +1 -0
- package/dist/cjs/test/unit/impl/zec/unit/index.js +30 -0
- package/dist/cjs/test/unit/keySignatures.d.ts +2 -0
- package/dist/cjs/test/unit/keySignatures.d.ts.map +1 -0
- package/dist/cjs/test/unit/keySignatures.js +54 -0
- package/dist/cjs/test/unit/keychains.d.ts +2 -0
- package/dist/cjs/test/unit/keychains.d.ts.map +1 -0
- package/dist/cjs/test/unit/keychains.js +87 -0
- package/dist/cjs/test/unit/offlineVault/halfSigned.d.ts +2 -0
- package/dist/cjs/test/unit/offlineVault/halfSigned.d.ts.map +1 -0
- package/dist/cjs/test/unit/offlineVault/halfSigned.js +124 -0
- package/dist/cjs/test/unit/parseTransaction.d.ts +2 -0
- package/dist/cjs/test/unit/parseTransaction.d.ts.map +1 -0
- package/dist/cjs/test/unit/parseTransaction.js +125 -0
- package/dist/cjs/test/unit/postProcessPrebuild.d.ts +2 -0
- package/dist/cjs/test/unit/postProcessPrebuild.d.ts.map +1 -0
- package/dist/cjs/test/unit/postProcessPrebuild.js +65 -0
- package/dist/cjs/test/unit/prebuildAndSign.d.ts +2 -0
- package/dist/cjs/test/unit/prebuildAndSign.d.ts.map +1 -0
- package/dist/cjs/test/unit/prebuildAndSign.js +249 -0
- package/dist/cjs/test/unit/recovery/backupKeyRecovery.d.ts +2 -0
- package/dist/cjs/test/unit/recovery/backupKeyRecovery.d.ts.map +1 -0
- package/dist/cjs/test/unit/recovery/backupKeyRecovery.js +136 -0
- package/dist/cjs/test/unit/recovery/backupKeyRecoveryUnspentGathering.d.ts +2 -0
- package/dist/cjs/test/unit/recovery/backupKeyRecoveryUnspentGathering.d.ts.map +1 -0
- package/dist/cjs/test/unit/recovery/backupKeyRecoveryUnspentGathering.js +144 -0
- package/dist/cjs/test/unit/recovery/crossChainRecovery.d.ts +2 -0
- package/dist/cjs/test/unit/recovery/crossChainRecovery.d.ts.map +1 -0
- package/dist/cjs/test/unit/recovery/crossChainRecovery.js +297 -0
- package/dist/cjs/test/unit/recovery/formatBackupKeyRecoveryResult.d.ts +2 -0
- package/dist/cjs/test/unit/recovery/formatBackupKeyRecoveryResult.d.ts.map +1 -0
- package/dist/cjs/test/unit/recovery/formatBackupKeyRecoveryResult.js +189 -0
- package/dist/cjs/test/unit/recovery/mock.d.ts +37 -0
- package/dist/cjs/test/unit/recovery/mock.d.ts.map +1 -0
- package/dist/cjs/test/unit/recovery/mock.js +111 -0
- package/dist/cjs/test/unit/signTransaction.d.ts +2 -0
- package/dist/cjs/test/unit/signTransaction.d.ts.map +1 -0
- package/dist/cjs/test/unit/signTransaction.js +245 -0
- package/dist/cjs/test/unit/testSpoofTransaction.d.ts +2 -0
- package/dist/cjs/test/unit/testSpoofTransaction.d.ts.map +1 -0
- package/dist/cjs/test/unit/testSpoofTransaction.js +114 -0
- package/dist/cjs/test/unit/transaction/descriptor/explainPsbt.d.ts +2 -0
- package/dist/cjs/test/unit/transaction/descriptor/explainPsbt.d.ts.map +1 -0
- package/dist/cjs/test/unit/transaction/descriptor/explainPsbt.js +64 -0
- package/dist/cjs/test/unit/transaction/descriptor/fixtures.utils.d.ts +6 -0
- package/dist/cjs/test/unit/transaction/descriptor/fixtures.utils.d.ts.map +1 -0
- package/dist/cjs/test/unit/transaction/descriptor/fixtures.utils.js +51 -0
- package/dist/cjs/test/unit/transaction/descriptor/parse.d.ts +2 -0
- package/dist/cjs/test/unit/transaction/descriptor/parse.d.ts.map +1 -0
- package/dist/cjs/test/unit/transaction/descriptor/parse.js +138 -0
- package/dist/cjs/test/unit/transaction/descriptor/sign.d.ts +2 -0
- package/dist/cjs/test/unit/transaction/descriptor/sign.d.ts.map +1 -0
- package/dist/cjs/test/unit/transaction/descriptor/sign.js +76 -0
- package/dist/cjs/test/unit/transaction/descriptor/validatePolicy.d.ts +2 -0
- package/dist/cjs/test/unit/transaction/descriptor/validatePolicy.d.ts.map +1 -0
- package/dist/cjs/test/unit/transaction/descriptor/validatePolicy.js +81 -0
- package/dist/cjs/test/unit/transaction/fixedScript/explainPsbt.d.ts +2 -0
- package/dist/cjs/test/unit/transaction/fixedScript/explainPsbt.d.ts.map +1 -0
- package/dist/cjs/test/unit/transaction/fixedScript/explainPsbt.js +193 -0
- package/dist/cjs/test/unit/transaction/fixedScript/parsePsbt.d.ts +2 -0
- package/dist/cjs/test/unit/transaction/fixedScript/parsePsbt.d.ts.map +1 -0
- package/dist/cjs/test/unit/transaction/fixedScript/parsePsbt.js +287 -0
- package/dist/cjs/test/unit/transaction/fixedScript/replayProtection.d.ts +2 -0
- package/dist/cjs/test/unit/transaction/fixedScript/replayProtection.d.ts.map +1 -0
- package/dist/cjs/test/unit/transaction/fixedScript/replayProtection.js +60 -0
- package/dist/cjs/test/unit/transaction/fixedScript/signPsbt.d.ts +2 -0
- package/dist/cjs/test/unit/transaction/fixedScript/signPsbt.d.ts.map +1 -0
- package/dist/cjs/test/unit/transaction/fixedScript/signPsbt.js +154 -0
- package/dist/cjs/test/unit/transaction/outputDifference.d.ts +2 -0
- package/dist/cjs/test/unit/transaction/outputDifference.d.ts.map +1 -0
- package/dist/cjs/test/unit/transaction/outputDifference.js +117 -0
- package/dist/cjs/test/unit/transaction.d.ts +2 -0
- package/dist/cjs/test/unit/transaction.d.ts.map +1 -0
- package/dist/cjs/test/unit/transaction.js +308 -0
- package/dist/cjs/test/unit/txFormat.d.ts +30 -0
- package/dist/cjs/test/unit/txFormat.d.ts.map +1 -0
- package/dist/cjs/test/unit/txFormat.js +161 -0
- package/dist/cjs/test/unit/util/address.d.ts +13 -0
- package/dist/cjs/test/unit/util/address.d.ts.map +1 -0
- package/dist/cjs/test/unit/util/address.js +15 -0
- package/dist/cjs/test/unit/util/assert.d.ts +3 -0
- package/dist/cjs/test/unit/util/assert.d.ts.map +1 -0
- package/dist/cjs/test/unit/util/assert.js +24 -0
- package/dist/cjs/test/unit/util/fixtures.d.ts +13 -0
- package/dist/cjs/test/unit/util/fixtures.d.ts.map +1 -0
- package/dist/cjs/test/unit/util/fixtures.js +105 -0
- package/dist/cjs/test/unit/util/index.d.ts +11 -0
- package/dist/cjs/test/unit/util/index.d.ts.map +1 -0
- package/dist/cjs/test/unit/util/index.js +27 -0
- package/dist/cjs/test/unit/util/keychains.d.ts +55 -0
- package/dist/cjs/test/unit/util/keychains.d.ts.map +1 -0
- package/dist/cjs/test/unit/util/keychains.js +122 -0
- package/dist/cjs/test/unit/util/nockBitGo.d.ts +10 -0
- package/dist/cjs/test/unit/util/nockBitGo.d.ts.map +1 -0
- package/dist/cjs/test/unit/util/nockBitGo.js +27 -0
- package/dist/cjs/test/unit/util/nockIndexerAPI.d.ts +8 -0
- package/dist/cjs/test/unit/util/nockIndexerAPI.d.ts.map +1 -0
- package/dist/cjs/test/unit/util/nockIndexerAPI.js +23 -0
- package/dist/cjs/test/unit/util/psbt.d.ts +19 -0
- package/dist/cjs/test/unit/util/psbt.d.ts.map +1 -0
- package/dist/cjs/test/unit/util/psbt.js +21 -0
- package/dist/cjs/test/unit/util/transaction.d.ts +28 -0
- package/dist/cjs/test/unit/util/transaction.d.ts.map +1 -0
- package/dist/cjs/test/unit/util/transaction.js +131 -0
- package/dist/cjs/test/unit/util/unspents.d.ts +71 -0
- package/dist/cjs/test/unit/util/unspents.d.ts.map +1 -0
- package/dist/cjs/test/unit/util/unspents.js +224 -0
- package/dist/cjs/test/unit/util/utxoCoins.d.ts +30 -0
- package/dist/cjs/test/unit/util/utxoCoins.d.ts.map +1 -0
- package/dist/cjs/test/unit/util/utxoCoins.js +175 -0
- package/dist/cjs/test/unit/util/wallet.d.ts +4 -0
- package/dist/cjs/test/unit/util/wallet.d.ts.map +1 -0
- package/dist/cjs/test/unit/util/wallet.js +9 -0
- package/dist/cjs/test/unit/verifyTransaction.d.ts +2 -0
- package/dist/cjs/test/unit/verifyTransaction.d.ts.map +1 -0
- package/dist/cjs/test/unit/verifyTransaction.js +327 -0
- package/dist/cjs/test/unit/wallet.d.ts +2 -0
- package/dist/cjs/test/unit/wallet.d.ts.map +1 -0
- package/dist/cjs/test/unit/wallet.js +251 -0
- package/dist/cjs/tsconfig.tsbuildinfo +1 -0
- package/dist/esm/abstractUtxoCoin.d.ts +461 -0
- package/dist/esm/abstractUtxoCoin.d.ts.map +1 -0
- package/dist/esm/abstractUtxoCoin.js +664 -0
- package/dist/esm/address/fixedScript.d.ts +44 -0
- package/dist/esm/address/fixedScript.d.ts.map +1 -0
- package/dist/esm/address/fixedScript.js +97 -0
- package/dist/esm/address/index.d.ts +2 -0
- package/dist/esm/address/index.d.ts.map +1 -0
- package/dist/esm/address/index.js +2 -0
- package/dist/esm/config.d.ts +9 -0
- package/dist/esm/config.js +11 -0
- package/dist/esm/descriptor/NamedDescriptor.d.ts +19 -0
- package/dist/esm/descriptor/NamedDescriptor.d.ts.map +1 -0
- package/dist/esm/descriptor/NamedDescriptor.js +37 -0
- package/dist/esm/descriptor/assertDescriptorWalletAddress.d.ts +5 -0
- package/dist/esm/descriptor/assertDescriptorWalletAddress.d.ts.map +1 -0
- package/dist/esm/descriptor/assertDescriptorWalletAddress.js +27 -0
- package/dist/esm/descriptor/builder/builder.d.ts +12 -0
- package/dist/esm/descriptor/builder/builder.d.ts.map +1 -0
- package/dist/esm/descriptor/builder/builder.js +34 -0
- package/dist/esm/descriptor/builder/index.d.ts +3 -0
- package/dist/esm/descriptor/builder/index.d.ts.map +1 -0
- package/dist/esm/descriptor/builder/index.js +3 -0
- package/dist/esm/descriptor/builder/parse.d.ts +5 -0
- package/dist/esm/descriptor/builder/parse.d.ts.map +1 -0
- package/dist/esm/descriptor/builder/parse.js +112 -0
- package/dist/esm/descriptor/createWallet/createDescriptorWallet.d.ts +20 -0
- package/dist/esm/descriptor/createWallet/createDescriptorWallet.d.ts.map +1 -0
- package/dist/esm/descriptor/createWallet/createDescriptorWallet.js +37 -0
- package/dist/esm/descriptor/createWallet/createDescriptors.d.ts +12 -0
- package/dist/esm/descriptor/createWallet/createDescriptors.d.ts.map +1 -0
- package/dist/esm/descriptor/createWallet/createDescriptors.js +29 -0
- package/dist/esm/descriptor/createWallet/index.d.ts +3 -0
- package/dist/esm/descriptor/createWallet/index.d.ts.map +1 -0
- package/dist/esm/descriptor/createWallet/index.js +3 -0
- package/dist/esm/descriptor/descriptorWallet.d.ts +19 -0
- package/dist/esm/descriptor/descriptorWallet.d.ts.map +1 -0
- package/dist/esm/descriptor/descriptorWallet.js +16 -0
- package/dist/esm/descriptor/index.d.ts +8 -0
- package/dist/esm/descriptor/index.d.ts.map +1 -0
- package/dist/esm/descriptor/index.js +7 -0
- package/dist/esm/descriptor/validatePolicy.d.ts +22 -0
- package/dist/esm/descriptor/validatePolicy.d.ts.map +1 -0
- package/dist/esm/descriptor/validatePolicy.js +80 -0
- package/dist/esm/impl/bch/bch.d.ts +22 -0
- package/dist/esm/impl/bch/bch.d.ts.map +1 -0
- package/dist/esm/impl/bch/bch.js +39 -0
- package/dist/esm/impl/bch/index.d.ts +3 -0
- package/dist/esm/impl/bch/index.d.ts.map +1 -0
- package/dist/esm/impl/bch/index.js +3 -0
- package/dist/esm/impl/bch/tbch.d.ts +12 -0
- package/dist/esm/impl/bch/tbch.d.ts.map +1 -0
- package/dist/esm/impl/bch/tbch.js +11 -0
- package/dist/esm/impl/bcha/bcha.d.ts +9 -0
- package/dist/esm/impl/bcha/bcha.d.ts.map +1 -0
- package/dist/esm/impl/bcha/bcha.js +11 -0
- package/dist/esm/impl/bcha/index.d.ts +3 -0
- package/dist/esm/impl/bcha/index.d.ts.map +1 -0
- package/dist/esm/impl/bcha/index.js +3 -0
- package/dist/esm/impl/bcha/tbcha.d.ts +12 -0
- package/dist/esm/impl/bcha/tbcha.d.ts.map +1 -0
- package/dist/esm/impl/bcha/tbcha.js +11 -0
- package/dist/esm/impl/bsv/bsv.d.ts +9 -0
- package/dist/esm/impl/bsv/bsv.d.ts.map +1 -0
- package/dist/esm/impl/bsv/bsv.js +11 -0
- package/dist/esm/impl/bsv/index.d.ts +3 -0
- package/dist/esm/impl/bsv/index.d.ts.map +1 -0
- package/dist/esm/impl/bsv/index.js +3 -0
- package/dist/esm/impl/bsv/tbsv.d.ts +12 -0
- package/dist/esm/impl/bsv/tbsv.d.ts.map +1 -0
- package/dist/esm/impl/bsv/tbsv.js +11 -0
- package/dist/esm/impl/btc/btc.d.ts +15 -0
- package/dist/esm/impl/btc/btc.d.ts.map +1 -0
- package/dist/esm/impl/btc/btc.js +18 -0
- package/dist/esm/impl/btc/index.d.ts +7 -0
- package/dist/esm/impl/btc/index.d.ts.map +1 -0
- package/dist/esm/impl/btc/index.js +7 -0
- package/dist/esm/impl/btc/inscriptionBuilder.d.ts +61 -0
- package/dist/esm/impl/btc/inscriptionBuilder.d.ts.map +1 -0
- package/dist/esm/impl/btc/inscriptionBuilder.js +164 -0
- package/dist/esm/impl/btc/tbtc.d.ts +12 -0
- package/dist/esm/impl/btc/tbtc.d.ts.map +1 -0
- package/dist/esm/impl/btc/tbtc.js +11 -0
- package/dist/esm/impl/btc/tbtc4.d.ts +12 -0
- package/dist/esm/impl/btc/tbtc4.d.ts.map +1 -0
- package/dist/esm/impl/btc/tbtc4.js +11 -0
- package/dist/esm/impl/btc/tbtcbgsig.d.ts +12 -0
- package/dist/esm/impl/btc/tbtcbgsig.d.ts.map +1 -0
- package/dist/esm/impl/btc/tbtcbgsig.js +11 -0
- package/dist/esm/impl/btc/tbtcsig.d.ts +12 -0
- package/dist/esm/impl/btc/tbtcsig.d.ts.map +1 -0
- package/dist/esm/impl/btc/tbtcsig.js +11 -0
- package/dist/esm/impl/btg/btg.d.ts +9 -0
- package/dist/esm/impl/btg/btg.d.ts.map +1 -0
- package/dist/esm/impl/btg/btg.js +11 -0
- package/dist/esm/impl/btg/index.d.ts +2 -0
- package/dist/esm/impl/btg/index.d.ts.map +1 -0
- package/dist/esm/impl/btg/index.js +2 -0
- package/dist/esm/impl/dash/dash.d.ts +9 -0
- package/dist/esm/impl/dash/dash.d.ts.map +1 -0
- package/dist/esm/impl/dash/dash.js +11 -0
- package/dist/esm/impl/dash/index.d.ts +3 -0
- package/dist/esm/impl/dash/index.d.ts.map +1 -0
- package/dist/esm/impl/dash/index.js +3 -0
- package/dist/esm/impl/dash/tdash.d.ts +12 -0
- package/dist/esm/impl/dash/tdash.d.ts.map +1 -0
- package/dist/esm/impl/dash/tdash.js +11 -0
- package/dist/esm/impl/doge/doge.d.ts +35 -0
- package/dist/esm/impl/doge/doge.d.ts.map +1 -0
- package/dist/esm/impl/doge/doge.js +75 -0
- package/dist/esm/impl/doge/index.d.ts +3 -0
- package/dist/esm/impl/doge/index.d.ts.map +1 -0
- package/dist/esm/impl/doge/index.js +3 -0
- package/dist/esm/impl/doge/tdoge.d.ts +12 -0
- package/dist/esm/impl/doge/tdoge.d.ts.map +1 -0
- package/dist/esm/impl/doge/tdoge.js +11 -0
- package/dist/esm/impl/index.d.ts +10 -0
- package/dist/esm/impl/index.d.ts.map +1 -0
- package/dist/esm/impl/index.js +10 -0
- package/dist/esm/impl/ltc/index.d.ts +3 -0
- package/dist/esm/impl/ltc/index.d.ts.map +1 -0
- package/dist/esm/impl/ltc/index.js +3 -0
- package/dist/esm/impl/ltc/ltc.d.ts +8 -0
- package/dist/esm/impl/ltc/ltc.d.ts.map +1 -0
- package/dist/esm/impl/ltc/ltc.js +11 -0
- package/dist/esm/impl/ltc/tltc.d.ts +8 -0
- package/dist/esm/impl/ltc/tltc.d.ts.map +1 -0
- package/dist/esm/impl/ltc/tltc.js +11 -0
- package/dist/esm/impl/zec/index.d.ts +3 -0
- package/dist/esm/impl/zec/index.d.ts.map +1 -0
- package/dist/esm/impl/zec/index.js +3 -0
- package/dist/esm/impl/zec/tzec.d.ts +9 -0
- package/dist/esm/impl/zec/tzec.d.ts.map +1 -0
- package/dist/esm/impl/zec/tzec.js +11 -0
- package/dist/esm/impl/zec/zec.d.ts +12 -0
- package/dist/esm/impl/zec/zec.d.ts.map +1 -0
- package/dist/esm/impl/zec/zec.js +11 -0
- package/dist/esm/index.d.ts +23 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +23 -0
- package/dist/esm/keychains.d.ts +56 -0
- package/dist/esm/keychains.d.ts.map +1 -0
- package/dist/esm/keychains.js +99 -0
- package/dist/esm/names.d.ts +36 -0
- package/dist/esm/names.d.ts.map +1 -0
- package/dist/esm/names.js +184 -0
- package/dist/esm/offlineVault/OfflineVaultHalfSigned.d.ts +9 -0
- package/dist/esm/offlineVault/OfflineVaultHalfSigned.d.ts.map +1 -0
- package/dist/esm/offlineVault/OfflineVaultHalfSigned.js +20 -0
- package/dist/esm/offlineVault/OfflineVaultSignable.d.ts +46 -0
- package/dist/esm/offlineVault/OfflineVaultSignable.d.ts.map +1 -0
- package/dist/esm/offlineVault/OfflineVaultSignable.js +18 -0
- package/dist/esm/offlineVault/TransactionExplanation.d.ts +16 -0
- package/dist/esm/offlineVault/TransactionExplanation.d.ts.map +1 -0
- package/dist/esm/offlineVault/TransactionExplanation.js +12 -0
- package/dist/esm/offlineVault/descriptor/index.d.ts +2 -0
- package/dist/esm/offlineVault/descriptor/index.d.ts.map +1 -0
- package/dist/esm/offlineVault/descriptor/index.js +2 -0
- package/dist/esm/offlineVault/descriptor/transaction.d.ts +39 -0
- package/dist/esm/offlineVault/descriptor/transaction.d.ts.map +1 -0
- package/dist/esm/offlineVault/descriptor/transaction.js +41 -0
- package/dist/esm/offlineVault/index.d.ts +6 -0
- package/dist/esm/offlineVault/index.d.ts.map +1 -0
- package/dist/esm/offlineVault/index.js +4 -0
- package/dist/esm/recovery/RecoveryProvider.d.ts +20 -0
- package/dist/esm/recovery/RecoveryProvider.d.ts.map +1 -0
- package/dist/esm/recovery/RecoveryProvider.js +19 -0
- package/dist/esm/recovery/backupKeyRecovery.d.ts +158 -0
- package/dist/esm/recovery/backupKeyRecovery.d.ts.map +1 -0
- package/dist/esm/recovery/backupKeyRecovery.js +400 -0
- package/dist/esm/recovery/baseApi.d.ts +24 -0
- package/dist/esm/recovery/baseApi.d.ts.map +1 -0
- package/dist/esm/recovery/baseApi.js +64 -0
- package/dist/esm/recovery/coingeckoApi.d.ts +6 -0
- package/dist/esm/recovery/coingeckoApi.d.ts.map +1 -0
- package/dist/esm/recovery/coingeckoApi.js +40 -0
- package/dist/esm/recovery/crossChainRecovery.d.ts +97 -0
- package/dist/esm/recovery/crossChainRecovery.d.ts.map +1 -0
- package/dist/esm/recovery/crossChainRecovery.js +292 -0
- package/dist/esm/recovery/index.d.ts +7 -0
- package/dist/{src → esm}/recovery/index.d.ts.map +1 -1
- package/dist/esm/recovery/index.js +7 -0
- package/dist/esm/recovery/mempoolApi.d.ts +7 -0
- package/dist/{src → esm}/recovery/mempoolApi.d.ts.map +1 -1
- package/dist/esm/recovery/mempoolApi.js +29 -0
- package/dist/esm/recovery/psbt.d.ts +62 -0
- package/dist/esm/recovery/psbt.d.ts.map +1 -0
- package/dist/esm/recovery/psbt.js +145 -0
- package/dist/esm/tnumber.d.ts +4 -0
- package/dist/esm/tnumber.d.ts.map +1 -0
- package/dist/esm/tnumber.js +9 -0
- package/dist/esm/transaction/bip322.d.ts +27 -0
- package/dist/esm/transaction/bip322.d.ts.map +1 -0
- package/dist/esm/transaction/bip322.js +100 -0
- package/dist/esm/transaction/common/verifyPayGoAmount.d.ts +1 -0
- package/dist/esm/transaction/common/verifyPayGoAmount.d.ts.map +1 -0
- package/dist/esm/transaction/common/verifyPayGoAmount.js +1 -0
- package/dist/esm/transaction/decode.d.ts +13 -0
- package/dist/esm/transaction/decode.d.ts.map +1 -0
- package/dist/esm/transaction/decode.js +49 -0
- package/dist/esm/transaction/descriptor/explainPsbt.d.ts +5 -0
- package/dist/esm/transaction/descriptor/explainPsbt.d.ts.map +1 -0
- package/dist/esm/transaction/descriptor/explainPsbt.js +42 -0
- package/dist/esm/transaction/descriptor/index.d.ts +7 -0
- package/dist/esm/transaction/descriptor/index.d.ts.map +1 -0
- package/dist/esm/transaction/descriptor/index.js +6 -0
- package/dist/esm/transaction/descriptor/parse.d.ts +19 -0
- package/dist/esm/transaction/descriptor/parse.d.ts.map +1 -0
- package/dist/esm/transaction/descriptor/parse.js +86 -0
- package/dist/esm/transaction/descriptor/parseToAmountType.d.ts +14 -0
- package/dist/esm/transaction/descriptor/parseToAmountType.d.ts.map +1 -0
- package/dist/esm/transaction/descriptor/parseToAmountType.js +55 -0
- package/dist/esm/transaction/descriptor/recipient.d.ts +5 -0
- package/dist/esm/transaction/descriptor/recipient.d.ts.map +1 -0
- package/dist/esm/transaction/descriptor/recipient.js +2 -0
- package/dist/esm/transaction/descriptor/signPsbt.d.ts +24 -0
- package/dist/esm/transaction/descriptor/signPsbt.d.ts.map +1 -0
- package/dist/esm/transaction/descriptor/signPsbt.js +39 -0
- package/dist/esm/transaction/descriptor/verifyTransaction.d.ts +37 -0
- package/dist/esm/transaction/descriptor/verifyTransaction.d.ts.map +1 -0
- package/dist/esm/transaction/descriptor/verifyTransaction.js +71 -0
- package/dist/esm/transaction/explainTransaction.d.ts +21 -0
- package/dist/esm/transaction/explainTransaction.d.ts.map +1 -0
- package/dist/esm/transaction/explainTransaction.js +54 -0
- package/dist/esm/transaction/fetchInputs.d.ts +27 -0
- package/dist/esm/transaction/fetchInputs.d.ts.map +1 -0
- package/dist/esm/transaction/fetchInputs.js +74 -0
- package/dist/esm/transaction/fixedScript/SigningError.d.ts +24 -0
- package/dist/esm/transaction/fixedScript/SigningError.d.ts.map +1 -0
- package/dist/esm/transaction/fixedScript/SigningError.js +26 -0
- package/dist/esm/transaction/fixedScript/explainPsbtWasm.d.ts +41 -0
- package/dist/esm/transaction/fixedScript/explainPsbtWasm.d.ts.map +1 -0
- package/dist/esm/transaction/fixedScript/explainPsbtWasm.js +115 -0
- package/dist/esm/transaction/fixedScript/explainTransaction.d.ts +80 -0
- package/dist/esm/transaction/fixedScript/explainTransaction.d.ts.map +1 -0
- package/dist/esm/transaction/fixedScript/explainTransaction.js +309 -0
- package/dist/esm/transaction/fixedScript/index.d.ts +10 -0
- package/dist/esm/transaction/fixedScript/index.d.ts.map +1 -0
- package/dist/esm/transaction/fixedScript/index.js +9 -0
- package/dist/esm/transaction/fixedScript/musig2.d.ts +4 -0
- package/dist/esm/transaction/fixedScript/musig2.d.ts.map +1 -0
- package/dist/esm/transaction/fixedScript/musig2.js +2 -0
- package/dist/esm/transaction/fixedScript/parseOutput.d.ts +28 -0
- package/dist/esm/transaction/fixedScript/parseOutput.d.ts.map +1 -0
- package/dist/esm/transaction/fixedScript/parseOutput.js +209 -0
- package/dist/esm/transaction/fixedScript/parseTransaction.d.ts +8 -0
- package/dist/esm/transaction/fixedScript/parseTransaction.d.ts.map +1 -0
- package/dist/esm/transaction/fixedScript/parseTransaction.js +221 -0
- package/dist/esm/transaction/fixedScript/replayProtection.d.ts +10 -0
- package/dist/esm/transaction/fixedScript/replayProtection.d.ts.map +1 -0
- package/dist/esm/transaction/fixedScript/replayProtection.js +38 -0
- package/dist/esm/transaction/fixedScript/signLegacyTransaction.d.ts +32 -0
- package/dist/esm/transaction/fixedScript/signLegacyTransaction.d.ts.map +1 -0
- package/dist/esm/transaction/fixedScript/signLegacyTransaction.js +116 -0
- package/dist/esm/transaction/fixedScript/signPsbtUtxolib.d.ts +20 -0
- package/dist/esm/transaction/fixedScript/signPsbtUtxolib.d.ts.map +1 -0
- package/dist/esm/transaction/fixedScript/signPsbtUtxolib.js +117 -0
- package/dist/esm/transaction/fixedScript/signPsbtWasm.d.ts +20 -0
- package/dist/esm/transaction/fixedScript/signPsbtWasm.d.ts.map +1 -0
- package/dist/esm/transaction/fixedScript/signPsbtWasm.js +109 -0
- package/dist/esm/transaction/fixedScript/signTransaction.d.ts +34 -0
- package/dist/esm/transaction/fixedScript/signTransaction.d.ts.map +1 -0
- package/dist/esm/transaction/fixedScript/signTransaction.js +71 -0
- package/dist/esm/transaction/fixedScript/verifyTransaction.d.ts +21 -0
- package/dist/esm/transaction/fixedScript/verifyTransaction.d.ts.map +1 -0
- package/dist/esm/transaction/fixedScript/verifyTransaction.js +160 -0
- package/dist/esm/transaction/getPayGoVerificationPubkey.d.ts +9 -0
- package/dist/esm/transaction/getPayGoVerificationPubkey.d.ts.map +1 -0
- package/dist/esm/transaction/getPayGoVerificationPubkey.js +17 -0
- package/dist/esm/transaction/index.d.ts +10 -0
- package/dist/esm/transaction/index.d.ts.map +1 -0
- package/dist/esm/transaction/index.js +10 -0
- package/dist/esm/transaction/outputDifference.d.ts +44 -0
- package/dist/esm/transaction/outputDifference.d.ts.map +1 -0
- package/dist/esm/transaction/outputDifference.js +45 -0
- package/dist/esm/transaction/parseTransaction.d.ts +4 -0
- package/dist/esm/transaction/parseTransaction.d.ts.map +1 -0
- package/dist/esm/transaction/parseTransaction.js +12 -0
- package/dist/esm/transaction/recipient.d.ts +34 -0
- package/dist/esm/transaction/recipient.d.ts.map +1 -0
- package/dist/esm/transaction/recipient.js +61 -0
- package/dist/esm/transaction/signTransaction.d.ts +6 -0
- package/dist/esm/transaction/signTransaction.d.ts.map +1 -0
- package/dist/esm/transaction/signTransaction.js +76 -0
- package/dist/esm/transaction/types.d.ts +50 -0
- package/dist/esm/transaction/types.d.ts.map +1 -0
- package/dist/esm/transaction/types.js +4 -0
- package/dist/esm/transaction/verifyTransaction.d.ts +4 -0
- package/dist/esm/transaction/verifyTransaction.d.ts.map +1 -0
- package/dist/esm/transaction/verifyTransaction.js +14 -0
- package/dist/esm/unspent.d.ts +55 -0
- package/dist/esm/unspent.d.ts.map +1 -0
- package/dist/esm/unspent.js +8 -0
- package/dist/esm/verifyKey.d.ts +21 -0
- package/dist/esm/verifyKey.d.ts.map +1 -0
- package/dist/esm/verifyKey.js +100 -0
- package/dist/esm/wallet.d.ts +15 -0
- package/dist/esm/wallet.d.ts.map +1 -0
- package/dist/esm/wallet.js +5 -0
- package/dist/esm/wasmUtil.d.ts +34 -0
- package/dist/esm/wasmUtil.d.ts.map +1 -0
- package/dist/esm/wasmUtil.js +54 -0
- package/package.json +47 -20
- package/.eslintignore +0 -5
- package/CHANGELOG.md +0 -235
- package/dist/src/abstractUtxoCoin.d.ts +0 -392
- package/dist/src/abstractUtxoCoin.d.ts.map +0 -1
- package/dist/src/abstractUtxoCoin.js +0 -931
- package/dist/src/config.js +0 -14
- package/dist/src/index.d.ts +0 -6
- package/dist/src/index.d.ts.map +0 -1
- package/dist/src/index.js +0 -18
- package/dist/src/parseOutput.d.ts +0 -22
- package/dist/src/parseOutput.d.ts.map +0 -1
- package/dist/src/parseOutput.js +0 -170
- package/dist/src/recovery/RecoveryProvider.d.ts.map +0 -1
- package/dist/src/recovery/RecoveryProvider.js +0 -24
- package/dist/src/recovery/backupKeyRecovery.d.ts +0 -62
- package/dist/src/recovery/backupKeyRecovery.d.ts.map +0 -1
- package/dist/src/recovery/backupKeyRecovery.js +0 -293
- package/dist/src/recovery/baseApi.d.ts.map +0 -1
- package/dist/src/recovery/baseApi.js +0 -73
- package/dist/src/recovery/coingeckoApi.d.ts.map +0 -1
- package/dist/src/recovery/coingeckoApi.js +0 -47
- package/dist/src/recovery/crossChainRecovery.d.ts.map +0 -1
- package/dist/src/recovery/crossChainRecovery.js +0 -294
- package/dist/src/recovery/mempoolApi.js +0 -33
- package/dist/src/recovery/smartbitApi.d.ts +0 -11
- package/dist/src/recovery/smartbitApi.d.ts.map +0 -1
- package/dist/src/recovery/smartbitApi.js +0 -36
- package/dist/src/replayProtection.d.ts +0 -4
- package/dist/src/replayProtection.d.ts.map +0 -1
- package/dist/src/replayProtection.js +0 -21
- package/dist/src/sign.d.ts +0 -31
- package/dist/src/sign.d.ts.map +0 -1
- package/dist/src/sign.js +0 -104
- package/dist/tsconfig.tsbuildinfo +0 -8017
- /package/dist/{src → cjs/src}/config.d.ts +0 -0
- /package/dist/{src → cjs/src}/recovery/mempoolApi.d.ts +0 -0
- /package/dist/{src → esm}/config.d.ts.map +0 -0
|
@@ -0,0 +1,287 @@
|
|
|
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
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
const strict_1 = __importDefault(require("node:assert/strict"));
|
|
40
|
+
const sinon = __importStar(require("sinon"));
|
|
41
|
+
const utxolib = __importStar(require("@bitgo-beta/utxo-lib"));
|
|
42
|
+
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
43
|
+
const wasm_utxo_1 = require("@bitgo/wasm-utxo");
|
|
44
|
+
const parseTransaction_1 = require("../../../../src/transaction/fixedScript/parseTransaction");
|
|
45
|
+
const util_1 = require("../../util");
|
|
46
|
+
const fixedScript_1 = require("../../../../src/transaction/fixedScript");
|
|
47
|
+
const names_1 = require("../../../../src/names");
|
|
48
|
+
function getTxParamsFromExplanation(explanation, { externalCustomChangeAddress }) {
|
|
49
|
+
// The external outputs are the ones that are in outputs but not in changeOutputs
|
|
50
|
+
const changeAddresses = new Set(explanation.changeOutputs.map((o) => o.address));
|
|
51
|
+
let externalOutputs = explanation.outputs.filter((o) => o.address && !changeAddresses.has(o.address));
|
|
52
|
+
let changeAddress;
|
|
53
|
+
if (externalCustomChangeAddress) {
|
|
54
|
+
// convert an external output to a change output
|
|
55
|
+
//
|
|
56
|
+
// in combination with allowExternalChangeAddress, this allows an external
|
|
57
|
+
// output on the transaction without a size constraint
|
|
58
|
+
const externalOutput = externalOutputs[0];
|
|
59
|
+
if (!externalOutput) {
|
|
60
|
+
throw new Error('no external output found');
|
|
61
|
+
}
|
|
62
|
+
changeAddress = externalOutput.address;
|
|
63
|
+
externalOutputs = externalOutputs.slice(1);
|
|
64
|
+
}
|
|
65
|
+
return {
|
|
66
|
+
recipients: externalOutputs.map((output) => ({
|
|
67
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
68
|
+
address: output.address,
|
|
69
|
+
amount: output.amount,
|
|
70
|
+
})),
|
|
71
|
+
changeAddress,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
function getChangeInfoFromPsbt(psbt) {
|
|
75
|
+
try {
|
|
76
|
+
return utxolib.bitgo.findInternalOutputIndices(psbt).map((i) => {
|
|
77
|
+
const output = psbt.data.outputs[i];
|
|
78
|
+
const derivations = output.bip32Derivation ?? output.tapBip32Derivation ?? undefined;
|
|
79
|
+
if (!derivations || derivations.length !== 3) {
|
|
80
|
+
throw new Error('expected 3 derivation paths');
|
|
81
|
+
}
|
|
82
|
+
const path = derivations[0].path;
|
|
83
|
+
const { chain, index } = utxolib.bitgo.getChainAndIndexFromPath(path);
|
|
84
|
+
return {
|
|
85
|
+
address: wasm_utxo_1.address.fromOutputScriptWithCoin(psbt.txOutputs[i].script, (0, names_1.getCoinName)(psbt.network)),
|
|
86
|
+
chain,
|
|
87
|
+
index,
|
|
88
|
+
};
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
catch (e) {
|
|
92
|
+
if (e instanceof utxolib.bitgo.ErrorNoMultiSigInputFound) {
|
|
93
|
+
return undefined;
|
|
94
|
+
}
|
|
95
|
+
throw e;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
function describeParseTransactionWith(acidTest, label, backend, { txParams, externalCustomChangeAddress = false, expectedExplicitExternalSpendAmount, expectedImplicitExternalSpendAmount, txFormat = 'psbt', }) {
|
|
99
|
+
describe(`${acidTest.name}/${label}`, function () {
|
|
100
|
+
let refParsedTransaction;
|
|
101
|
+
let coin;
|
|
102
|
+
let mockWallet;
|
|
103
|
+
let stubExplainTransaction;
|
|
104
|
+
before('prepare', async function () {
|
|
105
|
+
const coinName = (0, names_1.getCoinName)(acidTest.network);
|
|
106
|
+
coin = (0, util_1.getUtxoCoin)(coinName);
|
|
107
|
+
// Create PSBT and explanation
|
|
108
|
+
const psbt = acidTest.createPsbt();
|
|
109
|
+
const tx = psbt.getUnsignedTx();
|
|
110
|
+
const txHash = tx.getId();
|
|
111
|
+
let explanation;
|
|
112
|
+
if (txFormat === 'psbt') {
|
|
113
|
+
if (backend === 'utxolib') {
|
|
114
|
+
explanation = (0, fixedScript_1.explainPsbt)(psbt, { pubs: acidTest.rootWalletKeys }, coinName, {
|
|
115
|
+
strict: true,
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
else if (backend === 'wasm') {
|
|
119
|
+
const wasmPsbt = wasm_utxo_1.fixedScriptWallet.BitGoPsbt.fromBytes(psbt.toBuffer(), utxolib.getNetworkName(acidTest.network));
|
|
120
|
+
explanation = (0, fixedScript_1.explainPsbtWasm)(wasmPsbt, acidTest.rootWalletKeys.triple.map((k) => k.neutered().toBase58()), {
|
|
121
|
+
replayProtection: {
|
|
122
|
+
publicKeys: [acidTest.getReplayProtectionPublicKey()],
|
|
123
|
+
},
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
throw new Error(`Invalid backend: ${backend}`);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
else if (txFormat === 'legacy') {
|
|
131
|
+
const pubs = acidTest.rootWalletKeys.triple.map((k) => k.neutered().toBase58());
|
|
132
|
+
// Extract change info from PSBT to pass to explainLegacyTx
|
|
133
|
+
const changeInfo = getChangeInfoFromPsbt(psbt);
|
|
134
|
+
explanation = (0, fixedScript_1.explainLegacyTx)(tx, { pubs, changeInfo }, coinName);
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
throw new Error(`Invalid txFormat: ${txFormat}`);
|
|
138
|
+
}
|
|
139
|
+
// Determine txParams
|
|
140
|
+
let resolvedTxParams;
|
|
141
|
+
if (txParams === 'inferFromExplanation' || txParams === undefined) {
|
|
142
|
+
resolvedTxParams = getTxParamsFromExplanation(explanation, { externalCustomChangeAddress });
|
|
143
|
+
}
|
|
144
|
+
else if ('rbfTxIds' in txParams) {
|
|
145
|
+
// Replace placeholder txHash with actual computed txHash
|
|
146
|
+
resolvedTxParams = {
|
|
147
|
+
rbfTxIds: txParams.rbfTxIds.map((hash) => (hash === 'PLACEHOLDER' ? txHash : hash)),
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
else {
|
|
151
|
+
resolvedTxParams = txParams;
|
|
152
|
+
}
|
|
153
|
+
if (externalCustomChangeAddress) {
|
|
154
|
+
resolvedTxParams.allowExternalChangeAddress = true;
|
|
155
|
+
}
|
|
156
|
+
// Create mock wallet
|
|
157
|
+
mockWallet = sinon.createStubInstance(sdk_core_1.Wallet);
|
|
158
|
+
mockWallet.id.returns('test-wallet-id');
|
|
159
|
+
mockWallet.coin.returns(coin.getChain());
|
|
160
|
+
mockWallet.coinSpecific.returns(undefined);
|
|
161
|
+
// Mock getTransaction for RBF case
|
|
162
|
+
if ('rbfTxIds' in resolvedTxParams) {
|
|
163
|
+
const rbfTxParams = getTxParamsFromExplanation(explanation, { externalCustomChangeAddress: false });
|
|
164
|
+
mockWallet.getTransaction.resolves({
|
|
165
|
+
outputs: rbfTxParams.recipients.map((r) => ({
|
|
166
|
+
valueString: typeof r.amount === 'string' ? r.amount : r.amount.toString(),
|
|
167
|
+
address: r.address,
|
|
168
|
+
// wallet field is undefined for external outputs (not self-sends)
|
|
169
|
+
})),
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
// Mock verification options with keychains to disable networking
|
|
173
|
+
// Use the same keychains that were used to create the PSBT
|
|
174
|
+
const pubs = acidTest.rootWalletKeys.triple.map((k) => k.neutered().toBase58());
|
|
175
|
+
const verification = {
|
|
176
|
+
disableNetworking: true,
|
|
177
|
+
keychains: {
|
|
178
|
+
user: { id: '0', pub: pubs[0], type: 'independent' },
|
|
179
|
+
backup: { id: '1', pub: pubs[1], type: 'independent' },
|
|
180
|
+
bitgo: { id: '2', pub: pubs[2], type: 'independent' },
|
|
181
|
+
},
|
|
182
|
+
};
|
|
183
|
+
// Stub explainTransaction to return the explanation without making network calls
|
|
184
|
+
stubExplainTransaction = sinon.stub(coin, 'explainTransaction').resolves(explanation);
|
|
185
|
+
let txPrebuild;
|
|
186
|
+
if (txFormat === 'psbt') {
|
|
187
|
+
txPrebuild = {
|
|
188
|
+
txHex: psbt.toHex(),
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
else if (txFormat === 'legacy') {
|
|
192
|
+
txPrebuild = {
|
|
193
|
+
txHex: psbt.getUnsignedTx().toHex(),
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
else {
|
|
197
|
+
throw new Error(`Invalid txFormat: ${txFormat}`);
|
|
198
|
+
}
|
|
199
|
+
refParsedTransaction = await (0, parseTransaction_1.parseTransaction)(coin, {
|
|
200
|
+
wallet: mockWallet,
|
|
201
|
+
txParams: resolvedTxParams,
|
|
202
|
+
txPrebuild,
|
|
203
|
+
verification,
|
|
204
|
+
});
|
|
205
|
+
});
|
|
206
|
+
after('cleanup', function () {
|
|
207
|
+
if (stubExplainTransaction) {
|
|
208
|
+
stubExplainTransaction.restore();
|
|
209
|
+
}
|
|
210
|
+
});
|
|
211
|
+
it('should parse transaction without network calls', function () {
|
|
212
|
+
strict_1.default.ok(refParsedTransaction);
|
|
213
|
+
strict_1.default.ok(refParsedTransaction.keychains);
|
|
214
|
+
strict_1.default.ok(refParsedTransaction.outputs);
|
|
215
|
+
});
|
|
216
|
+
it('should have valid keychains', function () {
|
|
217
|
+
strict_1.default.ok(refParsedTransaction.keychains.user);
|
|
218
|
+
strict_1.default.ok(refParsedTransaction.keychains.backup);
|
|
219
|
+
strict_1.default.ok(refParsedTransaction.keychains.bitgo);
|
|
220
|
+
const pubs = acidTest.rootWalletKeys.triple.map((k) => k.neutered().toBase58());
|
|
221
|
+
strict_1.default.strictEqual(refParsedTransaction.keychains.user.pub, pubs[0]);
|
|
222
|
+
strict_1.default.strictEqual(refParsedTransaction.keychains.backup.pub, pubs[1]);
|
|
223
|
+
strict_1.default.strictEqual(refParsedTransaction.keychains.bitgo.pub, pubs[2]);
|
|
224
|
+
});
|
|
225
|
+
it('should have outputs classified as internal or external', function () {
|
|
226
|
+
// Since we didn't specify any recipients, outputs will be classified based on whether they can be
|
|
227
|
+
// verified as wallet addresses. Some may be external if address verification fails without a proper wallet setup.
|
|
228
|
+
const totalOutputs = refParsedTransaction.outputs.length;
|
|
229
|
+
const changeOutputs = refParsedTransaction.changeOutputs.length;
|
|
230
|
+
const externalOutputs = refParsedTransaction.outputs.filter((o) => o.external === true).length;
|
|
231
|
+
strict_1.default.strictEqual(externalOutputs, 3);
|
|
232
|
+
strict_1.default.ok(totalOutputs > 0, 'should have at least one output');
|
|
233
|
+
strict_1.default.strictEqual(changeOutputs + externalOutputs, totalOutputs, 'all outputs should be classified');
|
|
234
|
+
});
|
|
235
|
+
it('should have expected explicit and implicit external spend amounts', function () {
|
|
236
|
+
strict_1.default.strictEqual(BigInt(refParsedTransaction.explicitExternalSpendAmount), expectedExplicitExternalSpendAmount);
|
|
237
|
+
strict_1.default.strictEqual(BigInt(refParsedTransaction.implicitExternalSpendAmount), expectedImplicitExternalSpendAmount);
|
|
238
|
+
});
|
|
239
|
+
});
|
|
240
|
+
}
|
|
241
|
+
function describeTransaction(backend, filter = () => true) {
|
|
242
|
+
describe(`parseTransaction (${backend})`, function () {
|
|
243
|
+
utxolib.testutil.AcidTest.suite()
|
|
244
|
+
.filter(filter)
|
|
245
|
+
.forEach((test) => {
|
|
246
|
+
// Default case: psbt format, infer recipients from explanation
|
|
247
|
+
describeParseTransactionWith(test, 'default', backend, {
|
|
248
|
+
txParams: 'inferFromExplanation',
|
|
249
|
+
expectedExplicitExternalSpendAmount: 1800n,
|
|
250
|
+
expectedImplicitExternalSpendAmount: 0n,
|
|
251
|
+
});
|
|
252
|
+
if (test.network !== utxolib.networks.bitcoin) {
|
|
253
|
+
return;
|
|
254
|
+
}
|
|
255
|
+
// extended test suite for bitcoin
|
|
256
|
+
describeParseTransactionWith(test, 'legacy', backend, {
|
|
257
|
+
txFormat: 'legacy',
|
|
258
|
+
txParams: 'inferFromExplanation',
|
|
259
|
+
expectedExplicitExternalSpendAmount: 1800n,
|
|
260
|
+
expectedImplicitExternalSpendAmount: 0n,
|
|
261
|
+
});
|
|
262
|
+
describeParseTransactionWith(test, 'empty recipients', backend, {
|
|
263
|
+
txParams: {
|
|
264
|
+
recipients: [],
|
|
265
|
+
},
|
|
266
|
+
expectedExplicitExternalSpendAmount: 0n,
|
|
267
|
+
expectedImplicitExternalSpendAmount: 1800n,
|
|
268
|
+
});
|
|
269
|
+
describeParseTransactionWith(test, 'rbf', backend, {
|
|
270
|
+
txParams: {
|
|
271
|
+
rbfTxIds: ['PLACEHOLDER'],
|
|
272
|
+
},
|
|
273
|
+
expectedExplicitExternalSpendAmount: 1800n,
|
|
274
|
+
expectedImplicitExternalSpendAmount: 0n,
|
|
275
|
+
});
|
|
276
|
+
describeParseTransactionWith(test, 'allowExternalChangeAddress', backend, {
|
|
277
|
+
txParams: 'inferFromExplanation',
|
|
278
|
+
externalCustomChangeAddress: true,
|
|
279
|
+
expectedExplicitExternalSpendAmount: 1800n,
|
|
280
|
+
expectedImplicitExternalSpendAmount: 0n,
|
|
281
|
+
});
|
|
282
|
+
});
|
|
283
|
+
});
|
|
284
|
+
}
|
|
285
|
+
describeTransaction('utxolib');
|
|
286
|
+
describeTransaction('wasm');
|
|
287
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VQc2J0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGVzdC91bml0L3RyYW5zYWN0aW9uL2ZpeGVkU2NyaXB0L3BhcnNlUHNidC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGdFQUF3QztBQUV4Qyw2Q0FBK0I7QUFDL0IsOERBQWdEO0FBQ2hELG1EQUFrRztBQUNsRyxnREFBNkU7QUFFN0UsK0ZBQTRGO0FBRzVGLHFDQUF5QztBQUN6Qyx5RUFBd0c7QUFLeEcsaURBQW9EO0FBR3BELFNBQVMsMEJBQTBCLENBQ2pDLFdBQW1DLEVBQ25DLEVBQUUsMkJBQTJCLEVBQTRDO0lBS3pFLGlGQUFpRjtJQUNqRixNQUFNLGVBQWUsR0FBRyxJQUFJLEdBQUcsQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDakYsSUFBSSxlQUFlLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBRXRHLElBQUksYUFBaUMsQ0FBQztJQUN0QyxJQUFJLDJCQUEyQixFQUFFLENBQUM7UUFDaEMsZ0RBQWdEO1FBQ2hELEVBQUU7UUFDRiwwRUFBMEU7UUFDMUUsc0RBQXNEO1FBQ3RELE1BQU0sY0FBYyxHQUFHLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDcEIsTUFBTSxJQUFJLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1FBQzlDLENBQUM7UUFDRCxhQUFhLEdBQUcsY0FBYyxDQUFD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LENBQUMsU0FBUyxDQUFDLENBQUM7QUFDL0IsbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ25vZGU6YXNzZXJ0L3N0cmljdCc7XG5cbmltcG9ydCAqIGFzIHNpbm9uIGZyb20gJ3Npbm9uJztcbmltcG9ydCAqIGFzIHV0eG9saWIgZnJvbSAnQGJpdGdvLWJldGEvdXR4by1saWInO1xuaW1wb3J0IHsgV2FsbGV0LCBWZXJpZmljYXRpb25PcHRpb25zLCBJVHJhbnNhY3Rpb25SZWNpcGllbnQsIFRyaXBsZSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IGFkZHJlc3MgYXMgd2FzbUFkZHJlc3MsIGZpeGVkU2NyaXB0V2FsbGV0IH0gZnJvbSAnQGJpdGdvL3dhc20tdXR4byc7XG5cbmltcG9ydCB7IHBhcnNlVHJhbnNhY3Rpb24gfSBmcm9tICcuLi8uLi8uLi8uLi9zcmMvdHJhbnNhY3Rpb24vZml4ZWRTY3JpcHQvcGFyc2VUcmFuc2FjdGlvbic7XG5pbXBvcnQgeyBQYXJzZWRUcmFuc2FjdGlvbiB9IGZyb20gJy4uLy4uLy4uLy4uL3NyYy90cmFuc2FjdGlvbi90eXBlcyc7XG5pbXBvcnQgeyBVdHhvV2FsbGV0IH0gZnJvbSAnLi4vLi4vLi4vLi4vc3JjL3dhbGxldCc7XG5pbXBvcnQgeyBnZXRVdHhvQ29pbiB9IGZyb20gJy4uLy4uL3V0aWwnO1xuaW1wb3J0IHsgZXhwbGFpbkxlZ2FjeVR4LCBleHBsYWluUHNidCwgZXhwbGFpblBzYnRXYXNtIH0gZnJvbSAnLi4vLi4vLi4vLi4vc3JjL3RyYW5zYWN0aW9uL2ZpeGVkU2NyaXB0JztcbmltcG9ydCB0eXBlIHtcbiAgVHJhbnNhY3Rpb25FeHBsYW5hdGlvbixcbiAgQ2hhbmdlQWRkcmVzc0luZm8sXG59IGZyb20gJy4uLy4uLy4uLy4uL3NyYy90cmFuc2FjdGlvbi9maXhlZFNjcmlwdC9leHBsYWluVHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgZ2V0Q29pbk5hbWUgfSBmcm9tICcuLi8uLi8uLi8uLi9zcmMvbmFtZXMnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25QcmVidWlsZCB9IGZyb20gJy4uLy4uLy4uLy4uL3NyYy9hYnN0cmFjdFV0eG9Db2luJztcblxuZnVuY3Rpb24gZ2V0VHhQYXJhbXNGcm9tRXhwbGFuYXRpb24oXG4gIGV4cGxhbmF0aW9uOiBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uLFxuICB7IGV4dGVybmFsQ3VzdG9tQ2hhbmdlQWRkcmVzcyB9OiB7IGV4dGVybmFsQ3VzdG9tQ2hhbmdlQWRkcmVzczogYm9vbGVhbiB9XG4pOiB7XG4gIHJlY2lwaWVudHM6IElUcmFuc2FjdGlvblJlY2lwaWVudFtdO1xuICBjaGFuZ2VBZGRyZXNzPzogc3RyaW5nO1xufSB7XG4gIC8vIFRoZSBleHRlcm5hbCBvdXRwdXRzIGFyZSB0aGUgb25lcyB0aGF0IGFyZSBpbiBvdXRwdXRzIGJ1dCBub3QgaW4gY2hhbmdlT3V0cHV0c1xuICBjb25zdCBjaGFuZ2VBZGRyZXNzZXMgPSBuZXcgU2V0KGV4cGxhbmF0aW9uLmNoYW5nZU91dHB1dHMubWFwKChvKSA9PiBvLmFkZHJlc3MpKTtcbiAgbGV0IGV4dGVybmFsT3V0cHV0cyA9IGV4cGxhbmF0aW9uLm91dHB1dHMuZmlsdGVyKChvKSA9PiBvLmFkZHJlc3MgJiYgIWNoYW5nZUFkZHJlc3Nlcy5oYXMoby5hZGRyZXNzKSk7XG5cbiAgbGV0IGNoYW5nZUFkZHJlc3M6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgaWYgKGV4dGVybmFsQ3VzdG9tQ2hhbmdlQWRkcmVzcykge1xuICAgIC8vIGNvbnZlcnQgYW4gZXh0ZXJuYWwgb3V0cHV0IHRvIGEgY2hhbmdlIG91dHB1dFxuICAgIC8vXG4gICAgLy8gaW4gY29tYmluYXRpb24gd2l0aCBhbGxvd0V4dGVybmFsQ2hhbmdlQWRkcmVzcywgdGhpcyBhbGxvd3MgYW4gZXh0ZXJuYWxcbiAgICAvLyBvdXRwdXQgb24gdGhlIHRyYW5zYWN0aW9uIHdpdGhvdXQgYSBzaXplIGNvbnN0cmFpbnRcbiAgICBjb25zdCBleHRlcm5hbE91dHB1dCA9IGV4dGVybmFsT3V0cHV0c1swXTtcbiAgICBpZiAoIWV4dGVybmFsT3V0cHV0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ25vIGV4dGVybmFsIG91dHB1dCBmb3VuZCcpO1xuICAgIH1cbiAgICBjaGFuZ2VBZGRyZXNzID0gZXh0ZXJuYWxPdXRwdXQuYWRkcmVzcztcbiAgICBleHRlcm5hbE91dHB1dHMgPSBleHRlcm5hbE91dHB1dHMuc2xpY2UoMSk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHJlY2lwaWVudHM6IGV4dGVybmFsT3V0cHV0cy5tYXAoKG91dHB1dCkgPT4gKHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXG4gICAgICBhZGRyZXNzOiBvdXRwdXQuYWRkcmVzcyEsXG4gICAgICBhbW91bnQ6IG91dHB1dC5hbW91bnQsXG4gICAgfSkpLFxuICAgIGNoYW5nZUFkZHJlc3MsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldENoYW5nZUluZm9Gcm9tUHNidChwc2J0OiB1dHhvbGliLmJpdGdvLlV0eG9Qc2J0KTogQ2hhbmdlQWRkcmVzc0luZm9bXSB8IHVuZGVmaW5lZCB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHV0eG9saWIuYml0Z28uZmluZEludGVybmFsT3V0cHV0SW5kaWNlcyhwc2J0KS5tYXAoKGkpID0+IHtcbiAgICAgIGNvbnN0IG91dHB1dCA9IHBzYnQuZGF0YS5vdXRwdXRzW2ldO1xuICAgICAgY29uc3QgZGVyaXZhdGlvbnMgPSBvdXRwdXQuYmlwMzJEZXJpdmF0aW9uID8/IG91dHB1dC50YXBCaXAzMkRlcml2YXRpb24gPz8gdW5kZWZpbmVkO1xuICAgICAgaWYgKCFkZXJpdmF0aW9ucyB8fCBkZXJpdmF0aW9ucy5sZW5ndGggIT09IDMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdleHBlY3RlZCAzIGRlcml2YXRpb24gcGF0aHMnKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHBhdGggPSBkZXJpdmF0aW9uc1swXS5wYXRoO1xuICAgICAgY29uc3QgeyBjaGFpbiwgaW5kZXggfSA9IHV0eG9saWIuYml0Z28uZ2V0Q2hhaW5BbmRJbmRleEZyb21QYXRoKHBhdGgpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYWRkcmVzczogd2FzbUFkZHJlc3MuZnJvbU91dHB1dFNjcmlwdFdpdGhDb2luKHBzYnQudHhPdXRwdXRzW2ldLnNjcmlwdCwgZ2V0Q29pbk5hbWUocHNidC5uZXR3b3JrKSksXG4gICAgICAgIGNoYWluLFxuICAgICAgICBpbmRleCxcbiAgICAgIH07XG4gICAgfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBpZiAoZSBpbnN0YW5jZW9mIHV0eG9saWIuYml0Z28uRXJyb3JOb011bHRpU2lnSW5wdXRGb3VuZCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdGhyb3cgZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBkZXNjcmliZVBhcnNlVHJhbnNhY3Rpb25XaXRoKFxuICBhY2lkVGVzdDogdXR4b2xpYi50ZXN0dXRpbC5BY2lkVGVzdCxcbiAgbGFiZWw6IHN0cmluZyxcbiAgYmFja2VuZDogJ3V0eG9saWInIHwgJ3dhc20nLFxuICB7XG4gICAgdHhQYXJhbXMsXG4gICAgZXh0ZXJuYWxDdXN0b21DaGFuZ2VBZGRyZXNzID0gZmFsc2UsXG4gICAgZXhwZWN0ZWRFeHBsaWNpdEV4dGVybmFsU3BlbmRBbW91bnQsXG4gICAgZXhwZWN0ZWRJbXBsaWNpdEV4dGVybmFsU3BlbmRBbW91bnQsXG4gICAgdHhGb3JtYXQgPSAncHNidCcsXG4gIH06IHtcbiAgICB0eFBhcmFtczpcbiAgICAgIHwge1xuICAgICAgICAgIHJlY2lwaWVudHM6IElUcmFuc2FjdGlvblJlY2lwaWVudFtdO1xuICAgICAgICB9XG4gICAgICB8IHtcbiAgICAgICAgICByYmZUeElkczogc3RyaW5nW107XG4gICAgICAgIH1cbiAgICAgIHwgJ2luZmVyRnJvbUV4cGxhbmF0aW9uJztcbiAgICBleHRlcm5hbEN1c3RvbUNoYW5nZUFkZHJlc3M/OiBib29sZWFuO1xuICAgIGV4cGVjdGVkRXhwbGljaXRFeHRlcm5hbFNwZW5kQW1vdW50OiBiaWdpbnQ7XG4gICAgZXhwZWN0ZWRJbXBsaWNpdEV4dGVybmFsU3BlbmRBbW91bnQ6IGJpZ2ludDtcbiAgICB0eEZvcm1hdD86ICdwc2J0JyB8ICdsZWdhY3knO1xuICB9XG4pIHtcbiAgZGVzY3JpYmUoYCR7YWNpZFRlc3QubmFtZX0vJHtsYWJlbH1gLCBmdW5jdGlvbiAoKSB7XG4gICAgbGV0IHJlZlBhcnNlZFRyYW5zYWN0aW9uOiBQYXJzZWRUcmFuc2FjdGlvbjxiaWdpbnQ+O1xuICAgIGxldCBjb2luOiBSZXR1cm5UeXBlPHR5cGVvZiBnZXRVdHhvQ29pbj47XG4gICAgbGV0IG1vY2tXYWxsZXQ6IHNpbm9uLlNpbm9uU3R1YmJlZEluc3RhbmNlPFdhbGxldD47XG4gICAgbGV0IHN0dWJFeHBsYWluVHJhbnNhY3Rpb246IHNpbm9uLlNpbm9uU3R1YjtcblxuICAgIGJlZm9yZSgncHJlcGFyZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGNvaW5OYW1lID0gZ2V0Q29pbk5hbWUoYWNpZFRlc3QubmV0d29yayk7XG4gICAgICBjb2luID0gZ2V0VXR4b0NvaW4oY29pbk5hbWUpO1xuXG4gICAgICAvLyBDcmVhdGUgUFNCVCBhbmQgZXhwbGFuYXRpb25cbiAgICAgIGNvbnN0IHBzYnQgPSBhY2lkVGVzdC5jcmVhdGVQc2J0KCk7XG4gICAgICBjb25zdCB0eCA9IHBzYnQuZ2V0VW5zaWduZWRUeCgpO1xuICAgICAgY29uc3QgdHhIYXNoID0gdHguZ2V0SWQoKTtcblxuICAgICAgbGV0IGV4cGxhbmF0aW9uOiBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uO1xuICAgICAgaWYgKHR4Rm9ybWF0ID09PSAncHNidCcpIHtcbiAgICAgICAgaWYgKGJhY2tlbmQgPT09ICd1dHhvbGliJykge1xuICAgICAgICAgIGV4cGxhbmF0aW9uID0gZXhwbGFpblBzYnQocHNidCwgeyBwdWJzOiBhY2lkVGVzdC5yb290V2FsbGV0S2V5cyB9LCBjb2luTmFtZSwge1xuICAgICAgICAgICAgc3RyaWN0OiB0cnVlLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKGJhY2tlbmQgPT09ICd3YXNtJykge1xuICAgICAgICAgIGNvbnN0IHdhc21Qc2J0ID0gZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0LmZyb21CeXRlcyhcbiAgICAgICAgICAgIHBzYnQudG9CdWZmZXIoKSxcbiAgICAgICAgICAgIHV0eG9saWIuZ2V0TmV0d29ya05hbWUoYWNpZFRlc3QubmV0d29yaykhXG4gICAgICAgICAgKTtcbiAgICAgICAgICBleHBsYW5hdGlvbiA9IGV4cGxhaW5Qc2J0V2FzbShcbiAgICAgICAgICAgIHdhc21Qc2J0LFxuICAgICAgICAgICAgYWNpZFRlc3Qucm9vdFdhbGxldEtleXMudHJpcGxlLm1hcCgoaykgPT4gay5uZXV0ZXJlZCgpLnRvQmFzZTU4KCkpIGFzIFRyaXBsZTxzdHJpbmc+LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICByZXBsYXlQcm90ZWN0aW9uOiB7XG4gICAgICAgICAgICAgICAgcHVibGljS2V5czogW2FjaWRUZXN0LmdldFJlcGxheVByb3RlY3Rpb25QdWJsaWNLZXkoKV0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9XG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgYmFja2VuZDogJHtiYWNrZW5kfWApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHR4Rm9ybWF0ID09PSAnbGVnYWN5Jykge1xuICAgICAgICBjb25zdCBwdWJzID0gYWNpZFRlc3Qucm9vdFdhbGxldEtleXMudHJpcGxlLm1hcCgoaykgPT4gay5uZXV0ZXJlZCgpLnRvQmFzZTU4KCkpO1xuICAgICAgICAvLyBFeHRyYWN0IGNoYW5nZSBpbmZvIGZyb20gUFNCVCB0byBwYXNzIHRvIGV4cGxhaW5MZWdhY3lUeFxuICAgICAgICBjb25zdCBjaGFuZ2VJbmZvID0gZ2V0Q2hhbmdlSW5mb0Zyb21Qc2J0KHBzYnQpO1xuICAgICAgICBleHBsYW5hdGlvbiA9IGV4cGxhaW5MZWdhY3lUeCh0eCwgeyBwdWJzLCBjaGFuZ2VJbmZvIH0sIGNvaW5OYW1lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB0eEZvcm1hdDogJHt0eEZvcm1hdH1gKTtcbiAgICAgIH1cblxuICAgICAgLy8gRGV0ZXJtaW5lIHR4UGFyYW1zXG4gICAgICBsZXQgcmVzb2x2ZWRUeFBhcmFtcztcbiAgICAgIGlmICh0eFBhcmFtcyA9PT0gJ2luZmVyRnJvbUV4cGxhbmF0aW9uJyB8fCB0eFBhcmFtcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJlc29sdmVkVHhQYXJhbXMgPSBnZXRUeFBhcmFtc0Zyb21FeHBsYW5hdGlvbihleHBsYW5hdGlvbiwgeyBleHRlcm5hbEN1c3RvbUNoYW5nZUFkZHJlc3MgfSk7XG4gICAgICB9IGVsc2UgaWYgKCdyYmZUeElkcycgaW4gdHhQYXJhbXMpIHtcbiAgICAgICAgLy8gUmVwbGFjZSBwbGFjZWhvbGRlciB0eEhhc2ggd2l0aCBhY3R1YWwgY29tcHV0ZWQgdHhIYXNoXG4gICAgICAgIHJlc29sdmVkVHhQYXJhbXMgPSB7XG4gICAgICAgICAgcmJmVHhJZHM6IHR4UGFyYW1zLnJiZlR4SWRzLm1hcCgoaGFzaCkgPT4gKGhhc2ggPT09ICdQTEFDRUhPTERFUicgPyB0eEhhc2ggOiBoYXNoKSksXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXNvbHZlZFR4UGFyYW1zID0gdHhQYXJhbXM7XG4gICAgICB9XG5cbiAgICAgIGlmIChleHRlcm5hbEN1c3RvbUNoYW5nZUFkZHJlc3MpIHtcbiAgICAgICAgcmVzb2x2ZWRUeFBhcmFtcy5hbGxvd0V4dGVybmFsQ2hhbmdlQWRkcmVzcyA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIC8vIENyZWF0ZSBtb2NrIHdhbGxldFxuICAgICAgbW9ja1dhbGxldCA9IHNpbm9uLmNyZWF0ZVN0dWJJbnN0YW5jZShXYWxsZXQpO1xuICAgICAgbW9ja1dhbGxldC5pZC5yZXR1cm5zKCd0ZXN0LXdhbGxldC1pZCcpO1xuICAgICAgbW9ja1dhbGxldC5jb2luLnJldHVybnMoY29pbi5nZXRDaGFpbigpKTtcbiAgICAgIG1vY2tXYWxsZXQuY29pblNwZWNpZmljLnJldHVybnModW5kZWZpbmVkKTtcblxuICAgICAgLy8gTW9jayBnZXRUcmFuc2FjdGlvbiBmb3IgUkJGIGNhc2VcbiAgICAgIGlmICgncmJmVHhJZHMnIGluIHJlc29sdmVkVHhQYXJhbXMpIHtcbiAgICAgICAgY29uc3QgcmJmVHhQYXJhbXMgPSBnZXRUeFBhcmFtc0Zyb21FeHBsYW5hdGlvbihleHBsYW5hdGlvbiwgeyBleHRlcm5hbEN1c3RvbUNoYW5nZUFkZHJlc3M6IGZhbHNlIH0pO1xuICAgICAgICBtb2NrV2FsbGV0LmdldFRyYW5zYWN0aW9uLnJlc29sdmVzKHtcbiAgICAgICAgICBvdXRwdXRzOiByYmZUeFBhcmFtcy5yZWNpcGllbnRzLm1hcCgocikgPT4gKHtcbiAgICAgICAgICAgIHZhbHVlU3RyaW5nOiB0eXBlb2Ygci5hbW91bnQgPT09ICdzdHJpbmcnID8gci5hbW91bnQgOiByLmFtb3VudC50b1N0cmluZygpLFxuICAgICAgICAgICAgYWRkcmVzczogci5hZGRyZXNzLFxuICAgICAgICAgICAgLy8gd2FsbGV0IGZpZWxkIGlzIHVuZGVmaW5lZCBmb3IgZXh0ZXJuYWwgb3V0cHV0cyAobm90IHNlbGYtc2VuZHMpXG4gICAgICAgICAgfSkpLFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgLy8gTW9jayB2ZXJpZmljYXRpb24gb3B0aW9ucyB3aXRoIGtleWNoYWlucyB0byBkaXNhYmxlIG5ldHdvcmtpbmdcbiAgICAgIC8vIFVzZSB0aGUgc2FtZSBrZXljaGFpbnMgdGhhdCB3ZXJlIHVzZWQgdG8gY3JlYXRlIHRoZSBQU0JUXG4gICAgICBjb25zdCBwdWJzID0gYWNpZFRlc3Qucm9vdFdhbGxldEtleXMudHJpcGxlLm1hcCgoaykgPT4gay5uZXV0ZXJlZCgpLnRvQmFzZTU4KCkpO1xuICAgICAgY29uc3QgdmVyaWZpY2F0aW9uOiBWZXJpZmljYXRpb25PcHRpb25zID0ge1xuICAgICAgICBkaXNhYmxlTmV0d29ya2luZzogdHJ1ZSxcbiAgICAgICAga2V5Y2hhaW5zOiB7XG4gICAgICAgICAgdXNlcjogeyBpZDogJzAnLCBwdWI6IHB1YnNbMF0sIHR5cGU6ICdpbmRlcGVuZGVudCcgfSxcbiAgICAgICAgICBiYWNrdXA6IHsgaWQ6ICcxJywgcHViOiBwdWJzWzFdLCB0eXBlOiAnaW5kZXBlbmRlbnQnIH0sXG4gICAgICAgICAgYml0Z286IHsgaWQ6ICcyJywgcHViOiBwdWJzWzJdLCB0eXBlOiAnaW5kZXBlbmRlbnQnIH0sXG4gICAgICAgIH0sXG4gICAgICB9O1xuXG4gICAgICAvLyBTdHViIGV4cGxhaW5UcmFuc2FjdGlvbiB0byByZXR1cm4gdGhlIGV4cGxhbmF0aW9uIHdpdGhvdXQgbWFraW5nIG5ldHdvcmsgY2FsbHNcbiAgICAgIHN0dWJFeHBsYWluVHJhbnNhY3Rpb24gPSBzaW5vbi5zdHViKGNvaW4sICdleHBsYWluVHJhbnNhY3Rpb24nKS5yZXNvbHZlcyhleHBsYW5hdGlvbik7XG5cbiAgICAgIGxldCB0eFByZWJ1aWxkOiBUcmFuc2FjdGlvblByZWJ1aWxkPGJpZ2ludD47XG4gICAgICBpZiAodHhGb3JtYXQgPT09ICdwc2J0Jykge1xuICAgICAgICB0eFByZWJ1aWxkID0ge1xuICAgICAgICAgIHR4SGV4OiBwc2J0LnRvSGV4KCksXG4gICAgICAgIH07XG4gICAgICB9IGVsc2UgaWYgKHR4Rm9ybWF0ID09PSAnbGVnYWN5Jykge1xuICAgICAgICB0eFByZWJ1aWxkID0ge1xuICAgICAgICAgIHR4SGV4OiBwc2J0LmdldFVuc2lnbmVkVHgoKS50b0hleCgpLFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHR4Rm9ybWF0OiAke3R4Rm9ybWF0fWApO1xuICAgICAgfVxuXG4gICAgICByZWZQYXJzZWRUcmFuc2FjdGlvbiA9IGF3YWl0IHBhcnNlVHJhbnNhY3Rpb24oY29pbiwge1xuICAgICAgICB3YWxsZXQ6IG1vY2tXYWxsZXQgYXMgdW5rbm93biBhcyBVdHhvV2FsbGV0LFxuICAgICAgICB0eFBhcmFtczogcmVzb2x2ZWRUeFBhcmFtcyxcbiAgICAgICAgdHhQcmVidWlsZCxcbiAgICAgICAgdmVyaWZpY2F0aW9uLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBhZnRlcignY2xlYW51cCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChzdHViRXhwbGFpblRyYW5zYWN0aW9uKSB7XG4gICAgICAgIHN0dWJFeHBsYWluVHJhbnNhY3Rpb24ucmVzdG9yZSgpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBwYXJzZSB0cmFuc2FjdGlvbiB3aXRob3V0IG5ldHdvcmsgY2FsbHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhc3NlcnQub2socmVmUGFyc2VkVHJhbnNhY3Rpb24pO1xuICAgICAgYXNzZXJ0Lm9rKHJlZlBhcnNlZFRyYW5zYWN0aW9uLmtleWNoYWlucyk7XG4gICAgICBhc3NlcnQub2socmVmUGFyc2VkVHJhbnNhY3Rpb24ub3V0cHV0cyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGhhdmUgdmFsaWQga2V5Y2hhaW5zJywgZnVuY3Rpb24gKCkge1xuICAgICAgYXNzZXJ0Lm9rKHJlZlBhcnNlZFRyYW5zYWN0aW9uLmtleWNoYWlucy51c2VyKTtcbiAgICAgIGFzc2VydC5vayhyZWZQYXJzZWRUcmFuc2FjdGlvbi5rZXljaGFpbnMuYmFja3VwKTtcbiAgICAgIGFzc2VydC5vayhyZWZQYXJzZWRUcmFuc2FjdGlvbi5rZXljaGFpbnMuYml0Z28pO1xuICAgICAgY29uc3QgcHVicyA9IGFjaWRUZXN0LnJvb3RXYWxsZXRLZXlzLnRyaXBsZS5tYXAoKGspID0+IGsubmV1dGVyZWQoKS50b0Jhc2U1OCgpKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZWZQYXJzZWRUcmFuc2FjdGlvbi5rZXljaGFpbnMudXNlci5wdWIsIHB1YnNbMF0pO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlZlBhcnNlZFRyYW5zYWN0aW9uLmtleWNoYWlucy5iYWNrdXAucHViLCBwdWJzWzFdKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZWZQYXJzZWRUcmFuc2FjdGlvbi5rZXljaGFpbnMuYml0Z28ucHViLCBwdWJzWzJdKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaGF2ZSBvdXRwdXRzIGNsYXNzaWZpZWQgYXMgaW50ZXJuYWwgb3IgZXh0ZXJuYWwnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBTaW5jZSB3ZSBkaWRuJ3Qgc3BlY2lmeSBhbnkgcmVjaXBpZW50cywgb3V0cHV0cyB3aWxsIGJlIGNsYXNzaWZpZWQgYmFzZWQgb24gd2hldGhlciB0aGV5IGNhbiBiZVxuICAgICAgLy8gdmVyaWZpZWQgYXMgd2FsbGV0IGFkZHJlc3Nlcy4gU29tZSBtYXkgYmUgZXh0ZXJuYWwgaWYgYWRkcmVzcyB2ZXJpZmljYXRpb24gZmFpbHMgd2l0aG91dCBhIHByb3BlciB3YWxsZXQgc2V0dXAuXG4gICAgICBjb25zdCB0b3RhbE91dHB1dHMgPSByZWZQYXJzZWRUcmFuc2FjdGlvbi5vdXRwdXRzLmxlbmd0aDtcbiAgICAgIGNvbnN0IGNoYW5nZU91dHB1dHMgPSByZWZQYXJzZWRUcmFuc2FjdGlvbi5jaGFuZ2VPdXRwdXRzLmxlbmd0aDtcbiAgICAgIGNvbnN0IGV4dGVybmFsT3V0cHV0cyA9IHJlZlBhcnNlZFRyYW5zYWN0aW9uLm91dHB1dHMuZmlsdGVyKChvKSA9PiBvLmV4dGVybmFsID09PSB0cnVlKS5sZW5ndGg7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZXh0ZXJuYWxPdXRwdXRzLCAzKTtcblxuICAgICAgYXNzZXJ0Lm9rKHRvdGFsT3V0cHV0cyA+IDAsICdzaG91bGQgaGF2ZSBhdCBsZWFzdCBvbmUgb3V0cHV0Jyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoY2hhbmdlT3V0cHV0cyArIGV4dGVybmFsT3V0cHV0cywgdG90YWxPdXRwdXRzLCAnYWxsIG91dHB1dHMgc2hvdWxkIGJlIGNsYXNzaWZpZWQnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaGF2ZSBleHBlY3RlZCBleHBsaWNpdCBhbmQgaW1wbGljaXQgZXh0ZXJuYWwgc3BlbmQgYW1vdW50cycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChCaWdJbnQocmVmUGFyc2VkVHJhbnNhY3Rpb24uZXhwbGljaXRFeHRlcm5hbFNwZW5kQW1vdW50KSwgZXhwZWN0ZWRFeHBsaWNpdEV4dGVybmFsU3BlbmRBbW91bnQpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKEJpZ0ludChyZWZQYXJzZWRUcmFuc2FjdGlvbi5pbXBsaWNpdEV4dGVybmFsU3BlbmRBbW91bnQpLCBleHBlY3RlZEltcGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudCk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBkZXNjcmliZVRyYW5zYWN0aW9uKFxuICBiYWNrZW5kOiAndXR4b2xpYicgfCAnd2FzbScsXG4gIGZpbHRlcjogKHRlc3Q6IHV0eG9saWIudGVzdHV0aWwuQWNpZFRlc3QpID0+IGJvb2xlYW4gPSAoKSA9PiB0cnVlXG4pIHtcbiAgZGVzY3JpYmUoYHBhcnNlVHJhbnNhY3Rpb24gKCR7YmFja2VuZH0pYCwgZnVuY3Rpb24gKCkge1xuICAgIHV0eG9saWIudGVzdHV0aWwuQWNpZFRlc3Quc3VpdGUoKVxuICAgICAgLmZpbHRlcihmaWx0ZXIpXG4gICAgICAuZm9yRWFjaCgodGVzdCkgPT4ge1xuICAgICAgICAvLyBEZWZhdWx0IGNhc2U6IHBzYnQgZm9ybWF0LCBpbmZlciByZWNpcGllbnRzIGZyb20gZXhwbGFuYXRpb25cbiAgICAgICAgZGVzY3JpYmVQYXJzZVRyYW5zYWN0aW9uV2l0aCh0ZXN0LCAnZGVmYXVsdCcsIGJhY2tlbmQsIHtcbiAgICAgICAgICB0eFBhcmFtczogJ2luZmVyRnJvbUV4cGxhbmF0aW9uJyxcbiAgICAgICAgICBleHBlY3RlZEV4cGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudDogMTgwMG4sXG4gICAgICAgICAgZXhwZWN0ZWRJbXBsaWNpdEV4dGVybmFsU3BlbmRBbW91bnQ6IDBuLFxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAodGVzdC5uZXR3b3JrICE9PSB1dHhvbGliLm5ldHdvcmtzLmJpdGNvaW4pIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gZXh0ZW5kZWQgdGVzdCBzdWl0ZSBmb3IgYml0Y29pblxuXG4gICAgICAgIGRlc2NyaWJlUGFyc2VUcmFuc2FjdGlvbldpdGgodGVzdCwgJ2xlZ2FjeScsIGJhY2tlbmQsIHtcbiAgICAgICAgICB0eEZvcm1hdDogJ2xlZ2FjeScsXG4gICAgICAgICAgdHhQYXJhbXM6ICdpbmZlckZyb21FeHBsYW5hdGlvbicsXG4gICAgICAgICAgZXhwZWN0ZWRFeHBsaWNpdEV4dGVybmFsU3BlbmRBbW91bnQ6IDE4MDBuLFxuICAgICAgICAgIGV4cGVjdGVkSW1wbGljaXRFeHRlcm5hbFNwZW5kQW1vdW50OiAwbixcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGVzY3JpYmVQYXJzZVRyYW5zYWN0aW9uV2l0aCh0ZXN0LCAnZW1wdHkgcmVjaXBpZW50cycsIGJhY2tlbmQsIHtcbiAgICAgICAgICB0eFBhcmFtczoge1xuICAgICAgICAgICAgcmVjaXBpZW50czogW10sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBleHBlY3RlZEV4cGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudDogMG4sXG4gICAgICAgICAgZXhwZWN0ZWRJbXBsaWNpdEV4dGVybmFsU3BlbmRBbW91bnQ6IDE4MDBuLFxuICAgICAgICB9KTtcblxuICAgICAgICBkZXNjcmliZVBhcnNlVHJhbnNhY3Rpb25XaXRoKHRlc3QsICdyYmYnLCBiYWNrZW5kLCB7XG4gICAgICAgICAgdHhQYXJhbXM6IHtcbiAgICAgICAgICAgIHJiZlR4SWRzOiBbJ1BMQUNFSE9MREVSJ10sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBleHBlY3RlZEV4cGxpY2l0RXh0ZXJuYWxTcGVuZEFtb3VudDogMTgwMG4sXG4gICAgICAgICAgZXhwZWN0ZWRJbXBsaWNpdEV4dGVybmFsU3BlbmRBbW91bnQ6IDBuLFxuICAgICAgICB9KTtcblxuICAgICAgICBkZXNjcmliZVBhcnNlVHJhbnNhY3Rpb25XaXRoKHRlc3QsICdhbGxvd0V4dGVybmFsQ2hhbmdlQWRkcmVzcycsIGJhY2tlbmQsIHtcbiAgICAgICAgICB0eFBhcmFtczogJ2luZmVyRnJvbUV4cGxhbmF0aW9uJyxcbiAgICAgICAgICBleHRlcm5hbEN1c3RvbUNoYW5nZUFkZHJlc3M6IHRydWUsXG4gICAgICAgICAgZXhwZWN0ZWRFeHBsaWNpdEV4dGVybmFsU3BlbmRBbW91bnQ6IDE4MDBuLFxuICAgICAgICAgIGV4cGVjdGVkSW1wbGljaXRFeHRlcm5hbFNwZW5kQW1vdW50OiAwbixcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgfSk7XG59XG5cbmRlc2NyaWJlVHJhbnNhY3Rpb24oJ3V0eG9saWInKTtcbmRlc2NyaWJlVHJhbnNhY3Rpb24oJ3dhc20nKTtcbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"replayProtection.d.ts","sourceRoot":"","sources":["../../../../../../test/unit/transaction/fixedScript/replayProtection.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,60 @@
|
|
|
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
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
const strict_1 = __importDefault(require("node:assert/strict"));
|
|
40
|
+
const utxolib = __importStar(require("@bitgo-beta/utxo-lib"));
|
|
41
|
+
const wasm_utxo_1 = require("@bitgo/wasm-utxo");
|
|
42
|
+
const replayProtection_1 = require("../../../../src/transaction/fixedScript/replayProtection");
|
|
43
|
+
function createReplayProtectionOutputScript(pubkey) {
|
|
44
|
+
const descriptor = wasm_utxo_1.Descriptor.fromString(`sh(pk(${pubkey.toString('hex')}))`, 'definite');
|
|
45
|
+
return Buffer.from(descriptor.scriptPubkey());
|
|
46
|
+
}
|
|
47
|
+
describe('replayProtection', function () {
|
|
48
|
+
it('should have scriptPubKeys that match descriptor computation', function () {
|
|
49
|
+
for (const pubkey of [replayProtection_1.pubkeyProd, replayProtection_1.pubkeyTestnet]) {
|
|
50
|
+
const coinName = pubkey === replayProtection_1.pubkeyProd ? 'bch' : 'tbch';
|
|
51
|
+
const network = pubkey === replayProtection_1.pubkeyProd ? utxolib.networks.bitcoincash : utxolib.networks.bitcoincashTestnet;
|
|
52
|
+
const expectedScript = createReplayProtectionOutputScript(pubkey);
|
|
53
|
+
const actualAddresses = (0, replayProtection_1.getReplayProtectionAddresses)(coinName);
|
|
54
|
+
strict_1.default.equal(actualAddresses.length, 1);
|
|
55
|
+
const actualScript = Buffer.from(wasm_utxo_1.utxolibCompat.toOutputScript(actualAddresses[0], network));
|
|
56
|
+
strict_1.default.deepStrictEqual(actualScript, expectedScript);
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwbGF5UHJvdGVjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Rlc3QvdW5pdC90cmFuc2FjdGlvbi9maXhlZFNjcmlwdC9yZXBsYXlQcm90ZWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsZ0VBQXdDO0FBRXhDLDhEQUFnRDtBQUNoRCxnREFBNkQ7QUFFN0QsK0ZBSWtFO0FBR2xFLFNBQVMsa0NBQWtDLENBQUMsTUFBYztJQUN4RCxNQUFNLFVBQVUsR0FBRyxzQkFBVSxDQUFDLFVBQVUsQ0FBQyxTQUFTLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQztJQUMxRixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7QUFDaEQsQ0FBQztBQUVELFFBQVEsQ0FBQyxrQkFBa0IsRUFBRTtJQUMzQixFQUFFLENBQUMsNkRBQTZELEVBQUU7UUFDaEUsS0FBSyxNQUFNLE1BQU0sSUFBSSxDQUFDLDZCQUFVLEVBQUUsZ0NBQWEsQ0FBQyxFQUFFLENBQUM7WUFDakQsTUFBTSxRQUFRLEdBQWlCLE1BQU0sS0FBSyw2QkFBVSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztZQUN0RSxNQUFNLE9BQU8sR0FBRyxNQUFNLEtBQUssNkJBQVUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsa0JBQWtCLENBQUM7WUFDM0csTUFBTSxjQUFjLEdBQUcsa0NBQWtDLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDbEUsTUFBTSxlQUFlLEdBQUcsSUFBQSwrQ0FBNEIsRUFBQyxRQUFRLENBQUMsQ0FBQztZQUMvRCxnQkFBTSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3hDLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMseUJBQWEsQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDNUYsZ0JBQU0sQ0FBQyxlQUFlLENBQUMsWUFBWSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQ3ZELENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tICdub2RlOmFzc2VydC9zdHJpY3QnO1xuXG5pbXBvcnQgKiBhcyB1dHhvbGliIGZyb20gJ0BiaXRnby1iZXRhL3V0eG8tbGliJztcbmltcG9ydCB7IERlc2NyaXB0b3IsIHV0eG9saWJDb21wYXQgfSBmcm9tICdAYml0Z28vd2FzbS11dHhvJztcblxuaW1wb3J0IHtcbiAgZ2V0UmVwbGF5UHJvdGVjdGlvbkFkZHJlc3NlcyxcbiAgcHVia2V5UHJvZCxcbiAgcHVia2V5VGVzdG5ldCxcbn0gZnJvbSAnLi4vLi4vLi4vLi4vc3JjL3RyYW5zYWN0aW9uL2ZpeGVkU2NyaXB0L3JlcGxheVByb3RlY3Rpb24nO1xuaW1wb3J0IHsgVXR4b0NvaW5OYW1lIH0gZnJvbSAnLi4vLi4vLi4vLi4vc3JjL25hbWVzJztcblxuZnVuY3Rpb24gY3JlYXRlUmVwbGF5UHJvdGVjdGlvbk91dHB1dFNjcmlwdChwdWJrZXk6IEJ1ZmZlcik6IEJ1ZmZlciB7XG4gIGNvbnN0IGRlc2NyaXB0b3IgPSBEZXNjcmlwdG9yLmZyb21TdHJpbmcoYHNoKHBrKCR7cHVia2V5LnRvU3RyaW5nKCdoZXgnKX0pKWAsICdkZWZpbml0ZScpO1xuICByZXR1cm4gQnVmZmVyLmZyb20oZGVzY3JpcHRvci5zY3JpcHRQdWJrZXkoKSk7XG59XG5cbmRlc2NyaWJlKCdyZXBsYXlQcm90ZWN0aW9uJywgZnVuY3Rpb24gKCkge1xuICBpdCgnc2hvdWxkIGhhdmUgc2NyaXB0UHViS2V5cyB0aGF0IG1hdGNoIGRlc2NyaXB0b3IgY29tcHV0YXRpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgZm9yIChjb25zdCBwdWJrZXkgb2YgW3B1YmtleVByb2QsIHB1YmtleVRlc3RuZXRdKSB7XG4gICAgICBjb25zdCBjb2luTmFtZTogVXR4b0NvaW5OYW1lID0gcHVia2V5ID09PSBwdWJrZXlQcm9kID8gJ2JjaCcgOiAndGJjaCc7XG4gICAgICBjb25zdCBuZXR3b3JrID0gcHVia2V5ID09PSBwdWJrZXlQcm9kID8gdXR4b2xpYi5uZXR3b3Jrcy5iaXRjb2luY2FzaCA6IHV0eG9saWIubmV0d29ya3MuYml0Y29pbmNhc2hUZXN0bmV0O1xuICAgICAgY29uc3QgZXhwZWN0ZWRTY3JpcHQgPSBjcmVhdGVSZXBsYXlQcm90ZWN0aW9uT3V0cHV0U2NyaXB0KHB1YmtleSk7XG4gICAgICBjb25zdCBhY3R1YWxBZGRyZXNzZXMgPSBnZXRSZXBsYXlQcm90ZWN0aW9uQWRkcmVzc2VzKGNvaW5OYW1lKTtcbiAgICAgIGFzc2VydC5lcXVhbChhY3R1YWxBZGRyZXNzZXMubGVuZ3RoLCAxKTtcbiAgICAgIGNvbnN0IGFjdHVhbFNjcmlwdCA9IEJ1ZmZlci5mcm9tKHV0eG9saWJDb21wYXQudG9PdXRwdXRTY3JpcHQoYWN0dWFsQWRkcmVzc2VzWzBdLCBuZXR3b3JrKSk7XG4gICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKGFjdHVhbFNjcmlwdCwgZXhwZWN0ZWRTY3JpcHQpO1xuICAgIH1cbiAgfSk7XG59KTtcbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signPsbt.d.ts","sourceRoot":"","sources":["../../../../../../test/unit/transaction/fixedScript/signPsbt.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,154 @@
|
|
|
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
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
const strict_1 = __importDefault(require("node:assert/strict"));
|
|
40
|
+
const utxolib = __importStar(require("@bitgo-beta/utxo-lib"));
|
|
41
|
+
const wasm_utxo_1 = require("@bitgo/wasm-utxo");
|
|
42
|
+
const decode_1 = require("../../../../src/transaction/decode");
|
|
43
|
+
const signPsbtUtxolib_1 = require("../../../../src/transaction/fixedScript/signPsbtUtxolib");
|
|
44
|
+
const signPsbtWasm_1 = require("../../../../src/transaction/fixedScript/signPsbtWasm");
|
|
45
|
+
const names_1 = require("../../../../src/names");
|
|
46
|
+
function getMockCoinUtxolib(keys) {
|
|
47
|
+
return {
|
|
48
|
+
async getMusig2Nonces(psbt, walletId) {
|
|
49
|
+
psbt.setAllInputsMusig2NonceHD(keys.bitgo, { deterministic: true });
|
|
50
|
+
return psbt;
|
|
51
|
+
},
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
function getMockCoinWasm(keys, network) {
|
|
55
|
+
// Convert utxolib RootWalletKeys to wasm BIP32 using base58 string
|
|
56
|
+
// This ensures the private key is properly transferred
|
|
57
|
+
const bitgoXprv = keys.bitgo.toBase58();
|
|
58
|
+
const bitgoKey = wasm_utxo_1.BIP32.fromBase58(bitgoXprv);
|
|
59
|
+
const networkName = utxolib.getNetworkName(network);
|
|
60
|
+
(0, strict_1.default)(networkName, 'network name is required');
|
|
61
|
+
return {
|
|
62
|
+
async getMusig2Nonces(psbt, walletId) {
|
|
63
|
+
// Generate nonces using the bitgo key
|
|
64
|
+
psbt.generateMusig2Nonces(bitgoKey);
|
|
65
|
+
// Serialize and deserialize to simulate remote response
|
|
66
|
+
// This creates a new object so we don't get "recursive use of an object" error
|
|
67
|
+
return wasm_utxo_1.fixedScriptWallet.BitGoPsbt.fromBytes(psbt.serialize(), networkName);
|
|
68
|
+
},
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
function assertSignedUtxolib(psbt, userKey) {
|
|
72
|
+
// Verify that all wallet inputs have been signed by user key
|
|
73
|
+
psbt.data.inputs.forEach((input, inputIndex) => {
|
|
74
|
+
const { scriptType } = utxolib.bitgo.parsePsbtInput(input);
|
|
75
|
+
// Skip replay protection inputs (p2shP2pk)
|
|
76
|
+
if (scriptType === 'p2shP2pk') {
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
// Verify user signature is present
|
|
80
|
+
const isValid = psbt.validateSignaturesOfInputHD(inputIndex, userKey);
|
|
81
|
+
(0, strict_1.default)(isValid, `input ${inputIndex} should have valid user signature`);
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
function assertSignedWasm(psbt, userKey, rootWalletKeys, replayProtection) {
|
|
85
|
+
const wasmUserKey = wasm_utxo_1.BIP32.from(userKey);
|
|
86
|
+
const parsed = psbt.parseTransactionWithWalletKeys(rootWalletKeys, { replayProtection });
|
|
87
|
+
// Verify that all wallet inputs have been signed by user key
|
|
88
|
+
parsed.inputs.forEach((input, inputIndex) => {
|
|
89
|
+
// Skip replay protection inputs (p2shP2pk)
|
|
90
|
+
if (input.scriptType === 'p2shP2pk') {
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
// Verify user signature is present
|
|
94
|
+
const isValid = psbt.verifySignature(inputIndex, wasmUserKey);
|
|
95
|
+
(0, strict_1.default)(isValid, `input ${inputIndex} should have valid user signature (scriptType=${input.scriptType})`);
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
function toWasmWalletKeys(keys) {
|
|
99
|
+
return {
|
|
100
|
+
triple: [keys.user, keys.backup, keys.bitgo],
|
|
101
|
+
derivationPrefixes: keys.derivationPrefixes,
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
function getReplayProtectionKeys(keys) {
|
|
105
|
+
// Replay protection inputs use the underived user public key
|
|
106
|
+
return {
|
|
107
|
+
publicKeys: [keys.user.publicKey],
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
function describeSignPsbtWithMusig2Participant(acidTest, { decodeWith }) {
|
|
111
|
+
describe(`${acidTest.name} ${decodeWith}`, function () {
|
|
112
|
+
it('should sign unsigned psbt to halfsigned', async function () {
|
|
113
|
+
// Create unsigned PSBT
|
|
114
|
+
const coinName = (0, names_1.getCoinName)(acidTest.network);
|
|
115
|
+
const psbt = (0, decode_1.decodePsbtWith)(acidTest.createPsbt().toBuffer(), coinName, decodeWith);
|
|
116
|
+
let result;
|
|
117
|
+
if (decodeWith === 'utxolib') {
|
|
118
|
+
(0, strict_1.default)(psbt instanceof utxolib.bitgo.UtxoPsbt, 'psbt should be a UtxoPsbt');
|
|
119
|
+
result = await (0, signPsbtUtxolib_1.signPsbtWithMusig2ParticipantUtxolib)(getMockCoinUtxolib(acidTest.rootWalletKeys), psbt, acidTest.rootWalletKeys.user, {
|
|
120
|
+
signingStep: undefined,
|
|
121
|
+
walletId: 'test-wallet-id',
|
|
122
|
+
});
|
|
123
|
+
// Result should be a PSBT (not finalized)
|
|
124
|
+
(0, strict_1.default)(result instanceof utxolib.bitgo.UtxoPsbt, 'should return UtxoPsbt when not last signature');
|
|
125
|
+
assertSignedUtxolib(result, acidTest.rootWalletKeys.user);
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
(0, strict_1.default)(psbt instanceof wasm_utxo_1.fixedScriptWallet.BitGoPsbt, 'psbt should be a BitGoPsbt');
|
|
129
|
+
const wasmWalletKeys = toWasmWalletKeys(acidTest.rootWalletKeys);
|
|
130
|
+
const replayProtection = getReplayProtectionKeys(acidTest.rootWalletKeys);
|
|
131
|
+
result = await (0, signPsbtWasm_1.signPsbtWithMusig2ParticipantWasm)(getMockCoinWasm(acidTest.rootWalletKeys, acidTest.network), psbt, acidTest.rootWalletKeys.user, wasm_utxo_1.fixedScriptWallet.RootWalletKeys.from(acidTest.rootWalletKeys), {
|
|
132
|
+
replayProtection,
|
|
133
|
+
signingStep: undefined,
|
|
134
|
+
walletId: 'test-wallet-id',
|
|
135
|
+
});
|
|
136
|
+
// Result should be a PSBT (not finalized)
|
|
137
|
+
(0, strict_1.default)(result instanceof wasm_utxo_1.fixedScriptWallet.BitGoPsbt, 'should return BitGoPsbt when not last signature');
|
|
138
|
+
assertSignedWasm(result, acidTest.rootWalletKeys.user, wasmWalletKeys, replayProtection);
|
|
139
|
+
}
|
|
140
|
+
});
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
describe('signPsbtWithMusig2ParticipantUtxolib', function () {
|
|
144
|
+
// Create test suite with includeP2trMusig2ScriptPath set to false
|
|
145
|
+
// p2trMusig2 script path inputs are signed by user and backup keys,
|
|
146
|
+
// which is not the typical signing pattern and makes testing more complex
|
|
147
|
+
utxolib.testutil.AcidTest.suite({ includeP2trMusig2ScriptPath: false })
|
|
148
|
+
.filter((test) => test.signStage === 'unsigned')
|
|
149
|
+
.forEach((test) => {
|
|
150
|
+
describeSignPsbtWithMusig2Participant(test, { decodeWith: 'utxolib' });
|
|
151
|
+
describeSignPsbtWithMusig2Participant(test, { decodeWith: 'wasm-utxo' });
|
|
152
|
+
});
|
|
153
|
+
});
|
|
154
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnblBzYnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZXN0L3VuaXQvdHJhbnNhY3Rpb24vZml4ZWRTY3JpcHQvc2lnblBzYnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxnRUFBd0M7QUFFeEMsOERBQWdEO0FBQ2hELGdEQUE0RDtBQUU1RCwrREFBb0U7QUFFcEUsNkZBQStHO0FBQy9HLHVGQUc4RDtBQUU5RCxpREFBb0Q7QUFFcEQsU0FBUyxrQkFBa0IsQ0FBQyxJQUFrQztJQUM1RCxPQUFPO1FBQ0wsS0FBSyxDQUFDLGVBQWUsQ0FBQyxJQUE0QixFQUFFLFFBQWdCO1lBQ2xFLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFDcEUsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO0tBQ0YsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLGVBQWUsQ0FDdEIsSUFBa0MsRUFDbEMsT0FBd0I7SUFFeEIsbUVBQW1FO0lBQ25FLHVEQUF1RDtJQUN2RCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3hDLE1BQU0sUUFBUSxHQUFHLGlCQUFLLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzdDLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDcEQsSUFBQSxnQkFBTSxFQUFDLFdBQVcsRUFBRSwwQkFBMEIsQ0FBQyxDQUFDO0lBQ2hELE9BQU87UUFDTCxLQUFLLENBQUMsZUFBZSxDQUFDLElBQWlDLEVBQUUsUUFBZ0I7WUFDdkUsc0NBQXNDO1lBQ3RDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNwQyx3REFBd0Q7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MENBQTBDO2dCQUMxQyxJQUFBLGdCQUFNLEVBQUMsTUFBTSxZQUFZLDZCQUFpQixDQUFDLFNBQVMsRUFBRSxpREFBaUQsQ0FBQyxDQUFDO2dCQUV6RyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsY0FBYyxFQUFFLGdCQUFnQixDQUFDLENBQUM7WUFDM0YsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsUUFBUSxDQUFDLHNDQUFzQyxFQUFFO0lBQy9DLGtFQUFrRTtJQUNsRSxvRUFBb0U7SUFDcEUsMEVBQTBFO0lBQzFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLDJCQUEyQixFQUFFLEtBQUssRUFBRSxDQUFDO1NBQ3BFLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsS0FBSyxVQUFVLENBQUM7U0FDL0MsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7UUFDaEIscUNBQXFDLENBQUMsSUFBSSxFQUFFLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFDdkUscUNBQXFDLENBQUMsSUFBSSxFQUFFLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDM0UsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSAnbm9kZTphc3NlcnQvc3RyaWN0JztcblxuaW1wb3J0ICogYXMgdXR4b2xpYiBmcm9tICdAYml0Z28tYmV0YS91dHhvLWxpYic7XG5pbXBvcnQgeyBCSVAzMiwgZml4ZWRTY3JpcHRXYWxsZXQgfSBmcm9tICdAYml0Z28vd2FzbS11dHhvJztcblxuaW1wb3J0IHsgZGVjb2RlUHNidFdpdGggfSBmcm9tICcuLi8uLi8uLi8uLi9zcmMvdHJhbnNhY3Rpb24vZGVjb2RlJztcbmltcG9ydCB7IE11c2lnMlBhcnRpY2lwYW50IH0gZnJvbSAnLi4vLi4vLi4vLi4vc3JjL3RyYW5zYWN0aW9uL2ZpeGVkU2NyaXB0L211c2lnMic7XG5pbXBvcnQgeyBzaWduUHNidFdpdGhNdXNpZzJQYXJ0aWNpcGFudFV0eG9saWIgfSBmcm9tICcuLi8uLi8uLi8uLi9zcmMvdHJhbnNhY3Rpb24vZml4ZWRTY3JpcHQvc2lnblBzYnRVdHhvbGliJztcbmltcG9ydCB7XG4gIFJlcGxheVByb3RlY3Rpb25LZXlzLFxuICBzaWduUHNidFdpdGhNdXNpZzJQYXJ0aWNpcGFudFdhc20sXG59IGZyb20gJy4uLy4uLy4uLy4uL3NyYy90cmFuc2FjdGlvbi9maXhlZFNjcmlwdC9zaWduUHNidFdhc20nO1xuaW1wb3J0IHsgU2RrQmFja2VuZCB9IGZyb20gJy4uLy4uLy4uLy4uL3NyYy90cmFuc2FjdGlvbi90eXBlcyc7XG5pbXBvcnQgeyBnZXRDb2luTmFtZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NyYy9uYW1lcyc7XG5cbmZ1bmN0aW9uIGdldE1vY2tDb2luVXR4b2xpYihrZXlzOiB1dHhvbGliLmJpdGdvLlJvb3RXYWxsZXRLZXlzKTogTXVzaWcyUGFydGljaXBhbnQ8dXR4b2xpYi5iaXRnby5VdHhvUHNidD4ge1xuICByZXR1cm4ge1xuICAgIGFzeW5jIGdldE11c2lnMk5vbmNlcyhwc2J0OiB1dHhvbGliLmJpdGdvLlV0eG9Qc2J0LCB3YWxsZXRJZDogc3RyaW5nKTogUHJvbWlzZTx1dHhvbGliLmJpdGdvLlV0eG9Qc2J0PiB7XG4gICAgICBwc2J0LnNldEFsbElucHV0c011c2lnMk5vbmNlSEQoa2V5cy5iaXRnbywgeyBkZXRlcm1pbmlzdGljOiB0cnVlIH0pO1xuICAgICAgcmV0dXJuIHBzYnQ7XG4gICAgfSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0TW9ja0NvaW5XYXNtKFxuICBrZXlzOiB1dHhvbGliLmJpdGdvLlJvb3RXYWxsZXRLZXlzLFxuICBuZXR3b3JrOiB1dHhvbGliLk5ldHdvcmtcbik6IE11c2lnMlBhcnRpY2lwYW50PGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidD4ge1xuICAvLyBDb252ZXJ0IHV0eG9saWIgUm9vdFdhbGxldEtleXMgdG8gd2FzbSBCSVAzMiB1c2luZyBiYXNlNTggc3RyaW5nXG4gIC8vIFRoaXMgZW5zdXJlcyB0aGUgcHJpdmF0ZSBrZXkgaXMgcHJvcGVybHkgdHJhbnNmZXJyZWRcbiAgY29uc3QgYml0Z29YcHJ2ID0ga2V5cy5iaXRnby50b0Jhc2U1OCgpO1xuICBjb25zdCBiaXRnb0tleSA9IEJJUDMyLmZyb21CYXNlNTgoYml0Z29YcHJ2KTtcbiAgY29uc3QgbmV0d29ya05hbWUgPSB1dHhvbGliLmdldE5ldHdvcmtOYW1lKG5ldHdvcmspO1xuICBhc3NlcnQobmV0d29ya05hbWUsICduZXR3b3JrIG5hbWUgaXMgcmVxdWlyZWQnKTtcbiAgcmV0dXJuIHtcbiAgICBhc3luYyBnZXRNdXNpZzJOb25jZXMocHNidDogZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0LCB3YWxsZXRJZDogc3RyaW5nKTogUHJvbWlzZTxmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQ+IHtcbiAgICAgIC8vIEdlbmVyYXRlIG5vbmNlcyB1c2luZyB0aGUgYml0Z28ga2V5XG4gICAgICBwc2J0LmdlbmVyYXRlTXVzaWcyTm9uY2VzKGJpdGdvS2V5KTtcbiAgICAgIC8vIFNlcmlhbGl6ZSBhbmQgZGVzZXJpYWxpemUgdG8gc2ltdWxhdGUgcmVtb3RlIHJlc3BvbnNlXG4gICAgICAvLyBUaGlzIGNyZWF0ZXMgYSBuZXcgb2JqZWN0IHNvIHdlIGRvbid0IGdldCBcInJlY3Vyc2l2ZSB1c2Ugb2YgYW4gb2JqZWN0XCIgZXJyb3JcbiAgICAgIHJldHVybiBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQuZnJvbUJ5dGVzKHBzYnQuc2VyaWFsaXplKCksIG5ldHdvcmtOYW1lKTtcbiAgICB9LFxuICB9O1xufVxuXG5mdW5jdGlvbiBhc3NlcnRTaWduZWRVdHhvbGliKHBzYnQ6IHV0eG9saWIuYml0Z28uVXR4b1BzYnQsIHVzZXJLZXk6IHV0eG9saWIuQklQMzJJbnRlcmZhY2UpOiB2b2lkIHtcbiAgLy8gVmVyaWZ5IHRoYXQgYWxsIHdhbGxldCBpbnB1dHMgaGF2ZSBiZWVuIHNpZ25lZCBieSB1c2VyIGtleVxuICBwc2J0LmRhdGEuaW5wdXRzLmZvckVhY2goKGlucHV0LCBpbnB1dEluZGV4KSA9PiB7XG4gICAgY29uc3QgeyBzY3JpcHRUeXBlIH0gPSB1dHhvbGliLmJpdGdvLnBhcnNlUHNidElucHV0KGlucHV0KTtcblxuICAgIC8vIFNraXAgcmVwbGF5IHByb3RlY3Rpb24gaW5wdXRzIChwMnNoUDJwaylcbiAgICBpZiAoc2NyaXB0VHlwZSA9PT0gJ3Ayc2hQMnBrJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFZlcmlmeSB1c2VyIHNpZ25hdHVyZSBpcyBwcmVzZW50XG4gICAgY29uc3QgaXNWYWxpZCA9IHBzYnQudmFsaWRhdGVTaWduYXR1cmVzT2ZJbnB1dEhEKGlucHV0SW5kZXgsIHVzZXJLZXkpO1xuICAgIGFzc2VydChpc1ZhbGlkLCBgaW5wdXQgJHtpbnB1dEluZGV4fSBzaG91bGQgaGF2ZSB2YWxpZCB1c2VyIHNpZ25hdHVyZWApO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gYXNzZXJ0U2lnbmVkV2FzbShcbiAgcHNidDogZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0LFxuICB1c2VyS2V5OiB1dHhvbGliLkJJUDMySW50ZXJmYWNlLFxuICByb290V2FsbGV0S2V5czogZml4ZWRTY3JpcHRXYWxsZXQuSVdhbGxldEtleXMsXG4gIHJlcGxheVByb3RlY3Rpb246IFJlcGxheVByb3RlY3Rpb25LZXlzXG4pOiB2b2lkIHtcbiAgY29uc3Qgd2FzbVVzZXJLZXkgPSBCSVAzMi5mcm9tKHVzZXJLZXkpO1xuICBjb25zdCBwYXJzZWQgPSBwc2J0LnBhcnNlVHJhbnNhY3Rpb25XaXRoV2FsbGV0S2V5cyhyb290V2FsbGV0S2V5cywgeyByZXBsYXlQcm90ZWN0aW9uIH0pO1xuXG4gIC8vIFZlcmlmeSB0aGF0IGFsbCB3YWxsZXQgaW5wdXRzIGhhdmUgYmVlbiBzaWduZWQgYnkgdXNlciBrZXlcbiAgcGFyc2VkLmlucHV0cy5mb3JFYWNoKChpbnB1dCwgaW5wdXRJbmRleCkgPT4ge1xuICAgIC8vIFNraXAgcmVwbGF5IHByb3RlY3Rpb24gaW5wdXRzIChwMnNoUDJwaylcbiAgICBpZiAoaW5wdXQuc2NyaXB0VHlwZSA9PT0gJ3Ayc2hQMnBrJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFZlcmlmeSB1c2VyIHNpZ25hdHVyZSBpcyBwcmVzZW50XG4gICAgY29uc3QgaXNWYWxpZCA9IHBzYnQudmVyaWZ5U2lnbmF0dXJlKGlucHV0SW5kZXgsIHdhc21Vc2VyS2V5KTtcbiAgICBhc3NlcnQoaXNWYWxpZCwgYGlucHV0ICR7aW5wdXRJbmRleH0gc2hvdWxkIGhhdmUgdmFsaWQgdXNlciBzaWduYXR1cmUgKHNjcmlwdFR5cGU9JHtpbnB1dC5zY3JpcHRUeXBlfSlgKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHRvV2FzbVdhbGxldEtleXMoa2V5czogdXR4b2xpYi5iaXRnby5Sb290V2FsbGV0S2V5cyk6IGZpeGVkU2NyaXB0V2FsbGV0LklXYWxsZXRLZXlzIHtcbiAgcmV0dXJuIHtcbiAgICB0cmlwbGU6IFtrZXlzLnVzZXIsIGtleXMuYmFja3VwLCBrZXlzLmJpdGdvXSxcbiAgICBkZXJpdmF0aW9uUHJlZml4ZXM6IGtleXMuZGVyaXZhdGlvblByZWZpeGVzLFxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRSZXBsYXlQcm90ZWN0aW9uS2V5cyhrZXlzOiB1dHhvbGliLmJpdGdvLlJvb3RXYWxsZXRLZXlzKTogUmVwbGF5UHJvdGVjdGlvbktleXMge1xuICAvLyBSZXBsYXkgcHJvdGVjdGlvbiBpbnB1dHMgdXNlIHRoZSB1bmRlcml2ZWQgdXNlciBwdWJsaWMga2V5XG4gIHJldHVybiB7XG4gICAgcHVibGljS2V5czogW2tleXMudXNlci5wdWJsaWNLZXldLFxuICB9O1xufVxuXG5mdW5jdGlvbiBkZXNjcmliZVNpZ25Qc2J0V2l0aE11c2lnMlBhcnRpY2lwYW50KFxuICBhY2lkVGVzdDogdXR4b2xpYi50ZXN0dXRpbC5BY2lkVGVzdCxcbiAgeyBkZWNvZGVXaXRoIH06IHsgZGVjb2RlV2l0aDogU2RrQmFja2VuZCB9XG4pIHtcbiAgZGVzY3JpYmUoYCR7YWNpZFRlc3QubmFtZX0gJHtkZWNvZGVXaXRofWAsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHNpZ24gdW5zaWduZWQgcHNidCB0byBoYWxmc2lnbmVkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gQ3JlYXRlIHVuc2lnbmVkIFBTQlRcbiAgICAgIGNvbnN0IGNvaW5OYW1lID0gZ2V0Q29pbk5hbWUoYWNpZFRlc3QubmV0d29yayk7XG4gICAgICBjb25zdCBwc2J0ID0gZGVjb2RlUHNidFdpdGgoYWNpZFRlc3QuY3JlYXRlUHNidCgpLnRvQnVmZmVyKCksIGNvaW5OYW1lLCBkZWNvZGVXaXRoKTtcblxuICAgICAgbGV0IHJlc3VsdDtcbiAgICAgIGlmIChkZWNvZGVXaXRoID09PSAndXR4b2xpYicpIHtcbiAgICAgICAgYXNzZXJ0KHBzYnQgaW5zdGFuY2VvZiB1dHhvbGliLmJpdGdvLlV0eG9Qc2J0LCAncHNidCBzaG91bGQgYmUgYSBVdHhvUHNidCcpO1xuICAgICAgICByZXN1bHQgPSBhd2FpdCBzaWduUHNidFdpdGhNdXNpZzJQYXJ0aWNpcGFudFV0eG9saWIoXG4gICAgICAgICAgZ2V0TW9ja0NvaW5VdHhvbGliKGFjaWRUZXN0LnJvb3RXYWxsZXRLZXlzKSxcbiAgICAgICAgICBwc2J0LFxuICAgICAgICAgIGFjaWRUZXN0LnJvb3RXYWxsZXRLZXlzLnVzZXIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgc2lnbmluZ1N0ZXA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHdhbGxldElkOiAndGVzdC13YWxsZXQtaWQnLFxuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgICAgLy8gUmVzdWx0IHNob3VsZCBiZSBhIFBTQlQgKG5vdCBmaW5hbGl6ZWQpXG4gICAgICAgIGFzc2VydChyZXN1bHQgaW5zdGFuY2VvZiB1dHhvbGliLmJpdGdvLlV0eG9Qc2J0LCAnc2hvdWxkIHJldHVybiBVdHhvUHNidCB3aGVuIG5vdCBsYXN0IHNpZ25hdHVyZScpO1xuXG4gICAgICAgIGFzc2VydFNpZ25lZFV0eG9saWIocmVzdWx0LCBhY2lkVGVzdC5yb290V2FsbGV0S2V5cy51c2VyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFzc2VydChwc2J0IGluc3RhbmNlb2YgZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0LCAncHNidCBzaG91bGQgYmUgYSBCaXRHb1BzYnQnKTtcbiAgICAgICAgY29uc3Qgd2FzbVdhbGxldEtleXMgPSB0b1dhc21XYWxsZXRLZXlzKGFjaWRUZXN0LnJvb3RXYWxsZXRLZXlzKTtcbiAgICAgICAgY29uc3QgcmVwbGF5UHJvdGVjdGlvbiA9IGdldFJlcGxheVByb3RlY3Rpb25LZXlzKGFjaWRUZXN0LnJvb3RXYWxsZXRLZXlzKTtcbiAgICAgICAgcmVzdWx0ID0gYXdhaXQgc2lnblBzYnRXaXRoTXVzaWcyUGFydGljaXBhbnRXYXNtKFxuICAgICAgICAgIGdldE1vY2tDb2luV2FzbShhY2lkVGVzdC5yb290V2FsbGV0S2V5cywgYWNpZFRlc3QubmV0d29yayksXG4gICAgICAgICAgcHNidCxcbiAgICAgICAgICBhY2lkVGVzdC5yb290V2FsbGV0S2V5cy51c2VyLFxuICAgICAgICAgIGZpeGVkU2NyaXB0V2FsbGV0LlJvb3RXYWxsZXRLZXlzLmZyb20oYWNpZFRlc3Qucm9vdFdhbGxldEtleXMpLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHJlcGxheVByb3RlY3Rpb24sXG4gICAgICAgICAgICBzaWduaW5nU3RlcDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgd2FsbGV0SWQ6ICd0ZXN0LXdhbGxldC1pZCcsXG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgICAvLyBSZXN1bHQgc2hvdWxkIGJlIGEgUFNCVCAobm90IGZpbmFsaXplZClcbiAgICAgICAgYXNzZXJ0KHJlc3VsdCBpbnN0YW5jZW9mIGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidCwgJ3Nob3VsZCByZXR1cm4gQml0R29Qc2J0IHdoZW4gbm90IGxhc3Qgc2lnbmF0dXJlJyk7XG5cbiAgICAgICAgYXNzZXJ0U2lnbmVkV2FzbShyZXN1bHQsIGFjaWRUZXN0LnJvb3RXYWxsZXRLZXlzLnVzZXIsIHdhc21XYWxsZXRLZXlzLCByZXBsYXlQcm90ZWN0aW9uKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5cbmRlc2NyaWJlKCdzaWduUHNidFdpdGhNdXNpZzJQYXJ0aWNpcGFudFV0eG9saWInLCBmdW5jdGlvbiAoKSB7XG4gIC8vIENyZWF0ZSB0ZXN0IHN1aXRlIHdpdGggaW5jbHVkZVAydHJNdXNpZzJTY3JpcHRQYXRoIHNldCB0byBmYWxzZVxuICAvLyBwMnRyTXVzaWcyIHNjcmlwdCBwYXRoIGlucHV0cyBhcmUgc2lnbmVkIGJ5IHVzZXIgYW5kIGJhY2t1cCBrZXlzLFxuICAvLyB3aGljaCBpcyBub3QgdGhlIHR5cGljYWwgc2lnbmluZyBwYXR0ZXJuIGFuZCBtYWtlcyB0ZXN0aW5nIG1vcmUgY29tcGxleFxuICB1dHhvbGliLnRlc3R1dGlsLkFjaWRUZXN0LnN1aXRlKHsgaW5jbHVkZVAydHJNdXNpZzJTY3JpcHRQYXRoOiBmYWxzZSB9KVxuICAgIC5maWx0ZXIoKHRlc3QpID0+IHRlc3Quc2lnblN0YWdlID09PSAndW5zaWduZWQnKVxuICAgIC5mb3JFYWNoKCh0ZXN0KSA9PiB7XG4gICAgICBkZXNjcmliZVNpZ25Qc2J0V2l0aE11c2lnMlBhcnRpY2lwYW50KHRlc3QsIHsgZGVjb2RlV2l0aDogJ3V0eG9saWInIH0pO1xuICAgICAgZGVzY3JpYmVTaWduUHNidFdpdGhNdXNpZzJQYXJ0aWNpcGFudCh0ZXN0LCB7IGRlY29kZVdpdGg6ICd3YXNtLXV0eG8nIH0pO1xuICAgIH0pO1xufSk7XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"outputDifference.d.ts","sourceRoot":"","sources":["../../../../../test/unit/transaction/outputDifference.ts"],"names":[],"mappings":""}
|