@bitgo/abstract-utxo 12.4.4 → 12.7.0

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.
Files changed (214) hide show
  1. package/dist/cjs/src/abstractUtxoCoin.d.ts +10 -2
  2. package/dist/cjs/src/abstractUtxoCoin.d.ts.map +1 -1
  3. package/dist/cjs/src/abstractUtxoCoin.js +29 -37
  4. package/dist/cjs/src/address/fixedScript.d.ts +4 -4
  5. package/dist/cjs/src/address/fixedScript.d.ts.map +1 -1
  6. package/dist/cjs/src/address/fixedScript.js +4 -3
  7. package/dist/cjs/src/descriptor/assertDescriptorWalletAddress.d.ts +2 -2
  8. package/dist/cjs/src/descriptor/assertDescriptorWalletAddress.d.ts.map +1 -1
  9. package/dist/cjs/src/descriptor/assertDescriptorWalletAddress.js +3 -4
  10. package/dist/cjs/src/impl/bch/bch.d.ts +15 -1
  11. package/dist/cjs/src/impl/bch/bch.d.ts.map +1 -1
  12. package/dist/cjs/src/impl/bch/bch.js +30 -6
  13. package/dist/cjs/src/impl/btc/index.d.ts +2 -0
  14. package/dist/cjs/src/impl/btc/index.d.ts.map +1 -1
  15. package/dist/cjs/src/impl/btc/index.js +3 -1
  16. package/dist/cjs/src/impl/btc/inscriptionBuilder.js +4 -4
  17. package/dist/cjs/src/impl/btc/tbtcstx.d.ts +10 -0
  18. package/dist/cjs/src/impl/btc/tbtcstx.d.ts.map +1 -0
  19. package/dist/cjs/src/impl/btc/tbtcstx.js +18 -0
  20. package/dist/cjs/src/impl/btc/tbtcstxprivate1.d.ts +9 -0
  21. package/dist/cjs/src/impl/btc/tbtcstxprivate1.d.ts.map +1 -0
  22. package/dist/cjs/src/impl/btc/tbtcstxprivate1.js +15 -0
  23. package/dist/cjs/src/impl/zec/address.d.ts +73 -0
  24. package/dist/cjs/src/impl/zec/address.d.ts.map +1 -0
  25. package/dist/cjs/src/impl/zec/address.js +120 -0
  26. package/dist/cjs/src/impl/zec/index.d.ts +3 -0
  27. package/dist/cjs/src/impl/zec/index.d.ts.map +1 -1
  28. package/dist/cjs/src/impl/zec/index.js +4 -1
  29. package/dist/cjs/src/impl/zec/recipients.d.ts +85 -0
  30. package/dist/cjs/src/impl/zec/recipients.d.ts.map +1 -0
  31. package/dist/cjs/src/impl/zec/recipients.js +94 -0
  32. package/dist/cjs/src/impl/zec/types.d.ts +3 -0
  33. package/dist/cjs/src/impl/zec/types.d.ts.map +1 -0
  34. package/dist/cjs/src/impl/zec/types.js +3 -0
  35. package/dist/cjs/src/impl/zec/zec.d.ts +14 -1
  36. package/dist/cjs/src/impl/zec/zec.d.ts.map +1 -1
  37. package/dist/cjs/src/impl/zec/zec.js +17 -1
  38. package/dist/cjs/src/names.d.ts +5 -2
  39. package/dist/cjs/src/names.d.ts.map +1 -1
  40. package/dist/cjs/src/names.js +19 -1
  41. package/dist/cjs/src/recovery/backupKeyRecovery.d.ts +6 -2
  42. package/dist/cjs/src/recovery/backupKeyRecovery.d.ts.map +1 -1
  43. package/dist/cjs/src/recovery/backupKeyRecovery.js +7 -5
  44. package/dist/cjs/src/recovery/crossChainRecovery.d.ts.map +1 -1
  45. package/dist/cjs/src/recovery/crossChainRecovery.js +4 -4
  46. package/dist/cjs/src/transaction/decode.d.ts +2 -2
  47. package/dist/cjs/src/transaction/decode.d.ts.map +1 -1
  48. package/dist/cjs/src/transaction/decode.js +3 -2
  49. package/dist/cjs/src/transaction/descriptor/explainPsbt.d.ts +2 -2
  50. package/dist/cjs/src/transaction/descriptor/explainPsbt.d.ts.map +1 -1
  51. package/dist/cjs/src/transaction/descriptor/explainPsbt.js +6 -5
  52. package/dist/cjs/src/transaction/descriptor/parse.d.ts +3 -3
  53. package/dist/cjs/src/transaction/descriptor/parse.d.ts.map +1 -1
  54. package/dist/cjs/src/transaction/descriptor/parse.js +17 -18
  55. package/dist/cjs/src/transaction/descriptor/parseToAmountType.d.ts +2 -1
  56. package/dist/cjs/src/transaction/descriptor/parseToAmountType.d.ts.map +1 -1
  57. package/dist/cjs/src/transaction/descriptor/parseToAmountType.js +3 -3
  58. package/dist/cjs/src/transaction/descriptor/verifyTransaction.d.ts +3 -3
  59. package/dist/cjs/src/transaction/descriptor/verifyTransaction.d.ts.map +1 -1
  60. package/dist/cjs/src/transaction/descriptor/verifyTransaction.js +6 -6
  61. package/dist/cjs/src/transaction/explainTransaction.d.ts +2 -2
  62. package/dist/cjs/src/transaction/explainTransaction.d.ts.map +1 -1
  63. package/dist/cjs/src/transaction/explainTransaction.js +1 -1
  64. package/dist/cjs/src/transaction/fixedScript/parseOutput.d.ts +3 -1
  65. package/dist/cjs/src/transaction/fixedScript/parseOutput.d.ts.map +1 -1
  66. package/dist/cjs/src/transaction/fixedScript/parseOutput.js +5 -4
  67. package/dist/cjs/src/transaction/fixedScript/parseTransaction.d.ts +2 -1
  68. package/dist/cjs/src/transaction/fixedScript/parseTransaction.d.ts.map +1 -1
  69. package/dist/cjs/src/transaction/fixedScript/parseTransaction.js +15 -14
  70. package/dist/cjs/src/transaction/fixedScript/replayProtection.d.ts +4 -4
  71. package/dist/cjs/src/transaction/fixedScript/replayProtection.d.ts.map +1 -1
  72. package/dist/cjs/src/transaction/fixedScript/replayProtection.js +1 -1
  73. package/dist/cjs/src/transaction/fixedScript/signTransaction.d.ts +2 -2
  74. package/dist/cjs/src/transaction/fixedScript/signTransaction.d.ts.map +1 -1
  75. package/dist/cjs/src/transaction/fixedScript/signTransaction.js +1 -1
  76. package/dist/cjs/src/transaction/parseTransaction.d.ts +2 -1
  77. package/dist/cjs/src/transaction/parseTransaction.d.ts.map +1 -1
  78. package/dist/cjs/src/transaction/parseTransaction.js +4 -4
  79. package/dist/cjs/src/transaction/recipient.d.ts +35 -16
  80. package/dist/cjs/src/transaction/recipient.d.ts.map +1 -1
  81. package/dist/cjs/src/transaction/recipient.js +80 -47
  82. package/dist/cjs/src/transaction/signTransaction.js +2 -2
  83. package/dist/cjs/src/transaction/verifyTransaction.d.ts +2 -1
  84. package/dist/cjs/src/transaction/verifyTransaction.d.ts.map +1 -1
  85. package/dist/cjs/src/transaction/verifyTransaction.js +3 -3
  86. package/dist/cjs/test/unit/descriptorAddress.d.ts.map +1 -1
  87. package/dist/cjs/test/unit/descriptorAddress.js +24 -4
  88. package/dist/cjs/test/unit/impl/bch/unit/bch.js +9 -1
  89. package/dist/cjs/test/unit/impl/zec/unit/address.d.ts +2 -0
  90. package/dist/cjs/test/unit/impl/zec/unit/address.d.ts.map +1 -0
  91. package/dist/cjs/test/unit/impl/zec/unit/address.js +205 -0
  92. package/dist/cjs/test/unit/impl/zec/unit/resolvePsbtRecipients.d.ts +2 -0
  93. package/dist/cjs/test/unit/impl/zec/unit/resolvePsbtRecipients.d.ts.map +1 -0
  94. package/dist/cjs/test/unit/impl/zec/unit/resolvePsbtRecipients.js +89 -0
  95. package/dist/cjs/test/unit/impl/zec/unit/unifiedRecipientPreference.d.ts +2 -0
  96. package/dist/cjs/test/unit/impl/zec/unit/unifiedRecipientPreference.d.ts.map +1 -0
  97. package/dist/cjs/test/unit/impl/zec/unit/unifiedRecipientPreference.js +57 -0
  98. package/dist/cjs/test/unit/recovery/backupKeyRecovery.js +15 -2
  99. package/dist/cjs/test/unit/recovery/crossChainRecovery.js +2 -2
  100. package/dist/cjs/test/unit/recovery/formatBackupKeyRecoveryResult.js +2 -2
  101. package/dist/cjs/test/unit/recovery/mock.d.ts.map +1 -1
  102. package/dist/cjs/test/unit/recovery/mock.js +5 -3
  103. package/dist/cjs/test/unit/tbtcstx.d.ts +2 -0
  104. package/dist/cjs/test/unit/tbtcstx.d.ts.map +1 -0
  105. package/dist/cjs/test/unit/tbtcstx.js +60 -0
  106. package/dist/cjs/test/unit/tbtcstxprivate1.d.ts +2 -0
  107. package/dist/cjs/test/unit/tbtcstxprivate1.d.ts.map +1 -0
  108. package/dist/cjs/test/unit/tbtcstxprivate1.js +61 -0
  109. package/dist/cjs/test/unit/transaction/addressCodec.d.ts +2 -0
  110. package/dist/cjs/test/unit/transaction/addressCodec.d.ts.map +1 -0
  111. package/dist/cjs/test/unit/transaction/addressCodec.js +30 -0
  112. package/dist/cjs/test/unit/transaction/descriptor/parse.js +4 -2
  113. package/dist/cjs/test/unit/transaction/descriptor/verifyTransactionQr.js +6 -5
  114. package/dist/cjs/test/unit/transaction.js +2 -2
  115. package/dist/cjs/test/unit/util/address.d.ts +2 -1
  116. package/dist/cjs/test/unit/util/address.d.ts.map +1 -1
  117. package/dist/cjs/test/unit/util/address.js +3 -2
  118. package/dist/cjs/test/unit/util/nockIndexerAPI.d.ts.map +1 -1
  119. package/dist/cjs/test/unit/util/nockIndexerAPI.js +3 -4
  120. package/dist/cjs/test/unit/util/transaction.d.ts +1 -1
  121. package/dist/cjs/test/unit/util/transaction.d.ts.map +1 -1
  122. package/dist/cjs/test/unit/util/transaction.js +5 -4
  123. package/dist/cjs/test/unit/util/unspents.d.ts.map +1 -1
  124. package/dist/cjs/test/unit/util/unspents.js +3 -3
  125. package/dist/cjs/test/unit/util/utxoCoins.d.ts +2 -2
  126. package/dist/cjs/test/unit/util/utxoCoins.d.ts.map +1 -1
  127. package/dist/cjs/test/unit/util/utxoCoins.js +17 -33
  128. package/dist/cjs/tsconfig.tsbuildinfo +1 -1
  129. package/dist/esm/abstractUtxoCoin.d.ts +10 -2
  130. package/dist/esm/abstractUtxoCoin.d.ts.map +1 -1
  131. package/dist/esm/abstractUtxoCoin.js +32 -40
  132. package/dist/esm/address/fixedScript.d.ts +4 -4
  133. package/dist/esm/address/fixedScript.d.ts.map +1 -1
  134. package/dist/esm/address/fixedScript.js +4 -3
  135. package/dist/esm/descriptor/assertDescriptorWalletAddress.d.ts +2 -2
  136. package/dist/esm/descriptor/assertDescriptorWalletAddress.d.ts.map +1 -1
  137. package/dist/esm/descriptor/assertDescriptorWalletAddress.js +3 -4
  138. package/dist/esm/impl/bch/bch.d.ts +15 -1
  139. package/dist/esm/impl/bch/bch.d.ts.map +1 -1
  140. package/dist/esm/impl/bch/bch.js +31 -7
  141. package/dist/esm/impl/btc/index.d.ts +2 -0
  142. package/dist/esm/impl/btc/index.d.ts.map +1 -1
  143. package/dist/esm/impl/btc/index.js +3 -1
  144. package/dist/esm/impl/btc/inscriptionBuilder.js +4 -4
  145. package/dist/esm/impl/btc/tbtcstx.d.ts +10 -0
  146. package/dist/esm/impl/btc/tbtcstx.d.ts.map +1 -0
  147. package/dist/esm/impl/btc/tbtcstx.js +14 -0
  148. package/dist/esm/impl/btc/tbtcstxprivate1.d.ts +9 -0
  149. package/dist/esm/impl/btc/tbtcstxprivate1.d.ts.map +1 -0
  150. package/dist/esm/impl/btc/tbtcstxprivate1.js +11 -0
  151. package/dist/esm/impl/zec/address.d.ts +73 -0
  152. package/dist/esm/impl/zec/address.d.ts.map +1 -0
  153. package/dist/esm/impl/zec/address.js +113 -0
  154. package/dist/esm/impl/zec/index.d.ts +3 -0
  155. package/dist/esm/impl/zec/index.d.ts.map +1 -1
  156. package/dist/esm/impl/zec/index.js +4 -1
  157. package/dist/esm/impl/zec/recipients.d.ts +85 -0
  158. package/dist/esm/impl/zec/recipients.d.ts.map +1 -0
  159. package/dist/esm/impl/zec/recipients.js +90 -0
  160. package/dist/esm/impl/zec/types.d.ts +3 -0
  161. package/dist/esm/impl/zec/types.d.ts.map +1 -0
  162. package/dist/esm/impl/zec/types.js +2 -0
  163. package/dist/esm/impl/zec/zec.d.ts +14 -1
  164. package/dist/esm/impl/zec/zec.d.ts.map +1 -1
  165. package/dist/esm/impl/zec/zec.js +17 -1
  166. package/dist/esm/names.d.ts +5 -2
  167. package/dist/esm/names.d.ts.map +1 -1
  168. package/dist/esm/names.js +18 -1
  169. package/dist/esm/recovery/backupKeyRecovery.d.ts +6 -2
  170. package/dist/esm/recovery/backupKeyRecovery.d.ts.map +1 -1
  171. package/dist/esm/recovery/backupKeyRecovery.js +8 -6
  172. package/dist/esm/recovery/crossChainRecovery.d.ts.map +1 -1
  173. package/dist/esm/recovery/crossChainRecovery.js +4 -4
  174. package/dist/esm/transaction/decode.d.ts +2 -2
  175. package/dist/esm/transaction/decode.d.ts.map +1 -1
  176. package/dist/esm/transaction/decode.js +3 -2
  177. package/dist/esm/transaction/descriptor/explainPsbt.d.ts +2 -2
  178. package/dist/esm/transaction/descriptor/explainPsbt.d.ts.map +1 -1
  179. package/dist/esm/transaction/descriptor/explainPsbt.js +6 -5
  180. package/dist/esm/transaction/descriptor/parse.d.ts +3 -3
  181. package/dist/esm/transaction/descriptor/parse.d.ts.map +1 -1
  182. package/dist/esm/transaction/descriptor/parse.js +17 -18
  183. package/dist/esm/transaction/descriptor/parseToAmountType.d.ts +2 -1
  184. package/dist/esm/transaction/descriptor/parseToAmountType.d.ts.map +1 -1
  185. package/dist/esm/transaction/descriptor/parseToAmountType.js +3 -3
  186. package/dist/esm/transaction/descriptor/verifyTransaction.d.ts +3 -3
  187. package/dist/esm/transaction/descriptor/verifyTransaction.d.ts.map +1 -1
  188. package/dist/esm/transaction/descriptor/verifyTransaction.js +6 -6
  189. package/dist/esm/transaction/explainTransaction.d.ts +2 -2
  190. package/dist/esm/transaction/explainTransaction.d.ts.map +1 -1
  191. package/dist/esm/transaction/explainTransaction.js +1 -1
  192. package/dist/esm/transaction/fixedScript/parseOutput.d.ts +3 -1
  193. package/dist/esm/transaction/fixedScript/parseOutput.d.ts.map +1 -1
  194. package/dist/esm/transaction/fixedScript/parseOutput.js +5 -4
  195. package/dist/esm/transaction/fixedScript/parseTransaction.d.ts +2 -1
  196. package/dist/esm/transaction/fixedScript/parseTransaction.d.ts.map +1 -1
  197. package/dist/esm/transaction/fixedScript/parseTransaction.js +16 -15
  198. package/dist/esm/transaction/fixedScript/replayProtection.d.ts +4 -4
  199. package/dist/esm/transaction/fixedScript/replayProtection.d.ts.map +1 -1
  200. package/dist/esm/transaction/fixedScript/replayProtection.js +1 -1
  201. package/dist/esm/transaction/fixedScript/signTransaction.d.ts +2 -2
  202. package/dist/esm/transaction/fixedScript/signTransaction.d.ts.map +1 -1
  203. package/dist/esm/transaction/fixedScript/signTransaction.js +1 -1
  204. package/dist/esm/transaction/parseTransaction.d.ts +2 -1
  205. package/dist/esm/transaction/parseTransaction.d.ts.map +1 -1
  206. package/dist/esm/transaction/parseTransaction.js +4 -4
  207. package/dist/esm/transaction/recipient.d.ts +35 -16
  208. package/dist/esm/transaction/recipient.d.ts.map +1 -1
  209. package/dist/esm/transaction/recipient.js +79 -48
  210. package/dist/esm/transaction/signTransaction.js +2 -2
  211. package/dist/esm/transaction/verifyTransaction.d.ts +2 -1
  212. package/dist/esm/transaction/verifyTransaction.d.ts.map +1 -1
  213. package/dist/esm/transaction/verifyTransaction.js +3 -3
  214. package/package.json +10 -9
