@bitgo-beta/sdk-coin-sol 7.6.4-beta.31 → 7.6.4-beta.310

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 (395) hide show
  1. package/dist/cjs/src/bigint-buffer-guard.d.ts.map +1 -0
  2. package/dist/cjs/src/bigint-buffer-guard.js +29 -0
  3. package/dist/cjs/src/config/token2022StaticConfig.d.ts.map +1 -0
  4. package/dist/cjs/src/config/token2022StaticConfig.js +50 -0
  5. package/dist/cjs/src/index.d.ts.map +1 -0
  6. package/dist/{src → cjs/src}/index.js +1 -1
  7. package/dist/cjs/src/lib/ataInitializationBuilder.d.ts.map +1 -0
  8. package/dist/cjs/src/lib/ataInitializationBuilder.js +196 -0
  9. package/dist/cjs/src/lib/closeAtaBuilder.d.ts.map +1 -0
  10. package/dist/cjs/src/lib/closeAtaBuilder.js +69 -0
  11. package/dist/{src → cjs/src}/lib/constants.d.ts +24 -0
  12. package/dist/cjs/src/lib/constants.d.ts.map +1 -0
  13. package/dist/cjs/src/lib/constants.js +196 -0
  14. package/dist/cjs/src/lib/customInstructionBuilder.d.ts.map +1 -0
  15. package/dist/cjs/src/lib/customInstructionBuilder.js +289 -0
  16. package/dist/cjs/src/lib/explainTransactionWasm.d.ts +21 -0
  17. package/dist/cjs/src/lib/explainTransactionWasm.d.ts.map +1 -0
  18. package/dist/cjs/src/lib/explainTransactionWasm.js +264 -0
  19. package/dist/{src → cjs/src}/lib/iface.d.ts +20 -2
  20. package/dist/cjs/src/lib/iface.d.ts.map +1 -0
  21. package/dist/cjs/src/lib/iface.js +7 -0
  22. package/dist/{src → cjs/src}/lib/index.d.ts +1 -0
  23. package/dist/cjs/src/lib/index.d.ts.map +1 -0
  24. package/dist/{src → cjs/src}/lib/index.js +4 -2
  25. package/dist/{src → cjs/src}/lib/instructionParamsFactory.d.ts +1 -0
  26. package/dist/cjs/src/lib/instructionParamsFactory.d.ts.map +1 -0
  27. package/dist/cjs/src/lib/instructionParamsFactory.js +1059 -0
  28. package/dist/cjs/src/lib/jitoStakePoolOperations.d.ts.map +1 -0
  29. package/dist/cjs/src/lib/jitoStakePoolOperations.js +200 -0
  30. package/dist/cjs/src/lib/keyPair.d.ts.map +1 -0
  31. package/dist/cjs/src/lib/keyPair.js +63 -0
  32. package/dist/cjs/src/lib/messages/index.d.ts.map +1 -0
  33. package/dist/{src → cjs/src}/lib/messages/index.js +1 -1
  34. package/dist/cjs/src/lib/messages/messageBuilderFactory.d.ts.map +1 -0
  35. package/dist/cjs/src/lib/messages/messageBuilderFactory.js +19 -0
  36. package/dist/cjs/src/lib/recoverNestedAtaBuilder.d.ts +25 -0
  37. package/dist/cjs/src/lib/recoverNestedAtaBuilder.d.ts.map +1 -0
  38. package/dist/cjs/src/lib/recoverNestedAtaBuilder.js +90 -0
  39. package/dist/cjs/src/lib/solInstructionFactory.d.ts.map +1 -0
  40. package/dist/cjs/src/lib/solInstructionFactory.js +595 -0
  41. package/dist/cjs/src/lib/stakingActivateBuilder.d.ts.map +1 -0
  42. package/dist/cjs/src/lib/stakingActivateBuilder.js +120 -0
  43. package/dist/cjs/src/lib/stakingAuthorizeBuilder.d.ts.map +1 -0
  44. package/dist/cjs/src/lib/stakingAuthorizeBuilder.js +89 -0
  45. package/dist/cjs/src/lib/stakingDeactivateBuilder.d.ts.map +1 -0
  46. package/dist/cjs/src/lib/stakingDeactivateBuilder.js +208 -0
  47. package/dist/cjs/src/lib/stakingDelegateBuilder.d.ts.map +1 -0
  48. package/dist/cjs/src/lib/stakingDelegateBuilder.js +120 -0
  49. package/dist/cjs/src/lib/stakingRawMsgAuthorizeBuilder.d.ts.map +1 -0
  50. package/dist/cjs/src/lib/stakingRawMsgAuthorizeBuilder.js +110 -0
  51. package/dist/cjs/src/lib/stakingWithdrawBuilder.d.ts.map +1 -0
  52. package/dist/cjs/src/lib/stakingWithdrawBuilder.js +78 -0
  53. package/dist/cjs/src/lib/token2022Config.d.ts.map +1 -0
  54. package/dist/cjs/src/lib/token2022Config.js +27 -0
  55. package/dist/cjs/src/lib/tokenTransferBuilder.d.ts.map +1 -0
  56. package/dist/cjs/src/lib/tokenTransferBuilder.js +188 -0
  57. package/dist/cjs/src/lib/transaction.d.ts.map +1 -0
  58. package/dist/cjs/src/lib/transaction.js +612 -0
  59. package/dist/cjs/src/lib/transactionBuilder.d.ts.map +1 -0
  60. package/dist/cjs/src/lib/transactionBuilder.js +380 -0
  61. package/dist/{src → cjs/src}/lib/transactionBuilderFactory.d.ts +5 -0
  62. package/dist/cjs/src/lib/transactionBuilderFactory.d.ts.map +1 -0
  63. package/dist/cjs/src/lib/transactionBuilderFactory.js +209 -0
  64. package/dist/cjs/src/lib/transferBuilder.d.ts.map +1 -0
  65. package/dist/cjs/src/lib/transferBuilder.js +70 -0
  66. package/dist/cjs/src/lib/transferBuilderV2.d.ts.map +1 -0
  67. package/dist/cjs/src/lib/transferBuilderV2.js +210 -0
  68. package/dist/cjs/src/lib/utils.d.ts.map +1 -0
  69. package/dist/cjs/src/lib/utils.js +595 -0
  70. package/dist/cjs/src/lib/walletInitializationBuilder.d.ts.map +1 -0
  71. package/dist/cjs/src/lib/walletInitializationBuilder.js +71 -0
  72. package/dist/cjs/src/register.d.ts.map +1 -0
  73. package/dist/cjs/src/register.js +15 -0
  74. package/dist/{src → cjs/src}/sol.d.ts +40 -0
  75. package/dist/cjs/src/sol.d.ts.map +1 -0
  76. package/dist/cjs/src/sol.js +1402 -0
  77. package/dist/cjs/src/solToken.d.ts.map +1 -0
  78. package/dist/cjs/src/solToken.js +69 -0
  79. package/dist/cjs/src/tsol.d.ts.map +1 -0
  80. package/dist/cjs/src/tsol.js +24 -0
  81. package/dist/{test → cjs/test}/fixtures/sol.d.ts.map +1 -1
  82. package/dist/cjs/test/fixtures/sol.js +1433 -0
  83. package/dist/{test → cjs/test}/resources/sol.d.ts +27 -27
  84. package/dist/cjs/test/resources/sol.d.ts.map +1 -0
  85. package/dist/cjs/test/resources/sol.js +320 -0
  86. package/dist/cjs/test/unit/explainTransactionWasm.d.ts +5 -0
  87. package/dist/cjs/test/unit/explainTransactionWasm.d.ts.map +1 -0
  88. package/dist/cjs/test/unit/explainTransactionWasm.js +26 -0
  89. package/dist/cjs/test/unit/fixtures/solBackupKey.d.ts.map +1 -0
  90. package/dist/cjs/test/unit/fixtures/solBackupKey.js +8 -0
  91. package/dist/cjs/test/unit/getBuilderFactory.d.ts.map +1 -0
  92. package/dist/cjs/test/unit/getBuilderFactory.js +10 -0
  93. package/dist/cjs/test/unit/instructionParamsFactory.d.ts.map +1 -0
  94. package/dist/cjs/test/unit/instructionParamsFactory.js +412 -0
  95. package/dist/cjs/test/unit/instructionParamsFactory.staking.d.ts.map +1 -0
  96. package/dist/cjs/test/unit/instructionParamsFactory.staking.js +1059 -0
  97. package/dist/cjs/test/unit/jitoWasmVerification.d.ts +2 -0
  98. package/dist/cjs/test/unit/jitoWasmVerification.d.ts.map +1 -0
  99. package/dist/cjs/test/unit/jitoWasmVerification.js +78 -0
  100. package/dist/{test → cjs/test}/unit/keyPair.d.ts.map +1 -1
  101. package/dist/cjs/test/unit/keyPair.js +177 -0
  102. package/dist/cjs/test/unit/messages/messageBuilderFactory.d.ts.map +1 -0
  103. package/dist/cjs/test/unit/messages/messageBuilderFactory.js +118 -0
  104. package/dist/cjs/test/unit/messages/simpleMessageBuilder.d.ts.map +1 -0
  105. package/dist/cjs/test/unit/messages/simpleMessageBuilder.js +194 -0
  106. package/dist/{test → cjs/test}/unit/sol.d.ts.map +1 -1
  107. package/dist/cjs/test/unit/sol.js +3326 -0
  108. package/dist/cjs/test/unit/solInstructionFactory.d.ts.map +1 -0
  109. package/dist/cjs/test/unit/solInstructionFactory.js +454 -0
  110. package/dist/cjs/test/unit/solToken.d.ts.map +1 -0
  111. package/dist/cjs/test/unit/solToken.js +31 -0
  112. package/dist/cjs/test/unit/transaction.d.ts.map +1 -0
  113. package/dist/cjs/test/unit/transaction.js +1108 -0
  114. package/dist/cjs/test/unit/transactionBuilder/StakingWithdrawBuilder.d.ts.map +1 -0
  115. package/dist/cjs/test/unit/transactionBuilder/StakingWithdrawBuilder.js +202 -0
  116. package/dist/cjs/test/unit/transactionBuilder/ataInitBuilder.d.ts.map +1 -0
  117. package/dist/cjs/test/unit/transactionBuilder/ataInitBuilder.js +471 -0
  118. package/dist/cjs/test/unit/transactionBuilder/customInstructionBuilder.d.ts.map +1 -0
  119. package/dist/cjs/test/unit/transactionBuilder/customInstructionBuilder.js +413 -0
  120. package/dist/cjs/test/unit/transactionBuilder/stakingActivateBuilder.d.ts.map +1 -0
  121. package/dist/cjs/test/unit/transactionBuilder/stakingActivateBuilder.js +430 -0
  122. package/dist/cjs/test/unit/transactionBuilder/stakingAuthorizeBuilder.d.ts.map +1 -0
  123. package/dist/cjs/test/unit/transactionBuilder/stakingAuthorizeBuilder.js +157 -0
  124. package/dist/cjs/test/unit/transactionBuilder/stakingDeactivateBuilder.d.ts.map +1 -0
  125. package/dist/cjs/test/unit/transactionBuilder/stakingDeactivateBuilder.js +384 -0
  126. package/dist/cjs/test/unit/transactionBuilder/stakingDelegateBuilder.d.ts.map +1 -0
  127. package/dist/cjs/test/unit/transactionBuilder/stakingDelegateBuilder.js +224 -0
  128. package/dist/cjs/test/unit/transactionBuilder/stakingRawMsgAuthorizeBuilder.d.ts.map +1 -0
  129. package/dist/cjs/test/unit/transactionBuilder/stakingRawMsgAuthorizeBuilder.js +259 -0
  130. package/dist/cjs/test/unit/transactionBuilder/tokenTransferBuilder.d.ts.map +1 -0
  131. package/dist/cjs/test/unit/transactionBuilder/tokenTransferBuilder.js +787 -0
  132. package/dist/cjs/test/unit/transactionBuilder/transactionBuilder.d.ts.map +1 -0
  133. package/dist/cjs/test/unit/transactionBuilder/transactionBuilder.js +495 -0
  134. package/dist/cjs/test/unit/transactionBuilder/transferBuilder.d.ts.map +1 -0
  135. package/dist/cjs/test/unit/transactionBuilder/transferBuilder.js +286 -0
  136. package/dist/cjs/test/unit/transactionBuilder/transferBuilderV2.d.ts.map +1 -0
  137. package/dist/cjs/test/unit/transactionBuilder/transferBuilderV2.js +862 -0
  138. package/dist/cjs/test/unit/transactionBuilder/walletInitBuilder.d.ts.map +1 -0
  139. package/dist/cjs/test/unit/transactionBuilder/walletInitBuilder.js +259 -0
  140. package/dist/{test → cjs/test}/unit/utils.d.ts.map +1 -1
  141. package/dist/cjs/test/unit/utils.js +517 -0
  142. package/dist/cjs/test/unit/versionedTransaction.d.ts.map +1 -0
  143. package/dist/cjs/test/unit/versionedTransaction.js +207 -0
  144. package/dist/cjs/tsconfig.tsbuildinfo +1 -0
  145. package/dist/esm/bigint-buffer-guard.d.ts +1 -0
  146. package/dist/esm/config/token2022StaticConfig.d.ts +3 -0
  147. package/dist/esm/config/token2022StaticConfig.js +47 -0
  148. package/dist/esm/index.d.ts +7 -0
  149. package/dist/esm/index.js +7 -0
  150. package/dist/esm/lib/ataInitializationBuilder.d.ts +47 -0
  151. package/dist/esm/lib/ataInitializationBuilder.js +156 -0
  152. package/dist/esm/lib/closeAtaBuilder.d.ts +19 -0
  153. package/dist/esm/lib/closeAtaBuilder.js +62 -0
  154. package/dist/esm/lib/constants.d.ts +164 -0
  155. package/dist/esm/lib/constants.d.ts.map +1 -0
  156. package/dist/esm/lib/constants.js +193 -0
  157. package/dist/esm/lib/customInstructionBuilder.d.ts +72 -0
  158. package/dist/esm/lib/customInstructionBuilder.js +282 -0
  159. package/dist/esm/lib/explainTransactionWasm.d.ts +21 -0
  160. package/dist/esm/lib/explainTransactionWasm.d.ts.map +1 -0
  161. package/dist/esm/lib/explainTransactionWasm.js +261 -0
  162. package/dist/esm/lib/iface.d.ts +262 -0
  163. package/dist/esm/lib/iface.d.ts.map +1 -0
  164. package/dist/esm/lib/iface.js +3 -0
  165. package/dist/esm/lib/index.d.ts +23 -0
  166. package/dist/{src → esm}/lib/index.d.ts.map +1 -1
  167. package/dist/esm/lib/index.js +23 -0
  168. package/dist/esm/lib/instructionParamsFactory.d.ts +13 -0
  169. package/dist/{src → esm}/lib/instructionParamsFactory.d.ts.map +1 -1
  170. package/dist/esm/lib/instructionParamsFactory.js +1052 -0
  171. package/dist/esm/lib/jitoStakePoolOperations.d.ts +113 -0
  172. package/dist/esm/lib/jitoStakePoolOperations.js +189 -0
  173. package/dist/esm/lib/keyPair.d.ts +26 -0
  174. package/dist/esm/lib/keyPair.js +59 -0
  175. package/dist/esm/lib/messages/index.d.ts +2 -0
  176. package/dist/esm/lib/messages/index.js +2 -0
  177. package/dist/esm/lib/messages/messageBuilderFactory.d.ts +7 -0
  178. package/dist/{src → esm}/lib/messages/messageBuilderFactory.js +5 -9
  179. package/dist/esm/lib/recoverNestedAtaBuilder.d.ts +25 -0
  180. package/dist/esm/lib/recoverNestedAtaBuilder.d.ts.map +1 -0
  181. package/dist/esm/lib/recoverNestedAtaBuilder.js +83 -0
  182. package/dist/esm/lib/solInstructionFactory.d.ts +10 -0
  183. package/dist/esm/lib/solInstructionFactory.d.ts.map +1 -0
  184. package/dist/esm/lib/solInstructionFactory.js +589 -0
  185. package/dist/esm/lib/stakingActivateBuilder.d.ts +59 -0
  186. package/dist/esm/lib/stakingActivateBuilder.js +113 -0
  187. package/dist/esm/lib/stakingAuthorizeBuilder.d.ts +43 -0
  188. package/dist/esm/lib/stakingAuthorizeBuilder.js +82 -0
  189. package/dist/esm/lib/stakingDeactivateBuilder.d.ts +81 -0
  190. package/dist/{src → esm}/lib/stakingDeactivateBuilder.js +31 -38
  191. package/dist/esm/lib/stakingDelegateBuilder.d.ts +42 -0
  192. package/dist/esm/lib/stakingDelegateBuilder.js +113 -0
  193. package/dist/esm/lib/stakingRawMsgAuthorizeBuilder.d.ts +33 -0
  194. package/dist/esm/lib/stakingRawMsgAuthorizeBuilder.js +103 -0
  195. package/dist/esm/lib/stakingWithdrawBuilder.d.ts +31 -0
  196. package/dist/esm/lib/stakingWithdrawBuilder.js +71 -0
  197. package/dist/esm/lib/token2022Config.d.ts +44 -0
  198. package/dist/esm/lib/token2022Config.js +23 -0
  199. package/dist/esm/lib/tokenTransferBuilder.d.ts +41 -0
  200. package/dist/esm/lib/tokenTransferBuilder.js +181 -0
  201. package/dist/esm/lib/transaction.d.ts +103 -0
  202. package/dist/esm/lib/transaction.d.ts.map +1 -0
  203. package/dist/esm/lib/transaction.js +605 -0
  204. package/dist/esm/lib/transactionBuilder.d.ts +128 -0
  205. package/dist/esm/lib/transactionBuilder.js +373 -0
  206. package/dist/esm/lib/transactionBuilderFactory.d.ts +120 -0
  207. package/dist/esm/lib/transactionBuilderFactory.d.ts.map +1 -0
  208. package/dist/esm/lib/transactionBuilderFactory.js +205 -0
  209. package/dist/esm/lib/transferBuilder.d.ts +26 -0
  210. package/dist/esm/lib/transferBuilder.js +63 -0
  211. package/dist/esm/lib/transferBuilderV2.d.ts +43 -0
  212. package/dist/esm/lib/transferBuilderV2.js +203 -0
  213. package/dist/esm/lib/utils.d.ts +200 -0
  214. package/dist/{src → esm}/lib/utils.d.ts.map +1 -1
  215. package/dist/esm/lib/utils.js +558 -0
  216. package/dist/esm/lib/walletInitializationBuilder.d.ts +26 -0
  217. package/dist/esm/lib/walletInitializationBuilder.js +64 -0
  218. package/dist/esm/register.d.ts +3 -0
  219. package/dist/esm/register.js +11 -0
  220. package/dist/esm/sol.d.ts +267 -0
  221. package/dist/esm/sol.d.ts.map +1 -0
  222. package/dist/esm/sol.js +1361 -0
  223. package/dist/esm/solToken.d.ts +37 -0
  224. package/dist/esm/solToken.js +65 -0
  225. package/dist/esm/tsol.d.ts +11 -0
  226. package/dist/esm/tsol.js +20 -0
  227. package/package.json +34 -15
  228. package/dist/src/config/token2022StaticConfig.js +0 -50
  229. package/dist/src/lib/ataInitializationBuilder.js +0 -196
  230. package/dist/src/lib/closeAtaBuilder.js +0 -69
  231. package/dist/src/lib/constants.d.ts.map +0 -1
  232. package/dist/src/lib/constants.js +0 -171
  233. package/dist/src/lib/customInstructionBuilder.js +0 -289
  234. package/dist/src/lib/iface.d.ts.map +0 -1
  235. package/dist/src/lib/iface.js +0 -7
  236. package/dist/src/lib/instructionParamsFactory.js +0 -1036
  237. package/dist/src/lib/jitoStakePoolOperations.js +0 -200
  238. package/dist/src/lib/keyPair.js +0 -63
  239. package/dist/src/lib/solInstructionFactory.d.ts.map +0 -1
  240. package/dist/src/lib/solInstructionFactory.js +0 -572
  241. package/dist/src/lib/stakingActivateBuilder.js +0 -120
  242. package/dist/src/lib/stakingAuthorizeBuilder.js +0 -89
  243. package/dist/src/lib/stakingDelegateBuilder.js +0 -120
  244. package/dist/src/lib/stakingRawMsgAuthorizeBuilder.js +0 -110
  245. package/dist/src/lib/stakingWithdrawBuilder.js +0 -78
  246. package/dist/src/lib/token2022Config.js +0 -27
  247. package/dist/src/lib/tokenTransferBuilder.js +0 -188
  248. package/dist/src/lib/transaction.d.ts.map +0 -1
  249. package/dist/src/lib/transaction.js +0 -595
  250. package/dist/src/lib/transactionBuilder.js +0 -380
  251. package/dist/src/lib/transactionBuilderFactory.d.ts.map +0 -1
  252. package/dist/src/lib/transactionBuilderFactory.js +0 -202
  253. package/dist/src/lib/transferBuilder.js +0 -70
  254. package/dist/src/lib/transferBuilderV2.js +0 -210
  255. package/dist/src/lib/utils.js +0 -589
  256. package/dist/src/lib/walletInitializationBuilder.js +0 -71
  257. package/dist/src/register.js +0 -15
  258. package/dist/src/sol.d.ts.map +0 -1
  259. package/dist/src/sol.js +0 -1285
  260. package/dist/src/solToken.js +0 -69
  261. package/dist/src/tsol.js +0 -24
  262. package/dist/test/fixtures/sol.js +0 -1433
  263. package/dist/test/resources/sol.d.ts.map +0 -1
  264. package/dist/test/resources/sol.js +0 -320
  265. package/dist/test/unit/fixtures/solBackupKey.d.ts.map +0 -1
  266. package/dist/test/unit/fixtures/solBackupKey.js +0 -8
  267. package/dist/test/unit/getBuilderFactory.d.ts.map +0 -1
  268. package/dist/test/unit/getBuilderFactory.js +0 -10
  269. package/dist/test/unit/instructionParamsFactory.d.ts.map +0 -1
  270. package/dist/test/unit/instructionParamsFactory.js +0 -412
  271. package/dist/test/unit/instructionParamsFactory.staking.d.ts.map +0 -1
  272. package/dist/test/unit/instructionParamsFactory.staking.js +0 -1059
  273. package/dist/test/unit/keyPair.js +0 -177
  274. package/dist/test/unit/messages/messageBuilderFactory.d.ts.map +0 -1
  275. package/dist/test/unit/messages/messageBuilderFactory.js +0 -118
  276. package/dist/test/unit/messages/simpleMessageBuilder.d.ts.map +0 -1
  277. package/dist/test/unit/messages/simpleMessageBuilder.js +0 -194
  278. package/dist/test/unit/sol.js +0 -3108
  279. package/dist/test/unit/solInstructionFactory.d.ts.map +0 -1
  280. package/dist/test/unit/solInstructionFactory.js +0 -454
  281. package/dist/test/unit/solToken.d.ts.map +0 -1
  282. package/dist/test/unit/solToken.js +0 -31
  283. package/dist/test/unit/transaction.d.ts.map +0 -1
  284. package/dist/test/unit/transaction.js +0 -983
  285. package/dist/test/unit/transactionBuilder/StakingWithdrawBuilder.d.ts.map +0 -1
  286. package/dist/test/unit/transactionBuilder/StakingWithdrawBuilder.js +0 -202
  287. package/dist/test/unit/transactionBuilder/ataInitBuilder.d.ts.map +0 -1
  288. package/dist/test/unit/transactionBuilder/ataInitBuilder.js +0 -471
  289. package/dist/test/unit/transactionBuilder/customInstructionBuilder.d.ts.map +0 -1
  290. package/dist/test/unit/transactionBuilder/customInstructionBuilder.js +0 -413
  291. package/dist/test/unit/transactionBuilder/stakingActivateBuilder.d.ts.map +0 -1
  292. package/dist/test/unit/transactionBuilder/stakingActivateBuilder.js +0 -430
  293. package/dist/test/unit/transactionBuilder/stakingAuthorizeBuilder.d.ts.map +0 -1
  294. package/dist/test/unit/transactionBuilder/stakingAuthorizeBuilder.js +0 -157
  295. package/dist/test/unit/transactionBuilder/stakingDeactivateBuilder.d.ts.map +0 -1
  296. package/dist/test/unit/transactionBuilder/stakingDeactivateBuilder.js +0 -384
  297. package/dist/test/unit/transactionBuilder/stakingDelegateBuilder.d.ts.map +0 -1
  298. package/dist/test/unit/transactionBuilder/stakingDelegateBuilder.js +0 -224
  299. package/dist/test/unit/transactionBuilder/stakingRawMsgAuthorizeBuilder.d.ts.map +0 -1
  300. package/dist/test/unit/transactionBuilder/stakingRawMsgAuthorizeBuilder.js +0 -259
  301. package/dist/test/unit/transactionBuilder/tokenTransferBuilder.d.ts.map +0 -1
  302. package/dist/test/unit/transactionBuilder/tokenTransferBuilder.js +0 -787
  303. package/dist/test/unit/transactionBuilder/transactionBuilder.d.ts.map +0 -1
  304. package/dist/test/unit/transactionBuilder/transactionBuilder.js +0 -495
  305. package/dist/test/unit/transactionBuilder/transferBuilder.d.ts.map +0 -1
  306. package/dist/test/unit/transactionBuilder/transferBuilder.js +0 -286
  307. package/dist/test/unit/transactionBuilder/transferBuilderV2.d.ts.map +0 -1
  308. package/dist/test/unit/transactionBuilder/transferBuilderV2.js +0 -862
  309. package/dist/test/unit/transactionBuilder/walletInitBuilder.d.ts.map +0 -1
  310. package/dist/test/unit/transactionBuilder/walletInitBuilder.js +0 -259
  311. package/dist/test/unit/utils.js +0 -517
  312. package/dist/test/unit/versionedTransaction.d.ts.map +0 -1
  313. package/dist/test/unit/versionedTransaction.js +0 -207
  314. package/dist/tsconfig.tsbuildinfo +0 -1
  315. /package/dist/{src → cjs/src}/bigint-buffer-guard.d.ts +0 -0
  316. /package/dist/{src → cjs/src}/config/token2022StaticConfig.d.ts +0 -0
  317. /package/dist/{src → cjs/src}/index.d.ts +0 -0
  318. /package/dist/{src → cjs/src}/lib/ataInitializationBuilder.d.ts +0 -0
  319. /package/dist/{src → cjs/src}/lib/closeAtaBuilder.d.ts +0 -0
  320. /package/dist/{src → cjs/src}/lib/customInstructionBuilder.d.ts +0 -0
  321. /package/dist/{src → cjs/src}/lib/jitoStakePoolOperations.d.ts +0 -0
  322. /package/dist/{src → cjs/src}/lib/keyPair.d.ts +0 -0
  323. /package/dist/{src → cjs/src}/lib/messages/index.d.ts +0 -0
  324. /package/dist/{src → cjs/src}/lib/messages/messageBuilderFactory.d.ts +0 -0
  325. /package/dist/{src → cjs/src}/lib/solInstructionFactory.d.ts +0 -0
  326. /package/dist/{src → cjs/src}/lib/stakingActivateBuilder.d.ts +0 -0
  327. /package/dist/{src → cjs/src}/lib/stakingAuthorizeBuilder.d.ts +0 -0
  328. /package/dist/{src → cjs/src}/lib/stakingDeactivateBuilder.d.ts +0 -0
  329. /package/dist/{src → cjs/src}/lib/stakingDelegateBuilder.d.ts +0 -0
  330. /package/dist/{src → cjs/src}/lib/stakingRawMsgAuthorizeBuilder.d.ts +0 -0
  331. /package/dist/{src → cjs/src}/lib/stakingWithdrawBuilder.d.ts +0 -0
  332. /package/dist/{src → cjs/src}/lib/token2022Config.d.ts +0 -0
  333. /package/dist/{src → cjs/src}/lib/tokenTransferBuilder.d.ts +0 -0
  334. /package/dist/{src → cjs/src}/lib/transaction.d.ts +0 -0
  335. /package/dist/{src → cjs/src}/lib/transactionBuilder.d.ts +0 -0
  336. /package/dist/{src → cjs/src}/lib/transferBuilder.d.ts +0 -0
  337. /package/dist/{src → cjs/src}/lib/transferBuilderV2.d.ts +0 -0
  338. /package/dist/{src → cjs/src}/lib/utils.d.ts +0 -0
  339. /package/dist/{src → cjs/src}/lib/walletInitializationBuilder.d.ts +0 -0
  340. /package/dist/{src → cjs/src}/register.d.ts +0 -0
  341. /package/dist/{src → cjs/src}/solToken.d.ts +0 -0
  342. /package/dist/{src → cjs/src}/tsol.d.ts +0 -0
  343. /package/dist/{test → cjs/test}/fixtures/sol.d.ts +0 -0
  344. /package/dist/{test → cjs/test}/unit/fixtures/solBackupKey.d.ts +0 -0
  345. /package/dist/{test → cjs/test}/unit/getBuilderFactory.d.ts +0 -0
  346. /package/dist/{test → cjs/test}/unit/instructionParamsFactory.d.ts +0 -0
  347. /package/dist/{test → cjs/test}/unit/instructionParamsFactory.staking.d.ts +0 -0
  348. /package/dist/{test → cjs/test}/unit/keyPair.d.ts +0 -0
  349. /package/dist/{test → cjs/test}/unit/messages/messageBuilderFactory.d.ts +0 -0
  350. /package/dist/{test → cjs/test}/unit/messages/simpleMessageBuilder.d.ts +0 -0
  351. /package/dist/{test → cjs/test}/unit/sol.d.ts +0 -0
  352. /package/dist/{test → cjs/test}/unit/solInstructionFactory.d.ts +0 -0
  353. /package/dist/{test → cjs/test}/unit/solToken.d.ts +0 -0
  354. /package/dist/{test → cjs/test}/unit/transaction.d.ts +0 -0
  355. /package/dist/{test → cjs/test}/unit/transactionBuilder/StakingWithdrawBuilder.d.ts +0 -0
  356. /package/dist/{test → cjs/test}/unit/transactionBuilder/ataInitBuilder.d.ts +0 -0
  357. /package/dist/{test → cjs/test}/unit/transactionBuilder/customInstructionBuilder.d.ts +0 -0
  358. /package/dist/{test → cjs/test}/unit/transactionBuilder/stakingActivateBuilder.d.ts +0 -0
  359. /package/dist/{test → cjs/test}/unit/transactionBuilder/stakingAuthorizeBuilder.d.ts +0 -0
  360. /package/dist/{test → cjs/test}/unit/transactionBuilder/stakingDeactivateBuilder.d.ts +0 -0
  361. /package/dist/{test → cjs/test}/unit/transactionBuilder/stakingDelegateBuilder.d.ts +0 -0
  362. /package/dist/{test → cjs/test}/unit/transactionBuilder/stakingRawMsgAuthorizeBuilder.d.ts +0 -0
  363. /package/dist/{test → cjs/test}/unit/transactionBuilder/tokenTransferBuilder.d.ts +0 -0
  364. /package/dist/{test → cjs/test}/unit/transactionBuilder/transactionBuilder.d.ts +0 -0
  365. /package/dist/{test → cjs/test}/unit/transactionBuilder/transferBuilder.d.ts +0 -0
  366. /package/dist/{test → cjs/test}/unit/transactionBuilder/transferBuilderV2.d.ts +0 -0
  367. /package/dist/{test → cjs/test}/unit/transactionBuilder/walletInitBuilder.d.ts +0 -0
  368. /package/dist/{test → cjs/test}/unit/utils.d.ts +0 -0
  369. /package/dist/{test → cjs/test}/unit/versionedTransaction.d.ts +0 -0
  370. /package/dist/{src → esm}/bigint-buffer-guard.d.ts.map +0 -0
  371. /package/dist/{src → esm}/bigint-buffer-guard.js +0 -0
  372. /package/dist/{src → esm}/config/token2022StaticConfig.d.ts.map +0 -0
  373. /package/dist/{src → esm}/index.d.ts.map +0 -0
  374. /package/dist/{src → esm}/lib/ataInitializationBuilder.d.ts.map +0 -0
  375. /package/dist/{src → esm}/lib/closeAtaBuilder.d.ts.map +0 -0
  376. /package/dist/{src → esm}/lib/customInstructionBuilder.d.ts.map +0 -0
  377. /package/dist/{src → esm}/lib/jitoStakePoolOperations.d.ts.map +0 -0
  378. /package/dist/{src → esm}/lib/keyPair.d.ts.map +0 -0
  379. /package/dist/{src → esm}/lib/messages/index.d.ts.map +0 -0
  380. /package/dist/{src → esm}/lib/messages/messageBuilderFactory.d.ts.map +0 -0
  381. /package/dist/{src → esm}/lib/stakingActivateBuilder.d.ts.map +0 -0
  382. /package/dist/{src → esm}/lib/stakingAuthorizeBuilder.d.ts.map +0 -0
  383. /package/dist/{src → esm}/lib/stakingDeactivateBuilder.d.ts.map +0 -0
  384. /package/dist/{src → esm}/lib/stakingDelegateBuilder.d.ts.map +0 -0
  385. /package/dist/{src → esm}/lib/stakingRawMsgAuthorizeBuilder.d.ts.map +0 -0
  386. /package/dist/{src → esm}/lib/stakingWithdrawBuilder.d.ts.map +0 -0
  387. /package/dist/{src → esm}/lib/token2022Config.d.ts.map +0 -0
  388. /package/dist/{src → esm}/lib/tokenTransferBuilder.d.ts.map +0 -0
  389. /package/dist/{src → esm}/lib/transactionBuilder.d.ts.map +0 -0
  390. /package/dist/{src → esm}/lib/transferBuilder.d.ts.map +0 -0
  391. /package/dist/{src → esm}/lib/transferBuilderV2.d.ts.map +0 -0
  392. /package/dist/{src → esm}/lib/walletInitializationBuilder.d.ts.map +0 -0
  393. /package/dist/{src → esm}/register.d.ts.map +0 -0
  394. /package/dist/{src → esm}/solToken.d.ts.map +0 -0
  395. /package/dist/{src → esm}/tsol.d.ts.map +0 -0
