@bitgo-beta/utxo-lib 8.0.3-beta.19 → 8.0.3-beta.1900
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 +19 -16
- package/dist/src/address.d.ts +0 -1
- package/dist/src/address.d.ts.map +1 -1
- package/dist/src/address.js +10 -10
- package/dist/src/addressFormat.d.ts +1 -2
- package/dist/src/addressFormat.d.ts.map +1 -1
- package/dist/src/addressFormat.js +21 -26
- package/dist/src/bitgo/Musig2.d.ts +1 -2
- package/dist/src/bitgo/Musig2.d.ts.map +1 -1
- package/dist/src/bitgo/Musig2.js +54 -54
- package/dist/src/bitgo/ProprietaryKeyValUtils.d.ts +27 -0
- package/dist/src/bitgo/ProprietaryKeyValUtils.d.ts.map +1 -0
- package/dist/src/bitgo/ProprietaryKeyValUtils.js +74 -0
- package/dist/src/bitgo/PsbtUtil.d.ts +26 -30
- package/dist/src/bitgo/PsbtUtil.d.ts.map +1 -1
- package/dist/src/bitgo/PsbtUtil.js +74 -22
- package/dist/src/bitgo/Unspent.d.ts +2 -3
- package/dist/src/bitgo/Unspent.d.ts.map +1 -1
- package/dist/src/bitgo/Unspent.js +14 -15
- package/dist/src/bitgo/UtxoPsbt.d.ts +39 -12
- package/dist/src/bitgo/UtxoPsbt.d.ts.map +1 -1
- package/dist/src/bitgo/UtxoPsbt.js +215 -154
- package/dist/src/bitgo/UtxoTransaction.d.ts +0 -1
- package/dist/src/bitgo/UtxoTransaction.d.ts.map +1 -1
- package/dist/src/bitgo/UtxoTransaction.js +14 -14
- package/dist/src/bitgo/UtxoTransactionBuilder.d.ts +0 -1
- package/dist/src/bitgo/UtxoTransactionBuilder.d.ts.map +1 -1
- package/dist/src/bitgo/UtxoTransactionBuilder.js +1 -1
- package/dist/src/bitgo/bitcoincash/address.d.ts +0 -1
- package/dist/src/bitgo/bitcoincash/address.d.ts.map +1 -1
- package/dist/src/bitgo/bitcoincash/address.js +11 -12
- package/dist/src/bitgo/bitcoincash/index.js +6 -2
- package/dist/src/bitgo/dash/DashPsbt.d.ts +1 -1
- package/dist/src/bitgo/dash/DashPsbt.d.ts.map +1 -1
- package/dist/src/bitgo/dash/DashPsbt.js +4 -1
- package/dist/src/bitgo/dash/DashTransaction.d.ts +0 -1
- package/dist/src/bitgo/dash/DashTransaction.d.ts.map +1 -1
- package/dist/src/bitgo/dash/DashTransaction.js +3 -3
- package/dist/src/bitgo/dash/DashTransactionBuilder.d.ts +0 -1
- package/dist/src/bitgo/dash/DashTransactionBuilder.d.ts.map +1 -1
- package/dist/src/bitgo/dash/DashTransactionBuilder.js +1 -1
- package/dist/src/bitgo/dash/index.js +6 -2
- package/dist/src/bitgo/index.d.ts +10 -0
- package/dist/src/bitgo/index.d.ts.map +1 -1
- package/dist/src/bitgo/index.js +10 -3
- package/dist/src/bitgo/keyutil.d.ts +10 -2
- package/dist/src/bitgo/keyutil.d.ts.map +1 -1
- package/dist/src/bitgo/keyutil.js +27 -6
- package/dist/src/bitgo/legacysafe/index.d.ts +14 -0
- package/dist/src/bitgo/legacysafe/index.d.ts.map +1 -0
- package/dist/src/bitgo/legacysafe/index.js +60 -0
- package/dist/src/bitgo/litecoin/LitecoinPsbt.d.ts +1 -1
- package/dist/src/bitgo/litecoin/LitecoinPsbt.d.ts.map +1 -1
- package/dist/src/bitgo/litecoin/LitecoinPsbt.js +4 -1
- package/dist/src/bitgo/litecoin/LitecoinTransaction.d.ts +1 -2
- package/dist/src/bitgo/litecoin/LitecoinTransaction.d.ts.map +1 -1
- package/dist/src/bitgo/litecoin/LitecoinTransaction.js +2 -2
- package/dist/src/bitgo/litecoin/index.js +6 -2
- package/dist/src/bitgo/nonStandardHalfSigned.js +4 -5
- package/dist/src/bitgo/outputScripts.d.ts +12 -8
- package/dist/src/bitgo/outputScripts.d.ts.map +1 -1
- package/dist/src/bitgo/outputScripts.js +68 -50
- package/dist/src/bitgo/parseInput.d.ts +7 -8
- package/dist/src/bitgo/parseInput.d.ts.map +1 -1
- package/dist/src/bitgo/parseInput.js +15 -16
- package/dist/src/bitgo/psbt/fromHalfSigned.d.ts +0 -1
- package/dist/src/bitgo/psbt/fromHalfSigned.d.ts.map +1 -1
- package/dist/src/bitgo/psbt/fromHalfSigned.js +7 -8
- package/dist/src/bitgo/psbt/scriptTypes.d.ts +0 -1
- package/dist/src/bitgo/psbt/scriptTypes.d.ts.map +1 -1
- package/dist/src/bitgo/psbt/scriptTypes.js +7 -8
- package/dist/src/bitgo/signature.d.ts +5 -6
- package/dist/src/bitgo/signature.d.ts.map +1 -1
- package/dist/src/bitgo/signature.js +37 -23
- package/dist/src/bitgo/tnumber.js +2 -3
- package/dist/src/bitgo/transaction.d.ts +31 -4
- package/dist/src/bitgo/transaction.d.ts.map +1 -1
- package/dist/src/bitgo/transaction.js +59 -27
- package/dist/src/bitgo/transactionAmounts.d.ts +9 -0
- package/dist/src/bitgo/transactionAmounts.d.ts.map +1 -0
- package/dist/src/bitgo/transactionAmounts.js +32 -0
- package/dist/src/bitgo/types.d.ts +8 -2
- package/dist/src/bitgo/types.d.ts.map +1 -1
- package/dist/src/bitgo/types.js +12 -4
- package/dist/src/bitgo/wallet/Psbt.d.ts +57 -28
- package/dist/src/bitgo/wallet/Psbt.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/Psbt.js +145 -47
- package/dist/src/bitgo/wallet/ScriptId.d.ts +14 -0
- package/dist/src/bitgo/wallet/ScriptId.d.ts.map +1 -0
- package/dist/src/bitgo/wallet/ScriptId.js +28 -0
- package/dist/src/bitgo/wallet/Unspent.d.ts +43 -10
- package/dist/src/bitgo/wallet/Unspent.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/Unspent.js +174 -84
- package/dist/src/bitgo/wallet/WalletKeys.d.ts +2 -3
- package/dist/src/bitgo/wallet/WalletKeys.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/WalletKeys.js +3 -3
- package/dist/src/bitgo/wallet/WalletOutput.d.ts +73 -3
- package/dist/src/bitgo/wallet/WalletOutput.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/WalletOutput.js +182 -44
- package/dist/src/bitgo/wallet/WalletScripts.js +4 -5
- package/dist/src/bitgo/wallet/WalletUnspentSigner.d.ts +1 -1
- package/dist/src/bitgo/wallet/WalletUnspentSigner.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/WalletUnspentSigner.js +7 -7
- package/dist/src/bitgo/wallet/chains.d.ts +3 -3
- package/dist/src/bitgo/wallet/chains.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/chains.js +10 -10
- package/dist/src/bitgo/wallet/index.d.ts +3 -0
- package/dist/src/bitgo/wallet/index.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/index.js +9 -2
- package/dist/src/bitgo/wallet/psbt/PsbtOutputs.d.ts +50 -0
- package/dist/src/bitgo/wallet/psbt/PsbtOutputs.d.ts.map +1 -0
- package/dist/src/bitgo/wallet/psbt/PsbtOutputs.js +85 -0
- package/dist/src/bitgo/wallet/psbt/RootNodes.d.ts +32 -0
- package/dist/src/bitgo/wallet/psbt/RootNodes.d.ts.map +1 -0
- package/dist/src/bitgo/wallet/psbt/RootNodes.js +122 -0
- package/dist/src/bitgo/zcash/ZcashBufferutils.d.ts +1 -2
- package/dist/src/bitgo/zcash/ZcashBufferutils.d.ts.map +1 -1
- package/dist/src/bitgo/zcash/ZcashBufferutils.js +15 -15
- package/dist/src/bitgo/zcash/ZcashPsbt.d.ts +4 -6
- package/dist/src/bitgo/zcash/ZcashPsbt.d.ts.map +1 -1
- package/dist/src/bitgo/zcash/ZcashPsbt.js +24 -24
- package/dist/src/bitgo/zcash/ZcashTransaction.d.ts +7 -2
- package/dist/src/bitgo/zcash/ZcashTransaction.d.ts.map +1 -1
- package/dist/src/bitgo/zcash/ZcashTransaction.js +58 -21
- package/dist/src/bitgo/zcash/ZcashTransactionBuilder.d.ts +0 -1
- package/dist/src/bitgo/zcash/ZcashTransactionBuilder.d.ts.map +1 -1
- package/dist/src/bitgo/zcash/ZcashTransactionBuilder.js +10 -4
- package/dist/src/bitgo/zcash/address.d.ts +0 -1
- package/dist/src/bitgo/zcash/address.d.ts.map +1 -1
- package/dist/src/bitgo/zcash/address.js +7 -8
- package/dist/src/bitgo/zcash/hashZip0244.d.ts +1 -2
- package/dist/src/bitgo/zcash/hashZip0244.d.ts.map +1 -1
- package/dist/src/bitgo/zcash/hashZip0244.js +9 -10
- package/dist/src/bitgo/zcash/index.js +6 -2
- package/dist/src/classify.d.ts +0 -1
- package/dist/src/classify.d.ts.map +1 -1
- package/dist/src/classify.js +5 -5
- package/dist/src/index.d.ts +3 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +12 -4
- package/dist/src/networks.d.ts +2 -2
- package/dist/src/networks.d.ts.map +1 -1
- package/dist/src/networks.js +67 -21
- package/dist/src/payments/p2tr.d.ts.map +1 -1
- package/dist/src/payments/p2tr.js +16 -28
- package/dist/src/payments/p2tr_ns.js +3 -5
- package/dist/src/taproot.d.ts +80 -6
- package/dist/src/taproot.d.ts.map +1 -1
- package/dist/src/taproot.js +132 -48
- package/dist/src/templates/multisig/input.d.ts +0 -1
- package/dist/src/templates/multisig/input.d.ts.map +1 -1
- package/dist/src/templates/multisig/input.js +2 -3
- package/dist/src/templates/multisig/output.d.ts +0 -1
- package/dist/src/templates/multisig/output.d.ts.map +1 -1
- package/dist/src/templates/multisig/output.js +2 -3
- package/dist/src/templates/nulldata.d.ts +0 -1
- package/dist/src/templates/nulldata.d.ts.map +1 -1
- package/dist/src/templates/nulldata.js +3 -3
- package/dist/src/templates/pubkey/input.d.ts +0 -1
- package/dist/src/templates/pubkey/input.d.ts.map +1 -1
- package/dist/src/templates/pubkey/input.js +2 -3
- package/dist/src/templates/pubkey/output.d.ts +0 -1
- package/dist/src/templates/pubkey/output.d.ts.map +1 -1
- package/dist/src/templates/pubkey/output.js +2 -3
- package/dist/src/templates/pubkeyhash/input.d.ts +0 -1
- package/dist/src/templates/pubkeyhash/input.d.ts.map +1 -1
- package/dist/src/templates/pubkeyhash/input.js +2 -3
- package/dist/src/templates/pubkeyhash/output.d.ts +0 -1
- package/dist/src/templates/pubkeyhash/output.d.ts.map +1 -1
- package/dist/src/templates/pubkeyhash/output.js +2 -3
- package/dist/src/templates/scripthash/input.d.ts +0 -1
- package/dist/src/templates/scripthash/input.d.ts.map +1 -1
- package/dist/src/templates/scripthash/input.js +2 -3
- package/dist/src/templates/scripthash/output.d.ts +0 -1
- package/dist/src/templates/scripthash/output.d.ts.map +1 -1
- package/dist/src/templates/scripthash/output.js +2 -3
- package/dist/src/templates/taproot/input.d.ts +0 -1
- package/dist/src/templates/taproot/input.d.ts.map +1 -1
- package/dist/src/templates/taproot/input.js +2 -3
- package/dist/src/templates/taproot/output.d.ts +0 -1
- package/dist/src/templates/taproot/output.d.ts.map +1 -1
- package/dist/src/templates/taproot/output.js +2 -3
- package/dist/src/templates/taprootnofn/input.d.ts +0 -1
- package/dist/src/templates/taprootnofn/input.d.ts.map +1 -1
- package/dist/src/templates/taprootnofn/input.js +2 -3
- package/dist/src/templates/taprootnofn/output.d.ts +0 -1
- package/dist/src/templates/taprootnofn/output.d.ts.map +1 -1
- package/dist/src/templates/taprootnofn/output.js +4 -5
- package/dist/src/templates/witnesscommitment/output.d.ts +0 -1
- package/dist/src/templates/witnesscommitment/output.d.ts.map +1 -1
- package/dist/src/templates/witnesscommitment/output.js +4 -5
- package/dist/src/templates/witnesspubkeyhash/input.d.ts +0 -1
- package/dist/src/templates/witnesspubkeyhash/input.d.ts.map +1 -1
- package/dist/src/templates/witnesspubkeyhash/input.js +2 -3
- package/dist/src/templates/witnesspubkeyhash/output.d.ts +0 -1
- package/dist/src/templates/witnesspubkeyhash/output.d.ts.map +1 -1
- package/dist/src/templates/witnesspubkeyhash/output.js +2 -3
- package/dist/src/templates/witnessscripthash/input.d.ts +0 -1
- package/dist/src/templates/witnessscripthash/input.d.ts.map +1 -1
- package/dist/src/templates/witnessscripthash/input.js +2 -3
- package/dist/src/templates/witnessscripthash/output.d.ts +0 -1
- package/dist/src/templates/witnessscripthash/output.d.ts.map +1 -1
- package/dist/src/templates/witnessscripthash/output.js +2 -3
- package/dist/src/testutil/index.js +6 -2
- package/dist/src/testutil/keys.d.ts +7 -4
- package/dist/src/testutil/keys.d.ts.map +1 -1
- package/dist/src/testutil/keys.js +29 -12
- package/dist/src/testutil/mock.d.ts +4 -5
- package/dist/src/testutil/mock.d.ts.map +1 -1
- package/dist/src/testutil/mock.js +40 -30
- package/dist/src/testutil/psbt.d.ts +95 -20
- package/dist/src/testutil/psbt.d.ts.map +1 -1
- package/dist/src/testutil/psbt.js +147 -45
- package/dist/src/testutil/transaction.d.ts +15 -6
- package/dist/src/testutil/transaction.d.ts.map +1 -1
- package/dist/src/testutil/transaction.js +30 -29
- package/dist/src/transaction_builder.d.ts +0 -1
- package/dist/src/transaction_builder.d.ts.map +1 -1
- package/dist/src/transaction_builder.js +27 -32
- package/package.json +10 -17
- package/dist/src/noble_ecc.d.ts +0 -28
- package/dist/src/noble_ecc.d.ts.map +0 -1
- package/dist/src/noble_ecc.js +0 -172
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import { PsbtInput, PsbtOutput } from 'bip174/src/lib/interfaces';
|
|
2
|
+
import { Psbt } from 'bitcoinjs-lib/src/psbt';
|
|
3
|
+
import { ProprietaryKeySearch, ProprietaryKeyValue } from './ProprietaryKeyValUtils';
|
|
4
4
|
/**
|
|
5
5
|
* bitgo proprietary key identifier
|
|
6
6
|
*/
|
|
@@ -12,47 +12,43 @@ export declare enum ProprietaryKeySubtype {
|
|
|
12
12
|
ZEC_CONSENSUS_BRANCH_ID = 0,
|
|
13
13
|
MUSIG2_PARTICIPANT_PUB_KEYS = 1,
|
|
14
14
|
MUSIG2_PUB_NONCE = 2,
|
|
15
|
-
MUSIG2_PARTIAL_SIG = 3
|
|
15
|
+
MUSIG2_PARTIAL_SIG = 3,
|
|
16
|
+
PAYGO_ADDRESS_ATTESTATION_PROOF = 4,
|
|
17
|
+
BIP322_MESSAGE = 5
|
|
16
18
|
}
|
|
17
|
-
/**
|
|
18
|
-
* Psbt proprietary keydata object.
|
|
19
|
-
* <compact size uint identifier length> <bytes identifier> <compact size uint subtype> <bytes subkeydata>
|
|
20
|
-
* => <bytes valuedata>
|
|
21
|
-
*/
|
|
22
|
-
export interface ProprietaryKeyValue {
|
|
23
|
-
key: ProprietaryKey;
|
|
24
|
-
value: Buffer;
|
|
25
|
-
}
|
|
26
|
-
/**
|
|
27
|
-
* Psbt proprietary keydata object search fields.
|
|
28
|
-
* <compact size uint identifier length> <bytes identifier> <compact size uint subtype> <bytes subkeydata>
|
|
29
|
-
*/
|
|
30
|
-
export interface ProprietaryKeySearch {
|
|
31
|
-
identifier: string;
|
|
32
|
-
subtype?: number;
|
|
33
|
-
keydata?: Buffer;
|
|
34
|
-
identifierEncoding?: BufferEncoding;
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* alias for PsbtInput type to avoid direct bip174 library dependency by users of the util functions
|
|
38
|
-
*/
|
|
39
|
-
export declare type PsbtInputType = PsbtInput;
|
|
40
19
|
/**
|
|
41
20
|
* Search any data from psbt proprietary key value against keydata.
|
|
42
21
|
* Default identifierEncoding is utf-8 for identifier.
|
|
43
22
|
*/
|
|
44
|
-
export declare function getPsbtInputProprietaryKeyVals(input:
|
|
23
|
+
export declare function getPsbtInputProprietaryKeyVals(input: PsbtInput, keySearch?: ProprietaryKeySearch): ProprietaryKeyValue[];
|
|
24
|
+
export declare function getPsbtOutputProprietaryKeyVals(output: PsbtOutput, keySearch?: ProprietaryKeySearch): ProprietaryKeyValue[];
|
|
45
25
|
/**
|
|
46
26
|
* @return partialSig/tapScriptSig/MUSIG2_PARTIAL_SIG count iff input is not finalized
|
|
47
27
|
*/
|
|
48
|
-
export declare function getPsbtInputSignatureCount(input:
|
|
28
|
+
export declare function getPsbtInputSignatureCount(input: PsbtInput): number;
|
|
49
29
|
/**
|
|
50
30
|
* @return true iff PSBT input is finalized
|
|
51
31
|
*/
|
|
52
|
-
export declare function isPsbtInputFinalized(input:
|
|
32
|
+
export declare function isPsbtInputFinalized(input: PsbtInput): boolean;
|
|
53
33
|
/**
|
|
54
34
|
* @return true iff data starts with magic PSBT byte sequence
|
|
55
35
|
* @param data byte array or hex string
|
|
56
36
|
* */
|
|
57
37
|
export declare function isPsbt(data: Buffer | string): boolean;
|
|
38
|
+
/**
|
|
39
|
+
* First checks if the input is already a buffer that starts with the magic PSBT byte sequence.
|
|
40
|
+
* If not, it checks if the input is a base64- or hex-encoded string that starts with PSBT header.
|
|
41
|
+
*
|
|
42
|
+
* This function is useful when reading a file that could be in any of the above formats or when
|
|
43
|
+
* dealing with a request that could contain a hex or base64 encoded PSBT.
|
|
44
|
+
*
|
|
45
|
+
* @param data
|
|
46
|
+
* @return buffer that starts with the magic PSBT byte sequence
|
|
47
|
+
* @throws Error when conversion is not possible
|
|
48
|
+
*/
|
|
49
|
+
export declare function toPsbtBuffer(data: Buffer | string): Buffer;
|
|
50
|
+
/**
|
|
51
|
+
* This function allows signing or validating a psbt with non-segwit inputs those do not contain nonWitnessUtxo.
|
|
52
|
+
*/
|
|
53
|
+
export declare function withUnsafeNonSegwit<T>(psbt: Psbt, fn: () => T, unsafe?: boolean): T;
|
|
58
54
|
//# sourceMappingURL=PsbtUtil.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PsbtUtil.d.ts","sourceRoot":"","sources":["../../../src/bitgo/PsbtUtil.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"PsbtUtil.d.ts","sourceRoot":"","sources":["../../../src/bitgo/PsbtUtil.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAE9C,OAAO,EAEL,oBAAoB,EACpB,mBAAmB,EACpB,MAAM,0BAA0B,CAAC;AAElC;;GAEG;AACH,eAAO,MAAM,2BAA2B,UAAU,CAAC;AAEnD;;GAEG;AACH,oBAAY,qBAAqB;IAC/B,uBAAuB,IAAO;IAC9B,2BAA2B,IAAO;IAClC,gBAAgB,IAAO;IACvB,kBAAkB,IAAO;IACzB,+BAA+B,IAAO;IACtC,cAAc,IAAO;CACtB;AAED;;;GAGG;AACH,wBAAgB,8BAA8B,CAC5C,KAAK,EAAE,SAAS,EAChB,SAAS,CAAC,EAAE,oBAAoB,GAC/B,mBAAmB,EAAE,CAKvB;AAED,wBAAgB,+BAA+B,CAC7C,MAAM,EAAE,UAAU,EAClB,SAAS,CAAC,EAAE,oBAAoB,GAC/B,mBAAmB,EAAE,CAKvB;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,CAYnE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAE9D;AAED;;;KAGK;AACL,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAUrD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CA6B1D;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,MAAM,UAAO,GAAG,CAAC,CAWhF"}
|
|
@@ -1,7 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
|
|
3
|
+
exports.ProprietaryKeySubtype = exports.PSBT_PROPRIETARY_IDENTIFIER = void 0;
|
|
4
|
+
exports.getPsbtInputProprietaryKeyVals = getPsbtInputProprietaryKeyVals;
|
|
5
|
+
exports.getPsbtOutputProprietaryKeyVals = getPsbtOutputProprietaryKeyVals;
|
|
6
|
+
exports.getPsbtInputSignatureCount = getPsbtInputSignatureCount;
|
|
7
|
+
exports.isPsbtInputFinalized = isPsbtInputFinalized;
|
|
8
|
+
exports.isPsbt = isPsbt;
|
|
9
|
+
exports.toPsbtBuffer = toPsbtBuffer;
|
|
10
|
+
exports.withUnsafeNonSegwit = withUnsafeNonSegwit;
|
|
11
|
+
const ProprietaryKeyValUtils_1 = require("./ProprietaryKeyValUtils");
|
|
5
12
|
/**
|
|
6
13
|
* bitgo proprietary key identifier
|
|
7
14
|
*/
|
|
@@ -15,31 +22,25 @@ var ProprietaryKeySubtype;
|
|
|
15
22
|
ProprietaryKeySubtype[ProprietaryKeySubtype["MUSIG2_PARTICIPANT_PUB_KEYS"] = 1] = "MUSIG2_PARTICIPANT_PUB_KEYS";
|
|
16
23
|
ProprietaryKeySubtype[ProprietaryKeySubtype["MUSIG2_PUB_NONCE"] = 2] = "MUSIG2_PUB_NONCE";
|
|
17
24
|
ProprietaryKeySubtype[ProprietaryKeySubtype["MUSIG2_PARTIAL_SIG"] = 3] = "MUSIG2_PARTIAL_SIG";
|
|
18
|
-
|
|
25
|
+
ProprietaryKeySubtype[ProprietaryKeySubtype["PAYGO_ADDRESS_ATTESTATION_PROOF"] = 4] = "PAYGO_ADDRESS_ATTESTATION_PROOF";
|
|
26
|
+
ProprietaryKeySubtype[ProprietaryKeySubtype["BIP322_MESSAGE"] = 5] = "BIP322_MESSAGE";
|
|
27
|
+
})(ProprietaryKeySubtype || (exports.ProprietaryKeySubtype = ProprietaryKeySubtype = {}));
|
|
19
28
|
/**
|
|
20
29
|
* Search any data from psbt proprietary key value against keydata.
|
|
21
30
|
* Default identifierEncoding is utf-8 for identifier.
|
|
22
31
|
*/
|
|
23
32
|
function getPsbtInputProprietaryKeyVals(input, keySearch) {
|
|
24
|
-
|
|
25
|
-
if (!((_a = input.unknownKeyVals) === null || _a === void 0 ? void 0 : _a.length)) {
|
|
33
|
+
if (!input.unknownKeyVals?.length) {
|
|
26
34
|
return [];
|
|
27
35
|
}
|
|
28
|
-
|
|
29
|
-
|
|
36
|
+
return (0, ProprietaryKeyValUtils_1.getProprietaryKeyValuesFromUnknownKeyValues)(input, keySearch);
|
|
37
|
+
}
|
|
38
|
+
function getPsbtOutputProprietaryKeyVals(output, keySearch) {
|
|
39
|
+
if (!output.unknownKeyVals?.length) {
|
|
40
|
+
return [];
|
|
30
41
|
}
|
|
31
|
-
|
|
32
|
-
return { key: proprietaryKeyVal_1.decodeProprietaryKey(key), value };
|
|
33
|
-
});
|
|
34
|
-
return keyVals.filter((keyVal) => {
|
|
35
|
-
return (keySearch === undefined ||
|
|
36
|
-
(keySearch.identifier === keyVal.key.identifier &&
|
|
37
|
-
(keySearch.subtype === undefined ||
|
|
38
|
-
(keySearch.subtype === keyVal.key.subtype &&
|
|
39
|
-
(!Buffer.isBuffer(keySearch.keydata) || keySearch.keydata.equals(keyVal.key.keydata))))));
|
|
40
|
-
});
|
|
42
|
+
return (0, ProprietaryKeyValUtils_1.getProprietaryKeyValuesFromUnknownKeyValues)(output, keySearch);
|
|
41
43
|
}
|
|
42
|
-
exports.getPsbtInputProprietaryKeyVals = getPsbtInputProprietaryKeyVals;
|
|
43
44
|
/**
|
|
44
45
|
* @return partialSig/tapScriptSig/MUSIG2_PARTIAL_SIG count iff input is not finalized
|
|
45
46
|
*/
|
|
@@ -52,14 +53,12 @@ function getPsbtInputSignatureCount(input) {
|
|
|
52
53
|
subtype: ProprietaryKeySubtype.MUSIG2_PARTIAL_SIG,
|
|
53
54
|
}).length);
|
|
54
55
|
}
|
|
55
|
-
exports.getPsbtInputSignatureCount = getPsbtInputSignatureCount;
|
|
56
56
|
/**
|
|
57
57
|
* @return true iff PSBT input is finalized
|
|
58
58
|
*/
|
|
59
59
|
function isPsbtInputFinalized(input) {
|
|
60
60
|
return Buffer.isBuffer(input.finalScriptSig) || Buffer.isBuffer(input.finalScriptWitness);
|
|
61
61
|
}
|
|
62
|
-
exports.isPsbtInputFinalized = isPsbtInputFinalized;
|
|
63
62
|
/**
|
|
64
63
|
* @return true iff data starts with magic PSBT byte sequence
|
|
65
64
|
* @param data byte array or hex string
|
|
@@ -75,5 +74,58 @@ function isPsbt(data) {
|
|
|
75
74
|
}
|
|
76
75
|
return 5 <= data.length && data.readUInt32BE(0) === 0x70736274 && data.readUInt8(4) === 0xff;
|
|
77
76
|
}
|
|
78
|
-
|
|
79
|
-
|
|
77
|
+
/**
|
|
78
|
+
* First checks if the input is already a buffer that starts with the magic PSBT byte sequence.
|
|
79
|
+
* If not, it checks if the input is a base64- or hex-encoded string that starts with PSBT header.
|
|
80
|
+
*
|
|
81
|
+
* This function is useful when reading a file that could be in any of the above formats or when
|
|
82
|
+
* dealing with a request that could contain a hex or base64 encoded PSBT.
|
|
83
|
+
*
|
|
84
|
+
* @param data
|
|
85
|
+
* @return buffer that starts with the magic PSBT byte sequence
|
|
86
|
+
* @throws Error when conversion is not possible
|
|
87
|
+
*/
|
|
88
|
+
function toPsbtBuffer(data) {
|
|
89
|
+
if (Buffer.isBuffer(data)) {
|
|
90
|
+
// we are dealing with a buffer that looks like a psbt already
|
|
91
|
+
if (isPsbt(data)) {
|
|
92
|
+
return data;
|
|
93
|
+
}
|
|
94
|
+
// we could be dealing with a buffer that could be a hex or base64 encoded psbt
|
|
95
|
+
data = data.toString('ascii');
|
|
96
|
+
}
|
|
97
|
+
if (typeof data === 'string') {
|
|
98
|
+
const encodings = ['hex', 'base64'];
|
|
99
|
+
for (const encoding of encodings) {
|
|
100
|
+
let buffer;
|
|
101
|
+
try {
|
|
102
|
+
buffer = Buffer.from(data, encoding);
|
|
103
|
+
}
|
|
104
|
+
catch (e) {
|
|
105
|
+
continue;
|
|
106
|
+
}
|
|
107
|
+
if (isPsbt(buffer)) {
|
|
108
|
+
return buffer;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
throw new Error(`data is not in any of the following formats: ${encodings.join(', ')}`);
|
|
112
|
+
}
|
|
113
|
+
throw new Error('data must be a buffer or a string');
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* This function allows signing or validating a psbt with non-segwit inputs those do not contain nonWitnessUtxo.
|
|
117
|
+
*/
|
|
118
|
+
function withUnsafeNonSegwit(psbt, fn, unsafe = true) {
|
|
119
|
+
const prevValue = psbt.__CACHE.__UNSAFE_SIGN_NONSEGWIT;
|
|
120
|
+
const prevValueWarn = psbt.__CACHE.__WARN_UNSAFE_SIGN_NONSEGWIT;
|
|
121
|
+
psbt.__CACHE.__UNSAFE_SIGN_NONSEGWIT = unsafe;
|
|
122
|
+
psbt.__CACHE.__WARN_UNSAFE_SIGN_NONSEGWIT = !unsafe;
|
|
123
|
+
try {
|
|
124
|
+
return fn();
|
|
125
|
+
}
|
|
126
|
+
finally {
|
|
127
|
+
psbt.__CACHE.__UNSAFE_SIGN_NONSEGWIT = prevValue;
|
|
128
|
+
psbt.__CACHE.__WARN_UNSAFE_SIGN_NONSEGWIT = prevValueWarn;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUHNidFV0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYml0Z28vUHNidFV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBOEJBLHdFQVFDO0FBRUQsMEVBUUM7QUFLRCxnRUFZQztBQUtELG9EQUVDO0FBTUQsd0JBVUM7QUFhRCxvQ0E2QkM7QUFLRCxrREFXQztBQS9JRCxxRUFJa0M7QUFFbEM7O0dBRUc7QUFDVSxRQUFBLDJCQUEyQixHQUFHLE9BQU8sQ0FBQztBQUVuRDs7R0FFRztBQUNILElBQVkscUJBT1g7QUFQRCxXQUFZLHFCQUFxQjtJQUMvQix1R0FBOEIsQ0FBQTtJQUM5QiwrR0FBa0MsQ0FBQTtJQUNsQyx5RkFBdUIsQ0FBQTtJQUN2Qiw2RkFBeUIsQ0FBQTtJQUN6Qix1SEFBc0MsQ0FBQTtJQUN0QyxxRkFBcUIsQ0FBQTtBQUN2QixDQUFDLEVBUFcscUJBQXFCLHFDQUFyQixxQkFBcUIsUUFPaEM7QUFFRDs7O0dBR0c7QUFDSCxTQUFnQiw4QkFBOEIsQ0FDNUMsS0FBZ0IsRUFDaEIsU0FBZ0M7SUFFaEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLEVBQUUsTUFBTSxFQUFFLENBQUM7UUFDbEMsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBQ0QsT0FBTyxJQUFBLG9FQUEyQyxFQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztBQUN2RSxDQUFDO0FBRUQsU0FBZ0IsK0JBQStCLENBQzdDLE1BQWtCLEVBQ2xCLFNBQWdDO0lBRWhDLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxFQUFFLE1BQU0sRUFBRSxDQUFDO1FBQ25DLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUNELE9BQU8sSUFBQSxvRUFBMkMsRUFBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDeEUsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0IsMEJBQTBCLENBQUMsS0FBZ0I7SUFDekQsSUFBSSxvQkFBb0IsQ0FB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O0FBQ0gsU0FBZ0IsbUJBQW1CLENBQUksSUFBVSxFQUFFLEVBQVcsRUFBRSxNQUFNLEdBQUcsSUFBSTtJQUMzRSxNQUFNLFNBQVMsR0FBSSxJQUFZLENBQUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDO0lBQ2hFLE1BQU0sYUFBYSxHQUFJLElBQVksQ0FBQyxPQUFPLENBQUMsNEJBQTRCLENBQUM7SUFDeEUsSUFBWSxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsR0FBRyxNQUFNLENBQUM7SUFDdEQsSUFBWSxDQUFDLE9BQU8sQ0FBQyw0QkFBNEIsR0FBRyxDQUFDLE1BQU0sQ0FBQztJQUM3RCxJQUFJLENBQUM7UUFDSCxPQUFPLEVBQUUsRUFBRSxDQUFDO0lBQ2QsQ0FBQztZQUFTLENBQUM7UUFDUixJQUFZLENBQUMsT0FBTyxDQUFDLHVCQUF1QixHQUFHLFNBQVMsQ0FBQztRQUN6RCxJQUFZLENBQUMsT0FBTyxDQUFDLDRCQUE0QixHQUFHLGFBQWEsQ0FBQztJQUNyRSxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBzYnRJbnB1dCwgUHNidE91dHB1dCB9IGZyb20gJ2JpcDE3NC9zcmMvbGliL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgUHNidCB9IGZyb20gJ2JpdGNvaW5qcy1saWIvc3JjL3BzYnQnO1xuXG5pbXBvcnQge1xuICBnZXRQcm9wcmlldGFyeUtleVZhbHVlc0Zyb21Vbmtub3duS2V5VmFsdWVzLFxuICBQcm9wcmlldGFyeUtleVNlYXJjaCxcbiAgUHJvcHJpZXRhcnlLZXlWYWx1ZSxcbn0gZnJvbSAnLi9Qcm9wcmlldGFyeUtleVZhbFV0aWxzJztcblxuLyoqXG4gKiBiaXRnbyBwcm9wcmlldGFyeSBrZXkgaWRlbnRpZmllclxuICovXG5leHBvcnQgY29uc3QgUFNCVF9QUk9QUklFVEFSWV9JREVOVElGSUVSID0gJ0JJVEdPJztcblxuLyoqXG4gKiBzdWJ0eXBlIGZvciBwcm9wcmlldGFyeSBrZXlzIHRoYXQgYml0Z28gdXNlc1xuICovXG5leHBvcnQgZW51bSBQcm9wcmlldGFyeUtleVN1YnR5cGUge1xuICBaRUNfQ09OU0VOU1VTX0JSQU5DSF9JRCA9IDB4MDAsXG4gIE1VU0lHMl9QQVJUSUNJUEFOVF9QVUJfS0VZUyA9IDB4MDEsXG4gIE1VU0lHMl9QVUJfTk9OQ0UgPSAweDAyLFxuICBNVVNJRzJfUEFSVElBTF9TSUcgPSAweDAzLFxuICBQQVlHT19BRERSRVNTX0FUVEVTVEFUSU9OX1BST09GID0gMHgwNCxcbiAgQklQMzIyX01FU1NBR0UgPSAweDA1LFxufVxuXG4vKipcbiAqIFNlYXJjaCBhbnkgZGF0YSBmcm9tIHBzYnQgcHJvcHJpZXRhcnkga2V5IHZhbHVlIGFnYWluc3Qga2V5ZGF0YS5cbiAqIERlZmF1bHQgaWRlbnRpZmllckVuY29kaW5nIGlzIHV0Zi04IGZvciBpZGVudGlmaWVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UHNidElucHV0UHJvcHJpZXRhcnlLZXlWYWxzKFxuICBpbnB1dDogUHNidElucHV0LFxuICBrZXlTZWFyY2g/OiBQcm9wcmlldGFyeUtleVNlYXJjaFxuKTogUHJvcHJpZXRhcnlLZXlWYWx1ZVtdIHtcbiAgaWYgKCFpbnB1dC51bmtub3duS2V5VmFscz8ubGVuZ3RoKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIHJldHVybiBnZXRQcm9wcmlldGFyeUtleVZhbHVlc0Zyb21Vbmtub3duS2V5VmFsdWVzKGlucHV0LCBrZXlTZWFyY2gpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UHNidE91dHB1dFByb3ByaWV0YXJ5S2V5VmFscyhcbiAgb3V0cHV0OiBQc2J0T3V0cHV0LFxuICBrZXlTZWFyY2g/OiBQcm9wcmlldGFyeUtleVNlYXJjaFxuKTogUHJvcHJpZXRhcnlLZXlWYWx1ZVtdIHtcbiAgaWYgKCFvdXRwdXQudW5rbm93bktleVZhbHM/Lmxlbmd0aCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICByZXR1cm4gZ2V0UHJvcHJpZXRhcnlLZXlWYWx1ZXNGcm9tVW5rbm93bktleVZhbHVlcyhvdXRwdXQsIGtleVNlYXJjaCk7XG59XG5cbi8qKlxuICogQHJldHVybiBwYXJ0aWFsU2lnL3RhcFNjcmlwdFNpZy9NVVNJRzJfUEFSVElBTF9TSUcgY291bnQgaWZmIGlucHV0IGlzIG5vdCBmaW5hbGl6ZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFBzYnRJbnB1dFNpZ25hdHVyZUNvdW50KGlucHV0OiBQc2J0SW5wdXQpOiBudW1iZXIge1xuICBpZiAoaXNQc2J0SW5wdXRGaW5hbGl6ZWQoaW5wdXQpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnB1dCBpcyBhbHJlYWR5IGZpbmFsaXplZCcpO1xuICB9XG4gIHJldHVybiBNYXRoLm1heChcbiAgICBBcnJheS5pc0FycmF5KGlucHV0LnBhcnRpYWxTaWcpID8gaW5wdXQucGFydGlhbFNpZy5sZW5ndGggOiAwLFxuICAgIEFycmF5LmlzQXJyYXkoaW5wdXQudGFwU2NyaXB0U2lnKSA/IGlucHV0LnRhcFNjcmlwdFNpZy5sZW5ndGggOiAwLFxuICAgIGdldFBzYnRJbnB1dFByb3ByaWV0YXJ5S2V5VmFscyhpbnB1dCwge1xuICAgICAgaWRlbnRpZmllcjogUFNCVF9QUk9QUklFVEFSWV9JREVOVElGSUVSLFxuICAgICAgc3VidHlwZTogUHJvcHJpZXRhcnlLZXlTdWJ0eXBlLk1VU0lHMl9QQVJUSUFMX1NJRyxcbiAgICB9KS5sZW5ndGhcbiAgKTtcbn1cblxuLyoqXG4gKiBAcmV0dXJuIHRydWUgaWZmIFBTQlQgaW5wdXQgaXMgZmluYWxpemVkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1BzYnRJbnB1dEZpbmFsaXplZChpbnB1dDogUHNidElucHV0KTogYm9vbGVhbiB7XG4gIHJldHVybiBCdWZmZXIuaXNCdWZmZXIoaW5wdXQuZmluYWxTY3JpcHRTaWcpIHx8IEJ1ZmZlci5pc0J1ZmZlcihpbnB1dC5maW5hbFNjcmlwdFdpdG5lc3MpO1xufVxuXG4vKipcbiAqIEByZXR1cm4gdHJ1ZSBpZmYgZGF0YSBzdGFydHMgd2l0aCBtYWdpYyBQU0JUIGJ5dGUgc2VxdWVuY2VcbiAqIEBwYXJhbSBkYXRhIGJ5dGUgYXJyYXkgb3IgaGV4IHN0cmluZ1xuICogKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1BzYnQoZGF0YTogQnVmZmVyIHwgc3RyaW5nKTogYm9vbGVhbiB7XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9iaXRjb2luL2JpcHMvYmxvYi9tYXN0ZXIvYmlwLTAxNzQubWVkaWF3aWtpI3NwZWNpZmljYXRpb25cbiAgLy8gMHg3MDczNjI3NCAtIEFTQ0lJIGZvciAncHNidCcuIDB4ZmYgLSBzZXBhcmF0b3JcbiAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xuICAgIGlmIChkYXRhLmxlbmd0aCA8IDEwKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGRhdGEgPSBCdWZmZXIuZnJvbShkYXRhLnNsaWNlKDAsIDEwKSwgJ2hleCcpO1xuICB9XG4gIHJldHVybiA1IDw9IGRhdGEubGVuZ3RoICYmIGRhdGEucmVhZFVJbnQzMkJFKDApID09PSAweDcwNzM2Mjc0ICYmIGRhdGEucmVhZFVJbnQ4KDQpID09PSAweGZmO1xufVxuXG4vKipcbiAqIEZpcnN0IGNoZWNrcyBpZiB0aGUgaW5wdXQgaXMgYWxyZWFkeSBhIGJ1ZmZlciB0aGF0IHN0YXJ0cyB3aXRoIHRoZSBtYWdpYyBQU0JUIGJ5dGUgc2VxdWVuY2UuXG4gKiBJZiBub3QsIGl0IGNoZWNrcyBpZiB0aGUgaW5wdXQgaXMgYSBiYXNlNjQtIG9yIGhleC1lbmNvZGVkIHN0cmluZyB0aGF0IHN0YXJ0cyB3aXRoIFBTQlQgaGVhZGVyLlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZnVsIHdoZW4gcmVhZGluZyBhIGZpbGUgdGhhdCBjb3VsZCBiZSBpbiBhbnkgb2YgdGhlIGFib3ZlIGZvcm1hdHMgb3Igd2hlblxuICogZGVhbGluZyB3aXRoIGEgcmVxdWVzdCB0aGF0IGNvdWxkIGNvbnRhaW4gYSBoZXggb3IgYmFzZTY0IGVuY29kZWQgUFNCVC5cbiAqXG4gKiBAcGFyYW0gZGF0YVxuICogQHJldHVybiBidWZmZXIgdGhhdCBzdGFydHMgd2l0aCB0aGUgbWFnaWMgUFNCVCBieXRlIHNlcXVlbmNlXG4gKiBAdGhyb3dzIEVycm9yIHdoZW4gY29udmVyc2lvbiBpcyBub3QgcG9zc2libGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvUHNidEJ1ZmZlcihkYXRhOiBCdWZmZXIgfCBzdHJpbmcpOiBCdWZmZXIge1xuICBpZiAoQnVmZmVyLmlzQnVmZmVyKGRhdGEpKSB7XG4gICAgLy8gd2UgYXJlIGRlYWxpbmcgd2l0aCBhIGJ1ZmZlciB0aGF0IGxvb2tzIGxpa2UgYSBwc2J0IGFscmVhZHlcbiAgICBpZiAoaXNQc2J0KGRhdGEpKSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICAvLyB3ZSBjb3VsZCBiZSBkZWFsaW5nIHdpdGggYSBidWZmZXIgdGhhdCBjb3VsZCBiZSBhIGhleCBvciBiYXNlNjQgZW5jb2RlZCBwc2J0XG4gICAgZGF0YSA9IGRhdGEudG9TdHJpbmcoJ2FzY2lpJyk7XG4gIH1cblxuICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgY29uc3QgZW5jb2RpbmdzID0gWydoZXgnLCAnYmFzZTY0J10gYXMgY29uc3Q7XG4gICAgZm9yIChjb25zdCBlbmNvZGluZyBvZiBlbmNvZGluZ3MpIHtcbiAgICAgIGxldCBidWZmZXI6IEJ1ZmZlcjtcbiAgICAgIHRyeSB7XG4gICAgICAgIGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKGRhdGEsIGVuY29kaW5nKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoaXNQc2J0KGJ1ZmZlcikpIHtcbiAgICAgICAgcmV0dXJuIGJ1ZmZlcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoYGRhdGEgaXMgbm90IGluIGFueSBvZiB0aGUgZm9sbG93aW5nIGZvcm1hdHM6ICR7ZW5jb2RpbmdzLmpvaW4oJywgJyl9YCk7XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoJ2RhdGEgbXVzdCBiZSBhIGJ1ZmZlciBvciBhIHN0cmluZycpO1xufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gYWxsb3dzIHNpZ25pbmcgb3IgdmFsaWRhdGluZyBhIHBzYnQgd2l0aCBub24tc2Vnd2l0IGlucHV0cyB0aG9zZSBkbyBub3QgY29udGFpbiBub25XaXRuZXNzVXR4by5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdpdGhVbnNhZmVOb25TZWd3aXQ8VD4ocHNidDogUHNidCwgZm46ICgpID0+IFQsIHVuc2FmZSA9IHRydWUpOiBUIHtcbiAgY29uc3QgcHJldlZhbHVlID0gKHBzYnQgYXMgYW55KS5fX0NBQ0hFLl9fVU5TQUZFX1NJR05fTk9OU0VHV0lUO1xuICBjb25zdCBwcmV2VmFsdWVXYXJuID0gKHBzYnQgYXMgYW55KS5fX0NBQ0hFLl9fV0FSTl9VTlNBRkVfU0lHTl9OT05TRUdXSVQ7XG4gIChwc2J0IGFzIGFueSkuX19DQUNIRS5fX1VOU0FGRV9TSUdOX05PTlNFR1dJVCA9IHVuc2FmZTtcbiAgKHBzYnQgYXMgYW55KS5fX0NBQ0hFLl9fV0FSTl9VTlNBRkVfU0lHTl9OT05TRUdXSVQgPSAhdW5zYWZlO1xuICB0cnkge1xuICAgIHJldHVybiBmbigpO1xuICB9IGZpbmFsbHkge1xuICAgIChwc2J0IGFzIGFueSkuX19DQUNIRS5fX1VOU0FGRV9TSUdOX05PTlNFR1dJVCA9IHByZXZWYWx1ZTtcbiAgICAocHNidCBhcyBhbnkpLl9fQ0FDSEUuX19XQVJOX1VOU0FGRV9TSUdOX05PTlNFR1dJVCA9IHByZXZWYWx1ZVdhcm47XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
/// <reference types="node" />
|
|
2
1
|
import { TxOutput } from 'bitcoinjs-lib';
|
|
3
2
|
import { Network } from '..';
|
|
4
3
|
import { UtxoTransactionBuilder } from './UtxoTransactionBuilder';
|
|
@@ -55,7 +54,7 @@ export declare function getOutputIdForInput(i: {
|
|
|
55
54
|
/**
|
|
56
55
|
* Reference to output of an existing transaction
|
|
57
56
|
*/
|
|
58
|
-
export
|
|
57
|
+
export type TxOutPoint = {
|
|
59
58
|
txid: string;
|
|
60
59
|
vout: number;
|
|
61
60
|
};
|
|
@@ -63,7 +62,7 @@ export declare type TxOutPoint = {
|
|
|
63
62
|
* Output reference and script data.
|
|
64
63
|
* Suitable for use for `txb.addInput()`
|
|
65
64
|
*/
|
|
66
|
-
export
|
|
65
|
+
export type PrevOutput<TNumber extends number | bigint = number> = TxOutPoint & TxOutput<TNumber> & {
|
|
67
66
|
prevTx?: Buffer;
|
|
68
67
|
};
|
|
69
68
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Unspent.d.ts","sourceRoot":"","sources":["../../../src/bitgo/Unspent.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Unspent.d.ts","sourceRoot":"","sources":["../../../src/bitgo/Unspent.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,21 +1,29 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.isUnspentWithPrevTx = isUnspentWithPrevTx;
|
|
4
|
+
exports.toOutput = toOutput;
|
|
5
|
+
exports.fromOutput = fromOutput;
|
|
6
|
+
exports.fromOutputWithPrevTx = fromOutputWithPrevTx;
|
|
7
|
+
exports.parseOutputId = parseOutputId;
|
|
8
|
+
exports.formatOutputId = formatOutputId;
|
|
9
|
+
exports.getOutputIdForInput = getOutputIdForInput;
|
|
10
|
+
exports.toPrevOutput = toPrevOutput;
|
|
11
|
+
exports.toPrevOutputWithPrevTx = toPrevOutputWithPrevTx;
|
|
12
|
+
exports.addToTransactionBuilder = addToTransactionBuilder;
|
|
13
|
+
exports.unspentSum = unspentSum;
|
|
4
14
|
const address_1 = require("../address");
|
|
5
15
|
function isUnspentWithPrevTx(u) {
|
|
6
16
|
return Buffer.isBuffer(u.prevTx);
|
|
7
17
|
}
|
|
8
|
-
exports.isUnspentWithPrevTx = isUnspentWithPrevTx;
|
|
9
18
|
/**
|
|
10
19
|
* @return TxOutput from Unspent
|
|
11
20
|
*/
|
|
12
21
|
function toOutput(u, network) {
|
|
13
22
|
return {
|
|
14
|
-
script: address_1.toOutputScript(u.address, network),
|
|
23
|
+
script: (0, address_1.toOutputScript)(u.address, network),
|
|
15
24
|
value: u.value,
|
|
16
25
|
};
|
|
17
26
|
}
|
|
18
|
-
exports.toOutput = toOutput;
|
|
19
27
|
/**
|
|
20
28
|
* @return Unspent from TxOutput
|
|
21
29
|
*/
|
|
@@ -26,18 +34,16 @@ function fromOutput(tx, vout) {
|
|
|
26
34
|
}
|
|
27
35
|
return {
|
|
28
36
|
id: formatOutputId({ txid: tx.getId(), vout }),
|
|
29
|
-
address: address_1.fromOutputScript(o.script, tx.network),
|
|
37
|
+
address: (0, address_1.fromOutputScript)(o.script, tx.network),
|
|
30
38
|
value: o.value,
|
|
31
39
|
};
|
|
32
40
|
}
|
|
33
|
-
exports.fromOutput = fromOutput;
|
|
34
41
|
function fromOutputWithPrevTx(tx, vout) {
|
|
35
42
|
return {
|
|
36
43
|
...fromOutput(tx, vout),
|
|
37
44
|
prevTx: tx.toBuffer(),
|
|
38
45
|
};
|
|
39
46
|
}
|
|
40
|
-
exports.fromOutputWithPrevTx = fromOutputWithPrevTx;
|
|
41
47
|
/**
|
|
42
48
|
* @param outputId
|
|
43
49
|
* @return TxOutPoint
|
|
@@ -57,7 +63,6 @@ function parseOutputId(outputId) {
|
|
|
57
63
|
}
|
|
58
64
|
return { txid, vout };
|
|
59
65
|
}
|
|
60
|
-
exports.parseOutputId = parseOutputId;
|
|
61
66
|
/**
|
|
62
67
|
* @param txid
|
|
63
68
|
* @param vout
|
|
@@ -66,14 +71,12 @@ exports.parseOutputId = parseOutputId;
|
|
|
66
71
|
function formatOutputId({ txid, vout }) {
|
|
67
72
|
return `${txid}:${vout}`;
|
|
68
73
|
}
|
|
69
|
-
exports.formatOutputId = formatOutputId;
|
|
70
74
|
function getOutputIdForInput(i) {
|
|
71
75
|
return {
|
|
72
76
|
txid: Buffer.from(i.hash).reverse().toString('hex'),
|
|
73
77
|
vout: i.index,
|
|
74
78
|
};
|
|
75
79
|
}
|
|
76
|
-
exports.getOutputIdForInput = getOutputIdForInput;
|
|
77
80
|
/**
|
|
78
81
|
* @return PrevOutput from Unspent
|
|
79
82
|
*/
|
|
@@ -83,7 +86,6 @@ function toPrevOutput(u, network) {
|
|
|
83
86
|
...toOutput(u, network),
|
|
84
87
|
};
|
|
85
88
|
}
|
|
86
|
-
exports.toPrevOutput = toPrevOutput;
|
|
87
89
|
/**
|
|
88
90
|
* @return PrevOutput with prevTx from Unspent
|
|
89
91
|
*/
|
|
@@ -104,7 +106,6 @@ function toPrevOutputWithPrevTx(u, network) {
|
|
|
104
106
|
prevTx,
|
|
105
107
|
};
|
|
106
108
|
}
|
|
107
|
-
exports.toPrevOutputWithPrevTx = toPrevOutputWithPrevTx;
|
|
108
109
|
/**
|
|
109
110
|
* @param txb
|
|
110
111
|
* @param u
|
|
@@ -114,7 +115,6 @@ function addToTransactionBuilder(txb, u, sequence) {
|
|
|
114
115
|
const { txid, vout, script, value } = toPrevOutput(u, txb.network);
|
|
115
116
|
txb.addInput(txid, vout, sequence, script, value);
|
|
116
117
|
}
|
|
117
|
-
exports.addToTransactionBuilder = addToTransactionBuilder;
|
|
118
118
|
/**
|
|
119
119
|
* Sum the values of the unspents.
|
|
120
120
|
* Throws error if sum is not a safe integer value, or if unspent amount types do not match `amountType`
|
|
@@ -134,5 +134,4 @@ function unspentSum(unspents, amountType = 'number') {
|
|
|
134
134
|
return sum;
|
|
135
135
|
}
|
|
136
136
|
}
|
|
137
|
-
exports.unspentSum = unspentSum;
|
|
138
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVW5zcGVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9iaXRnby9VbnNwZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBLHdDQUE4RDtBQTRCOUQsU0FBZ0IsbUJBQW1CLENBQ2pDLENBQW1CO0lBRW5CLE9BQU8sTUFBTSxDQUFDLFFBQVEsQ0FBRSxDQUFnQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ25FLENBQUM7QUFKRCxrREFJQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0IsUUFBUSxDQUFrQyxDQUFtQixFQUFFLE9BQWdCO0lBQzdGLE9BQU87UUFDTCxNQUFNLEVBQUUsd0JBQWMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQztRQUMxQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUs7S0FDZixDQUFDO0FBQ0osQ0FBQztBQUxELDRCQUtDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixVQUFVLENBQ3hCLEVBQTRCLEVBQzVCLElBQVk7SUFFWixNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hCLElBQUksQ0FBQyxDQUFDLEVBQUU7UUFDTixNQUFNLElBQUksS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0tBQ2pDO0lBQ0QsT0FBTztRQUNMLEVBQUUsRUFBRSxjQUFjLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDO1FBQzlDLE9BQU8sRUFBRSwwQkFBZ0IsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUM7UUFDL0MsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLO0tBQ2YsQ0FBQztBQUNKLENBQUM7QUFiRCxnQ0FhQztBQUVELFNBQWdCLG9CQUFvQixDQUNsQyxFQUE0QixFQUM1QixJQUFZO0lBRVosT0FBTztRQUNMLEdBQUcsVUFBVSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUM7UUFDdkIsTUFBTSxFQUFFLEVBQUUsQ0FBQyxRQUFRLEVBQUU7S0FDdEIsQ0FBQztBQUNKLENBQUM7QUFSRCxvREFRQztBQUVEOzs7R0FHRztBQUNILFNBQWdCLGFBQWEsQ0FBQyxRQUFnQjtJQUM1QyxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xDLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDdEIsTUFBTSxJQUFJLEtBQUssQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFDO0tBQ2pFO0lBQ0QsTUFBTSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsR0FBRyxLQUFLLENBQUM7SUFDOUIsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzdCLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxFQUFFLEVBQUU7UUFDdEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0tBQ3hEO0lBQ0QsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQ2pFLE1BQU0sSUFBSSxLQUFLLENBQUMsb0NBQW9DLENBQUMsQ0FBQztLQUN2RDtJQUNELE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDeEIsQ0FBQztBQWRELHNDQWNDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQWdCLGNBQWMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQWM7SUFDdkQsT0FBTyxHQUFHLElBQUksSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUMzQixDQUFDO0FBRkQsd0NBRUM7QUFFRCxTQUFnQixtQkFBbUIsQ0FBQyxDQUFrQztJQUNwRSxPQUFPO1FBQ0wsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7UUFDbkQsSUFBSSxFQUFFLENBQUMsQ0FBQyxLQUFLO0tBQ2QsQ0FBQztBQUNKLENBQUM7QUFMRCxrREFLQztBQW1CRDs7R0FFRztBQUNILFNBQWdCLFlBQVksQ0FDMUIsQ0FBbUIsRUFDbkIsT0FBZ0I7SUFFaEIsT0FBTztRQUNMLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDdEIsR0FBRyxRQUFRLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQztLQUN4QixDQUFDO0FBQ0osQ0FBQztBQVJELG9DQVFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixzQkFBc0IsQ0FDcEMsQ0FBMEMsRUFDMUMsT0FBZ0I7SUFFaEIsSUFBSSxNQUFNLENBQUM7SUFDWCxJQUFJLE9BQU8sQ0FBQyxDQUFDLE1BQU0sS0FBSyxRQUFRLEVBQUU7UUFDaEMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztLQUN2QztTQUFNLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUU7UUFDcEMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7S0FDbkI7U0FBTSxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssU0FBUyxFQUFFO1FBQ2pDLE1BQU0sSUFBSSxLQUFLLENBQUMsbUNBQW1DLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0tBQ2hFO0lBQ0QsT0FBTztRQUNMLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDdEIsR0FBRyxRQUFRLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQztRQUN2QixNQUFNO0tBQ1AsQ0FBQztBQUNKLENBQUM7QUFqQkQsd0RBaUJDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQWdCLHVCQUF1QixDQUNyQyxHQUFvQyxFQUNwQyxDQUFtQixFQUNuQixRQUFpQjtJQUVqQixNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsWUFBWSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsT0FBa0IsQ0FBQyxDQUFDO0lBQzlFLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3BELENBQUM7QUFQRCwwREFPQztBQUVEOzs7Ozs7R0FNRztBQUNILFNBQWdCLFVBQVUsQ0FDeEIsUUFBOEIsRUFDOUIsYUFBa0MsUUFBUTtJQUUxQyxJQUFJLFVBQVUsS0FBSyxRQUFRLEVBQUU7UUFDM0IsT0FBTyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFJLENBQUMsQ0FBQyxLQUFnQixFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBWSxDQUFDO0tBQ3JGO1NBQU07UUFDTCxNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFJLENBQUMsQ0FBQyxLQUFnQixFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlFLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQzlCLE1BQU0sSUFBSSxLQUFLLENBQUMsaUVBQWlFLENBQUMsQ0FBQztTQUNwRjtRQUNELE9BQU8sR0FBYyxDQUFDO0tBQ3ZCO0FBQ0gsQ0FBQztBQWJELGdDQWFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVHhPdXRwdXQgfSBmcm9tICdiaXRjb2luanMtbGliJztcbmltcG9ydCB7IE5ldHdvcmsgfSBmcm9tICcuLic7XG5pbXBvcnQgeyBmcm9tT3V0cHV0U2NyaXB0LCB0b091dHB1dFNjcmlwdCB9IGZyb20gJy4uL2FkZHJlc3MnO1xuaW1wb3J0IHsgVXR4b1RyYW5zYWN0aW9uQnVpbGRlciB9IGZyb20gJy4vVXR4b1RyYW5zYWN0aW9uQnVpbGRlcic7XG5pbXBvcnQgeyBVdHhvVHJhbnNhY3Rpb24gfSBmcm9tICcuL1V0eG9UcmFuc2FjdGlvbic7XG5cbi8qKlxuICogUHVibGljIHVuc3BlbnQgZGF0YSBpbiBCaXRHby1zcGVjaWZpYyByZXByZXNlbnRhdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVbnNwZW50PFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+IHtcbiAgLyoqXG4gICAqIEZvcm1hdDogJHt0eGlkfToke3ZvdXR9LlxuICAgKiBVc2UgYHBhcnNlT3V0cHV0SWQoaWQpYCB0byBwYXJzZS5cbiAgICovXG4gIGlkOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgbmV0d29yay1zcGVjaWZpYyBlbmNvZGVkIGFkZHJlc3MuXG4gICAqIFVzZSBgdG9PdXRwdXRTY3JpcHQoYWRkcmVzcywgbmV0d29yaylgIHRvIG9idGFpbiBzY3JpcHRQdWJLZXkuXG4gICAqL1xuICBhZGRyZXNzOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgYW1vdW50IGluIHNhdG9zaGkuXG4gICAqL1xuICB2YWx1ZTogVE51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVbnNwZW50V2l0aFByZXZUeDxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPiBleHRlbmRzIFVuc3BlbnQ8VE51bWJlcj4ge1xuICBwcmV2VHg6IEJ1ZmZlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVW5zcGVudFdpdGhQcmV2VHg8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCwgVFVuc3BlbnQgZXh0ZW5kcyBVbnNwZW50PFROdW1iZXI+PihcbiAgdTogVW5zcGVudDxUTnVtYmVyPlxuKTogdSBpcyBUVW5zcGVudCAmIHsgcHJldlR4OiBCdWZmZXIgfSB7XG4gIHJldHVybiBCdWZmZXIuaXNCdWZmZXIoKHUgYXMgVW5zcGVudFdpdGhQcmV2VHg8VE51bWJlcj4pLnByZXZUeCk7XG59XG5cbi8qKlxuICogQHJldHVybiBUeE91dHB1dCBmcm9tIFVuc3BlbnRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvT3V0cHV0PFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQ+KHU6IFVuc3BlbnQ8VE51bWJlcj4sIG5ldHdvcms6IE5ldHdvcmspOiBUeE91dHB1dDxUTnVtYmVyPiB7XG4gIHJldHVybiB7XG4gICAgc2NyaXB0OiB0b091dHB1dFNjcmlwdCh1LmFkZHJlc3MsIG5ldHdvcmspLFxuICAgIHZhbHVlOiB1LnZhbHVlLFxuICB9O1xufVxuXG4vKipcbiAqIEByZXR1cm4gVW5zcGVudCBmcm9tIFR4T3V0cHV0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmcm9tT3V0cHV0PFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQ+KFxuICB0eDogVXR4b1RyYW5zYWN0aW9uPFROdW1iZXI+LFxuICB2b3V0OiBudW1iZXJcbik6IFVuc3BlbnQ8VE51bWJlcj4ge1xuICBjb25zdCBvID0gdHgub3V0c1t2b3V0XTtcbiAgaWYgKCFvKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIHZvdXRgKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIGlkOiBmb3JtYXRPdXRwdXRJZCh7IHR4aWQ6IHR4LmdldElkKCksIHZvdXQgfSksXG4gICAgYWRkcmVzczogZnJvbU91dHB1dFNjcmlwdChvLnNjcmlwdCwgdHgubmV0d29yayksXG4gICAgdmFsdWU6IG8udmFsdWUsXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tT3V0cHV0V2l0aFByZXZUeDxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50PihcbiAgdHg6IFV0eG9UcmFuc2FjdGlvbjxUTnVtYmVyPixcbiAgdm91dDogbnVtYmVyXG4pOiBVbnNwZW50V2l0aFByZXZUeDxUTnVtYmVyPiB7XG4gIHJldHVybiB7XG4gICAgLi4uZnJvbU91dHB1dCh0eCwgdm91dCksXG4gICAgcHJldlR4OiB0eC50b0J1ZmZlcigpLFxuICB9O1xufVxuXG4vKipcbiAqIEBwYXJhbSBvdXRwdXRJZFxuICogQHJldHVybiBUeE91dFBvaW50XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU91dHB1dElkKG91dHB1dElkOiBzdHJpbmcpOiBUeE91dFBvaW50IHtcbiAgY29uc3QgcGFydHMgPSBvdXRwdXRJZC5zcGxpdCgnOicpO1xuICBpZiAocGFydHMubGVuZ3RoICE9PSAyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIG91dHB1dElkLCBtdXN0IGhhdmUgZm9ybWF0IHR4aWQ6dm91dGApO1xuICB9XG4gIGNvbnN0IFt0eGlkLCB2b3V0U3RyXSA9IHBhcnRzO1xuICBjb25zdCB2b3V0ID0gTnVtYmVyKHZvdXRTdHIpO1xuICBpZiAodHhpZC5sZW5ndGggIT09IDY0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIHR4aWQgJHt0eGlkfSAke3R4aWQubGVuZ3RofWApO1xuICB9XG4gIGlmIChOdW1iZXIuaXNOYU4odm91dCkgfHwgdm91dCA8IDAgfHwgIU51bWJlci5pc1NhZmVJbnRlZ2VyKHZvdXQpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIHZvdXQ6IG11c3QgYmUgaW50ZWdlciA+PSAwYCk7XG4gIH1cbiAgcmV0dXJuIHsgdHhpZCwgdm91dCB9O1xufVxuXG4vKipcbiAqIEBwYXJhbSB0eGlkXG4gKiBAcGFyYW0gdm91dFxuICogQHJldHVybiBvdXRwdXRJZFxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0T3V0cHV0SWQoeyB0eGlkLCB2b3V0IH06IFR4T3V0UG9pbnQpOiBzdHJpbmcge1xuICByZXR1cm4gYCR7dHhpZH06JHt2b3V0fWA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRPdXRwdXRJZEZvcklucHV0KGk6IHsgaGFzaDogQnVmZmVyOyBpbmRleDogbnVtYmVyIH0pOiBUeE91dFBvaW50IHtcbiAgcmV0dXJuIHtcbiAgICB0eGlkOiBCdWZmZXIuZnJvbShpLmhhc2gpLnJldmVyc2UoKS50b1N0cmluZygnaGV4JyksXG4gICAgdm91dDogaS5pbmRleCxcbiAgfTtcbn1cblxuLyoqXG4gKiBSZWZlcmVuY2UgdG8gb3V0cHV0IG9mIGFuIGV4aXN0aW5nIHRyYW5zYWN0aW9uXG4gKi9cbmV4cG9ydCB0eXBlIFR4T3V0UG9pbnQgPSB7XG4gIHR4aWQ6IHN0cmluZztcbiAgdm91dDogbnVtYmVyO1xufTtcblxuLyoqXG4gKiBPdXRwdXQgcmVmZXJlbmNlIGFuZCBzY3JpcHQgZGF0YS5cbiAqIFN1aXRhYmxlIGZvciB1c2UgZm9yIGB0eGIuYWRkSW5wdXQoKWBcbiAqL1xuZXhwb3J0IHR5cGUgUHJldk91dHB1dDxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPiA9IFR4T3V0UG9pbnQgJlxuICBUeE91dHB1dDxUTnVtYmVyPiAmIHtcbiAgICBwcmV2VHg/OiBCdWZmZXI7XG4gIH07XG5cbi8qKlxuICogQHJldHVybiBQcmV2T3V0cHV0IGZyb20gVW5zcGVudFxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9QcmV2T3V0cHV0PFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQ+KFxuICB1OiBVbnNwZW50PFROdW1iZXI+LFxuICBuZXR3b3JrOiBOZXR3b3JrXG4pOiBQcmV2T3V0cHV0PFROdW1iZXI+IHtcbiAgcmV0dXJuIHtcbiAgICAuLi5wYXJzZU91dHB1dElkKHUuaWQpLFxuICAgIC4uLnRvT3V0cHV0KHUsIG5ldHdvcmspLFxuICB9O1xufVxuXG4vKipcbiAqIEByZXR1cm4gUHJldk91dHB1dCB3aXRoIHByZXZUeCBmcm9tIFVuc3BlbnRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvUHJldk91dHB1dFdpdGhQcmV2VHg8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludD4oXG4gIHU6IFVuc3BlbnQ8VE51bWJlcj4gJiB7IHByZXZUeD86IHVua25vd24gfSxcbiAgbmV0d29yazogTmV0d29ya1xuKTogUHJldk91dHB1dDxUTnVtYmVyPiB7XG4gIGxldCBwcmV2VHg7XG4gIGlmICh0eXBlb2YgdS5wcmV2VHggPT09ICdzdHJpbmcnKSB7XG4gICAgcHJldlR4ID0gQnVmZmVyLmZyb20odS5wcmV2VHgsICdoZXgnKTtcbiAgfSBlbHNlIGlmIChCdWZmZXIuaXNCdWZmZXIodS5wcmV2VHgpKSB7XG4gICAgcHJldlR4ID0gdS5wcmV2VHg7XG4gIH0gZWxzZSBpZiAodS5wcmV2VHggIT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwcmV2VHggdHlwZSBmb3IgdW5zcGVudCAke3UucHJldlR4fWApO1xuICB9XG4gIHJldHVybiB7XG4gICAgLi4ucGFyc2VPdXRwdXRJZCh1LmlkKSxcbiAgICAuLi50b091dHB1dCh1LCBuZXR3b3JrKSxcbiAgICBwcmV2VHgsXG4gIH07XG59XG5cbi8qKlxuICogQHBhcmFtIHR4YlxuICogQHBhcmFtIHVcbiAqIEBwYXJhbSBzZXF1ZW5jZSAtIHNlcXVlbmNlSWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZFRvVHJhbnNhY3Rpb25CdWlsZGVyPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQ+KFxuICB0eGI6IFV0eG9UcmFuc2FjdGlvbkJ1aWxkZXI8VE51bWJlcj4sXG4gIHU6IFVuc3BlbnQ8VE51bWJlcj4sXG4gIHNlcXVlbmNlPzogbnVtYmVyXG4pOiB2b2lkIHtcbiAgY29uc3QgeyB0eGlkLCB2b3V0LCBzY3JpcHQsIHZhbHVlIH0gPSB0b1ByZXZPdXRwdXQodSwgdHhiLm5ldHdvcmsgYXMgTmV0d29yayk7XG4gIHR4Yi5hZGRJbnB1dCh0eGlkLCB2b3V0LCBzZXF1ZW5jZSwgc2NyaXB0LCB2YWx1ZSk7XG59XG5cbi8qKlxuICogU3VtIHRoZSB2YWx1ZXMgb2YgdGhlIHVuc3BlbnRzLlxuICogVGhyb3dzIGVycm9yIGlmIHN1bSBpcyBub3QgYSBzYWZlIGludGVnZXIgdmFsdWUsIG9yIGlmIHVuc3BlbnQgYW1vdW50IHR5cGVzIGRvIG5vdCBtYXRjaCBgYW1vdW50VHlwZWBcbiAqIEBwYXJhbSB1bnNwZW50cyAtIGFycmF5IG9mIHVuc3BlbnRzIHRvIHN1bVxuICogQHBhcmFtIGFtb3VudFR5cGUgLSBleHBlY3RlZCB2YWx1ZSB0eXBlIG9mIHVuc3BlbnRzXG4gKiBAcmV0dXJuIHVuc3BlbnRTdW0gLSB0eXBlIG1hdGNoZXMgYW1vdW50VHlwZVxuICovXG5leHBvcnQgZnVuY3Rpb24gdW5zcGVudFN1bTxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50PihcbiAgdW5zcGVudHM6IHsgdmFsdWU6IFROdW1iZXIgfVtdLFxuICBhbW91bnRUeXBlOiAnbnVtYmVyJyB8ICdiaWdpbnQnID0gJ251bWJlcidcbik6IFROdW1iZXIge1xuICBpZiAoYW1vdW50VHlwZSA9PT0gJ2JpZ2ludCcpIHtcbiAgICByZXR1cm4gdW5zcGVudHMucmVkdWNlKChzdW0sIHUpID0+IHN1bSArICh1LnZhbHVlIGFzIGJpZ2ludCksIEJpZ0ludCgwKSkgYXMgVE51bWJlcjtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBzdW0gPSB1bnNwZW50cy5yZWR1Y2UoKHN1bSwgdSkgPT4gc3VtICsgKHUudmFsdWUgYXMgbnVtYmVyKSwgTnVtYmVyKDApKTtcbiAgICBpZiAoIU51bWJlci5pc1NhZmVJbnRlZ2VyKHN1bSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigndW5zcGVudCBzdW0gaXMgbm90IGEgc2FmZSBpbnRlZ2VyIG51bWJlciwgY29uc2lkZXIgdXNpbmcgYmlnaW50Jyk7XG4gICAgfVxuICAgIHJldHVybiBzdW0gYXMgVE51bWJlcjtcbiAgfVxufVxuIl19
|
|
137
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVW5zcGVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9iaXRnby9VbnNwZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBOEJBLGtEQUlDO0FBS0QsNEJBS0M7QUFLRCxnQ0FhQztBQUVELG9EQVFDO0FBTUQsc0NBY0M7QUFPRCx3Q0FFQztBQUVELGtEQUtDO0FBc0JELG9DQVFDO0FBS0Qsd0RBaUJDO0FBT0QsMERBT0M7QUFTRCxnQ0FhQztBQWxNRCx3Q0FBOEQ7QUE0QjlELFNBQWdCLG1CQUFtQixDQUNqQyxDQUFtQjtJQUVuQixPQUFPLE1BQU0sQ0FBQyxRQUFRLENBQUUsQ0FBZ0MsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNuRSxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixRQUFRLENBQWtDLENBQW1CLEVBQUUsT0FBZ0I7SUFDN0YsT0FBTztRQUNMLE1BQU0sRUFBRSxJQUFBLHdCQUFjLEVBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUM7UUFDMUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLO0tBQ2YsQ0FBQztBQUNKLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLFVBQVUsQ0FDeEIsRUFBNEIsRUFDNUIsSUFBWTtJQUVaLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDeEIsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ1AsTUFBTSxJQUFJLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBQ0QsT0FBTztRQUNMLEVBQUUsRUFBRSxjQUFjLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDO1FBQzlDLE9BQU8sRUFBRSxJQUFBLDBCQUFnQixFQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQztRQUMvQyxLQUFLLEVBQUUsQ0FBQyxD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Q3ZCLE1BQU07S0FDUCxDQUFDO0FBQ0osQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFnQix1QkFBdUIsQ0FDckMsR0FBb0MsRUFDcEMsQ0FBbUIsRUFDbkIsUUFBaUI7SUFFakIsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLFlBQVksQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLE9BQWtCLENBQUMsQ0FBQztJQUM5RSxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNwRCxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsU0FBZ0IsVUFBVSxDQUN4QixRQUE4QixFQUM5QixhQUFrQyxRQUFRO0lBRTFDLElBQUksVUFBVSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQzVCLE9BQU8sUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBSSxDQUFDLENBQUMsS0FBZ0IsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQVksQ0FBQztJQUN0RixDQUFDO1NBQU0sQ0FBQztRQUNOLE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUksQ0FBQyxDQUFDLEtBQWdCLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUMvQixNQUFNLElBQUksS0FBSyxDQUFDLGlFQUFpRSxDQUFDLENBQUM7UUFDckYsQ0FBQztRQUNELE9BQU8sR0FBYyxDQUFDO0lBQ3hCLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVHhPdXRwdXQgfSBmcm9tICdiaXRjb2luanMtbGliJztcbmltcG9ydCB7IE5ldHdvcmsgfSBmcm9tICcuLic7XG5pbXBvcnQgeyBmcm9tT3V0cHV0U2NyaXB0LCB0b091dHB1dFNjcmlwdCB9IGZyb20gJy4uL2FkZHJlc3MnO1xuaW1wb3J0IHsgVXR4b1RyYW5zYWN0aW9uQnVpbGRlciB9IGZyb20gJy4vVXR4b1RyYW5zYWN0aW9uQnVpbGRlcic7XG5pbXBvcnQgeyBVdHhvVHJhbnNhY3Rpb24gfSBmcm9tICcuL1V0eG9UcmFuc2FjdGlvbic7XG5cbi8qKlxuICogUHVibGljIHVuc3BlbnQgZGF0YSBpbiBCaXRHby1zcGVjaWZpYyByZXByZXNlbnRhdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVbnNwZW50PFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+IHtcbiAgLyoqXG4gICAqIEZvcm1hdDogJHt0eGlkfToke3ZvdXR9LlxuICAgKiBVc2UgYHBhcnNlT3V0cHV0SWQoaWQpYCB0byBwYXJzZS5cbiAgICovXG4gIGlkOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgbmV0d29yay1zcGVjaWZpYyBlbmNvZGVkIGFkZHJlc3MuXG4gICAqIFVzZSBgdG9PdXRwdXRTY3JpcHQoYWRkcmVzcywgbmV0d29yaylgIHRvIG9idGFpbiBzY3JpcHRQdWJLZXkuXG4gICAqL1xuICBhZGRyZXNzOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgYW1vdW50IGluIHNhdG9zaGkuXG4gICAqL1xuICB2YWx1ZTogVE51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVbnNwZW50V2l0aFByZXZUeDxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPiBleHRlbmRzIFVuc3BlbnQ8VE51bWJlcj4ge1xuICBwcmV2VHg6IEJ1ZmZlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVW5zcGVudFdpdGhQcmV2VHg8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCwgVFVuc3BlbnQgZXh0ZW5kcyBVbnNwZW50PFROdW1iZXI+PihcbiAgdTogVW5zcGVudDxUTnVtYmVyPlxuKTogdSBpcyBUVW5zcGVudCAmIHsgcHJldlR4OiBCdWZmZXIgfSB7XG4gIHJldHVybiBCdWZmZXIuaXNCdWZmZXIoKHUgYXMgVW5zcGVudFdpdGhQcmV2VHg8VE51bWJlcj4pLnByZXZUeCk7XG59XG5cbi8qKlxuICogQHJldHVybiBUeE91dHB1dCBmcm9tIFVuc3BlbnRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvT3V0cHV0PFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQ+KHU6IFVuc3BlbnQ8VE51bWJlcj4sIG5ldHdvcms6IE5ldHdvcmspOiBUeE91dHB1dDxUTnVtYmVyPiB7XG4gIHJldHVybiB7XG4gICAgc2NyaXB0OiB0b091dHB1dFNjcmlwdCh1LmFkZHJlc3MsIG5ldHdvcmspLFxuICAgIHZhbHVlOiB1LnZhbHVlLFxuICB9O1xufVxuXG4vKipcbiAqIEByZXR1cm4gVW5zcGVudCBmcm9tIFR4T3V0cHV0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmcm9tT3V0cHV0PFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQ+KFxuICB0eDogVXR4b1RyYW5zYWN0aW9uPFROdW1iZXI+LFxuICB2b3V0OiBudW1iZXJcbik6IFVuc3BlbnQ8VE51bWJlcj4ge1xuICBjb25zdCBvID0gdHgub3V0c1t2b3V0XTtcbiAgaWYgKCFvKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIHZvdXRgKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIGlkOiBmb3JtYXRPdXRwdXRJZCh7IHR4aWQ6IHR4LmdldElkKCksIHZvdXQgfSksXG4gICAgYWRkcmVzczogZnJvbU91dHB1dFNjcmlwdChvLnNjcmlwdCwgdHgubmV0d29yayksXG4gICAgdmFsdWU6IG8udmFsdWUsXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tT3V0cHV0V2l0aFByZXZUeDxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50PihcbiAgdHg6IFV0eG9UcmFuc2FjdGlvbjxUTnVtYmVyPixcbiAgdm91dDogbnVtYmVyXG4pOiBVbnNwZW50V2l0aFByZXZUeDxUTnVtYmVyPiB7XG4gIHJldHVybiB7XG4gICAgLi4uZnJvbU91dHB1dCh0eCwgdm91dCksXG4gICAgcHJldlR4OiB0eC50b0J1ZmZlcigpLFxuICB9O1xufVxuXG4vKipcbiAqIEBwYXJhbSBvdXRwdXRJZFxuICogQHJldHVybiBUeE91dFBvaW50XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU91dHB1dElkKG91dHB1dElkOiBzdHJpbmcpOiBUeE91dFBvaW50IHtcbiAgY29uc3QgcGFydHMgPSBvdXRwdXRJZC5zcGxpdCgnOicpO1xuICBpZiAocGFydHMubGVuZ3RoICE9PSAyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIG91dHB1dElkLCBtdXN0IGhhdmUgZm9ybWF0IHR4aWQ6dm91dGApO1xuICB9XG4gIGNvbnN0IFt0eGlkLCB2b3V0U3RyXSA9IHBhcnRzO1xuICBjb25zdCB2b3V0ID0gTnVtYmVyKHZvdXRTdHIpO1xuICBpZiAodHhpZC5sZW5ndGggIT09IDY0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIHR4aWQgJHt0eGlkfSAke3R4aWQubGVuZ3RofWApO1xuICB9XG4gIGlmIChOdW1iZXIuaXNOYU4odm91dCkgfHwgdm91dCA8IDAgfHwgIU51bWJlci5pc1NhZmVJbnRlZ2VyKHZvdXQpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIHZvdXQ6IG11c3QgYmUgaW50ZWdlciA+PSAwYCk7XG4gIH1cbiAgcmV0dXJuIHsgdHhpZCwgdm91dCB9O1xufVxuXG4vKipcbiAqIEBwYXJhbSB0eGlkXG4gKiBAcGFyYW0gdm91dFxuICogQHJldHVybiBvdXRwdXRJZFxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0T3V0cHV0SWQoeyB0eGlkLCB2b3V0IH06IFR4T3V0UG9pbnQpOiBzdHJpbmcge1xuICByZXR1cm4gYCR7dHhpZH06JHt2b3V0fWA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRPdXRwdXRJZEZvcklucHV0KGk6IHsgaGFzaDogQnVmZmVyOyBpbmRleDogbnVtYmVyIH0pOiBUeE91dFBvaW50IHtcbiAgcmV0dXJuIHtcbiAgICB0eGlkOiBCdWZmZXIuZnJvbShpLmhhc2gpLnJldmVyc2UoKS50b1N0cmluZygnaGV4JyksXG4gICAgdm91dDogaS5pbmRleCxcbiAgfTtcbn1cblxuLyoqXG4gKiBSZWZlcmVuY2UgdG8gb3V0cHV0IG9mIGFuIGV4aXN0aW5nIHRyYW5zYWN0aW9uXG4gKi9cbmV4cG9ydCB0eXBlIFR4T3V0UG9pbnQgPSB7XG4gIHR4aWQ6IHN0cmluZztcbiAgdm91dDogbnVtYmVyO1xufTtcblxuLyoqXG4gKiBPdXRwdXQgcmVmZXJlbmNlIGFuZCBzY3JpcHQgZGF0YS5cbiAqIFN1aXRhYmxlIGZvciB1c2UgZm9yIGB0eGIuYWRkSW5wdXQoKWBcbiAqL1xuZXhwb3J0IHR5cGUgUHJldk91dHB1dDxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPiA9IFR4T3V0UG9pbnQgJlxuICBUeE91dHB1dDxUTnVtYmVyPiAmIHtcbiAgICBwcmV2VHg/OiBCdWZmZXI7XG4gIH07XG5cbi8qKlxuICogQHJldHVybiBQcmV2T3V0cHV0IGZyb20gVW5zcGVudFxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9QcmV2T3V0cHV0PFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQ+KFxuICB1OiBVbnNwZW50PFROdW1iZXI+LFxuICBuZXR3b3JrOiBOZXR3b3JrXG4pOiBQcmV2T3V0cHV0PFROdW1iZXI+IHtcbiAgcmV0dXJuIHtcbiAgICAuLi5wYXJzZU91dHB1dElkKHUuaWQpLFxuICAgIC4uLnRvT3V0cHV0KHUsIG5ldHdvcmspLFxuICB9O1xufVxuXG4vKipcbiAqIEByZXR1cm4gUHJldk91dHB1dCB3aXRoIHByZXZUeCBmcm9tIFVuc3BlbnRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvUHJldk91dHB1dFdpdGhQcmV2VHg8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludD4oXG4gIHU6IFVuc3BlbnQ8VE51bWJlcj4gJiB7IHByZXZUeD86IHVua25vd24gfSxcbiAgbmV0d29yazogTmV0d29ya1xuKTogUHJldk91dHB1dDxUTnVtYmVyPiB7XG4gIGxldCBwcmV2VHg7XG4gIGlmICh0eXBlb2YgdS5wcmV2VHggPT09ICdzdHJpbmcnKSB7XG4gICAgcHJldlR4ID0gQnVmZmVyLmZyb20odS5wcmV2VHgsICdoZXgnKTtcbiAgfSBlbHNlIGlmIChCdWZmZXIuaXNCdWZmZXIodS5wcmV2VHgpKSB7XG4gICAgcHJldlR4ID0gdS5wcmV2VHg7XG4gIH0gZWxzZSBpZiAodS5wcmV2VHggIT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwcmV2VHggdHlwZSBmb3IgdW5zcGVudCAke3UucHJldlR4fWApO1xuICB9XG4gIHJldHVybiB7XG4gICAgLi4ucGFyc2VPdXRwdXRJZCh1LmlkKSxcbiAgICAuLi50b091dHB1dCh1LCBuZXR3b3JrKSxcbiAgICBwcmV2VHgsXG4gIH07XG59XG5cbi8qKlxuICogQHBhcmFtIHR4YlxuICogQHBhcmFtIHVcbiAqIEBwYXJhbSBzZXF1ZW5jZSAtIHNlcXVlbmNlSWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZFRvVHJhbnNhY3Rpb25CdWlsZGVyPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQ+KFxuICB0eGI6IFV0eG9UcmFuc2FjdGlvbkJ1aWxkZXI8VE51bWJlcj4sXG4gIHU6IFVuc3BlbnQ8VE51bWJlcj4sXG4gIHNlcXVlbmNlPzogbnVtYmVyXG4pOiB2b2lkIHtcbiAgY29uc3QgeyB0eGlkLCB2b3V0LCBzY3JpcHQsIHZhbHVlIH0gPSB0b1ByZXZPdXRwdXQodSwgdHhiLm5ldHdvcmsgYXMgTmV0d29yayk7XG4gIHR4Yi5hZGRJbnB1dCh0eGlkLCB2b3V0LCBzZXF1ZW5jZSwgc2NyaXB0LCB2YWx1ZSk7XG59XG5cbi8qKlxuICogU3VtIHRoZSB2YWx1ZXMgb2YgdGhlIHVuc3BlbnRzLlxuICogVGhyb3dzIGVycm9yIGlmIHN1bSBpcyBub3QgYSBzYWZlIGludGVnZXIgdmFsdWUsIG9yIGlmIHVuc3BlbnQgYW1vdW50IHR5cGVzIGRvIG5vdCBtYXRjaCBgYW1vdW50VHlwZWBcbiAqIEBwYXJhbSB1bnNwZW50cyAtIGFycmF5IG9mIHVuc3BlbnRzIHRvIHN1bVxuICogQHBhcmFtIGFtb3VudFR5cGUgLSBleHBlY3RlZCB2YWx1ZSB0eXBlIG9mIHVuc3BlbnRzXG4gKiBAcmV0dXJuIHVuc3BlbnRTdW0gLSB0eXBlIG1hdGNoZXMgYW1vdW50VHlwZVxuICovXG5leHBvcnQgZnVuY3Rpb24gdW5zcGVudFN1bTxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50PihcbiAgdW5zcGVudHM6IHsgdmFsdWU6IFROdW1iZXIgfVtdLFxuICBhbW91bnRUeXBlOiAnbnVtYmVyJyB8ICdiaWdpbnQnID0gJ251bWJlcidcbik6IFROdW1iZXIge1xuICBpZiAoYW1vdW50VHlwZSA9PT0gJ2JpZ2ludCcpIHtcbiAgICByZXR1cm4gdW5zcGVudHMucmVkdWNlKChzdW0sIHUpID0+IHN1bSArICh1LnZhbHVlIGFzIGJpZ2ludCksIEJpZ0ludCgwKSkgYXMgVE51bWJlcjtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBzdW0gPSB1bnNwZW50cy5yZWR1Y2UoKHN1bSwgdSkgPT4gc3VtICsgKHUudmFsdWUgYXMgbnVtYmVyKSwgTnVtYmVyKDApKTtcbiAgICBpZiAoIU51bWJlci5pc1NhZmVJbnRlZ2VyKHN1bSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigndW5zcGVudCBzdW0gaXMgbm90IGEgc2FmZSBpbnRlZ2VyIG51bWJlciwgY29uc2lkZXIgdXNpbmcgYmlnaW50Jyk7XG4gICAgfVxuICAgIHJldHVybiBzdW0gYXMgVE51bWJlcjtcbiAgfVxufVxuIl19
|
|
@@ -1,12 +1,11 @@
|
|
|
1
|
-
/// <reference types="node" />
|
|
2
1
|
import { Psbt as PsbtBase } from 'bip174';
|
|
3
|
-
import { Bip32Derivation } from 'bip174/src/lib/interfaces';
|
|
4
|
-
import { BIP32Interface } from '
|
|
5
|
-
import { HDSigner, Psbt, TxOutput, Network } from '..';
|
|
2
|
+
import { Bip32Derivation, PsbtInput } from 'bip174/src/lib/interfaces';
|
|
3
|
+
import { BIP32Interface } from '@bitgo-beta/secp256k1';
|
|
4
|
+
import { HDSigner, Signer, Psbt, TxOutput, Network } from '..';
|
|
6
5
|
import { UtxoTransaction } from './UtxoTransaction';
|
|
7
6
|
import { Triple } from './types';
|
|
8
|
-
import { ProprietaryKeySearch, ProprietaryKeyValue } from './
|
|
9
|
-
|
|
7
|
+
import { ProprietaryKeySearch, ProprietaryKeyValue } from './ProprietaryKeyValUtils';
|
|
8
|
+
type SignatureParams = {
|
|
10
9
|
/** When true, and add the second (last) nonce and signature for a taproot key
|
|
11
10
|
* path spend deterministically. Throws an error if done for the first nonce/signature
|
|
12
11
|
* of a taproot keypath spend. Ignore for all other input types.
|
|
@@ -67,12 +66,24 @@ export declare class UtxoPsbt<Tx extends UtxoTransaction<bigint> = UtxoTransacti
|
|
|
67
66
|
/**
|
|
68
67
|
* @param parent - Parent key. Matched with `bip32Derivations` using `fingerprint` property.
|
|
69
68
|
* @param bip32Derivations - possible derivations for input or output
|
|
69
|
+
* @param ignoreY - when true, ignore the y coordinate when matching public keys
|
|
70
70
|
* @return derived bip32 node if matching derivation is found, undefined if none is found
|
|
71
71
|
* @throws Error if more than one match is found
|
|
72
72
|
*/
|
|
73
|
-
static deriveKeyPair(parent: BIP32Interface, bip32Derivations: Bip32Derivation[]
|
|
73
|
+
static deriveKeyPair(parent: BIP32Interface, bip32Derivations: Bip32Derivation[], { ignoreY }: {
|
|
74
|
+
ignoreY: boolean;
|
|
75
|
+
}): BIP32Interface | undefined;
|
|
76
|
+
static deriveKeyPairForInput(bip32: BIP32Interface, input: PsbtInput): Buffer | undefined;
|
|
74
77
|
get network(): Network;
|
|
75
78
|
toHex(): string;
|
|
79
|
+
/**
|
|
80
|
+
* It is expensive to attempt to compute every output address using psbt.txOutputs[outputIndex]
|
|
81
|
+
* to then just get the script. Here, we are doing the same thing as what txOutputs() does in
|
|
82
|
+
* bitcoinjs-lib, but without iterating over each output.
|
|
83
|
+
* @param outputIndex
|
|
84
|
+
* @returns output script at the given index
|
|
85
|
+
*/
|
|
86
|
+
getOutputScript(outputIndex: number): Buffer;
|
|
76
87
|
getNonWitnessPreviousTxids(): string[];
|
|
77
88
|
addNonWitnessUtxos(txBufs: Record<string, Buffer>): this;
|
|
78
89
|
static fromTransaction(transaction: UtxoTransaction<bigint>, prevOutputs: TxOutput<bigint>[]): UtxoPsbt;
|
|
@@ -94,6 +105,7 @@ export declare class UtxoPsbt<Tx extends UtxoTransaction<bigint> = UtxoTransacti
|
|
|
94
105
|
* @returns true if the input at inputIndex is a taproot
|
|
95
106
|
*/
|
|
96
107
|
isTaprootInput(inputIndex: number): boolean;
|
|
108
|
+
private isMultisigTaprootScript;
|
|
97
109
|
/**
|
|
98
110
|
* Mostly copied from bitcoinjs-lib/ts_src/psbt.ts
|
|
99
111
|
*/
|
|
@@ -124,7 +136,7 @@ export declare class UtxoPsbt<Tx extends UtxoTransaction<bigint> = UtxoTransacti
|
|
|
124
136
|
private getMusig2SessionKey;
|
|
125
137
|
/**
|
|
126
138
|
* @returns true for following cases.
|
|
127
|
-
* If valid musig2 partial signatures exists for both 2 keys, it will also
|
|
139
|
+
* If valid musig2 partial signatures exists for both 2 keys, it will also verify aggregated sig
|
|
128
140
|
* for aggregated tweaked key (output key), otherwise only verifies partial sig.
|
|
129
141
|
* If pubkey is passed in input, it will check sig only for that pubkey,
|
|
130
142
|
* if no sig exits for such key, throws error.
|
|
@@ -137,9 +149,11 @@ export declare class UtxoPsbt<Tx extends UtxoTransaction<bigint> = UtxoTransacti
|
|
|
137
149
|
* @param rootNodes optional input root bip32 nodes to verify with. If it is not provided, globalXpub will be used.
|
|
138
150
|
* @return array of boolean values. True when corresponding index in `publicKeys` has signed the transaction.
|
|
139
151
|
* If no signature in the tx or no public key matching signature, the validation is considered as false.
|
|
152
|
+
* If rootNodes are not explicitly passed in, the return array will be unordered.
|
|
153
|
+
* Use getSortedRootNodes() instead if ordering is important.
|
|
140
154
|
*/
|
|
141
|
-
getSignatureValidationArray(inputIndex: number, { rootNodes }
|
|
142
|
-
rootNodes
|
|
155
|
+
getSignatureValidationArray(inputIndex: number, { rootNodes }: {
|
|
156
|
+
rootNodes: Triple<BIP32Interface> | undefined;
|
|
143
157
|
}): Triple<boolean>;
|
|
144
158
|
/**
|
|
145
159
|
* Mostly copied from bitcoinjs-lib/ts_src/psbt.ts
|
|
@@ -152,6 +166,7 @@ export declare class UtxoPsbt<Tx extends UtxoTransaction<bigint> = UtxoTransacti
|
|
|
152
166
|
sighashTypes?: number[] | undefined;
|
|
153
167
|
deterministic?: boolean | undefined;
|
|
154
168
|
}): this;
|
|
169
|
+
signInput(inputIndex: number, keyPair: Signer, sighashTypes?: number[]): this;
|
|
155
170
|
signInputHD(inputIndex: number, hdKeyPair: HDTaprootSigner | HDTaprootMusig2Signer, params?: number[] | Partial<SignatureParams>): this;
|
|
156
171
|
private getMusig2Participants;
|
|
157
172
|
private getMusig2Nonces;
|
|
@@ -172,22 +187,33 @@ export declare class UtxoPsbt<Tx extends UtxoTransaction<bigint> = UtxoTransacti
|
|
|
172
187
|
private getTaprootOutputScript;
|
|
173
188
|
private getTaprootHashForSig;
|
|
174
189
|
/**
|
|
190
|
+
* @deprecated Please use the new method addProprietaryKeyVals(psbt, entry, index, keyValueData)
|
|
191
|
+
*
|
|
175
192
|
* Adds proprietary key value pair to PSBT input.
|
|
176
193
|
* Default identifierEncoding is utf-8 for identifier.
|
|
177
194
|
*/
|
|
178
195
|
addProprietaryKeyValToInput(inputIndex: number, keyValueData: ProprietaryKeyValue): this;
|
|
179
196
|
/**
|
|
197
|
+
* @deprecated Please use the new method addProprietaryKeyValuesToUnknownKeyValues(psbt, entry, index, keyValueData)
|
|
198
|
+
* or updateProprietaryKeyValuesToUnknownKeyValues(keyValueData)
|
|
199
|
+
*
|
|
180
200
|
* Adds or updates (if exists) proprietary key value pair to PSBT input.
|
|
181
201
|
* Default identifierEncoding is utf-8 for identifier.
|
|
182
202
|
*/
|
|
183
203
|
addOrUpdateProprietaryKeyValToInput(inputIndex: number, keyValueData: ProprietaryKeyValue): this;
|
|
184
204
|
/**
|
|
185
|
-
*
|
|
205
|
+
* @deprecated Please use getProprietaryKeyValuesFromUnknownKeyValues(psbtField, keySearch). The new method
|
|
206
|
+
* allows for the retrieval of either input or output proprietary key values.
|
|
207
|
+
*
|
|
208
|
+
* To search any data from proprietary key value against keydata in the inputs.
|
|
186
209
|
* Default identifierEncoding is utf-8 for identifier.
|
|
187
210
|
*/
|
|
188
211
|
getProprietaryKeyVals(inputIndex: number, keySearch?: ProprietaryKeySearch): ProprietaryKeyValue[];
|
|
189
212
|
/**
|
|
190
|
-
*
|
|
213
|
+
* @deprecated Please use deleteProprietaryKeyValues(type, index, keysToDelete?). The new method
|
|
214
|
+
* allows for the deletion of either input or output proprietary key values.
|
|
215
|
+
*
|
|
216
|
+
* To delete any data from proprietary key value in PSBT input.
|
|
191
217
|
* Default identifierEncoding is utf-8 for identifier.
|
|
192
218
|
*/
|
|
193
219
|
deleteProprietaryKeyVals(inputIndex: number, keysToDelete?: ProprietaryKeySearch): this;
|
|
@@ -246,6 +272,7 @@ export declare class UtxoPsbt<Tx extends UtxoTransaction<bigint> = UtxoTransacti
|
|
|
246
272
|
deterministic?: boolean;
|
|
247
273
|
}): this;
|
|
248
274
|
clone(): this;
|
|
275
|
+
extractTransaction(disableFeeCheck?: boolean): UtxoTransaction<bigint>;
|
|
249
276
|
}
|
|
250
277
|
export {};
|
|
251
278
|
//# sourceMappingURL=UtxoPsbt.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UtxoPsbt.d.ts","sourceRoot":"","sources":["../../../src/bitgo/UtxoPsbt.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"UtxoPsbt.d.ts","sourceRoot":"","sources":["../../../src/bitgo/UtxoPsbt.ts"],"names":[],"mappings":"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"}
|