@@ -0,0 +1,120 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ZecAddressCodec = void 0;
4
+ exports.isShieldedZcashAddress = isShieldedZcashAddress;
5
+ exports.getZcashAddressKind = getZcashAddressKind;
6
+ exports.isValidZcashAddress = isValidZcashAddress;
7
+ const wasm_utxo_1 = require("@bitgo/wasm-utxo");
8
+ const recipient_1 = require("../../transaction/recipient");
9
+ /**
10
+ * Address codec for Zcash coins ('zec'/'tzec') that understands ZIP-316
11
+ * Unified Addresses in addition to ordinary transparent addresses.
12
+ *
13
+ * - `decode` resolves the bytes a recipient pays to (see its doc): by default
14
+ * the transparent scriptPubKey; with `unifiedRecipientPreference: 'shielded'`
15
+ * the raw Orchard/Ironwood receiver of a Unified Address.
16
+ * - `encode`/`toExtendedAddressFormat` are unchanged: scripts can only be
17
+ * written back out as transparent addresses.
18
+ * - `isValidAddress` accepts transparent addresses and Unified Addresses with
19
+ * a transparent or Orchard receiver.
20
+ */
21
+ class ZecAddressCodec extends recipient_1.AddressCodec {
22
+ constructor(coinName, wasmName, unifiedRecipientPreference = 'transparent') {
23
+ super(coinName, wasmName);
24
+ this.zcashNetworkName = wasmName;
25
+ this.unifiedRecipientPreference = unifiedRecipientPreference;
26
+ }
27
+ /**
28
+ * Whether `address` is a valid Zcash address for this coin's network.
29
+ *
30
+ * Mirrors the pre-codec `Zec.isValidAddress` logic exactly: the address is
31
+ * valid iff it has a usable transparent receiver (an ordinary transparent
32
+ * address, or a UA carrying a transparent receiver) or an Orchard receiver
33
+ * (a UA carrying one).
34
+ */
35
+ isValidAddress(address) {
36
+ return (wasm_utxo_1.zcashAddress.hasTransparentReceiver(address, this.wasmName) ||
37
+ wasm_utxo_1.zcashAddress.hasOrchardReceiver(address, this.wasmName));
38
+ }
39
+ /**
40
+ * Resolve `address` to the bytes this codec's unified-recipient preference pays to.
41
+ *
42
+ * - `'transparent'` (default) resolves the scriptPubKey: an ordinary
43
+ * transparent address decodes to its own script, and a UA with a
44
+ * transparent receiver decodes to that receiver's script. A UA without a
45
+ * transparent receiver (e.g. Orchard-only) throws, since a shielded
46
+ * output has no script.
47
+ * - `'shielded'` resolves the raw Orchard (Ironwood) receiver — the
48
+ * 43-byte diversifier + `pk_d` — of a UA carrying one. Any other address
49
+ * (plain transparent, transparent-only UA, malformed, wrong network)
50
+ * throws, since it has no Orchard receiver to resolve.
51
+ */
52
+ decode(address) {
53
+ if (this.unifiedRecipientPreference !== 'shielded') {
54
+ return wasm_utxo_1.zcashAddress.toTransparentReceiverWithCoin(address, this.wasmName);
55
+ }
56
+ // The raw Orchard receiver exists only for a Unified Address carrying one; anything else
57
+ // (plain transparent address, transparent-only UA, malformed, wrong network) throws.
58
+ let unified;
59
+ try {
60
+ unified = wasm_utxo_1.fixedScriptWallet.ZcashUnifiedAddress.parse(address, this.zcashNetworkName);
61
+ }
62
+ catch {
63
+ throw new Error(`address ${address} is not a valid address for network ${this.zcashNetworkName}`);
64
+ }
65
+ if (!unified?.hasOrchardReceiver) {
66
+ throw new Error(`address ${address} has no Orchard receiver to resolve as shielded`);
67
+ }
68
+ return wasm_utxo_1.zcashAddress.toShieldedReceiverWithCoin(address, this.wasmName);
69
+ }
70
+ }
71
+ exports.ZecAddressCodec = ZecAddressCodec;
72
+ /**
73
+ * Whether `address` is a well-formed ZIP-316 Unified Address for `network`
74
+ * with an Orchard receiver. BitGo only supports Orchard, so a UA without one
75
+ * (e.g. Sapling- or transparent-only) is not considered valid here.
76
+ */
77
+ function isShieldedZcashAddress(address, network) {
78
+ try {
79
+ return wasm_utxo_1.fixedScriptWallet.ZcashUnifiedAddress.parse(address, network).hasOrchardReceiver;
80
+ }
81
+ catch {
82
+ return false;
83
+ }
84
+ }
85
+ /**
86
+ * Classify a Zcash address string as transparent or shielded, validating it in
87
+ * the process. Returns undefined if the address is neither a valid transparent
88
+ * address nor a well-formed ZIP-316 Unified Address for `network`.
89
+ */
90
+ function getZcashAddressKind(address, network) {
91
+ // ZcashNetworkName also permits 'zcash'/'zcashTest', which toOutputScriptWithCoin
92
+ // doesn't accept (it takes a CoinName, i.e. 'zec'/'tzec'). Skip straight to the
93
+ // shielded check for those rather than relying on an unsafe cast + caught throw.
94
+ if ((0, wasm_utxo_1.isCoinName)(network)) {
95
+ try {
96
+ wasm_utxo_1.address.toOutputScriptWithCoin(address, network);
97
+ return 'transparent';
98
+ }
99
+ catch {
100
+ // not a valid transparent address; fall through to shielded check
101
+ }
102
+ }
103
+ return isShieldedZcashAddress(address, network) ? 'shielded' : undefined;
104
+ }
105
+ /**
106
+ * Standalone counterpart to `Zec.isValidAddress`, parameterized by `network`
107
+ * instead of requiring a coin instance. Accepts transparent addresses and
108
+ * shielded ZIP-316 Unified Addresses.
109
+ *
110
+ * Not structurally identical to `Zec.isValidAddress`: the base class also
111
+ * round-trips the parsed script through each known encoding format (see
112
+ * `AbstractUtxoCoin.isValidAddress`), whereas this only calls
113
+ * `toOutputScriptWithCoin` once via `getZcashAddressKind`. They agree in
114
+ * practice since zec/tzec have no alternate transparent-address encoding to
115
+ * round-trip against, but that's not guaranteed to remain true.
116
+ */
117
+ function isValidZcashAddress(address, network) {
118
+ return getZcashAddressKind(address, network) !== undefined;
119
+ }
120
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkcmVzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9pbXBsL3plYy9hZGRyZXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQXdGQSx3REFNQztBQU9ELGtEQWdCQztBQWNELGtEQUVDO0FBcklELGdEQUF1RztBQUd2RywyREFBMkQ7QUFLM0Q7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxNQUFhLGVBQWdCLFNBQVEsd0JBQVk7SUFNL0MsWUFDRSxRQUFzQixFQUN0QixRQUEwQixFQUMxQiw2QkFBeUQsYUFBYTtRQUV0RSxLQUFLLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQzFCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxRQUE4QyxDQUFDO1FBQ3ZFLElBQUksQ0FBQywwQkFBMEIsR0FBRywwQkFBMEIsQ0FBQztJQUMvRCxDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNNLGNBQWMsQ0FBQyxPQUFlO1FBQ3JDLE9BQU8sQ0FDTCx3QkFBWSxDQUFDLHNCQUFzQixDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQzNELHdCQUFZLENBQUMsa0JBQWtCLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FDeEQsQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7O09BWUc7SUFDTSxNQUFNLENBQUMsT0FBZTtRQUM3QixJQUFJLElBQUksQ0FBQywwQkFBMEIsS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUNuRCxPQUFPLHdCQUFZLENBQUMsNkJBQTZCLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM1RSxDQUFDO1FBQ0QseUZBQXlGO1FBQ3pGLHFGQUFxRjtRQUNyRixJQUFJLE9BQTBELENBQUM7UUFDL0QsSUFBSSxDQUFDO1lBQ0gsT0FBTyxHQUFHLDZCQUFpQixDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDeEYsQ0FBQztRQUFDLE1BQU0sQ0FBQztZQUNQLE1BQU0sSUFBSSxLQUFLLENBQUMsV0FBVyxPQUFPLHVDQUF1QyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO1FBQ3BHLENBQUM7UUFDRCxJQUFJLENBQUMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLENBQUM7WUFDakMsTUFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLE9BQU8saURBQWlELENBQUMsQ0FBQztRQUN2RixDQUFDO1FBQ0QsT0FBTyx3QkFBWSxDQUFDLDBCQUEwQixDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDekUsQ0FBQztDQUNGO0FBN0RELDBDQTZEQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFnQixzQkFBc0IsQ0FBQyxPQUFlLEVBQUUsT0FBMkM7SUFDakcsSUFBSSxDQUFDO1FBQ0gsT0FBTyw2QkFBaUIsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDLGtCQUFrQixDQUFDO0lBQzFGLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQWdCLG1CQUFtQixDQUNqQyxPQUFlLEVBQ2YsT0FBMkM7SUFFM0Msa0ZBQWtGO0lBQ2xGLGdGQUFnRjtJQUNoRixpRkFBaUY7SUFDakYsSUFBSSxJQUFBLHNCQUFVLEVBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUM7WUFDSCxtQkFBVyxDQUFDLHNCQUFzQixDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztZQUNyRCxPQUFPLGFBQWEsQ0FBQztRQUN2QixDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ1Asa0VBQWtFO1FBQ3BFLENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxzQkFBc0IsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQzNFLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7R0FXRztBQUNILFNBQWdCLG1CQUFtQixDQUFDLE9BQWUsRUFBRSxPQUEyQztJQUM5RixPQUFPLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsS0FBSyxTQUFTLENBQUM7QUFDN0QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFkZHJlc3MgYXMgd2FzbUFkZHJlc3MsIGZpeGVkU2NyaXB0V2FsbGV0LCBpc0NvaW5OYW1lLCB6Y2FzaEFkZHJlc3MgfSBmcm9tICdAYml0Z28vd2FzbS11dHhvJztcbmltcG9ydCB0eXBlIHsgVW5pZmllZFJlY2lwaWVudFByZWZlcmVuY2UgfSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuXG5pbXBvcnQgeyBBZGRyZXNzQ29kZWMgfSBmcm9tICcuLi8uLi90cmFuc2FjdGlvbi9yZWNpcGllbnQnO1xuaW1wb3J0IHsgVXR4b0NvaW5OYW1lLCBXYXNtVXR4b0NvaW5OYW1lIH0gZnJvbSAnLi4vLi4vbmFtZXMnO1xuXG5leHBvcnQgdHlwZSBaY2FzaEFkZHJlc3NLaW5kID0gJ3RyYW5zcGFyZW50JyB8ICdzaGllbGRlZCc7XG5cbi8qKlxuICogQWRkcmVzcyBjb2RlYyBmb3IgWmNhc2ggY29pbnMgKCd6ZWMnLyd0emVjJykgdGhhdCB1bmRlcnN0YW5kcyBaSVAtMzE2XG4gKiBVbmlmaWVkIEFkZHJlc3NlcyBpbiBhZGRpdGlvbiB0byBvcmRpbmFyeSB0cmFuc3BhcmVudCBhZGRyZXNzZXMuXG4gKlxuICogLSBgZGVjb2RlYCByZXNvbHZlcyB0aGUgYnl0ZXMgYSByZWNpcGllbnQgcGF5cyB0byAoc2VlIGl0cyBkb2MpOiBieSBkZWZhdWx0XG4gKiAgIHRoZSB0cmFuc3BhcmVudCBzY3JpcHRQdWJLZXk7IHdpdGggYHVuaWZpZWRSZWNpcGllbnRQcmVmZXJlbmNlOiAnc2hpZWxkZWQnYFxuICogICB0aGUgcmF3IE9yY2hhcmQvSXJvbndvb2QgcmVjZWl2ZXIgb2YgYSBVbmlmaWVkIEFkZHJlc3MuXG4gKiAtIGBlbmNvZGVgL2B0b0V4dGVuZGVkQWRkcmVzc0Zvcm1hdGAgYXJlIHVuY2hhbmdlZDogc2NyaXB0cyBjYW4gb25seSBiZVxuICogICB3cml0dGVuIGJhY2sgb3V0IGFzIHRyYW5zcGFyZW50IGFkZHJlc3Nlcy5cbiAqIC0gYGlzVmFsaWRBZGRyZXNzYCBhY2NlcHRzIHRyYW5zcGFyZW50IGFkZHJlc3NlcyBhbmQgVW5pZmllZCBBZGRyZXNzZXMgd2l0aFxuICogICBhIHRyYW5zcGFyZW50IG9yIE9yY2hhcmQgcmVjZWl2ZXIuXG4gKi9cbmV4cG9ydCBjbGFzcyBaZWNBZGRyZXNzQ29kZWMgZXh0ZW5kcyBBZGRyZXNzQ29kZWMge1xuICAvKiogVGhlIFpjYXNoIG5ldHdvcmsgbmFtZSBmb3Igd2FzbSBjYWxscyDigJQgJ3plYycgb3IgJ3R6ZWMnLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHpjYXNoTmV0d29ya05hbWU6IGZpeGVkU2NyaXB0V2FsbGV0LlpjYXNoTmV0d29ya05hbWU7XG4gIC8qKiBIb3cgVW5pZmllZCBBZGRyZXNzIHJlY2lwaWVudHMgcmVzb2x2ZSB3aGVuIHRoaXMgY29kZWMgZGVjb2RlcyB0aGVtLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHVuaWZpZWRSZWNpcGllbnRQcmVmZXJlbmNlOiBVbmlmaWVkUmVjaXBpZW50UHJlZmVyZW5jZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBjb2luTmFtZTogVXR4b0NvaW5OYW1lLFxuICAgIHdhc21OYW1lOiBXYXNtVXR4b0NvaW5OYW1lLFxuICAgIHVuaWZpZWRSZWNpcGllbnRQcmVmZXJlbmNlOiBVbmlmaWVkUmVjaXBpZW50UHJlZmVyZW5jZSA9ICd0cmFuc3BhcmVudCdcbiAgKSB7XG4gICAgc3VwZXIoY29pbk5hbWUsIHdhc21OYW1lKTtcbiAgICB0aGlzLnpjYXNoTmV0d29ya05hbWUgPSB3YXNtTmFtZSBhcyBmaXhlZFNjcmlwdFdhbGxldC5aY2FzaE5ldHdvcmtOYW1lO1xuICAgIHRoaXMudW5pZmllZFJlY2lwaWVudFByZWZlcmVuY2UgPSB1bmlmaWVkUmVjaXBpZW50UHJlZmVyZW5jZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIGBhZGRyZXNzYCBpcyBhIHZhbGlkIFpjYXNoIGFkZHJlc3MgZm9yIHRoaXMgY29pbidzIG5ldHdvcmsuXG4gICAqXG4gICAqIE1pcnJvcnMgdGhlIHByZS1jb2RlYyBgWmVjLmlzVmFsaWRBZGRyZXNzYCBsb2dpYyBleGFjdGx5OiB0aGUgYWRkcmVzcyBpc1xuICAgKiB2YWxpZCBpZmYgaXQgaGFzIGEgdXNhYmxlIHRyYW5zcGFyZW50IHJlY2VpdmVyIChhbiBvcmRpbmFyeSB0cmFuc3BhcmVudFxuICAgKiBhZGRyZXNzLCBvciBhIFVBIGNhcnJ5aW5nIGEgdHJhbnNwYXJlbnQgcmVjZWl2ZXIpIG9yIGFuIE9yY2hhcmQgcmVjZWl2ZXJcbiAgICogKGEgVUEgY2Fycnlpbmcgb25lKS5cbiAgICovXG4gIG92ZXJyaWRlIGlzVmFsaWRBZGRyZXNzKGFkZHJlc3M6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICB6Y2FzaEFkZHJlc3MuaGFzVHJhbnNwYXJlbnRSZWNlaXZlcihhZGRyZXNzLCB0aGlzLndhc21OYW1lKSB8fFxuICAgICAgemNhc2hBZGRyZXNzLmhhc09yY2hhcmRSZWNlaXZlcihhZGRyZXNzLCB0aGlzLndhc21OYW1lKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZSBgYWRkcmVzc2AgdG8gdGhlIGJ5dGVzIHRoaXMgY29kZWMncyB1bmlmaWVkLXJlY2lwaWVudCBwcmVmZXJlbmNlIHBheXMgdG8uXG4gICAqXG4gICAqIC0gYCd0cmFuc3BhcmVudCdgIChkZWZhdWx0KSByZXNvbHZlcyB0aGUgc2NyaXB0UHViS2V5OiBhbiBvcmRpbmFyeVxuICAgKiAgIHRyYW5zcGFyZW50IGFkZHJlc3MgZGVjb2RlcyB0byBpdHMgb3duIHNjcmlwdCwgYW5kIGEgVUEgd2l0aCBhXG4gICAqICAgdHJhbnNwYXJlbnQgcmVjZWl2ZXIgZGVjb2RlcyB0byB0aGF0IHJlY2VpdmVyJ3Mgc2NyaXB0LiBBIFVBIHdpdGhvdXQgYVxuICAgKiAgIHRyYW5zcGFyZW50IHJlY2VpdmVyIChlLmcuIE9yY2hhcmQtb25seSkgdGhyb3dzLCBzaW5jZSBhIHNoaWVsZGVkXG4gICAqICAgb3V0cHV0IGhhcyBubyBzY3JpcHQuXG4gICAqIC0gYCdzaGllbGRlZCdgIHJlc29sdmVzIHRoZSByYXcgT3JjaGFyZCAoSXJvbndvb2QpIHJlY2VpdmVyIOKAlCB0aGVcbiAgICogICA0My1ieXRlIGRpdmVyc2lmaWVyICsgYHBrX2RgIOKAlCBvZiBhIFVBIGNhcnJ5aW5nIG9uZS4gQW55IG90aGVyIGFkZHJlc3NcbiAgICogICAocGxhaW4gdHJhbnNwYXJlbnQsIHRyYW5zcGFyZW50LW9ubHkgVUEsIG1hbGZvcm1lZCwgd3JvbmcgbmV0d29yaylcbiAgICogICB0aHJvd3MsIHNpbmNlIGl0IGhhcyBubyBPcmNoYXJkIHJlY2VpdmVyIHRvIHJlc29sdmUuXG4gICAqL1xuICBvdmVycmlkZSBkZWNvZGUoYWRkcmVzczogc3RyaW5nKTogVWludDhBcnJheSB7XG4gICAgaWYgKHRoaXMudW5pZmllZFJlY2lwaWVudFByZWZlcmVuY2UgIT09ICdzaGllbGRlZCcpIHtcbiAgICAgIHJldHVybiB6Y2FzaEFkZHJlc3MudG9UcmFuc3BhcmVudFJlY2VpdmVyV2l0aENvaW4oYWRkcmVzcywgdGhpcy53YXNtTmFtZSk7XG4gICAgfVxuICAgIC8vIFRoZSByYXcgT3JjaGFyZCByZWNlaXZlciBleGlzdHMgb25seSBmb3IgYSBVbmlmaWVkIEFkZHJlc3MgY2Fycnlpbmcgb25lOyBhbnl0aGluZyBlbHNlXG4gICAgLy8gKHBsYWluIHRyYW5zcGFyZW50IGFkZHJlc3MsIHRyYW5zcGFyZW50LW9ubHkgVUEsIG1hbGZvcm1lZCwgd3JvbmcgbmV0d29yaykgdGhyb3dzLlxuICAgIGxldCB1bmlmaWVkOiBmaXhlZFNjcmlwdFdhbGxldC5aY2FzaFVuaWZpZWRBZGRyZXNzIHwgdW5kZWZpbmVkO1xuICAgIHRyeSB7XG4gICAgICB1bmlmaWVkID0gZml4ZWRTY3JpcHRXYWxsZXQuWmNhc2hVbmlmaWVkQWRkcmVzcy5wYXJzZShhZGRyZXNzLCB0aGlzLnpjYXNoTmV0d29ya05hbWUpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBhZGRyZXNzICR7YWRkcmVzc30gaXMgbm90IGEgdmFsaWQgYWRkcmVzcyBmb3IgbmV0d29yayAke3RoaXMuemNhc2hOZXR3b3JrTmFtZX1gKTtcbiAgICB9XG4gICAgaWYgKCF1bmlmaWVkPy5oYXNPcmNoYXJkUmVjZWl2ZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgYWRkcmVzcyAke2FkZHJlc3N9IGhhcyBubyBPcmNoYXJkIHJlY2VpdmVyIHRvIHJlc29sdmUgYXMgc2hpZWxkZWRgKTtcbiAgICB9XG4gICAgcmV0dXJuIHpjYXNoQWRkcmVzcy50b1NoaWVsZGVkUmVjZWl2ZXJXaXRoQ29pbihhZGRyZXNzLCB0aGlzLndhc21OYW1lKTtcbiAgfVxufVxuXG4vKipcbiAqIFdoZXRoZXIgYGFkZHJlc3NgIGlzIGEgd2VsbC1mb3JtZWQgWklQLTMxNiBVbmlmaWVkIEFkZHJlc3MgZm9yIGBuZXR3b3JrYFxuICogd2l0aCBhbiBPcmNoYXJkIHJlY2VpdmVyLiBCaXRHbyBvbmx5IHN1cHBvcnRzIE9yY2hhcmQsIHNvIGEgVUEgd2l0aG91dCBvbmVcbiAqIChlLmcuIFNhcGxpbmctIG9yIHRyYW5zcGFyZW50LW9ubHkpIGlzIG5vdCBjb25zaWRlcmVkIHZhbGlkIGhlcmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1NoaWVsZGVkWmNhc2hBZGRyZXNzKGFkZHJlc3M6IHN0cmluZywgbmV0d29yazogZml4ZWRTY3JpcHRXYWxsZXQuWmNhc2hOZXR3b3JrTmFtZSk6IGJvb2xlYW4ge1xuICB0cnkge1xuICAgIHJldHVybiBmaXhlZFNjcmlwdFdhbGxldC5aY2FzaFVuaWZpZWRBZGRyZXNzLnBhcnNlKGFkZHJlc3MsIG5ldHdvcmspLmhhc09yY2hhcmRSZWNlaXZlcjtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8qKlxuICogQ2xhc3NpZnkgYSBaY2FzaCBhZGRyZXNzIHN0cmluZyBhcyB0cmFuc3BhcmVudCBvciBzaGllbGRlZCwgdmFsaWRhdGluZyBpdCBpblxuICogdGhlIHByb2Nlc3MuIFJldHVybnMgdW5kZWZpbmVkIGlmIHRoZSBhZGRyZXNzIGlzIG5laXRoZXIgYSB2YWxpZCB0cmFuc3BhcmVudFxuICogYWRkcmVzcyBub3IgYSB3ZWxsLWZvcm1lZCBaSVAtMzE2IFVuaWZpZWQgQWRkcmVzcyBmb3IgYG5ldHdvcmtgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0WmNhc2hBZGRyZXNzS2luZChcbiAgYWRkcmVzczogc3RyaW5nLFxuICBuZXR3b3JrOiBmaXhlZFNjcmlwdFdhbGxldC5aY2FzaE5ldHdvcmtOYW1lXG4pOiBaY2FzaEFkZHJlc3NLaW5kIHwgdW5kZWZpbmVkIHtcbiAgLy8gWmNhc2hOZXR3b3JrTmFtZSBhbHNvIHBlcm1pdHMgJ3pjYXNoJy8nemNhc2hUZXN0Jywgd2hpY2ggdG9PdXRwdXRTY3JpcHRXaXRoQ29pblxuICAvLyBkb2Vzbid0IGFjY2VwdCAoaXQgdGFrZXMgYSBDb2luTmFtZSwgaS5lLiAnemVjJy8ndHplYycpLiBTa2lwIHN0cmFpZ2h0IHRvIHRoZVxuICAvLyBzaGllbGRlZCBjaGVjayBmb3IgdGhvc2UgcmF0aGVyIHRoYW4gcmVseWluZyBvbiBhbiB1bnNhZmUgY2FzdCArIGNhdWdodCB0aHJvdy5cbiAgaWYgKGlzQ29pbk5hbWUobmV0d29yaykpIHtcbiAgICB0cnkge1xuICAgICAgd2FzbUFkZHJlc3MudG9PdXRwdXRTY3JpcHRXaXRoQ29pbihhZGRyZXNzLCBuZXR3b3JrKTtcbiAgICAgIHJldHVybiAndHJhbnNwYXJlbnQnO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gbm90IGEgdmFsaWQgdHJhbnNwYXJlbnQgYWRkcmVzczsgZmFsbCB0aHJvdWdoIHRvIHNoaWVsZGVkIGNoZWNrXG4gICAgfVxuICB9XG4gIHJldHVybiBpc1NoaWVsZGVkWmNhc2hBZGRyZXNzKGFkZHJlc3MsIG5ldHdvcmspID8gJ3NoaWVsZGVkJyA6IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBTdGFuZGFsb25lIGNvdW50ZXJwYXJ0IHRvIGBaZWMuaXNWYWxpZEFkZHJlc3NgLCBwYXJhbWV0ZXJpemVkIGJ5IGBuZXR3b3JrYFxuICogaW5zdGVhZCBvZiByZXF1aXJpbmcgYSBjb2luIGluc3RhbmNlLiBBY2NlcHRzIHRyYW5zcGFyZW50IGFkZHJlc3NlcyBhbmRcbiAqIHNoaWVsZGVkIFpJUC0zMTYgVW5pZmllZCBBZGRyZXNzZXMuXG4gKlxuICogTm90IHN0cnVjdHVyYWxseSBpZGVudGljYWwgdG8gYFplYy5pc1ZhbGlkQWRkcmVzc2A6IHRoZSBiYXNlIGNsYXNzIGFsc29cbiAqIHJvdW5kLXRyaXBzIHRoZSBwYXJzZWQgc2NyaXB0IHRocm91Z2ggZWFjaCBrbm93biBlbmNvZGluZyBmb3JtYXQgKHNlZVxuICogYEFic3RyYWN0VXR4b0NvaW4uaXNWYWxpZEFkZHJlc3NgKSwgd2hlcmVhcyB0aGlzIG9ubHkgY2FsbHNcbiAqIGB0b091dHB1dFNjcmlwdFdpdGhDb2luYCBvbmNlIHZpYSBgZ2V0WmNhc2hBZGRyZXNzS2luZGAuIFRoZXkgYWdyZWUgaW5cbiAqIHByYWN0aWNlIHNpbmNlIHplYy90emVjIGhhdmUgbm8gYWx0ZXJuYXRlIHRyYW5zcGFyZW50LWFkZHJlc3MgZW5jb2RpbmcgdG9cbiAqIHJvdW5kLXRyaXAgYWdhaW5zdCwgYnV0IHRoYXQncyBub3QgZ3VhcmFudGVlZCB0byByZW1haW4gdHJ1ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRaY2FzaEFkZHJlc3MoYWRkcmVzczogc3RyaW5nLCBuZXR3b3JrOiBmaXhlZFNjcmlwdFdhbGxldC5aY2FzaE5ldHdvcmtOYW1lKTogYm9vbGVhbiB7XG4gIHJldHVybiBnZXRaY2FzaEFkZHJlc3NLaW5kKGFkZHJlc3MsIG5ldHdvcmspICE9PSB1bmRlZmluZWQ7XG59XG4iXX0=
@@ -1,3 +1,6 @@
1
1
  export * from './zec';