@@ -1,177 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- var __importDefault = (this && this.__importDefault) || function (mod) {
36
- return (mod && mod.__esModule) ? mod : { "default": mod };
37
- };
38
- Object.defineProperty(exports, "__esModule", { value: true });
39
- const assert_1 = __importDefault(require("assert"));
40
- const src_1 = require("../../src");
41
- const should_1 = __importDefault(require("should"));
42
- const testData = __importStar(require("../resources/sol"));
43
- const utils_1 = require("../../src/lib/utils");
44
- describe('Sol KeyPair', function () {
45
- const defaultSeed = { seed: testData.accountWithSeed.seed };
46
- describe('should create a valid KeyPair', () => {
47
- it('from an empty value', () => {
48
- const keyPair = new src_1.KeyPair();
49
- should_1.default.exists(keyPair.getKeys().prv);
50
- should_1.default.exists(keyPair.getKeys().pub);
51
- keyPair.getKeys().prv?.length.should.be.belowOrEqual(88);
52
- keyPair.getKeys().prv?.length.should.be.aboveOrEqual(76);
53
- keyPair.getKeys().pub.length.should.be.belowOrEqual(44);
54
- keyPair.getKeys().pub.length.should.be.aboveOrEqual(32);
55
- });
56
- it('from a private key', () => {
57
- const keyPair = new src_1.KeyPair({ prv: testData.accountWithSeed.privateKey.base58 });
58
- should_1.default.equal(keyPair.getKeys().pub, testData.accountWithSeed.publicKey);
59
- should_1.default.equal(keyPair.getKeys().prv, testData.accountWithSeed.privateKey.base58);
60
- should_1.default.equal(keyPair.getKeys(true).pub, testData.accountWithSeed.publicKey);
61
- should_1.default.deepEqual(keyPair.getKeys(true).prv, testData.accountWithSeed.privateKey.uint8Array);
62
- });
63
- it('from an public key', () => {
64
- const keyPair = new src_1.KeyPair({ pub: testData.accountWithSeed.publicKey });
65
- should_1.default.equal(keyPair.getKeys().pub, testData.accountWithSeed.publicKey);
66
- });
67
- it('should always generate and regenerate valid key pairs', () => {
68
- for (let i = 0; i < 50; i++) {
69
- const keyPair = new src_1.KeyPair();
70
- (0, utils_1.isValidPublicKey)(keyPair.getKeys().pub).should.be.true();
71
- (0, utils_1.isValidAddress)(keyPair.getAddress()).should.be.true();
72
- const prv = keyPair.getKeys().prv;
73
- should_1.default.exist(prv);
74
- // verify key pair can be re-generated from private portion
75
- const regeneratedKeyPairFromPrv = new src_1.KeyPair({ prv: prv });
76
- regeneratedKeyPairFromPrv.getKeys().should.deepEqual(keyPair.getKeys());
77
- regeneratedKeyPairFromPrv.getAddress().should.equal(keyPair.getAddress());
78
- regeneratedKeyPairFromPrv.should.deepEqual(keyPair);
79
- should_1.default.exist(regeneratedKeyPairFromPrv.getKeys().prv);
80
- // verify key pair can be re-generated from public portion
81
- const pub = keyPair.getKeys().pub;
82
- const regeneratedKeyPairFromPub = new src_1.KeyPair({ pub: pub });
83
- regeneratedKeyPairFromPub.getKeys().pub.should.deepEqual(keyPair.getKeys().pub);
84
- regeneratedKeyPairFromPub.getAddress().should.equal(keyPair.getAddress());
85
- should_1.default.not.exist(regeneratedKeyPairFromPub.getKeys().prv);
86
- }
87
- });
88
- });
89
- describe('should fail to create a KeyPair', function () {
90
- it('from invalid options', () => {
91
- // @ts-expect-error Testing for an params, should throw error
92
- (0, should_1.default)(() => new src_1.KeyPair({ random: 'random' })).throwError('Invalid key pair options');
93
- });
94
- it('from an invalid seed', () => {
95
- const seed = { seed: Buffer.alloc(8) }; // Seed should be 512 bits (64 bytes)
96
- assert_1.default.throws(() => new src_1.KeyPair(seed));
97
- });
98
- it('from an invalid public key', () => {
99
- const source = {
100
- pub: '01D63D',
101
- };
102
- assert_1.default.throws(() => new src_1.KeyPair(source));
103
- });
104
- it('from an invalid private key', () => {
105
- const source = {
106
- prv: '82A34E',
107
- };
108
- assert_1.default.throws(() => new src_1.KeyPair(source));
109
- });
110
- });
111
- describe('getAddress', function () {
112
- it('should get an address', () => {
113
- const keyPair = new src_1.KeyPair(defaultSeed);
114
- const address = keyPair.getAddress();
115
- address.should.equal(testData.accountWithSeed.publicKey);
116
- });
117
- });
118
- describe('getKeys', function () {
119
- it('should get public keys in base58 and private in Uint8Array', () => {
120
- const keyPair = new src_1.KeyPair(defaultSeed);
121
- const { prv, pub } = keyPair.getKeys(true);
122
- prv?.should.deepEqual(testData.accountWithSeed.privateKey.uint8Array);
123
- pub.should.equal(testData.accountWithSeed.publicKey);
124
- });
125
- it('should get private and public keys base58', () => {
126
- const keyPair = new src_1.KeyPair(defaultSeed);
127
- const { prv, pub } = keyPair.getKeys();
128
- prv?.should.equal(testData.accountWithSeed.privateKey.base58);
129
- pub.should.equal(testData.accountWithSeed.publicKey);
130
- });
131
- it('should get private and public keys for a random seed', () => {
132
- const keyPair = new src_1.KeyPair();
133
- const { prv, pub } = keyPair.getKeys();
134
- should_1.default.exist(prv);
135
- should_1.default.exist(pub);
136
- });
137
- });
138
- describe('signMessage and verifySignature', function () {
139
- const message = 'test message pls ignore';
140
- it('should succeed to sign a msg ', () => {
141
- const keyPair = new src_1.KeyPair({ prv: testData.accountWithSeed.privateKey.base58 });
142
- const signedMessage = keyPair.signMessage(message);
143
- signedMessage.should.deepEqual(testData.SIGNED_MESSAGE_SIGNATURE);
144
- });
145
- it('should fail to sign a msg if prv key is missing', () => {
146
- const keyPair = new src_1.KeyPair({ pub: testData.pubKeys.validPubKeys[0] });
147
- (0, should_1.default)(() => keyPair.signMessage(message)).throwError('Missing private key');
148
- });
149
- });
150
- describe('verifySignature', function () {
151
- it('should succeed to verify a signature', () => {
152
- const keyPair = new src_1.KeyPair({ prv: testData.accountWithSeed.privateKey.base58 });
153
- const signature = testData.SIGNED_MESSAGE_SIGNATURE;
154
- const message = 'test message pls ignore';
155
- keyPair.verifySignature(message, signature).should.equal(true);
156
- });
157
- it('should succeed to verify a signature if the msg is a UInt8Array', () => {
158
- const keyPair = new src_1.KeyPair({ prv: testData.accountWithSeed.privateKey.base58 });
159
- const signature = testData.SIGNED_MESSAGE_SIGNATURE;
160
- const message = new Uint8Array(Buffer.from('test message pls ignore'));
161
- keyPair.verifySignature(message, signature).should.equal(true);
162
- });
163
- it('should fail to verify a signature if the prv key is not correct', () => {
164
- const keyPair = new src_1.KeyPair({ prv: testData.extraAccounts.prv1 });
165
- const signature = testData.SIGNED_MESSAGE_SIGNATURE;
166
- const message = 'test message pls ignore';
167
- keyPair.verifySignature(message, signature).should.equal(false);
168
- });
169
- it('should fail to verify a signature if the message is not correct', () => {
170
- const keyPair = new src_1.KeyPair({ prv: testData.accountWithSeed.privateKey.base58 });
171
- const signature = testData.SIGNED_MESSAGE_SIGNATURE;
172
- const message = 'incorrect msg';
173
- keyPair.verifySignature(message, signature).should.equal(false);
174
- });
175
- });
176
- });
177
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5UGFpci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Rlc3QvdW5pdC9rZXlQYWlyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsb0RBQTRCO0FBQzVCLG1DQUFvQztBQUNwQyxvREFBNEI7QUFDNUIsMkRBQTZDO0FBQzdDLCtDQUF1RTtBQUV2RSxRQUFRLENBQUMsYUFBYSxFQUFFO0lBQ3RCLE1BQU0sV0FBVyxHQUFHLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLENBQUM7SUFFNUQsUUFBUSxDQUFDLCtCQUErQixFQUFFLEdBQUcsRUFBRTtRQUM3QyxFQUFFLENBQUMscUJBQXFCLEVBQUUsR0FBRyxFQUFFO1lBQzdCLE1BQU0sT0FBTyxHQUFHLElBQUksYUFBTyxFQUFFLENBQUM7WUFDOUIsZ0JBQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3JDLGdCQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNyQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN6RCxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN6RCxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN4RCxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0s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ZnJvbSAnYXNzZXJ0JztcbmltcG9ydCB7IEtleVBhaXIgfSBmcm9tICcuLi8uLi9zcmMnO1xuaW1wb3J0IHNob3VsZCBmcm9tICdzaG91bGQnO1xuaW1wb3J0ICogYXMgdGVzdERhdGEgZnJvbSAnLi4vcmVzb3VyY2VzL3NvbCc7XG5pbXBvcnQgeyBpc1ZhbGlkUHVibGljS2V5LCBpc1ZhbGlkQWRkcmVzcyB9IGZyb20gJy4uLy4uL3NyYy9saWIvdXRpbHMnO1xuXG5kZXNjcmliZSgnU29sIEtleVBhaXInLCBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IGRlZmF1bHRTZWVkID0geyBzZWVkOiB0ZXN0RGF0YS5hY2NvdW50V2l0aFNlZWQuc2VlZCB9O1xuXG4gIGRlc2NyaWJlKCdzaG91bGQgY3JlYXRlIGEgdmFsaWQgS2V5UGFpcicsICgpID0+IHtcbiAgICBpdCgnZnJvbSBhbiBlbXB0eSB2YWx1ZScsICgpID0+IHtcbiAgICAgIGNvbnN0IGtleVBhaXIgPSBuZXcgS2V5UGFpcigpO1xuICAgICAgc2hvdWxkLmV4aXN0cyhrZXlQYWlyLmdldEtleXMoKS5wcnYpO1xuICAgICAgc2hvdWxkLmV4aXN0cyhrZXlQYWlyLmdldEtleXMoKS5wdWIpO1xuICAgICAga2V5UGFpci5nZXRLZXlzKCkucHJ2Py5sZW5ndGguc2hvdWxkLmJlLmJlbG93T3JFcXVhbCg4OCk7XG4gICAgICBrZXlQYWlyLmdldEtleXMoKS5wcnY/Lmxlbmd0aC5zaG91bGQuYmUuYWJvdmVPckVxdWFsKDc2KTtcbiAgICAgIGtleVBhaXIuZ2V0S2V5cygpLnB1Yi5sZW5ndGguc2hvdWxkLmJlLmJlbG93T3JFcXVhbCg0NCk7XG4gICAgICBrZXlQYWlyLmdldEtleXMoKS5wdWIubGVuZ3RoLnNob3VsZC5iZS5hYm92ZU9yRXF1YWwoMzIpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2Zyb20gYSBwcml2YXRlIGtleScsICgpID0+IHtcbiAgICAgIGNvbnN0IGtleVBhaXIgPSBuZXcgS2V5UGFpcih7IHBydjogdGVzdERhdGEuYWNjb3VudFdpdGhTZWVkLnByaXZhdGVLZXkuYmFzZTU4IH0pO1xuICAgICAgc2hvdWxkLmVxdWFsKGtleVBhaXIuZ2V0S2V5cygpLnB1YiwgdGVzdERhdGEuYWNjb3VudFdpdGhTZWVkLnB1YmxpY0tleSk7XG4gICAgICBzaG91bGQuZXF1YWwoa2V5UGFpci5nZXRLZXlzKCkucHJ2LCB0ZXN0RGF0YS5hY2NvdW50V2l0aFNlZWQucHJpdmF0ZUtleS5iYXNlNTgpO1xuICAgICAgc2hvdWxkLmVxdWFsKGtleVBhaXIuZ2V0S2V5cyh0cnVlKS5wdWIsIHRlc3REYXRhLmFjY291bnRXaXRoU2VlZC5wdWJsaWNLZXkpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbChrZXlQYWlyLmdldEtleXModHJ1ZSkucHJ2LCB0ZXN0RGF0YS5hY2NvdW50V2l0aFNlZWQucHJpdmF0ZUtleS51aW50OEFycmF5KTtcbiAgICB9KTtcblxuICAgIGl0KCdmcm9tIGFuIHB1YmxpYyBrZXknLCAoKSA9PiB7XG4gICAgICBjb25zdCBrZXlQYWlyID0gbmV3IEtleVBhaXIoeyBwdWI6IHRlc3REYXRhLmFjY291bnRXaXRoU2VlZC5wdWJsaWNLZXkgfSk7XG4gICAgICBzaG91bGQuZXF1YWwoa2V5UGFpci5nZXRLZXlzKCkucHViLCB0ZXN0RGF0YS5hY2NvdW50V2l0aFNlZWQucHVibGljS2V5KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYWx3YXlzIGdlbmVyYXRlIGFuZCByZWdlbmVyYXRlIHZhbGlkIGtleSBwYWlycycsICgpID0+IHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNTA7IGkrKykge1xuICAgICAgICBjb25zdCBrZXlQYWlyID0gbmV3IEtleVBhaXIoKTtcbiAgICAgICAgaXNWYWxpZFB1YmxpY0tleShrZXlQYWlyLmdldEtleXMoKS5wdWIpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICAgIGlzVmFsaWRBZGRyZXNzKGtleVBhaXIuZ2V0QWRkcmVzcygpKS5zaG91bGQuYmUudHJ1ZSgpO1xuXG4gICAgICAgIGNvbnN0IHBydiA9IGtleVBhaXIuZ2V0S2V5cygpLnBydiBhcyBzdHJpbmc7XG4gICAgICAgIHNob3VsZC5leGlzdChwcnYpO1xuXG4gICAgICAgIC8vIHZlcmlmeSBrZXkgcGFpciBjYW4gYmUgcmUtZ2VuZXJhdGVkIGZyb20gcHJpdmF0ZSBwb3J0aW9uXG4gICAgICAgIGNvbnN0IHJlZ2VuZXJhdGVkS2V5UGFpckZyb21QcnYgPSBuZXcgS2V5UGFpcih7IHBydjogcHJ2IH0pO1xuICAgICAgICByZWdlbmVyYXRlZEtleVBhaXJGcm9tUHJ2LmdldEtleXMoKS5zaG91bGQuZGVlcEVxdWFsKGtleVBhaXIuZ2V0S2V5cygpKTtcbiAgICAgICAgcmVnZW5lcmF0ZWRLZXlQYWlyRnJvbVBydi5nZXRBZGRyZXNzKCkuc2hvdWxkLmVxdWFsKGtleVBhaXIuZ2V0QWRkcmVzcygpKTtcbiAgICAgICAgcmVnZW5lcmF0ZWRLZXlQYWlyRnJvbVBydi5zaG91bGQuZGVlcEVxdWFsKGtleVBhaXIpO1xuICAgICAgICBzaG91bGQuZXhpc3QocmVnZW5lcmF0ZWRLZXlQYWlyRnJvbVBydi5nZXRLZXlzKCkucHJ2KTtcblxuICAgICAgICAvLyB2ZXJpZnkga2V5IHBhaXIgY2FuIGJlIHJlLWdlbmVyYXRlZCBmcm9tIHB1YmxpYyBwb3J0aW9uXG4gICAgICAgIGNvbnN0IHB1YiA9IGtleVBhaXIuZ2V0S2V5cygpLnB1YjtcbiAgICAgICAgY29uc3QgcmVnZW5lcmF0ZWRLZXlQYWlyRnJvbVB1YiA9IG5ldyBLZXlQYWlyKHsgcHViOiBwdWIgfSk7XG4gICAgICAgIHJlZ2VuZXJhdGVkS2V5UGFpckZyb21QdWIuZ2V0S2V5cygpLnB1Yi5zaG91bGQuZGVlcEVxdWFsKGtleVBhaXIuZ2V0S2V5cygpLnB1Yik7XG4gICAgICAgIHJlZ2VuZXJhdGVkS2V5UGFpckZyb21QdWIuZ2V0QWRkcmVzcygpLnNob3VsZC5lcXVhbChrZXlQYWlyLmdldEFkZHJlc3MoKSk7XG4gICAgICAgIHNob3VsZC5ub3QuZXhpc3QocmVnZW5lcmF0ZWRLZXlQYWlyRnJvbVB1Yi5nZXRLZXlzKCkucHJ2KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3Nob3VsZCBmYWlsIHRvIGNyZWF0ZSBhIEtleVBhaXInLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ2Zyb20gaW52YWxpZCBvcHRpb25zJywgKCkgPT4ge1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBUZXN0aW5nIGZvciBhbiBwYXJhbXMsIHNob3VsZCB0aHJvdyBlcnJvclxuICAgICAgc2hvdWxkKCgpID0+IG5ldyBLZXlQYWlyKHsgcmFuZG9tOiAncmFuZG9tJyB9KSkudGhyb3dFcnJvcignSW52YWxpZCBrZXkgcGFpciBvcHRpb25zJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnZnJvbSBhbiBpbnZhbGlkIHNlZWQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBzZWVkID0geyBzZWVkOiBCdWZmZXIuYWxsb2MoOCkgfTsgLy8gIFNlZWQgc2hvdWxkIGJlIDUxMiBiaXRzICg2NCBieXRlcylcbiAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IEtleVBhaXIoc2VlZCkpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2Zyb20gYW4gaW52YWxpZCBwdWJsaWMga2V5JywgKCkgPT4ge1xuICAgICAgY29uc3Qgc291cmNlID0ge1xuICAgICAgICBwdWI6ICcwMUQ2M0QnLFxuICAgICAgfTtcbiAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IEtleVBhaXIoc291cmNlKSk7XG4gICAgfSk7XG5cbiAgICBpdCgnZnJvbSBhbiBpbnZhbGlkIHByaXZhdGUga2V5JywgKCkgPT4ge1xuICAgICAgY29uc3Qgc291cmNlID0ge1xuICAgICAgICBwcnY6ICc4MkEzNEUnLFxuICAgICAgfTtcbiAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IEtleVBhaXIoc291cmNlKSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdnZXRBZGRyZXNzJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgZ2V0IGFuIGFkZHJlc3MnLCAoKSA9PiB7XG4gICAgICBjb25zdCBrZXlQYWlyID0gbmV3IEtleVBhaXIoZGVmYXVsdFNlZWQpO1xuICAgICAgY29uc3QgYWRkcmVzcyA9IGtleVBhaXIuZ2V0QWRkcmVzcygpO1xuICAgICAgYWRkcmVzcy5zaG91bGQuZXF1YWwodGVzdERhdGEuYWNjb3VudFdpdGhTZWVkLnB1YmxpY0tleSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdnZXRLZXlzJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgZ2V0IHB1YmxpYyBrZXlzIGluIGJhc2U1OCBhbmQgcHJpdmF0ZSBpbiBVaW50OEFycmF5JywgKCkgPT4ge1xuICAgICAgY29uc3Qga2V5UGFpciA9IG5ldyBLZXlQYWlyKGRlZmF1bHRTZWVkKTtcbiAgICAgIGNvbnN0IHsgcHJ2LCBwdWIgfSA9IGtleVBhaXIuZ2V0S2V5cyh0cnVlKTtcbiAgICAgIHBydj8uc2hvdWxkLmRlZXBFcXVhbCh0ZXN0RGF0YS5hY2NvdW50V2l0aFNlZWQucHJpdmF0ZUtleS51aW50OEFycmF5KTtcbiAgICAgIHB1Yi5zaG91bGQuZXF1YWwodGVzdERhdGEuYWNjb3VudFdpdGhTZWVkLnB1YmxpY0tleSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGdldCBwcml2YXRlIGFuZCBwdWJsaWMga2V5cyBiYXNlNTgnLCAoKSA9PiB7XG4gICAgICBjb25zdCBrZXlQYWlyID0gbmV3IEtleVBhaXIoZGVmYXVsdFNlZWQpO1xuICAgICAgY29uc3QgeyBwcnYsIHB1YiB9ID0ga2V5UGFpci5nZXRLZXlzKCk7XG4gICAgICBwcnY/LnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5hY2NvdW50V2l0aFNlZWQucHJpdmF0ZUtleS5iYXNlNTgpO1xuICAgICAgcHViLnNob3VsZC5lcXVhbCh0ZXN0RGF0YS5hY2NvdW50V2l0aFNlZWQucHVibGljS2V5KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZ2V0IHByaXZhdGUgYW5kIHB1YmxpYyBrZXlzIGZvciBhIHJhbmRvbSBzZWVkJywgKCkgPT4ge1xuICAgICAgY29uc3Qga2V5UGFpciA9IG5ldyBLZXlQYWlyKCk7XG4gICAgICBjb25zdCB7IHBydiwgcHViIH0gPSBrZXlQYWlyLmdldEtleXMoKTtcbiAgICAgIHNob3VsZC5leGlzdChwcnYpO1xuICAgICAgc2hvdWxkLmV4aXN0KHB1Yik7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdzaWduTWVzc2FnZSBhbmQgdmVyaWZ5U2lnbmF0dXJlJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSAndGVzdCBtZXNzYWdlIHBscyBpZ25vcmUnO1xuXG4gICAgaXQoJ3Nob3VsZCBzdWNjZWVkIHRvIHNpZ24gYSBtc2cgJywgKCkgPT4ge1xuICAgICAgY29uc3Qga2V5UGFpciA9IG5ldyBLZXlQYWlyKHsgcHJ2OiB0ZXN0RGF0YS5hY2NvdW50V2l0aFNlZWQucHJpdmF0ZUtleS5iYXNlNTggfSk7XG4gICAgICBjb25zdCBzaWduZWRNZXNzYWdlID0ga2V5UGFpci5zaWduTWVzc2FnZShtZXNzYWdlKTtcbiAgICAgIHNpZ25lZE1lc3NhZ2Uuc2hvdWxkLmRlZXBFcXVhbCh0ZXN0RGF0YS5TSUdORURfTUVTU0FHRV9TSUdOQVRVUkUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIHRvIHNpZ24gYSBtc2cgaWYgcHJ2IGtleSBpcyBtaXNzaW5nJywgKCkgPT4ge1xuICAgICAgY29uc3Qga2V5UGFpciA9IG5ldyBLZXlQYWlyKHsgcHViOiB0ZXN0RGF0YS5wdWJLZXlzLnZhbGlkUHViS2V5c1swXSB9KTtcbiAgICAgIHNob3VsZCgoKSA9PiBrZXlQYWlyLnNpZ25NZXNzYWdlKG1lc3NhZ2UpKS50aHJvd0Vycm9yKCdNaXNzaW5nIHByaXZhdGUga2V5Jyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCd2ZXJpZnlTaWduYXR1cmUnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBzdWNjZWVkIHRvIHZlcmlmeSBhIHNpZ25hdHVyZScsICgpID0+IHtcbiAgICAgIGNvbnN0IGtleVBhaXIgPSBuZXcgS2V5UGFpcih7IHBydjogdGVzdERhdGEuYWNjb3VudFdpdGhTZWVkLnByaXZhdGVLZXkuYmFzZTU4IH0pO1xuICAgICAgY29uc3Qgc2lnbmF0dXJlID0gdGVzdERhdGEuU0lHTkVEX01FU1NBR0VfU0lHTkFUVVJFO1xuICAgICAgY29uc3QgbWVzc2FnZSA9ICd0ZXN0IG1lc3NhZ2UgcGxzIGlnbm9yZSc7XG4gICAgICBrZXlQYWlyLnZlcmlmeVNpZ25hdHVyZShtZXNzYWdlLCBzaWduYXR1cmUpLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgc3VjY2VlZCB0byB2ZXJpZnkgYSBzaWduYXR1cmUgaWYgdGhlIG1zZyBpcyBhIFVJbnQ4QXJyYXknLCAoKSA9PiB7XG4gICAgICBjb25zdCBrZXlQYWlyID0gbmV3IEtleVBhaXIoeyBwcnY6IHRlc3REYXRhLmFjY291bnRXaXRoU2VlZC5wcml2YXRlS2V5LmJhc2U1OCB9KTtcbiAgICAgIGNvbnN0IHNpZ25hdHVyZSA9IHRlc3REYXRhLlNJR05FRF9NRVNTQUdFX1NJR05BVFVSRTtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBuZXcgVWludDhBcnJheShCdWZmZXIuZnJvbSgndGVzdCBtZXNzYWdlIHBscyBpZ25vcmUnKSk7XG4gICAgICBrZXlQYWlyLnZlcmlmeVNpZ25hdHVyZShtZXNzYWdlLCBzaWduYXR1cmUpLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCB0byB2ZXJpZnkgYSBzaWduYXR1cmUgaWYgdGhlIHBydiBrZXkgaXMgbm90IGNvcnJlY3QnLCAoKSA9PiB7XG4gICAgICBjb25zdCBrZXlQYWlyID0gbmV3IEtleVBhaXIoeyBwcnY6IHRlc3REYXRhLmV4dHJhQWNjb3VudHMucHJ2MSB9KTtcbiAgICAgIGNvbnN0IHNpZ25hdHVyZSA9IHRlc3REYXRhLlNJR05FRF9NRVNTQUdFX1NJR05BVFVSRTtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSAndGVzdCBtZXNzYWdlIHBscyBpZ25vcmUnO1xuICAgICAga2V5UGFpci52ZXJpZnlTaWduYXR1cmUobWVzc2FnZSwgc2lnbmF0dXJlKS5zaG91bGQuZXF1YWwoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIHRvIHZlcmlmeSBhIHNpZ25hdHVyZSBpZiB0aGUgbWVzc2FnZSBpcyBub3QgY29ycmVjdCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGtleVBhaXIgPSBuZXcgS2V5UGFpcih7IHBydjogdGVzdERhdGEuYWNjb3VudFdpdGhTZWVkLnByaXZhdGVLZXkuYmFzZTU4IH0pO1xuICAgICAgY29uc3Qgc2lnbmF0dXJlID0gdGVzdERhdGEuU0lHTkVEX01FU1NBR0VfU0lHTkFUVVJFO1xuICAgICAgY29uc3QgbWVzc2FnZSA9ICdpbmNvcnJlY3QgbXNnJztcbiAgICAgIGtleVBhaXIudmVyaWZ5U2lnbmF0dXJlKG1lc3NhZ2UsIHNpZ25hdHVyZSkuc2hvdWxkLmVxdWFsKGZhbHNlKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
@@ -1 +0,0 @@
1
- {"version":3,"file":"messageBuilderFactory.d.ts","sourceRoot":"","sources":["../../../../test/unit/messages/messageBuilderFactory.ts"],"names":[],"mappings":""}
@@ -1,118 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const sinon_1 = __importDefault(require("sinon"));
7
- const should_1 = __importDefault(require("should"));
8
- const src_1 = require("../../../src");
9
- const sdk_core_1 = require("@bitgo-beta/sdk-core");
10
- describe('Solana MessageBuilderFactory', function () {
11
- let sandbox;
12
- let factory;
13
- const coinConfig = { name: 'tsol' };
14
- // Common test data
15
- const signatureBase64 = Buffer.from('signature1').toString('base64');
16
- const testBroadcastMessage = {
17
- type: sdk_core_1.MessageStandardType.SIMPLE,
18
- payload: 'test message',
19
- serializedSignatures: [
20
- {
21
- publicKey: 'pubkey1',
22
- signature: signatureBase64,
23
- },
24
- ],
25
- signers: ['signer1'],
26
- metadata: {},
27
- };
28
- const unsupportedMessageTypes = [
29
- sdk_core_1.MessageStandardType.UNKNOWN,
30
- sdk_core_1.MessageStandardType.EIP191,
31
- sdk_core_1.MessageStandardType.CIP8,
32
- 'UNSUPPORTED',
33
- ];
34
- // Helper functions
35
- const assertSimpleMessageBuilder = (builder) => {
36
- should_1.default.exist(builder);
37
- builder.should.be.instanceof(sdk_core_1.SimpleMessageBuilder);
38
- };
39
- const assertBuilderMessageProperties = async (builder, expectedPayload) => {
40
- const message = await builder.build();
41
- message.getType().should.equal(sdk_core_1.MessageStandardType.SIMPLE);
42
- message.getPayload().should.equal(expectedPayload);
43
- message.getSignatures().should.have.length(1);
44
- message.getSigners().should.have.length(1);
45
- message.getSigners()[0].should.equal('signer1');
46
- message.getMetadata().should.be.an.Object();
47
- return message;
48
- };
49
- const assertSignatureProperties = (message) => {
50
- const signature = message.getSignatures()[0];
51
- signature.should.have.properties(['publicKey', 'signature']);
52
- signature.publicKey.pub.should.equal('pubkey1');
53
- signature.signature.toString('base64').should.equal(signatureBase64);
54
- };
55
- const assertBroadcastFormatProperties = async (message, expectedSerializedSignatures) => {
56
- const rebroadcastMessage = await message.toBroadcastFormat();
57
- rebroadcastMessage.should.have.properties(['type', 'payload', 'serializedSignatures', 'signers', 'metadata']);
58
- rebroadcastMessage.type.should.equal(sdk_core_1.MessageStandardType.SIMPLE);
59
- rebroadcastMessage.payload.should.equal('test message');
60
- rebroadcastMessage.serializedSignatures?.should.deepEqual(expectedSerializedSignatures);
61
- rebroadcastMessage.signers?.should.deepEqual(['signer1']);
62
- };
63
- beforeEach(function () {
64
- sandbox = sinon_1.default.createSandbox();
65
- factory = new src_1.MessageBuilderFactory(coinConfig);
66
- });
67
- afterEach(function () {
68
- sandbox.restore();
69
- });
70
- describe('getMessageBuilder', function () {
71
- it('should return SimpleMessageBuilder for SIMPLE type', function () {
72
- const builder = factory.getMessageBuilder(sdk_core_1.MessageStandardType.SIMPLE);
73
- assertSimpleMessageBuilder(builder);
74
- });
75
- it('should throw error for unsupported message type', function () {
76
- unsupportedMessageTypes.forEach((type) => {
77
- should_1.default.throws(() => factory.getMessageBuilder(type), new RegExp(`Invalid message standard ${type}`));
78
- });
79
- });
80
- });
81
- describe('fromBroadcastFormat', function () {
82
- it('should get the correct builder type from broadcastable message', async function () {
83
- const builder = factory.fromBroadcastFormat(testBroadcastMessage);
84
- assertSimpleMessageBuilder(builder);
85
- const message = await assertBuilderMessageProperties(builder, 'test message');
86
- assertSignatureProperties(message);
87
- await assertBroadcastFormatProperties(message, testBroadcastMessage.serializedSignatures);
88
- });
89
- it('should throw for unsupported message type in broadcastable message', function () {
90
- const broadcastMessage = {
91
- ...testBroadcastMessage,
92
- type: sdk_core_1.MessageStandardType.EIP191,
93
- };
94
- should_1.default.throws(() => factory.fromBroadcastFormat(broadcastMessage), new RegExp(`Invalid message standard ${sdk_core_1.MessageStandardType.EIP191}`));
95
- });
96
- });
97
- describe('fromBroadcastString', function () {
98
- it('should parse broadcastable string and return correct builder type', async function () {
99
- const broadcastString = JSON.stringify(testBroadcastMessage);
100
- const broadcastHex = Buffer.from(broadcastString).toString('hex');
101
- const builder = factory.fromBroadcastString(broadcastHex);
102
- assertSimpleMessageBuilder(builder);
103
- const message = await assertBuilderMessageProperties(builder, 'test message');
104
- assertSignatureProperties(message);
105
- await assertBroadcastFormatProperties(message, testBroadcastMessage.serializedSignatures);
106
- });
107
- it('should throw for invalid JSON string', function () {
108
- try {
109
- factory.fromBroadcastString('abcdefg'); // Invalid hex string
110
- fail('Expected error not thrown');
111
- }
112
- catch (error) {
113
- error.should.be.instanceof(SyntaxError);
114
- }
115
- });
116
- });
117
- });
118
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZUJ1aWxkZXJGYWN0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC91bml0L21lc3NhZ2VzL21lc3NhZ2VCdWlsZGVyRmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUNBLGtEQUEwQjtBQUMxQixvREFBNEI7QUFDNUIsc0NBQXFEO0FBQ3JELG1EQU84QjtBQUU5QixRQUFRLENBQUMsOEJBQThCLEVBQUU7SUFDdkMsSUFBSSxPQUEyQixDQUFDO0lBQ2hDLElBQUksT0FBOEIsQ0FBQztJQUNuQyxNQUFNLFVBQVUsR0FBRyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQWMsQ0FBQztJQUVoRCxtQkFBbUI7SUFDbkIsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDckUsTUFBTSxvQkFBb0IsR0FBeUI7UUFDakQsSUFBSSxFQUFFLDhCQUFtQixDQUFDLE1BQU07UUFDaEMsT0FBTyxFQUFFLGNBQWM7UUFDdkIsb0JBQW9CLEVBQUU7WUFDcEI7Z0JBQ0UsU0FBUyxFQUFFLFNBQVM7Z0JBQ3BCLFNBQVMsRUFBRSxlQUFlO2FBQzNCO1NBQ0Y7UUFDRCxPQUFPLEVBQUUsQ0FBQyxTQUFTLENBQUM7UUFDcEIsUUFBUSxFQUFFLEVBQUU7S0FDYixDQUFDO0lBRUYsTUFBTSx1QkFBdUIsR0FBRztRQUM5Qiw4QkFBbUIsQ0FBQyxPQUFPO1FBQzNCLDhCQUFtQixDQUFDLE1BQU07UUFDMUIsOEJBQW1CLENBQUMsSUFBSTtRQUN4QixhQUFvQztLQUNyQyxDQUFDO0lBRUYsbUJBQW1CO0lBQ25CLE1BQU0sMEJBQTBCLEdBQUcsQ0FBQyxPQUF3QixFQUFFLEVBQUU7UUFDOUQsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDdEIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsVUFBVSxD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by1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHNpbm9uIGZyb20gJ3Npbm9uJztcbmltcG9ydCBzaG91bGQgZnJvbSAnc2hvdWxkJztcbmltcG9ydCB7IE1lc3NhZ2VCdWlsZGVyRmFjdG9yeSB9IGZyb20gJy4uLy4uLy4uL3NyYyc7XG5pbXBvcnQge1xuICBCcm9hZGNhc3RhYmxlTWVzc2FnZSxcbiAgSU1lc3NhZ2UsXG4gIElNZXNzYWdlQnVpbGRlcixcbiAgTWVzc2FnZVN0YW5kYXJkVHlwZSxcbiAgU2VyaWFsaXplZFNpZ25hdHVyZSxcbiAgU2ltcGxlTWVzc2FnZUJ1aWxkZXIsXG59IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcblxuZGVzY3JpYmUoJ1NvbGFuYSBNZXNzYWdlQnVpbGRlckZhY3RvcnknLCBmdW5jdGlvbiAoKSB7XG4gIGxldCBzYW5kYm94OiBzaW5vbi5TaW5vblNhbmRib3g7XG4gIGxldCBmYWN0b3J5OiBNZXNzYWdlQnVpbGRlckZhY3Rvcnk7XG4gIGNvbnN0IGNvaW5Db25maWcgPSB7IG5hbWU6ICd0c29sJyB9IGFzIEJhc2VDb2luO1xuXG4gIC8vIENvbW1vbiB0ZXN0IGRhdGFcbiAgY29uc3Qgc2lnbmF0dXJlQmFzZTY0ID0gQnVmZmVyLmZyb20oJ3NpZ25hdHVyZTEnKS50b1N0cmluZygnYmFzZTY0Jyk7XG4gIGNvbnN0IHRlc3RCcm9hZGNhc3RNZXNzYWdlOiBCcm9hZGNhc3RhYmxlTWVzc2FnZSA9IHtcbiAgICB0eXBlOiBNZXNzYWdlU3RhbmRhcmRUeXBlLlNJTVBMRSxcbiAgICBwYXlsb2FkOiAndGVzdCBtZXNzYWdlJyxcbiAgICBzZXJpYWxpemVkU2lnbmF0dXJlczogW1xuICAgICAge1xuICAgICAgICBwdWJsaWNLZXk6ICdwdWJrZXkxJyxcbiAgICAgICAgc2lnbmF0dXJlOiBzaWduYXR1cmVCYXNlNjQsXG4gICAgICB9LFxuICAgIF0sXG4gICAgc2lnbmVyczogWydzaWduZXIxJ10sXG4gICAgbWV0YWRhdGE6IHt9LFxuICB9O1xuXG4gIGNvbnN0IHVuc3VwcG9ydGVkTWVzc2FnZVR5cGVzID0gW1xuICAgIE1lc3NhZ2VTdGFuZGFyZFR5cGUuVU5LTk9XTixcbiAgICBNZXNzYWdlU3RhbmRhcmRUeXBlLkVJUDE5MSxcbiAgICBNZXNzYWdlU3RhbmRhcmRUeXBlLkNJUDgsXG4gICAgJ1VOU1VQUE9SVEVEJyBhcyBNZXNzYWdlU3RhbmRhcmRUeXBlLFxuICBdO1xuXG4gIC8vIEhlbHBlciBmdW5jdGlvbnNcbiAgY29uc3QgYXNzZXJ0U2ltcGxlTWVzc2FnZUJ1aWxkZXIgPSAoYnVpbGRlcjogSU1lc3NhZ2VCdWlsZGVyKSA9PiB7XG4gICAgc2hvdWxkLmV4aXN0KGJ1aWxkZXIpO1xuICAgIGJ1aWxkZXIuc2hvdWxkLmJlLmluc3RhbmNlb2YoU2ltcGxlTWVzc2FnZUJ1aWxkZXIpO1xuICB9O1xuXG4gIGNvbnN0IGFzc2VydEJ1aWxkZXJNZXNzYWdlUHJvcGVydGllcyA9IGFzeW5jIChidWlsZGVyOiBJTWVzc2FnZUJ1aWxkZXIsIGV4cGVjdGVkUGF5bG9hZDogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICBtZXNzYWdlLmdldFR5cGUoKS5zaG91bGQuZXF1YWwoTWVzc2FnZVN0YW5kYXJkVHlwZS5TSU1QTEUpO1xuICAgIG1lc3NhZ2UuZ2V0UGF5bG9hZCgpIS5zaG91bGQuZXF1YWwoZXhwZWN0ZWRQYXlsb2FkKTtcbiAgICBtZXNzYWdlLmdldFNpZ25hdHVyZXMoKS5zaG91bGQuaGF2ZS5sZW5ndGgoMSk7XG4gICAgbWVzc2FnZS5nZXRTaWduZXJzKCkuc2hvdWxkLmhhdmUubGVuZ3RoKDEpO1xuICAgIG1lc3NhZ2UuZ2V0U2lnbmVycygpWzBdLnNob3VsZC5lcXVhbCgnc2lnbmVyMScpO1xuICAgIG1lc3NhZ2UuZ2V0TWV0YWRhdGEoKSEuc2hvdWxkLmJlLmFuLk9iamVjdCgpO1xuICAgIHJldHVybiBtZXNzYWdlO1xuICB9O1xuXG4gIGNvbnN0IGFzc2VydFNpZ25hdHVyZVByb3BlcnRpZXMgPSAobWVzc2FnZTogSU1lc3NhZ2UpID0+IHtcbiAgICBjb25zdCBzaWduYXR1cmUgPSBtZXNzYWdlLmdldFNpZ25hdHVyZXMoKVswXTtcbiAgICBzaWduYXR1cmUuc2hvdWxkLmhhdmUucHJvcGVydGllcyhbJ3B1YmxpY0tleScsICdzaWduYXR1cmUnXSk7XG4gICAgc2lnbmF0dXJlLnB1YmxpY0tleS5wdWIuc2hvdWxkLmVxdWFsKCdwdWJrZXkxJyk7XG4gICAgc2lnbmF0dXJlLnNpZ25hdHVyZS50b1N0cmluZygnYmFzZTY0Jykuc2hvdWxkLmVxdWFsKHNpZ25hdHVyZUJhc2U2NCk7XG4gIH07XG5cbiAgY29uc3QgYXNzZXJ0QnJvYWRjYXN0Rm9ybWF0UHJvcGVydGllcyA9IGFzeW5jIChcbiAgICBtZXNzYWdlOiBJTWVzc2FnZSxcbiAgICBleHBlY3RlZFNlcmlhbGl6ZWRTaWduYXR1cmVzPzogU2VyaWFsaXplZFNpZ25hdHVyZVtdXG4gICkgPT4ge1xuICAgIGNvbnN0IHJlYnJvYWRjYXN0TWVzc2FnZSA9IGF3YWl0IG1lc3NhZ2UudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICByZWJyb2FkY2FzdE1lc3NhZ2Uuc2hvdWxkLmhhdmUucHJvcGVydGllcyhbJ3R5cGUnLCAncGF5bG9hZCcsICdzZXJpYWxpemVkU2lnbmF0dXJlcycsICdzaWduZXJzJywgJ21ldGFkYXRhJ10pO1xuICAgIHJlYnJvYWRjYXN0TWVzc2FnZS50eXBlLnNob3VsZC5lcXVhbChNZXNzYWdlU3RhbmRhcmRUeXBlLlNJTVBMRSk7XG4gICAgcmVicm9hZGNhc3RNZXNzYWdlLnBheWxvYWQuc2hvdWxkLmVxdWFsKCd0ZXN0IG1lc3NhZ2UnKTtcbiAgICByZWJyb2FkY2FzdE1lc3NhZ2Uuc2VyaWFsaXplZFNpZ25hdHVyZXM/LnNob3VsZC5kZWVwRXF1YWwoZXhwZWN0ZWRTZXJpYWxpemVkU2lnbmF0dXJlcyk7XG4gICAgcmVicm9hZGNhc3RNZXNzYWdlLnNpZ25lcnM/LnNob3VsZC5kZWVwRXF1YWwoWydzaWduZXIxJ10pO1xuICB9O1xuXG4gIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgIHNhbmRib3ggPSBzaW5vbi5jcmVhdGVTYW5kYm94KCk7XG4gICAgZmFjdG9yeSA9IG5ldyBNZXNzYWdlQnVpbGRlckZhY3RvcnkoY29pbkNvbmZpZyk7XG4gIH0pO1xuXG4gIGFmdGVyRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgc2FuZGJveC5yZXN0b3JlKCk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdnZXRNZXNzYWdlQnVpbGRlcicsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHJldHVybiBTaW1wbGVNZXNzYWdlQnVpbGRlciBmb3IgU0lNUExFIHR5cGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBidWlsZGVyID0gZmFjdG9yeS5nZXRNZXNzYWdlQnVpbGRlcihNZXNzYWdlU3RhbmRhcmRUeXBlLlNJTVBMRSk7XG4gICAgICBhc3NlcnRTaW1wbGVNZXNzYWdlQnVpbGRlcihidWlsZGVyKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgZXJyb3IgZm9yIHVuc3VwcG9ydGVkIG1lc3NhZ2UgdHlwZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHVuc3VwcG9ydGVkTWVzc2FnZVR5cGVzLmZvckVhY2goKHR5cGUpID0+IHtcbiAgICAgICAgc2hvdWxkLnRocm93cygoKSA9PiBmYWN0b3J5LmdldE1lc3NhZ2VCdWlsZGVyKHR5cGUpLCBuZXcgUmVnRXhwKGBJbnZhbGlkIG1lc3NhZ2Ugc3RhbmRhcmQgJHt0eXBlfWApKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZnJvbUJyb2FkY2FzdEZvcm1hdCcsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIGdldCB0aGUgY29ycmVjdCBidWlsZGVyIHR5cGUgZnJvbSBicm9hZGNhc3RhYmxlIG1lc3NhZ2UnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBidWlsZGVyID0gZmFjdG9yeS5mcm9tQnJvYWRjYXN0Rm9ybWF0KHRlc3RCcm9hZGNhc3RNZXNzYWdlKTtcbiAgICAgIGFzc2VydFNpbXBsZU1lc3NhZ2VCdWlsZGVyKGJ1aWxkZXIpO1xuXG4gICAgICBjb25zdCBtZXNzYWdlID0gYXdhaXQgYXNzZXJ0QnVpbGRlck1lc3NhZ2VQcm9wZXJ0aWVzKGJ1aWxkZXIsICd0ZXN0IG1lc3NhZ2UnKTtcbiAgICAgIGFzc2VydFNpZ25hdHVyZVByb3BlcnRpZXMobWVzc2FnZSk7XG4gICAgICBhd2FpdCBhc3NlcnRCcm9hZGNhc3RGb3JtYXRQcm9wZXJ0aWVzKG1lc3NhZ2UsIHRlc3RCcm9hZGNhc3RNZXNzYWdlLnNlcmlhbGl6ZWRTaWduYXR1cmVzKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgZm9yIHVuc3VwcG9ydGVkIG1lc3NhZ2UgdHlwZSBpbiBicm9hZGNhc3RhYmxlIG1lc3NhZ2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBicm9hZGNhc3RNZXNzYWdlID0ge1xuICAgICAgICAuLi50ZXN0QnJvYWRjYXN0TWVzc2FnZSxcbiAgICAgICAgdHlwZTogTWVzc2FnZVN0YW5kYXJkVHlwZS5FSVAxOTEsXG4gICAgICB9O1xuXG4gICAgICBzaG91bGQudGhyb3dzKFxuICAgICAgICAoKSA9PiBmYWN0b3J5LmZyb21Ccm9hZGNhc3RGb3JtYXQoYnJvYWRjYXN0TWVzc2FnZSksXG4gICAgICAgIG5ldyBSZWdFeHAoYEludmFsaWQgbWVzc2FnZSBzdGFuZGFyZCAke01lc3NhZ2VTdGFuZGFyZFR5cGUuRUlQMTkxfWApXG4gICAgICApO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZnJvbUJyb2FkY2FzdFN0cmluZycsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHBhcnNlIGJyb2FkY2FzdGFibGUgc3RyaW5nIGFuZCByZXR1cm4gY29ycmVjdCBidWlsZGVyIHR5cGUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBicm9hZGNhc3RTdHJpbmcgPSBKU09OLnN0cmluZ2lmeSh0ZXN0QnJvYWRjYXN0TWVzc2FnZSk7XG4gICAgICBjb25zdCBicm9hZGNhc3RIZXggPSBCdWZmZXIuZnJvbShicm9hZGNhc3RTdHJpbmcpLnRvU3RyaW5nKCdoZXgnKTtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBmYWN0b3J5LmZyb21Ccm9hZGNhc3RTdHJpbmcoYnJvYWRjYXN0SGV4KTtcblxuICAgICAgYXNzZXJ0U2ltcGxlTWVzc2FnZUJ1aWxkZXIoYnVpbGRlcik7XG4gICAgICBjb25zdCBtZXNzYWdlID0gYXdhaXQgYXNzZXJ0QnVpbGRlck1lc3NhZ2VQcm9wZXJ0aWVzKGJ1aWxkZXIsICd0ZXN0IG1lc3NhZ2UnKTtcbiAgICAgIGFzc2VydFNpZ25hdHVyZVByb3BlcnRpZXMobWVzc2FnZSk7XG4gICAgICBhd2FpdCBhc3NlcnRCcm9hZGNhc3RGb3JtYXRQcm9wZXJ0aWVzKG1lc3NhZ2UsIHRlc3RCcm9hZGNhc3RNZXNzYWdlLnNlcmlhbGl6ZWRTaWduYXR1cmVzKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgZm9yIGludmFsaWQgSlNPTiBzdHJpbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICB0cnkge1xuICAgICAgICBmYWN0b3J5LmZyb21Ccm9hZGNhc3RTdHJpbmcoJ2FiY2RlZmcnKTsgLy8gSW52YWxpZCBoZXggc3RyaW5nXG4gICAgICAgIGZhaWwoJ0V4cGVjdGVkIGVycm9yIG5vdCB0aHJvd24nKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGVycm9yLnNob3VsZC5iZS5pbnN0YW5jZW9mKFN5bnRheEVycm9yKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
@@ -1 +0,0 @@
1
- {"version":3,"file":"simpleMessageBuilder.d.ts","sourceRoot":"","sources":["../../../../test/unit/messages/simpleMessageBuilder.ts"],"names":[],"mappings":""}
@@ -1,194 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- var __importDefault = (this && this.__importDefault) || function (mod) {
36
- return (mod && mod.__esModule) ? mod : { "default": mod };
37
- };
38
- Object.defineProperty(exports, "__esModule", { value: true });
39
- const sinon_1 = __importDefault(require("sinon"));
40
- const should_1 = __importDefault(require("should"));
41
- const sdk_core_1 = require("@bitgo-beta/sdk-core");
42
- const bs58 = __importStar(require("bs58"));
43
- const src_1 = require("../../../src");
44
- describe('Solana SimpleMessageBuilder', function () {
45
- let sandbox;
46
- let factory;
47
- const coinConfig = { name: 'tsol' };
48
- beforeEach(function () {
49
- sandbox = sinon_1.default.createSandbox();
50
- factory = new src_1.MessageBuilderFactory(coinConfig);
51
- });
52
- afterEach(function () {
53
- sandbox.restore();
54
- });
55
- describe('build', function () {
56
- it('should build a SimpleMessage with correct payload', async function () {
57
- const payload = 'Hello, Solana!';
58
- const builder = factory.getMessageBuilder(sdk_core_1.MessageStandardType.SIMPLE);
59
- builder.setPayload(payload);
60
- const message = await builder.build();
61
- should_1.default.exist(message);
62
- message.should.be.instanceof(sdk_core_1.SimpleMessage);
63
- should_1.default.equal(message.getType(), sdk_core_1.MessageStandardType.SIMPLE);
64
- should_1.default.equal(message.getPayload(), payload);
65
- });
66
- it('should build a SimpleMessage with signatures', async function () {
67
- const payload = 'Sign this message';
68
- const signatures = [
69
- {
70
- publicKey: { pub: 'solPubKey1' },
71
- signature: Buffer.from('solSignature1'),
72
- },
73
- ];
74
- const builder = factory.getMessageBuilder(sdk_core_1.MessageStandardType.SIMPLE);
75
- builder.setPayload(payload).setSignatures(signatures);
76
- const message = await builder.build();
77
- should_1.default.exist(message);
78
- should_1.default.equal(message.getPayload(), payload);
79
- should_1.default.deepEqual(message.getSignatures(), signatures);
80
- });
81
- it('should build a SimpleMessage with signers', async function () {
82
- const payload = 'Message with signers';
83
- const signers = ['solSigner1', 'solSigner2'];
84
- const builder = factory.getMessageBuilder(sdk_core_1.MessageStandardType.SIMPLE);
85
- builder.setPayload(payload).setSigners(signers);
86
- const message = await builder.build();
87
- should_1.default.exist(message);
88
- should_1.default.equal(message.getPayload(), payload);
89
- should_1.default.deepEqual(message.getSigners(), signers);
90
- });
91
- it('should build a SimpleMessage with metadata', async function () {
92
- const payload = 'Message with metadata';
93
- const metadata = { solNetwork: 'testnet', timestamp: 1625097600 };
94
- const builder = factory.getMessageBuilder(sdk_core_1.MessageStandardType.SIMPLE);
95
- builder.setPayload(payload).setMetadata(metadata);
96
- const message = await builder.build();
97
- should_1.default.exist(message);
98
- should_1.default.equal(message.getPayload(), payload);
99
- const messageMetadata = message.getMetadata();
100
- should_1.default.equal(messageMetadata?.solNetwork, metadata.solNetwork);
101
- should_1.default.equal(messageMetadata?.timestamp, metadata.timestamp);
102
- });
103
- it('should throw error when building without payload', async function () {
104
- const builder = factory.getMessageBuilder(sdk_core_1.MessageStandardType.SIMPLE);
105
- await (0, should_1.default)(builder.build()).be.rejectedWith('Message payload must be set before building the message');
106
- });
107
- });
108
- describe('getSignablePayload', function () {
109
- it('should return Buffer with correct payload', async function () {
110
- const payload = 'Signable Solana message';
111
- const builder = factory.getMessageBuilder(sdk_core_1.MessageStandardType.SIMPLE);
112
- builder.setPayload(payload);
113
- const message = await builder.build();
114
- const signablePayload = await message.getSignablePayload();
115
- should_1.default.exist(signablePayload);
116
- Buffer.isBuffer(signablePayload).should.be.true();
117
- signablePayload.toString().should.equal(payload);
118
- });
119
- });
120
- describe('toBroadcastFormat', function () {
121
- it('should convert SimpleMessage to broadcastable format', async function () {
122
- const payload = 'Broadcast me';
123
- const signers = ['solAddress1'];
124
- const signatures = [
125
- {
126
- publicKey: { pub: 'solPubKey1' },
127
- signature: Buffer.from('solSignature1'),
128
- },
129
- ];
130
- const builder = factory.getMessageBuilder(sdk_core_1.MessageStandardType.SIMPLE);
131
- builder.setPayload(payload).setSigners(signers).setSignatures(signatures);
132
- const message = await builder.build();
133
- const broadcastFormat = await message.toBroadcastFormat();
134
- should_1.default.exist(broadcastFormat);
135
- should_1.default.equal(broadcastFormat.type, sdk_core_1.MessageStandardType.SIMPLE);
136
- should_1.default.equal(broadcastFormat.payload, payload);
137
- should_1.default.deepEqual(broadcastFormat.signers, signers);
138
- should_1.default.exist(broadcastFormat.serializedSignatures);
139
- const serializedSignatures = broadcastFormat.serializedSignatures;
140
- should_1.default.equal(serializedSignatures?.length, 1);
141
- should_1.default.equal(serializedSignatures?.[0].publicKey, 'solPubKey1');
142
- should_1.default.equal(serializedSignatures?.[0].signature, Buffer.from('solSignature1').toString('base64'));
143
- });
144
- });
145
- describe('fromBroadcastFormat', function () {
146
- it('should rebuild message from broadcastable format', async function () {
147
- const broadcastMessage = {
148
- type: sdk_core_1.MessageStandardType.SIMPLE,
149
- payload: 'Solana test message',
150
- serializedSignatures: [
151
- {
152
- publicKey: 'solPubKey1',
153
- signature: Buffer.from('solSignature1').toString('base64'),
154
- },
155
- ],
156
- signers: ['solSigner1'],
157
- metadata: { network: 'testnet', encoding: 'utf8' },
158
- };
159
- const builder = factory.getMessageBuilder(sdk_core_1.MessageStandardType.SIMPLE);
160
- const message = await builder.fromBroadcastFormat(broadcastMessage);
161
- should_1.default.exist(message);
162
- should_1.default.equal(message.getType(), sdk_core_1.MessageStandardType.SIMPLE);
163
- should_1.default.equal(message.getPayload(), broadcastMessage.payload);
164
- should_1.default.deepEqual(message.getSigners(), broadcastMessage.signers);
165
- should_1.default.exist(message.getSignatures());
166
- should_1.default.equal(message.getSignatures().length, 1);
167
- });
168
- });
169
- describe('fromBroadcastString', function () {
170
- it('should parse broadcastable string and return correct builder type', async function () {
171
- const broadcastHex = '7b2274797065223a2253494d504c45222c227061796c6f6164223a2253544152203438373934363720746f2061646472317178763965397a70353578763336307767686c3830366430327933353839397a6b6b7132726874667876377836777963746a3279726667766572353775333037776c35363735667267773232396476713538776b6a76657564357571666e6d74657a2033316136626162353061383462383433396164636662373836626232303230663638303765366538666461363239623432343131306663376262316336623862222c2273657269616c697a65645369676e617475726573223a5b7b227075626c69634b6579223a22475a6d6a57464a543964556e70574e714a61626e524d7134747779714372396b584663337a4d4765506d6139222c227369676e6174757265223a22675235434446464f5242522f6756416b4b624a4635534d6f36495063674a376a6976694f2f7631535a7056514b6a67566e6f414f45695855614472656d6c4735516743775942725a6132486a547739386c65396e44673d3d227d5d2c227369676e657273223a5b22475a6d6a57464a543964556e70574e714a61626e524d7134747779714372396b584663337a4d4765506d6139225d2c226d65746164617461223a7b22656e636f64696e67223a2275746638227d2c227369676e61626c655061796c6f6164223a2255315242556941304f4463354e445933494852764947466b5a484978635868324f575535656e41314e5868324d7a59776432646f624467774e6d51774d6e6b7a4e5467354f58707261334579636d68305a6e68324e33673264336c6a64476f7965584a6d5a335a6c636a553364544d774e3364734e5459334e575a795a3363794d6a6c6b646e45314f486472616e5a6c645751316458466d626d31305a586f674d7a46684e6d4a68596a557759546730596a67304d7a6c685a474e6d596a63344e6d4a694d6a41794d4759324f4441335a545a6c4f475a6b595459794f5749304d6a51784d54426d597a6469596a466a4e6d493459673d3d227d';
172
- const coinConfig = { name: 'sol' };
173
- const factory = new src_1.MessageBuilderFactory(coinConfig);
174
- const builder = factory.fromBroadcastString(broadcastHex);
175
- const message = await builder.build();
176
- const payload = message.getPayload();
177
- const payloadParts = payload.split(' ');
178
- const address = message.getSigners()[0];
179
- address.should.equal('GZmjWFJT9dUnpWNqJabnRMq4twyqCr9kXFc3zMGePma9');
180
- const destinationAddress = payloadParts[3];
181
- destinationAddress.should.equal('addr1qxv9e9zp55xv360wghl806d02y35899zkkq2rhtfxv7x6wyctj2yrfgver57u307wl5675frgw229dvq58wkjveud5uqfnmtez');
182
- const amount = Number(payloadParts[1]);
183
- amount.should.equal(4879467);
184
- const signatureBuff = message.getSignatures()[0].signature;
185
- const signatureBase58 = bs58.encode(signatureBuff);
186
- signatureBase58.should.equal('3aj7xDGJrFAbNF6GLrWTHpy8UW94i6xFADJ1KdomDLaCDjUyz8Gj5vPc5mZLduFhRAUCU4BUcnBWu5te1DbMXCFf');
187
- const signatureHex = signatureBuff.toString('hex');
188
- signatureHex.should.equal('811e420c514e44147f81502429b245e52328e883dc809ee38af88efefd526695502a38159e800e1225d4683ade9a51b94200b0601ad96b61e34f0f7c95ef670e');
189
- const publicKeyHex = message.getSignatures()[0].publicKey.pub;
190
- publicKeyHex.should.equal('GZmjWFJT9dUnpWNqJabnRMq4twyqCr9kXFc3zMGePma9');
191
- });
192
- });
193
- });
194
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2ltcGxlTWVzc2FnZUJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90ZXN0L3VuaXQvbWVzc2FnZXMvc2ltcGxlTWVzc2FnZUJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQSxrREFBMEI7QUFDMUIsb0RBQTRCO0FBQzVCLG1EQUFnRztBQUNoRywyQ0FBNkI7QUFDN0Isc0NBQXFEO0FBRXJELFFBQVEsQ0FBQyw2QkFBNkIsRUFBRTtJQUN0QyxJQUFJLE9BQTJCLENBQUM7SUFDaEMsSUFBSSxPQUE4QixDQUFDO0lBQ25DLE1BQU0sVUFBVSxHQUFHLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBYyxDQUFDO0lBRWhELFVBQVUsQ0FBQztRQUNULE9BQU8sR0FBRyxlQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDaEMsT0FBTyxHQUFHLElBQUksMkJBQXFCLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDbEQsQ0FBQyxDQUFDLENBQUM7SUFFSCxTQUFTLENBQUM7UUFDUixPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDcEIsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsT0FBTyxFQUFFO1FBQ2hCLEVBQUUsQ0FBQyxtREFBbUQsRUFBRSxLQUFLO1lBQzNELE1BQU0sT0FBTyxHQUFHLGdCQUFnQixDQUFDO1lBQ2pDLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyw4QkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN0RSxPQUFPLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBRTVCLE1BQU0sT0FBTyxHQUFHLE1BQU0sT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3RDLGdCQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3RCLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFD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QUFDLENBQUMsQ0FBQyxDQUFDO1lBQzNDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQzdCLHlHQUF5RyxDQUMxRyxDQUFDO1lBQ0YsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3ZDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBRTdCLE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDM0QsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUNuRCxlQUFlLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FDMUIsMEZBQTBGLENBQzNGLENBQUM7WUFDRixNQUFNLFlBQVksR0FBRyxhQUFhLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ25ELFlBQVksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUN2QixrSUFBa0ksQ0FDbkksQ0FBQztZQUNGLE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDO1lBQzlELFlBQVksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLDhDQUE4QyxDQUFDLENBQUM7UUFDNUUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmFzZUNvaW4gfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCBzaW5vbiBmcm9tICdzaW5vbic7XG5pbXBvcnQgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5pbXBvcnQgeyBCcm9hZGNhc3RhYmxlTWVzc2FnZSwgTWVzc2FnZVN0YW5kYXJkVHlwZSwgU2ltcGxlTWVzc2FnZSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCAqIGFzIGJzNTggZnJvbSAnYnM1OCc7XG5pbXBvcnQgeyBNZXNzYWdlQnVpbGRlckZhY3RvcnkgfSBmcm9tICcuLi8uLi8uLi9zcmMnO1xuXG5kZXNjcmliZSgnU29sYW5hIFNpbXBsZU1lc3NhZ2VCdWlsZGVyJywgZnVuY3Rpb24gKCkge1xuICBsZXQgc2FuZGJveDogc2lub24uU2lub25TYW5kYm94O1xuICBsZXQgZmFjdG9yeTogTWVzc2FnZUJ1aWxkZXJGYWN0b3J5O1xuICBjb25zdCBjb2luQ29uZmlnID0geyBuYW1lOiAndHNvbCcgfSBhcyBCYXNlQ29pbjtcblxuICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICBzYW5kYm94ID0gc2lub24uY3JlYXRlU2FuZGJveCgpO1xuICAgIGZhY3RvcnkgPSBuZXcgTWVzc2FnZUJ1aWxkZXJGYWN0b3J5KGNvaW5Db25maWcpO1xuICB9KTtcblxuICBhZnRlckVhY2goZnVuY3Rpb24gKCkge1xuICAgIHNhbmRib3gucmVzdG9yZSgpO1xuICB9KTtcblxuICBkZXNjcmliZSgnYnVpbGQnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBidWlsZCBhIFNpbXBsZU1lc3NhZ2Ugd2l0aCBjb3JyZWN0IHBheWxvYWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBwYXlsb2FkID0gJ0hlbGxvLCBTb2xhbmEhJztcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBmYWN0b3J5LmdldE1lc3NhZ2VCdWlsZGVyKE1lc3NhZ2VTdGFuZGFyZFR5cGUuU0lNUExFKTtcbiAgICAgIGJ1aWxkZXIuc2V0UGF5bG9hZChwYXlsb2FkKTtcblxuICAgICAgY29uc3QgbWVzc2FnZSA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIHNob3VsZC5leGlzdChtZXNzYWdlKTtcbiAgICAgIG1lc3NhZ2Uuc2hvdWxkLmJlLmluc3RhbmNlb2YoU2ltcGxlTWVzc2FnZSk7XG4gICAgICBzaG91bGQuZXF1YWwobWVzc2FnZS5nZXRUeXBlKCksIE1lc3NhZ2VTdGFuZGFyZFR5cGUuU0lNUExFKTtcbiAgICAgIHNob3VsZC5lcXVhbChtZXNzYWdlLmdldFBheWxvYWQoKSwgcGF5bG9hZCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGJ1aWxkIGEgU2ltcGxlTWVzc2FnZSB3aXRoIHNpZ25hdHVyZXMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBwYXlsb2FkID0gJ1NpZ24gdGhpcyBtZXNzYWdlJztcbiAgICAgIGNvbnN0IHNpZ25hdHVyZXMgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICBwdWJsaWNLZXk6IHsgcHViOiAnc29sUHViS2V5MScgfSxcbiAgICAgICAgICBzaWduYXR1cmU6IEJ1ZmZlci5mcm9tKCdzb2xTaWduYXR1cmUxJyksXG4gICAgICAgIH0sXG4gICAgICBdO1xuXG4gICAgICBjb25zdCBidWlsZGVyID0gZmFjdG9yeS5nZXRNZXNzYWdlQnVpbGRlcihNZXNzYWdlU3RhbmRhcmRUeXBlLlNJTVBMRSk7XG4gICAgICBidWlsZGVyLnNldFBheWxvYWQocGF5bG9hZCkuc2V0U2lnbmF0dXJlcyhzaWduYXR1cmVzKTtcblxuICAgICAgY29uc3QgbWVzc2FnZSA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIHNob3VsZC5leGlzdChtZXNzYWdlKTtcbiAgICAgIHNob3VsZC5lcXVhbChtZXNzYWdlLmdldFBheWxvYWQoKSwgcGF5bG9hZCk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKG1lc3NhZ2UuZ2V0U2lnbmF0dXJlcygpLCBzaWduYXR1cmVzKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYnVpbGQgYSBTaW1wbGVNZXNzYWdlIHdpdGggc2lnbmVycycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHBheWxvYWQgPSAnTWVzc2FnZSB3aXRoIHNpZ25lcnMnO1xuICAgICAgY29uc3Qgc2lnbmVycyA9IFsnc29sU2lnbmVyMScsICdzb2xTaWduZXIyJ107XG5cbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBmYWN0b3J5LmdldE1lc3NhZ2VCdWlsZGVyKE1lc3NhZ2VTdGFuZGFyZFR5cGUuU0lNUExFKTtcbiAgICAgIGJ1aWxkZXIuc2V0UGF5bG9hZChwYXlsb2FkKS5zZXRTaWduZXJzKHNpZ25lcnMpO1xuXG4gICAgICBjb25zdCBtZXNzYWdlID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgICAgc2hvdWxkLmV4aXN0KG1lc3NhZ2UpO1xuICAgICAgc2hvdWxkLmVxdWFsKG1lc3NhZ2UuZ2V0UGF5bG9hZCgpLCBwYXlsb2FkKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwobWVzc2FnZS5nZXRTaWduZXJzKCksIHNpZ25lcnMpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBidWlsZCBhIFNpbXBsZU1lc3NhZ2Ugd2l0aCBtZXRhZGF0YScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHBheWxvYWQgPSAnTWVzc2FnZSB3aXRoIG1ldGFkYXRhJztcbiAgICAgIGNvbnN0IG1ldGFkYXRhID0geyBzb2xOZXR3b3JrOiAndGVzdG5ldCcsIHRpbWVzdGFtcDogMTYyNTA5NzYwMCB9O1xuXG4gICAgICBjb25zdCBidWlsZGVyID0gZmFjdG9yeS5nZXRNZXNzYWdlQnVpbGRlcihNZXNzYWdlU3RhbmRhcmRUeXBlLlNJTVBMRSk7XG4gICAgICBidWlsZGVyLnNldFBheWxvYWQocGF5bG9hZCkuc2V0TWV0YWRhdGEobWV0YWRhdGEpO1xuXG4gICAgICBjb25zdCBtZXNzYWdlID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgICAgc2hvdWxkLmV4aXN0KG1lc3NhZ2UpO1xuICAgICAgc2hvdWxkLmVxdWFsKG1lc3NhZ2UuZ2V0UGF5bG9hZCgpLCBwYXlsb2FkKTtcbiAgICAgIGNvbnN0IG1lc3NhZ2VNZXRhZGF0YSA9IG1lc3NhZ2UuZ2V0TWV0YWRhdGEoKTtcbiAgICAgIHNob3VsZC5lcXVhbChtZXNzYWdlTWV0YWRhdGE/LnNvbE5ldHdvcmssIG1ldGFkYXRhLnNvbE5ldHdvcmspO1xuICAgICAgc2hvdWxkLmVxdWFsKG1lc3NhZ2VNZXRhZGF0YT8udGltZXN0YW1wLCBtZXRhZGF0YS50aW1lc3RhbXApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBlcnJvciB3aGVuIGJ1aWxkaW5nIHdpdGhvdXQgcGF5bG9hZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBmYWN0b3J5LmdldE1lc3NhZ2VCdWlsZGVyKE1lc3NhZ2VTdGFuZGFyZFR5cGUuU0lNUExFKTtcbiAgICAgIGF3YWl0IHNob3VsZChidWlsZGVyLmJ1aWxkKCkpLmJlLnJlamVjdGVkV2l0aCgnTWVzc2FnZSBwYXlsb2FkIG11c3QgYmUgc2V0IGJlZm9yZSBidWlsZGluZyB0aGUgbWVzc2FnZScpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZ2V0U2lnbmFibGVQYXlsb2FkJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIEJ1ZmZlciB3aXRoIGNvcnJlY3QgcGF5bG9hZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHBheWxvYWQgPSAnU2lnbmFibGUgU29sYW5hIG1lc3NhZ2UnO1xuICAgICAgY29uc3QgYnVpbGRlciA9IGZhY3RvcnkuZ2V0TWVzc2FnZUJ1aWxkZXIoTWVzc2FnZVN0YW5kYXJkVHlwZS5TSU1QTEUpO1xuICAgICAgYnVpbGRlci5zZXRQYXlsb2FkKHBheWxvYWQpO1xuXG4gICAgICBjb25zdCBtZXNzYWdlID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3Qgc2lnbmFibGVQYXlsb2FkID0gYXdhaXQgbWVzc2FnZS5nZXRTaWduYWJsZVBheWxvYWQoKTtcblxuICAgICAgc2hvdWxkLmV4aXN0KHNpZ25hYmxlUGF5bG9hZCk7XG4gICAgICBCdWZmZXIuaXNCdWZmZXIoc2lnbmFibGVQYXlsb2FkKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAgc2lnbmFibGVQYXlsb2FkLnRvU3RyaW5nKCkuc2hvdWxkLmVxdWFsKHBheWxvYWQpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgndG9Ccm9hZGNhc3RGb3JtYXQnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBjb252ZXJ0IFNpbXBsZU1lc3NhZ2UgdG8gYnJvYWRjYXN0YWJsZSBmb3JtYXQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBwYXlsb2FkID0gJ0Jyb2FkY2FzdCBtZSc7XG4gICAgICBjb25zdCBzaWduZXJzID0gWydzb2xBZGRyZXNzMSddO1xuICAgICAgY29uc3Qgc2lnbmF0dXJlcyA9IFtcbiAgICAgICAge1xuICAgICAgICAgIHB1YmxpY0tleTogeyBwdWI6ICdzb2xQdWJLZXkxJyB9LFxuICAgICAgICAgIHNpZ25hdHVyZTogQnVmZmVyLmZyb20oJ3NvbFNpZ25hdHVyZTEnKSxcbiAgICAgICAgfSxcbiAgICAgIF07XG5cbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBmYWN0b3J5LmdldE1lc3NhZ2VCdWlsZGVyKE1lc3NhZ2VTdGFuZGFyZFR5cGUuU0lNUExFKTtcbiAgICAgIGJ1aWxkZXIuc2V0UGF5bG9hZChwYXlsb2FkKS5zZXRTaWduZXJzKHNpZ25lcnMpLnNldFNpZ25hdHVyZXMoc2lnbmF0dXJlcyk7XG5cbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgICBjb25zdCBicm9hZGNhc3RGb3JtYXQgPSBhd2FpdCBtZXNzYWdlLnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG5cbiAgICAgIHNob3VsZC5leGlzdChicm9hZGNhc3RGb3JtYXQpO1xuICAgICAgc2hvdWxkLmVxdWFsKGJyb2FkY2FzdEZvcm1hdC50eXBlLCBNZXNzYWdlU3RhbmRhcmRUeXBlLlNJTVBMRSk7XG4gICAgICBzaG91bGQuZXF1YWwoYnJvYWRjYXN0Rm9ybWF0LnBheWxvYWQsIHBheWxvYWQpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbChicm9hZGNhc3RGb3JtYXQuc2lnbmVycywgc2lnbmVycyk7XG4gICAgICBzaG91bGQuZXhpc3QoYnJvYWRjYXN0Rm9ybWF0LnNlcmlhbGl6ZWRTaWduYXR1cmVzKTtcbiAgICAgIGNvbnN0IHNlcmlhbGl6ZWRTaWduYXR1cmVzID0gYnJvYWRjYXN0Rm9ybWF0LnNlcmlhbGl6ZWRTaWduYXR1cmVzO1xuICAgICAgc2hvdWxkLmVxdWFsKHNlcmlhbGl6ZWRTaWduYXR1cmVzPy5sZW5ndGgsIDEpO1xuICAgICAgc2hvdWxkLmVxdWFsKHNlcmlhbGl6ZWRTaWduYXR1cmVzPy5bMF0ucHVibGljS2V5LCAnc29sUHViS2V5MScpO1xuICAgICAgc2hvdWxkLmVxdWFsKHNlcmlhbGl6ZWRTaWduYXR1cmVzPy5bMF0uc2lnbmF0dXJlLCBCdWZmZXIuZnJvbSgnc29sU2lnbmF0dXJlMScpLnRvU3RyaW5nKCdiYXNlNjQnKSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdmcm9tQnJvYWRjYXN0Rm9ybWF0JywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgcmVidWlsZCBtZXNzYWdlIGZyb20gYnJvYWRjYXN0YWJsZSBmb3JtYXQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBicm9hZGNhc3RNZXNzYWdlOiBCcm9hZGNhc3RhYmxlTWVzc2FnZSA9IHtcbiAgICAgICAgdHlwZTogTWVzc2FnZVN0YW5kYXJkVHlwZS5TSU1QTEUsXG4gICAgICAgIHBheWxvYWQ6ICdTb2xhbmEgdGVzdCBtZXNzYWdlJyxcbiAgICAgICAgc2VyaWFsaXplZFNpZ25hdHVyZXM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwdWJsaWNLZXk6ICdzb2xQdWJLZXkxJyxcbiAgICAgICAgICAgIHNpZ25hdHVyZTogQnVmZmVyLmZyb20oJ3NvbFNpZ25hdHVyZTEnKS50b1N0cmluZygnYmFzZTY0JyksXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgc2lnbmVyczogWydzb2xTaWduZXIxJ10sXG4gICAgICAgIG1ldGFkYXRhOiB7IG5ldHdvcms6ICd0ZXN0bmV0JywgZW5jb2Rpbmc6ICd1dGY4JyB9LFxuICAgICAgfTtcblxuICAgICAgY29uc3QgYnVpbGRlciA9IGZhY3RvcnkuZ2V0TWVzc2FnZUJ1aWxkZXIoTWVzc2FnZVN0YW5kYXJkVHlwZS5TSU1QTEUpO1xuICAgICAgY29uc3QgbWVzc2FnZSA9IGF3YWl0IGJ1aWxkZXIuZnJvbUJyb2FkY2FzdEZvcm1hdChicm9hZGNhc3RNZXNzYWdlKTtcblxuICAgICAgc2hvdWxkLmV4aXN0KG1lc3NhZ2UpO1xuICAgICAgc2hvdWxkLmVxdWFsKG1lc3NhZ2UuZ2V0VHlwZSgpLCBNZXNzYWdlU3RhbmRhcmRUeXBlLlNJTVBMRSk7XG4gICAgICBzaG91bGQuZXF1YWwobWVzc2FnZS5nZXRQYXlsb2FkKCksIGJyb2FkY2FzdE1lc3NhZ2UucGF5bG9hZCk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKG1lc3NhZ2UuZ2V0U2lnbmVycygpLCBicm9hZGNhc3RNZXNzYWdlLnNpZ25lcnMpO1xuICAgICAgc2hvdWxkLmV4aXN0KG1lc3NhZ2UuZ2V0U2lnbmF0dXJlcygpKTtcbiAgICAgIHNob3VsZC5lcXVhbChtZXNzYWdlLmdldFNpZ25hdHVyZXMoKS5sZW5ndGgsIDEpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZnJvbUJyb2FkY2FzdFN0cmluZycsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHBhcnNlIGJyb2FkY2FzdGFibGUgc3RyaW5nIGFuZCByZXR1cm4gY29ycmVjdCBidWlsZGVyIHR5cGUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBicm9hZGNhc3RIZXggPVxuICAgICAgICAnN2IyMjc0Nzk3MDY1MjIzYTIyNTM0OTRkNTA0YzQ1MjIyYzIyNzA2MTc5NmM2ZjYxNjQyMjNhMjI1MzU0NDE1MjIwMzQzODM3MzkzNDM2MzcyMDc0NmYyMDYxNjQ2NDcyMzE3MTc4NzYzOTY1Mzk3YTcwMzUzNTc4NzYzMzM2MzA3NzY3Njg2YzM4MzAzNjY0MzAzMjc5MzMzNTM4MzkzOTdhNmI2YjcxMzI3MjY4NzQ2Njc4NzYzNzc4MzY3Nzc5NjM3NDZhMzI3OTcyNjY2Nzc2NjU3MjM1Mzc3NTMzMzAzNzc3NmMzNTM2MzczNTY2NzI2Nzc3MzIzMjM5NjQ3NjcxMzUzODc3NmI2YTc2NjU3NTY0MzU3NTcxNjY2ZTZkNzQ2NTdhMjAzMzMxNjEzNjYyNjE2MjM1MzA2MTM4MzQ2MjM4MzQzMzM5NjE2NDYzNjY2MjM3MzgzNjYyNjIzMjMwMzIzMDY2MzYzODMwMzc2NTM2NjUzODY2NjQ2MTM2MzIzOTYyMzQzMjM0MzEzMTMwNjY2MzM3NjI2MjMxNjMzNjYyMzg2MjIyMmMyMjczNjU3MjY5NjE2YzY5N2E2NTY0NTM2OTY3NmU2MTc0NzU3MjY1NzMyMjNhNWI3YjIyNzA3NTYyNmM2OTYzNGI2NTc5MjIzYTIyNDc1YTZkNmE1NzQ2NGE1NDM5NjQ1NTZlNzA1NzRlNzE0YTYxNjI2ZTUyNGQ3MTM0NzQ3Nzc5NzE0MzcyMzk2YjU4NDY2MzMzN2E0ZDQ3NjU1MDZkNjEzOTIyMmMyMjczNjk2NzZlNjE3NDc1NzI2NTIyM2EyMjY3NTIzNTQzNDQ0NjQ2NGY1MjQyNTIyZjY3NTY0MTZiNGI2MjRhNDYzNTUzNGQ2ZjM2NDk1MDYzNjc0YTM3NmE2OTc2Njk0ZjJmNzYzMTUzNWE3MDU2NTE0YjZhNjc1NjZlNmY0MTRmNDU2OTU4NTU2MTQ0NzI2NTZkNmM0NzM1NTE2NzQzNzc1OTQyNzI1YTYxMzI0ODZhNTQ3NzM5Mzg2YzY1Mzk2ZTQ0NjczZDNkMjI3ZDVkMmMyMjczNjk2NzZlNjU3MjczMjIzYTViMjI0NzVhNmQ2YTU3NDY0YTU0Mzk2NDU1NmU3MDU3NGU3MTRhNjE2MjZlNTI0ZDcxMzQ3NDc3Nzk3MTQzNzIzOTZiNTg0NjYzMzM3YTRkNDc2NTUwNmQ2MTM5MjI1ZDJjMjI2ZDY1NzQ2MTY0NjE3NDYxMjIzYTdiMjI2NTZlNjM2ZjY0Njk2ZTY3MjIzYTIyNzU3NDY2MzgyMjdkMmMyMjczNjk2NzZlNjE2MjZjNjU1MDYxNzk2YzZmNjE2NDIyM2EyMjU1MzE1MjQyNTU2OTQxMzA0ZjQ0NjMzNTRlNDQ1OTMzNDk0ODUyNzY0OTQ3NDY2YjVhNDg0OTc4NjM1ODY4MzI0ZjU3NTUzNTY1NmU0MTMxNGU1ODY4MzI0ZDdhNTk3NzY0MzI2NDZmNjI0NDY3Nzc0ZTZkNTE3NzRkNmU2YjdhNGU1NDY3MzU0ZjU4NzA3MjYxMzM0NTc5NjM2ZDY4MzA1YTZlNjgzMjRlMzM2NzMyNjQzMzZjNmE2NDQ3NmY3OTY1NTg0YTZkNWEzMzVhNmM2MzZhNTUzMzY0NTQ0ZDc3NGUzMzY0NzM0ZTU0NTkzMzRlNTc1YTc5NWEzMzYzNzk0ZDZhNmM2YjY0NmU0NTMxNGY0ODY0NzI2MTZlNWE2YzY0NTc1MTMxNjQ1ODQ2NmQ2MjZkMzEzMDVhNTg2ZjY3NGQ3YTQ2Njg0ZTZkNGE2ODU5NmE1NTc3NTk1NDY3MzA1OTZhNjczMDRkN2E2YzY4NWE0NzRlNmQ1OTZhNjMzNDRlNmQ0YTY5NGQ2YTQxNzk0ZDQ3NTkzMjRmNDQ0MTMzNWE1NDVhNmM0ZjQ3NWE2YjU5NTQ1OTc5NGY1NzQ5MzA0ZDZhNTE3ODRkNTQ0MjZkNTk3YTY0Njk1OTZhNDY2YTRlNmQ0OTM0NTk2NzNkM2QyMjdkJztcbiAgICAgIGNvbnN0IGNvaW5Db25maWcgPSB7IG5hbWU6ICdzb2wnIH0gYXMgQmFzZUNvaW47XG4gICAgICBjb25zdCBmYWN0b3J5ID0gbmV3IE1lc3NhZ2VCdWlsZGVyRmFjdG9yeShjb2luQ29uZmlnKTtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBmYWN0b3J5LmZyb21Ccm9hZGNhc3RTdHJpbmcoYnJvYWRjYXN0SGV4KTtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG5cbiAgICAgIGNvbnN0IHBheWxvYWQgPSBtZXNzYWdlLmdldFBheWxvYWQoKTtcbiAgICAgIGNvbnN0IHBheWxvYWRQYXJ0cyA9IHBheWxvYWQuc3BsaXQoJyAnKTtcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSBtZXNzYWdlLmdldFNpZ25lcnMoKVswXTtcbiAgICAgIGFkZHJlc3Muc2hvdWxkLmVxdWFsKCdHWm1qV0ZKVDlkVW5wV05xSmFiblJNcTR0d3lxQ3I5a1hGYzN6TUdlUG1hOScpO1xuICAgICAgY29uc3QgZGVzdGluYXRpb25BZGRyZXNzID0gcGF5bG9hZFBhcnRzWzNdO1xuICAgICAgZGVzdGluYXRpb25BZGRyZXNzLnNob3VsZC5lcXVhbChcbiAgICAgICAgJ2FkZHIxcXh2OWU5enA1NXh2MzYwd2dobDgwNmQwMnkzNTg5OXpra3Eycmh0Znh2N3g2d3ljdGoyeXJmZ3ZlcjU3dTMwN3dsNTY3NWZyZ3cyMjlkdnE1OHdranZldWQ1dXFmbm10ZXonXG4gICAgICApO1xuICAgICAgY29uc3QgYW1vdW50ID0gTnVtYmVyKHBheWxvYWRQYXJ0c1sxXSk7XG4gICAgICBhbW91bnQuc2hvdWxkLmVxdWFsKDQ4Nzk0NjcpO1xuXG4gICAgICBjb25zdCBzaWduYXR1cmVCdWZmID0gbWVzc2FnZS5nZXRTaWduYXR1cmVzKClbMF0uc2lnbmF0dXJlO1xuICAgICAgY29uc3Qgc2lnbmF0dXJlQmFzZTU4ID0gYnM1OC5lbmNvZGUoc2lnbmF0dXJlQnVmZik7XG4gICAgICBzaWduYXR1cmVCYXNlNTguc2hvdWxkLmVxdWFsKFxuICAgICAgICAnM2FqN3hER0pyRkFiTkY2R0xyV1RIcHk4VVc5NGk2eEZBREoxS2RvbURMYUNEalV5ejhHajV2UGM1bVpMZHVGaFJBVUNVNEJVY25CV3U1dGUxRGJNWENGZidcbiAgICAgICk7XG4gICAgICBjb25zdCBzaWduYXR1cmVIZXggPSBzaWduYXR1cmVCdWZmLnRvU3RyaW5nKCdoZXgnKTtcbiAgICAgIHNpZ25hdHVyZUhleC5zaG91bGQuZXF1YWwoXG4gICAgICAgICc4MTFlNDIwYzUxNGU0NDE0N2Y4MTUwMjQyOWIyNDVlNTIzMjhlODgzZGM4MDllZTM4YWY4OGVmZWZkNTI2Njk1NTAyYTM4MTU5ZTgwMGUxMjI1ZDQ2ODNhZGU5YTUxYjk0MjAwYjA2MDFhZDk2YjYxZTM0ZjBmN2M5NWVmNjcwZSdcbiAgICAgICk7XG4gICAgICBjb25zdCBwdWJsaWNLZXlIZXggPSBtZXNzYWdlLmdldFNpZ25hdHVyZXMoKVswXS5wdWJsaWNLZXkucHViO1xuICAgICAgcHVibGljS2V5SGV4LnNob3VsZC5lcXVhbCgnR1ptaldGSlQ5ZFVucFdOcUphYm5STXE0dHd5cUNyOWtYRmMzek1HZVBtYTknKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==