@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,113 @@
1
+ import { address as wasmAddress, fixedScriptWallet, isCoinName, zcashAddress } from '@bitgo/wasm-utxo';
2
+ import { AddressCodec } from '../../transaction/recipient';
3
+ /**
4
+ * Address codec for Zcash coins ('zec'/'tzec') that understands ZIP-316
5
+ * Unified Addresses in addition to ordinary transparent addresses.
6
+ *
7
+ * - `decode` resolves the bytes a recipient pays to (see its doc): by default
8
+ * the transparent scriptPubKey; with `unifiedRecipientPreference: 'shielded'`
9
+ * the raw Orchard/Ironwood receiver of a Unified Address.
10
+ * - `encode`/`toExtendedAddressFormat` are unchanged: scripts can only be
11
+ * written back out as transparent addresses.
12
+ * - `isValidAddress` accepts transparent addresses and Unified Addresses with
13
+ * a transparent or Orchard receiver.
14
+ */
15
+ export class ZecAddressCodec extends AddressCodec {
16
+ constructor(coinName, wasmName, unifiedRecipientPreference = 'transparent') {
17
+ super(coinName, wasmName);
18
+ this.zcashNetworkName = wasmName;
19
+ this.unifiedRecipientPreference = unifiedRecipientPreference;
20
+ }
21
+ /**
22
+ * Whether `address` is a valid Zcash address for this coin's network.
23
+ *
24
+ * Mirrors the pre-codec `Zec.isValidAddress` logic exactly: the address is
25
+ * valid iff it has a usable transparent receiver (an ordinary transparent
26
+ * address, or a UA carrying a transparent receiver) or an Orchard receiver
27
+ * (a UA carrying one).
28
+ */
29
+ isValidAddress(address) {
30
+ return (zcashAddress.hasTransparentReceiver(address, this.wasmName) ||
31
+ zcashAddress.hasOrchardReceiver(address, this.wasmName));
32
+ }
33
+ /**
34
+ * Resolve `address` to the bytes this codec's unified-recipient preference pays to.
35
+ *
36
+ * - `'transparent'` (default) resolves the scriptPubKey: an ordinary
37
+ * transparent address decodes to its own script, and a UA with a
38
+ * transparent receiver decodes to that receiver's script. A UA without a
39
+ * transparent receiver (e.g. Orchard-only) throws, since a shielded
40
+ * output has no script.
41
+ * - `'shielded'` resolves the raw Orchard (Ironwood) receiver — the
42
+ * 43-byte diversifier + `pk_d` — of a UA carrying one. Any other address
43
+ * (plain transparent, transparent-only UA, malformed, wrong network)
44
+ * throws, since it has no Orchard receiver to resolve.
45
+ */
46
+ decode(address) {
47
+ if (this.unifiedRecipientPreference !== 'shielded') {
48
+ return zcashAddress.toTransparentReceiverWithCoin(address, this.wasmName);
49
+ }
50
+ // The raw Orchard receiver exists only for a Unified Address carrying one; anything else
51
+ // (plain transparent address, transparent-only UA, malformed, wrong network) throws.
52
+ let unified;
53
+ try {
54
+ unified = fixedScriptWallet.ZcashUnifiedAddress.parse(address, this.zcashNetworkName);
55
+ }
56
+ catch {
57
+ throw new Error(`address ${address} is not a valid address for network ${this.zcashNetworkName}`);
58
+ }
59
+ if (!unified?.hasOrchardReceiver) {
60
+ throw new Error(`address ${address} has no Orchard receiver to resolve as shielded`);
61
+ }
62
+ return zcashAddress.toShieldedReceiverWithCoin(address, this.wasmName);
63
+ }
64
+ }
65
+ /**
66
+ * Whether `address` is a well-formed ZIP-316 Unified Address for `network`
67
+ * with an Orchard receiver. BitGo only supports Orchard, so a UA without one
68
+ * (e.g. Sapling- or transparent-only) is not considered valid here.
69
+ */
70
+ export function isShieldedZcashAddress(address, network) {
71
+ try {
72
+ return fixedScriptWallet.ZcashUnifiedAddress.parse(address, network).hasOrchardReceiver;
73
+ }
74
+ catch {
75
+ return false;
76
+ }
77
+ }
78
+ /**
79
+ * Classify a Zcash address string as transparent or shielded, validating it in
80
+ * the process. Returns undefined if the address is neither a valid transparent
81
+ * address nor a well-formed ZIP-316 Unified Address for `network`.
82
+ */
83
+ export function getZcashAddressKind(address, network) {
84
+ // ZcashNetworkName also permits 'zcash'/'zcashTest', which toOutputScriptWithCoin
85
+ // doesn't accept (it takes a CoinName, i.e. 'zec'/'tzec'). Skip straight to the
86
+ // shielded check for those rather than relying on an unsafe cast + caught throw.
87
+ if (isCoinName(network)) {
88
+ try {
89
+ wasmAddress.toOutputScriptWithCoin(address, network);
90
+ return 'transparent';
91
+ }
92
+ catch {
93
+ // not a valid transparent address; fall through to shielded check
94
+ }
95
+ }
96
+ return isShieldedZcashAddress(address, network) ? 'shielded' : undefined;
97
+ }
98
+ /**
99
+ * Standalone counterpart to `Zec.isValidAddress`, parameterized by `network`
100
+ * instead of requiring a coin instance. Accepts transparent addresses and
101
+ * shielded ZIP-316 Unified Addresses.
102
+ *
103
+ * Not structurally identical to `Zec.isValidAddress`: the base class also
104
+ * round-trips the parsed script through each known encoding format (see
105
+ * `AbstractUtxoCoin.isValidAddress`), whereas this only calls
106
+ * `toOutputScriptWithCoin` once via `getZcashAddressKind`. They agree in
107
+ * practice since zec/tzec have no alternate transparent-address encoding to
108
+ * round-trip against, but that's not guaranteed to remain true.
109
+ */
110
+ export function isValidZcashAddress(address, network) {
111
+ return getZcashAddressKind(address, network) !== undefined;
112
+ }
113
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkcmVzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9pbXBsL3plYy9hZGRyZXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLElBQUksV0FBVyxFQUFFLGlCQUFpQixFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUd2RyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFLM0Q7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxNQUFNLE9BQU8sZUFBZ0IsU0FBUSxZQUFZO0lBTS9DLFlBQ0UsUUFBc0IsRUFDdEIsUUFBMEIsRUFDMUIsNkJBQXlELGFBQWE7UUFFdEUsS0FBSyxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUMxQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsUUFBOEMsQ0FBQztRQUN2RSxJQUFJLENBQUMsMEJBQTBCLEdBQUcsMEJBQTBCLENBQUM7SUFDL0QsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDTSxjQUFjLENBQUMsT0FBZTtRQUNyQyxPQUFPLENBQ0wsWUFBWSxDQUFDLHNCQUFzQixDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQzNELFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUN4RCxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7T0FZRztJQUNNLE1BQU0sQ0FBQyxPQUFlO1FBQzdCLElBQUksSUFBSSxDQUFDLDBCQUEwQixLQUFLLFVBQVUsRUFBRSxDQUFDO1lBQ25ELE9BQU8sWUFBWSxDQUFDLDZCQUE2QixDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDNUUsQ0FBQztRQUNELHlGQUF5RjtRQUN6RixxRkFBcUY7UUFDckYsSUFBSSxPQUEwRCxDQUFDO1FBQy9ELElBQUksQ0FBQztZQUNILE9BQU8sR0FBRyxpQkFBaUIsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3hGLENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCxNQUFNLElBQUksS0FBSyxDQUFDLFdBQVcsT0FBTyx1Q0FBdUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQztRQUNwRyxDQUFDO1FBQ0QsSUFBSSxDQUFDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxDQUFDO1lBQ2pDLE1BQU0sSUFBSSxLQUFLLENBQUMsV0FBVyxPQUFPLGlEQUFpRCxDQUFDLENBQUM7UUFDdkYsQ0FBQztRQUNELE9BQU8sWUFBWSxDQUFDLDBCQUEwQixDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDekUsQ0FBQztDQUNGO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxzQkFBc0IsQ0FBQyxPQUFlLEVBQUUsT0FBMkM7SUFDakcsSUFBSSxDQUFDO1FBQ0gsT0FBTyxpQkFBaUIsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDLGtCQUFrQixDQUFDO0lBQzFGLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxtQkFBbUIsQ0FDakMsT0FBZSxFQUNmLE9BQTJDO0lBRTNDLGtGQUFrRjtJQUNsRixnRkFBZ0Y7SUFDaEYsaUZBQWlGO0lBQ2pGLElBQUksVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDO1lBQ0gsV0FBVyxDQUFDLHNCQUFzQixDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztZQUNyRCxPQUFPLGFBQWEsQ0FBQztRQUN2QixDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ1Asa0VBQWtFO1FBQ3BFLENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxzQkFBc0IsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQzNFLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7R0FXRztBQUNILE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxPQUFlLEVBQUUsT0FBMkM7SUFDOUYsT0FBTyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLEtBQUssU0FBUyxDQUFDO0FBQzdELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhZGRyZXNzIGFzIHdhc21BZGRyZXNzLCBmaXhlZFNjcmlwdFdhbGxldCwgaXNDb2luTmFtZSwgemNhc2hBZGRyZXNzIH0gZnJvbSAnQGJpdGdvL3dhc20tdXR4byc7XG5pbXBvcnQgdHlwZSB7IFVuaWZpZWRSZWNpcGllbnRQcmVmZXJlbmNlIH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcblxuaW1wb3J0IHsgQWRkcmVzc0NvZGVjIH0gZnJvbSAnLi4vLi4vdHJhbnNhY3Rpb24vcmVjaXBpZW50JztcbmltcG9ydCB7IFV0eG9Db2luTmFtZSwgV2FzbVV0eG9Db2luTmFtZSB9IGZyb20gJy4uLy4uL25hbWVzJztcblxuZXhwb3J0IHR5cGUgWmNhc2hBZGRyZXNzS2luZCA9ICd0cmFuc3BhcmVudCcgfCAnc2hpZWxkZWQnO1xuXG4vKipcbiAqIEFkZHJlc3MgY29kZWMgZm9yIFpjYXNoIGNvaW5zICgnemVjJy8ndHplYycpIHRoYXQgdW5kZXJzdGFuZHMgWklQLTMxNlxuICogVW5pZmllZCBBZGRyZXNzZXMgaW4gYWRkaXRpb24gdG8gb3JkaW5hcnkgdHJhbnNwYXJlbnQgYWRkcmVzc2VzLlxuICpcbiAqIC0gYGRlY29kZWAgcmVzb2x2ZXMgdGhlIGJ5dGVzIGEgcmVjaXBpZW50IHBheXMgdG8gKHNlZSBpdHMgZG9jKTogYnkgZGVmYXVsdFxuICogICB0aGUgdHJhbnNwYXJlbnQgc2NyaXB0UHViS2V5OyB3aXRoIGB1bmlmaWVkUmVjaXBpZW50UHJlZmVyZW5jZTogJ3NoaWVsZGVkJ2BcbiAqICAgdGhlIHJhdyBPcmNoYXJkL0lyb253b29kIHJlY2VpdmVyIG9mIGEgVW5pZmllZCBBZGRyZXNzLlxuICogLSBgZW5jb2RlYC9gdG9FeHRlbmRlZEFkZHJlc3NGb3JtYXRgIGFyZSB1bmNoYW5nZWQ6IHNjcmlwdHMgY2FuIG9ubHkgYmVcbiAqICAgd3JpdHRlbiBiYWNrIG91dCBhcyB0cmFuc3BhcmVudCBhZGRyZXNzZXMuXG4gKiAtIGBpc1ZhbGlkQWRkcmVzc2AgYWNjZXB0cyB0cmFuc3BhcmVudCBhZGRyZXNzZXMgYW5kIFVuaWZpZWQgQWRkcmVzc2VzIHdpdGhcbiAqICAgYSB0cmFuc3BhcmVudCBvciBPcmNoYXJkIHJlY2VpdmVyLlxuICovXG5leHBvcnQgY2xhc3MgWmVjQWRkcmVzc0NvZGVjIGV4dGVuZHMgQWRkcmVzc0NvZGVjIHtcbiAgLyoqIFRoZSBaY2FzaCBuZXR3b3JrIG5hbWUgZm9yIHdhc20gY2FsbHMg4oCUICd6ZWMnIG9yICd0emVjJy4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSB6Y2FzaE5ldHdvcmtOYW1lOiBmaXhlZFNjcmlwdFdhbGxldC5aY2FzaE5ldHdvcmtOYW1lO1xuICAvKiogSG93IFVuaWZpZWQgQWRkcmVzcyByZWNpcGllbnRzIHJlc29sdmUgd2hlbiB0aGlzIGNvZGVjIGRlY29kZXMgdGhlbS4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSB1bmlmaWVkUmVjaXBpZW50UHJlZmVyZW5jZTogVW5pZmllZFJlY2lwaWVudFByZWZlcmVuY2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgY29pbk5hbWU6IFV0eG9Db2luTmFtZSxcbiAgICB3YXNtTmFtZTogV2FzbVV0eG9Db2luTmFtZSxcbiAgICB1bmlmaWVkUmVjaXBpZW50UHJlZmVyZW5jZTogVW5pZmllZFJlY2lwaWVudFByZWZlcmVuY2UgPSAndHJhbnNwYXJlbnQnXG4gICkge1xuICAgIHN1cGVyKGNvaW5OYW1lLCB3YXNtTmFtZSk7XG4gICAgdGhpcy56Y2FzaE5ldHdvcmtOYW1lID0gd2FzbU5hbWUgYXMgZml4ZWRTY3JpcHRXYWxsZXQuWmNhc2hOZXR3b3JrTmFtZTtcbiAgICB0aGlzLnVuaWZpZWRSZWNpcGllbnRQcmVmZXJlbmNlID0gdW5pZmllZFJlY2lwaWVudFByZWZlcmVuY2U7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciBgYWRkcmVzc2AgaXMgYSB2YWxpZCBaY2FzaCBhZGRyZXNzIGZvciB0aGlzIGNvaW4ncyBuZXR3b3JrLlxuICAgKlxuICAgKiBNaXJyb3JzIHRoZSBwcmUtY29kZWMgYFplYy5pc1ZhbGlkQWRkcmVzc2AgbG9naWMgZXhhY3RseTogdGhlIGFkZHJlc3MgaXNcbiAgICogdmFsaWQgaWZmIGl0IGhhcyBhIHVzYWJsZSB0cmFuc3BhcmVudCByZWNlaXZlciAoYW4gb3JkaW5hcnkgdHJhbnNwYXJlbnRcbiAgICogYWRkcmVzcywgb3IgYSBVQSBjYXJyeWluZyBhIHRyYW5zcGFyZW50IHJlY2VpdmVyKSBvciBhbiBPcmNoYXJkIHJlY2VpdmVyXG4gICAqIChhIFVBIGNhcnJ5aW5nIG9uZSkuXG4gICAqL1xuICBvdmVycmlkZSBpc1ZhbGlkQWRkcmVzcyhhZGRyZXNzOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgemNhc2hBZGRyZXNzLmhhc1RyYW5zcGFyZW50UmVjZWl2ZXIoYWRkcmVzcywgdGhpcy53YXNtTmFtZSkgfHxcbiAgICAgIHpjYXNoQWRkcmVzcy5oYXNPcmNoYXJkUmVjZWl2ZXIoYWRkcmVzcywgdGhpcy53YXNtTmFtZSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmUgYGFkZHJlc3NgIHRvIHRoZSBieXRlcyB0aGlzIGNvZGVjJ3MgdW5pZmllZC1yZWNpcGllbnQgcHJlZmVyZW5jZSBwYXlzIHRvLlxuICAgKlxuICAgKiAtIGAndHJhbnNwYXJlbnQnYCAoZGVmYXVsdCkgcmVzb2x2ZXMgdGhlIHNjcmlwdFB1YktleTogYW4gb3JkaW5hcnlcbiAgICogICB0cmFuc3BhcmVudCBhZGRyZXNzIGRlY29kZXMgdG8gaXRzIG93biBzY3JpcHQsIGFuZCBhIFVBIHdpdGggYVxuICAgKiAgIHRyYW5zcGFyZW50IHJlY2VpdmVyIGRlY29kZXMgdG8gdGhhdCByZWNlaXZlcidzIHNjcmlwdC4gQSBVQSB3aXRob3V0IGFcbiAgICogICB0cmFuc3BhcmVudCByZWNlaXZlciAoZS5nLiBPcmNoYXJkLW9ubHkpIHRocm93cywgc2luY2UgYSBzaGllbGRlZFxuICAgKiAgIG91dHB1dCBoYXMgbm8gc2NyaXB0LlxuICAgKiAtIGAnc2hpZWxkZWQnYCByZXNvbHZlcyB0aGUgcmF3IE9yY2hhcmQgKElyb253b29kKSByZWNlaXZlciDigJQgdGhlXG4gICAqICAgNDMtYnl0ZSBkaXZlcnNpZmllciArIGBwa19kYCDigJQgb2YgYSBVQSBjYXJyeWluZyBvbmUuIEFueSBvdGhlciBhZGRyZXNzXG4gICAqICAgKHBsYWluIHRyYW5zcGFyZW50LCB0cmFuc3BhcmVudC1vbmx5IFVBLCBtYWxmb3JtZWQsIHdyb25nIG5ldHdvcmspXG4gICAqICAgdGhyb3dzLCBzaW5jZSBpdCBoYXMgbm8gT3JjaGFyZCByZWNlaXZlciB0byByZXNvbHZlLlxuICAgKi9cbiAgb3ZlcnJpZGUgZGVjb2RlKGFkZHJlc3M6IHN0cmluZyk6IFVpbnQ4QXJyYXkge1xuICAgIGlmICh0aGlzLnVuaWZpZWRSZWNpcGllbnRQcmVmZXJlbmNlICE9PSAnc2hpZWxkZWQnKSB7XG4gICAgICByZXR1cm4gemNhc2hBZGRyZXNzLnRvVHJhbnNwYXJlbnRSZWNlaXZlcldpdGhDb2luKGFkZHJlc3MsIHRoaXMud2FzbU5hbWUpO1xuICAgIH1cbiAgICAvLyBUaGUgcmF3IE9yY2hhcmQgcmVjZWl2ZXIgZXhpc3RzIG9ubHkgZm9yIGEgVW5pZmllZCBBZGRyZXNzIGNhcnJ5aW5nIG9uZTsgYW55dGhpbmcgZWxzZVxuICAgIC8vIChwbGFpbiB0cmFuc3BhcmVudCBhZGRyZXNzLCB0cmFuc3BhcmVudC1vbmx5IFVBLCBtYWxmb3JtZWQsIHdyb25nIG5ldHdvcmspIHRocm93cy5cbiAgICBsZXQgdW5pZmllZDogZml4ZWRTY3JpcHRXYWxsZXQuWmNhc2hVbmlmaWVkQWRkcmVzcyB8IHVuZGVmaW5lZDtcbiAgICB0cnkge1xuICAgICAgdW5pZmllZCA9IGZpeGVkU2NyaXB0V2FsbGV0LlpjYXNoVW5pZmllZEFkZHJlc3MucGFyc2UoYWRkcmVzcywgdGhpcy56Y2FzaE5ldHdvcmtOYW1lKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgYWRkcmVzcyAke2FkZHJlc3N9IGlzIG5vdCBhIHZhbGlkIGFkZHJlc3MgZm9yIG5ldHdvcmsgJHt0aGlzLnpjYXNoTmV0d29ya05hbWV9YCk7XG4gICAgfVxuICAgIGlmICghdW5pZmllZD8uaGFzT3JjaGFyZFJlY2VpdmVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGFkZHJlc3MgJHthZGRyZXNzfSBoYXMgbm8gT3JjaGFyZCByZWNlaXZlciB0byByZXNvbHZlIGFzIHNoaWVsZGVkYCk7XG4gICAgfVxuICAgIHJldHVybiB6Y2FzaEFkZHJlc3MudG9TaGllbGRlZFJlY2VpdmVyV2l0aENvaW4oYWRkcmVzcywgdGhpcy53YXNtTmFtZSk7XG4gIH1cbn1cblxuLyoqXG4gKiBXaGV0aGVyIGBhZGRyZXNzYCBpcyBhIHdlbGwtZm9ybWVkIFpJUC0zMTYgVW5pZmllZCBBZGRyZXNzIGZvciBgbmV0d29ya2BcbiAqIHdpdGggYW4gT3JjaGFyZCByZWNlaXZlci4gQml0R28gb25seSBzdXBwb3J0cyBPcmNoYXJkLCBzbyBhIFVBIHdpdGhvdXQgb25lXG4gKiAoZS5nLiBTYXBsaW5nLSBvciB0cmFuc3BhcmVudC1vbmx5KSBpcyBub3QgY29uc2lkZXJlZCB2YWxpZCBoZXJlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNTaGllbGRlZFpjYXNoQWRkcmVzcyhhZGRyZXNzOiBzdHJpbmcsIG5ldHdvcms6IGZpeGVkU2NyaXB0V2FsbGV0LlpjYXNoTmV0d29ya05hbWUpOiBib29sZWFuIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZml4ZWRTY3JpcHRXYWxsZXQuWmNhc2hVbmlmaWVkQWRkcmVzcy5wYXJzZShhZGRyZXNzLCBuZXR3b3JrKS5oYXNPcmNoYXJkUmVjZWl2ZXI7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vKipcbiAqIENsYXNzaWZ5IGEgWmNhc2ggYWRkcmVzcyBzdHJpbmcgYXMgdHJhbnNwYXJlbnQgb3Igc2hpZWxkZWQsIHZhbGlkYXRpbmcgaXQgaW5cbiAqIHRoZSBwcm9jZXNzLiBSZXR1cm5zIHVuZGVmaW5lZCBpZiB0aGUgYWRkcmVzcyBpcyBuZWl0aGVyIGEgdmFsaWQgdHJhbnNwYXJlbnRcbiAqIGFkZHJlc3Mgbm9yIGEgd2VsbC1mb3JtZWQgWklQLTMxNiBVbmlmaWVkIEFkZHJlc3MgZm9yIGBuZXR3b3JrYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFpjYXNoQWRkcmVzc0tpbmQoXG4gIGFkZHJlc3M6IHN0cmluZyxcbiAgbmV0d29yazogZml4ZWRTY3JpcHRXYWxsZXQuWmNhc2hOZXR3b3JrTmFtZVxuKTogWmNhc2hBZGRyZXNzS2luZCB8IHVuZGVmaW5lZCB7XG4gIC8vIFpjYXNoTmV0d29ya05hbWUgYWxzbyBwZXJtaXRzICd6Y2FzaCcvJ3pjYXNoVGVzdCcsIHdoaWNoIHRvT3V0cHV0U2NyaXB0V2l0aENvaW5cbiAgLy8gZG9lc24ndCBhY2NlcHQgKGl0IHRha2VzIGEgQ29pbk5hbWUsIGkuZS4gJ3plYycvJ3R6ZWMnKS4gU2tpcCBzdHJhaWdodCB0byB0aGVcbiAgLy8gc2hpZWxkZWQgY2hlY2sgZm9yIHRob3NlIHJhdGhlciB0aGFuIHJlbHlpbmcgb24gYW4gdW5zYWZlIGNhc3QgKyBjYXVnaHQgdGhyb3cuXG4gIGlmIChpc0NvaW5OYW1lKG5ldHdvcmspKSB7XG4gICAgdHJ5IHtcbiAgICAgIHdhc21BZGRyZXNzLnRvT3V0cHV0U2NyaXB0V2l0aENvaW4oYWRkcmVzcywgbmV0d29yayk7XG4gICAgICByZXR1cm4gJ3RyYW5zcGFyZW50JztcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIG5vdCBhIHZhbGlkIHRyYW5zcGFyZW50IGFkZHJlc3M7IGZhbGwgdGhyb3VnaCB0byBzaGllbGRlZCBjaGVja1xuICAgIH1cbiAgfVxuICByZXR1cm4gaXNTaGllbGRlZFpjYXNoQWRkcmVzcyhhZGRyZXNzLCBuZXR3b3JrKSA/ICdzaGllbGRlZCcgOiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogU3RhbmRhbG9uZSBjb3VudGVycGFydCB0byBgWmVjLmlzVmFsaWRBZGRyZXNzYCwgcGFyYW1ldGVyaXplZCBieSBgbmV0d29ya2BcbiAqIGluc3RlYWQgb2YgcmVxdWlyaW5nIGEgY29pbiBpbnN0YW5jZS4gQWNjZXB0cyB0cmFuc3BhcmVudCBhZGRyZXNzZXMgYW5kXG4gKiBzaGllbGRlZCBaSVAtMzE2IFVuaWZpZWQgQWRkcmVzc2VzLlxuICpcbiAqIE5vdCBzdHJ1Y3R1cmFsbHkgaWRlbnRpY2FsIHRvIGBaZWMuaXNWYWxpZEFkZHJlc3NgOiB0aGUgYmFzZSBjbGFzcyBhbHNvXG4gKiByb3VuZC10cmlwcyB0aGUgcGFyc2VkIHNjcmlwdCB0aHJvdWdoIGVhY2gga25vd24gZW5jb2RpbmcgZm9ybWF0IChzZWVcbiAqIGBBYnN0cmFjdFV0eG9Db2luLmlzVmFsaWRBZGRyZXNzYCksIHdoZXJlYXMgdGhpcyBvbmx5IGNhbGxzXG4gKiBgdG9PdXRwdXRTY3JpcHRXaXRoQ29pbmAgb25jZSB2aWEgYGdldFpjYXNoQWRkcmVzc0tpbmRgLiBUaGV5IGFncmVlIGluXG4gKiBwcmFjdGljZSBzaW5jZSB6ZWMvdHplYyBoYXZlIG5vIGFsdGVybmF0ZSB0cmFuc3BhcmVudC1hZGRyZXNzIGVuY29kaW5nIHRvXG4gKiByb3VuZC10cmlwIGFnYWluc3QsIGJ1dCB0aGF0J3Mgbm90IGd1YXJhbnRlZWQgdG8gcmVtYWluIHRydWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkWmNhc2hBZGRyZXNzKGFkZHJlc3M6IHN0cmluZywgbmV0d29yazogZml4ZWRTY3JpcHRXYWxsZXQuWmNhc2hOZXR3b3JrTmFtZSk6IGJvb2xlYW4ge1xuICByZXR1cm4gZ2V0WmNhc2hBZGRyZXNzS2luZChhZGRyZXNzLCBuZXR3b3JrKSAhPT0gdW5kZWZpbmVkO1xufVxuIl19
@@ -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"}
@@ -1,3 +1,6 @@
1
1
  export * from './zec';