2
2
  export * from './tzec';
3
+ export * from './address';
4
+ export * from './recipients';
5
+ export * from './types';
3
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/impl/zec/index.ts"],"names":[],"mappings":"AAAA,cAAc,OAAO,CAAC;AACtB,cAAc,QAAQ,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/impl/zec/index.ts"],"names":[],"mappings":"AAAA,cAAc,OAAO,CAAC;AACtB,cAAc,QAAQ,CAAC;AACvB,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,SAAS,CAAC"}
@@ -16,4 +16,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./zec"), exports);
18
18
  __exportStar(require("./tzec"), exports);
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvaW1wbC96ZWMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHdDQUFzQjtBQUN0Qix5Q0FBdUIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3plYyc7XG5leHBvcnQgKiBmcm9tICcuL3R6ZWMnO1xuIl19
19
+ __exportStar(require("./address"), exports);
20
+ __exportStar(require("./recipients"), exports);
21
+ __exportStar(require("./types"), exports);
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvaW1wbC96ZWMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHdDQUFzQjtBQUN0Qix5Q0FBdUI7QUFDdkIsNENBQTBCO0FBQzFCLCtDQUE2QjtBQUM3QiwwQ0FBd0IiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3plYyc7XG5leHBvcnQgKiBmcm9tICcuL3R6ZWMnO1xuZXhwb3J0ICogZnJvbSAnLi9hZGRyZXNzJztcbmV4cG9ydCAqIGZyb20gJy4vcmVjaXBpZW50cyc7XG5leHBvcnQgKiBmcm9tICcuL3R5cGVzJztcbiJdfQ==
@@ -0,0 +1,85 @@
1
+ import { fixedScriptWallet } from '@bitgo/wasm-utxo';
2
+ import type { UnifiedRecipientPreference } from '@bitgo/sdk-core';
3
+ import { ZcashCoinName } from './types';
4
+ /**
5
+ * How a recipient parsed from a Zcash PSBT is spent.
6
+ *
7
+ * The decode-side counterpart of utxo-core's `buildTransaction/zcash.ts` `ZcashDestination` on
8
+ * the build side: a shielded recipient is an Orchard/Ironwood output stored in the v6 (Ironwood)
9
+ * PSBT's orchard PCZT, and everything else is an ordinary transparent output. A transparent
10
+ * output resolved from a Unified Address carries that original UA (`zcashUnifiedTransparent`), a
11
+ * plain address does not.
12
+ */
13
+ export type PsbtRecipientDestination = {
14
+ kind: 'zcashShielded';
15
+ /**
16
+ * The Unified Address the output was addressed to — the original multi-receiver UA the
17
+ * client passed when the PSBT stores one verbatim, otherwise a re-encoded single-receiver
18
+ * Orchard UA.
19
+ */
20
+ unifiedAddress: string;
21
+ } | {
22
+ kind: 'zcashUnifiedTransparent';
23
+ /** The original Unified Address the transparent receiver was resolved from. */
24
+ unifiedAddress: string;
25
+ } | {
26
+ kind: 'transparent';
27
+ };
28
+ /** A recipient resolved from a decoded Zcash PSBT's external outputs. */
29
+ export interface PsbtRecipient {
30
+ /** Amount in satoshis. */
31
+ amount: bigint;
32
+ /**
33
+ * The recipient address. For a shielded output this is the Unified Address the output was
34
+ * addressed to — the original multi-receiver UA when the PSBT stores one verbatim, otherwise a
35
+ * re-encoded single-receiver Orchard UA. For a transparent output it is the original Unified
36
+ * Address when one was stored, else the decoded transparent address.
37
+ */
38
+ address: string;
39
+ /**
40
+ * Raw receiver bytes: the 43-byte Orchard/Ironwood receiver for a shielded output, the
41
+ * scriptPubKey for a transparent one.
42
+ */
43
+ script: Uint8Array;
44
+ /**
45
+ * The original Unified Address the client supplied for this recipient, when the PSBT stores
46
+ * one: the v6 (Ironwood) PCZT for a shielded output, the transparent-output proprietary
47
+ * key-value map for a v4 transparent output. `undefined` when the recipient was built from a
48
+ * plain address.
49
+ */
50
+ unifiedAddress?: string;
51
+ destination: PsbtRecipientDestination;
52
+ }
53
+ /**
54
+ * Resolve the recipient list of a decoded Zcash PSBT (v4 Sapling-shaped or v6 Ironwood).
55
+ *
56
+ * Mirrors the recipient resolution of wallet-platform's utxo-core `buildTransaction` in the
57
+ * decode direction: every non-wallet output with a resolvable address is a recipient. A
58
+ * shielded output parses with `isShielded: true`, its `script` being the raw 43-byte receiver;
59
+ * when the build stored the client's original Unified Address (the v6 PCZT for shielded
60
+ * outputs, the transparent-output proprietary key-value map for v4), both the parsed address
61
+ * and `unifiedAddress` report it verbatim. Opaque outputs with no address (e.g. OP_RETURN) are
62
+ * skipped, as they carry no recipient.
63
+ */
64
+ export declare function resolvePsbtRecipients(psbt: fixedScriptWallet.ZcashBitGoPsbt, walletKeys: fixedScriptWallet.RootWalletKeys): PsbtRecipient[];
65
+ /**
66
+ * Infer the Unified-Address recipient preference for a Zcash transaction when the caller did
67
+ * not pass one — the counterpart of wallet-platform's utxo-core `buildTransaction`
68
+ * `classifyRecipientShieldedness`.
69
+ *
70
+ * A recipient that resolves to a transparent output — an ordinary transparent address, or a
71
+ * Unified Address carrying a transparent receiver — is classified `'transparent'`; a Unified
72
+ * Address carrying only an Orchard/Ironwood receiver is classified `'shielded'`. A mix of
73
+ * shielded and transparent recipients is rejected. An address that is neither a transparent
74
+ * address nor a Unified Address propagates the Unified-Address parse error — it is not
75
+ * silently defaulted to `'transparent'`.
76
+ *
77
+ * @returns `'shielded'` when every recipient resolves shielded, `undefined` when every
78
+ * recipient resolves transparent (the build's default). The `'transparent'` arm of the
79
+ * return type exists so callers can pass the explicit preference through unchanged; this
80
+ * function itself never returns `'transparent'`.
81
+ */
82
+ export declare function getUnifiedRecipientPreference(name: ZcashCoinName, recipients: {
83
+ address: string | undefined;
84
+ }[]): UnifiedRecipientPreference | undefined;
85
+ //# sourceMappingURL=recipients.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recipients.d.ts","sourceRoot":"","sources":["../../../../../src/impl/zec/recipients.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAgB,MAAM,kBAAkB,CAAC;AACnE,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,iBAAiB,CAAC;AAIlE,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAExC;;;;;;;;GAQG;AACH,MAAM,MAAM,wBAAwB,GAChC;IACE,IAAI,EAAE,eAAe,CAAC;IACtB;;;;OAIG;IACH,cAAc,EAAE,MAAM,CAAC;CACxB,GACD;IACE,IAAI,EAAE,yBAAyB,CAAC;IAChC,+EAA+E;IAC/E,cAAc,EAAE,MAAM,CAAC;CACxB,GACD;IAAE,IAAI,EAAE,aAAa,CAAA;CAAE,CAAC;AAE5B,yEAAyE;AACzE,MAAM,WAAW,aAAa;IAC5B,0BAA0B;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf;;;;;OAKG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,MAAM,EAAE,UAAU,CAAC;IACnB;;;;;OAKG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,wBAAwB,CAAC;CACvC;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,iBAAiB,CAAC,cAAc,EACtC,UAAU,EAAE,iBAAiB,CAAC,cAAc,GAC3C,aAAa,EAAE,CAgCjB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,6BAA6B,CAC3C,IAAI,EAAE,aAAa,EACnB,UAAU,EAAE;IAAE,OAAO,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,EAAE,GAC5C,0BAA0B,GAAG,SAAS,CA0BxC"}
@@ -0,0 +1,94 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.resolvePsbtRecipients = resolvePsbtRecipients;
4
+ exports.getUnifiedRecipientPreference = getUnifiedRecipientPreference;
5
+ const wasm_utxo_1 = require("@bitgo/wasm-utxo");
6
+ const replayProtection_1 = require("../../transaction/fixedScript/replayProtection");
7
+ /**
8
+ * Resolve the recipient list of a decoded Zcash PSBT (v4 Sapling-shaped or v6 Ironwood).
9
+ *
10
+ * Mirrors the recipient resolution of wallet-platform's utxo-core `buildTransaction` in the
11
+ * decode direction: every non-wallet output with a resolvable address is a recipient. A
12
+ * shielded output parses with `isShielded: true`, its `script` being the raw 43-byte receiver;
13
+ * when the build stored the client's original Unified Address (the v6 PCZT for shielded
14
+ * outputs, the transparent-output proprietary key-value map for v4), both the parsed address
15
+ * and `unifiedAddress` report it verbatim. Opaque outputs with no address (e.g. OP_RETURN) are
16
+ * skipped, as they carry no recipient.
17
+ */
18
+ function resolvePsbtRecipients(psbt, walletKeys) {
19
+ const parsed = psbt.parseTransactionWithWalletKeys(walletKeys, {
20
+ replayProtection: { publicKeys: (0, replayProtection_1.getReplayProtectionPubkeys)('zec') },
21
+ });
22
+ const recipients = [];
23
+ parsed.outputs.forEach((output, i) => {
24
+ // Wallet-owned (change) outputs.
25
+ if (output.scriptId !== null) {
26
+ return;
27
+ }
28
+ // Opaque outputs (e.g. OP_RETURN) carry no recipient address.
29
+ if (output.address === null) {
30
+ return;
31
+ }
32
+ // The original client-passed Unified Address, stored verbatim in the PSBT's key-value
33
+ // pairs: the orchard PCZT for a shielded output (parsed `address` reports it in full), the
34
+ // transparent-output proprietary map for a v4 transparent output.
35
+ const unifiedAddress = output.isShielded ? output.address : psbt.transparentOutputUnifiedAddress(i) ?? undefined;
36
+ recipients.push({
37
+ amount: output.value,
38
+ address: output.address,
39
+ script: output.script,
40
+ unifiedAddress,
41
+ destination: output.isShielded
42
+ ? { kind: 'zcashShielded', unifiedAddress: output.address }
43
+ : unifiedAddress
44
+ ? { kind: 'zcashUnifiedTransparent', unifiedAddress }
45
+ : { kind: 'transparent' },
46
+ });
47
+ });
48
+ return recipients;
49
+ }
50
+ /**
51
+ * Infer the Unified-Address recipient preference for a Zcash transaction when the caller did
52
+ * not pass one — the counterpart of wallet-platform's utxo-core `buildTransaction`
53
+ * `classifyRecipientShieldedness`.
54
+ *
55
+ * A recipient that resolves to a transparent output — an ordinary transparent address, or a
56
+ * Unified Address carrying a transparent receiver — is classified `'transparent'`; a Unified
57
+ * Address carrying only an Orchard/Ironwood receiver is classified `'shielded'`. A mix of
58
+ * shielded and transparent recipients is rejected. An address that is neither a transparent
59
+ * address nor a Unified Address propagates the Unified-Address parse error — it is not
60
+ * silently defaulted to `'transparent'`.
61
+ *
62
+ * @returns `'shielded'` when every recipient resolves shielded, `undefined` when every
63
+ * recipient resolves transparent (the build's default). The `'transparent'` arm of the
64
+ * return type exists so callers can pass the explicit preference through unchanged; this
65
+ * function itself never returns `'transparent'`.
66
+ */
67
+ function getUnifiedRecipientPreference(name, recipients) {
68
+ const shieldedness = recipients.map((recipient) => {
69
+ if (recipient.address === undefined) {
70
+ // Raw script inherently transparent.
71
+ return 'transparent';
72
+ }
73
+ // Ordinary transparent address, or a Unified Address carrying a transparent receiver:
74
+ // resolves transparently either way (the build's default when no preference is given).
75
+ if (wasm_utxo_1.zcashAddress.hasTransparentReceiver(recipient.address, name)) {
76
+ return 'transparent';
77
+ }
78
+ // A shielded (Orchard/Ironwood-only) Unified Address is the only remaining resolvable
79
+ // form. An address that is none of the above propagates the parse error instead of
80
+ // assuming a default.
81
+ const unified = wasm_utxo_1.fixedScriptWallet.ZcashUnifiedAddress.parse(recipient.address, name);
82
+ if (unified.hasOrchardReceiver) {
83
+ return 'shielded';
84
+ }
85
+ throw new Error(`address ${recipient.address} carries no transparent or Orchard receiver`);
86
+ });
87
+ const hasShielded = shieldedness.includes('shielded');
88
+ const hasTransparent = shieldedness.includes('transparent');
89
+ if (hasShielded && hasTransparent) {
90
+ throw new Error('Mixed shielded and transparent recipients are not supported');
91
+ }
92
+ return hasShielded ? 'shielded' : undefined;
93
+ }
94
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjaXBpZW50cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9pbXBsL3plYy9yZWNpcGllbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBc0VBLHNEQW1DQztBQW1CRCxzRUE2QkM7QUF6SkQsZ0RBQW1FO0FBR25FLHFGQUE0RjtBQXdENUY7Ozs7Ozs7Ozs7R0FVRztBQUNILFNBQWdCLHFCQUFxQixDQUNuQyxJQUFzQyxFQUN0QyxVQUE0QztJQUU1QyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsOEJBQThCLENBQUMsVUFBVSxFQUFFO1FBQzdELGdCQUFnQixFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUEsNkNBQTBCLEVBQUMsS0FBSyxDQUFDLEVBQUU7S0FDcEUsQ0FBQyxDQUFDO0lBRUgsTUFBTSxVQUFVLEdBQW9CLEVBQUUsQ0FBQztJQUN2QyxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUNuQyxpQ0FBaUM7UUFDakMsSUFBSSxNQUFNLENBQUMsUUFBUSxLQUFLLElBQUksRUFBRSxDQUFDO1lBQzdCLE9BQU87UUFDVCxDQUFDO1FBQ0QsOERBQThEO1FBQzlELElBQUksTUFBTSxDQUFDLE9BQU8sS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUM1QixPQUFPO1FBQ1QsQ0FBQztRQUNELHNGQUFzRjtRQUN0RiwyRkFBMkY7UUFDM0Ysa0VBQWtFO1FBQ2xFLE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQywrQkFBK0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxTQUFTLENBQUM7UUFDakgsVUFBVSxDQUFDLElBQUksQ0FBQztZQUNkLE1BQU0sRUFBRSxNQUFNLENBQUMsS0FBSztZQUNwQixPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU87WUFDdkIsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNO1lBQ3JCLGNBQWM7WUFDZCxXQUFXLEVBQUUsTUFBTSxDQUFDLFVBQVU7Z0JBQzVCLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUU7Z0JBQzNELENBQUMsQ0FBQyxjQUFjO29CQUNoQixDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUseUJBQXlCLEVBQUUsY0FBYyxFQUFFO29CQUNyRCxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFO1NBQzVCLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0gsT0FBTyxVQUFVLENBQUM7QUFDcEIsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBQ0gsU0FBZ0IsNkJBQTZCLENBQzNDLElBQW1CLEVBQ25CLFVBQTZDO0lBRTdDLE1BQU0sWUFBWSxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRTtRQUNoRCxJQUFJLFNBQVMsQ0FBQyxPQUFPLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDcEMscUNBQXFDO1lBQ3JDLE9BQU8sYUFBc0IsQ0FBQztRQUNoQyxDQUFDO1FBQ0Qsc0ZBQXNGO1FBQ3RGLHVGQUF1RjtRQUN2RixJQUFJLHdCQUFZLENBQUMsc0JBQXNCLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ2pFLE9BQU8sYUFBc0IsQ0FBQztRQUNoQyxDQUFDO1FBQ0Qsc0ZBQXNGO1FBQ3RGLG1GQUFtRjtRQUNuRixzQkFBc0I7UUFDdEIsTUFBTSxPQUFPLEdBQUcsNkJBQWlCLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDckYsSUFBSSxPQUFPLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUMvQixPQUFPLFVBQW1CLENBQUM7UUFDN0IsQ0FBQztRQUNELE1BQU0sSUFBSSxLQUFLLENBQUMsV0FBVyxTQUFTLENBQUMsT0FBTyw2Q0FBNkMsQ0FBQyxDQUFDO0lBQzdGLENBQUMsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxXQUFXLEdBQUcsWUFBWSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN0RCxNQUFNLGNBQWMsR0FBRyxZQUFZLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzVELElBQUksV0FBVyxJQUFJLGNBQWMsRUFBRSxDQUFDO1FBQ2xDLE1BQU0sSUFBSSxLQUFLLENBQUMsNkRBQTZELENBQUMsQ0FBQztJQUNqRixDQUFDO0lBQ0QsT0FBTyxXQUFXLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQzlDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmaXhlZFNjcmlwdFdhbGxldCwgemNhc2hBZGRyZXNzIH0gZnJvbSAnQGJpdGdvL3dhc20tdXR4byc7XG5pbXBvcnQgdHlwZSB7IFVuaWZpZWRSZWNpcGllbnRQcmVmZXJlbmNlIH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcblxuaW1wb3J0IHsgZ2V0UmVwbGF5UHJvdGVjdGlvblB1YmtleXMgfSBmcm9tICcuLi8uLi90cmFuc2FjdGlvbi9maXhlZFNjcmlwdC9yZXBsYXlQcm90ZWN0aW9uJztcblxuaW1wb3J0IHsgWmNhc2hDb2luTmFtZSB9IGZyb20gJy4vdHlwZXMnO1xuXG4vKipcbiAqIEhvdyBhIHJlY2lwaWVudCBwYXJzZWQgZnJvbSBhIFpjYXNoIFBTQlQgaXMgc3BlbnQuXG4gKlxuICogVGhlIGRlY29kZS1zaWRlIGNvdW50ZXJwYXJ0IG9mIHV0eG8tY29yZSdzIGBidWlsZFRyYW5zYWN0aW9uL3pjYXNoLnRzYCBgWmNhc2hEZXN0aW5hdGlvbmAgb25cbiAqIHRoZSBidWlsZCBzaWRlOiBhIHNoaWVsZGVkIHJlY2lwaWVudCBpcyBhbiBPcmNoYXJkL0lyb253b29kIG91dHB1dCBzdG9yZWQgaW4gdGhlIHY2IChJcm9ud29vZClcbiAqIFBTQlQncyBvcmNoYXJkIFBDWlQsIGFuZCBldmVyeXRoaW5nIGVsc2UgaXMgYW4gb3JkaW5hcnkgdHJhbnNwYXJlbnQgb3V0cHV0LiBBIHRyYW5zcGFyZW50XG4gKiBvdXRwdXQgcmVzb2x2ZWQgZnJvbSBhIFVuaWZpZWQgQWRkcmVzcyBjYXJyaWVzIHRoYXQgb3JpZ2luYWwgVUEgKGB6Y2FzaFVuaWZpZWRUcmFuc3BhcmVudGApLCBhXG4gKiBwbGFpbiBhZGRyZXNzIGRvZXMgbm90LlxuICovXG5leHBvcnQgdHlwZSBQc2J0UmVjaXBpZW50RGVzdGluYXRpb24gPVxuICB8IHtcbiAgICAgIGtpbmQ6ICd6Y2FzaFNoaWVsZGVkJztcbiAgICAgIC8qKlxuICAgICAgICogVGhlIFVuaWZpZWQgQWRkcmVzcyB0aGUgb3V0cHV0IHdhcyBhZGRyZXNzZWQgdG8g4oCUIHRoZSBvcmlnaW5hbCBtdWx0aS1yZWNlaXZlciBVQSB0aGVcbiAgICAgICAqIGNsaWVudCBwYXNzZWQgd2hlbiB0aGUgUFNCVCBzdG9yZXMgb25lIHZlcmJhdGltLCBvdGhlcndpc2UgYSByZS1lbmNvZGVkIHNpbmdsZS1yZWNlaXZlclxuICAgICAgICogT3JjaGFyZCBVQS5cbiAgICAgICAqL1xuICAgICAgdW5pZmllZEFkZHJlc3M6IHN0cmluZztcbiAgICB9XG4gIHwge1xuICAgICAga2luZDogJ3pjYXNoVW5pZmllZFRyYW5zcGFyZW50JztcbiAgICAgIC8qKiBUaGUgb3JpZ2luYWwgVW5pZmllZCBBZGRyZXNzIHRoZSB0cmFuc3BhcmVudCByZWNlaXZlciB3YXMgcmVzb2x2ZWQgZnJvbS4gKi9cbiAgICAgIHVuaWZpZWRBZGRyZXNzOiBzdHJpbmc7XG4gICAgfVxuICB8IHsga2luZDogJ3RyYW5zcGFyZW50JyB9O1xuXG4vKiogQSByZWNpcGllbnQgcmVzb2x2ZWQgZnJvbSBhIGRlY29kZWQgWmNhc2ggUFNCVCdzIGV4dGVybmFsIG91dHB1dHMuICovXG5leHBvcnQgaW50ZXJmYWNlIFBzYnRSZWNpcGllbnQge1xuICAvKiogQW1vdW50IGluIHNhdG9zaGlzLiAqL1xuICBhbW91bnQ6IGJpZ2ludDtcbiAgLyoqXG4gICAqIFRoZSByZWNpcGllbnQgYWRkcmVzcy4gRm9yIGEgc2hpZWxkZWQgb3V0cHV0IHRoaXMgaXMgdGhlIFVuaWZpZWQgQWRkcmVzcyB0aGUgb3V0cHV0IHdhc1xuICAgKiBhZGRyZXNzZWQgdG8g4oCUIHRoZSBvcmlnaW5hbCBtdWx0aS1yZWNlaXZlciBVQSB3aGVuIHRoZSBQU0JUIHN0b3JlcyBvbmUgdmVyYmF0aW0sIG90aGVyd2lzZSBhXG4gICAqIHJlLWVuY29kZWQgc2luZ2xlLXJlY2VpdmVyIE9yY2hhcmQgVUEuIEZvciBhIHRyYW5zcGFyZW50IG91dHB1dCBpdCBpcyB0aGUgb3JpZ2luYWwgVW5pZmllZFxuICAgKiBBZGRyZXNzIHdoZW4gb25lIHdhcyBzdG9yZWQsIGVsc2UgdGhlIGRlY29kZWQgdHJhbnNwYXJlbnQgYWRkcmVzcy5cbiAgICovXG4gIGFkZHJlc3M6IHN0cmluZztcbiAgLyoqXG4gICAqIFJhdyByZWNlaXZlciBieXRlczogdGhlIDQzLWJ5dGUgT3JjaGFyZC9Jcm9ud29vZCByZWNlaXZlciBmb3IgYSBzaGllbGRlZCBvdXRwdXQsIHRoZVxuICAgKiBzY3JpcHRQdWJLZXkgZm9yIGEgdHJhbnNwYXJlbnQgb25lLlxuICAgKi9cbiAgc2NyaXB0OiBVaW50OEFycmF5O1xuICAvKipcbiAgICogVGhlIG9yaWdpbmFsIFVuaWZpZWQgQWRkcmVzcyB0aGUgY2xpZW50IHN1cHBsaWVkIGZvciB0aGlzIHJlY2lwaWVudCwgd2hlbiB0aGUgUFNCVCBzdG9yZXNcbiAgICogb25lOiB0aGUgdjYgKElyb253b29kKSBQQ1pUIGZvciBhIHNoaWVsZGVkIG91dHB1dCwgdGhlIHRyYW5zcGFyZW50LW91dHB1dCBwcm9wcmlldGFyeVxuICAgKiBrZXktdmFsdWUgbWFwIGZvciBhIHY0IHRyYW5zcGFyZW50IG91dHB1dC4gYHVuZGVmaW5lZGAgd2hlbiB0aGUgcmVjaXBpZW50IHdhcyBidWlsdCBmcm9tIGFcbiAgICogcGxhaW4gYWRkcmVzcy5cbiAgICovXG4gIHVuaWZpZWRBZGRyZXNzPzogc3RyaW5nO1xuICBkZXN0aW5hdGlvbjogUHNidFJlY2lwaWVudERlc3RpbmF0aW9uO1xufVxuXG4vKipcbiAqIFJlc29sdmUgdGhlIHJlY2lwaWVudCBsaXN0IG9mIGEgZGVjb2RlZCBaY2FzaCBQU0JUICh2NCBTYXBsaW5nLXNoYXBlZCBvciB2NiBJcm9ud29vZCkuXG4gKlxuICogTWlycm9ycyB0aGUgcmVjaXBpZW50IHJlc29sdXRpb24gb2Ygd2FsbGV0LXBsYXRmb3JtJ3MgdXR4by1jb3JlIGBidWlsZFRyYW5zYWN0aW9uYCBpbiB0aGVcbiAqIGRlY29kZSBkaXJlY3Rpb246IGV2ZXJ5IG5vbi13YWxsZXQgb3V0cHV0IHdpdGggYSByZXNvbHZhYmxlIGFkZHJlc3MgaXMgYSByZWNpcGllbnQuIEFcbiAqIHNoaWVsZGVkIG91dHB1dCBwYXJzZXMgd2l0aCBgaXNTaGllbGRlZDogdHJ1ZWAsIGl0cyBgc2NyaXB0YCBiZWluZyB0aGUgcmF3IDQzLWJ5dGUgcmVjZWl2ZXI7XG4gKiB3aGVuIHRoZSBidWlsZCBzdG9yZWQgdGhlIGNsaWVudCdzIG9yaWdpbmFsIFVuaWZpZWQgQWRkcmVzcyAodGhlIHY2IFBDWlQgZm9yIHNoaWVsZGVkXG4gKiBvdXRwdXRzLCB0aGUgdHJhbnNwYXJlbnQtb3V0cHV0IHByb3ByaWV0YXJ5IGtleS12YWx1ZSBtYXAgZm9yIHY0KSwgYm90aCB0aGUgcGFyc2VkIGFkZHJlc3NcbiAqIGFuZCBgdW5pZmllZEFkZHJlc3NgIHJlcG9ydCBpdCB2ZXJiYXRpbS4gT3BhcXVlIG91dHB1dHMgd2l0aCBubyBhZGRyZXNzIChlLmcuIE9QX1JFVFVSTikgYXJlXG4gKiBza2lwcGVkLCBhcyB0aGV5IGNhcnJ5IG5vIHJlY2lwaWVudC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVQc2J0UmVjaXBpZW50cyhcbiAgcHNidDogZml4ZWRTY3JpcHRXYWxsZXQuWmNhc2hCaXRHb1BzYnQsXG4gIHdhbGxldEtleXM6IGZpeGVkU2NyaXB0V2FsbGV0LlJvb3RXYWxsZXRLZXlzXG4pOiBQc2J0UmVjaXBpZW50W10ge1xuICBjb25zdCBwYXJzZWQgPSBwc2J0LnBhcnNlVHJhbnNhY3Rpb25XaXRoV2FsbGV0S2V5cyh3YWxsZXRLZXlzLCB7XG4gICAgcmVwbGF5UHJvdGVjdGlvbjogeyBwdWJsaWNLZXlzOiBnZXRSZXBsYXlQcm90ZWN0aW9uUHVia2V5cygnemVjJykgfSxcbiAgfSk7XG5cbiAgY29uc3QgcmVjaXBpZW50czogUHNidFJlY2lwaWVudFtdID0gW107XG4gIHBhcnNlZC5vdXRwdXRzLmZvckVhY2goKG91dHB1dCwgaSkgPT4ge1xuICAgIC8vIFdhbGxldC1vd25lZCAoY2hhbmdlKSBvdXRwdXRzLlxuICAgIGlmIChvdXRwdXQuc2NyaXB0SWQgIT09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gT3BhcXVlIG91dHB1dHMgKGUuZy4gT1BfUkVUVVJOKSBjYXJyeSBubyByZWNpcGllbnQgYWRkcmVzcy5cbiAgICBpZiAob3V0cHV0LmFkZHJlc3MgPT09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gVGhlIG9yaWdpbmFsIGNsaWVudC1wYXNzZWQgVW5pZmllZCBBZGRyZXNzLCBzdG9yZWQgdmVyYmF0aW0gaW4gdGhlIFBTQlQncyBrZXktdmFsdWVcbiAgICAvLyBwYWlyczogdGhlIG9yY2hhcmQgUENaVCBmb3IgYSBzaGllbGRlZCBvdXRwdXQgKHBhcnNlZCBgYWRkcmVzc2AgcmVwb3J0cyBpdCBpbiBmdWxsKSwgdGhlXG4gICAgLy8gdHJhbnNwYXJlbnQtb3V0cHV0IHByb3ByaWV0YXJ5IG1hcCBmb3IgYSB2NCB0cmFuc3BhcmVudCBvdXRwdXQuXG4gICAgY29uc3QgdW5pZmllZEFkZHJlc3MgPSBvdXRwdXQuaXNTaGllbGRlZCA/IG91dHB1dC5hZGRyZXNzIDogcHNidC50cmFuc3BhcmVudE91dHB1dFVuaWZpZWRBZGRyZXNzKGkpID8/IHVuZGVmaW5lZDtcbiAgICByZWNpcGllbnRzLnB1c2goe1xuICAgICAgYW1vdW50OiBvdXRwdXQudmFsdWUsXG4gICAgICBhZGRyZXNzOiBvdXRwdXQuYWRkcmVzcyxcbiAgICAgIHNjcmlwdDogb3V0cHV0LnNjcmlwdCxcbiAgICAgIHVuaWZpZWRBZGRyZXNzLFxuICAgICAgZGVzdGluYXRpb246IG91dHB1dC5pc1NoaWVsZGVkXG4gICAgICAgID8geyBraW5kOiAnemNhc2hTaGllbGRlZCcsIHVuaWZpZWRBZGRyZXNzOiBvdXRwdXQuYWRkcmVzcyB9XG4gICAgICAgIDogdW5pZmllZEFkZHJlc3NcbiAgICAgICAgPyB7IGtpbmQ6ICd6Y2FzaFVuaWZpZWRUcmFuc3BhcmVudCcsIHVuaWZpZWRBZGRyZXNzIH1cbiAgICAgICAgOiB7IGtpbmQ6ICd0cmFuc3BhcmVudCcgfSxcbiAgICB9KTtcbiAgfSk7XG4gIHJldHVybiByZWNpcGllbnRzO1xufVxuXG4vKipcbiAqIEluZmVyIHRoZSBVbmlmaWVkLUFkZHJlc3MgcmVjaXBpZW50IHByZWZlcmVuY2UgZm9yIGEgWmNhc2ggdHJhbnNhY3Rpb24gd2hlbiB0aGUgY2FsbGVyIGRpZFxuICogbm90IHBhc3Mgb25lIOKAlCB0aGUgY291bnRlcnBhcnQgb2Ygd2FsbGV0LXBsYXRmb3JtJ3MgdXR4by1jb3JlIGBidWlsZFRyYW5zYWN0aW9uYFxuICogYGNsYXNzaWZ5UmVjaXBpZW50U2hpZWxkZWRuZXNzYC5cbiAqXG4gKiBBIHJlY2lwaWVudCB0aGF0IHJlc29sdmVzIHRvIGEgdHJhbnNwYXJlbnQgb3V0cHV0IOKAlCBhbiBvcmRpbmFyeSB0cmFuc3BhcmVudCBhZGRyZXNzLCBvciBhXG4gKiBVbmlmaWVkIEFkZHJlc3MgY2FycnlpbmcgYSB0cmFuc3BhcmVudCByZWNlaXZlciDigJQgaXMgY2xhc3NpZmllZCBgJ3RyYW5zcGFyZW50J2A7IGEgVW5pZmllZFxuICogQWRkcmVzcyBjYXJyeWluZyBvbmx5IGFuIE9yY2hhcmQvSXJvbndvb2QgcmVjZWl2ZXIgaXMgY2xhc3NpZmllZCBgJ3NoaWVsZGVkJ2AuIEEgbWl4IG9mXG4gKiBzaGllbGRlZCBhbmQgdHJhbnNwYXJlbnQgcmVjaXBpZW50cyBpcyByZWplY3RlZC4gQW4gYWRkcmVzcyB0aGF0IGlzIG5laXRoZXIgYSB0cmFuc3BhcmVudFxuICogYWRkcmVzcyBub3IgYSBVbmlmaWVkIEFkZHJlc3MgcHJvcGFnYXRlcyB0aGUgVW5pZmllZC1BZGRyZXNzIHBhcnNlIGVycm9yIOKAlCBpdCBpcyBub3RcbiAqIHNpbGVudGx5IGRlZmF1bHRlZCB0byBgJ3RyYW5zcGFyZW50J2AuXG4gKlxuICogQHJldHVybnMgYCdzaGllbGRlZCdgIHdoZW4gZXZlcnkgcmVjaXBpZW50IHJlc29sdmVzIHNoaWVsZGVkLCBgdW5kZWZpbmVkYCB3aGVuIGV2ZXJ5XG4gKiAgIHJlY2lwaWVudCByZXNvbHZlcyB0cmFuc3BhcmVudCAodGhlIGJ1aWxkJ3MgZGVmYXVsdCkuIFRoZSBgJ3RyYW5zcGFyZW50J2AgYXJtIG9mIHRoZVxuICogICByZXR1cm4gdHlwZSBleGlzdHMgc28gY2FsbGVycyBjYW4gcGFzcyB0aGUgZXhwbGljaXQgcHJlZmVyZW5jZSB0aHJvdWdoIHVuY2hhbmdlZDsgdGhpc1xuICogICBmdW5jdGlvbiBpdHNlbGYgbmV2ZXIgcmV0dXJucyBgJ3RyYW5zcGFyZW50J2AuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRVbmlmaWVkUmVjaXBpZW50UHJlZmVyZW5jZShcbiAgbmFtZTogWmNhc2hDb2luTmFtZSxcbiAgcmVjaXBpZW50czogeyBhZGRyZXNzOiBzdHJpbmcgfCB1bmRlZmluZWQgfVtdXG4pOiBVbmlmaWVkUmVjaXBpZW50UHJlZmVyZW5jZSB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHNoaWVsZGVkbmVzcyA9IHJlY2lwaWVudHMubWFwKChyZWNpcGllbnQpID0+IHtcbiAgICBpZiAocmVjaXBpZW50LmFkZHJlc3MgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gUmF3IHNjcmlwdCBpbmhlcmVudGx5IHRyYW5zcGFyZW50LlxuICAgICAgcmV0dXJuICd0cmFuc3BhcmVudCcgYXMgY29uc3Q7XG4gICAgfVxuICAgIC8vIE9yZGluYXJ5IHRyYW5zcGFyZW50IGFkZHJlc3MsIG9yIGEgVW5pZmllZCBBZGRyZXNzIGNhcnJ5aW5nIGEgdHJhbnNwYXJlbnQgcmVjZWl2ZXI6XG4gICAgLy8gcmVzb2x2ZXMgdHJhbnNwYXJlbnRseSBlaXRoZXIgd2F5ICh0aGUgYnVpbGQncyBkZWZhdWx0IHdoZW4gbm8gcHJlZmVyZW5jZSBpcyBnaXZlbikuXG4gICAgaWYgKHpjYXNoQWRkcmVzcy5oYXNUcmFuc3BhcmVudFJlY2VpdmVyKHJlY2lwaWVudC5hZGRyZXNzLCBuYW1lKSkge1xuICAgICAgcmV0dXJuICd0cmFuc3BhcmVudCcgYXMgY29uc3Q7XG4gICAgfVxuICAgIC8vIEEgc2hpZWxkZWQgKE9yY2hhcmQvSXJvbndvb2Qtb25seSkgVW5pZmllZCBBZGRyZXNzIGlzIHRoZSBvbmx5IHJlbWFpbmluZyByZXNvbHZhYmxlXG4gICAgLy8gZm9ybS4gQW4gYWRkcmVzcyB0aGF0IGlzIG5vbmUgb2YgdGhlIGFib3ZlIHByb3BhZ2F0ZXMgdGhlIHBhcnNlIGVycm9yIGluc3RlYWQgb2ZcbiAgICAvLyBhc3N1bWluZyBhIGRlZmF1bHQuXG4gICAgY29uc3QgdW5pZmllZCA9IGZpeGVkU2NyaXB0V2FsbGV0LlpjYXNoVW5pZmllZEFkZHJlc3MucGFyc2UocmVjaXBpZW50LmFkZHJlc3MsIG5hbWUpO1xuICAgIGlmICh1bmlmaWVkLmhhc09yY2hhcmRSZWNlaXZlcikge1xuICAgICAgcmV0dXJuICdzaGllbGRlZCcgYXMgY29uc3Q7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihgYWRkcmVzcyAke3JlY2lwaWVudC5hZGRyZXNzfSBjYXJyaWVzIG5vIHRyYW5zcGFyZW50IG9yIE9yY2hhcmQgcmVjZWl2ZXJgKTtcbiAgfSk7XG4gIGNvbnN0IGhhc1NoaWVsZGVkID0gc2hpZWxkZWRuZXNzLmluY2x1ZGVzKCdzaGllbGRlZCcpO1xuICBjb25zdCBoYXNUcmFuc3BhcmVudCA9IHNoaWVsZGVkbmVzcy5pbmNsdWRlcygndHJhbnNwYXJlbnQnKTtcbiAgaWYgKGhhc1NoaWVsZGVkICYmIGhhc1RyYW5zcGFyZW50KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNaXhlZCBzaGllbGRlZCBhbmQgdHJhbnNwYXJlbnQgcmVjaXBpZW50cyBhcmUgbm90IHN1cHBvcnRlZCcpO1xuICB9XG4gIHJldHVybiBoYXNTaGllbGRlZCA/ICdzaGllbGRlZCcgOiB1bmRlZmluZWQ7XG59XG4iXX0=
@@ -0,0 +1,3 @@
1
+ /** A Zcash coin name — the only UTXO coins with shielded (Orchard/Ironwood) support. */
2
+ export type ZcashCoinName = 'zec' | 'tzec';
3
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/impl/zec/types.ts"],"names":[],"mappings":"AAAA,wFAAwF;AACxF,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,MAAM,CAAC"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvaW1wbC96ZWMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8qKiBBIFpjYXNoIGNvaW4gbmFtZSDigJQgdGhlIG9ubHkgVVRYTyBjb2lucyB3aXRoIHNoaWVsZGVkIChPcmNoYXJkL0lyb253b29kKSBzdXBwb3J0LiAqL1xuZXhwb3J0IHR5cGUgWmNhc2hDb2luTmFtZSA9ICd6ZWMnIHwgJ3R6ZWMnO1xuIl19
@@ -1,12 +1,25 @@
1
1
  /**
2
2
  * @prettier
3
3
  */
