@bitgo/sdk-coin-dot 4.11.7 → 4.12.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 (316) hide show
  1. package/dist/{src → cjs/src}/dot.d.ts +0 -7
  2. package/dist/cjs/src/dot.d.ts.map +1 -0
  3. package/dist/{src → cjs/src}/dot.js +1 -1
  4. package/dist/cjs/src/index.d.ts.map +1 -0
  5. package/dist/{src → cjs/src}/index.js +1 -1
  6. package/dist/cjs/src/lib/addressInitializationBuilder.d.ts.map +1 -0
  7. package/dist/cjs/src/lib/addressInitializationBuilder.js +182 -0
  8. package/dist/cjs/src/lib/batchTransactionBuilder.d.ts.map +1 -0
  9. package/dist/cjs/src/lib/batchTransactionBuilder.js +229 -0
  10. package/dist/cjs/src/lib/claimBuilder.d.ts.map +1 -0
  11. package/dist/cjs/src/lib/claimBuilder.js +117 -0
  12. package/dist/cjs/src/lib/errors.d.ts.map +1 -0
  13. package/dist/cjs/src/lib/errors.js +19 -0
  14. package/dist/cjs/src/lib/iface.d.ts.map +1 -0
  15. package/dist/cjs/src/lib/iface.js +128 -0
  16. package/dist/cjs/src/lib/iface_utils.d.ts.map +1 -0
  17. package/dist/cjs/src/lib/iface_utils.js +92 -0
  18. package/dist/{src → cjs/src}/lib/index.d.ts +2 -0
  19. package/dist/cjs/src/lib/index.d.ts.map +1 -0
  20. package/dist/{src → cjs/src}/lib/index.js +4 -2
  21. package/dist/cjs/src/lib/keyPair.d.ts.map +1 -0
  22. package/dist/cjs/src/lib/keyPair.js +117 -0
  23. package/dist/cjs/src/lib/nativeTransferBuilder.d.ts.map +1 -0
  24. package/dist/cjs/src/lib/nativeTransferBuilder.js +219 -0
  25. package/dist/cjs/src/lib/proxyBuilder.d.ts.map +1 -0
  26. package/dist/cjs/src/lib/proxyBuilder.js +116 -0
  27. package/dist/cjs/src/lib/singletonRegistry.d.ts.map +1 -0
  28. package/dist/cjs/src/lib/singletonRegistry.js +20 -0
  29. package/dist/cjs/src/lib/stakingBuilder.d.ts.map +1 -0
  30. package/dist/cjs/src/lib/stakingBuilder.js +167 -0
  31. package/dist/cjs/src/lib/transaction.d.ts.map +1 -0
  32. package/dist/cjs/src/lib/transaction.js +624 -0
  33. package/dist/cjs/src/lib/transactionBuilder.d.ts.map +1 -0
  34. package/dist/cjs/src/lib/transactionBuilder.js +351 -0
  35. package/dist/cjs/src/lib/transactionBuilderFactory.d.ts.map +1 -0
  36. package/dist/cjs/src/lib/transactionBuilderFactory.js +104 -0
  37. package/dist/cjs/src/lib/transferBuilder.d.ts.map +1 -0
  38. package/dist/cjs/src/lib/transferBuilder.js +11 -0
  39. package/dist/cjs/src/lib/txnSchema.d.ts.map +1 -0
  40. package/dist/cjs/src/lib/txnSchema.js +117 -0
  41. package/dist/cjs/src/lib/unnominateBuilder.d.ts.map +1 -0
  42. package/dist/cjs/src/lib/unnominateBuilder.js +48 -0
  43. package/dist/cjs/src/lib/unstakeBuilder.d.ts.map +1 -0
  44. package/dist/cjs/src/lib/unstakeBuilder.js +87 -0
  45. package/dist/cjs/src/lib/utils.d.ts.map +1 -0
  46. package/dist/cjs/src/lib/utils.js +491 -0
  47. package/dist/cjs/src/lib/wasmParser.d.ts +57 -0
  48. package/dist/cjs/src/lib/wasmParser.d.ts.map +1 -0
  49. package/dist/cjs/src/lib/wasmParser.js +345 -0
  50. package/dist/cjs/src/lib/withdrawUnstakedBuilder.d.ts.map +1 -0
  51. package/dist/cjs/src/lib/withdrawUnstakedBuilder.js +88 -0
  52. package/dist/cjs/src/register.d.ts.map +1 -0
  53. package/dist/cjs/src/register.js +11 -0
  54. package/dist/cjs/src/resources/index.d.ts.map +1 -0
  55. package/dist/{src → cjs/src}/resources/index.js +1 -1
  56. package/dist/cjs/src/resources/mainnet.d.ts.map +1 -0
  57. package/dist/cjs/src/resources/mainnet.js +5 -0
  58. package/dist/cjs/src/resources/polkadotAssetHub.d.ts.map +1 -0
  59. package/dist/cjs/src/resources/polkadotAssetHub.js +5 -0
  60. package/dist/cjs/src/resources/westend.d.ts.map +1 -0
  61. package/dist/{test/resources/testnet.js → cjs/src/resources/westend.js} +3 -3
  62. package/dist/cjs/src/resources/westendAssetHub.d.ts.map +1 -0
  63. package/dist/{src → cjs/src}/resources/westendAssetHub.js +1 -1
  64. package/dist/cjs/src/tdot.d.ts.map +1 -0
  65. package/dist/cjs/src/tdot.js +27 -0
  66. package/dist/cjs/test/fixtures.d.ts.map +1 -0
  67. package/dist/cjs/test/fixtures.js +439 -0
  68. package/dist/cjs/test/resources/index.d.ts.map +1 -0
  69. package/dist/cjs/test/resources/index.js +157 -0
  70. package/dist/cjs/test/resources/testnet.d.ts.map +1 -0
  71. package/dist/{src/resources/westend.js → cjs/test/resources/testnet.js} +3 -3
  72. package/dist/{test → cjs/test}/unit/address.d.ts.map +1 -1
  73. package/dist/cjs/test/unit/address.js +45 -0
  74. package/dist/{test → cjs/test}/unit/dot.d.ts.map +1 -1
  75. package/dist/cjs/test/unit/dot.js +880 -0
  76. package/dist/{test → cjs/test}/unit/keypair.d.ts.map +1 -1
  77. package/dist/cjs/test/unit/keypair.js +111 -0
  78. package/dist/cjs/test/unit/transaction.d.ts.map +1 -0
  79. package/dist/cjs/test/unit/transaction.js +269 -0
  80. package/dist/cjs/test/unit/transactionBuilder/addressInitializationBuilder.d.ts.map +1 -0
  81. package/dist/cjs/test/unit/transactionBuilder/addressInitializationBuilder.js +265 -0
  82. package/dist/cjs/test/unit/transactionBuilder/base.d.ts.map +1 -0
  83. package/dist/cjs/test/unit/transactionBuilder/base.js +233 -0
  84. package/dist/cjs/test/unit/transactionBuilder/batchTransactionBuilder.d.ts.map +1 -0
  85. package/dist/cjs/test/unit/transactionBuilder/batchTransactionBuilder.js +521 -0
  86. package/dist/cjs/test/unit/transactionBuilder/claimBuilder.d.ts.map +1 -0
  87. package/dist/cjs/test/unit/transactionBuilder/claimBuilder.js +129 -0
  88. package/dist/cjs/test/unit/transactionBuilder/proxyBuilder.d.ts.map +1 -0
  89. package/dist/cjs/test/unit/transactionBuilder/proxyBuilder.js +88 -0
  90. package/dist/cjs/test/unit/transactionBuilder/singeltonRegistry.d.ts.map +1 -0
  91. package/dist/{test → cjs/test}/unit/transactionBuilder/singeltonRegistry.js +1 -1
  92. package/dist/cjs/test/unit/transactionBuilder/stakingBuilder.d.ts.map +1 -0
  93. package/dist/cjs/test/unit/transactionBuilder/stakingBuilder.js +235 -0
  94. package/dist/cjs/test/unit/transactionBuilder/transactionBuilderFactory.d.ts.map +1 -0
  95. package/dist/cjs/test/unit/transactionBuilder/transactionBuilderFactory.js +107 -0
  96. package/dist/cjs/test/unit/transactionBuilder/transferBuilder.d.ts.map +1 -0
  97. package/dist/cjs/test/unit/transactionBuilder/transferBuilder.js +437 -0
  98. package/dist/cjs/test/unit/transactionBuilder/unnominateBuilder.d.ts.map +1 -0
  99. package/dist/cjs/test/unit/transactionBuilder/unnominateBuilder.js +97 -0
  100. package/dist/cjs/test/unit/transactionBuilder/unstakeBuilder.d.ts.map +1 -0
  101. package/dist/cjs/test/unit/transactionBuilder/unstakeBuilder.js +116 -0
  102. package/dist/cjs/test/unit/transactionBuilder/withdrawUnstakedBuilder.d.ts.map +1 -0
  103. package/dist/cjs/test/unit/transactionBuilder/withdrawUnstakedBuilder.js +115 -0
  104. package/dist/{test → cjs/test}/unit/utils.d.ts.map +1 -1
  105. package/dist/cjs/test/unit/utils.js +117 -0
  106. package/dist/cjs/test/unit/wasmBuilderByteComparison.d.ts +22 -0
  107. package/dist/cjs/test/unit/wasmBuilderByteComparison.d.ts.map +1 -0
  108. package/dist/cjs/test/unit/wasmBuilderByteComparison.js +197 -0
  109. package/dist/cjs/test/unit/wasmParserExplanation.d.ts +15 -0
  110. package/dist/cjs/test/unit/wasmParserExplanation.d.ts.map +1 -0
  111. package/dist/cjs/test/unit/wasmParserExplanation.js +147 -0
  112. package/dist/cjs/tsconfig.tsbuildinfo +1 -0
  113. package/dist/esm/dot.d.ts +147 -0
  114. package/dist/esm/dot.d.ts.map +1 -0
  115. package/dist/esm/dot.js +570 -0
  116. package/dist/esm/index.d.ts +5 -0
  117. package/dist/esm/index.js +5 -0
  118. package/dist/esm/lib/addressInitializationBuilder.d.ts +79 -0
  119. package/dist/esm/lib/addressInitializationBuilder.js +175 -0
  120. package/dist/esm/lib/batchTransactionBuilder.d.ts +62 -0
  121. package/dist/esm/lib/batchTransactionBuilder.js +222 -0
  122. package/dist/esm/lib/claimBuilder.d.ts +58 -0
  123. package/dist/esm/lib/claimBuilder.js +110 -0
  124. package/dist/esm/lib/errors.d.ts +8 -0
  125. package/dist/esm/lib/errors.js +14 -0
  126. package/dist/esm/lib/iface.d.ts +337 -0
  127. package/dist/esm/lib/iface.js +125 -0
  128. package/dist/esm/lib/iface_utils.d.ts +59 -0
  129. package/dist/esm/lib/iface_utils.js +83 -0
  130. package/dist/esm/lib/index.d.ts +21 -0
  131. package/dist/{src → esm}/lib/index.d.ts.map +1 -1
  132. package/dist/esm/lib/index.js +20 -0
  133. package/dist/esm/lib/keyPair.d.ts +38 -0
  134. package/dist/esm/lib/keyPair.js +77 -0
  135. package/dist/esm/lib/nativeTransferBuilder.d.ts +84 -0
  136. package/dist/esm/lib/nativeTransferBuilder.js +212 -0
  137. package/dist/esm/lib/proxyBuilder.d.ts +54 -0
  138. package/dist/esm/lib/proxyBuilder.js +109 -0
  139. package/dist/esm/lib/singletonRegistry.d.ts +7 -0
  140. package/dist/esm/lib/singletonRegistry.js +16 -0
  141. package/dist/esm/lib/stakingBuilder.d.ts +66 -0
  142. package/dist/esm/lib/stakingBuilder.js +160 -0
  143. package/dist/esm/lib/transaction.d.ts +83 -0
  144. package/dist/{src → esm}/lib/transaction.d.ts.map +1 -1
  145. package/dist/esm/lib/transaction.js +584 -0
  146. package/dist/esm/lib/transactionBuilder.d.ts +131 -0
  147. package/dist/esm/lib/transactionBuilder.js +311 -0
  148. package/dist/esm/lib/transactionBuilderFactory.d.ts +28 -0
  149. package/dist/esm/lib/transactionBuilderFactory.js +97 -0
  150. package/dist/esm/lib/transferBuilder.d.ts +11 -0
  151. package/dist/esm/lib/transferBuilder.js +7 -0
  152. package/dist/esm/lib/txnSchema.d.ts +15 -0
  153. package/dist/esm/lib/txnSchema.js +111 -0
  154. package/dist/esm/lib/unnominateBuilder.d.ts +24 -0
  155. package/dist/esm/lib/unnominateBuilder.js +44 -0
  156. package/dist/esm/lib/unstakeBuilder.d.ts +38 -0
  157. package/dist/esm/lib/unstakeBuilder.js +80 -0
  158. package/dist/esm/lib/utils.d.ts +261 -0
  159. package/dist/esm/lib/utils.js +451 -0
  160. package/dist/esm/lib/wasmParser.d.ts +57 -0
  161. package/dist/esm/lib/wasmParser.d.ts.map +1 -0
  162. package/dist/esm/lib/wasmParser.js +341 -0
  163. package/dist/esm/lib/withdrawUnstakedBuilder.d.ts +38 -0
  164. package/dist/esm/lib/withdrawUnstakedBuilder.js +81 -0
  165. package/dist/esm/register.d.ts +3 -0
  166. package/dist/esm/register.js +7 -0
  167. package/dist/esm/resources/index.d.ts +5 -0
  168. package/dist/esm/resources/index.js +5 -0
  169. package/dist/esm/resources/mainnet.d.ts +2 -0
  170. package/dist/esm/resources/mainnet.js +2 -0
  171. package/dist/esm/resources/polkadotAssetHub.d.ts +2 -0
  172. package/dist/esm/resources/polkadotAssetHub.js +2 -0
  173. package/dist/esm/resources/westend.d.ts +2 -0
  174. package/dist/esm/resources/westend.js +2 -0
  175. package/dist/esm/resources/westendAssetHub.d.ts +2 -0
  176. package/dist/esm/resources/westendAssetHub.js +2 -0
  177. package/dist/esm/tdot.d.ts +12 -0
  178. package/dist/esm/tdot.js +23 -0
  179. package/package.json +29 -11
  180. package/dist/src/dot.d.ts.map +0 -1
  181. package/dist/src/lib/addressInitializationBuilder.js +0 -182
  182. package/dist/src/lib/batchTransactionBuilder.js +0 -229
  183. package/dist/src/lib/claimBuilder.js +0 -117
  184. package/dist/src/lib/errors.js +0 -19
  185. package/dist/src/lib/iface.js +0 -128
  186. package/dist/src/lib/iface_utils.js +0 -92
  187. package/dist/src/lib/keyPair.js +0 -117
  188. package/dist/src/lib/nativeTransferBuilder.js +0 -219
  189. package/dist/src/lib/proxyBuilder.js +0 -116
  190. package/dist/src/lib/singletonRegistry.js +0 -20
  191. package/dist/src/lib/stakingBuilder.js +0 -167
  192. package/dist/src/lib/transaction.js +0 -610
  193. package/dist/src/lib/transactionBuilder.js +0 -351
  194. package/dist/src/lib/transactionBuilderFactory.js +0 -104
  195. package/dist/src/lib/transferBuilder.js +0 -11
  196. package/dist/src/lib/txnSchema.js +0 -117
  197. package/dist/src/lib/unnominateBuilder.js +0 -48
  198. package/dist/src/lib/unstakeBuilder.js +0 -87
  199. package/dist/src/lib/utils.js +0 -491
  200. package/dist/src/lib/withdrawUnstakedBuilder.js +0 -88
  201. package/dist/src/register.js +0 -11
  202. package/dist/src/resources/mainnet.js +0 -5
  203. package/dist/src/resources/polkadotAssetHub.js +0 -5
  204. package/dist/src/tdot.js +0 -27
  205. package/dist/test/fixtures.d.ts.map +0 -1
  206. package/dist/test/fixtures.js +0 -439
  207. package/dist/test/resources/index.d.ts.map +0 -1
  208. package/dist/test/resources/index.js +0 -157
  209. package/dist/test/resources/testnet.d.ts.map +0 -1
  210. package/dist/test/unit/address.js +0 -45
  211. package/dist/test/unit/dot.js +0 -816
  212. package/dist/test/unit/keypair.js +0 -111
  213. package/dist/test/unit/transaction.d.ts.map +0 -1
  214. package/dist/test/unit/transaction.js +0 -269
  215. package/dist/test/unit/transactionBuilder/addressInitializationBuilder.d.ts.map +0 -1
  216. package/dist/test/unit/transactionBuilder/addressInitializationBuilder.js +0 -265
  217. package/dist/test/unit/transactionBuilder/base.d.ts.map +0 -1
  218. package/dist/test/unit/transactionBuilder/base.js +0 -233
  219. package/dist/test/unit/transactionBuilder/batchTransactionBuilder.d.ts.map +0 -1
  220. package/dist/test/unit/transactionBuilder/batchTransactionBuilder.js +0 -521
  221. package/dist/test/unit/transactionBuilder/claimBuilder.d.ts.map +0 -1
  222. package/dist/test/unit/transactionBuilder/claimBuilder.js +0 -129
  223. package/dist/test/unit/transactionBuilder/proxyBuilder.d.ts.map +0 -1
  224. package/dist/test/unit/transactionBuilder/proxyBuilder.js +0 -88
  225. package/dist/test/unit/transactionBuilder/singeltonRegistry.d.ts.map +0 -1
  226. package/dist/test/unit/transactionBuilder/stakingBuilder.d.ts.map +0 -1
  227. package/dist/test/unit/transactionBuilder/stakingBuilder.js +0 -235
  228. package/dist/test/unit/transactionBuilder/transactionBuilderFactory.d.ts.map +0 -1
  229. package/dist/test/unit/transactionBuilder/transactionBuilderFactory.js +0 -107
  230. package/dist/test/unit/transactionBuilder/transferBuilder.d.ts.map +0 -1
  231. package/dist/test/unit/transactionBuilder/transferBuilder.js +0 -437
  232. package/dist/test/unit/transactionBuilder/unnominateBuilder.d.ts.map +0 -1
  233. package/dist/test/unit/transactionBuilder/unnominateBuilder.js +0 -97
  234. package/dist/test/unit/transactionBuilder/unstakeBuilder.d.ts.map +0 -1
  235. package/dist/test/unit/transactionBuilder/unstakeBuilder.js +0 -116
  236. package/dist/test/unit/transactionBuilder/withdrawUnstakedBuilder.d.ts.map +0 -1
  237. package/dist/test/unit/transactionBuilder/withdrawUnstakedBuilder.js +0 -115
  238. package/dist/test/unit/utils.js +0 -117
  239. package/dist/tsconfig.tsbuildinfo +0 -1
  240. /package/dist/{src → cjs/src}/index.d.ts +0 -0
  241. /package/dist/{src → cjs/src}/lib/addressInitializationBuilder.d.ts +0 -0
  242. /package/dist/{src → cjs/src}/lib/batchTransactionBuilder.d.ts +0 -0
  243. /package/dist/{src → cjs/src}/lib/claimBuilder.d.ts +0 -0
  244. /package/dist/{src → cjs/src}/lib/errors.d.ts +0 -0
  245. /package/dist/{src → cjs/src}/lib/iface.d.ts +0 -0
  246. /package/dist/{src → cjs/src}/lib/iface_utils.d.ts +0 -0
  247. /package/dist/{src → cjs/src}/lib/keyPair.d.ts +0 -0
  248. /package/dist/{src → cjs/src}/lib/nativeTransferBuilder.d.ts +0 -0
  249. /package/dist/{src → cjs/src}/lib/proxyBuilder.d.ts +0 -0
  250. /package/dist/{src → cjs/src}/lib/singletonRegistry.d.ts +0 -0
  251. /package/dist/{src → cjs/src}/lib/stakingBuilder.d.ts +0 -0
  252. /package/dist/{src → cjs/src}/lib/transaction.d.ts +0 -0
  253. /package/dist/{src → cjs/src}/lib/transactionBuilder.d.ts +0 -0
  254. /package/dist/{src → cjs/src}/lib/transactionBuilderFactory.d.ts +0 -0
  255. /package/dist/{src → cjs/src}/lib/transferBuilder.d.ts +0 -0
  256. /package/dist/{src → cjs/src}/lib/txnSchema.d.ts +0 -0
  257. /package/dist/{src → cjs/src}/lib/unnominateBuilder.d.ts +0 -0
  258. /package/dist/{src → cjs/src}/lib/unstakeBuilder.d.ts +0 -0
  259. /package/dist/{src → cjs/src}/lib/utils.d.ts +0 -0
  260. /package/dist/{src → cjs/src}/lib/withdrawUnstakedBuilder.d.ts +0 -0
  261. /package/dist/{src → cjs/src}/register.d.ts +0 -0
  262. /package/dist/{src → cjs/src}/resources/index.d.ts +0 -0
  263. /package/dist/{src → cjs/src}/resources/mainnet.d.ts +0 -0
  264. /package/dist/{src → cjs/src}/resources/polkadotAssetHub.d.ts +0 -0
  265. /package/dist/{src → cjs/src}/resources/westend.d.ts +0 -0
  266. /package/dist/{src → cjs/src}/resources/westendAssetHub.d.ts +0 -0
  267. /package/dist/{src → cjs/src}/tdot.d.ts +0 -0
  268. /package/dist/{test → cjs/test}/fixtures.d.ts +0 -0
  269. /package/dist/{test → cjs/test}/resources/index.d.ts +0 -0
  270. /package/dist/{test → cjs/test}/resources/materialData.json +0 -0
  271. /package/dist/{test → cjs/test}/resources/materialDataModified.json +0 -0
  272. /package/dist/{test → cjs/test}/resources/testnet.d.ts +0 -0
  273. /package/dist/{test → cjs/test}/unit/address.d.ts +0 -0
  274. /package/dist/{test → cjs/test}/unit/dot.d.ts +0 -0
  275. /package/dist/{test → cjs/test}/unit/keypair.d.ts +0 -0
  276. /package/dist/{test → cjs/test}/unit/transaction.d.ts +0 -0
  277. /package/dist/{test → cjs/test}/unit/transactionBuilder/addressInitializationBuilder.d.ts +0 -0
  278. /package/dist/{test → cjs/test}/unit/transactionBuilder/base.d.ts +0 -0
  279. /package/dist/{test → cjs/test}/unit/transactionBuilder/batchTransactionBuilder.d.ts +0 -0
  280. /package/dist/{test → cjs/test}/unit/transactionBuilder/claimBuilder.d.ts +0 -0
  281. /package/dist/{test → cjs/test}/unit/transactionBuilder/proxyBuilder.d.ts +0 -0
  282. /package/dist/{test → cjs/test}/unit/transactionBuilder/singeltonRegistry.d.ts +0 -0
  283. /package/dist/{test → cjs/test}/unit/transactionBuilder/stakingBuilder.d.ts +0 -0
  284. /package/dist/{test → cjs/test}/unit/transactionBuilder/transactionBuilderFactory.d.ts +0 -0
  285. /package/dist/{test → cjs/test}/unit/transactionBuilder/transferBuilder.d.ts +0 -0
  286. /package/dist/{test → cjs/test}/unit/transactionBuilder/unnominateBuilder.d.ts +0 -0
  287. /package/dist/{test → cjs/test}/unit/transactionBuilder/unstakeBuilder.d.ts +0 -0
  288. /package/dist/{test → cjs/test}/unit/transactionBuilder/withdrawUnstakedBuilder.d.ts +0 -0
  289. /package/dist/{test → cjs/test}/unit/utils.d.ts +0 -0
  290. /package/dist/{src → esm}/index.d.ts.map +0 -0
  291. /package/dist/{src → esm}/lib/addressInitializationBuilder.d.ts.map +0 -0
  292. /package/dist/{src → esm}/lib/batchTransactionBuilder.d.ts.map +0 -0
  293. /package/dist/{src → esm}/lib/claimBuilder.d.ts.map +0 -0
  294. /package/dist/{src → esm}/lib/errors.d.ts.map +0 -0
  295. /package/dist/{src → esm}/lib/iface.d.ts.map +0 -0
  296. /package/dist/{src → esm}/lib/iface_utils.d.ts.map +0 -0
  297. /package/dist/{src → esm}/lib/keyPair.d.ts.map +0 -0
  298. /package/dist/{src → esm}/lib/nativeTransferBuilder.d.ts.map +0 -0
  299. /package/dist/{src → esm}/lib/proxyBuilder.d.ts.map +0 -0
  300. /package/dist/{src → esm}/lib/singletonRegistry.d.ts.map +0 -0
  301. /package/dist/{src → esm}/lib/stakingBuilder.d.ts.map +0 -0
  302. /package/dist/{src → esm}/lib/transactionBuilder.d.ts.map +0 -0
  303. /package/dist/{src → esm}/lib/transactionBuilderFactory.d.ts.map +0 -0
  304. /package/dist/{src → esm}/lib/transferBuilder.d.ts.map +0 -0
  305. /package/dist/{src → esm}/lib/txnSchema.d.ts.map +0 -0
  306. /package/dist/{src → esm}/lib/unnominateBuilder.d.ts.map +0 -0
  307. /package/dist/{src → esm}/lib/unstakeBuilder.d.ts.map +0 -0
  308. /package/dist/{src → esm}/lib/utils.d.ts.map +0 -0
  309. /package/dist/{src → esm}/lib/withdrawUnstakedBuilder.d.ts.map +0 -0
  310. /package/dist/{src → esm}/register.d.ts.map +0 -0
  311. /package/dist/{src → esm}/resources/index.d.ts.map +0 -0
  312. /package/dist/{src → esm}/resources/mainnet.d.ts.map +0 -0
  313. /package/dist/{src → esm}/resources/polkadotAssetHub.d.ts.map +0 -0
  314. /package/dist/{src → esm}/resources/westend.d.ts.map +0 -0
  315. /package/dist/{src → esm}/resources/westendAssetHub.d.ts.map +0 -0
  316. /package/dist/{src → esm}/tdot.d.ts.map +0 -0