2
2
  export * from './tzec';
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvaW1wbC96ZWMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxPQUFPLENBQUM7QUFDdEIsY0FBYyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3plYyc7XG5leHBvcnQgKiBmcm9tICcuL3R6ZWMnO1xuIl19
3
+ export * from './address';
4
+ export * from './recipients';
5
+ export * from './types';
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvaW1wbC96ZWMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxPQUFPLENBQUM7QUFDdEIsY0FBYyxRQUFRLENBQUM7QUFDdkIsY0FBYyxXQUFXLENBQUM7QUFDMUIsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3plYyc7XG5leHBvcnQgKiBmcm9tICcuL3R6ZWMnO1xuZXhwb3J0ICogZnJvbSAnLi9hZGRyZXNzJztcbmV4cG9ydCAqIGZyb20gJy4vcmVjaXBpZW50cyc7XG5leHBvcnQgKiBmcm9tICcuL3R5cGVzJztcbiJdfQ==
@@ -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,90 @@
1
+ import { fixedScriptWallet, zcashAddress } from '@bitgo/wasm-utxo';
2
+ import { getReplayProtectionPubkeys } from '../../transaction/fixedScript/replayProtection';
3
+ /**
4
+ * Resolve the recipient list of a decoded Zcash PSBT (v4 Sapling-shaped or v6 Ironwood).
5
+ *
6
+ * Mirrors the recipient resolution of wallet-platform's utxo-core `buildTransaction` in the
7
+ * decode direction: every non-wallet output with a resolvable address is a recipient. A
8
+ * shielded output parses with `isShielded: true`, its `script` being the raw 43-byte receiver;
9
+ * when the build stored the client's original Unified Address (the v6 PCZT for shielded
10
+ * outputs, the transparent-output proprietary key-value map for v4), both the parsed address
11
+ * and `unifiedAddress` report it verbatim. Opaque outputs with no address (e.g. OP_RETURN) are
12
+ * skipped, as they carry no recipient.
13
+ */
14
+ export function resolvePsbtRecipients(psbt, walletKeys) {
15
+ const parsed = psbt.parseTransactionWithWalletKeys(walletKeys, {
16
+ replayProtection: { publicKeys: getReplayProtectionPubkeys('zec') },
17
+ });
18
+ const recipients = [];
19
+ parsed.outputs.forEach((output, i) => {
20
+ // Wallet-owned (change) outputs.
21
+ if (output.scriptId !== null) {
22
+ return;
23
+ }
24
+ // Opaque outputs (e.g. OP_RETURN) carry no recipient address.
25
+ if (output.address === null) {
26
+ return;
27
+ }
28
+ // The original client-passed Unified Address, stored verbatim in the PSBT's key-value
29
+ // pairs: the orchard PCZT for a shielded output (parsed `address` reports it in full), the
30
+ // transparent-output proprietary map for a v4 transparent output.
31
+ const unifiedAddress = output.isShielded ? output.address : psbt.transparentOutputUnifiedAddress(i) ?? undefined;
32
+ recipients.push({
33
+ amount: output.value,
34
+ address: output.address,
35
+ script: output.script,
36
+ unifiedAddress,
37
+ destination: output.isShielded
38
+ ? { kind: 'zcashShielded', unifiedAddress: output.address }
39
+ : unifiedAddress
40
+ ? { kind: 'zcashUnifiedTransparent', unifiedAddress }
41
+ : { kind: 'transparent' },
42
+ });
43
+ });
44
+ return recipients;
45
+ }
46
+ /**
47
+ * Infer the Unified-Address recipient preference for a Zcash transaction when the caller did
48
+ * not pass one — the counterpart of wallet-platform's utxo-core `buildTransaction`
49
+ * `classifyRecipientShieldedness`.
50
+ *
51
+ * A recipient that resolves to a transparent output — an ordinary transparent address, or a
52
+ * Unified Address carrying a transparent receiver — is classified `'transparent'`; a Unified
53
+ * Address carrying only an Orchard/Ironwood receiver is classified `'shielded'`. A mix of
54
+ * shielded and transparent recipients is rejected. An address that is neither a transparent
55
+ * address nor a Unified Address propagates the Unified-Address parse error — it is not
56
+ * silently defaulted to `'transparent'`.
57
+ *
58
+ * @returns `'shielded'` when every recipient resolves shielded, `undefined` when every
59
+ * recipient resolves transparent (the build's default). The `'transparent'` arm of the
60
+ * return type exists so callers can pass the explicit preference through unchanged; this
61
+ * function itself never returns `'transparent'`.
62
+ */
63
+ export function getUnifiedRecipientPreference(name, recipients) {
64
+ const shieldedness = recipients.map((recipient) => {
65
+ if (recipient.address === undefined) {
66
+ // Raw script inherently transparent.
67
+ return 'transparent';
68
+ }
69
+ // Ordinary transparent address, or a Unified Address carrying a transparent receiver:
70
+ // resolves transparently either way (the build's default when no preference is given).
71
+ if (zcashAddress.hasTransparentReceiver(recipient.address, name)) {
72
+ return 'transparent';
73
+ }
74
+ // A shielded (Orchard/Ironwood-only) Unified Address is the only remaining resolvable
75
+ // form. An address that is none of the above propagates the parse error instead of
76
+ // assuming a default.
77
+ const unified = fixedScriptWallet.ZcashUnifiedAddress.parse(recipient.address, name);
78
+ if (unified.hasOrchardReceiver) {
79
+ return 'shielded';
80
+ }
81
+ throw new Error(`address ${recipient.address} carries no transparent or Orchard receiver`);
82
+ });
83
+ const hasShielded = shieldedness.includes('shielded');
84
+ const hasTransparent = shieldedness.includes('transparent');
85
+ if (hasShielded && hasTransparent) {
86
+ throw new Error('Mixed shielded and transparent recipients are not supported');
87
+ }
88
+ return hasShielded ? 'shielded' : undefined;
89
+ }
90
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjaXBpZW50cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9pbXBsL3plYy9yZWNpcGllbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUduRSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQXdENUY7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQU0sVUFBVSxxQkFBcUIsQ0FDbkMsSUFBc0MsRUFDdEMsVUFBNEM7SUFFNUMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLDhCQUE4QixDQUFDLFVBQVUsRUFBRTtRQUM3RCxnQkFBZ0IsRUFBRSxFQUFFLFVBQVUsRUFBRSwwQkFBMEIsQ0FBQyxLQUFLLENBQUMsRUFBRTtLQUNwRSxDQUFDLENBQUM7SUFFSCxNQUFNLFVBQVUsR0FBb0IsRUFBRSxDQUFDO0lBQ3ZDLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ25DLGlDQUFpQztRQUNqQyxJQUFJLE1BQU0sQ0FBQyxRQUFRLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDN0IsT0FBTztRQUNULENBQUM7UUFDRCw4REFBOEQ7UUFDOUQsSUFBSSxNQUFNLENBQUMsT0FBTyxLQUFLLElBQUksRUFBRSxDQUFDO1lBQzVCLE9BQU87UUFDVCxDQUFDO1FBQ0Qsc0ZBQXNGO1FBQ3RGLDJGQUEyRjtRQUMzRixrRUFBa0U7UUFDbEUsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLCtCQUErQixDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVMsQ0FBQztRQUNqSCxVQUFVLENBQUMsSUFBSSxDQUFDO1lBQ2QsTUFBTSxFQUFFLE1BQU0sQ0FBQyxLQUFLO1lBQ3BCLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTztZQUN2QixNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU07WUFDckIsY0FBYztZQUNkLFdBQVcsRUFBRSxNQUFNLENBQUMsVUFBVTtnQkFDNUIsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsTUFBTSxDQUFDLE9BQU8sRUFBRTtnQkFDM0QsQ0FBQyxDQUFDLGNBQWM7b0JBQ2hCLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSx5QkFBeUIsRUFBRSxjQUFjLEVBQUU7b0JBQ3JELENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUU7U0FDNUIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDSCxPQUFPLFVBQVUsQ0FBQztBQUNwQixDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7QUFDSCxNQUFNLFVBQVUsNkJBQTZCLENBQzNDLElBQW1CLEVBQ25CLFVBQTZDO0lBRTdDLE1BQU0sWUFBWSxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRTtRQUNoRCxJQUFJLFNBQVMsQ0FBQyxPQUFPLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDcEMscUNBQXFDO1lBQ3JDLE9BQU8sYUFBc0IsQ0FBQztRQUNoQyxDQUFDO1FBQ0Qsc0ZBQXNGO1FBQ3RGLHVGQUF1RjtRQUN2RixJQUFJLFlBQVksQ0FBQyxzQkFBc0IsQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDakUsT0FBTyxhQUFzQixDQUFDO1FBQ2hDLENBQUM7UUFDRCxzRkFBc0Y7UUFDdEYsbUZBQW1GO1FBQ25GLHNCQUFzQjtRQUN0QixNQUFNLE9BQU8sR0FBRyxpQkFBaUIsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNyRixJQUFJLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQy9CLE9BQU8sVUFBbUIsQ0FBQztRQUM3QixDQUFDO1FBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLFNBQVMsQ0FBQyxPQUFPLDZDQUE2QyxDQUFDLENBQUM7SUFDN0YsQ0FBQyxDQUFDLENBQUM7SUFDSCxNQUFNLFdBQVcsR0FBRyxZQUFZLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3RELE1BQU0sY0FBYyxHQUFHLFlBQVksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDNUQsSUFBSSxXQUFXLElBQUksY0FBYyxFQUFFLENBQUM7UUFDbEMsTUFBTSxJQUFJLEtBQUssQ0FBQyw2REFBNkQsQ0FBQyxDQUFDO0lBQ2pGLENBQUM7SUFDRCxPQUFPLFdBQVcsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7QUFDOUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGZpeGVkU2NyaXB0V2FsbGV0LCB6Y2FzaEFkZHJlc3MgfSBmcm9tICdAYml0Z28vd2FzbS11dHhvJztcbmltcG9ydCB0eXBlIHsgVW5pZmllZFJlY2lwaWVudFByZWZlcmVuY2UgfSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuXG5pbXBvcnQgeyBnZXRSZXBsYXlQcm90ZWN0aW9uUHVia2V5cyB9IGZyb20gJy4uLy4uL3RyYW5zYWN0aW9uL2ZpeGVkU2NyaXB0L3JlcGxheVByb3RlY3Rpb24nO1xuXG5pbXBvcnQgeyBaY2FzaENvaW5OYW1lIH0gZnJvbSAnLi90eXBlcyc7XG5cbi8qKlxuICogSG93IGEgcmVjaXBpZW50IHBhcnNlZCBmcm9tIGEgWmNhc2ggUFNCVCBpcyBzcGVudC5cbiAqXG4gKiBUaGUgZGVjb2RlLXNpZGUgY291bnRlcnBhcnQgb2YgdXR4by1jb3JlJ3MgYGJ1aWxkVHJhbnNhY3Rpb24vemNhc2gudHNgIGBaY2FzaERlc3RpbmF0aW9uYCBvblxuICogdGhlIGJ1aWxkIHNpZGU6IGEgc2hpZWxkZWQgcmVjaXBpZW50IGlzIGFuIE9yY2hhcmQvSXJvbndvb2Qgb3V0cHV0IHN0b3JlZCBpbiB0aGUgdjYgKElyb253b29kKVxuICogUFNCVCdzIG9yY2hhcmQgUENaVCwgYW5kIGV2ZXJ5dGhpbmcgZWxzZSBpcyBhbiBvcmRpbmFyeSB0cmFuc3BhcmVudCBvdXRwdXQuIEEgdHJhbnNwYXJlbnRcbiAqIG91dHB1dCByZXNvbHZlZCBmcm9tIGEgVW5pZmllZCBBZGRyZXNzIGNhcnJpZXMgdGhhdCBvcmlnaW5hbCBVQSAoYHpjYXNoVW5pZmllZFRyYW5zcGFyZW50YCksIGFcbiAqIHBsYWluIGFkZHJlc3MgZG9lcyBub3QuXG4gKi9cbmV4cG9ydCB0eXBlIFBzYnRSZWNpcGllbnREZXN0aW5hdGlvbiA9XG4gIHwge1xuICAgICAga2luZDogJ3pjYXNoU2hpZWxkZWQnO1xuICAgICAgLyoqXG4gICAgICAgKiBUaGUgVW5pZmllZCBBZGRyZXNzIHRoZSBvdXRwdXQgd2FzIGFkZHJlc3NlZCB0byDigJQgdGhlIG9yaWdpbmFsIG11bHRpLXJlY2VpdmVyIFVBIHRoZVxuICAgICAgICogY2xpZW50IHBhc3NlZCB3aGVuIHRoZSBQU0JUIHN0b3JlcyBvbmUgdmVyYmF0aW0sIG90aGVyd2lzZSBhIHJlLWVuY29kZWQgc2luZ2xlLXJlY2VpdmVyXG4gICAgICAgKiBPcmNoYXJkIFVBLlxuICAgICAgICovXG4gICAgICB1bmlmaWVkQWRkcmVzczogc3RyaW5nO1xuICAgIH1cbiAgfCB7XG4gICAgICBraW5kOiAnemNhc2hVbmlmaWVkVHJhbnNwYXJlbnQnO1xuICAgICAgLyoqIFRoZSBvcmlnaW5hbCBVbmlmaWVkIEFkZHJlc3MgdGhlIHRyYW5zcGFyZW50IHJlY2VpdmVyIHdhcyByZXNvbHZlZCBmcm9tLiAqL1xuICAgICAgdW5pZmllZEFkZHJlc3M6IHN0cmluZztcbiAgICB9XG4gIHwgeyBraW5kOiAndHJhbnNwYXJlbnQnIH07XG5cbi8qKiBBIHJlY2lwaWVudCByZXNvbHZlZCBmcm9tIGEgZGVjb2RlZCBaY2FzaCBQU0JUJ3MgZXh0ZXJuYWwgb3V0cHV0cy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHNidFJlY2lwaWVudCB7XG4gIC8qKiBBbW91bnQgaW4gc2F0b3NoaXMuICovXG4gIGFtb3VudDogYmlnaW50O1xuICAvKipcbiAgICogVGhlIHJlY2lwaWVudCBhZGRyZXNzLiBGb3IgYSBzaGllbGRlZCBvdXRwdXQgdGhpcyBpcyB0aGUgVW5pZmllZCBBZGRyZXNzIHRoZSBvdXRwdXQgd2FzXG4gICAqIGFkZHJlc3NlZCB0byDigJQgdGhlIG9yaWdpbmFsIG11bHRpLXJlY2VpdmVyIFVBIHdoZW4gdGhlIFBTQlQgc3RvcmVzIG9uZSB2ZXJiYXRpbSwgb3RoZXJ3aXNlIGFcbiAgICogcmUtZW5jb2RlZCBzaW5nbGUtcmVjZWl2ZXIgT3JjaGFyZCBVQS4gRm9yIGEgdHJhbnNwYXJlbnQgb3V0cHV0IGl0IGlzIHRoZSBvcmlnaW5hbCBVbmlmaWVkXG4gICAqIEFkZHJlc3Mgd2hlbiBvbmUgd2FzIHN0b3JlZCwgZWxzZSB0aGUgZGVjb2RlZCB0cmFuc3BhcmVudCBhZGRyZXNzLlxuICAgKi9cbiAgYWRkcmVzczogc3RyaW5nO1xuICAvKipcbiAgICogUmF3IHJlY2VpdmVyIGJ5dGVzOiB0aGUgNDMtYnl0ZSBPcmNoYXJkL0lyb253b29kIHJlY2VpdmVyIGZvciBhIHNoaWVsZGVkIG91dHB1dCwgdGhlXG4gICAqIHNjcmlwdFB1YktleSBmb3IgYSB0cmFuc3BhcmVudCBvbmUuXG4gICAqL1xuICBzY3JpcHQ6IFVpbnQ4QXJyYXk7XG4gIC8qKlxuICAgKiBUaGUgb3JpZ2luYWwgVW5pZmllZCBBZGRyZXNzIHRoZSBjbGllbnQgc3VwcGxpZWQgZm9yIHRoaXMgcmVjaXBpZW50LCB3aGVuIHRoZSBQU0JUIHN0b3Jlc1xuICAgKiBvbmU6IHRoZSB2NiAoSXJvbndvb2QpIFBDWlQgZm9yIGEgc2hpZWxkZWQgb3V0cHV0LCB0aGUgdHJhbnNwYXJlbnQtb3V0cHV0IHByb3ByaWV0YXJ5XG4gICAqIGtleS12YWx1ZSBtYXAgZm9yIGEgdjQgdHJhbnNwYXJlbnQgb3V0cHV0LiBgdW5kZWZpbmVkYCB3aGVuIHRoZSByZWNpcGllbnQgd2FzIGJ1aWx0IGZyb20gYVxuICAgKiBwbGFpbiBhZGRyZXNzLlxuICAgKi9cbiAgdW5pZmllZEFkZHJlc3M/OiBzdHJpbmc7XG4gIGRlc3RpbmF0aW9uOiBQc2J0UmVjaXBpZW50RGVzdGluYXRpb247XG59XG5cbi8qKlxuICogUmVzb2x2ZSB0aGUgcmVjaXBpZW50IGxpc3Qgb2YgYSBkZWNvZGVkIFpjYXNoIFBTQlQgKHY0IFNhcGxpbmctc2hhcGVkIG9yIHY2IElyb253b29kKS5cbiAqXG4gKiBNaXJyb3JzIHRoZSByZWNpcGllbnQgcmVzb2x1dGlvbiBvZiB3YWxsZXQtcGxhdGZvcm0ncyB1dHhvLWNvcmUgYGJ1aWxkVHJhbnNhY3Rpb25gIGluIHRoZVxuICogZGVjb2RlIGRpcmVjdGlvbjogZXZlcnkgbm9uLXdhbGxldCBvdXRwdXQgd2l0aCBhIHJlc29sdmFibGUgYWRkcmVzcyBpcyBhIHJlY2lwaWVudC4gQVxuICogc2hpZWxkZWQgb3V0cHV0IHBhcnNlcyB3aXRoIGBpc1NoaWVsZGVkOiB0cnVlYCwgaXRzIGBzY3JpcHRgIGJlaW5nIHRoZSByYXcgNDMtYnl0ZSByZWNlaXZlcjtcbiAqIHdoZW4gdGhlIGJ1aWxkIHN0b3JlZCB0aGUgY2xpZW50J3Mgb3JpZ2luYWwgVW5pZmllZCBBZGRyZXNzICh0aGUgdjYgUENaVCBmb3Igc2hpZWxkZWRcbiAqIG91dHB1dHMsIHRoZSB0cmFuc3BhcmVudC1vdXRwdXQgcHJvcHJpZXRhcnkga2V5LXZhbHVlIG1hcCBmb3IgdjQpLCBib3RoIHRoZSBwYXJzZWQgYWRkcmVzc1xuICogYW5kIGB1bmlmaWVkQWRkcmVzc2AgcmVwb3J0IGl0IHZlcmJhdGltLiBPcGFxdWUgb3V0cHV0cyB3aXRoIG5vIGFkZHJlc3MgKGUuZy4gT1BfUkVUVVJOKSBhcmVcbiAqIHNraXBwZWQsIGFzIHRoZXkgY2Fycnkgbm8gcmVjaXBpZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVBzYnRSZWNpcGllbnRzKFxuICBwc2J0OiBmaXhlZFNjcmlwdFdhbGxldC5aY2FzaEJpdEdvUHNidCxcbiAgd2FsbGV0S2V5czogZml4ZWRTY3JpcHRXYWxsZXQuUm9vdFdhbGxldEtleXNcbik6IFBzYnRSZWNpcGllbnRbXSB7XG4gIGNvbnN0IHBhcnNlZCA9IHBzYnQucGFyc2VUcmFuc2FjdGlvbldpdGhXYWxsZXRLZXlzKHdhbGxldEtleXMsIHtcbiAgICByZXBsYXlQcm90ZWN0aW9uOiB7IHB1YmxpY0tleXM6IGdldFJlcGxheVByb3RlY3Rpb25QdWJrZXlzKCd6ZWMnKSB9LFxuICB9KTtcblxuICBjb25zdCByZWNpcGllbnRzOiBQc2J0UmVjaXBpZW50W10gPSBbXTtcbiAgcGFyc2VkLm91dHB1dHMuZm9yRWFjaCgob3V0cHV0LCBpKSA9PiB7XG4gICAgLy8gV2FsbGV0LW93bmVkIChjaGFuZ2UpIG91dHB1dHMuXG4gICAgaWYgKG91dHB1dC5zY3JpcHRJZCAhPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBPcGFxdWUgb3V0cHV0cyAoZS5nLiBPUF9SRVRVUk4pIGNhcnJ5IG5vIHJlY2lwaWVudCBhZGRyZXNzLlxuICAgIGlmIChvdXRwdXQuYWRkcmVzcyA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBUaGUgb3JpZ2luYWwgY2xpZW50LXBhc3NlZCBVbmlmaWVkIEFkZHJlc3MsIHN0b3JlZCB2ZXJiYXRpbSBpbiB0aGUgUFNCVCdzIGtleS12YWx1ZVxuICAgIC8vIHBhaXJzOiB0aGUgb3JjaGFyZCBQQ1pUIGZvciBhIHNoaWVsZGVkIG91dHB1dCAocGFyc2VkIGBhZGRyZXNzYCByZXBvcnRzIGl0IGluIGZ1bGwpLCB0aGVcbiAgICAvLyB0cmFuc3BhcmVudC1vdXRwdXQgcHJvcHJpZXRhcnkgbWFwIGZvciBhIHY0IHRyYW5zcGFyZW50IG91dHB1dC5cbiAgICBjb25zdCB1bmlmaWVkQWRkcmVzcyA9IG91dHB1dC5pc1NoaWVsZGVkID8gb3V0cHV0LmFkZHJlc3MgOiBwc2J0LnRyYW5zcGFyZW50T3V0cHV0VW5pZmllZEFkZHJlc3MoaSkgPz8gdW5kZWZpbmVkO1xuICAgIHJlY2lwaWVudHMucHVzaCh7XG4gICAgICBhbW91bnQ6IG91dHB1dC52YWx1ZSxcbiAgICAgIGFkZHJlc3M6IG91dHB1dC5hZGRyZXNzLFxuICAgICAgc2NyaXB0OiBvdXRwdXQuc2NyaXB0LFxuICAgICAgdW5pZmllZEFkZHJlc3MsXG4gICAgICBkZXN0aW5hdGlvbjogb3V0cHV0LmlzU2hpZWxkZWRcbiAgICAgICAgPyB7IGtpbmQ6ICd6Y2FzaFNoaWVsZGVkJywgdW5pZmllZEFkZHJlc3M6IG91dHB1dC5hZGRyZXNzIH1cbiAgICAgICAgOiB1bmlmaWVkQWRkcmVzc1xuICAgICAgICA/IHsga2luZDogJ3pjYXNoVW5pZmllZFRyYW5zcGFyZW50JywgdW5pZmllZEFkZHJlc3MgfVxuICAgICAgICA6IHsga2luZDogJ3RyYW5zcGFyZW50JyB9LFxuICAgIH0pO1xuICB9KTtcbiAgcmV0dXJuIHJlY2lwaWVudHM7XG59XG5cbi8qKlxuICogSW5mZXIgdGhlIFVuaWZpZWQtQWRkcmVzcyByZWNpcGllbnQgcHJlZmVyZW5jZSBmb3IgYSBaY2FzaCB0cmFuc2FjdGlvbiB3aGVuIHRoZSBjYWxsZXIgZGlkXG4gKiBub3QgcGFzcyBvbmUg4oCUIHRoZSBjb3VudGVycGFydCBvZiB3YWxsZXQtcGxhdGZvcm0ncyB1dHhvLWNvcmUgYGJ1aWxkVHJhbnNhY3Rpb25gXG4gKiBgY2xhc3NpZnlSZWNpcGllbnRTaGllbGRlZG5lc3NgLlxuICpcbiAqIEEgcmVjaXBpZW50IHRoYXQgcmVzb2x2ZXMgdG8gYSB0cmFuc3BhcmVudCBvdXRwdXQg4oCUIGFuIG9yZGluYXJ5IHRyYW5zcGFyZW50IGFkZHJlc3MsIG9yIGFcbiAqIFVuaWZpZWQgQWRkcmVzcyBjYXJyeWluZyBhIHRyYW5zcGFyZW50IHJlY2VpdmVyIOKAlCBpcyBjbGFzc2lmaWVkIGAndHJhbnNwYXJlbnQnYDsgYSBVbmlmaWVkXG4gKiBBZGRyZXNzIGNhcnJ5aW5nIG9ubHkgYW4gT3JjaGFyZC9Jcm9ud29vZCByZWNlaXZlciBpcyBjbGFzc2lmaWVkIGAnc2hpZWxkZWQnYC4gQSBtaXggb2ZcbiAqIHNoaWVsZGVkIGFuZCB0cmFuc3BhcmVudCByZWNpcGllbnRzIGlzIHJlamVjdGVkLiBBbiBhZGRyZXNzIHRoYXQgaXMgbmVpdGhlciBhIHRyYW5zcGFyZW50XG4gKiBhZGRyZXNzIG5vciBhIFVuaWZpZWQgQWRkcmVzcyBwcm9wYWdhdGVzIHRoZSBVbmlmaWVkLUFkZHJlc3MgcGFyc2UgZXJyb3Ig4oCUIGl0IGlzIG5vdFxuICogc2lsZW50bHkgZGVmYXVsdGVkIHRvIGAndHJhbnNwYXJlbnQnYC5cbiAqXG4gKiBAcmV0dXJucyBgJ3NoaWVsZGVkJ2Agd2hlbiBldmVyeSByZWNpcGllbnQgcmVzb2x2ZXMgc2hpZWxkZWQsIGB1bmRlZmluZWRgIHdoZW4gZXZlcnlcbiAqICAgcmVjaXBpZW50IHJlc29sdmVzIHRyYW5zcGFyZW50ICh0aGUgYnVpbGQncyBkZWZhdWx0KS4gVGhlIGAndHJhbnNwYXJlbnQnYCBhcm0gb2YgdGhlXG4gKiAgIHJldHVybiB0eXBlIGV4aXN0cyBzbyBjYWxsZXJzIGNhbiBwYXNzIHRoZSBleHBsaWNpdCBwcmVmZXJlbmNlIHRocm91Z2ggdW5jaGFuZ2VkOyB0aGlzXG4gKiAgIGZ1bmN0aW9uIGl0c2VsZiBuZXZlciByZXR1cm5zIGAndHJhbnNwYXJlbnQnYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFVuaWZpZWRSZWNpcGllbnRQcmVmZXJlbmNlKFxuICBuYW1lOiBaY2FzaENvaW5OYW1lLFxuICByZWNpcGllbnRzOiB7IGFkZHJlc3M6IHN0cmluZyB8IHVuZGVmaW5lZCB9W11cbik6IFVuaWZpZWRSZWNpcGllbnRQcmVmZXJlbmNlIHwgdW5kZWZpbmVkIHtcbiAgY29uc3Qgc2hpZWxkZWRuZXNzID0gcmVjaXBpZW50cy5tYXAoKHJlY2lwaWVudCkgPT4ge1xuICAgIGlmIChyZWNpcGllbnQuYWRkcmVzcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBSYXcgc2NyaXB0IGluaGVyZW50bHkgdHJhbnNwYXJlbnQuXG4gICAgICByZXR1cm4gJ3RyYW5zcGFyZW50JyBhcyBjb25zdDtcbiAgICB9XG4gICAgLy8gT3JkaW5hcnkgdHJhbnNwYXJlbnQgYWRkcmVzcywgb3IgYSBVbmlmaWVkIEFkZHJlc3MgY2FycnlpbmcgYSB0cmFuc3BhcmVudCByZWNlaXZlcjpcbiAgICAvLyByZXNvbHZlcyB0cmFuc3BhcmVudGx5IGVpdGhlciB3YXkgKHRoZSBidWlsZCdzIGRlZmF1bHQgd2hlbiBubyBwcmVmZXJlbmNlIGlzIGdpdmVuKS5cbiAgICBpZiAoemNhc2hBZGRyZXNzLmhhc1RyYW5zcGFyZW50UmVjZWl2ZXIocmVjaXBpZW50LmFkZHJlc3MsIG5hbWUpKSB7XG4gICAgICByZXR1cm4gJ3RyYW5zcGFyZW50JyBhcyBjb25zdDtcbiAgICB9XG4gICAgLy8gQSBzaGllbGRlZCAoT3JjaGFyZC9Jcm9ud29vZC1vbmx5KSBVbmlmaWVkIEFkZHJlc3MgaXMgdGhlIG9ubHkgcmVtYWluaW5nIHJlc29sdmFibGVcbiAgICAvLyBmb3JtLiBBbiBhZGRyZXNzIHRoYXQgaXMgbm9uZSBvZiB0aGUgYWJvdmUgcHJvcGFnYXRlcyB0aGUgcGFyc2UgZXJyb3IgaW5zdGVhZCBvZlxuICAgIC8vIGFzc3VtaW5nIGEgZGVmYXVsdC5cbiAgICBjb25zdCB1bmlmaWVkID0gZml4ZWRTY3JpcHRXYWxsZXQuWmNhc2hVbmlmaWVkQWRkcmVzcy5wYXJzZShyZWNpcGllbnQuYWRkcmVzcywgbmFtZSk7XG4gICAgaWYgKHVuaWZpZWQuaGFzT3JjaGFyZFJlY2VpdmVyKSB7XG4gICAgICByZXR1cm4gJ3NoaWVsZGVkJyBhcyBjb25zdDtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGBhZGRyZXNzICR7cmVjaXBpZW50LmFkZHJlc3N9IGNhcnJpZXMgbm8gdHJhbnNwYXJlbnQgb3IgT3JjaGFyZCByZWNlaXZlcmApO1xuICB9KTtcbiAgY29uc3QgaGFzU2hpZWxkZWQgPSBzaGllbGRlZG5lc3MuaW5jbHVkZXMoJ3NoaWVsZGVkJyk7XG4gIGNvbnN0IGhhc1RyYW5zcGFyZW50ID0gc2hpZWxkZWRuZXNzLmluY2x1ZGVzKCd0cmFuc3BhcmVudCcpO1xuICBpZiAoaGFzU2hpZWxkZWQgJiYgaGFzVHJhbnNwYXJlbnQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01peGVkIHNoaWVsZGVkIGFuZCB0cmFuc3BhcmVudCByZWNpcGllbnRzIGFyZSBub3Qgc3VwcG9ydGVkJyk7XG4gIH1cbiAgcmV0dXJuIGhhc1NoaWVsZGVkID8gJ3NoaWVsZGVkJyA6IHVuZGVmaW5lZDtcbn1cbiJdfQ==
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvaW1wbC96ZWMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8qKiBBIFpjYXNoIGNvaW4gbmFtZSDigJQgdGhlIG9ubHkgVVRYTyBjb2lucyB3aXRoIHNoaWVsZGVkIChPcmNoYXJkL0lyb253b29kKSBzdXBwb3J0LiAqL1xuZXhwb3J0IHR5cGUgWmNhc2hDb2luTmFtZSA9ICd6ZWMnIHwgJ3R6ZWMnO1xuIl19
@@ -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"}
@@ -1,11 +1,27 @@
1
1
  import { AbstractUtxoCoin } from '../../abstractUtxoCoin';