4
- import { BitGoBase } from '@bitgo/sdk-core';
4
+ import { BitGoBase, MPCAlgorithm } from '@bitgo/sdk-core';
5
5
  import { AbstractUtxoCoin } from '../../abstractUtxoCoin';
6
6
  import { UtxoCoinName } from '../../names';
7
+ import { ZecAddressCodec } from './address';
7
8
  export declare class Zec extends AbstractUtxoCoin {
8
9
  readonly name: UtxoCoinName;
9
10
  constructor(bitgo: BitGoBase);
11
+ /**
12
+ * ZEC shielded (Orchard/Ironwood) custodial wallets use RedPallas threshold keys.
13
+ * Transparent (secp256k1 multisig) flows are unaffected: MPCAlgorithm is only
14
+ * consulted on the TSS custodial wallet-creation path.
15
+ * @inheritdoc
16
+ */
17
+ getMPCAlgorithm(): MPCAlgorithm;
10
18
  static createInstance(bitgo: BitGoBase): Zec;
19
+ get addressCodec(): ZecAddressCodec;
20
+ isValidAddress(address: string, param?: {
21
+ anyFormat?: boolean;
22
+ allowLightning?: boolean;
23
+ } | boolean): boolean;
11
24
  }
12
25
  //# sourceMappingURL=zec.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"zec.d.ts","sourceRoot":"","sources":["../../../../../src/impl/zec/zec.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,qBAAa,GAAI,SAAQ,gBAAgB;IACvC,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAS;gBAExB,KAAK,EAAE,SAAS;IAI5B,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,SAAS,GAAG,GAAG;CAG7C"}