@@ -0,0 +1,197 @@
1
+ "use strict";
2
+ /**
3
+ * WASM Builder Byte Comparison Tests
4
+ *
5
+ * Compare serialized output between:
6
+ * 1. Legacy approach (using @substrate/txwrapper-polkadot)
7
+ * 2. WASM approach (using @bitgo/wasm-dot buildTransaction)
8
+ *
9
+ * For unsigned transactions, legacy toBroadcastFormat() returns the signing payload
10
+ * (via construct.signingPayload). We compare WASM signablePayload() against it.
11
+ *
12
+ * Format difference: txwrapper encodes the call as `Bytes` (Vec<u8>) which includes
13
+ * a SCALE compact-length prefix. subxt encodes it as raw `Call` (no prefix).
14
+ * We strip this prefix from the legacy side before comparing, since the actual
15
+ * call data, era, nonce, tip, and chain context are identical.
16
+ *
17
+ * Note: wasm-dot@1.3.0 uses high-level business intents (payment, stake, unstake,
18
+ * claim, consolidate) instead of low-level call types. Batch and proxy operations
19
+ * are composed automatically from the intent (e.g., stake with proxyAddress
20
+ * produces batchAll(bond, addProxy)).
21
+ */
22
+ var __importDefault = (this && this.__importDefault) || function (mod) {
23
+ return (mod && mod.__esModule) ? mod : { "default": mod };
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ const assert_1 = __importDefault(require("assert"));
27
+ const statics_1 = require("@bitgo/statics");
28
+ const transactionBuilderFactory_1 = require("../../src/lib/transactionBuilderFactory");
29
+ const fixtures_1 = require("../fixtures");
30
+ const utils_1 = __importDefault(require("../../src/lib/utils"));
31
+ // Import WASM builder
32
+ const wasm_dot_1 = require("@bitgo/wasm-dot");
33
+ describe('WASM vs Legacy Builder Byte Comparison', function () {
34
+ const coin = statics_1.coins.get('tdot');
35
+ // Get material from utils to ensure same metadata as legacy builder
36
+ const material = utils_1.default.getMaterial(coin);
37
+ function createWasmContext(overrides = {}) {
38
+ return {
39
+ sender: fixtures_1.accounts.account1.address,
40
+ nonce: 0,
41
+ tip: 0n,
42
+ material: material,
43
+ validity: {
44
+ firstValid: fixtures_1.westendBlock.blockNumber,
45
+ maxDuration: 2400,
46
+ },
47
+ referenceBlock: fixtures_1.westendBlock.hash,
48
+ ...overrides,
49
+ };
50
+ }
51
+ /**
52
+ * Strip SCALE compact-length prefix from the legacy signing payload.
53
+ *
54
+ * Legacy (txwrapper) encodes the call as `Bytes` type, which adds a compact-length
55
+ * prefix. subxt encodes it as raw `Call` (no prefix). Both produce identical
56
+ * call data + era + nonce + tip + chain context after this prefix.
57
+ */
58
+ function stripCompactPrefix(hex) {
59
+ const data = hex.startsWith('0x') ? hex.slice(2) : hex;
60
+ const bytes = Buffer.from(data, 'hex');
61
+ const mode = bytes[0] & 0b11;
62
+ let offset;
63
+ if (mode === 0b00)
64
+ offset = 1;
65
+ else if (mode === 0b01)
66
+ offset = 2;
67
+ else if (mode === 0b10)
68
+ offset = 4;
69
+ else
70
+ throw new Error('Big compact not supported');
71
+ return '0x' + bytes.slice(offset).toString('hex');
72
+ }
73
+ // ===========================================================================
74
+ // Transfer Transaction Tests
75
+ // ===========================================================================
76
+ describe('Transfer Transactions', function () {
77
+ it('should produce identical signing payload for transfer', async function () {
78
+ const to = fixtures_1.accounts.account2.address;
79
+ const amount = '1000000000000'; // 1 DOT
80
+ const factory = new transactionBuilderFactory_1.TransactionBuilderFactory(coin);
81
+ const legacyBuilder = factory.getTransferBuilder();
82
+ legacyBuilder
83
+ .sender({ address: fixtures_1.accounts.account1.address })
84
+ .to({ address: to })
85
+ .amount(amount)
86
+ .validity({ firstValid: fixtures_1.westendBlock.blockNumber, maxDuration: 2400 })
87
+ .referenceBlock(fixtures_1.westendBlock.hash)
88
+ .sequenceId({ name: 'Nonce', keyword: 'nonce', value: 0 });
89
+ const legacyTx = await legacyBuilder.build();
90
+ const legacyHex = legacyTx.toBroadcastFormat();
91
+ const wasmTx = (0, wasm_dot_1.buildTransaction)({ type: 'payment', to, amount: BigInt(amount), keepAlive: true }, createWasmContext());
92
+ const wasmHex = '0x' + Buffer.from(wasmTx.signablePayload()).toString('hex');
93
+ assert_1.default.strictEqual(wasmHex, stripCompactPrefix(legacyHex), 'Signing payload should match');
94
+ });
95
+ it('should produce identical signing payload for transferKeepAlive with different nonce', async function () {
96
+ const to = fixtures_1.accounts.account2.address;
97
+ const amount = '5000000000000'; // 5 DOT
98
+ const factory = new transactionBuilderFactory_1.TransactionBuilderFactory(coin);
99
+ const legacyBuilder = factory.getTransferBuilder();
100
+ legacyBuilder
101
+ .sender({ address: fixtures_1.accounts.account1.address })
102
+ .to({ address: to })
103
+ .amount(amount)
104
+ .validity({ firstValid: fixtures_1.westendBlock.blockNumber, maxDuration: 2400 })
105
+ .referenceBlock(fixtures_1.westendBlock.hash)
106
+ .sequenceId({ name: 'Nonce', keyword: 'nonce', value: 5 });
107
+ const legacyTx = await legacyBuilder.build();
108
+ const legacyHex = legacyTx.toBroadcastFormat();
109
+ const wasmTx = (0, wasm_dot_1.buildTransaction)({ type: 'payment', to, amount: BigInt(amount), keepAlive: true }, createWasmContext({ nonce: 5 }));
110
+ const wasmHex = '0x' + Buffer.from(wasmTx.signablePayload()).toString('hex');
111
+ assert_1.default.strictEqual(wasmHex, stripCompactPrefix(legacyHex), 'Signing payload should match');
112
+ });
113
+ });
114
+ // ===========================================================================
115
+ // Staking Transaction Tests
116
+ // ===========================================================================
117
+ describe('Staking Transactions', function () {
118
+ // Note: wasm-dot@1.3.0 `stake` without proxyAddress produces bondExtra (top-up),
119
+ // while the legacy getStakingBuilder() produces bond (initial stake). These are
120
+ // different extrinsic calls so byte comparison is not applicable. The bond call
121
+ // is now only produced via `stake` with proxyAddress (which creates a batch).
122
+ // See Intent-based Transaction Building tests below for stake sanity checks.
123
+ it('should produce identical signing payload for unstake (unbond)', async function () {
124
+ const amount = '5000000000000'; // 5 DOT
125
+ const factory = new transactionBuilderFactory_1.TransactionBuilderFactory(coin);
126
+ const legacyBuilder = factory.getUnstakeBuilder();
127
+ legacyBuilder
128
+ .sender({ address: fixtures_1.accounts.account1.address })
129
+ .amount(amount)
130
+ .validity({ firstValid: fixtures_1.westendBlock.blockNumber, maxDuration: 2400 })
131
+ .referenceBlock(fixtures_1.westendBlock.hash)
132
+ .sequenceId({ name: 'Nonce', keyword: 'nonce', value: 0 });
133
+ const legacyTx = await legacyBuilder.build();
134
+ const legacyHex = legacyTx.toBroadcastFormat();
135
+ const wasmTx = (0, wasm_dot_1.buildTransaction)({ type: 'unstake', amount: BigInt(amount) }, createWasmContext());
136
+ const wasmHex = '0x' + Buffer.from(wasmTx.signablePayload()).toString('hex');
137
+ assert_1.default.strictEqual(wasmHex, stripCompactPrefix(legacyHex), 'Signing payload should match');
138
+ });
139
+ it('should produce identical signing payload for withdrawUnbonded (claim)', async function () {
140
+ const slashingSpans = 0;
141
+ const factory = new transactionBuilderFactory_1.TransactionBuilderFactory(coin);
142
+ const legacyBuilder = factory.getWithdrawUnstakedBuilder();
143
+ legacyBuilder
144
+ .sender({ address: fixtures_1.accounts.account1.address })
145
+ .slashingSpans(slashingSpans)
146
+ .validity({ firstValid: fixtures_1.westendBlock.blockNumber, maxDuration: 2400 })
147
+ .referenceBlock(fixtures_1.westendBlock.hash)
148
+ .sequenceId({ name: 'Nonce', keyword: 'nonce', value: 0 });
149
+ const legacyTx = await legacyBuilder.build();
150
+ const legacyHex = legacyTx.toBroadcastFormat();
151
+ const wasmTx = (0, wasm_dot_1.buildTransaction)({ type: 'claim', slashingSpans }, createWasmContext());
152
+ const wasmHex = '0x' + Buffer.from(wasmTx.signablePayload()).toString('hex');
153
+ assert_1.default.strictEqual(wasmHex, stripCompactPrefix(legacyHex), 'Signing payload should match');
154
+ });
155
+ });
156
+ // ===========================================================================
157
+ // Intent-based Transaction Building (sanity checks)
158
+ // ===========================================================================
159
+ describe('Intent-based Transaction Building', function () {
160
+ it('should build payment from intent', async function () {
161
+ const wasmTx = (0, wasm_dot_1.buildTransaction)({ type: 'payment', to: fixtures_1.accounts.account2.address, amount: 1000000000000n, keepAlive: true }, createWasmContext());
162
+ const serialized = wasmTx.toBroadcastFormat();
163
+ (0, assert_1.default)(serialized.startsWith('0x'), 'Should be hex encoded');
164
+ (0, assert_1.default)(serialized.length > 10, 'Should have content');
165
+ });
166
+ it('should build stake (top-up) from intent', async function () {
167
+ const wasmTx = (0, wasm_dot_1.buildTransaction)({ type: 'stake', amount: 5000000000000n, payee: { type: 'staked' } }, createWasmContext());
168
+ (0, assert_1.default)(wasmTx.toBroadcastFormat().startsWith('0x'));
169
+ });
170
+ it('should build stake with proxy (new stake / batchAll(bond, addProxy)) from intent', async function () {
171
+ const wasmTx = (0, wasm_dot_1.buildTransaction)({ type: 'stake', amount: 10000000000000n, proxyAddress: fixtures_1.accounts.account2.address, payee: { type: 'staked' } }, createWasmContext());
172
+ (0, assert_1.default)(wasmTx.toBroadcastFormat().startsWith('0x'));
173
+ });
174
+ it('should build claim (withdrawUnbonded) from intent', async function () {
175
+ const wasmTx = (0, wasm_dot_1.buildTransaction)({ type: 'claim', slashingSpans: 0 }, createWasmContext());
176
+ (0, assert_1.default)(wasmTx.toBroadcastFormat().startsWith('0x'));
177
+ });
178
+ it('should build unstake (partial / unbond) from intent', async function () {
179
+ const wasmTx = (0, wasm_dot_1.buildTransaction)({ type: 'unstake', amount: 5000000000000n }, createWasmContext());
180
+ (0, assert_1.default)(wasmTx.toBroadcastFormat().startsWith('0x'));
181
+ });
182
+ it('should build unstake with stopStaking (full / batchAll(removeProxy, chill, unbond)) from intent', async function () {
183
+ const wasmTx = (0, wasm_dot_1.buildTransaction)({
184
+ type: 'unstake',
185
+ amount: 5000000000000n,
186
+ stopStaking: true,
187
+ proxyAddress: fixtures_1.accounts.account2.address,
188
+ }, createWasmContext());
189
+ (0, assert_1.default)(wasmTx.toBroadcastFormat().startsWith('0x'));
190
+ });
191
+ it('should build consolidate (transferAll) from intent', async function () {
192
+ const wasmTx = (0, wasm_dot_1.buildTransaction)({ type: 'consolidate', to: fixtures_1.accounts.account2.address }, createWasmContext());
193
+ (0, assert_1.default)(wasmTx.toBroadcastFormat().startsWith('0x'));
194
+ });
195
+ });
196
+ });
197
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FzbUJ1aWxkZXJCeXRlQ29tcGFyaXNvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Rlc3QvdW5pdC93YXNtQnVpbGRlckJ5dGVDb21wYXJpc29uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRzs7Ozs7QUFFSCxvREFBNEI7QUFDNUIsNENBQXVDO0FBQ3ZDLHVGQUFvRjtBQUVwRiwwQ0FBcUQ7QUFDckQsZ0VBQXdDO0FBRXhDLHNCQUFzQjtBQUN0Qiw4Q0FBcUY7QUFFckYsUUFBUSxDQUFDLHdDQUF3QyxFQUFFO0lBQ2pELE1BQU0sSUFBSSxHQUFHLGVBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFL0Isb0VBQW9FO0lBQ3BFLE1BQU0sUUFBUSxHQUFHLGVBQUssQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFekMsU0FBUyxpQkFBaUIsQ0FBQyxZQUFtQyxFQUFFO1FBQzlELE9BQU87WUFDTCxNQUFNLEVBQUUsbUJBQVEsQ0FBQyxRQUFRLENBQUMsT0FBTztZQUNqQyxLQUFLLEVBQUUsQ0FBQztZQUNSLEdBQUcsRUFBRSxFQUFFO1lBQ1AsUUFBUSxFQUFFLFFBQW9CO1lBQzlCLFFBQVEsRUFBRTtnQkFDUixVQUFVLEVBQUUsdUJBQVksQ0FBQyxXQUFXO2dCQUNwQyxXQUFXLEVBQUUsSUFBSTthQUNsQjtZQUNELGNBQWMsRUFBRSx1QkFBWSxDQUFDLElBQUk7WUFDakMsR0FBRyxTQUFTO1NBQ2IsQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxTQUFTLGtCQUFrQixDQUFDLEdBQVc7UUFDckMsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO1FBQ3ZELE1BQU0sS0FB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O2dCQUNqQixZQUFZLEVBQUUsbUJBQVEsQ0FBQyxRQUFRLENBQUMsT0FBTzthQUN4QyxFQUNELGlCQUFpQixFQUFFLENBQ3BCLENBQUM7WUFDRixJQUFBLGdCQUFNLEVBQUMsTUFBTSxDQUFDLGlCQUFpQixFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDdEQsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsb0RBQW9ELEVBQUUsS0FBSztZQUM1RCxNQUFNLE1BQU0sR0FBRyxJQUFBLDJCQUFnQixFQUFDLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxFQUFFLEVBQUUsbUJBQVEsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDO1lBQzdHLElBQUEsZ0JBQU0sRUFBQyxNQUFNLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUN0RCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFdBU00gQnVpbGRlciBCeXRlIENvbXBhcmlzb24gVGVzdHNcbiAqXG4gKiBDb21wYXJlIHNlcmlhbGl6ZWQgb3V0cHV0IGJldHdlZW46XG4gKiAxLiBMZWdhY3kgYXBwcm9hY2ggKHVzaW5nIEBzdWJzdHJhdGUvdHh3cmFwcGVyLXBvbGthZG90KVxuICogMi4gV0FTTSBhcHByb2FjaCAodXNpbmcgQGJpdGdvL3dhc20tZG90IGJ1aWxkVHJhbnNhY3Rpb24pXG4gKlxuICogRm9yIHVuc2lnbmVkIHRyYW5zYWN0aW9ucywgbGVnYWN5IHRvQnJvYWRjYXN0Rm9ybWF0KCkgcmV0dXJucyB0aGUgc2lnbmluZyBwYXlsb2FkXG4gKiAodmlhIGNvbnN0cnVjdC5zaWduaW5nUGF5bG9hZCkuIFdlIGNvbXBhcmUgV0FTTSBzaWduYWJsZVBheWxvYWQoKSBhZ2FpbnN0IGl0LlxuICpcbiAqIEZvcm1hdCBkaWZmZXJlbmNlOiB0eHdyYXBwZXIgZW5jb2RlcyB0aGUgY2FsbCBhcyBgQnl0ZXNgIChWZWM8dTg+KSB3aGljaCBpbmNsdWRlc1xuICogYSBTQ0FMRSBjb21wYWN0LWxlbmd0aCBwcmVmaXguIHN1Ynh0IGVuY29kZXMgaXQgYXMgcmF3IGBDYWxsYCAobm8gcHJlZml4KS5cbiAqIFdlIHN0cmlwIHRoaXMgcHJlZml4IGZyb20gdGhlIGxlZ2FjeSBzaWRlIGJlZm9yZSBjb21wYXJpbmcsIHNpbmNlIHRoZSBhY3R1YWxcbiAqIGNhbGwgZGF0YSwgZXJhLCBub25jZSwgdGlwLCBhbmQgY2hhaW4gY29udGV4dCBhcmUgaWRlbnRpY2FsLlxuICpcbiAqIE5vdGU6IHdhc20tZG90QDEuMy4wIHVzZXMgaGlnaC1sZXZlbCBidXNpbmVzcyBpbnRlbnRzIChwYXltZW50LCBzdGFrZSwgdW5zdGFrZSxcbiAqIGNsYWltLCBjb25zb2xpZGF0ZSkgaW5zdGVhZCBvZiBsb3ctbGV2ZWwgY2FsbCB0eXBlcy4gQmF0Y2ggYW5kIHByb3h5IG9wZXJhdGlvbnNcbiAqIGFyZSBjb21wb3NlZCBhdXRvbWF0aWNhbGx5IGZyb20gdGhlIGludGVudCAoZS5nLiwgc3Rha2Ugd2l0aCBwcm94eUFkZHJlc3NcbiAqIHByb2R1Y2VzIGJhdGNoQWxsKGJvbmQsIGFkZFByb3h5KSkuXG4gKi9cblxuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IHsgY29pbnMgfSBmcm9tICdAYml0Z28vc3RhdGljcyc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5IH0gZnJvbSAnLi4vLi4vc3JjL2xpYi90cmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5JztcbmltcG9ydCB7IFRyYW5zZmVyQnVpbGRlciB9IGZyb20gJy4uLy4uL3NyYy9saWIvdHJhbnNmZXJCdWlsZGVyJztcbmltcG9ydCB7IGFjY291bnRzLCB3ZXN0ZW5kQmxvY2sgfSBmcm9tICcuLi9maXh0dXJlcyc7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vLi4vc3JjL2xpYi91dGlscyc7XG5cbi8vIEltcG9ydCBXQVNNIGJ1aWxkZXJcbmltcG9ydCB7IGJ1aWxkVHJhbnNhY3Rpb24sIHR5cGUgQnVpbGRDb250ZXh0LCB0eXBlIE1hdGVyaWFsIH0gZnJvbSAnQGJpdGdvL3dhc20tZG90JztcblxuZGVzY3JpYmUoJ1dBU00gdnMgTGVnYWN5IEJ1aWxkZXIgQnl0ZSBDb21wYXJpc29uJywgZnVuY3Rpb24gKCkge1xuICBjb25zdCBjb2luID0gY29pbnMuZ2V0KCd0ZG90Jyk7XG5cbiAgLy8gR2V0IG1hdGVyaWFsIGZyb20gdXRpbHMgdG8gZW5zdXJlIHNhbWUgbWV0YWRhdGEgYXMgbGVnYWN5IGJ1aWxkZXJcbiAgY29uc3QgbWF0ZXJpYWwgPSB1dGlscy5nZXRNYXRlcmlhbChjb2luKTtcblxuICBmdW5jdGlvbiBjcmVhdGVXYXNtQ29udGV4dChvdmVycmlkZXM6IFBhcnRpYWw8QnVpbGRDb250ZXh0PiA9IHt9KTogQnVpbGRDb250ZXh0IHtcbiAgICByZXR1cm4ge1xuICAgICAgc2VuZGVyOiBhY2NvdW50cy5hY2NvdW50MS5hZGRyZXNzLFxuICAgICAgbm9uY2U6IDAsXG4gICAgICB0aXA6IDBuLFxuICAgICAgbWF0ZXJpYWw6IG1hdGVyaWFsIGFzIE1hdGVyaWFsLFxuICAgICAgdmFsaWRpdHk6IHtcbiAgICAgICAgZmlyc3RWYWxpZDogd2VzdGVuZEJsb2NrLmJsb2NrTnVtYmVyLFxuICAgICAgICBtYXhEdXJhdGlvbjogMjQwMCxcbiAgICAgIH0sXG4gICAgICByZWZlcmVuY2VCbG9jazogd2VzdGVuZEJsb2NrLmhhc2gsXG4gICAgICAuLi5vdmVycmlkZXMsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdHJpcCBTQ0FMRSBjb21wYWN0LWxlbmd0aCBwcmVmaXggZnJvbSB0aGUgbGVnYWN5IHNpZ25pbmcgcGF5bG9hZC5cbiAgICpcbiAgICogTGVnYWN5ICh0eHdyYXBwZXIpIGVuY29kZXMgdGhlIGNhbGwgYXMgYEJ5dGVzYCB0eXBlLCB3aGljaCBhZGRzIGEgY29tcGFjdC1sZW5ndGhcbiAgICogcHJlZml4LiBzdWJ4dCBlbmNvZGVzIGl0IGFzIHJhdyBgQ2FsbGAgKG5vIHByZWZpeCkuIEJvdGggcHJvZHVjZSBpZGVudGljYWxcbiAgICogY2FsbCBkYXRhICsgZXJhICsgbm9uY2UgKyB0aXAgKyBjaGFpbiBjb250ZXh0IGFmdGVyIHRoaXMgcHJlZml4LlxuICAgKi9cbiAgZnVuY3Rpb24gc3RyaXBDb21wYWN0UHJlZml4KGhleDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBkYXRhID0gaGV4LnN0YXJ0c1dpdGgoJzB4JykgPyBoZXguc2xpY2UoMikgOiBoZXg7XG4gICAgY29uc3QgYnl0ZXMgPSBCdWZmZXIuZnJvbShkYXRhLCAnaGV4Jyk7XG4gICAgY29uc3QgbW9kZSA9IGJ5dGVzWzBdICYgMGIxMTtcbiAgICBsZXQgb2Zmc2V0OiBudW1iZXI7XG4gICAgaWYgKG1vZGUgPT09IDBiMDApIG9mZnNldCA9IDE7XG4gICAgZWxzZSBpZiAobW9kZSA9PT0gMGIwMSkgb2Zmc2V0ID0gMjtcbiAgICBlbHNlIGlmIChtb2RlID09PSAwYjEwKSBvZmZzZXQgPSA0O1xuICAgIGVsc2UgdGhyb3cgbmV3IEVycm9yKCdCaWcgY29tcGFjdCBub3Qgc3VwcG9ydGVkJyk7XG4gICAgcmV0dXJuICcweCcgKyBieXRlcy5zbGljZShvZmZzZXQpLnRvU3RyaW5nKCdoZXgnKTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBUcmFuc2ZlciBUcmFuc2FjdGlvbiBUZXN0c1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgZGVzY3JpYmUoJ1RyYW5zZmVyIFRyYW5zYWN0aW9ucycsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHByb2R1Y2UgaWRlbnRpY2FsIHNpZ25pbmcgcGF5bG9hZCBmb3IgdHJhbnNmZXInLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0byA9IGFjY291bnRzLmFjY291bnQyLmFkZHJlc3M7XG4gICAgICBjb25zdCBhbW91bnQgPSAnMTAwMDAwMDAwMDAwMCc7IC8vIDEgRE9UXG5cbiAgICAgIGNvbnN0IGZhY3RvcnkgPSBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2luKTtcbiAgICAgIGNvbnN0IGxlZ2FjeUJ1aWxkZXIgPSBmYWN0b3J5LmdldFRyYW5zZmVyQnVpbGRlcigpIGFzIFRyYW5zZmVyQnVpbGRlcjtcblxuICAgICAgbGVnYWN5QnVpbGRlclxuICAgICAgICAuc2VuZGVyKHsgYWRkcmVzczogYWNjb3VudHMuYWNjb3VudDEuYWRkcmVzcyB9KVxuICAgICAgICAudG8oeyBhZGRyZXNzOiB0byB9KVxuICAgICAgICAuYW1vdW50KGFtb3VudClcbiAgICAgICAgLnZhbGlkaXR5KHsgZmlyc3RWYWxpZDogd2VzdGVuZEJsb2NrLmJsb2NrTnVtYmVyLCBtYXhEdXJhdGlvbjogMjQwMCB9KVxuICAgICAgICAucmVmZXJlbmNlQmxvY2sod2VzdGVuZEJsb2NrLmhhc2gpXG4gICAgICAgIC5zZXF1ZW5jZUlkKHsgbmFtZTogJ05vbmNlJywga2V5d29yZDogJ25vbmNlJywgdmFsdWU6IDAgfSk7XG5cbiAgICAgIGNvbnN0IGxlZ2FjeVR4ID0gYXdhaXQgbGVnYWN5QnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QgbGVnYWN5SGV4ID0gbGVnYWN5VHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcblxuICAgICAgY29uc3Qgd2FzbVR4ID0gYnVpbGRUcmFuc2FjdGlvbihcbiAgICAgICAgeyB0eXBlOiAncGF5bWVudCcsIHRvLCBhbW91bnQ6IEJpZ0ludChhbW91bnQpLCBrZWVwQWxpdmU6IHRydWUgfSxcbiAgICAgICAgY3JlYXRlV2FzbUNvbnRleHQoKVxuICAgICAgKTtcbiAgICAgIGNvbnN0IHdhc21IZXggPSAnMHgnICsgQnVmZmVyLmZyb20od2FzbVR4LnNpZ25hYmxlUGF5bG9hZCgpKS50b1N0cmluZygnaGV4Jyk7XG5cbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh3YXNtSGV4LCBzdHJpcENvbXBhY3RQcmVmaXgobGVnYWN5SGV4KSwgJ1NpZ25pbmcgcGF5bG9hZCBzaG91bGQgbWF0Y2gnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcHJvZHVjZSBpZGVudGljYWwgc2lnbmluZyBwYXlsb2FkIGZvciB0cmFuc2ZlcktlZXBBbGl2ZSB3aXRoIGRpZmZlcmVudCBub25jZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHRvID0gYWNjb3VudHMuYWNjb3VudDIuYWRkcmVzcztcbiAgICAgIGNvbnN0IGFtb3VudCA9ICc1MDAwMDAwMDAwMDAwJzsgLy8gNSBET1RcblxuICAgICAgY29uc3QgZmFjdG9yeSA9IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW4pO1xuICAgICAgY29uc3QgbGVnYWN5QnVpbGRlciA9IGZhY3RvcnkuZ2V0VHJhbnNmZXJCdWlsZGVyKCkgYXMgVHJhbnNmZXJCdWlsZGVyO1xuXG4gICAgICBsZWdhY3lCdWlsZGVyXG4gICAgICAgIC5zZW5kZXIoeyBhZGRyZXNzOiBhY2NvdW50cy5hY2NvdW50MS5hZGRyZXNzIH0pXG4gICAgICAgIC50byh7IGFkZHJlc3M6IHRvIH0pXG4gICAgICAgIC5hbW91bnQoYW1vdW50KVxuICAgICAgICAudmFsaWRpdHkoeyBmaXJzdFZhbGlkOiB3ZXN0ZW5kQmxvY2suYmxvY2tOdW1iZXIsIG1heER1cmF0aW9uOiAyNDAwIH0pXG4gICAgICAgIC5yZWZlcmVuY2VCbG9jayh3ZXN0ZW5kQmxvY2suaGFzaClcbiAgICAgICAgLnNlcXVlbmNlSWQoeyBuYW1lOiAnTm9uY2UnLCBrZXl3b3JkOiAnbm9uY2UnLCB2YWx1ZTogNSB9KTtcblxuICAgICAgY29uc3QgbGVnYWN5VHggPSBhd2FpdCBsZWdhY3lCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICBjb25zdCBsZWdhY3lIZXggPSBsZWdhY3lUeC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuXG4gICAgICBjb25zdCB3YXNtVHggPSBidWlsZFRyYW5zYWN0aW9uKFxuICAgICAgICB7IHR5cGU6ICdwYXltZW50JywgdG8sIGFtb3VudDogQmlnSW50KGFtb3VudCksIGtlZXBBbGl2ZTogdHJ1ZSB9LFxuICAgICAgICBjcmVhdGVXYXNtQ29udGV4dCh7IG5vbmNlOiA1IH0pXG4gICAgICApO1xuICAgICAgY29uc3Qgd2FzbUhleCA9ICcweCcgKyBCdWZmZXIuZnJvbSh3YXNtVHguc2lnbmFibGVQYXlsb2FkKCkpLnRvU3RyaW5nKCdoZXgnKTtcblxuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHdhc21IZXgsIHN0cmlwQ29tcGFjdFByZWZpeChsZWdhY3lIZXgpLCAnU2lnbmluZyBwYXlsb2FkIHNob3VsZCBtYXRjaCcpO1xuICAgIH0pO1xuICB9KTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gU3Rha2luZyBUcmFuc2FjdGlvbiBUZXN0c1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgZGVzY3JpYmUoJ1N0YWtpbmcgVHJhbnNhY3Rpb25zJywgZnVuY3Rpb24gKCkge1xuICAgIC8vIE5vdGU6IHdhc20tZG90QDEuMy4wIGBzdGFrZWAgd2l0aG91dCBwcm94eUFkZHJlc3MgcHJvZHVjZXMgYm9uZEV4dHJhICh0b3AtdXApLFxuICAgIC8vIHdoaWxlIHRoZSBsZWdhY3kgZ2V0U3Rha2luZ0J1aWxkZXIoKSBwcm9kdWNlcyBib25kIChpbml0aWFsIHN0YWtlKS4gVGhlc2UgYXJlXG4gICAgLy8gZGlmZmVyZW50IGV4dHJpbnNpYyBjYWxscyBzbyBieXRlIGNvbXBhcmlzb24gaXMgbm90IGFwcGxpY2FibGUuIFRoZSBib25kIGNhbGxcbiAgICAvLyBpcyBub3cgb25seSBwcm9kdWNlZCB2aWEgYHN0YWtlYCB3aXRoIHByb3h5QWRkcmVzcyAod2hpY2ggY3JlYXRlcyBhIGJhdGNoKS5cbiAgICAvLyBTZWUgSW50ZW50LWJhc2VkIFRyYW5zYWN0aW9uIEJ1aWxkaW5nIHRlc3RzIGJlbG93IGZvciBzdGFrZSBzYW5pdHkgY2hlY2tzLlxuXG4gICAgaXQoJ3Nob3VsZCBwcm9kdWNlIGlkZW50aWNhbCBzaWduaW5nIHBheWxvYWQgZm9yIHVuc3Rha2UgKHVuYm9uZCknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBhbW91bnQgPSAnNTAwMDAwMDAwMDAwMCc7IC8vIDUgRE9UXG5cbiAgICAgIGNvbnN0IGZhY3RvcnkgPSBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2luKTtcbiAgICAgIGNvbnN0IGxlZ2FjeUJ1aWxkZXIgPSBmYWN0b3J5LmdldFVuc3Rha2VCdWlsZGVyKCk7XG5cbiAgICAgIGxlZ2FjeUJ1aWxkZXJcbiAgICAgICAgLnNlbmRlcih7IGFkZHJlc3M6IGFjY291bnRzLmFjY291bnQxLmFkZHJlc3MgfSlcbiAgICAgICAgLmFtb3VudChhbW91bnQpXG4gICAgICAgIC52YWxpZGl0eSh7IGZpcnN0VmFsaWQ6IHdlc3RlbmRCbG9jay5ibG9ja051bWJlciwgbWF4RHVyYXRpb246IDI0MDAgfSlcbiAgICAgICAgLnJlZmVyZW5jZUJsb2NrKHdlc3RlbmRCbG9jay5oYXNoKVxuICAgICAgICAuc2VxdWVuY2VJZCh7IG5hbWU6ICdOb25jZScsIGtleXdvcmQ6ICdub25jZScsIHZhbHVlOiAwIH0pO1xuXG4gICAgICBjb25zdCBsZWdhY3lUeCA9IGF3YWl0IGxlZ2FjeUJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGNvbnN0IGxlZ2FjeUhleCA9IGxlZ2FjeVR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG5cbiAgICAgIGNvbnN0IHdhc21UeCA9IGJ1aWxkVHJhbnNhY3Rpb24oeyB0eXBlOiAndW5zdGFrZScsIGFtb3VudDogQmlnSW50KGFtb3VudCkgfSwgY3JlYXRlV2FzbUNvbnRleHQoKSk7XG4gICAgICBjb25zdCB3YXNtSGV4ID0gJzB4JyArIEJ1ZmZlci5mcm9tKHdhc21UeC5zaWduYWJsZVBheWxvYWQoKSkudG9TdHJpbmcoJ2hleCcpO1xuXG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwod2FzbUhleCwgc3RyaXBDb21wYWN0UHJlZml4KGxlZ2FjeUhleCksICdTaWduaW5nIHBheWxvYWQgc2hvdWxkIG1hdGNoJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHByb2R1Y2UgaWRlbnRpY2FsIHNpZ25pbmcgcGF5bG9hZCBmb3Igd2l0aGRyYXdVbmJvbmRlZCAoY2xhaW0pJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgc2xhc2hpbmdTcGFucyA9IDA7XG5cbiAgICAgIGNvbnN0IGZhY3RvcnkgPSBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2luKTtcbiAgICAgIGNvbnN0IGxlZ2FjeUJ1aWxkZXIgPSBmYWN0b3J5LmdldFdpdGhkcmF3VW5zdGFrZWRCdWlsZGVyKCk7XG5cbiAgICAgIGxlZ2FjeUJ1aWxkZXJcbiAgICAgICAgLnNlbmRlcih7IGFkZHJlc3M6IGFjY291bnRzLmFjY291bnQxLmFkZHJlc3MgfSlcbiAgICAgICAgLnNsYXNoaW5nU3BhbnMoc2xhc2hpbmdTcGFucylcbiAgICAgICAgLnZhbGlkaXR5KHsgZmlyc3RWYWxpZDogd2VzdGVuZEJsb2NrLmJsb2NrTnVtYmVyLCBtYXhEdXJhdGlvbjogMjQwMCB9KVxuICAgICAgICAucmVmZXJlbmNlQmxvY2sod2VzdGVuZEJsb2NrLmhhc2gpXG4gICAgICAgIC5zZXF1ZW5jZUlkKHsgbmFtZTogJ05vbmNlJywga2V5d29yZDogJ25vbmNlJywgdmFsdWU6IDAgfSk7XG5cbiAgICAgIGNvbnN0IGxlZ2FjeVR4ID0gYXdhaXQgbGVnYWN5QnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QgbGVnYWN5SGV4ID0gbGVnYWN5VHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcblxuICAgICAgY29uc3Qgd2FzbVR4ID0gYnVpbGRUcmFuc2FjdGlvbih7IHR5cGU6ICdjbGFpbScsIHNsYXNoaW5nU3BhbnMgfSwgY3JlYXRlV2FzbUNvbnRleHQoKSk7XG4gICAgICBjb25zdCB3YXNtSGV4ID0gJzB4JyArIEJ1ZmZlci5mcm9tKHdhc21UeC5zaWduYWJsZVBheWxvYWQoKSkudG9TdHJpbmcoJ2hleCcpO1xuXG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwod2FzbUhleCwgc3RyaXBDb21wYWN0UHJlZml4KGxlZ2FjeUhleCksICdTaWduaW5nIHBheWxvYWQgc2hvdWxkIG1hdGNoJyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBJbnRlbnQtYmFzZWQgVHJhbnNhY3Rpb24gQnVpbGRpbmcgKHNhbml0eSBjaGVja3MpXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICBkZXNjcmliZSgnSW50ZW50LWJhc2VkIFRyYW5zYWN0aW9uIEJ1aWxkaW5nJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgYnVpbGQgcGF5bWVudCBmcm9tIGludGVudCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHdhc21UeCA9IGJ1aWxkVHJhbnNhY3Rpb24oXG4gICAgICAgIHsgdHlwZTogJ3BheW1lbnQnLCB0bzogYWNjb3VudHMuYWNjb3VudDIuYWRkcmVzcywgYW1vdW50OiAxMDAwMDAwMDAwMDAwbiwga2VlcEFsaXZlOiB0cnVlIH0sXG4gICAgICAgIGNyZWF0ZVdhc21Db250ZXh0KClcbiAgICAgICk7XG4gICAgICBjb25zdCBzZXJpYWxpemVkID0gd2FzbVR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG4gICAgICBhc3NlcnQoc2VyaWFsaXplZC5zdGFydHNXaXRoKCcweCcpLCAnU2hvdWxkIGJlIGhleCBlbmNvZGVkJyk7XG4gICAgICBhc3NlcnQoc2VyaWFsaXplZC5sZW5ndGggPiAxMCwgJ1Nob3VsZCBoYXZlIGNvbnRlbnQnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYnVpbGQgc3Rha2UgKHRvcC11cCkgZnJvbSBpbnRlbnQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB3YXNtVHggPSBidWlsZFRyYW5zYWN0aW9uKFxuICAgICAgICB7IHR5cGU6ICdzdGFrZScsIGFtb3VudDogNTAwMDAwMDAwMDAwMG4sIHBheWVlOiB7IHR5cGU6ICdzdGFrZWQnIH0gfSxcbiAgICAgICAgY3JlYXRlV2FzbUNvbnRleHQoKVxuICAgICAgKTtcbiAgICAgIGFzc2VydCh3YXNtVHgudG9Ccm9hZGNhc3RGb3JtYXQoKS5zdGFydHNXaXRoKCcweCcpKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYnVpbGQgc3Rha2Ugd2l0aCBwcm94eSAobmV3IHN0YWtlIC8gYmF0Y2hBbGwoYm9uZCwgYWRkUHJveHkpKSBmcm9tIGludGVudCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHdhc21UeCA9IGJ1aWxkVHJhbnNhY3Rpb24oXG4gICAgICAgIHsgdHlwZTogJ3N0YWtlJywgYW1vdW50OiAxMDAwMDAwMDAwMDAwMG4sIHByb3h5QWRkcmVzczogYWNjb3VudHMuYWNjb3VudDIuYWRkcmVzcywgcGF5ZWU6IHsgdHlwZTogJ3N0YWtlZCcgfSB9LFxuICAgICAgICBjcmVhdGVXYXNtQ29udGV4dCgpXG4gICAgICApO1xuICAgICAgYXNzZXJ0KHdhc21UeC50b0Jyb2FkY2FzdEZvcm1hdCgpLnN0YXJ0c1dpdGgoJzB4JykpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBidWlsZCBjbGFpbSAod2l0aGRyYXdVbmJvbmRlZCkgZnJvbSBpbnRlbnQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB3YXNtVHggPSBidWlsZFRyYW5zYWN0aW9uKHsgdHlwZTogJ2NsYWltJywgc2xhc2hpbmdTcGFuczogMCB9LCBjcmVhdGVXYXNtQ29udGV4dCgpKTtcbiAgICAgIGFzc2VydCh3YXNtVHgudG9Ccm9hZGNhc3RGb3JtYXQoKS5zdGFydHNXaXRoKCcweCcpKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYnVpbGQgdW5zdGFrZSAocGFydGlhbCAvIHVuYm9uZCkgZnJvbSBpbnRlbnQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB3YXNtVHggPSBidWlsZFRyYW5zYWN0aW9uKHsgdHlwZTogJ3Vuc3Rha2UnLCBhbW91bnQ6IDUwMDAwMDAwMDAwMDBuIH0sIGNyZWF0ZVdhc21Db250ZXh0KCkpO1xuICAgICAgYXNzZXJ0KHdhc21UeC50b0Jyb2FkY2FzdEZvcm1hdCgpLnN0YXJ0c1dpdGgoJzB4JykpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBidWlsZCB1bnN0YWtlIHdpdGggc3RvcFN0YWtpbmcgKGZ1bGwgLyBiYXRjaEFsbChyZW1vdmVQcm94eSwgY2hpbGwsIHVuYm9uZCkpIGZyb20gaW50ZW50JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgd2FzbVR4ID0gYnVpbGRUcmFuc2FjdGlvbihcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6ICd1bnN0YWtlJyxcbiAgICAgICAgICBhbW91bnQ6IDUwMDAwMDAwMDAwMDBuLFxuICAgICAgICAgIHN0b3BTdGFraW5nOiB0cnVlLFxuICAgICAgICAgIHByb3h5QWRkcmVzczogYWNjb3VudHMuYWNjb3VudDIuYWRkcmVzcyxcbiAgICAgICAgfSxcbiAgICAgICAgY3JlYXRlV2FzbUNvbnRleHQoKVxuICAgICAgKTtcbiAgICAgIGFzc2VydCh3YXNtVHgudG9Ccm9hZGNhc3RGb3JtYXQoKS5zdGFydHNXaXRoKCcweCcpKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYnVpbGQgY29uc29saWRhdGUgKHRyYW5zZmVyQWxsKSBmcm9tIGludGVudCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHdhc21UeCA9IGJ1aWxkVHJhbnNhY3Rpb24oeyB0eXBlOiAnY29uc29saWRhdGUnLCB0bzogYWNjb3VudHMuYWNjb3VudDIuYWRkcmVzcyB9LCBjcmVhdGVXYXNtQ29udGV4dCgpKTtcbiAgICAgIGFzc2VydCh3YXNtVHgudG9Ccm9hZGNhc3RGb3JtYXQoKS5zdGFydHNXaXRoKCcweCcpKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
@@ -0,0 +1,15 @@
1
+ /**
2
+ * WASM Parser Explanation Tests
3
+ *
4
+ * Tests for explainDotTransaction, specifically verifying batch transaction
5
+ * handling with proxy deposit costs matches legacy account-lib behavior.
6
+ *
7
+ * Uses WASM-built transactions (not legacy rawTx fixtures) since the WASM
8
+ * parser requires metadata-compatible signed extension encoding.
9
+ *
10
+ * Note: wasm-dot@1.3.0 uses high-level business intents. Batch transactions
11
+ * are produced automatically from the intent (e.g., unstake with stopStaking
12
+ * produces batchAll(removeProxy, chill, unbond)).
13
+ */
14
+ export {};
15
+ //# sourceMappingURL=wasmParserExplanation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wasmParserExplanation.d.ts","sourceRoot":"","sources":["../../../../test/unit/wasmParserExplanation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG"}
@@ -0,0 +1,147 @@
1
+ "use strict";
2
+ /**
3
+ * WASM Parser Explanation Tests
4
+ *
5
+ * Tests for explainDotTransaction, specifically verifying batch transaction
6
+ * handling with proxy deposit costs matches legacy account-lib behavior.
7
+ *
8
+ * Uses WASM-built transactions (not legacy rawTx fixtures) since the WASM
9
+ * parser requires metadata-compatible signed extension encoding.
10
+ *
11
+ * Note: wasm-dot@1.3.0 uses high-level business intents. Batch transactions
12
+ * are produced automatically from the intent (e.g., unstake with stopStaking
13
+ * produces batchAll(removeProxy, chill, unbond)).
14
+ */
15
+ var __importDefault = (this && this.__importDefault) || function (mod) {
16
+ return (mod && mod.__esModule) ? mod : { "default": mod };
17
+ };
18
+ Object.defineProperty(exports, "__esModule", { value: true });
19
+ const assert_1 = __importDefault(require("assert"));
20
+ const statics_1 = require("@bitgo/statics");
21
+ const sdk_core_1 = require("@bitgo/sdk-core");
22
+ const wasmParser_1 = require("../../src/lib/wasmParser");
23
+ const wasm_dot_1 = require("@bitgo/wasm-dot");
24
+ const fixtures_1 = require("../fixtures");
25
+ const utils_1 = __importDefault(require("../../src/lib/utils"));
26
+ describe('WASM Parser Explanation', function () {
27
+ const coin = statics_1.coins.get('tdot');
28
+ // utils.getMaterial returns the iface Material shape; cast to WasmMaterial for buildTransaction
29
+ const material = utils_1.default.getMaterial(coin);
30
+ function createWasmContext(overrides = {}) {
31
+ return {
32
+ sender: fixtures_1.accounts.account1.address,
33
+ nonce: 0,
34
+ tip: 0n,
35
+ material,
36
+ validity: {
37
+ firstValid: fixtures_1.westendBlock.blockNumber,
38
+ maxDuration: 2400,
39
+ },
40
+ referenceBlock: fixtures_1.westendBlock.hash,
41
+ ...overrides,
42
+ };
43
+ }
44
+ describe('Batch unstake (removeProxy + chill + unbond)', function () {
45
+ it('should explain batch unstake with proxy deposit cost', function () {
46
+ const unbondAmount = 5000000000000n; // 5 DOT
47
+ const proxyDelegate = fixtures_1.accounts.account2.address;
48
+ // Build a full unstake: produces batchAll(removeProxy, chill, unbond)
49
+ const wasmTx = (0, wasm_dot_1.buildTransaction)({
50
+ type: 'unstake',
51
+ amount: unbondAmount,
52
+ stopStaking: true,
53
+ proxyAddress: proxyDelegate,
54
+ }, createWasmContext());
55
+ const txHex = wasmTx.toBroadcastFormat();
56
+ const explanation = (0, wasmParser_1.explainDotTransaction)({
57
+ txHex,
58
+ material,
59
+ senderAddress: fixtures_1.accounts.account1.address,
60
+ });
61
+ // Should be Batch type
62
+ assert_1.default.strictEqual(explanation.type, sdk_core_1.TransactionType.Batch);
63
+ assert_1.default.ok(explanation.methodName.includes('batchAll'), `Expected batchAll, got ${explanation.methodName}`);
64
+ // Outputs should contain proxy deposit cost, NOT the unbond amount
65
+ assert_1.default.strictEqual(explanation.outputs.length, 1, 'Should have exactly one output (proxy deposit cost)');
66
+ const output = explanation.outputs[0];
67
+ assert_1.default.strictEqual(output.address, fixtures_1.accounts.account1.address, 'Output should go to sender (deposit refund)');
68
+ const proxyDepositCost = BigInt(output.amount);
69
+ assert_1.default.ok(proxyDepositCost > 0n, 'Proxy deposit cost should be positive');
70
+ // The proxy deposit cost should NOT equal the unbond amount
71
+ assert_1.default.notStrictEqual(proxyDepositCost, unbondAmount, 'Should use proxy deposit cost, not unbond amount');
72
+ // Input should come from the proxy delegate address
73
+ assert_1.default.strictEqual(explanation.inputs.length, 1, 'Should have exactly one input');
74
+ assert_1.default.strictEqual(explanation.inputs[0].address, proxyDelegate, 'Input should come from proxy delegate');
75
+ assert_1.default.strictEqual(explanation.inputs[0].valueString, output.amount, 'Input value should equal proxy deposit cost');
76
+ });
77
+ it('proxy deposit cost should be consistent across calls', function () {
78
+ const proxyDelegate = fixtures_1.accounts.account2.address;
79
+ const wasmTx = (0, wasm_dot_1.buildTransaction)({
80
+ type: 'unstake',
81
+ amount: 1000000000000n,
82
+ stopStaking: true,
83
+ proxyAddress: proxyDelegate,
84
+ }, createWasmContext());
85
+ const txHex = wasmTx.toBroadcastFormat();
86
+ const explanation1 = (0, wasmParser_1.explainDotTransaction)({ txHex, material, senderAddress: fixtures_1.accounts.account1.address });
87
+ const explanation2 = (0, wasmParser_1.explainDotTransaction)({ txHex, material, senderAddress: fixtures_1.accounts.account1.address });
88
+ assert_1.default.strictEqual(explanation1.outputs[0].amount, explanation2.outputs[0].amount);
89
+ });
90
+ });
91
+ describe('Batch stake (bond + addProxy)', function () {
92
+ it('should explain batch stake with bond amount and proxy deposit cost', function () {
93
+ const bondAmount = 10000000000000n; // 10 DOT
94
+ const proxyDelegate = fixtures_1.accounts.account2.address;
95
+ // Build a new stake with proxy: produces batchAll(bond, addProxy)
96
+ const wasmTx = (0, wasm_dot_1.buildTransaction)({
97
+ type: 'stake',
98
+ amount: bondAmount,
99
+ proxyAddress: proxyDelegate,
100
+ payee: { type: 'staked' },
101
+ }, createWasmContext());
102
+ const txHex = wasmTx.toBroadcastFormat();
103
+ const explanation = (0, wasmParser_1.explainDotTransaction)({ txHex, material, senderAddress: fixtures_1.accounts.account1.address });
104
+ assert_1.default.strictEqual(explanation.type, sdk_core_1.TransactionType.Batch);
105
+ // Should have two outputs: bond amount (to STAKING_DESTINATION sentinel) + proxy deposit cost (to proxy delegate)
106
+ assert_1.default.strictEqual(explanation.outputs.length, 2, 'Should have bond + proxy deposit outputs');
107
+ const stakingOutput = explanation.outputs.find((o) => o.address === '5C4hrfjw9DjXZTzV3MwzrrAr9P1MJhSrvWGWqi1eSuyUpnhM');
108
+ assert_1.default.ok(stakingOutput, 'Should have STAKING_DESTINATION sentinel output for bond amount');
109
+ assert_1.default.strictEqual(BigInt(stakingOutput.amount), bondAmount, 'Bond amount should match');
110
+ const proxyOutput = explanation.outputs.find((o) => o.address !== '5C4hrfjw9DjXZTzV3MwzrrAr9P1MJhSrvWGWqi1eSuyUpnhM');
111
+ assert_1.default.ok(proxyOutput, 'Should have proxy deposit output');
112
+ assert_1.default.strictEqual(proxyOutput.address, proxyDelegate);
113
+ assert_1.default.ok(BigInt(proxyOutput.amount) > 0n, 'Proxy deposit cost should be positive');
114
+ // All inputs should come from sender
115
+ assert_1.default.strictEqual(explanation.inputs.length, 2);
116
+ for (const input of explanation.inputs) {
117
+ assert_1.default.strictEqual(input.address, fixtures_1.accounts.account1.address);
118
+ }
119
+ });
120
+ });
121
+ describe('Non-batch transactions (should not be affected)', function () {
122
+ it('should explain transfer normally', function () {
123
+ const wasmTx = (0, wasm_dot_1.buildTransaction)({ type: 'payment', to: fixtures_1.accounts.account2.address, amount: 1000000000000n, keepAlive: true }, createWasmContext());
124
+ const explanation = (0, wasmParser_1.explainDotTransaction)({
125
+ txHex: wasmTx.toBroadcastFormat(),
126
+ material,
127
+ senderAddress: fixtures_1.accounts.account1.address,
128
+ });
129
+ assert_1.default.strictEqual(explanation.type, sdk_core_1.TransactionType.Send);
130
+ assert_1.default.strictEqual(explanation.outputs.length, 1);
131
+ assert_1.default.strictEqual(explanation.outputs[0].address, fixtures_1.accounts.account2.address);
132
+ assert_1.default.strictEqual(explanation.outputs[0].amount, '1000000000000');
133
+ });
134
+ it('should explain single unstake (unbond) normally', function () {
135
+ const wasmTx = (0, wasm_dot_1.buildTransaction)({ type: 'unstake', amount: 5000000000000n }, createWasmContext());
136
+ const explanation = (0, wasmParser_1.explainDotTransaction)({
137
+ txHex: wasmTx.toBroadcastFormat(),
138
+ material,
139
+ senderAddress: fixtures_1.accounts.account1.address,
140
+ });
141
+ assert_1.default.strictEqual(explanation.type, sdk_core_1.TransactionType.StakingUnlock);
142
+ // Unbond has no outputs (balance stays in account as unlocking, matching legacy behavior)
143
+ assert_1.default.strictEqual(explanation.outputs.length, 0);
144
+ });
145
+ });
146
+ });
147
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FzbVBhcnNlckV4cGxhbmF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC91bml0L3dhc21QYXJzZXJFeHBsYW5hdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7OztHQVlHOzs7OztBQUVILG9EQUE0QjtBQUM1Qiw0Q0FBdUM7QUFDdkMsOENBQWtEO0FBQ2xELHlEQUFpRTtBQUNqRSw4Q0FBcUc7QUFFckcsMENBQXFEO0FBQ3JELGdFQUF3QztBQUV4QyxRQUFRLENBQUMseUJBQXlCLEVBQUU7SUFDbEMsTUFBTSxJQUFJLEdBQUcsZUFBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMvQixnR0FBZ0c7SUFDaEcsTUFBTSxRQUFRLEdBQUcsZUFBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQTRCLENBQUM7SUFFcEUsU0FBUyxpQkFBaUIsQ0FBQyxZQUFtQyxFQUFFO1FBQzlELE9BQU87WUFDTCxNQUFNLEVBQUUsbUJBQVEsQ0FBQyxRQUFRLENBQUMsT0FBTztZQUNqQyxLQUFLLEVBQUUsQ0FBQztZQUNSLEdBQUcsRUFBRSxFQUFFO1lBQ1AsUUFBUTtZQUNSLFFBQVEsRUFBRTtnQkFDUixVQUFVLEVBQUUsdUJBQVksQ0FBQyxXQUFXO2dCQUNwQyxXQUFXLEVBQUUsSUFBSTthQUNsQjtZQUNELGNBQWMsRUFBRSx1QkFBWSxDQUFDLElBQUk7WUFDakMsR0FBRyxTQUFTO1NBQ2IsQ0FBQztJQUNKLENBQUM7SUFFRCxRQUFRLENBQUMsOENBQThDLEVBQUU7UUFDdkQsRUFBRSxDQUFDLHNEQUFzRCxFQUFFO1lBQ3pELE1BQU0sWUFBWSxHQUFHLGNBQWMsQ0FBQyxDQUFDLFFBQVE7WUFDN0MsTUFBTSxhQUFhLEdBQUcsbUJBQVEsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDO1lBRWhELHNFQUFzRTtZQUN0RSxNQUFNLE1BQU0sR0FBRyxJQUFBLDJCQUFnQixFQUM3QjtnQkFD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QUFDLElBQUksRUFBRSwwQkFBZSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ3BFLDBGQUEwRjtZQUMxRixnQkFBTSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNwRCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFdBU00gUGFyc2VyIEV4cGxhbmF0aW9uIFRlc3RzXG4gKlxuICogVGVzdHMgZm9yIGV4cGxhaW5Eb3RUcmFuc2FjdGlvbiwgc3BlY2lmaWNhbGx5IHZlcmlmeWluZyBiYXRjaCB0cmFuc2FjdGlvblxuICogaGFuZGxpbmcgd2l0aCBwcm94eSBkZXBvc2l0IGNvc3RzIG1hdGNoZXMgbGVnYWN5IGFjY291bnQtbGliIGJlaGF2aW9yLlxuICpcbiAqIFVzZXMgV0FTTS1idWlsdCB0cmFuc2FjdGlvbnMgKG5vdCBsZWdhY3kgcmF3VHggZml4dHVyZXMpIHNpbmNlIHRoZSBXQVNNXG4gKiBwYXJzZXIgcmVxdWlyZXMgbWV0YWRhdGEtY29tcGF0aWJsZSBzaWduZWQgZXh0ZW5zaW9uIGVuY29kaW5nLlxuICpcbiAqIE5vdGU6IHdhc20tZG90QDEuMy4wIHVzZXMgaGlnaC1sZXZlbCBidXNpbmVzcyBpbnRlbnRzLiBCYXRjaCB0cmFuc2FjdGlvbnNcbiAqIGFyZSBwcm9kdWNlZCBhdXRvbWF0aWNhbGx5IGZyb20gdGhlIGludGVudCAoZS5nLiwgdW5zdGFrZSB3aXRoIHN0b3BTdGFraW5nXG4gKiBwcm9kdWNlcyBiYXRjaEFsbChyZW1vdmVQcm94eSwgY2hpbGwsIHVuYm9uZCkpLlxuICovXG5cbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCB7IGNvaW5zIH0gZnJvbSAnQGJpdGdvL3N0YXRpY3MnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCB7IGV4cGxhaW5Eb3RUcmFuc2FjdGlvbiB9IGZyb20gJy4uLy4uL3NyYy9saWIvd2FzbVBhcnNlcic7XG5pbXBvcnQgeyBidWlsZFRyYW5zYWN0aW9uLCB0eXBlIEJ1aWxkQ29udGV4dCwgdHlwZSBNYXRlcmlhbCBhcyBXYXNtTWF0ZXJpYWwgfSBmcm9tICdAYml0Z28vd2FzbS1kb3QnO1xuaW1wb3J0IHR5cGUgeyBNYXRlcmlhbCB9IGZyb20gJy4uLy4uL3NyYy9saWIvaWZhY2UnO1xuaW1wb3J0IHsgYWNjb3VudHMsIHdlc3RlbmRCbG9jayB9IGZyb20gJy4uL2ZpeHR1cmVzJztcbmltcG9ydCB1dGlscyBmcm9tICcuLi8uLi9zcmMvbGliL3V0aWxzJztcblxuZGVzY3JpYmUoJ1dBU00gUGFyc2VyIEV4cGxhbmF0aW9uJywgZnVuY3Rpb24gKCkge1xuICBjb25zdCBjb2luID0gY29pbnMuZ2V0KCd0ZG90Jyk7XG4gIC8vIHV0aWxzLmdldE1hdGVyaWFsIHJldHVybnMgdGhlIGlmYWNlIE1hdGVyaWFsIHNoYXBlOyBjYXN0IHRvIFdhc21NYXRlcmlhbCBmb3IgYnVpbGRUcmFuc2FjdGlvblxuICBjb25zdCBtYXRlcmlhbCA9IHV0aWxzLmdldE1hdGVyaWFsKGNvaW4pIGFzIE1hdGVyaWFsICYgV2FzbU1hdGVyaWFsO1xuXG4gIGZ1bmN0aW9uIGNyZWF0ZVdhc21Db250ZXh0KG92ZXJyaWRlczogUGFydGlhbDxCdWlsZENvbnRleHQ+ID0ge30pOiBCdWlsZENvbnRleHQge1xuICAgIHJldHVybiB7XG4gICAgICBzZW5kZXI6IGFjY291bnRzLmFjY291bnQxLmFkZHJlc3MsXG4gICAgICBub25jZTogMCxcbiAgICAgIHRpcDogMG4sXG4gICAgICBtYXRlcmlhbCxcbiAgICAgIHZhbGlkaXR5OiB7XG4gICAgICAgIGZpcnN0VmFsaWQ6IHdlc3RlbmRCbG9jay5ibG9ja051bWJlcixcbiAgICAgICAgbWF4RHVyYXRpb246IDI0MDAsXG4gICAgICB9LFxuICAgICAgcmVmZXJlbmNlQmxvY2s6IHdlc3RlbmRCbG9jay5oYXNoLFxuICAgICAgLi4ub3ZlcnJpZGVzLFxuICAgIH07XG4gIH1cblxuICBkZXNjcmliZSgnQmF0Y2ggdW5zdGFrZSAocmVtb3ZlUHJveHkgKyBjaGlsbCArIHVuYm9uZCknLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBleHBsYWluIGJhdGNoIHVuc3Rha2Ugd2l0aCBwcm94eSBkZXBvc2l0IGNvc3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB1bmJvbmRBbW91bnQgPSA1MDAwMDAwMDAwMDAwbjsgLy8gNSBET1RcbiAgICAgIGNvbnN0IHByb3h5RGVsZWdhdGUgPSBhY2NvdW50cy5hY2NvdW50Mi5hZGRyZXNzO1xuXG4gICAgICAvLyBCdWlsZCBhIGZ1bGwgdW5zdGFrZTogcHJvZHVjZXMgYmF0Y2hBbGwocmVtb3ZlUHJveHksIGNoaWxsLCB1bmJvbmQpXG4gICAgICBjb25zdCB3YXNtVHggPSBidWlsZFRyYW5zYWN0aW9uKFxuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogJ3Vuc3Rha2UnLFxuICAgICAgICAgIGFtb3VudDogdW5ib25kQW1vdW50LFxuICAgICAgICAgIHN0b3BTdGFraW5nOiB0cnVlLFxuICAgICAgICAgIHByb3h5QWRkcmVzczogcHJveHlEZWxlZ2F0ZSxcbiAgICAgICAgfSxcbiAgICAgICAgY3JlYXRlV2FzbUNvbnRleHQoKVxuICAgICAgKTtcblxuICAgICAgY29uc3QgdHhIZXggPSB3YXNtVHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICAgIGNvbnN0IGV4cGxhbmF0aW9uID0gZXhwbGFpbkRvdFRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhIZXgsXG4gICAgICAgIG1hdGVyaWFsLFxuICAgICAgICBzZW5kZXJBZGRyZXNzOiBhY2NvdW50cy5hY2NvdW50MS5hZGRyZXNzLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIFNob3VsZCBiZSBCYXRjaCB0eXBlXG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZXhwbGFuYXRpb24udHlwZSwgVHJhbnNhY3Rpb25UeXBlLkJhdGNoKTtcbiAgICAgIGFzc2VydC5vayhleHBsYW5hdGlvbi5tZXRob2ROYW1lLmluY2x1ZGVzKCdiYXRjaEFsbCcpLCBgRXhwZWN0ZWQgYmF0Y2hBbGwsIGdvdCAke2V4cGxhbmF0aW9uLm1ldGhvZE5hbWV9YCk7XG5cbiAgICAgIC8vIE91dHB1dHMgc2hvdWxkIGNvbnRhaW4gcHJveHkgZGVwb3NpdCBjb3N0LCBOT1QgdGhlIHVuYm9uZCBhbW91bnRcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChleHBsYW5hdGlvbi5vdXRwdXRzLmxlbmd0aCwgMSwgJ1Nob3VsZCBoYXZlIGV4YWN0bHkgb25lIG91dHB1dCAocHJveHkgZGVwb3NpdCBjb3N0KScpO1xuICAgICAgY29uc3Qgb3V0cHV0ID0gZXhwbGFuYXRpb24ub3V0cHV0c1swXTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChvdXRwdXQuYWRkcmVzcywgYWNjb3VudHMuYWNjb3VudDEuYWRkcmVzcywgJ091dHB1dCBzaG91bGQgZ28gdG8gc2VuZGVyIChkZXBvc2l0IHJlZnVuZCknKTtcbiAgICAgIGNvbnN0IHByb3h5RGVwb3NpdENvc3QgPSBCaWdJbnQob3V0cHV0LmFtb3VudCk7XG4gICAgICBhc3NlcnQub2socHJveHlEZXBvc2l0Q29zdCA+IDBuLCAnUHJveHkgZGVwb3NpdCBjb3N0IHNob3VsZCBiZSBwb3NpdGl2ZScpO1xuICAgICAgLy8gVGhlIHByb3h5IGRlcG9zaXQgY29zdCBzaG91bGQgTk9UIGVxdWFsIHRoZSB1bmJvbmQgYW1vdW50XG4gICAgICBhc3NlcnQubm90U3RyaWN0RXF1YWwocHJveHlEZXBvc2l0Q29zdCwgdW5ib25kQW1vdW50LCAnU2hvdWxkIHVzZSBwcm94eSBkZXBvc2l0IGNvc3QsIG5vdCB1bmJvbmQgYW1vdW50Jyk7XG5cbiAgICAgIC8vIElucHV0IHNob3VsZCBjb21lIGZyb20gdGhlIHByb3h5IGRlbGVnYXRlIGFkZHJlc3NcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChleHBsYW5hdGlvbi5pbnB1dHMubGVuZ3RoLCAxLCAnU2hvdWxkIGhhdmUgZXhhY3RseSBvbmUgaW5wdXQnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChleHBsYW5hdGlvbi5pbnB1dHNbMF0uYWRkcmVzcywgcHJveHlEZWxlZ2F0ZSwgJ0lucHV0IHNob3VsZCBjb21lIGZyb20gcHJveHkgZGVsZWdhdGUnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChcbiAgICAgICAgZXhwbGFuYXRpb24uaW5wdXRzWzBdLnZhbHVlU3RyaW5nLFxuICAgICAgICBvdXRwdXQuYW1vdW50LFxuICAgICAgICAnSW5wdXQgdmFsdWUgc2hvdWxkIGVxdWFsIHByb3h5IGRlcG9zaXQgY29zdCdcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgncHJveHkgZGVwb3NpdCBjb3N0IHNob3VsZCBiZSBjb25zaXN0ZW50IGFjcm9zcyBjYWxscycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHByb3h5RGVsZWdhdGUgPSBhY2NvdW50cy5hY2NvdW50Mi5hZGRyZXNzO1xuICAgICAgY29uc3Qgd2FzbVR4ID0gYnVpbGRUcmFuc2FjdGlvbihcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6ICd1bnN0YWtlJyxcbiAgICAgICAgICBhbW91bnQ6IDEwMDAwMDAwMDAwMDBuLFxuICAgICAgICAgIHN0b3BTdGFraW5nOiB0cnVlLFxuICAgICAgICAgIHByb3h5QWRkcmVzczogcHJveHlEZWxlZ2F0ZSxcbiAgICAgICAgfSxcbiAgICAgICAgY3JlYXRlV2FzbUNvbnRleHQoKVxuICAgICAgKTtcblxuICAgICAgY29uc3QgdHhIZXggPSB3YXNtVHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICAgIGNvbnN0IGV4cGxhbmF0aW9uMSA9IGV4cGxhaW5Eb3RUcmFuc2FjdGlvbih7IHR4SGV4LCBtYXRlcmlhbCwgc2VuZGVyQWRkcmVzczogYWNjb3VudHMuYWNjb3VudDEuYWRkcmVzcyB9KTtcbiAgICAgIGNvbnN0IGV4cGxhbmF0aW9uMiA9IGV4cGxhaW5Eb3RUcmFuc2FjdGlvbih7IHR4SGV4LCBtYXRlcmlhbCwgc2VuZGVyQWRkcmVzczogYWNjb3VudHMuYWNjb3VudDEuYWRkcmVzcyB9KTtcblxuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGV4cGxhbmF0aW9uMS5vdXRwdXRzWzBdLmFtb3VudCwgZXhwbGFuYXRpb24yLm91dHB1dHNbMF0uYW1vdW50KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0JhdGNoIHN0YWtlIChib25kICsgYWRkUHJveHkpJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgZXhwbGFpbiBiYXRjaCBzdGFrZSB3aXRoIGJvbmQgYW1vdW50IGFuZCBwcm94eSBkZXBvc2l0IGNvc3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBib25kQW1vdW50ID0gMTAwMDAwMDAwMDAwMDBuOyAvLyAxMCBET1RcbiAgICAgIGNvbnN0IHByb3h5RGVsZWdhdGUgPSBhY2NvdW50cy5hY2NvdW50Mi5hZGRyZXNzO1xuXG4gICAgICAvLyBCdWlsZCBhIG5ldyBzdGFrZSB3aXRoIHByb3h5OiBwcm9kdWNlcyBiYXRjaEFsbChib25kLCBhZGRQcm94eSlcbiAgICAgIGNvbnN0IHdhc21UeCA9IGJ1aWxkVHJhbnNhY3Rpb24oXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiAnc3Rha2UnLFxuICAgICAgICAgIGFtb3VudDogYm9uZEFtb3VudCxcbiAgICAgICAgICBwcm94eUFkZHJlc3M6IHByb3h5RGVsZWdhdGUsXG4gICAgICAgICAgcGF5ZWU6IHsgdHlwZTogJ3N0YWtlZCcgfSxcbiAgICAgICAgfSxcbiAgICAgICAgY3JlYXRlV2FzbUNvbnRleHQoKVxuICAgICAgKTtcblxuICAgICAgY29uc3QgdHhIZXggPSB3YXNtVHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICAgIGNvbnN0IGV4cGxhbmF0aW9uID0gZXhwbGFpbkRvdFRyYW5zYWN0aW9uKHsgdHhIZXgsIG1hdGVyaWFsLCBzZW5kZXJBZGRyZXNzOiBhY2NvdW50cy5hY2NvdW50MS5hZGRyZXNzIH0pO1xuXG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZXhwbGFuYXRpb24udHlwZSwgVHJhbnNhY3Rpb25UeXBlLkJhdGNoKTtcblxuICAgICAgLy8gU2hvdWxkIGhhdmUgdHdvIG91dHB1dHM6IGJvbmQgYW1vdW50ICh0byBTVEFLSU5HX0RFU1RJTkFUSU9OIHNlbnRpbmVsKSArIHByb3h5IGRlcG9zaXQgY29zdCAodG8gcHJveHkgZGVsZWdhdGUpXG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZXhwbGFuYXRpb24ub3V0cHV0cy5sZW5ndGgsIDIsICdTaG91bGQgaGF2ZSBib25kICsgcHJveHkgZGVwb3NpdCBvdXRwdXRzJyk7XG5cbiAgICAgIGNvbnN0IHN0YWtpbmdPdXRwdXQgPSBleHBsYW5hdGlvbi5vdXRwdXRzLmZpbmQoXG4gICAgICAgIChvKSA9PiBvLmFkZHJlc3MgPT09ICc1QzRocmZqdzlEalhaVHpWM013enJyQXI5UDFNSmhTcnZXR1dxaTFlU3V5VXBuaE0nXG4gICAgICApO1xuICAgICAgYXNzZXJ0Lm9rKHN0YWtpbmdPdXRwdXQsICdTaG91bGQgaGF2ZSBTVEFLSU5HX0RFU1RJTkFUSU9OIHNlbnRpbmVsIG91dHB1dCBmb3IgYm9uZCBhbW91bnQnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChCaWdJbnQoc3Rha2luZ091dHB1dCEuYW1vdW50KSwgYm9uZEFtb3VudCwgJ0JvbmQgYW1vdW50IHNob3VsZCBtYXRjaCcpO1xuXG4gICAgICBjb25zdCBwcm94eU91dHB1dCA9IGV4cGxhbmF0aW9uLm91dHB1dHMuZmluZChcbiAgICAgICAgKG8pID0+IG8uYWRkcmVzcyAhPT0gJzVDNGhyZmp3OURqWFpUelYzTXd6cnJBcjlQMU1KaFNydldHV3FpMWVTdXlVcG5oTSdcbiAgICAgICk7XG4gICAgICBhc3NlcnQub2socHJveHlPdXRwdXQsICdTaG91bGQgaGF2ZSBwcm94eSBkZXBvc2l0IG91dHB1dCcpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHByb3h5T3V0cHV0IS5hZGRyZXNzLCBwcm94eURlbGVnYXRlKTtcbiAgICAgIGFzc2VydC5vayhCaWdJbnQocHJveHlPdXRwdXQhLmFtb3VudCkgPiAwbiwgJ1Byb3h5IGRlcG9zaXQgY29zdCBzaG91bGQgYmUgcG9zaXRpdmUnKTtcblxuICAgICAgLy8gQWxsIGlucHV0cyBzaG91bGQgY29tZSBmcm9tIHNlbmRlclxuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGV4cGxhbmF0aW9uLmlucHV0cy5sZW5ndGgsIDIpO1xuICAgICAgZm9yIChjb25zdCBpbnB1dCBvZiBleHBsYW5hdGlvbi5pbnB1dHMpIHtcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGlucHV0LmFkZHJlc3MsIGFjY291bnRzLmFjY291bnQxLmFkZHJlc3MpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnTm9uLWJhdGNoIHRyYW5zYWN0aW9ucyAoc2hvdWxkIG5vdCBiZSBhZmZlY3RlZCknLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBleHBsYWluIHRyYW5zZmVyIG5vcm1hbGx5JywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgd2FzbVR4ID0gYnVpbGRUcmFuc2FjdGlvbihcbiAgICAgICAgeyB0eXBlOiAncGF5bWVudCcsIHRvOiBhY2NvdW50cy5hY2NvdW50Mi5hZGRyZXNzLCBhbW91bnQ6IDEwMDAwMDAwMDAwMDBuLCBrZWVwQWxpdmU6IHRydWUgfSxcbiAgICAgICAgY3JlYXRlV2FzbUNvbnRleHQoKVxuICAgICAgKTtcblxuICAgICAgY29uc3QgZXhwbGFuYXRpb24gPSBleHBsYWluRG90VHJhbnNhY3Rpb24oe1xuICAgICAgICB0eEhleDogd2FzbVR4LnRvQnJvYWRjYXN0Rm9ybWF0KCksXG4gICAgICAgIG1hdGVyaWFsLFxuICAgICAgICBzZW5kZXJBZGRyZXNzOiBhY2NvdW50cy5hY2NvdW50MS5hZGRyZXNzLFxuICAgICAgfSk7XG5cbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChleHBsYW5hdGlvbi50eXBlLCBUcmFuc2FjdGlvblR5cGUuU2VuZCk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZXhwbGFuYXRpb24ub3V0cHV0cy5sZW5ndGgsIDEpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGV4cGxhbmF0aW9uLm91dHB1dHNbMF0uYWRkcmVzcywgYWNjb3VudHMuYWNjb3VudDIuYWRkcmVzcyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZXhwbGFuYXRpb24ub3V0cHV0c1swXS5hbW91bnQsICcxMDAwMDAwMDAwMDAwJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGV4cGxhaW4gc2luZ2xlIHVuc3Rha2UgKHVuYm9uZCkgbm9ybWFsbHknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB3YXNtVHggPSBidWlsZFRyYW5zYWN0aW9uKHsgdHlwZTogJ3Vuc3Rha2UnLCBhbW91bnQ6IDUwMDAwMDAwMDAwMDBuIH0sIGNyZWF0ZVdhc21Db250ZXh0KCkpO1xuXG4gICAgICBjb25zdCBleHBsYW5hdGlvbiA9IGV4cGxhaW5Eb3RUcmFuc2FjdGlvbih7XG4gICAgICAgIHR4SGV4OiB3YXNtVHgudG9Ccm9hZGNhc3RGb3JtYXQoKSxcbiAgICAgICAgbWF0ZXJpYWwsXG4gICAgICAgIHNlbmRlckFkZHJlc3M6IGFjY291bnRzLmFjY291bnQxLmFkZHJlc3MsXG4gICAgICB9KTtcblxuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGV4cGxhbmF0aW9uLnR5cGUsIFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nVW5sb2NrKTtcbiAgICAgIC8vIFVuYm9uZCBoYXMgbm8gb3V0cHV0cyAoYmFsYW5jZSBzdGF5cyBpbiBhY2NvdW50IGFzIHVubG9ja2luZywgbWF0Y2hpbmcgbGVnYWN5IGJlaGF2aW9yKVxuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGV4cGxhbmF0aW9uLm91dHB1dHMubGVuZ3RoLCAwKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==