2
+ import { ZecAddressCodec } from './address';
2
3
  export class Zec extends AbstractUtxoCoin {
3
4
  constructor(bitgo) {
4
5
  super(bitgo);
5
6
  this.name = 'zec';
6
7
  }
8
+ /**
9
+ * ZEC shielded (Orchard/Ironwood) custodial wallets use RedPallas threshold keys.
10
+ * Transparent (secp256k1 multisig) flows are unaffected: MPCAlgorithm is only
11
+ * consulted on the TSS custodial wallet-creation path.
12
+ * @inheritdoc
13
+ */
14
+ getMPCAlgorithm() {
15
+ return 'redpallas';
16
+ }
7
17
  static createInstance(bitgo) {
8
18
  return new Zec(bitgo);
9
19
  }
20
+ get addressCodec() {
21
+ return new ZecAddressCodec(this.name, this.wasmName);
22
+ }
23
+ isValidAddress(address, param) {
24
+ return this.addressCodec.isValidAddress(address);
25
+ }
10
26
  }
11
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2ltcGwvemVjL3plYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFLQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUcxRCxNQUFNLE9BQU8sR0FBSSxTQUFRLGdCQUFnQjtJQUd2QyxZQUFZLEtBQWdCO1FBQzFCLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUhOLFNBQUksR0FBaUIsS0FBSyxDQUFDO0lBSXBDLENBQUM7SUFFRCxNQUFNLENBQUMsY0FBYyxDQUFDLEtBQWdCO1FBQ3BDLE9BQU8sSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDeEIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAcHJldHRpZXJcbiAqL1xuaW1wb3J0IHsgQml0R29CYXNlIH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcblxuaW1wb3J0IHsgQWJzdHJhY3RVdHhvQ29pbiB9IGZyb20gJy4uLy4uL2Fic3RyYWN0VXR4b0NvaW4nO1xuaW1wb3J0IHsgVXR4b0NvaW5OYW1lIH0gZnJvbSAnLi4vLi4vbmFtZXMnO1xuXG5leHBvcnQgY2xhc3MgWmVjIGV4dGVuZHMgQWJzdHJhY3RVdHhvQ29pbiB7XG4gIHJlYWRvbmx5IG5hbWU6IFV0eG9Db2luTmFtZSA9ICd6ZWMnO1xuXG4gIGNvbnN0cnVjdG9yKGJpdGdvOiBCaXRHb0Jhc2UpIHtcbiAgICBzdXBlcihiaXRnbyk7XG4gIH1cblxuICBzdGF0aWMgY3JlYXRlSW5zdGFuY2UoYml0Z286IEJpdEdvQmFzZSk6IFplYyB7XG4gICAgcmV0dXJuIG5ldyBaZWMoYml0Z28pO1xuICB9XG59XG4iXX0=
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2ltcGwvemVjL3plYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFLQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUcxRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRTVDLE1BQU0sT0FBTyxHQUFJLFNBQVEsZ0JBQWdCO0lBR3ZDLFlBQVksS0FBZ0I7UUFDMUIsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBSE4sU0FBSSxHQUFpQixLQUFLLENBQUM7SUFJcEMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsZUFBZTtRQUNiLE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxNQUFNLENBQUMsY0FBYyxDQUFDLEtBQWdCO1FBQ3BDLE9BQU8sSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDeEIsQ0FBQztJQUVELElBQWEsWUFBWTtRQUN2QixPQUFPLElBQUksZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFRCxjQUFjLENBQUMsT0FBZSxFQUFFLEtBQW1FO1FBQ2pHLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbkQsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAcHJldHRpZXJcbiAqL1xuaW1wb3J0IHsgQml0R29CYXNlLCBNUENBbGdvcml0aG0gfSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuXG5pbXBvcnQgeyBBYnN0cmFjdFV0eG9Db2luIH0gZnJvbSAnLi4vLi4vYWJzdHJhY3RVdHhvQ29pbic7XG5pbXBvcnQgeyBVdHhvQ29pbk5hbWUgfSBmcm9tICcuLi8uLi9uYW1lcyc7XG5cbmltcG9ydCB7IFplY0FkZHJlc3NDb2RlYyB9IGZyb20gJy4vYWRkcmVzcyc7XG5cbmV4cG9ydCBjbGFzcyBaZWMgZXh0ZW5kcyBBYnN0cmFjdFV0eG9Db2luIHtcbiAgcmVhZG9ubHkgbmFtZTogVXR4b0NvaW5OYW1lID0gJ3plYyc7XG5cbiAgY29uc3RydWN0b3IoYml0Z286IEJpdEdvQmFzZSkge1xuICAgIHN1cGVyKGJpdGdvKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBaRUMgc2hpZWxkZWQgKE9yY2hhcmQvSXJvbndvb2QpIGN1c3RvZGlhbCB3YWxsZXRzIHVzZSBSZWRQYWxsYXMgdGhyZXNob2xkIGtleXMuXG4gICAqIFRyYW5zcGFyZW50IChzZWNwMjU2azEgbXVsdGlzaWcpIGZsb3dzIGFyZSB1bmFmZmVjdGVkOiBNUENBbGdvcml0aG0gaXMgb25seVxuICAgKiBjb25zdWx0ZWQgb24gdGhlIFRTUyBjdXN0b2RpYWwgd2FsbGV0LWNyZWF0aW9uIHBhdGguXG4gICAqIEBpbmhlcml0ZG9jXG4gICAqL1xuICBnZXRNUENBbGdvcml0aG0oKTogTVBDQWxnb3JpdGhtIHtcbiAgICByZXR1cm4gJ3JlZHBhbGxhcyc7XG4gIH1cblxuICBzdGF0aWMgY3JlYXRlSW5zdGFuY2UoYml0Z286IEJpdEdvQmFzZSk6IFplYyB7XG4gICAgcmV0dXJuIG5ldyBaZWMoYml0Z28pO1xuICB9XG5cbiAgb3ZlcnJpZGUgZ2V0IGFkZHJlc3NDb2RlYygpOiBaZWNBZGRyZXNzQ29kZWMge1xuICAgIHJldHVybiBuZXcgWmVjQWRkcmVzc0NvZGVjKHRoaXMubmFtZSwgdGhpcy53YXNtTmFtZSk7XG4gIH1cblxuICBpc1ZhbGlkQWRkcmVzcyhhZGRyZXNzOiBzdHJpbmcsIHBhcmFtPzogeyBhbnlGb3JtYXQ/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"}
package/dist/esm/names.js CHANGED
@@ -1,9 +1,12 @@
1
+ import { isCoinName } from '@bitgo/wasm-utxo';
1
2
  export const utxoCoinsMainnet = ['btc', 'bch', 'bcha', 'bsv', 'btg', 'dash', 'doge', 'ltc', 'pearl', 'zec'];