1
+ {"version":3,"file":"zec.d.ts","sourceRoot":"","sources":["../../../../../src/impl/zec/zec.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAE5C,qBAAa,GAAI,SAAQ,gBAAgB;IACvC,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAS;gBAExB,KAAK,EAAE,SAAS;IAI5B;;;;;OAKG;IACH,eAAe,IAAI,YAAY;IAI/B,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,SAAS,GAAG,GAAG;IAI5C,IAAa,YAAY,IAAI,eAAe,CAE3C;IAED,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,OAAO,CAAC;QAAC,cAAc,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,GAAG,OAAO;CAG9G"}
@@ -2,14 +2,30 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Zec = void 0;
4
4
  const abstractUtxoCoin_1 = require("../../abstractUtxoCoin");
5
+ const address_1 = require("./address");
5
6
  class Zec extends abstractUtxoCoin_1.AbstractUtxoCoin {
6
7
  constructor(bitgo) {
7
8
  super(bitgo);
8
9
  this.name = 'zec';
9
10
  }
11
+ /**
12
+ * ZEC shielded (Orchard/Ironwood) custodial wallets use RedPallas threshold keys.
13
+ * Transparent (secp256k1 multisig) flows are unaffected: MPCAlgorithm is only
14
+ * consulted on the TSS custodial wallet-creation path.
15
+ * @inheritdoc
16
+ */
17
+ getMPCAlgorithm() {
18
+ return 'redpallas';
19
+ }
10
20
  static createInstance(bitgo) {
11
21
  return new Zec(bitgo);
12
22
  }
23
+ get addressCodec() {
24
+ return new address_1.ZecAddressCodec(this.name, this.wasmName);
25
+ }
26
+ isValidAddress(address, param) {
27
+ return this.addressCodec.isValidAddress(address);
28
+ }
13
29
  }
14
30
  exports.Zec = Zec;
15
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2ltcGwvemVjL3plYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFLQSw2REFBMEQ7QUFHMUQsTUFBYSxHQUFJLFNBQVEsbUNBQWdCO0lBR3ZDLFlBQVksS0FBZ0I7UUFDMUIsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBSE4sU0FBSSxHQUFpQixLQUFLLENBQUM7SUFJcEMsQ0FBQztJQUVELE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBZ0I7UUFDcEMsT0FBTyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4QixDQUFDO0NBQ0Y7QUFWRCxrQkFVQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQHByZXR0aWVyXG4gKi9cbmltcG9ydCB7IEJpdEdvQmFzZSB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5cbmltcG9ydCB7IEFic3RyYWN0VXR4b0NvaW4gfSBmcm9tICcuLi8uLi9hYnN0cmFjdFV0eG9Db2luJztcbmltcG9ydCB7IFV0eG9Db2luTmFtZSB9IGZyb20gJy4uLy4uL25hbWVzJztcblxuZXhwb3J0IGNsYXNzIFplYyBleHRlbmRzIEFic3RyYWN0VXR4b0NvaW4ge1xuICByZWFkb25seSBuYW1lOiBVdHhvQ29pbk5hbWUgPSAnemVjJztcblxuICBjb25zdHJ1Y3RvcihiaXRnbzogQml0R29CYXNlKSB7XG4gICAgc3VwZXIoYml0Z28pO1xuICB9XG5cbiAgc3RhdGljIGNyZWF0ZUluc3RhbmNlKGJpdGdvOiBCaXRHb0Jhc2UpOiBaZWMge1xuICAgIHJldHVybiBuZXcgWmVjKGJpdGdvKTtcbiAgfVxufVxuIl19
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2ltcGwvemVjL3plYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFLQSw2REFBMEQ7QUFHMUQsdUNBQTRDO0FBRTVDLE1BQWEsR0FBSSxTQUFRLG1DQUFnQjtJQUd2QyxZQUFZLEtBQWdCO1FBQzFCLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUhOLFNBQUksR0FBaUIsS0FBSyxDQUFDO0lBSXBDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILGVBQWU7UUFDYixPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDO0lBRUQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFnQjtRQUNwQyxPQUFPLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxJQUFhLFlBQVk7UUFDdkIsT0FBTyxJQUFJLHlCQUFlLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVELGNBQWMsQ0FBQyxPQUFlLEVBQUUsS0FBbUU7UUFDakcsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNuRCxDQUFDO0NBQ0Y7QUE1QkQsa0JBNEJDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAcHJldHRpZXJcbiAqL1xuaW1wb3J0IHsgQml0R29CYXNlLCBNUENBbGdvcml0aG0gfSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuXG5pbXBvcnQgeyBBYnN0cmFjdFV0eG9Db2luIH0gZnJvbSAnLi4vLi4vYWJzdHJhY3RVdHhvQ29pbic7XG5pbXBvcnQgeyBVdHhvQ29pbk5hbWUgfSBmcm9tICcuLi8uLi9uYW1lcyc7XG5cbmltcG9ydCB7IFplY0FkZHJlc3NDb2RlYyB9IGZyb20gJy4vYWRkcmVzcyc7XG5cbmV4cG9ydCBjbGFzcyBaZWMgZXh0ZW5kcyBBYnN0cmFjdFV0eG9Db2luIHtcbiAgcmVhZG9ubHkgbmFtZTogVXR4b0NvaW5OYW1lID0gJ3plYyc7XG5cbiAgY29uc3RydWN0b3IoYml0Z286IEJpdEdvQmFzZSkge1xuICAgIHN1cGVyKGJpdGdvKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBaRUMgc2hpZWxkZWQgKE9yY2hhcmQvSXJvbndvb2QpIGN1c3RvZGlhbCB3YWxsZXRzIHVzZSBSZWRQYWxsYXMgdGhyZXNob2xkIGtleXMuXG4gICAqIFRyYW5zcGFyZW50IChzZWNwMjU2azEgbXVsdGlzaWcpIGZsb3dzIGFyZSB1bmFmZmVjdGVkOiBNUENBbGdvcml0aG0gaXMgb25seVxuICAgKiBjb25zdWx0ZWQgb24gdGhlIFRTUyBjdXN0b2RpYWwgd2FsbGV0LWNyZWF0aW9uIHBhdGguXG4gICAqIEBpbmhlcml0ZG9jXG4gICAqL1xuICBnZXRNUENBbGdvcml0aG0oKTogTVBDQWxnb3JpdGhtIHtcbiAgICByZXR1cm4gJ3JlZHBhbGxhcyc7XG4gIH1cblxuICBzdGF0aWMgY3JlYXRlSW5zdGFuY2UoYml0Z286IEJpdEdvQmFzZSk6IFplYyB7XG4gICAgcmV0dXJuIG5ldyBaZWMoYml0Z28pO1xuICB9XG5cbiAgb3ZlcnJpZGUgZ2V0IGFkZHJlc3NDb2RlYygpOiBaZWNBZGRyZXNzQ29kZWMge1xuICAgIHJldHVybiBuZXcgWmVjQWRkcmVzc0NvZGVjKHRoaXMubmFtZSwgdGhpcy53YXNtTmFtZSk7XG4gIH1cblxuICBpc1ZhbGlkQWRkcmVzcyhhZGRyZXNzOiBzdHJpbmcsIHBhcmFtPzogeyBhbnlGb3JtYXQ/OiBib29sZWFuOyBhbGxvd0xpZ2h0bmluZz86IGJvb2xlYW4gfSB8IGJvb2xlYW4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5hZGRyZXNzQ29kZWMuaXNWYWxpZEFkZHJlc3MoYWRkcmVzcyk7XG4gIH1cbn1cbiJdfQ==
@@ -1,8 +1,11 @@
1
+ import { type CoinName } from '@bitgo/wasm-utxo';
2
+ export type WasmUtxoCoinName = CoinName;
1
3
  export declare const utxoCoinsMainnet: readonly ["btc", "bch", "bcha", "bsv", "btg", "dash", "doge", "ltc", "pearl", "zec"];
2
- export declare const utxoCoinsTestnet: readonly ["tbtc", "tbtc4", "tbtcsig", "tbtcbgsig", "tbch", "tbcha", "tbsv", "tbtg", "tdash", "tdoge", "tltc", "tpearl", "tzec"];
4
+ export declare const utxoCoinsTestnet: readonly ["tbtc", "tbtc4", "tbtcsig", "tbtcbgsig", "tbtcstx", "tbtcstxprivate1", "tbch", "tbcha", "tbsv", "tbtg", "tdash", "tdoge", "tltc", "tpearl", "tzec"];
3
5
  export type UtxoCoinNameMainnet = (typeof utxoCoinsMainnet)[number];
4
- export type UtxoCoinNameTestnet = `t${UtxoCoinNameMainnet}` | 'tbtcsig' | 'tbtc4' | 'tbtcbgsig';
6
+ export type UtxoCoinNameTestnet = `t${UtxoCoinNameMainnet}` | 'tbtcsig' | 'tbtc4' | 'tbtcbgsig' | 'tbtcstx' | 'tbtcstxprivate1';
5
7
  export type UtxoCoinName = UtxoCoinNameMainnet | UtxoCoinNameTestnet;
8
+ export declare function toWasmUtxoCoinName(coinName: UtxoCoinName | WasmUtxoCoinName): WasmUtxoCoinName;
6
9
  export declare function isUtxoCoinNameMainnet(coinName: string): coinName is UtxoCoinNameMainnet;
7
10
  export declare function isUtxoCoinNameTestnet(coinName: string): coinName is UtxoCoinNameTestnet;
8
11
  export declare function isUtxoCoinName(coinName: string): coinName is UtxoCoinName;
@@ -1 +1 @@
1
- {"version":3,"file":"names.d.ts","sourceRoot":"","sources":["../../../src/names.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,gBAAgB,sFAAuF,CAAC;AACrH,eAAO,MAAM,gBAAgB,iIAcnB,CAAC;AAEX,MAAM,MAAM,mBAAmB,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC;AACpE,MAAM,MAAM,mBAAmB,GAAG,IAAI,mBAAmB,EAAE,GAAG,SAAS,GAAG,OAAO,GAAG,WAAW,CAAC;AAChG,MAAM,MAAM,YAAY,GAAG,mBAAmB,GAAG,mBAAmB,CAAC;AAErE,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,IAAI,mBAAmB,CAEvF;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,IAAI,mBAAmB,CAEvF;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,IAAI,YAAY,CAEzE;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,YAAY,GAAG,mBAAmB,CAY9E;AA2BD,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,YAAY,GAAG,MAAM,CAiBtE;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO,CAE7D;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO,CAE7D"}
1
+ {"version":3,"file":"names.d.ts","sourceRoot":"","sources":["../../../src/names.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE7D,MAAM,MAAM,gBAAgB,GAAG,QAAQ,CAAC;AAExC,eAAO,MAAM,gBAAgB,sFAAuF,CAAC;AACrH,eAAO,MAAM,gBAAgB,+JAgBnB,CAAC;AAEX,MAAM,MAAM,mBAAmB,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC;AACpE,MAAM,MAAM,mBAAmB,GAC3B,IAAI,mBAAmB,EAAE,GACzB,SAAS,GACT,OAAO,GACP,WAAW,GACX,SAAS,GACT,iBAAiB,CAAC;AACtB,MAAM,MAAM,YAAY,GAAG,mBAAmB,GAAG,mBAAmB,CAAC;AAErE,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,YAAY,GAAG,gBAAgB,GAAG,gBAAgB,CAK9F;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,IAAI,mBAAmB,CAEvF;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,IAAI,mBAAmB,CAEvF;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,IAAI,YAAY,CAEzE;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,YAAY,GAAG,mBAAmB,CAc9E;AA2BD,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,YAAY,GAAG,MAAM,CAwBtE;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO,CAE7D;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO,CAE7D"}
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.utxoCoinsTestnet = exports.utxoCoinsMainnet = void 0;
4
+ exports.toWasmUtxoCoinName = toWasmUtxoCoinName;
4
5
  exports.isUtxoCoinNameMainnet = isUtxoCoinNameMainnet;
5
6
  exports.isUtxoCoinNameTestnet = isUtxoCoinNameTestnet;
6
7
  exports.isUtxoCoinName = isUtxoCoinName;
@@ -8,12 +9,15 @@ exports.getMainnetCoinName = getMainnetCoinName;
8
9
  exports.getFullNameFromCoinName = getFullNameFromCoinName;
9
10
  exports.isTestnetCoin = isTestnetCoin;
10
11
  exports.isMainnetCoin = isMainnetCoin;
12
+ const wasm_utxo_1 = require("@bitgo/wasm-utxo");
11
13
  exports.utxoCoinsMainnet = ['btc', 'bch', 'bcha', 'bsv', 'btg', 'dash', 'doge', 'ltc', 'pearl', 'zec'];
12
14
  exports.utxoCoinsTestnet = [
13
15
  'tbtc',
14
16
  'tbtc4',
15
17
  'tbtcsig',
16
18
  'tbtcbgsig',
19
+ 'tbtcstx',
20
+ 'tbtcstxprivate1',
17
21
  'tbch',
18
22
  'tbcha',
19
23
  'tbsv',
@@ -24,6 +28,12 @@ exports.utxoCoinsTestnet = [
24
28
  'tpearl',
25
29
  'tzec',
26
30
  ];
31
+ function toWasmUtxoCoinName(coinName) {
32
+ if (!(0, wasm_utxo_1.isCoinName)(coinName)) {
33
+ throw new Error(`coin ${coinName} is not supported by wasm-utxo`);
34
+ }
35
+ return coinName;
36
+ }
27
37
  function isUtxoCoinNameMainnet(coinName) {
28
38
  return exports.utxoCoinsMainnet.includes(coinName);
29
39
  }
@@ -41,6 +51,8 @@ function getMainnetCoinName(coinName) {
41
51
  case 'tbtc4':
42
52
  case 'tbtcsig':
43
53
  case 'tbtcbgsig':
54
+ case 'tbtcstx':
55
+ case 'tbtcstxprivate1':
44
56
  return 'btc';
45
57
  default:
46
58
  return coinName.slice(1);
@@ -71,6 +83,9 @@ function getBaseNameFromMainnet(coinName) {
71
83
  }
72
84
  }
73
85
  function getFullNameFromCoinName(coinName) {
86
+ if (coinName === 'tbtcstxprivate1') {
87
+ return 'Stacks Bitcoin (Private-1 Regtest)';
88
+ }
74
89
  let prefix;
75
90
  switch (coinName) {
76
91
  case 'tbtc4':
@@ -82,6 +97,9 @@ function getFullNameFromCoinName(coinName) {
82
97
  case 'tbtcbgsig':
83
98
  prefix = 'BitGo Signet ';
84
99
  break;
100
+ case 'tbtcstx':
101
+ prefix = 'Stacks ';
102
+ break;
85
103
  default:
86
104
  prefix = isUtxoCoinNameTestnet(coinName) ? 'Testnet ' : '';
87
105
  }
@@ -93,4 +111,4 @@ function isTestnetCoin(coinName) {
93
111
  function isMainnetCoin(coinName) {
94
112
  return isUtxoCoinNameMainnet(coinName);
95
113
  }
96
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmFtZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbmFtZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBcUJBLHNEQUVDO0FBRUQsc0RBRUM7QUFFRCx3Q0FFQztBQUVELGdEQVlDO0FBMkJELDBEQWlCQztBQUVELHNDQUVDO0FBRUQsc0NBRUM7QUFqR1ksUUFBQSxnQkFBZ0IsR0FBRyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBVSxDQUFDO0FBQ3hHLFFBQUEsZ0JBQWdCLEdBQUc7SUFDOUIsTUFBTTtJQUNOLE9BQU87SUFDUCxTQUFTO0lBQ1QsV0FBVztJQUNYLE1BQU07SUFDTixPQUFPO0lBQ1AsTUFBTTtJQUNOLE1BQU07SUFDTixPQUFPO0lBQ1AsT0FBTztJQUNQLE1BQU07SUFDTixRQUFRO0lBQ1IsTUFBTTtDQUNFLENBQUM7QUFNWCxTQUFnQixxQkFBcUIsQ0FBQyxRQUFnQjtJQUNwRCxPQUFPLHdCQUFnQixDQUFDLFFBQVEsQ0FBQyxRQUErQixDQUFDLENBQUM7QUFDcEUsQ0FBQztBQUVELFNBQWdCLHFCQUFxQixDQUFDLFFBQWdCO0lBQ3BELE9BQU8sd0JBQWdCLENBQUMsUUFBUSxDQUFDLFFBQStCLENBQUMsQ0FBQztBQUNwRSxDQUFDO0FBRUQsU0FBZ0IsY0FBYyxDQUFDLFFBQWdCO0lBQzdDLE9BQU8scUJBQXFCLENBQUMsUUFBUSxDQUFDLElBQUkscUJBQXFCLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDNUUsQ0FBQztBQUVELFNBQWdCLGtCQUFrQixDQUFDLFFBQXNCO0lBQ3ZELElBQUkscUJBQXFCLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUNwQyxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBQ0QsUUFBUSxRQUFRLEVBQUUsQ0FBQztRQUNqQixLQUFLLE9BQU8sQ0FBQztRQUNiLEtBQUssU0FBUyxDQUFDO1FBQ2YsS0FBSyxXQUFXO1lBQ2QsT0FBTyxLQUFLLENBQUM7UUFDZjtZQUNFLE9BQU8sUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQXdCLENBQUM7SUFDcEQsQ0FBQztBQUNILENBQUM7QUFFRCxTQUFTLHNCQUFzQixDQUFDLFFBQTZCO0lBQzNELFFBQVEsUUFBUSxFQUFFLENBQUM7UUFDakIsS0FBSyxLQUFLO1lBQ1IsT0FBTyxTQUFTLENBQUM7UUFDbkIsS0FBSyxLQUFLO1lBQ1IsT0FBTyxjQUFjLENBQUM7UUFDeEIsS0FBSyxNQUFNO1lBQ1QsT0FBTyxhQUFhLENBQUM7UUFDdkIsS0FBSyxLQUFLO1lBQ1IsT0FBTyxjQUFjLENBQUM7UUFDeEIsS0FBSyxLQUFLO1lBQ1IsT0FBTyxZQUFZLENBQUM7UUFDdEIsS0FBSyxNQUFNO1lBQ1QsT0FBTyxNQUFNLENBQUM7UUFDaEIsS0FBSyxNQUFNO1lBQ1QsT0FBTyxVQUFVLENBQUM7UUFDcEIsS0FBSyxLQUFLO1lBQ1IsT0FBTyxVQUFVLENBQUM7UUFDcEIsS0FBSyxPQUFPO1lBQ1YsT0FBTyxPQUFPLENBQUM7UUFDakIsS0FBSyxLQUFLO1lBQ1IsT0FBTyxPQUFPLENBQUM7SUFDbkIsQ0FBQztBQUNILENBQUM7QUFFRCxTQUFnQix1QkFBdUIsQ0FBQyxRQUFzQjtJQUM1RCxJQUFJLE1BQWMsQ0FBQztJQUNuQixRQUFRLFFBQVEsRUFBRSxDQUFDO1FBQ2pCLEtBQUssT0FBTztZQUNWLE1BQU0sR0FBRyxXQUFXLENBQUM7WUFDckIsTUFBTTtRQUNSLEtBQUssU0FBUztZQUNaLE1BQU0sR0FBRyxnQkFBZ0IsQ0FBQztZQUMxQixNQUFNO1FBQ1IsS0FBSyxXQUFXO1lBQ2QsTUFBTSxHQUFHLGVBQWUsQ0FBQztZQUN6QixNQUFNO1FBQ1I7WUFDRSxNQUFNLEdBQUcscUJBQXFCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQy9ELENBQUM7SUFFRCxPQUFPLE1BQU0sR0FBRyxzQkFBc0IsQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0FBQ3ZFLENBQUM7QUFFRCxTQUFnQixhQUFhLENBQUMsUUFBc0I7SUFDbEQsT0FBTyxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUN6QyxDQUFDO0FBRUQsU0FBZ0IsYUFBYSxDQUFDLFFBQXNCO0lBQ2xELE9BQU8scUJBQXFCLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDekMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCB1dHhvQ29pbnNNYWlubmV0ID0gWydidGMnLCAnYmNoJywgJ2JjaGEnLCAnYnN2JywgJ2J0ZycsICdkYXNoJywgJ2RvZ2UnLCAnbHRjJywgJ3BlYXJsJywgJ3plYyddIGFzIGNvbnN0O1xuZXhwb3J0IGNvbnN0IHV0eG9Db2luc1Rlc3RuZXQgPSBbXG4gICd0YnRjJyxcbiAgJ3RidGM0JyxcbiAgJ3RidGNzaWcnLFxuICAndGJ0Y2Jnc2lnJyxcbiAgJ3RiY2gnLFxuICAndGJjaGEnLFxuICAndGJzdicsXG4gICd0YnRnJyxcbiAgJ3RkYXNoJyxcbiAgJ3Rkb2dlJyxcbiAgJ3RsdGMnLFxuICAndHBlYXJsJyxcbiAgJ3R6ZWMnLFxuXSBhcyBjb25zdDtcblxuZXhwb3J0IHR5cGUgVXR4b0NvaW5OYW1lTWFpbm5ldCA9ICh0eXBlb2YgdXR4b0NvaW5zTWFpbm5ldClbbnVtYmVyXTtcbmV4cG9ydCB0eXBlIFV0eG9Db2luTmFtZVRlc3RuZXQgPSBgdCR7VXR4b0NvaW5OYW1lTWFpbm5ldH1gIHwgJ3RidGNzaWcnIHwgJ3RidGM0JyB8ICd0YnRjYmdzaWcnO1xuZXhwb3J0IHR5cGUgVXR4b0NvaW5OYW1lID0gVXR4b0NvaW5OYW1lTWFpbm5ldCB8IFV0eG9Db2luTmFtZVRlc3RuZXQ7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1V0eG9Db2luTmFtZU1haW5uZXQoY29pbk5hbWU6IHN0cmluZyk6IGNvaW5OYW1lIGlzIFV0eG9Db2luTmFtZU1haW5uZXQge1xuICByZXR1cm4gdXR4b0NvaW5zTWFpbm5ldC5pbmNsdWRlcyhjb2luTmFtZSBhcyBVdHhvQ29pbk5hbWVNYWlubmV0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVXR4b0NvaW5OYW1lVGVzdG5ldChjb2luTmFtZTogc3RyaW5nKTogY29pbk5hbWUgaXMgVXR4b0NvaW5OYW1lVGVzdG5ldCB7XG4gIHJldHVybiB1dHhvQ29pbnNUZXN0bmV0LmluY2x1ZGVzKGNvaW5OYW1lIGFzIFV0eG9Db2luTmFtZVRlc3RuZXQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNVdHhvQ29pbk5hbWUoY29pbk5hbWU6IHN0cmluZyk6IGNvaW5OYW1lIGlzIFV0eG9Db2luTmFtZSB7XG4gIHJldHVybiBpc1V0eG9Db2luTmFtZU1haW5uZXQoY29pbk5hbWUpIHx8IGlzVXR4b0NvaW5OYW1lVGVzdG5ldChjb2luTmFtZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRNYWlubmV0Q29pbk5hbWUoY29pbk5hbWU6IFV0eG9Db2luTmFtZSk6IFV0eG9Db2luTmFtZU1haW5uZXQge1xuICBpZiAoaXNVdHhvQ29pbk5hbWVNYWlubmV0KGNvaW5OYW1lKSkge1xuICAgIHJldHVybiBjb2luTmFtZTtcbiAgfVxuICBzd2l0Y2ggKGNvaW5OYW1lKSB7XG4gICAgY2FzZSAndGJ0YzQnOlxuICAgIGNhc2UgJ3RidGNzaWcnOlxuICAgIGNhc2UgJ3RidGNiZ3NpZyc6XG4gICAgICByZXR1cm4gJ2J0Yyc7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBjb2luTmFtZS5zbGljZSgxKSBhcyBVdHhvQ29pbk5hbWVNYWlubmV0O1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldEJhc2VOYW1lRnJvbU1haW5uZXQoY29pbk5hbWU6IFV0eG9Db2luTmFtZU1haW5uZXQpOiBzdHJpbmcge1xuICBzd2l0Y2ggKGNvaW5OYW1lKSB7XG4gICAgY2FzZSAnYnRjJzpcbiAgICAgIHJldHVybiAnQml0Y29pbic7XG4gICAgY2FzZSAnYmNoJzpcbiAgICAgIHJldHVybiAnQml0Y29pbiBDYXNoJztcbiAgICBjYXNlICdiY2hhJzpcbiAgICAgIHJldHVybiAnQml0Y29pbiBBQkMnO1xuICAgIGNhc2UgJ2J0Zyc6XG4gICAgICByZXR1cm4gJ0JpdGNvaW4gR29sZCc7XG4gICAgY2FzZSAnYnN2JzpcbiAgICAgIHJldHVybiAnQml0Y29pbiBTVic7XG4gICAgY2FzZSAnZGFzaCc6XG4gICAgICByZXR1cm4gJ0Rhc2gnO1xuICAgIGNhc2UgJ2RvZ2UnOlxuICAgICAgcmV0dXJuICdEb2dlY29pbic7XG4gICAgY2FzZSAnbHRjJzpcbiAgICAgIHJldHVybiAnTGl0ZWNvaW4nO1xuICAgIGNhc2UgJ3BlYXJsJzpcbiAgICAgIHJldHVybiAnUGVhcmwnO1xuICAgIGNhc2UgJ3plYyc6XG4gICAgICByZXR1cm4gJ1pDYXNoJztcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RnVsbE5hbWVGcm9tQ29pbk5hbWUoY29pbk5hbWU6IFV0eG9Db2luTmFtZSk6IHN0cmluZyB7XG4gIGxldCBwcmVmaXg6IHN0cmluZztcbiAgc3dpdGNoIChjb2luTmFtZSkge1xuICAgIGNhc2UgJ3RidGM0JzpcbiAgICAgIHByZWZpeCA9ICdUZXN0bmV0NCAnO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAndGJ0Y3NpZyc6XG4gICAgICBwcmVmaXggPSAnUHVibGljIFNpZ25ldCAnO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAndGJ0Y2Jnc2lnJzpcbiAgICAgIHByZWZpeCA9ICdCaXRHbyBTaWduZXQgJztcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBwcmVmaXggPSBpc1V0eG9Db2luTmFtZVRlc3RuZXQoY29pbk5hbWUpID8gJ1Rlc3RuZXQgJyA6ICcnO1xuICB9XG5cbiAgcmV0dXJuIHByZWZpeCArIGdldEJhc2VOYW1lRnJvbU1haW5uZXQoZ2V0TWFpbm5ldENvaW5OYW1lKGNvaW5OYW1lKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1Rlc3RuZXRDb2luKGNvaW5OYW1lOiBVdHhvQ29pbk5hbWUpOiBib29sZWFuIHtcbiAgcmV0dXJuIGlzVXR4b0NvaW5OYW1lVGVzdG5ldChjb2luTmFtZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc01haW5uZXRDb2luKGNvaW5OYW1lOiBVdHhvQ29pbk5hbWUpOiBib29sZWFuIHtcbiAgcmV0dXJuIGlzVXR4b0NvaW5OYW1lTWFpbm5ldChjb2luTmFtZSk7XG59XG4iXX0=
114
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmFtZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbmFtZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBaUNBLGdEQUtDO0FBRUQsc0RBRUM7QUFFRCxzREFFQztBQUVELHdDQUVDO0FBRUQsZ0RBY0M7QUEyQkQsMERBd0JDO0FBRUQsc0NBRUM7QUFFRCxzQ0FFQztBQTdIRCxnREFBNkQ7QUFJaEQsUUFBQSxnQkFBZ0IsR0FBRyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBVSxDQUFDO0FBQ3hHLFFBQUEsZ0JBQWdCLEdBQUc7SUFDOUIsTUFBTTtJQUNOLE9BQU87SUFDUCxTQUFTO0lBQ1QsV0FBVztJQUNYLFNBQVM7SUFDVCxpQkFBaUI7SUFDakIsTUFBTTtJQUNOLE9BQU87SUFDUCxNQUFNO0lBQ04sTUFBTTtJQUNOLE9BQU87SUFDUCxPQUFPO0lBQ1AsTUFBTTtJQUNOLFFBQVE7SUFDUixNQUFNO0NBQ0UsQ0FBQztBQVlYLFNBQWdCLGtCQUFrQixDQUFDLFFBQXlDO0lBQzFFLElBQUksQ0FBQyxJQUFBLHNCQUFVLEVBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUMxQixNQUFNLElBQUksS0FBSyxDQUFDLFFBQVEsUUFBUSxnQ0FBZ0MsQ0FBQyxDQUFDO0lBQ3BFLENBQUM7SUFDRCxPQUFPLFFBQVEsQ0FBQztBQUNsQixDQUFDO0FBRUQsU0FBZ0IscUJBQXFCLENBQUMsUUFBZ0I7SUFDcEQsT0FBTyx3QkFBZ0IsQ0FBQyxRQUFRLENBQUMsUUFBK0IsQ0FBQyxDQUFDO0FBQ3BFLENBQUM7QUFFRCxTQUFnQixxQkFBcUIsQ0FBQyxRQUFnQjtJQUNwRCxPQUFPLHdCQUFnQixDQUFDLFFBQVEsQ0FBQyxRQUErQixDQUFDLENBQUM7QUFDcEUsQ0FBQztBQUVELFNBQWdCLGNBQWMsQ0FBQyxRQUFnQjtJQUM3QyxPQUFPLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxJQUFJLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQzVFLENBQUM7QUFFRCxTQUFnQixrQkFBa0IsQ0FBQyxRQUFzQjtJQUN2RCxJQUFJLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7UUFDcEMsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUNELFFBQVEsUUFBUSxFQUFFLENBQUM7UUFDakIsS0FBSyxPQUFPLENBQUM7UUFDYixLQUFLLFNBQVMsQ0FBQztRQUNmLEtBQUssV0FBVyxDQUFDO1FBQ2pCLEtBQUssU0FBUyxDQUFDO1FBQ2YsS0FBSyxpQkFBaUI7WUFDcEIsT0FBTyxLQUFLLENBQUM7UUFDZjtZQUNFLE9BQU8sUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQXdCLENBQUM7SUFDcEQsQ0FBQztBQUNILENBQUM7QUFFRCxTQUFTLHNCQUFzQixDQUFDLFFBQTZCO0lBQzNELFFBQVEsUUFBUSxFQUFFLENBQUM7UUFDakIsS0FBSyxLQUFLO1lBQ1IsT0FBTyxTQUFTLENBQUM7UUFDbkIsS0FBSyxLQUFLO1lBQ1IsT0FBTyxjQUFjLENBQUM7UUFDeEIsS0FBSyxNQUFNO1lBQ1QsT0FBTyxhQUFhLENBQUM7UUFDdkIsS0FBSyxLQUFLO1lBQ1IsT0FBTyxjQUFjLENBQUM7UUFDeEIsS0FBSyxLQUFLO1lBQ1IsT0FBTyxZQUFZLENBQUM7UUFDdEIsS0FBSyxNQUFNO1lBQ1QsT0FBTyxNQUFNLENBQUM7UUFDaEIsS0FBSyxNQUFNO1lBQ1QsT0FBTyxVQUFVLENBQUM7UUFDcEIsS0FBSyxLQUFLO1lBQ1IsT0FBTyxVQUFVLENBQUM7UUFDcEIsS0FBSyxPQUFPO1lBQ1YsT0FBTyxPQUFPLENBQUM7UUFDakIsS0FBSyxLQUFLO1lBQ1IsT0FBTyxPQUFPLENBQUM7SUFDbkIsQ0FBQztBQUNILENBQUM7QUFFRCxTQUFnQix1QkFBdUIsQ0FBQyxRQUFzQjtJQUM1RCxJQUFJLFFBQVEsS0FBSyxpQkFBaUIsRUFBRSxDQUFDO1FBQ25DLE9BQU8sb0NBQW9DLENBQUM7SUFDOUMsQ0FBQztJQUVELElBQUksTUFBYyxDQUFDO0lBQ25CLFFBQVEsUUFBUSxFQUFFLENBQUM7UUFDakIsS0FBSyxPQUFPO1lBQ1YsTUFBTSxHQUFHLFdBQVcsQ0FBQztZQUNyQixNQUFNO1FBQ1IsS0FBSyxTQUFTO1lBQ1osTUFBTSxHQUFHLGdCQUFnQixDQUFDO1lBQzFCLE1BQU07UUFDUixLQUFLLFdBQVc7WUFDZCxNQUFNLEdBQUcsZUFBZSxDQUFDO1lBQ3pCLE1BQU07UUFDUixLQUFLLFNBQVM7WUFDWixNQUFNLEdBQUcsU0FBUyxDQUFDO1lBQ25CLE1BQU07UUFDUjtZQUNFLE1BQU0sR0FBRyxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDL0QsQ0FBQztJQUVELE9BQU8sTUFBTSxHQUFHLHNCQUFzQixDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7QUFDdkUsQ0FBQztBQUVELFNBQWdCLGFBQWEsQ0FBQyxRQUFzQjtJQUNsRCxPQUFPLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3pDLENBQUM7QUFFRCxTQUFnQixhQUFhLENBQUMsUUFBc0I7SUFDbEQsT0FBTyxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUN6QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNDb2luTmFtZSwgdHlwZSBDb2luTmFtZSB9IGZyb20gJ0BiaXRnby93YXNtLXV0eG8nO1xuXG5leHBvcnQgdHlwZSBXYXNtVXR4b0NvaW5OYW1lID0gQ29pbk5hbWU7XG5cbmV4cG9ydCBjb25zdCB1dHhvQ29pbnNNYWlubmV0ID0gWydidGMnLCAnYmNoJywgJ2JjaGEnLCAnYnN2JywgJ2J0ZycsICdkYXNoJywgJ2RvZ2UnLCAnbHRjJywgJ3BlYXJsJywgJ3plYyddIGFzIGNvbnN0O1xuZXhwb3J0IGNvbnN0IHV0eG9Db2luc1Rlc3RuZXQgPSBbXG4gICd0YnRjJyxcbiAgJ3RidGM0JyxcbiAgJ3RidGNzaWcnLFxuICAndGJ0Y2Jnc2lnJyxcbiAgJ3RidGNzdHgnLFxuICAndGJ0Y3N0eHByaXZhdGUxJyxcbiAgJ3RiY2gnLFxuICAndGJjaGEnLFxuICAndGJzdicsXG4gICd0YnRnJyxcbiAgJ3RkYXNoJyxcbiAgJ3Rkb2dlJyxcbiAgJ3RsdGMnLFxuICAndHBlYXJsJyxcbiAgJ3R6ZWMnLFxuXSBhcyBjb25zdDtcblxuZXhwb3J0IHR5cGUgVXR4b0NvaW5OYW1lTWFpbm5ldCA9ICh0eXBlb2YgdXR4b0NvaW5zTWFpbm5ldClbbnVtYmVyXTtcbmV4cG9ydCB0eXBlIFV0eG9Db2luTmFtZVRlc3RuZXQgPVxuICB8IGB0JHtVdHhvQ29pbk5hbWVNYWlubmV0fWBcbiAgfCAndGJ0Y3NpZydcbiAgfCAndGJ0YzQnXG4gIHwgJ3RidGNiZ3NpZydcbiAgfCAndGJ0Y3N0eCdcbiAgfCAndGJ0Y3N0eHByaXZhdGUxJztcbmV4cG9ydCB0eXBlIFV0eG9Db2luTmFtZSA9IFV0eG9Db2luTmFtZU1haW5uZXQgfCBVdHhvQ29pbk5hbWVUZXN0bmV0O1xuXG5leHBvcnQgZnVuY3Rpb24gdG9XYXNtVXR4b0NvaW5OYW1lKGNvaW5OYW1lOiBVdHhvQ29pbk5hbWUgfCBXYXNtVXR4b0NvaW5OYW1lKTogV2FzbVV0eG9Db2luTmFtZSB7XG4gIGlmICghaXNDb2luTmFtZShjb2luTmFtZSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGNvaW4gJHtjb2luTmFtZX0gaXMgbm90IHN1cHBvcnRlZCBieSB3YXNtLXV0eG9gKTtcbiAgfVxuICByZXR1cm4gY29pbk5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1V0eG9Db2luTmFtZU1haW5uZXQoY29pbk5hbWU6IHN0cmluZyk6IGNvaW5OYW1lIGlzIFV0eG9Db2luTmFtZU1haW5uZXQge1xuICByZXR1cm4gdXR4b0NvaW5zTWFpbm5ldC5pbmNsdWRlcyhjb2luTmFtZSBhcyBVdHhvQ29pbk5hbWVNYWlubmV0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVXR4b0NvaW5OYW1lVGVzdG5ldChjb2luTmFtZTogc3RyaW5nKTogY29pbk5hbWUgaXMgVXR4b0NvaW5OYW1lVGVzdG5ldCB7XG4gIHJldHVybiB1dHhvQ29pbnNUZXN0bmV0LmluY2x1ZGVzKGNvaW5OYW1lIGFzIFV0eG9Db2luTmFtZVRlc3RuZXQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNVdHhvQ29pbk5hbWUoY29pbk5hbWU6IHN0cmluZyk6IGNvaW5OYW1lIGlzIFV0eG9Db2luTmFtZSB7XG4gIHJldHVybiBpc1V0eG9Db2luTmFtZU1haW5uZXQoY29pbk5hbWUpIHx8IGlzVXR4b0NvaW5OYW1lVGVzdG5ldChjb2luTmFtZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRNYWlubmV0Q29pbk5hbWUoY29pbk5hbWU6IFV0eG9Db2luTmFtZSk6IFV0eG9Db2luTmFtZU1haW5uZXQge1xuICBpZiAoaXNVdHhvQ29pbk5hbWVNYWlubmV0KGNvaW5OYW1lKSkge1xuICAgIHJldHVybiBjb2luTmFtZTtcbiAgfVxuICBzd2l0Y2ggKGNvaW5OYW1lKSB7XG4gICAgY2FzZSAndGJ0YzQnOlxuICAgIGNhc2UgJ3RidGNzaWcnOlxuICAgIGNhc2UgJ3RidGNiZ3NpZyc6XG4gICAgY2FzZSAndGJ0Y3N0eCc6XG4gICAgY2FzZSAndGJ0Y3N0eHByaXZhdGUxJzpcbiAgICAgIHJldHVybiAnYnRjJztcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGNvaW5OYW1lLnNsaWNlKDEpIGFzIFV0eG9Db2luTmFtZU1haW5uZXQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0QmFzZU5hbWVGcm9tTWFpbm5ldChjb2luTmFtZTogVXR4b0NvaW5OYW1lTWFpbm5ldCk6IHN0cmluZyB7XG4gIHN3aXRjaCAoY29pbk5hbWUpIHtcbiAgICBjYXNlICdidGMnOlxuICAgICAgcmV0dXJuICdCaXRjb2luJztcbiAgICBjYXNlICdiY2gnOlxuICAgICAgcmV0dXJuICdCaXRjb2luIENhc2gnO1xuICAgIGNhc2UgJ2JjaGEnOlxuICAgICAgcmV0dXJuICdCaXRjb2luIEFCQyc7XG4gICAgY2FzZSAnYnRnJzpcbiAgICAgIHJldHVybiAnQml0Y29pbiBHb2xkJztcbiAgICBjYXNlICdic3YnOlxuICAgICAgcmV0dXJuICdCaXRjb2luIFNWJztcbiAgICBjYXNlICdkYXNoJzpcbiAgICAgIHJldHVybiAnRGFzaCc7XG4gICAgY2FzZSAnZG9nZSc6XG4gICAgICByZXR1cm4gJ0RvZ2Vjb2luJztcbiAgICBjYXNlICdsdGMnOlxuICAgICAgcmV0dXJuICdMaXRlY29pbic7XG4gICAgY2FzZSAncGVhcmwnOlxuICAgICAgcmV0dXJuICdQZWFybCc7XG4gICAgY2FzZSAnemVjJzpcbiAgICAgIHJldHVybiAnWkNhc2gnO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGdWxsTmFtZUZyb21Db2luTmFtZShjb2luTmFtZTogVXR4b0NvaW5OYW1lKTogc3RyaW5nIHtcbiAgaWYgKGNvaW5OYW1lID09PSAndGJ0Y3N0eHByaXZhdGUxJykge1xuICAgIHJldHVybiAnU3RhY2tzIEJpdGNvaW4gKFByaXZhdGUtMSBSZWd0ZXN0KSc7XG4gIH1cblxuICBsZXQgcHJlZml4OiBzdHJpbmc7XG4gIHN3aXRjaCAoY29pbk5hbWUpIHtcbiAgICBjYXNlICd0YnRjNCc6XG4gICAgICBwcmVmaXggPSAnVGVzdG5ldDQgJztcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3RidGNzaWcnOlxuICAgICAgcHJlZml4ID0gJ1B1YmxpYyBTaWduZXQgJztcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3RidGNiZ3NpZyc6XG4gICAgICBwcmVmaXggPSAnQml0R28gU2lnbmV0ICc7XG4gICAgICBicmVhaztcbiAgICBjYXNlICd0YnRjc3R4JzpcbiAgICAgIHByZWZpeCA9ICdTdGFja3MgJztcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBwcmVmaXggPSBpc1V0eG9Db2luTmFtZVRlc3RuZXQoY29pbk5hbWUpID8gJ1Rlc3RuZXQgJyA6ICcnO1xuICB9XG5cbiAgcmV0dXJuIHByZWZpeCArIGdldEJhc2VOYW1lRnJvbU1haW5uZXQoZ2V0TWFpbm5ldENvaW5OYW1lKGNvaW5OYW1lKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1Rlc3RuZXRDb2luKGNvaW5OYW1lOiBVdHhvQ29pbk5hbWUpOiBib29sZWFuIHtcbiAgcmV0dXJuIGlzVXR4b0NvaW5OYW1lVGVzdG5ldChjb2luTmFtZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc01haW5uZXRDb2luKGNvaW5OYW1lOiBVdHhvQ29pbk5hbWUpOiBib29sZWFuIHtcbiAgcmV0dXJuIGlzVXR4b0NvaW5OYW1lTWFpbm5ldChjb2luTmFtZSk7XG59XG4iXX0=
@@ -1,7 +1,7 @@
1
1
  import { BitGoBase, Triple } from '@bitgo/sdk-core';
2
2
  import { BIP32, fixedScriptWallet } from '@bitgo/wasm-utxo';
3
3
  import { AbstractUtxoCoin } from '../abstractUtxoCoin';
4
- import { UtxoCoinName } from '../names';
4
+ import { UtxoCoinName, WasmUtxoCoinName } from '../names';
5
5
  import { type WalletUnspent } from '../unspent';
6
6
  import { RecoveryProvider } from './RecoveryProvider';
7
7
  type ScriptType2Of3 = fixedScriptWallet.OutputScriptType;
@@ -33,6 +33,8 @@ export interface RecoverParams {
33
33
  recoveryProvider?: RecoveryProvider;
34
34
  /** Satoshi per byte */
35
35
  feeRate?: number;
36
+ /** Block height used to select the Zcash consensus branch ID. */
37
+ blockHeight?: number;
36
38
  /**
37
39
  * Transaction lock time (nLockTime). Set before signing — it is part of the sighash.
38
40
  * Used for ECX replay-protection sweeps (e.g. 499_999_999) and other custom lock-time needs.
@@ -69,6 +71,8 @@ export interface RecoverWithUnspentsParams {
69
71
  krsFee?: bigint;
70
72
  /** KRS fee address (required if krsFee > 0) */
71
73
  krsFeeAddress?: string;
74
+ /** Block height used to select the Zcash consensus branch ID. */
75
+ blockHeight?: number;
72
76
  /** Transaction lock time (nLockTime), set on the PSBT before signing */
73
77
  lockTime?: number;
74
78
  /** Input sequence number applied to every input */
@@ -90,7 +94,7 @@ export interface RecoverWithUnspentsParams {
90
94
  * @param unspents - The wallet unspents to recover (must be non-empty)
91
95
  * @returns The PSBT at the appropriate signing stage (never finalized)
92
96
  */
93
- export declare function backupKeyRecoveryWithWalletUnspents(coinName: UtxoCoinName, params: RecoverWithUnspentsParams, unspents: WalletUnspent<bigint>[]): fixedScriptWallet.BitGoPsbt;
97
+ export declare function backupKeyRecoveryWithWalletUnspents(coinName: UtxoCoinName | WasmUtxoCoinName, params: RecoverWithUnspentsParams, unspents: WalletUnspent<bigint>[]): fixedScriptWallet.BitGoPsbt;
94
98
  /**
95
99
  * Parameters for formatting a backup key recovery result.
96
100
  */