2
3
  export const utxoCoinsTestnet = [
3
4
  'tbtc',
4
5
  'tbtc4',
5
6
  'tbtcsig',
6
7
  'tbtcbgsig',
8
+ 'tbtcstx',
9
+ 'tbtcstxprivate1',
7
10
  'tbch',
8
11
  'tbcha',
9
12
  'tbsv',
@@ -14,6 +17,12 @@ export const utxoCoinsTestnet = [
14
17
  'tpearl',
15
18
  'tzec',
16
19
  ];
20
+ export function toWasmUtxoCoinName(coinName) {
21
+ if (!isCoinName(coinName)) {
22
+ throw new Error(`coin ${coinName} is not supported by wasm-utxo`);
23
+ }
24
+ return coinName;
25
+ }
17
26
  export function isUtxoCoinNameMainnet(coinName) {
18
27
  return utxoCoinsMainnet.includes(coinName);
19
28
  }
@@ -31,6 +40,8 @@ export function getMainnetCoinName(coinName) {
31
40
  case 'tbtc4':
32
41
  case 'tbtcsig':
33
42
  case 'tbtcbgsig':
43
+ case 'tbtcstx':
44
+ case 'tbtcstxprivate1':
34
45
  return 'btc';
35
46
  default:
36
47
  return coinName.slice(1);
@@ -61,6 +72,9 @@ function getBaseNameFromMainnet(coinName) {
61
72
  }
62
73
  }
63
74
  export function getFullNameFromCoinName(coinName) {
75
+ if (coinName === 'tbtcstxprivate1') {
76
+ return 'Stacks Bitcoin (Private-1 Regtest)';
77
+ }
64
78
  let prefix;
65
79
  switch (coinName) {
66
80
  case 'tbtc4':
@@ -72,6 +86,9 @@ export function getFullNameFromCoinName(coinName) {
72
86
  case 'tbtcbgsig':
73
87
  prefix = 'BitGo Signet ';
74
88
  break;
89
+ case 'tbtcstx':
90
+ prefix = 'Stacks ';
91
+ break;
75
92
  default:
76
93
  prefix = isUtxoCoinNameTestnet(coinName) ? 'Testnet ' : '';
77
94
  }
@@ -83,4 +100,4 @@ export function isTestnetCoin(coinName) {
83
100
  export function isMainnetCoin(coinName) {
84
101
  return isUtxoCoinNameMainnet(coinName);
85
102
  }
86
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmFtZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbmFtZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQVUsQ0FBQztBQUNySCxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRztJQUM5QixNQUFNO0lBQ04sT0FBTztJQUNQLFNBQVM7SUFDVCxXQUFXO0lBQ1gsTUFBTTtJQUNOLE9BQU87SUFDUCxNQUFNO0lBQ04sTUFBTTtJQUNOLE9BQU87SUFDUCxPQUFPO0lBQ1AsTUFBTTtJQUNOLFFBQVE7SUFDUixNQUFNO0NBQ0UsQ0FBQztBQU1YLE1BQU0sVUFBVSxxQkFBcUIsQ0FBQyxRQUFnQjtJQUNwRCxPQUFPLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxRQUErQixDQUFDLENBQUM7QUFDcEUsQ0FBQztBQUVELE1BQU0sVUFBVSxxQkFBcUIsQ0FBQyxRQUFnQjtJQUNwRCxPQUFPLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxRQUErQixDQUFDLENBQUM7QUFDcEUsQ0FBQztBQUVELE1BQU0sVUFBVSxjQUFjLENBQUMsUUFBZ0I7SUFDN0MsT0FBTyxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsSUFBSSxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUM1RSxDQUFDO0FBRUQsTUFBTSxVQUFVLGtCQUFrQixDQUFDLFFBQXNCO0lBQ3ZELElBQUkscUJBQXFCLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUNwQyxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBQ0QsUUFBUSxRQUFRLEVBQUUsQ0FBQztRQUNqQixLQUFLLE9BQU8sQ0FBQztRQUNiLEtBQUssU0FBUyxDQUFDO1FBQ2YsS0FBSyxXQUFXO1lBQ2QsT0FBTyxLQUFLLENBQUM7UUFDZjtZQUNFLE9BQU8sUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQXdCLENBQUM7SUFDcEQsQ0FBQztBQUNILENBQUM7QUFFRCxTQUFTLHNCQUFzQixDQUFDLFFBQTZCO0lBQzNELFFBQVEsUUFBUSxFQUFFLENBQUM7UUFDakIsS0FBSyxLQUFLO1lBQ1IsT0FBTyxTQUFTLENBQUM7UUFDbkIsS0FBSyxLQUFLO1lBQ1IsT0FBTyxjQUFjLENBQUM7UUFDeEIsS0FBSyxNQUFNO1lBQ1QsT0FBTyxhQUFhLENBQUM7UUFDdkIsS0FBSyxLQUFLO1lBQ1IsT0FBTyxjQUFjLENBQUM7UUFDeEIsS0FBSyxLQUFLO1lBQ1IsT0FBTyxZQUFZLENBQUM7UUFDdEIsS0FBSyxNQUFNO1lBQ1QsT0FBTyxNQUFNLENBQUM7UUFDaEIsS0FBSyxNQUFNO1lBQ1QsT0FBTyxVQUFVLENBQUM7UUFDcEIsS0FBSyxLQUFLO1lBQ1IsT0FBTyxVQUFVLENBQUM7UUFDcEIsS0FBSyxPQUFPO1lBQ1YsT0FBTyxPQUFPLENBQUM7UUFDakIsS0FBSyxLQUFLO1lBQ1IsT0FBTyxPQUFPLENBQUM7SUFDbkIsQ0FBQztBQUNILENBQUM7QUFFRCxNQUFNLFVBQVUsdUJBQXVCLENBQUMsUUFBc0I7SUFDNUQsSUFBSSxNQUFjLENBQUM7SUFDbkIsUUFBUSxRQUFRLEVBQUUsQ0FBQztRQUNqQixLQUFLLE9BQU87WUFDVixNQUFNLEdBQUcsV0FBVyxDQUFDO1lBQ3JCLE1BQU07UUFDUixLQUFLLFNBQVM7WUFDWixNQUFNLEdBQUcsZ0JBQWdCLENBQUM7WUFDMUIsTUFBTTtRQUNSLEtBQUssV0FBVztZQUNkLE1BQU0sR0FBRyxlQUFlLENBQUM7WUFDekIsTUFBTTtRQUNSO1lBQ0UsTUFBTSxHQUFHLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUMvRCxDQUFDO0lBRUQsT0FBTyxNQUFNLEdBQUcsc0JBQXNCLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztBQUN2RSxDQUFDO0FBRUQsTUFBTSxVQUFVLGFBQWEsQ0FBQyxRQUFzQjtJQUNsRCxPQUFPLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3pDLENBQUM7QUFFRCxNQUFNLFVBQVUsYUFBYSxDQUFDLFFBQXNCO0lBQ2xELE9BQU8scUJBQXFCLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDekMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCB1dHhvQ29pbnNNYWlubmV0ID0gWydidGMnLCAnYmNoJywgJ2JjaGEnLCAnYnN2JywgJ2J0ZycsICdkYXNoJywgJ2RvZ2UnLCAnbHRjJywgJ3BlYXJsJywgJ3plYyddIGFzIGNvbnN0O1xuZXhwb3J0IGNvbnN0IHV0eG9Db2luc1Rlc3RuZXQgPSBbXG4gICd0YnRjJyxcbiAgJ3RidGM0JyxcbiAgJ3RidGNzaWcnLFxuICAndGJ0Y2Jnc2lnJyxcbiAgJ3RiY2gnLFxuICAndGJjaGEnLFxuICAndGJzdicsXG4gICd0YnRnJyxcbiAgJ3RkYXNoJyxcbiAgJ3Rkb2dlJyxcbiAgJ3RsdGMnLFxuICAndHBlYXJsJyxcbiAgJ3R6ZWMnLFxuXSBhcyBjb25zdDtcblxuZXhwb3J0IHR5cGUgVXR4b0NvaW5OYW1lTWFpbm5ldCA9ICh0eXBlb2YgdXR4b0NvaW5zTWFpbm5ldClbbnVtYmVyXTtcbmV4cG9ydCB0eXBlIFV0eG9Db2luTmFtZVRlc3RuZXQgPSBgdCR7VXR4b0NvaW5OYW1lTWFpbm5ldH1gIHwgJ3RidGNzaWcnIHwgJ3RidGM0JyB8ICd0YnRjYmdzaWcnO1xuZXhwb3J0IHR5cGUgVXR4b0NvaW5OYW1lID0gVXR4b0NvaW5OYW1lTWFpbm5ldCB8IFV0eG9Db2luTmFtZVRlc3RuZXQ7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1V0eG9Db2luTmFtZU1haW5uZXQoY29pbk5hbWU6IHN0cmluZyk6IGNvaW5OYW1lIGlzIFV0eG9Db2luTmFtZU1haW5uZXQge1xuICByZXR1cm4gdXR4b0NvaW5zTWFpbm5ldC5pbmNsdWRlcyhjb2luTmFtZSBhcyBVdHhvQ29pbk5hbWVNYWlubmV0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVXR4b0NvaW5OYW1lVGVzdG5ldChjb2luTmFtZTogc3RyaW5nKTogY29pbk5hbWUgaXMgVXR4b0NvaW5OYW1lVGVzdG5ldCB7XG4gIHJldHVybiB1dHhvQ29pbnNUZXN0bmV0LmluY2x1ZGVzKGNvaW5OYW1lIGFzIFV0eG9Db2luTmFtZVRlc3RuZXQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNVdHhvQ29pbk5hbWUoY29pbk5hbWU6IHN0cmluZyk6IGNvaW5OYW1lIGlzIFV0eG9Db2luTmFtZSB7XG4gIHJldHVybiBpc1V0eG9Db2luTmFtZU1haW5uZXQoY29pbk5hbWUpIHx8IGlzVXR4b0NvaW5OYW1lVGVzdG5ldChjb2luTmFtZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRNYWlubmV0Q29pbk5hbWUoY29pbk5hbWU6IFV0eG9Db2luTmFtZSk6IFV0eG9Db2luTmFtZU1haW5uZXQge1xuICBpZiAoaXNVdHhvQ29pbk5hbWVNYWlubmV0KGNvaW5OYW1lKSkge1xuICAgIHJldHVybiBjb2luTmFtZTtcbiAgfVxuICBzd2l0Y2ggKGNvaW5OYW1lKSB7XG4gICAgY2FzZSAndGJ0YzQnOlxuICAgIGNhc2UgJ3RidGNzaWcnOlxuICAgIGNhc2UgJ3RidGNiZ3NpZyc6XG4gICAgICByZXR1cm4gJ2J0Yyc7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBjb2luTmFtZS5zbGljZSgxKSBhcyBVdHhvQ29pbk5hbWVNYWlubmV0O1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldEJhc2VOYW1lRnJvbU1haW5uZXQoY29pbk5hbWU6IFV0eG9Db2luTmFtZU1haW5uZXQpOiBzdHJpbmcge1xuICBzd2l0Y2ggKGNvaW5OYW1lKSB7XG4gICAgY2FzZSAnYnRjJzpcbiAgICAgIHJldHVybiAnQml0Y29pbic7XG4gICAgY2FzZSAnYmNoJzpcbiAgICAgIHJldHVybiAnQml0Y29pbiBDYXNoJztcbiAgICBjYXNlICdiY2hhJzpcbiAgICAgIHJldHVybiAnQml0Y29pbiBBQkMnO1xuICAgIGNhc2UgJ2J0Zyc6XG4gICAgICByZXR1cm4gJ0JpdGNvaW4gR29sZCc7XG4gICAgY2FzZSAnYnN2JzpcbiAgICAgIHJldHVybiAnQml0Y29pbiBTVic7XG4gICAgY2FzZSAnZGFzaCc6XG4gICAgICByZXR1cm4gJ0Rhc2gnO1xuICAgIGNhc2UgJ2RvZ2UnOlxuICAgICAgcmV0dXJuICdEb2dlY29pbic7XG4gICAgY2FzZSAnbHRjJzpcbiAgICAgIHJldHVybiAnTGl0ZWNvaW4nO1xuICAgIGNhc2UgJ3BlYXJsJzpcbiAgICAgIHJldHVybiAnUGVhcmwnO1xuICAgIGNhc2UgJ3plYyc6XG4gICAgICByZXR1cm4gJ1pDYXNoJztcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RnVsbE5hbWVGcm9tQ29pbk5hbWUoY29pbk5hbWU6IFV0eG9Db2luTmFtZSk6IHN0cmluZyB7XG4gIGxldCBwcmVmaXg6IHN0cmluZztcbiAgc3dpdGNoIChjb2luTmFtZSkge1xuICAgIGNhc2UgJ3RidGM0JzpcbiAgICAgIHByZWZpeCA9ICdUZXN0bmV0NCAnO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAndGJ0Y3NpZyc6XG4gICAgICBwcmVmaXggPSAnUHVibGljIFNpZ25ldCAnO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAndGJ0Y2Jnc2lnJzpcbiAgICAgIHByZWZpeCA9ICdCaXRHbyBTaWduZXQgJztcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBwcmVmaXggPSBpc1V0eG9Db2luTmFtZVRlc3RuZXQoY29pbk5hbWUpID8gJ1Rlc3RuZXQgJyA6ICcnO1xuICB9XG5cbiAgcmV0dXJuIHByZWZpeCArIGdldEJhc2VOYW1lRnJvbU1haW5uZXQoZ2V0TWFpbm5ldENvaW5OYW1lKGNvaW5OYW1lKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1Rlc3RuZXRDb2luKGNvaW5OYW1lOiBVdHhvQ29pbk5hbWUpOiBib29sZWFuIHtcbiAgcmV0dXJuIGlzVXR4b0NvaW5OYW1lVGVzdG5ldChjb2luTmFtZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc01haW5uZXRDb2luKGNvaW5OYW1lOiBVdHhvQ29pbk5hbWUpOiBib29sZWFuIHtcbiAgcmV0dXJuIGlzVXR4b0NvaW5OYW1lTWFpbm5ldChjb2luTmFtZSk7XG59XG4iXX0=
103
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmFtZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbmFtZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBaUIsTUFBTSxrQkFBa0IsQ0FBQztBQUk3RCxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBVSxDQUFDO0FBQ3JILE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHO0lBQzlCLE1BQU07SUFDTixPQUFPO0lBQ1AsU0FBUztJQUNULFdBQVc7SUFDWCxTQUFTO0lBQ1QsaUJBQWlCO0lBQ2pCLE1BQU07SUFDTixPQUFPO0lBQ1AsTUFBTTtJQUNOLE1BQU07SUFDTixPQUFPO0lBQ1AsT0FBTztJQUNQLE1BQU07SUFDTixRQUFRO0lBQ1IsTUFBTTtDQUNFLENBQUM7QUFZWCxNQUFNLFVBQVUsa0JBQWtCLENBQUMsUUFBeUM7SUFDMUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1FBQzFCLE1BQU0sSUFBSSxLQUFLLENBQUMsUUFBUSxRQUFRLGdDQUFnQyxDQUFDLENBQUM7SUFDcEUsQ0FBQztJQUNELE9BQU8sUUFBUSxDQUFDO0FBQ2xCLENBQUM7QUFFRCxNQUFNLFVBQVUscUJBQXFCLENBQUMsUUFBZ0I7SUFDcEQsT0FBTyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsUUFBK0IsQ0FBQyxDQUFDO0FBQ3BFLENBQUM7QUFFRCxNQUFNLFVBQVUscUJBQXFCLENBQUMsUUFBZ0I7SUFDcEQsT0FBTyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsUUFBK0IsQ0FBQyxDQUFDO0FBQ3BFLENBQUM7QUFFRCxNQUFNLFVBQVUsY0FBYyxDQUFDLFFBQWdCO0lBQzdDLE9BQU8scUJBQXFCLENBQUMsUUFBUSxDQUFDLElBQUkscUJBQXFCLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDNUUsQ0FBQztBQUVELE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxRQUFzQjtJQUN2RCxJQUFJLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7UUFDcEMsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUNELFFBQVEsUUFBUSxFQUFFLENBQUM7UUFDakIsS0FBSyxPQUFPLENBQUM7UUFDYixLQUFLLFNBQVMsQ0FBQztRQUNmLEtBQUssV0FBVyxDQUFDO1FBQ2pCLEtBQUssU0FBUyxDQUFDO1FBQ2YsS0FBSyxpQkFBaUI7WUFDcEIsT0FBTyxLQUFLLENBQUM7UUFDZjtZQUNFLE9BQU8sUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQXdCLENBQUM7SUFDcEQsQ0FBQztBQUNILENBQUM7QUFFRCxTQUFTLHNCQUFzQixDQUFDLFFBQTZCO0lBQzNELFFBQVEsUUFBUSxFQUFFLENBQUM7UUFDakIsS0FBSyxLQUFLO1lBQ1IsT0FBTyxTQUFTLENBQUM7UUFDbkIsS0FBSyxLQUFLO1lBQ1IsT0FBTyxjQUFjLENBQUM7UUFDeEIsS0FBSyxNQUFNO1lBQ1QsT0FBTyxhQUFhLENBQUM7UUFDdkIsS0FBSyxLQUFLO1lBQ1IsT0FBTyxjQUFjLENBQUM7UUFDeEIsS0FBSyxLQUFLO1lBQ1IsT0FBTyxZQUFZLENBQUM7UUFDdEIsS0FBSyxNQUFNO1lBQ1QsT0FBTyxNQUFNLENBQUM7UUFDaEIsS0FBSyxNQUFNO1lBQ1QsT0FBTyxVQUFVLENBQUM7UUFDcEIsS0FBSyxLQUFLO1lBQ1IsT0FBTyxVQUFVLENBQUM7UUFDcEIsS0FBSyxPQUFPO1lBQ1YsT0FBTyxPQUFPLENBQUM7UUFDakIsS0FBSyxLQUFLO1lBQ1IsT0FBTyxPQUFPLENBQUM7SUFDbkIsQ0FBQztBQUNILENBQUM7QUFFRCxNQUFNLFVBQVUsdUJBQXVCLENBQUMsUUFBc0I7SUFDNUQsSUFBSSxRQUFRLEtBQUssaUJBQWlCLEVBQUUsQ0FBQztRQUNuQyxPQUFPLG9DQUFvQyxDQUFDO0lBQzlDLENBQUM7SUFFRCxJQUFJLE1BQWMsQ0FBQztJQUNuQixRQUFRLFFBQVEsRUFBRSxDQUFDO1FBQ2pCLEtBQUssT0FBTztZQUNWLE1BQU0sR0FBRyxXQUFXLENBQUM7WUFDckIsTUFBTTtRQUNSLEtBQUssU0FBUztZQUNaLE1BQU0sR0FBRyxnQkFBZ0IsQ0FBQztZQUMxQixNQUFNO1FBQ1IsS0FBSyxXQUFXO1lBQ2QsTUFBTSxHQUFHLGVBQWUsQ0FBQztZQUN6QixNQUFNO1FBQ1IsS0FBSyxTQUFTO1lBQ1osTUFBTSxHQUFHLFNBQVMsQ0FBQztZQUNuQixNQUFNO1FBQ1I7WUFDRSxNQUFNLEdBQUcscUJBQXFCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQy9ELENBQUM7SUFFRCxPQUFPLE1BQU0sR0FBRyxzQkFBc0IsQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0FBQ3ZFLENBQUM7QUFFRCxNQUFNLFVBQVUsYUFBYSxDQUFDLFFBQXNCO0lBQ2xELE9BQU8scUJBQXFCLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDekMsQ0FBQztBQUVELE1BQU0sVUFBVSxhQUFhLENBQUMsUUFBc0I7SUFDbEQsT0FBTyxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUN6QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNDb2luTmFtZSwgdHlwZSBDb2luTmFtZSB9IGZyb20gJ0BiaXRnby93YXNtLXV0eG8nO1xuXG5leHBvcnQgdHlwZSBXYXNtVXR4b0NvaW5OYW1lID0gQ29pbk5hbWU7XG5cbmV4cG9ydCBjb25zdCB1dHhvQ29pbnNNYWlubmV0ID0gWydidGMnLCAnYmNoJywgJ2JjaGEnLCAnYnN2JywgJ2J0ZycsICdkYXNoJywgJ2RvZ2UnLCAnbHRjJywgJ3BlYXJsJywgJ3plYyddIGFzIGNvbnN0O1xuZXhwb3J0IGNvbnN0IHV0eG9Db2luc1Rlc3RuZXQgPSBbXG4gICd0YnRjJyxcbiAgJ3RidGM0JyxcbiAgJ3RidGNzaWcnLFxuICAndGJ0Y2Jnc2lnJyxcbiAgJ3RidGNzdHgnLFxuICAndGJ0Y3N0eHByaXZhdGUxJyxcbiAgJ3RiY2gnLFxuICAndGJjaGEnLFxuICAndGJzdicsXG4gICd0YnRnJyxcbiAgJ3RkYXNoJyxcbiAgJ3Rkb2dlJyxcbiAgJ3RsdGMnLFxuICAndHBlYXJsJyxcbiAgJ3R6ZWMnLFxuXSBhcyBjb25zdDtcblxuZXhwb3J0IHR5cGUgVXR4b0NvaW5OYW1lTWFpbm5ldCA9ICh0eXBlb2YgdXR4b0NvaW5zTWFpbm5ldClbbnVtYmVyXTtcbmV4cG9ydCB0eXBlIFV0eG9Db2luTmFtZVRlc3RuZXQgPVxuICB8IGB0JHtVdHhvQ29pbk5hbWVNYWlubmV0fWBcbiAgfCAndGJ0Y3NpZydcbiAgfCAndGJ0YzQnXG4gIHwgJ3RidGNiZ3NpZydcbiAgfCAndGJ0Y3N0eCdcbiAgfCAndGJ0Y3N0eHByaXZhdGUxJztcbmV4cG9ydCB0eXBlIFV0eG9Db2luTmFtZSA9IFV0eG9Db2luTmFtZU1haW5uZXQgfCBVdHhvQ29pbk5hbWVUZXN0bmV0O1xuXG5leHBvcnQgZnVuY3Rpb24gdG9XYXNtVXR4b0NvaW5OYW1lKGNvaW5OYW1lOiBVdHhvQ29pbk5hbWUgfCBXYXNtVXR4b0NvaW5OYW1lKTogV2FzbVV0eG9Db2luTmFtZSB7XG4gIGlmICghaXNDb2luTmFtZShjb2luTmFtZSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGNvaW4gJHtjb2luTmFtZX0gaXMgbm90IHN1cHBvcnRlZCBieSB3YXNtLXV0eG9gKTtcbiAgfVxuICByZXR1cm4gY29pbk5hbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1V0eG9Db2luTmFtZU1haW5uZXQoY29pbk5hbWU6IHN0cmluZyk6IGNvaW5OYW1lIGlzIFV0eG9Db2luTmFtZU1haW5uZXQge1xuICByZXR1cm4gdXR4b0NvaW5zTWFpbm5ldC5pbmNsdWRlcyhjb2luTmFtZSBhcyBVdHhvQ29pbk5hbWVNYWlubmV0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVXR4b0NvaW5OYW1lVGVzdG5ldChjb2luTmFtZTogc3RyaW5nKTogY29pbk5hbWUgaXMgVXR4b0NvaW5OYW1lVGVzdG5ldCB7XG4gIHJldHVybiB1dHhvQ29pbnNUZXN0bmV0LmluY2x1ZGVzKGNvaW5OYW1lIGFzIFV0eG9Db2luTmFtZVRlc3RuZXQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNVdHhvQ29pbk5hbWUoY29pbk5hbWU6IHN0cmluZyk6IGNvaW5OYW1lIGlzIFV0eG9Db2luTmFtZSB7XG4gIHJldHVybiBpc1V0eG9Db2luTmFtZU1haW5uZXQoY29pbk5hbWUpIHx8IGlzVXR4b0NvaW5OYW1lVGVzdG5ldChjb2luTmFtZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRNYWlubmV0Q29pbk5hbWUoY29pbk5hbWU6IFV0eG9Db2luTmFtZSk6IFV0eG9Db2luTmFtZU1haW5uZXQge1xuICBpZiAoaXNVdHhvQ29pbk5hbWVNYWlubmV0KGNvaW5OYW1lKSkge1xuICAgIHJldHVybiBjb2luTmFtZTtcbiAgfVxuICBzd2l0Y2ggKGNvaW5OYW1lKSB7XG4gICAgY2FzZSAndGJ0YzQnOlxuICAgIGNhc2UgJ3RidGNzaWcnOlxuICAgIGNhc2UgJ3RidGNiZ3NpZyc6XG4gICAgY2FzZSAndGJ0Y3N0eCc6XG4gICAgY2FzZSAndGJ0Y3N0eHByaXZhdGUxJzpcbiAgICAgIHJldHVybiAnYnRjJztcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGNvaW5OYW1lLnNsaWNlKDEpIGFzIFV0eG9Db2luTmFtZU1haW5uZXQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0QmFzZU5hbWVGcm9tTWFpbm5ldChjb2luTmFtZTogVXR4b0NvaW5OYW1lTWFpbm5ldCk6IHN0cmluZyB7XG4gIHN3aXRjaCAoY29pbk5hbWUpIHtcbiAgICBjYXNlICdidGMnOlxuICAgICAgcmV0dXJuICdCaXRjb2luJztcbiAgICBjYXNlICdiY2gnOlxuICAgICAgcmV0dXJuICdCaXRjb2luIENhc2gnO1xuICAgIGNhc2UgJ2JjaGEnOlxuICAgICAgcmV0dXJuICdCaXRjb2luIEFCQyc7XG4gICAgY2FzZSAnYnRnJzpcbiAgICAgIHJldHVybiAnQml0Y29pbiBHb2xkJztcbiAgICBjYXNlICdic3YnOlxuICAgICAgcmV0dXJuICdCaXRjb2luIFNWJztcbiAgICBjYXNlICdkYXNoJzpcbiAgICAgIHJldHVybiAnRGFzaCc7XG4gICAgY2FzZSAnZG9nZSc6XG4gICAgICByZXR1cm4gJ0RvZ2Vjb2luJztcbiAgICBjYXNlICdsdGMnOlxuICAgICAgcmV0dXJuICdMaXRlY29pbic7XG4gICAgY2FzZSAncGVhcmwnOlxuICAgICAgcmV0dXJuICdQZWFybCc7XG4gICAgY2FzZSAnemVjJzpcbiAgICAgIHJldHVybiAnWkNhc2gnO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGdWxsTmFtZUZyb21Db2luTmFtZShjb2luTmFtZTogVXR4b0NvaW5OYW1lKTogc3RyaW5nIHtcbiAgaWYgKGNvaW5OYW1lID09PSAndGJ0Y3N0eHByaXZhdGUxJykge1xuICAgIHJldHVybiAnU3RhY2tzIEJpdGNvaW4gKFByaXZhdGUtMSBSZWd0ZXN0KSc7XG4gIH1cblxuICBsZXQgcHJlZml4OiBzdHJpbmc7XG4gIHN3aXRjaCAoY29pbk5hbWUpIHtcbiAgICBjYXNlICd0YnRjNCc6XG4gICAgICBwcmVmaXggPSAnVGVzdG5ldDQgJztcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3RidGNzaWcnOlxuICAgICAgcHJlZml4ID0gJ1B1YmxpYyBTaWduZXQgJztcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3RidGNiZ3NpZyc6XG4gICAgICBwcmVmaXggPSAnQml0R28gU2lnbmV0ICc7XG4gICAgICBicmVhaztcbiAgICBjYXNlICd0YnRjc3R4JzpcbiAgICAgIHByZWZpeCA9ICdTdGFja3MgJztcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBwcmVmaXggPSBpc1V0eG9Db2luTmFtZVRlc3RuZXQoY29pbk5hbWUpID8gJ1Rlc3RuZXQgJyA6ICcnO1xuICB9XG5cbiAgcmV0dXJuIHByZWZpeCArIGdldEJhc2VOYW1lRnJvbU1haW5uZXQoZ2V0TWFpbm5ldENvaW5OYW1lKGNvaW5OYW1lKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1Rlc3RuZXRDb2luKGNvaW5OYW1lOiBVdHhvQ29pbk5hbWUpOiBib29sZWFuIHtcbiAgcmV0dXJuIGlzVXR4b0NvaW5OYW1lVGVzdG5ldChjb2luTmFtZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc01haW5uZXRDb2luKGNvaW5OYW1lOiBVdHhvQ29pbk5hbWUpOiBib29sZWFuIHtcbiAgcmV0dXJuIGlzVXR4b0NvaW5OYW1lTWFpbm5ldChjb2luTmFtZSk7XG59XG4iXX0=
@@ -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
  */
@@ -1 +1 @@
1
- {"version":3,"file":"backupKeyRecovery.d.ts","sourceRoot":"","sources":["../../../src/recovery/backupKeyRecovery.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"backupKeyRecovery.d.ts","sourceRoot":"","sources":["../../../src/recovery/backupKeyRecovery.ts"],"names":[],"mappings":"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"}