@bitgo-beta/sdk-coin-sol 7.6.4-beta.71 → 7.6.4-beta.710

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 (496) 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/index.d.ts.map +1 -0
  4. package/dist/{src → cjs/src}/index.js +1 -1
  5. package/dist/{src → cjs/src}/lib/ataInitializationBuilder.d.ts +12 -1
  6. package/dist/cjs/src/lib/ataInitializationBuilder.d.ts.map +1 -0
  7. package/dist/cjs/src/lib/ataInitializationBuilder.js +231 -0
  8. package/dist/cjs/src/lib/closeAtaBuilder.d.ts +55 -0
  9. package/dist/cjs/src/lib/closeAtaBuilder.d.ts.map +1 -0
  10. package/dist/cjs/src/lib/closeAtaBuilder.js +162 -0
  11. package/dist/cjs/src/lib/confidentialTransferBuilder.d.ts +128 -0
  12. package/dist/cjs/src/lib/confidentialTransferBuilder.d.ts.map +1 -0
  13. package/dist/cjs/src/lib/confidentialTransferBuilder.js +311 -0
  14. package/dist/{src → cjs/src}/lib/constants.d.ts +89 -2
  15. package/dist/cjs/src/lib/constants.d.ts.map +1 -0
  16. package/dist/cjs/src/lib/constants.js +269 -0
  17. package/dist/cjs/src/lib/customInstructionBuilder.d.ts.map +1 -0
  18. package/dist/cjs/src/lib/customInstructionBuilder.js +289 -0
  19. package/dist/cjs/src/lib/explainTransactionWasm.d.ts +21 -0
  20. package/dist/cjs/src/lib/explainTransactionWasm.d.ts.map +1 -0
  21. package/dist/cjs/src/lib/explainTransactionWasm.js +304 -0
  22. package/dist/cjs/src/lib/iface.d.ts +526 -0
  23. package/dist/cjs/src/lib/iface.d.ts.map +1 -0
  24. package/dist/cjs/src/lib/iface.js +7 -0
  25. package/dist/{src → cjs/src}/lib/index.d.ts +5 -0
  26. package/dist/cjs/src/lib/index.d.ts.map +1 -0
  27. package/dist/cjs/src/lib/index.js +93 -0
  28. package/dist/{src → cjs/src}/lib/instructionParamsFactory.d.ts +3 -1
  29. package/dist/cjs/src/lib/instructionParamsFactory.d.ts.map +1 -0
  30. package/dist/cjs/src/lib/instructionParamsFactory.js +1220 -0
  31. package/dist/cjs/src/lib/jitoStakePoolOperations.d.ts.map +1 -0
  32. package/dist/cjs/src/lib/jitoStakePoolOperations.js +200 -0
  33. package/dist/{src → cjs/src}/lib/keyPair.d.ts +6 -0
  34. package/dist/cjs/src/lib/keyPair.d.ts.map +1 -0
  35. package/dist/cjs/src/lib/keyPair.js +112 -0
  36. package/dist/cjs/src/lib/messages/index.d.ts.map +1 -0
  37. package/dist/{src → cjs/src}/lib/messages/index.js +1 -1
  38. package/dist/cjs/src/lib/messages/messageBuilderFactory.d.ts.map +1 -0
  39. package/dist/cjs/src/lib/messages/messageBuilderFactory.js +19 -0
  40. package/dist/cjs/src/lib/recoverNestedAtaBuilder.d.ts +25 -0
  41. package/dist/cjs/src/lib/recoverNestedAtaBuilder.d.ts.map +1 -0
  42. package/dist/cjs/src/lib/recoverNestedAtaBuilder.js +90 -0
  43. package/dist/cjs/src/lib/scaledUiAmount.d.ts +30 -0
  44. package/dist/cjs/src/lib/scaledUiAmount.d.ts.map +1 -0
  45. package/dist/cjs/src/lib/scaledUiAmount.js +112 -0
  46. package/dist/cjs/src/lib/serialization/codecs/v1/config.d.ts +21 -0
  47. package/dist/cjs/src/lib/serialization/codecs/v1/config.d.ts.map +1 -0
  48. package/dist/cjs/src/lib/serialization/codecs/v1/config.js +34 -0
  49. package/dist/cjs/src/lib/serialization/codecs/v1/instruction.d.ts +14 -0
  50. package/dist/cjs/src/lib/serialization/codecs/v1/instruction.d.ts.map +1 -0
  51. package/dist/cjs/src/lib/serialization/codecs/v1/instruction.js +32 -0
  52. package/dist/cjs/src/lib/serialization/codecs/v1/message.d.ts +27 -0
  53. package/dist/cjs/src/lib/serialization/codecs/v1/message.d.ts.map +1 -0
  54. package/dist/cjs/src/lib/serialization/codecs/v1/message.js +196 -0
  55. package/dist/cjs/src/lib/serialization/compileTransactionMessage.d.ts +30 -0
  56. package/dist/cjs/src/lib/serialization/compileTransactionMessage.d.ts.map +1 -0
  57. package/dist/cjs/src/lib/serialization/compileTransactionMessage.js +205 -0
  58. package/dist/cjs/src/lib/serialization/parseWireTransaction.d.ts +9 -0
  59. package/dist/cjs/src/lib/serialization/parseWireTransaction.d.ts.map +1 -0
  60. package/dist/cjs/src/lib/serialization/parseWireTransaction.js +58 -0
  61. package/dist/cjs/src/lib/serialization/wire-transaction.d.ts +14 -0
  62. package/dist/cjs/src/lib/serialization/wire-transaction.d.ts.map +1 -0
  63. package/dist/cjs/src/lib/serialization/wire-transaction.js +51 -0
  64. package/dist/{src → cjs/src}/lib/solInstructionFactory.d.ts +1 -1
  65. package/dist/cjs/src/lib/solInstructionFactory.d.ts.map +1 -0
  66. package/dist/cjs/src/lib/solInstructionFactory.js +1094 -0
  67. package/dist/cjs/src/lib/stakingActivateBuilder.d.ts.map +1 -0
  68. package/dist/cjs/src/lib/stakingActivateBuilder.js +129 -0
  69. package/dist/cjs/src/lib/stakingAuthorizeBuilder.d.ts.map +1 -0
  70. package/dist/cjs/src/lib/stakingAuthorizeBuilder.js +89 -0
  71. package/dist/cjs/src/lib/stakingDeactivateBuilder.d.ts.map +1 -0
  72. package/dist/cjs/src/lib/stakingDeactivateBuilder.js +214 -0
  73. package/dist/cjs/src/lib/stakingDelegateBuilder.d.ts.map +1 -0
  74. package/dist/cjs/src/lib/stakingDelegateBuilder.js +126 -0
  75. package/dist/cjs/src/lib/stakingRawMsgAuthorizeBuilder.d.ts.map +1 -0
  76. package/dist/cjs/src/lib/stakingRawMsgAuthorizeBuilder.js +110 -0
  77. package/dist/cjs/src/lib/stakingWithdrawBuilder.d.ts.map +1 -0
  78. package/dist/cjs/src/lib/stakingWithdrawBuilder.js +87 -0
  79. package/dist/cjs/src/lib/token2022Resolve.d.ts +106 -0
  80. package/dist/cjs/src/lib/token2022Resolve.d.ts.map +1 -0
  81. package/dist/cjs/src/lib/token2022Resolve.js +199 -0
  82. package/dist/cjs/src/lib/tokenExtensions.d.ts +26 -0
  83. package/dist/cjs/src/lib/tokenExtensions.d.ts.map +1 -0
  84. package/dist/cjs/src/lib/tokenExtensions.js +105 -0
  85. package/dist/{src → cjs/src}/lib/tokenTransferBuilder.d.ts +27 -1
  86. package/dist/cjs/src/lib/tokenTransferBuilder.d.ts.map +1 -0
  87. package/dist/cjs/src/lib/tokenTransferBuilder.js +237 -0
  88. package/dist/{src → cjs/src}/lib/transaction.d.ts +22 -0
  89. package/dist/cjs/src/lib/transaction.d.ts.map +1 -0
  90. package/dist/cjs/src/lib/transaction.js +661 -0
  91. package/dist/{src → cjs/src}/lib/transactionBuilder.d.ts +9 -1
  92. package/dist/cjs/src/lib/transactionBuilder.d.ts.map +1 -0
  93. package/dist/cjs/src/lib/transactionBuilder.js +388 -0
  94. package/dist/{src → cjs/src}/lib/transactionBuilderFactory.d.ts +14 -0
  95. package/dist/cjs/src/lib/transactionBuilderFactory.d.ts.map +1 -0
  96. package/dist/cjs/src/lib/transactionBuilderFactory.js +222 -0
  97. package/dist/cjs/src/lib/transferBuilder.d.ts.map +1 -0
  98. package/dist/cjs/src/lib/transferBuilder.js +81 -0
  99. package/dist/cjs/src/lib/transferBuilderV2.d.ts +69 -0
  100. package/dist/cjs/src/lib/transferBuilderV2.d.ts.map +1 -0
  101. package/dist/cjs/src/lib/transferBuilderV2.js +252 -0
  102. package/dist/{src → cjs/src}/lib/utils.d.ts +5 -0
  103. package/dist/cjs/src/lib/utils.d.ts.map +1 -0
  104. package/dist/cjs/src/lib/utils.js +657 -0
  105. package/dist/cjs/src/lib/walletInitializationBuilder.d.ts.map +1 -0
  106. package/dist/cjs/src/lib/walletInitializationBuilder.js +71 -0
  107. package/dist/cjs/src/register.d.ts +5 -0
  108. package/dist/cjs/src/register.d.ts.map +1 -0
  109. package/dist/cjs/src/register.js +29 -0
  110. package/dist/{src → cjs/src}/sol.d.ts +114 -3
  111. package/dist/cjs/src/sol.d.ts.map +1 -0
  112. package/dist/cjs/src/sol.js +1670 -0
  113. package/dist/{src → cjs/src}/solToken.d.ts +7 -0
  114. package/dist/cjs/src/solToken.d.ts.map +1 -0
  115. package/dist/cjs/src/solToken.js +79 -0
  116. package/dist/cjs/src/tsol.d.ts.map +1 -0
  117. package/dist/cjs/src/tsol.js +24 -0
  118. package/dist/{test → cjs/test}/fixtures/sol.d.ts.map +1 -1
  119. package/dist/cjs/test/fixtures/sol.js +1433 -0
  120. package/dist/{test → cjs/test}/resources/sol.d.ts +29 -29
  121. package/dist/cjs/test/resources/sol.d.ts.map +1 -0
  122. package/dist/cjs/test/resources/sol.js +320 -0
  123. package/dist/cjs/test/unit/explainTransactionWasm.d.ts +5 -0
  124. package/dist/cjs/test/unit/explainTransactionWasm.d.ts.map +1 -0
  125. package/dist/cjs/test/unit/explainTransactionWasm.js +66 -0
  126. package/dist/cjs/test/unit/fixtures/solBackupKey.d.ts.map +1 -0
  127. package/dist/cjs/test/unit/fixtures/solBackupKey.js +8 -0
  128. package/dist/cjs/test/unit/getBuilderFactory.d.ts.map +1 -0
  129. package/dist/cjs/test/unit/getBuilderFactory.js +10 -0
  130. package/dist/cjs/test/unit/instructionParamsFactory.d.ts.map +1 -0
  131. package/dist/cjs/test/unit/instructionParamsFactory.js +425 -0
  132. package/dist/cjs/test/unit/instructionParamsFactory.staking.d.ts.map +1 -0
  133. package/dist/cjs/test/unit/instructionParamsFactory.staking.js +1059 -0
  134. package/dist/cjs/test/unit/jitoWasmVerification.d.ts +2 -0
  135. package/dist/cjs/test/unit/jitoWasmVerification.d.ts.map +1 -0
  136. package/dist/cjs/test/unit/jitoWasmVerification.js +78 -0
  137. package/dist/{test → cjs/test}/unit/keyPair.d.ts.map +1 -1
  138. package/dist/cjs/test/unit/keyPair.js +177 -0
  139. package/dist/cjs/test/unit/messages/messageBuilderFactory.d.ts.map +1 -0
  140. package/dist/cjs/test/unit/messages/messageBuilderFactory.js +118 -0
  141. package/dist/cjs/test/unit/messages/simpleMessageBuilder.d.ts.map +1 -0
  142. package/dist/cjs/test/unit/messages/simpleMessageBuilder.js +194 -0
  143. package/dist/cjs/test/unit/register.d.ts +2 -0
  144. package/dist/cjs/test/unit/register.d.ts.map +1 -0
  145. package/dist/cjs/test/unit/register.js +65 -0
  146. package/dist/cjs/test/unit/scaledUiAmount.d.ts +2 -0
  147. package/dist/cjs/test/unit/scaledUiAmount.d.ts.map +1 -0
  148. package/dist/cjs/test/unit/scaledUiAmount.js +101 -0
  149. package/dist/cjs/test/unit/serialization/decodeV1Message.d.ts +2 -0
  150. package/dist/cjs/test/unit/serialization/decodeV1Message.d.ts.map +1 -0
  151. package/dist/cjs/test/unit/serialization/decodeV1Message.js +63 -0
  152. package/dist/cjs/test/unit/serialization/parseWireTransaction.d.ts +2 -0
  153. package/dist/cjs/test/unit/serialization/parseWireTransaction.d.ts.map +1 -0
  154. package/dist/cjs/test/unit/serialization/parseWireTransaction.js +90 -0
  155. package/dist/cjs/test/unit/serialization/transactionV1.d.ts +2 -0
  156. package/dist/cjs/test/unit/serialization/transactionV1.d.ts.map +1 -0
  157. package/dist/cjs/test/unit/serialization/transactionV1.js +136 -0
  158. package/dist/{test → cjs/test}/unit/sol.d.ts.map +1 -1
  159. package/dist/cjs/test/unit/sol.js +5038 -0
  160. package/dist/cjs/test/unit/solInstructionFactory.d.ts.map +1 -0
  161. package/dist/cjs/test/unit/solInstructionFactory.js +623 -0
  162. package/dist/cjs/test/unit/solToken.d.ts.map +1 -0
  163. package/dist/cjs/test/unit/solToken.js +37 -0
  164. package/dist/cjs/test/unit/token2022Resolve.d.ts +2 -0
  165. package/dist/cjs/test/unit/token2022Resolve.d.ts.map +1 -0
  166. package/dist/cjs/test/unit/token2022Resolve.js +252 -0
  167. package/dist/cjs/test/unit/tokenExtensions.d.ts +2 -0
  168. package/dist/cjs/test/unit/tokenExtensions.d.ts.map +1 -0
  169. package/dist/cjs/test/unit/tokenExtensions.js +58 -0
  170. package/dist/cjs/test/unit/transaction.d.ts.map +1 -0
  171. package/dist/cjs/test/unit/transaction.js +1108 -0
  172. package/dist/cjs/test/unit/transactionBuilder/StakingWithdrawBuilder.d.ts.map +1 -0
  173. package/dist/cjs/test/unit/transactionBuilder/StakingWithdrawBuilder.js +202 -0
  174. package/dist/cjs/test/unit/transactionBuilder/ataInitBuilder.d.ts.map +1 -0
  175. package/dist/cjs/test/unit/transactionBuilder/ataInitBuilder.js +508 -0
  176. package/dist/cjs/test/unit/transactionBuilder/closeAtaBuilder.d.ts +2 -0
  177. package/dist/cjs/test/unit/transactionBuilder/closeAtaBuilder.d.ts.map +1 -0
  178. package/dist/cjs/test/unit/transactionBuilder/closeAtaBuilder.js +343 -0
  179. package/dist/cjs/test/unit/transactionBuilder/confidentialTransferBuilder.d.ts +2 -0
  180. package/dist/cjs/test/unit/transactionBuilder/confidentialTransferBuilder.d.ts.map +1 -0
  181. package/dist/cjs/test/unit/transactionBuilder/confidentialTransferBuilder.js +909 -0
  182. package/dist/cjs/test/unit/transactionBuilder/confidentialTransferV1.d.ts +2 -0
  183. package/dist/cjs/test/unit/transactionBuilder/confidentialTransferV1.d.ts.map +1 -0
  184. package/dist/cjs/test/unit/transactionBuilder/confidentialTransferV1.js +144 -0
  185. package/dist/cjs/test/unit/transactionBuilder/confidentialTransferV1Ops.d.ts +2 -0
  186. package/dist/cjs/test/unit/transactionBuilder/confidentialTransferV1Ops.d.ts.map +1 -0
  187. package/dist/cjs/test/unit/transactionBuilder/confidentialTransferV1Ops.js +167 -0
  188. package/dist/cjs/test/unit/transactionBuilder/customInstructionBuilder.d.ts.map +1 -0
  189. package/dist/cjs/test/unit/transactionBuilder/customInstructionBuilder.js +413 -0
  190. package/dist/cjs/test/unit/transactionBuilder/stakingActivateBuilder.d.ts.map +1 -0
  191. package/dist/cjs/test/unit/transactionBuilder/stakingActivateBuilder.js +430 -0
  192. package/dist/cjs/test/unit/transactionBuilder/stakingAuthorizeBuilder.d.ts.map +1 -0
  193. package/dist/cjs/test/unit/transactionBuilder/stakingAuthorizeBuilder.js +157 -0
  194. package/dist/cjs/test/unit/transactionBuilder/stakingDeactivateBuilder.d.ts.map +1 -0
  195. package/dist/cjs/test/unit/transactionBuilder/stakingDeactivateBuilder.js +384 -0
  196. package/dist/cjs/test/unit/transactionBuilder/stakingDelegateBuilder.d.ts.map +1 -0
  197. package/dist/cjs/test/unit/transactionBuilder/stakingDelegateBuilder.js +224 -0
  198. package/dist/cjs/test/unit/transactionBuilder/stakingRawMsgAuthorizeBuilder.d.ts.map +1 -0
  199. package/dist/cjs/test/unit/transactionBuilder/stakingRawMsgAuthorizeBuilder.js +259 -0
  200. package/dist/cjs/test/unit/transactionBuilder/tokenTransferBuilder.d.ts.map +1 -0
  201. package/dist/cjs/test/unit/transactionBuilder/tokenTransferBuilder.js +926 -0
  202. package/dist/cjs/test/unit/transactionBuilder/transactionBuilder.d.ts.map +1 -0
  203. package/dist/cjs/test/unit/transactionBuilder/transactionBuilder.js +495 -0
  204. package/dist/cjs/test/unit/transactionBuilder/transferBuilder.d.ts.map +1 -0
  205. package/dist/cjs/test/unit/transactionBuilder/transferBuilder.js +302 -0
  206. package/dist/cjs/test/unit/transactionBuilder/transferBuilderV2.d.ts.map +1 -0
  207. package/dist/cjs/test/unit/transactionBuilder/transferBuilderV2.js +910 -0
  208. package/dist/cjs/test/unit/transactionBuilder/walletInitBuilder.d.ts.map +1 -0
  209. package/dist/cjs/test/unit/transactionBuilder/walletInitBuilder.js +259 -0
  210. package/dist/{test → cjs/test}/unit/utils.d.ts.map +1 -1
  211. package/dist/cjs/test/unit/utils.js +628 -0
  212. package/dist/cjs/test/unit/versionedTransaction.d.ts.map +1 -0
  213. package/dist/cjs/test/unit/versionedTransaction.js +207 -0
  214. package/dist/cjs/tsconfig.tsbuildinfo +1 -0
  215. package/dist/esm/bigint-buffer-guard.d.ts +1 -0
  216. package/dist/esm/index.d.ts +7 -0
  217. package/dist/esm/index.js +7 -0
  218. package/dist/esm/lib/ataInitializationBuilder.d.ts +58 -0
  219. package/dist/esm/lib/ataInitializationBuilder.d.ts.map +1 -0
  220. package/dist/esm/lib/ataInitializationBuilder.js +191 -0
  221. package/dist/esm/lib/closeAtaBuilder.d.ts +55 -0
  222. package/dist/esm/lib/closeAtaBuilder.d.ts.map +1 -0
  223. package/dist/esm/lib/closeAtaBuilder.js +155 -0
  224. package/dist/esm/lib/confidentialTransferBuilder.d.ts +128 -0
  225. package/dist/esm/lib/confidentialTransferBuilder.d.ts.map +1 -0
  226. package/dist/esm/lib/confidentialTransferBuilder.js +304 -0
  227. package/dist/esm/lib/constants.d.ts +227 -0
  228. package/dist/esm/lib/constants.d.ts.map +1 -0
  229. package/dist/esm/lib/constants.js +266 -0
  230. package/dist/esm/lib/customInstructionBuilder.d.ts +72 -0
  231. package/dist/esm/lib/customInstructionBuilder.js +282 -0
  232. package/dist/esm/lib/explainTransactionWasm.d.ts +21 -0
  233. package/dist/esm/lib/explainTransactionWasm.d.ts.map +1 -0
  234. package/dist/esm/lib/explainTransactionWasm.js +301 -0
  235. package/dist/esm/lib/iface.d.ts +526 -0
  236. package/dist/esm/lib/iface.d.ts.map +1 -0
  237. package/dist/esm/lib/iface.js +3 -0
  238. package/dist/esm/lib/index.d.ts +27 -0
  239. package/dist/esm/lib/index.d.ts.map +1 -0
  240. package/dist/esm/lib/index.js +27 -0
  241. package/dist/esm/lib/instructionParamsFactory.d.ts +14 -0
  242. package/dist/esm/lib/instructionParamsFactory.d.ts.map +1 -0
  243. package/dist/esm/lib/instructionParamsFactory.js +1212 -0
  244. package/dist/esm/lib/jitoStakePoolOperations.d.ts +113 -0
  245. package/dist/esm/lib/jitoStakePoolOperations.js +189 -0
  246. package/dist/esm/lib/keyPair.d.ts +32 -0
  247. package/dist/esm/lib/keyPair.d.ts.map +1 -0
  248. package/dist/esm/lib/keyPair.js +75 -0
  249. package/dist/esm/lib/messages/index.d.ts +2 -0
  250. package/dist/esm/lib/messages/index.js +2 -0
  251. package/dist/esm/lib/messages/messageBuilderFactory.d.ts +7 -0
  252. package/dist/{src → esm}/lib/messages/messageBuilderFactory.js +5 -9
  253. package/dist/esm/lib/recoverNestedAtaBuilder.d.ts +25 -0
  254. package/dist/esm/lib/recoverNestedAtaBuilder.d.ts.map +1 -0
  255. package/dist/esm/lib/recoverNestedAtaBuilder.js +83 -0
  256. package/dist/esm/lib/scaledUiAmount.d.ts +30 -0
  257. package/dist/esm/lib/scaledUiAmount.d.ts.map +1 -0
  258. package/dist/esm/lib/scaledUiAmount.js +108 -0
  259. package/dist/esm/lib/serialization/codecs/v1/config.d.ts +21 -0
  260. package/dist/esm/lib/serialization/codecs/v1/config.d.ts.map +1 -0
  261. package/dist/esm/lib/serialization/codecs/v1/config.js +30 -0
  262. package/dist/esm/lib/serialization/codecs/v1/instruction.d.ts +14 -0
  263. package/dist/esm/lib/serialization/codecs/v1/instruction.d.ts.map +1 -0
  264. package/dist/esm/lib/serialization/codecs/v1/instruction.js +29 -0
  265. package/dist/esm/lib/serialization/codecs/v1/message.d.ts +27 -0
  266. package/dist/esm/lib/serialization/codecs/v1/message.d.ts.map +1 -0
  267. package/dist/esm/lib/serialization/codecs/v1/message.js +188 -0
  268. package/dist/esm/lib/serialization/compileTransactionMessage.d.ts +30 -0
  269. package/dist/esm/lib/serialization/compileTransactionMessage.d.ts.map +1 -0
  270. package/dist/esm/lib/serialization/compileTransactionMessage.js +202 -0
  271. package/dist/esm/lib/serialization/parseWireTransaction.d.ts +9 -0
  272. package/dist/esm/lib/serialization/parseWireTransaction.d.ts.map +1 -0
  273. package/dist/esm/lib/serialization/parseWireTransaction.js +50 -0
  274. package/dist/esm/lib/serialization/wire-transaction.d.ts +14 -0
  275. package/dist/esm/lib/serialization/wire-transaction.d.ts.map +1 -0
  276. package/dist/esm/lib/serialization/wire-transaction.js +48 -0
  277. package/dist/esm/lib/solInstructionFactory.d.ts +10 -0
  278. package/dist/esm/lib/solInstructionFactory.d.ts.map +1 -0
  279. package/dist/esm/lib/solInstructionFactory.js +1088 -0
  280. package/dist/esm/lib/stakingActivateBuilder.d.ts +59 -0
  281. package/dist/{src → esm}/lib/stakingActivateBuilder.d.ts.map +1 -1
  282. package/dist/esm/lib/stakingActivateBuilder.js +122 -0
  283. package/dist/esm/lib/stakingAuthorizeBuilder.d.ts +43 -0
  284. package/dist/esm/lib/stakingAuthorizeBuilder.js +82 -0
  285. package/dist/esm/lib/stakingDeactivateBuilder.d.ts +81 -0
  286. package/dist/{src → esm}/lib/stakingDeactivateBuilder.d.ts.map +1 -1
  287. package/dist/esm/lib/stakingDeactivateBuilder.js +207 -0
  288. package/dist/esm/lib/stakingDelegateBuilder.d.ts +42 -0
  289. package/dist/{src → esm}/lib/stakingDelegateBuilder.d.ts.map +1 -1
  290. package/dist/esm/lib/stakingDelegateBuilder.js +119 -0
  291. package/dist/esm/lib/stakingRawMsgAuthorizeBuilder.d.ts +33 -0
  292. package/dist/esm/lib/stakingRawMsgAuthorizeBuilder.js +103 -0
  293. package/dist/esm/lib/stakingWithdrawBuilder.d.ts +31 -0
  294. package/dist/{src → esm}/lib/stakingWithdrawBuilder.d.ts.map +1 -1
  295. package/dist/esm/lib/stakingWithdrawBuilder.js +80 -0
  296. package/dist/esm/lib/token2022Resolve.d.ts +106 -0
  297. package/dist/esm/lib/token2022Resolve.d.ts.map +1 -0
  298. package/dist/esm/lib/token2022Resolve.js +194 -0
  299. package/dist/esm/lib/tokenExtensions.d.ts +26 -0
  300. package/dist/esm/lib/tokenExtensions.d.ts.map +1 -0
  301. package/dist/esm/lib/tokenExtensions.js +99 -0
  302. package/dist/esm/lib/tokenTransferBuilder.d.ts +67 -0
  303. package/dist/esm/lib/tokenTransferBuilder.d.ts.map +1 -0
  304. package/dist/esm/lib/tokenTransferBuilder.js +230 -0
  305. package/dist/esm/lib/transaction.d.ts +125 -0
  306. package/dist/esm/lib/transaction.d.ts.map +1 -0
  307. package/dist/esm/lib/transaction.js +654 -0
  308. package/dist/esm/lib/transactionBuilder.d.ts +136 -0
  309. package/dist/esm/lib/transactionBuilder.d.ts.map +1 -0
  310. package/dist/esm/lib/transactionBuilder.js +381 -0
  311. package/dist/esm/lib/transactionBuilderFactory.d.ts +129 -0
  312. package/dist/esm/lib/transactionBuilderFactory.d.ts.map +1 -0
  313. package/dist/esm/lib/transactionBuilderFactory.js +218 -0
  314. package/dist/esm/lib/transferBuilder.d.ts +26 -0
  315. package/dist/{src → esm}/lib/transferBuilder.d.ts.map +1 -1
  316. package/dist/esm/lib/transferBuilder.js +74 -0
  317. package/dist/esm/lib/transferBuilderV2.d.ts +69 -0
  318. package/dist/esm/lib/transferBuilderV2.d.ts.map +1 -0
  319. package/dist/esm/lib/transferBuilderV2.js +245 -0
  320. package/dist/esm/lib/utils.d.ts +205 -0
  321. package/dist/{src → esm}/lib/utils.d.ts.map +1 -1
  322. package/dist/esm/lib/utils.js +619 -0
  323. package/dist/esm/lib/walletInitializationBuilder.d.ts +26 -0
  324. package/dist/esm/lib/walletInitializationBuilder.js +64 -0
  325. package/dist/esm/register.d.ts +5 -0
  326. package/dist/esm/register.d.ts.map +1 -0
  327. package/dist/esm/register.js +24 -0
  328. package/dist/esm/sol.d.ts +351 -0
  329. package/dist/esm/sol.d.ts.map +1 -0
  330. package/dist/esm/sol.js +1629 -0
  331. package/dist/esm/solToken.d.ts +44 -0
  332. package/dist/esm/solToken.d.ts.map +1 -0
  333. package/dist/esm/solToken.js +75 -0
  334. package/dist/esm/tsol.d.ts +11 -0
  335. package/dist/esm/tsol.js +20 -0
  336. package/package.json +36 -16
  337. package/dist/src/config/token2022StaticConfig.d.ts +0 -3
  338. package/dist/src/config/token2022StaticConfig.d.ts.map +0 -1
  339. package/dist/src/config/token2022StaticConfig.js +0 -50
  340. package/dist/src/lib/ataInitializationBuilder.d.ts.map +0 -1
  341. package/dist/src/lib/ataInitializationBuilder.js +0 -196
  342. package/dist/src/lib/closeAtaBuilder.d.ts +0 -19
  343. package/dist/src/lib/closeAtaBuilder.d.ts.map +0 -1
  344. package/dist/src/lib/closeAtaBuilder.js +0 -69
  345. package/dist/src/lib/constants.d.ts.map +0 -1
  346. package/dist/src/lib/constants.js +0 -171
  347. package/dist/src/lib/customInstructionBuilder.js +0 -289
  348. package/dist/src/lib/iface.d.ts +0 -244
  349. package/dist/src/lib/iface.d.ts.map +0 -1
  350. package/dist/src/lib/iface.js +0 -7
  351. package/dist/src/lib/index.d.ts.map +0 -1
  352. package/dist/src/lib/index.js +0 -77
  353. package/dist/src/lib/instructionParamsFactory.d.ts.map +0 -1
  354. package/dist/src/lib/instructionParamsFactory.js +0 -1036
  355. package/dist/src/lib/jitoStakePoolOperations.js +0 -200
  356. package/dist/src/lib/keyPair.d.ts.map +0 -1
  357. package/dist/src/lib/keyPair.js +0 -63
  358. package/dist/src/lib/solInstructionFactory.d.ts.map +0 -1
  359. package/dist/src/lib/solInstructionFactory.js +0 -572
  360. package/dist/src/lib/stakingActivateBuilder.js +0 -120
  361. package/dist/src/lib/stakingAuthorizeBuilder.js +0 -89
  362. package/dist/src/lib/stakingDeactivateBuilder.js +0 -208
  363. package/dist/src/lib/stakingDelegateBuilder.js +0 -120
  364. package/dist/src/lib/stakingRawMsgAuthorizeBuilder.js +0 -110
  365. package/dist/src/lib/stakingWithdrawBuilder.js +0 -78
  366. package/dist/src/lib/token2022Config.d.ts +0 -44
  367. package/dist/src/lib/token2022Config.d.ts.map +0 -1
  368. package/dist/src/lib/token2022Config.js +0 -27
  369. package/dist/src/lib/tokenTransferBuilder.d.ts.map +0 -1
  370. package/dist/src/lib/tokenTransferBuilder.js +0 -188
  371. package/dist/src/lib/transaction.d.ts.map +0 -1
  372. package/dist/src/lib/transaction.js +0 -595
  373. package/dist/src/lib/transactionBuilder.d.ts.map +0 -1
  374. package/dist/src/lib/transactionBuilder.js +0 -380
  375. package/dist/src/lib/transactionBuilderFactory.d.ts.map +0 -1
  376. package/dist/src/lib/transactionBuilderFactory.js +0 -202
  377. package/dist/src/lib/transferBuilder.js +0 -70
  378. package/dist/src/lib/transferBuilderV2.d.ts +0 -43
  379. package/dist/src/lib/transferBuilderV2.d.ts.map +0 -1
  380. package/dist/src/lib/transferBuilderV2.js +0 -210
  381. package/dist/src/lib/utils.js +0 -589
  382. package/dist/src/lib/walletInitializationBuilder.js +0 -71
  383. package/dist/src/register.d.ts +0 -3
  384. package/dist/src/register.d.ts.map +0 -1
  385. package/dist/src/register.js +0 -15
  386. package/dist/src/sol.d.ts.map +0 -1
  387. package/dist/src/sol.js +0 -1324
  388. package/dist/src/solToken.d.ts.map +0 -1
  389. package/dist/src/solToken.js +0 -69
  390. package/dist/src/tsol.js +0 -24
  391. package/dist/test/fixtures/sol.js +0 -1433
  392. package/dist/test/resources/sol.d.ts.map +0 -1
  393. package/dist/test/resources/sol.js +0 -320
  394. package/dist/test/unit/fixtures/solBackupKey.d.ts.map +0 -1
  395. package/dist/test/unit/fixtures/solBackupKey.js +0 -8
  396. package/dist/test/unit/getBuilderFactory.d.ts.map +0 -1
  397. package/dist/test/unit/getBuilderFactory.js +0 -10
  398. package/dist/test/unit/instructionParamsFactory.d.ts.map +0 -1
  399. package/dist/test/unit/instructionParamsFactory.js +0 -412
  400. package/dist/test/unit/instructionParamsFactory.staking.d.ts.map +0 -1
  401. package/dist/test/unit/instructionParamsFactory.staking.js +0 -1059
  402. package/dist/test/unit/keyPair.js +0 -177
  403. package/dist/test/unit/messages/messageBuilderFactory.d.ts.map +0 -1
  404. package/dist/test/unit/messages/messageBuilderFactory.js +0 -118
  405. package/dist/test/unit/messages/simpleMessageBuilder.d.ts.map +0 -1
  406. package/dist/test/unit/messages/simpleMessageBuilder.js +0 -194
  407. package/dist/test/unit/sol.js +0 -3180
  408. package/dist/test/unit/solInstructionFactory.d.ts.map +0 -1
  409. package/dist/test/unit/solInstructionFactory.js +0 -454
  410. package/dist/test/unit/solToken.d.ts.map +0 -1
  411. package/dist/test/unit/solToken.js +0 -31
  412. package/dist/test/unit/transaction.d.ts.map +0 -1
  413. package/dist/test/unit/transaction.js +0 -983
  414. package/dist/test/unit/transactionBuilder/StakingWithdrawBuilder.d.ts.map +0 -1
  415. package/dist/test/unit/transactionBuilder/StakingWithdrawBuilder.js +0 -202
  416. package/dist/test/unit/transactionBuilder/ataInitBuilder.d.ts.map +0 -1
  417. package/dist/test/unit/transactionBuilder/ataInitBuilder.js +0 -471
  418. package/dist/test/unit/transactionBuilder/customInstructionBuilder.d.ts.map +0 -1
  419. package/dist/test/unit/transactionBuilder/customInstructionBuilder.js +0 -413
  420. package/dist/test/unit/transactionBuilder/stakingActivateBuilder.d.ts.map +0 -1
  421. package/dist/test/unit/transactionBuilder/stakingActivateBuilder.js +0 -430
  422. package/dist/test/unit/transactionBuilder/stakingAuthorizeBuilder.d.ts.map +0 -1
  423. package/dist/test/unit/transactionBuilder/stakingAuthorizeBuilder.js +0 -157
  424. package/dist/test/unit/transactionBuilder/stakingDeactivateBuilder.d.ts.map +0 -1
  425. package/dist/test/unit/transactionBuilder/stakingDeactivateBuilder.js +0 -384
  426. package/dist/test/unit/transactionBuilder/stakingDelegateBuilder.d.ts.map +0 -1
  427. package/dist/test/unit/transactionBuilder/stakingDelegateBuilder.js +0 -224
  428. package/dist/test/unit/transactionBuilder/stakingRawMsgAuthorizeBuilder.d.ts.map +0 -1
  429. package/dist/test/unit/transactionBuilder/stakingRawMsgAuthorizeBuilder.js +0 -259
  430. package/dist/test/unit/transactionBuilder/tokenTransferBuilder.d.ts.map +0 -1
  431. package/dist/test/unit/transactionBuilder/tokenTransferBuilder.js +0 -787
  432. package/dist/test/unit/transactionBuilder/transactionBuilder.d.ts.map +0 -1
  433. package/dist/test/unit/transactionBuilder/transactionBuilder.js +0 -495
  434. package/dist/test/unit/transactionBuilder/transferBuilder.d.ts.map +0 -1
  435. package/dist/test/unit/transactionBuilder/transferBuilder.js +0 -286
  436. package/dist/test/unit/transactionBuilder/transferBuilderV2.d.ts.map +0 -1
  437. package/dist/test/unit/transactionBuilder/transferBuilderV2.js +0 -862
  438. package/dist/test/unit/transactionBuilder/walletInitBuilder.d.ts.map +0 -1
  439. package/dist/test/unit/transactionBuilder/walletInitBuilder.js +0 -259
  440. package/dist/test/unit/utils.js +0 -517
  441. package/dist/test/unit/versionedTransaction.d.ts.map +0 -1
  442. package/dist/test/unit/versionedTransaction.js +0 -207
  443. package/dist/tsconfig.tsbuildinfo +0 -1
  444. /package/dist/{src → cjs/src}/bigint-buffer-guard.d.ts +0 -0
  445. /package/dist/{src → cjs/src}/index.d.ts +0 -0
  446. /package/dist/{src → cjs/src}/lib/customInstructionBuilder.d.ts +0 -0
  447. /package/dist/{src → cjs/src}/lib/jitoStakePoolOperations.d.ts +0 -0
  448. /package/dist/{src → cjs/src}/lib/messages/index.d.ts +0 -0
  449. /package/dist/{src → cjs/src}/lib/messages/messageBuilderFactory.d.ts +0 -0
  450. /package/dist/{src → cjs/src}/lib/stakingActivateBuilder.d.ts +0 -0
  451. /package/dist/{src → cjs/src}/lib/stakingAuthorizeBuilder.d.ts +0 -0
  452. /package/dist/{src → cjs/src}/lib/stakingDeactivateBuilder.d.ts +0 -0
  453. /package/dist/{src → cjs/src}/lib/stakingDelegateBuilder.d.ts +0 -0
  454. /package/dist/{src → cjs/src}/lib/stakingRawMsgAuthorizeBuilder.d.ts +0 -0
  455. /package/dist/{src → cjs/src}/lib/stakingWithdrawBuilder.d.ts +0 -0
  456. /package/dist/{src → cjs/src}/lib/transferBuilder.d.ts +0 -0
  457. /package/dist/{src → cjs/src}/lib/walletInitializationBuilder.d.ts +0 -0
  458. /package/dist/{src → cjs/src}/tsol.d.ts +0 -0
  459. /package/dist/{test → cjs/test}/fixtures/sol.d.ts +0 -0
  460. /package/dist/{test → cjs/test}/unit/fixtures/solBackupKey.d.ts +0 -0
  461. /package/dist/{test → cjs/test}/unit/getBuilderFactory.d.ts +0 -0
  462. /package/dist/{test → cjs/test}/unit/instructionParamsFactory.d.ts +0 -0
  463. /package/dist/{test → cjs/test}/unit/instructionParamsFactory.staking.d.ts +0 -0
  464. /package/dist/{test → cjs/test}/unit/keyPair.d.ts +0 -0
  465. /package/dist/{test → cjs/test}/unit/messages/messageBuilderFactory.d.ts +0 -0
  466. /package/dist/{test → cjs/test}/unit/messages/simpleMessageBuilder.d.ts +0 -0
  467. /package/dist/{test → cjs/test}/unit/sol.d.ts +0 -0
  468. /package/dist/{test → cjs/test}/unit/solInstructionFactory.d.ts +0 -0
  469. /package/dist/{test → cjs/test}/unit/solToken.d.ts +0 -0
  470. /package/dist/{test → cjs/test}/unit/transaction.d.ts +0 -0
  471. /package/dist/{test → cjs/test}/unit/transactionBuilder/StakingWithdrawBuilder.d.ts +0 -0
  472. /package/dist/{test → cjs/test}/unit/transactionBuilder/ataInitBuilder.d.ts +0 -0
  473. /package/dist/{test → cjs/test}/unit/transactionBuilder/customInstructionBuilder.d.ts +0 -0
  474. /package/dist/{test → cjs/test}/unit/transactionBuilder/stakingActivateBuilder.d.ts +0 -0
  475. /package/dist/{test → cjs/test}/unit/transactionBuilder/stakingAuthorizeBuilder.d.ts +0 -0
  476. /package/dist/{test → cjs/test}/unit/transactionBuilder/stakingDeactivateBuilder.d.ts +0 -0
  477. /package/dist/{test → cjs/test}/unit/transactionBuilder/stakingDelegateBuilder.d.ts +0 -0
  478. /package/dist/{test → cjs/test}/unit/transactionBuilder/stakingRawMsgAuthorizeBuilder.d.ts +0 -0
  479. /package/dist/{test → cjs/test}/unit/transactionBuilder/tokenTransferBuilder.d.ts +0 -0
  480. /package/dist/{test → cjs/test}/unit/transactionBuilder/transactionBuilder.d.ts +0 -0
  481. /package/dist/{test → cjs/test}/unit/transactionBuilder/transferBuilder.d.ts +0 -0
  482. /package/dist/{test → cjs/test}/unit/transactionBuilder/transferBuilderV2.d.ts +0 -0
  483. /package/dist/{test → cjs/test}/unit/transactionBuilder/walletInitBuilder.d.ts +0 -0
  484. /package/dist/{test → cjs/test}/unit/utils.d.ts +0 -0
  485. /package/dist/{test → cjs/test}/unit/versionedTransaction.d.ts +0 -0
  486. /package/dist/{src → esm}/bigint-buffer-guard.d.ts.map +0 -0
  487. /package/dist/{src → esm}/bigint-buffer-guard.js +0 -0
  488. /package/dist/{src → esm}/index.d.ts.map +0 -0
  489. /package/dist/{src → esm}/lib/customInstructionBuilder.d.ts.map +0 -0
  490. /package/dist/{src → esm}/lib/jitoStakePoolOperations.d.ts.map +0 -0
  491. /package/dist/{src → esm}/lib/messages/index.d.ts.map +0 -0
  492. /package/dist/{src → esm}/lib/messages/messageBuilderFactory.d.ts.map +0 -0
  493. /package/dist/{src → esm}/lib/stakingAuthorizeBuilder.d.ts.map +0 -0
  494. /package/dist/{src → esm}/lib/stakingRawMsgAuthorizeBuilder.d.ts.map +0 -0
  495. /package/dist/{src → esm}/lib/walletInitializationBuilder.d.ts.map +0 -0
  496. /package/dist/{src → esm}/tsol.d.ts.map +0 -0
@@ -0,0 +1,80 @@
1
+ import { BuildTransactionError, TransactionType } from '@bitgo-beta/sdk-core';
2
+ import { TransactionBuilder } from './transactionBuilder';
3
+ import { InstructionBuilderTypes } from './constants';
4
+ import assert from 'assert';
5
+ import { isValidStakingAmount, validateAddress } from './utils';
6
+ export class StakingWithdrawBuilder extends TransactionBuilder {
7
+ constructor(_coinConfig) {
8
+ super(_coinConfig);
9
+ }
10
+ get transactionType() {
11
+ return TransactionType.StakingWithdraw;
12
+ }
13
+ /** @inheritdoc */
14
+ initBuilder(tx) {
15
+ super.initBuilder(tx);
16
+ for (const instruction of this._instructionsData) {
17
+ if (instruction.type === InstructionBuilderTypes.StakingWithdraw) {
18
+ const withdrawInstruction = instruction;
19
+ this.sender(withdrawInstruction.params.fromAddress);
20
+ this.stakingAddress(withdrawInstruction.params.stakingAddress);
21
+ this.amount(withdrawInstruction.params.amount);
22
+ }
23
+ }
24
+ }
25
+ /**
26
+ * The address of the staking account.
27
+ *
28
+ * @param {string} stakingAddress public address of the staking account
29
+ * @returns {StakeBuilder} This staking builder.
30
+ *
31
+ */
32
+ stakingAddress(stakingAddress) {
33
+ validateAddress(stakingAddress, 'stakingAddress');
34
+ this._stakingAddress = stakingAddress;
35
+ return this;
36
+ }
37
+ /**
38
+ * The amount to withdraw expressed in Lamports, 1 SOL = 1_000_000_000 lamports
39
+ *
40
+ * @param {string} amount expressed in Lamports
41
+ * @returns {StakeBuilder} This staking builder.
42
+ *
43
+ */
44
+ amount(amount) {
45
+ if (!isValidStakingAmount(amount)) {
46
+ throw new BuildTransactionError('Value cannot be zero or less');
47
+ }
48
+ this._amount = amount;
49
+ return this;
50
+ }
51
+ /** @inheritdoc */
52
+ async buildImplementation() {
53
+ assert(this._sender, 'Sender must be set before building the transaction');
54
+ assert(this._stakingAddress, 'Staking address must be set before building the transaction');
55
+ assert(this._amount, 'Amount must be set before building the transaction');
56
+ if (this._sender === this._stakingAddress) {
57
+ throw new BuildTransactionError('Sender address cannot be the same as the Staking address');
58
+ }
59
+ const stakingWithdrawData = {
60
+ type: InstructionBuilderTypes.StakingWithdraw,
61
+ params: {
62
+ fromAddress: this._sender,
63
+ stakingAddress: this._stakingAddress,
64
+ amount: this._amount,
65
+ },
66
+ };
67
+ this._instructionsData =
68
+ this._priorityFee && this._priorityFee !== Number(0)
69
+ ? [
70
+ {
71
+ type: InstructionBuilderTypes.SetPriorityFee,
72
+ params: { fee: this._priorityFee },
73
+ },
74
+ stakingWithdrawData,
75
+ ]
76
+ : [stakingWithdrawData];
77
+ return await super.buildImplementation();
78
+ }
79
+ }
80
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Rha2luZ1dpdGhkcmF3QnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvc3Rha2luZ1dpdGhkcmF3QnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsZUFBZSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFOUUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDMUQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRXRELE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUU1QixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsZUFBZSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBRWhFLE1BQU0sT0FBTyxzQkFBdUIsU0FBUSxrQkFBa0I7SUFJNUQsWUFBWSxXQUFpQztRQUMzQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDckIsQ0FBQztJQUVELElBQWMsZUFBZTtRQUMzQixPQUFPLGVBQWUsQ0FBQyxlQUFlLENBQUM7SUFDekMsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixXQUFXLENBQUMsRUFBZTtRQUN6QixLQUFLLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3RCLEtBQUssTUFBTSxXQUFXLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDakQsSUFBSSxXQUFXLENBQUMsSUFBSSxLQUFLLHVCQUF1QixDQUFDLGVBQWUsRUFBRSxDQUFDO2dCQUNqRSxNQUFNLG1CQUFtQixHQUFvQixXQUFXLENBQUM7Z0JBQ3pELElBQUksQ0FBQyxNQUFNLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUNwRCxJQUFJLENBQUMsY0FBYyxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztnQkFDL0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDakQsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsY0FBYyxDQUFDLGNBQXNCO1FBQ25DLGVBQWUsQ0FBQyxjQUFjLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUNsRCxJQUFJLENBQUMsZUFBZSxHQUFHLGNBQWMsQ0FBQztRQUN0QyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxNQUFNLENBQUMsTUFBYztRQUNuQixJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUNsQyxNQUFNLElBQUkscUJBQXFCLENBQUMsOEJBQThCLENBQUMsQ0FBQztRQUNsRSxDQUFDO1FBQ0QsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7UUFDdEIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsa0JBQWtCO0lBQ1IsS0FBSyxDQUFDLG1CQUFtQjtRQUNqQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxvREFBb0QsQ0FBQyxDQUFDO1FBQzNFLE1BQU0sQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLDZEQUE2RCxDQUFDLENBQUM7UUFDNUYsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsb0RBQW9ELENBQUMsQ0FBQztRQUUzRSxJQUFJLElBQUksQ0FBQyxPQUFPLEtBQUssSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQzFDLE1BQU0sSUFBSSxxQkFBcUIsQ0FBQywwREFBMEQsQ0FBQyxDQUFDO1FBQzlGLENBQUM7UUFFRCxNQUFNLG1CQUFtQixHQUFvQjtZQUMzQyxJQUFJLEVBQUUsdUJBQXVCLENBQUMsZUFBZTtZQUM3QyxNQUFNLEVBQUU7Z0JBQ04sV0FBVyxFQUFFLElBQUksQ0FBQyxPQUFPO2dCQUN6QixjQUFjLEVBQUUsSUFBSSxDQUFDLGVBQWU7Z0JBQ3BDLE1BQU0sRUFBRSxJQUFJLENBQUMsT0FBTzthQUNyQjtTQUNGLENBQUM7UUFDRixJQUFJLENBQUMsaUJBQWlCO1lBQ3BCLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDO2dCQUNsRCxDQUFDLENBQUM7b0JBQ0U7d0JBQ0UsSUFBSSxFQUFFLHVCQUF1QixDQUFDLGNBQWM7d0JBQzVDLE1BQU0sRUFBRSxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFO3FCQUNuQztvQkFDRCxtQkFBbUI7aUJBQ3BCO2dCQUNILENBQUMsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFFNUIsT0FBTyxNQUFNLEtBQUssQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0lBQzNDLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7IEJ1aWxkVHJhbnNhY3Rpb25FcnJvciwgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb24gfSBmcm9tICcuL3RyYW5zYWN0aW9uJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uQnVpbGRlciB9IGZyb20gJy4vdHJhbnNhY3Rpb25CdWlsZGVyJztcbmltcG9ydCB7IEluc3RydWN0aW9uQnVpbGRlclR5cGVzIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuXG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgeyBTdGFraW5nV2l0aGRyYXcgfSBmcm9tICcuL2lmYWNlJztcbmltcG9ydCB7IGlzVmFsaWRTdGFraW5nQW1vdW50LCB2YWxpZGF0ZUFkZHJlc3MgfSBmcm9tICcuL3V0aWxzJztcblxuZXhwb3J0IGNsYXNzIFN0YWtpbmdXaXRoZHJhd0J1aWxkZXIgZXh0ZW5kcyBUcmFuc2FjdGlvbkJ1aWxkZXIge1xuICBwcm90ZWN0ZWQgX3N0YWtpbmdBZGRyZXNzOiBzdHJpbmc7XG4gIHByb3RlY3RlZCBfYW1vdW50OiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoX2NvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoX2NvaW5Db25maWcpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldCB0cmFuc2FjdGlvblR5cGUoKTogVHJhbnNhY3Rpb25UeXBlIHtcbiAgICByZXR1cm4gVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdXaXRoZHJhdztcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBpbml0QnVpbGRlcih0eDogVHJhbnNhY3Rpb24pOiB2b2lkIHtcbiAgICBzdXBlci5pbml0QnVpbGRlcih0eCk7XG4gICAgZm9yIChjb25zdCBpbnN0cnVjdGlvbiBvZiB0aGlzLl9pbnN0cnVjdGlvbnNEYXRhKSB7XG4gICAgICBpZiAoaW5zdHJ1Y3Rpb24udHlwZSA9PT0gSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuU3Rha2luZ1dpdGhkcmF3KSB7XG4gICAgICAgIGNvbnN0IHdpdGhkcmF3SW5zdHJ1Y3Rpb246IFN0YWtpbmdXaXRoZHJhdyA9IGluc3RydWN0aW9uO1xuICAgICAgICB0aGlzLnNlbmRlcih3aXRoZHJhd0luc3RydWN0aW9uLnBhcmFtcy5mcm9tQWRkcmVzcyk7XG4gICAgICAgIHRoaXMuc3Rha2luZ0FkZHJlc3Mod2l0aGRyYXdJbnN0cnVjdGlvbi5wYXJhbXMuc3Rha2luZ0FkZHJlc3MpO1xuICAgICAgICB0aGlzLmFtb3VudCh3aXRoZHJhd0luc3RydWN0aW9uLnBhcmFtcy5hbW91bnQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgYWRkcmVzcyBvZiB0aGUgc3Rha2luZyBhY2NvdW50LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3Rha2luZ0FkZHJlc3MgcHVibGljIGFkZHJlc3Mgb2YgdGhlIHN0YWtpbmcgYWNjb3VudFxuICAgKiBAcmV0dXJucyB7U3Rha2VCdWlsZGVyfSBUaGlzIHN0YWtpbmcgYnVpbGRlci5cbiAgICpcbiAgICovXG4gIHN0YWtpbmdBZGRyZXNzKHN0YWtpbmdBZGRyZXNzOiBzdHJpbmcpOiB0aGlzIHtcbiAgICB2YWxpZGF0ZUFkZHJlc3Moc3Rha2luZ0FkZHJlc3MsICdzdGFraW5nQWRkcmVzcycpO1xuICAgIHRoaXMuX3N0YWtpbmdBZGRyZXNzID0gc3Rha2luZ0FkZHJlc3M7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGFtb3VudCB0byB3aXRoZHJhdyBleHByZXNzZWQgaW4gTGFtcG9ydHMsIDEgU09MID0gMV8wMDBfMDAwXzAwMCBsYW1wb3J0c1xuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYW1vdW50IGV4cHJlc3NlZCBpbiBMYW1wb3J0c1xuICAgKiBAcmV0dXJucyB7U3Rha2VCdWlsZGVyfSBUaGlzIHN0YWtpbmcgYnVpbGRlci5cbiAgICpcbiAgICovXG4gIGFtb3VudChhbW91bnQ6IHN0cmluZyk6IHRoaXMge1xuICAgIGlmICghaXNWYWxpZFN0YWtpbmdBbW91bnQoYW1vdW50KSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignVmFsdWUgY2Fubm90IGJlIHplcm8gb3IgbGVzcycpO1xuICAgIH1cbiAgICB0aGlzLl9hbW91bnQgPSBhbW91bnQ7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGJ1aWxkSW1wbGVtZW50YXRpb24oKTogUHJvbWlzZTxUcmFuc2FjdGlvbj4ge1xuICAgIGFzc2VydCh0aGlzLl9zZW5kZXIsICdTZW5kZXIgbXVzdCBiZSBzZXQgYmVmb3JlIGJ1aWxkaW5nIHRoZSB0cmFuc2FjdGlvbicpO1xuICAgIGFzc2VydCh0aGlzLl9zdGFraW5nQWRkcmVzcywgJ1N0YWtpbmcgYWRkcmVzcyBtdXN0IGJlIHNldCBiZWZvcmUgYnVpbGRpbmcgdGhlIHRyYW5zYWN0aW9uJyk7XG4gICAgYXNzZXJ0KHRoaXMuX2Ftb3VudCwgJ0Ftb3VudCBtdXN0IGJlIHNldCBiZWZvcmUgYnVpbGRpbmcgdGhlIHRyYW5zYWN0aW9uJyk7XG5cbiAgICBpZiAodGhpcy5fc2VuZGVyID09PSB0aGlzLl9zdGFraW5nQWRkcmVzcykge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignU2VuZGVyIGFkZHJlc3MgY2Fubm90IGJlIHRoZSBzYW1lIGFzIHRoZSBTdGFraW5nIGFkZHJlc3MnKTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGFraW5nV2l0aGRyYXdEYXRhOiBTdGFraW5nV2l0aGRyYXcgPSB7XG4gICAgICB0eXBlOiBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5TdGFraW5nV2l0aGRyYXcsXG4gICAgICBwYXJhbXM6IHtcbiAgICAgICAgZnJvbUFkZHJlc3M6IHRoaXMuX3NlbmRlcixcbiAgICAgICAgc3Rha2luZ0FkZHJlc3M6IHRoaXMuX3N0YWtpbmdBZGRyZXNzLFxuICAgICAgICBhbW91bnQ6IHRoaXMuX2Ftb3VudCxcbiAgICAgIH0sXG4gICAgfTtcbiAgICB0aGlzLl9pbnN0cnVjdGlvbnNEYXRhID1cbiAgICAgIHRoaXMuX3ByaW9yaXR5RmVlICYmIHRoaXMuX3ByaW9yaXR5RmVlICE9PSBOdW1iZXIoMClcbiAgICAgICAgPyBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHR5cGU6IEluc3RydWN0aW9uQnVpbGRlclR5cGVzLlNldFByaW9yaXR5RmVlLFxuICAgICAgICAgICAgICBwYXJhbXM6IHsgZmVlOiB0aGlzLl9wcmlvcml0eUZlZSB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHN0YWtpbmdXaXRoZHJhd0RhdGEsXG4gICAgICAgICAgXVxuICAgICAgICA6IFtzdGFraW5nV2l0aGRyYXdEYXRhXTtcblxuICAgIHJldHVybiBhd2FpdCBzdXBlci5idWlsZEltcGxlbWVudGF0aW9uKCk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,106 @@
1
+ /**
2
+ * @prettier
3
+ *
4
+ * Reusable Token-2022 resolution logic (Transfer Hook extra accounts and sRFC-37
5
+ * Token ACL permissionless thaw), decoupled from the `Sol` coin class so any caller
6
+ * with its own account-fetcher (e.g. wallet-platform reading chain state via IMS RPC)
7
+ * can resolve these dependencies offline of the SDK's node transport.
8
+ *
9
+ * The resolution functions take a `Connection` (only `getAccountInfo` is required);
10
+ * {@link buildSolAccountConnection} adapts a plain {@link SolAccountFetcher} into the
11
+ * shape `@solana/spl-token`'s transfer-hook helpers expect.
12
+ */
13
+ import { AccountInfo, Connection } from '@solana/web3.js';
14
+ import { ExtraAccountMeta } from './iface';
15
+ /**
16
+ * A minimal account-fetcher: given a base58 address, return its on-chain
17
+ * {@link AccountInfo} (with `data` already decoded into a `Buffer`) or `null`
18
+ * when the account does not exist. Callers supply their own transport (SDK node
19
+ * request, wallet-platform IMS RPC, a full `Connection`, etc.).
20
+ */
21
+ export type SolAccountFetcher = (address: string) => Promise<AccountInfo<Buffer> | null>;
22
+ /**
23
+ * Result of resolving the sRFC-37 Token ACL permissionless thaw for a mint / token account.
24
+ *
25
+ * When `applicable` is false (the mint has no Token ACL MintConfig, or permissionless thaw is
26
+ * disabled) all other fields are omitted and the caller should not emit a thaw instruction.
27
+ * When `applicable` is true, the fields are ready to thread into the token-transfer builder via
28
+ * `permissionlessThaw(...)`.
29
+ */
30
+ export interface ResolvePermissionlessThawResult {
31
+ applicable: boolean;
32
+ gatingProgram?: string;
33
+ flagAccount?: string;
34
+ mintConfig?: string;
35
+ tokenProgram?: string;
36
+ systemProgram?: string;
37
+ extraAccounts?: ExtraAccountMeta[];
38
+ }
39
+ /**
40
+ * Build a minimal `Connection`-like shim backed by a {@link SolAccountFetcher}.
41
+ *
42
+ * `@solana/spl-token`'s transfer-hook resolution helpers only require
43
+ * `getAccountInfo(publicKey)` returning an `AccountInfo<Buffer>`. This adapts a
44
+ * plain address-based fetcher to that shape so any transport can drive the
45
+ * resolution below without opening a dedicated RPC connection.
46
+ *
47
+ * @param {SolAccountFetcher} fetch - fetcher returning decoded account info by address
48
+ * @returns {Connection} a shim exposing `getAccountInfo`, cast to `Connection`
49
+ */
50
+ export declare function buildSolAccountConnection(fetch: SolAccountFetcher): Connection;
51
+ /**
52
+ * Resolve the Token-2022 Transfer Hook extra accounts for a specific transfer.
53
+ *
54
+ * This is generic: it works for any Token-2022 mint by reading the mint's
55
+ * TransferHook extension and the hook program's ExtraAccountMetaList live from
56
+ * the node, then resolving each extra account (including seed-derived PDAs) via
57
+ * the standard `spl-transfer-hook-interface` helpers. The returned metas are in
58
+ * the exact order the hook requires and are suitable for
59
+ * `TokenTransfer.params.transferHookAccounts`.
60
+ *
61
+ * When the mint has no Transfer Hook, this returns an empty array and callers can
62
+ * omit the param.
63
+ *
64
+ * @param {Connection} connection - a `Connection` (or shim) exposing `getAccountInfo`
65
+ * @param params - the transfer parameters
66
+ * @param {string} params.mint - the Token-2022 mint address
67
+ * @param {string} params.source - the source token account (sender ATA)
68
+ * @param {string} params.destination - the destination token account (recipient ATA)
69
+ * @param {string} params.owner - the source account owner / transfer authority
70
+ * @param {string} params.amount - the raw transfer amount in base units
71
+ * @returns {Promise<ExtraAccountMeta[]>} ordered extra account metas, or [] when no hook
72
+ */
73
+ export declare function resolveTransferHookAccounts(connection: Connection, params: {
74
+ mint: string;
75
+ source: string;
76
+ destination: string;
77
+ owner: string;
78
+ amount: string;
79
+ }): Promise<ExtraAccountMeta[]>;
80
+ /**
81
+ * Resolve the sRFC-37 Token ACL permissionless-thaw dependencies for a token account.
82
+ *
83
+ * This is generic: it works for ANY allowlist/blocklist (DefaultAccountState) Token-2022 mint
84
+ * gated by the Token ACL program — no issuer is hardcoded. It reads the mint's MintConfig PDA
85
+ * live from the node, and only when permissionless thaw is enabled does it derive the flag /
86
+ * mint-config / thaw-extra-metas PDAs and resolve the gating program's extra account metas (in
87
+ * the exact order the gating program requires, mirroring `resolveExtraMetas`).
88
+ *
89
+ * When the mint is not a Token ACL mint, or permissionless thaw is disabled, this returns
90
+ * `{ applicable: false }` and callers skip the thaw.
91
+ *
92
+ * @param {Connection} connection - a `Connection` (or shim) exposing `getAccountInfo`
93
+ * @param params - the thaw parameters
94
+ * @param {string} params.mint - the Token-2022 mint address
95
+ * @param {string} params.tokenAccount - the token account (ATA) to thaw
96
+ * @param {string} params.tokenAccountOwner - the owner of the token account
97
+ * @param {string} params.authority - the signer invoking the thaw (fee payer / authority)
98
+ * @returns {Promise<ResolvePermissionlessThawResult>} the resolved thaw params, or `{ applicable: false }`
99
+ */
100
+ export declare function resolvePermissionlessThaw(connection: Connection, params: {
101
+ mint: string;
102
+ tokenAccount: string;
103
+ tokenAccountOwner: string;
104
+ authority: string;
105
+ }): Promise<ResolvePermissionlessThawResult>;
106
+ //# sourceMappingURL=token2022Resolve.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token2022Resolve.d.ts","sourceRoot":"","sources":["../../../src/lib/token2022Resolve.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAWH,OAAO,EACL,WAAW,EAGX,UAAU,EAIX,MAAM,iBAAiB,CAAC;AASzB,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAE3C;;;;;GAKG;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;AAEzF;;;;;;;GAOG;AACH,MAAM,WAAW,+BAA+B;IAC9C,UAAU,EAAE,OAAO,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,gBAAgB,EAAE,CAAC;CACpC;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,iBAAiB,GAAG,UAAU,CAQ9E;AA4DD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,2BAA2B,CAC/C,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC3F,OAAO,CAAC,gBAAgB,EAAE,CAAC,CA8C7B;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,yBAAyB,CAC7C,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,iBAAiB,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAC3F,OAAO,CAAC,+BAA+B,CAAC,CAqE1C"}
@@ -0,0 +1,194 @@
1
+ /**
2
+ * @prettier
3
+ *
4
+ * Reusable Token-2022 resolution logic (Transfer Hook extra accounts and sRFC-37
5
+ * Token ACL permissionless thaw), decoupled from the `Sol` coin class so any caller
6
+ * with its own account-fetcher (e.g. wallet-platform reading chain state via IMS RPC)
7
+ * can resolve these dependencies offline of the SDK's node transport.
8
+ *
9
+ * The resolution functions take a `Connection` (only `getAccountInfo` is required);
10
+ * {@link buildSolAccountConnection} adapts a plain {@link SolAccountFetcher} into the
11
+ * shape `@solana/spl-token`'s transfer-hook helpers expect.
12
+ */
13
+ import { TOKEN_2022_PROGRAM_ID, addExtraAccountMetasForExecute, createTransferCheckedInstruction, getExtraAccountMetas, getTransferHook, resolveExtraAccountMeta, unpackMint, } from '@solana/spl-token';
14
+ import { PublicKey as SolPublicKey, SystemProgram, } from '@solana/web3.js';
15
+ import { THAW_PERMISSIONLESS_IDEMPOTENT_DISCRIMINATOR, TOKEN_ACL_FLAG_ACCOUNT_SEED, TOKEN_ACL_MINT_CONFIG_SEED, TOKEN_ACL_PROGRAM_ID, TOKEN_ACL_THAW_EXTRA_METAS_SEED, } from './constants';
16
+ /**
17
+ * Build a minimal `Connection`-like shim backed by a {@link SolAccountFetcher}.
18
+ *
19
+ * `@solana/spl-token`'s transfer-hook resolution helpers only require
20
+ * `getAccountInfo(publicKey)` returning an `AccountInfo<Buffer>`. This adapts a
21
+ * plain address-based fetcher to that shape so any transport can drive the
22
+ * resolution below without opening a dedicated RPC connection.
23
+ *
24
+ * @param {SolAccountFetcher} fetch - fetcher returning decoded account info by address
25
+ * @returns {Connection} a shim exposing `getAccountInfo`, cast to `Connection`
26
+ */
27
+ export function buildSolAccountConnection(fetch) {
28
+ const getAccountInfo = async (publicKey, _commitmentOrConfig) => {
29
+ return fetch(publicKey.toBase58());
30
+ };
31
+ return { getAccountInfo };
32
+ }
33
+ /**
34
+ * Map the extra keys appended to a resolved transfer instruction into the
35
+ * serializable {@link ExtraAccountMeta} shape.
36
+ */
37
+ function toExtraAccountMetas(instruction, baseKeyCount) {
38
+ return instruction.keys.slice(baseKeyCount).map((meta) => ({
39
+ pubkey: meta.pubkey.toBase58(),
40
+ isSigner: meta.isSigner,
41
+ isWritable: meta.isWritable,
42
+ }));
43
+ }
44
+ /**
45
+ * Decode the fields of a Token ACL MintConfig account we depend on.
46
+ *
47
+ * Layout: `u8 discriminator, u8 bump, bool enablePermissionlessThaw, bool enablePermissionlessFreeze,
48
+ * pubkey mint(32), pubkey freezeAuthority(32), pubkey gatingProgram(32)`.
49
+ */
50
+ function decodeTokenAclMintConfig(data) {
51
+ const enablePermissionlessThaw = data[2] === 1;
52
+ const gatingProgram = new SolPublicKey(data.subarray(68, 100));
53
+ return { enablePermissionlessThaw, gatingProgram };
54
+ }
55
+ /**
56
+ * Resolve the gating program's thaw ExtraAccountMetaList onto a can-thaw context.
57
+ *
58
+ * Mirrors the reference `resolveExtraMetas`: fetch the extra-metas account, unpack its
59
+ * ExtraAccountMeta entries, then resolve each one (fixed address, PDA, or account-data derived)
60
+ * against the accumulating metas using the spl-token transfer-hook helpers. When the extra-metas
61
+ * account does not exist, there are no extras to append.
62
+ */
63
+ async function resolveTokenAclExtraMetas(connection, extraMetasAddress, previousMetas, gatingProgram) {
64
+ const instructionData = Buffer.from([THAW_PERMISSIONLESS_IDEMPOTENT_DISCRIMINATOR]);
65
+ const resolvedMetas = [...previousMetas];
66
+ const extraMetasAccount = await connection.getAccountInfo(extraMetasAddress);
67
+ if (!extraMetasAccount) {
68
+ return resolvedMetas;
69
+ }
70
+ const extraAccountMetas = getExtraAccountMetas(extraMetasAccount);
71
+ for (const extraAccountMeta of extraAccountMetas) {
72
+ const resolvedMeta = await resolveExtraAccountMeta(connection, extraAccountMeta, resolvedMetas, instructionData, gatingProgram);
73
+ resolvedMetas.push(resolvedMeta);
74
+ }
75
+ return resolvedMetas;
76
+ }
77
+ /**
78
+ * Resolve the Token-2022 Transfer Hook extra accounts for a specific transfer.
79
+ *
80
+ * This is generic: it works for any Token-2022 mint by reading the mint's
81
+ * TransferHook extension and the hook program's ExtraAccountMetaList live from
82
+ * the node, then resolving each extra account (including seed-derived PDAs) via
83
+ * the standard `spl-transfer-hook-interface` helpers. The returned metas are in
84
+ * the exact order the hook requires and are suitable for
85
+ * `TokenTransfer.params.transferHookAccounts`.
86
+ *
87
+ * When the mint has no Transfer Hook, this returns an empty array and callers can
88
+ * omit the param.
89
+ *
90
+ * @param {Connection} connection - a `Connection` (or shim) exposing `getAccountInfo`
91
+ * @param params - the transfer parameters
92
+ * @param {string} params.mint - the Token-2022 mint address
93
+ * @param {string} params.source - the source token account (sender ATA)
94
+ * @param {string} params.destination - the destination token account (recipient ATA)
95
+ * @param {string} params.owner - the source account owner / transfer authority
96
+ * @param {string} params.amount - the raw transfer amount in base units
97
+ * @returns {Promise<ExtraAccountMeta[]>} ordered extra account metas, or [] when no hook
98
+ */
99
+ export async function resolveTransferHookAccounts(connection, params) {
100
+ const { mint, source, destination, owner, amount } = params;
101
+ const mintPubkey = new SolPublicKey(mint);
102
+ // Read the mint and detect whether a Transfer Hook extension is configured.
103
+ const mintAccountInfo = await connection.getAccountInfo(mintPubkey);
104
+ if (!mintAccountInfo) {
105
+ return [];
106
+ }
107
+ const mintState = unpackMint(mintPubkey, mintAccountInfo, TOKEN_2022_PROGRAM_ID);
108
+ const transferHook = getTransferHook(mintState);
109
+ if (!transferHook || transferHook.programId.equals(SolPublicKey.default)) {
110
+ return [];
111
+ }
112
+ const sourcePubkey = new SolPublicKey(source);
113
+ const destinationPubkey = new SolPublicKey(destination);
114
+ const ownerPubkey = new SolPublicKey(owner);
115
+ const transferAmount = BigInt(amount);
116
+ // Start from a base transferChecked instruction; addExtraAccountMetasForExecute
117
+ // appends the resolved extra accounts, the hook program, and the validation
118
+ // state account in the required order.
119
+ const instruction = createTransferCheckedInstruction(sourcePubkey, mintPubkey, destinationPubkey, ownerPubkey, transferAmount, mintState.decimals, [], TOKEN_2022_PROGRAM_ID);
120
+ const baseKeyCount = instruction.keys.length;
121
+ await addExtraAccountMetasForExecute(connection, instruction, transferHook.programId, sourcePubkey, mintPubkey, destinationPubkey, ownerPubkey, transferAmount);
122
+ return toExtraAccountMetas(instruction, baseKeyCount);
123
+ }
124
+ /**
125
+ * Resolve the sRFC-37 Token ACL permissionless-thaw dependencies for a token account.
126
+ *
127
+ * This is generic: it works for ANY allowlist/blocklist (DefaultAccountState) Token-2022 mint
128
+ * gated by the Token ACL program — no issuer is hardcoded. It reads the mint's MintConfig PDA
129
+ * live from the node, and only when permissionless thaw is enabled does it derive the flag /
130
+ * mint-config / thaw-extra-metas PDAs and resolve the gating program's extra account metas (in
131
+ * the exact order the gating program requires, mirroring `resolveExtraMetas`).
132
+ *
133
+ * When the mint is not a Token ACL mint, or permissionless thaw is disabled, this returns
134
+ * `{ applicable: false }` and callers skip the thaw.
135
+ *
136
+ * @param {Connection} connection - a `Connection` (or shim) exposing `getAccountInfo`
137
+ * @param params - the thaw parameters
138
+ * @param {string} params.mint - the Token-2022 mint address
139
+ * @param {string} params.tokenAccount - the token account (ATA) to thaw
140
+ * @param {string} params.tokenAccountOwner - the owner of the token account
141
+ * @param {string} params.authority - the signer invoking the thaw (fee payer / authority)
142
+ * @returns {Promise<ResolvePermissionlessThawResult>} the resolved thaw params, or `{ applicable: false }`
143
+ */
144
+ export async function resolvePermissionlessThaw(connection, params) {
145
+ const { mint, tokenAccount, tokenAccountOwner, authority } = params;
146
+ const mintPubkey = new SolPublicKey(mint);
147
+ const tokenAccountPubkey = new SolPublicKey(tokenAccount);
148
+ const tokenAccountOwnerPubkey = new SolPublicKey(tokenAccountOwner);
149
+ const authorityPubkey = new SolPublicKey(authority);
150
+ const tokenAclProgramId = new SolPublicKey(TOKEN_ACL_PROGRAM_ID);
151
+ // 1. Read the mint's MintConfig PDA. Absent => the mint is not a Token ACL mint.
152
+ const [mintConfigPda] = SolPublicKey.findProgramAddressSync([Buffer.from(TOKEN_ACL_MINT_CONFIG_SEED), mintPubkey.toBuffer()], tokenAclProgramId);
153
+ const mintConfigAccount = await connection.getAccountInfo(mintConfigPda);
154
+ if (!mintConfigAccount) {
155
+ return { applicable: false };
156
+ }
157
+ // 2. Decode the MintConfig; permissionless thaw must be enabled.
158
+ const mintConfig = decodeTokenAclMintConfig(mintConfigAccount.data);
159
+ if (!mintConfig.enablePermissionlessThaw) {
160
+ return { applicable: false };
161
+ }
162
+ const gatingProgramPubkey = mintConfig.gatingProgram;
163
+ // 3. Derive the remaining PDAs (flag account under Token ACL, thaw extra metas under gating).
164
+ const [flagAccountPda] = SolPublicKey.findProgramAddressSync([Buffer.from(TOKEN_ACL_FLAG_ACCOUNT_SEED), tokenAccountPubkey.toBuffer()], tokenAclProgramId);
165
+ const [thawExtraMetasPda] = SolPublicKey.findProgramAddressSync([Buffer.from(TOKEN_ACL_THAW_EXTRA_METAS_SEED), mintPubkey.toBuffer()], gatingProgramPubkey);
166
+ // 4. Build the 6-account can-thaw context (all readonly), then resolve the gating program's
167
+ // extra account metas onto it.
168
+ const canThawContext = [
169
+ { pubkey: authorityPubkey, isSigner: false, isWritable: false },
170
+ { pubkey: tokenAccountPubkey, isSigner: false, isWritable: false },
171
+ { pubkey: mintPubkey, isSigner: false, isWritable: false },
172
+ { pubkey: tokenAccountOwnerPubkey, isSigner: false, isWritable: false },
173
+ { pubkey: flagAccountPda, isSigner: false, isWritable: false },
174
+ { pubkey: thawExtraMetasPda, isSigner: false, isWritable: false },
175
+ ];
176
+ const resolvedMetas = await resolveTokenAclExtraMetas(connection, thawExtraMetasPda, canThawContext, gatingProgramPubkey);
177
+ // 5. Drop the first five context accounts; the remainder ([thawExtraMetas, ...extras]) are the
178
+ // accounts appended after the thaw instruction's fixed nine.
179
+ const extraAccounts = resolvedMetas.slice(5).map((meta) => ({
180
+ pubkey: meta.pubkey.toBase58(),
181
+ isSigner: meta.isSigner,
182
+ isWritable: meta.isWritable,
183
+ }));
184
+ return {
185
+ applicable: true,
186
+ gatingProgram: gatingProgramPubkey.toBase58(),
187
+ flagAccount: flagAccountPda.toBase58(),
188
+ mintConfig: mintConfigPda.toBase58(),
189
+ tokenProgram: TOKEN_2022_PROGRAM_ID.toBase58(),
190
+ systemProgram: SystemProgram.programId.toBase58(),
191
+ extraAccounts,
192
+ };
193
+ }
194
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW4yMDIyUmVzb2x2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvdG9rZW4yMDIyUmVzb2x2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7R0FXRztBQUVILE9BQU8sRUFDTCxxQkFBcUIsRUFDckIsOEJBQThCLEVBQzlCLGdDQUFnQyxFQUNoQyxvQkFBb0IsRUFDcEIsZUFBZSxFQUNmLHVCQUF1QixFQUN2QixVQUFVLEdBQ1gsTUFBTSxtQkFBbUIsQ0FBQztBQUMzQixPQUFPLEVBS0wsU0FBUyxJQUFJLFlBQVksRUFDekIsYUFBYSxHQUVkLE1BQU0saUJBQWlCLENBQUM7QUFFekIsT0FBTyxFQUNMLDRDQUE0QyxFQUM1QywyQkFBMkIsRUFDM0IsMEJBQTBCLEVBQzFCLG9CQUFvQixFQUNwQiwrQkFBK0IsR0FDaEMsTUFBTSxhQUFhLENBQUM7QUE2QnJCOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFNLFVBQVUseUJBQXlCLENBQUMsS0FBd0I7SUFDaEUsTUFBTSxjQUFjLEdBQUcsS0FBSyxFQUMxQixTQUF1QixFQUN2QixtQkFBZ0MsRUFDSyxFQUFFO1FBQ3ZDLE9BQU8sS0FBSyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQ3JDLENBQUMsQ0FBQztJQUNGLE9BQU8sRUFBRSxjQUFjLEVBQTJCLENBQUM7QUFDckQsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQVMsbUJBQW1CLENBQUMsV0FBbUMsRUFBRSxZQUFvQjtJQUNwRixPQUFPLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN6RCxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUU7UUFDOUIsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO1FBQ3ZCLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVTtLQUM1QixDQUFDLENBQUMsQ0FBQztBQUNOLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQVMsd0JBQXdCLENBQUMsSUFBWTtJQUM1QyxNQUFNLHdCQUF3QixHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0MsTUFBTSxhQUFhLEdBQUcsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMvRCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsYUFBYSxFQUFFLENBQUM7QUFDckQsQ0FBQztBQUVEOzs7Ozs7O0dBT0c7QUFDSCxLQUFLLFVBQVUseUJBQXlCLENBQ3RDLFVBQXNCLEVBQ3RCLGlCQUErQixFQUMvQixhQUE0QixFQUM1QixhQUEyQjtJQUUzQixNQUFNLGVBQWUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsNENBQTRDLENBQUMsQ0FBQyxDQUFDO0lBQ3BGLE1BQU0sYUFBYSxHQUFrQixDQUFDLEdBQUcsYUFBYSxDQUFDLENBQUM7SUFDeEQsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLFVBQVUsQ0FBQyxjQUFjLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUM3RSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUN2QixPQUFPLGFBQWEsQ0FBQztJQUN2QixDQUFDO0lBQ0QsTUFBTSxpQkFBaUIsR0FBRyxvQkFBb0IsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ2xFLEtBQUssTUFBTSxnQkFBZ0IsSUFBSSxpQkFBaUIsRUFBRSxDQUFDO1FBQ2pELE1BQU0sWUFBWSxHQUFHLE1BQU0sdUJBQXVCLENBQ2hELFVBQVUsRUFDVixnQkFBZ0IsRUFDaEIsYUFBYSxFQUNiLGVBQWUsRUFDZixhQUFhLENBQ2QsQ0FBQztRQUNGLGFBQWEsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUNELE9BQU8sYUFBYSxDQUFDO0FBQ3ZCLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcUJHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSwyQkFBMkIsQ0FDL0MsVUFBc0IsRUFDdEIsTUFBNEY7SUFFNUYsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUM7SUFDNUQsTUFBTSxVQUFVLEdBQUcsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFMUMsNEVBQTRFO0lBQzVFLE1BQU0sZUFBZSxHQUFHLE1BQU0sVUFBVSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNwRSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDckIsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBQ0QsTUFBTSxTQUFTLEdBQUcsVUFBVSxDQUFDLFVBQVUsRUFBRSxlQUFlLEVBQUUscUJBQXFCLENBQUMsQ0FBQztJQUNqRixNQUFNLFlBQVksR0FBRyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDaEQsSUFBSSxDQUFDLFlBQVksSUFBSSxZQUFZLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUN6RSxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRCxNQUFNLFlBQVksR0FBRyxJQUFJLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM5QyxNQUFNLGlCQUFpQixHQUFHLElBQUksWUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3hELE1BQU0sV0FBVyxHQUFHLElBQUksWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzVDLE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUV0QyxnRkFBZ0Y7SUFDaEYsNEVBQTRFO0lBQzVFLHVDQUF1QztJQUN2QyxNQUFNLFdBQVcsR0FBRyxnQ0FBZ0MsQ0FDbEQsWUFBWSxFQUNaLFVBQVUsRUFDVixpQkFBaUIsRUFDakIsV0FBVyxFQUNYLGNBQWMsRUFDZCxTQUFTLENBQUMsUUFBUSxFQUNsQixFQUFFLEVBQ0YscUJBQXFCLENBQ3RCLENBQUM7SUFDRixNQUFNLFlBQVksR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUM3QyxNQUFNLDhCQUE4QixDQUNsQyxVQUFVLEVBQ1YsV0FBVyxFQUNYLFlBQVksQ0FBQyxTQUFTLEVBQ3RCLFlBQVksRUFDWixVQUFVLEVBQ1YsaUJBQWlCLEVBQ2pCLFdBQVcsRUFDWCxjQUFjLENBQ2YsQ0FBQztJQUVGLE9BQU8sbUJBQW1CLENBQUMsV0FBVyxFQUFFLFlBQVksQ0FBQyxDQUFDO0FBQ3hELENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUseUJBQXlCLENBQzdDLFVBQXNCLEVBQ3RCLE1BQTRGO0lBRTVGLE1BQU0sRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxHQUFHLE1BQU0sQ0FBQztJQUNwRSxNQUFNLFVBQVUsR0FBRyxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMxQyxNQUFNLGtCQUFrQixHQUFHLElBQUksWUFBWSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQzFELE1BQU0sdUJBQXVCLEdBQUcsSUFBSSxZQUFZLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUNwRSxNQUFNLGVBQWUsR0FBRyxJQUFJLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNwRCxNQUFNLGlCQUFpQixHQUFHLElBQUksWUFBWSxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFFakUsaUZBQWlGO0lBQ2pGLE1BQU0sQ0FBQyxhQUFhLENBQUMsR0FBRyxZQUFZLENBQUMsc0JBQXNCLENBQ3pELENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUNoRSxpQkFBaUIsQ0FDbEIsQ0FBQztJQUNGLE1BQU0saUJBQWlCLEdBQUcsTUFBTSxVQUFVLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3pFLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3ZCLE9BQU8sRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVELGlFQUFpRTtJQUNqRSxNQUFNLFVBQVUsR0FBRyx3QkFBd0IsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwRSxJQUFJLENBQUMsVUFBVSxDQUFDLHdCQUF3QixFQUFFLENBQUM7UUFDekMsT0FBTyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBQ0QsTUFBTSxtQkFBbUIsR0FBRyxVQUFVLENBQUMsYUFBYSxDQUFDO0lBRXJELDhGQUE4RjtJQUM5RixNQUFNLENBQUMsY0FBYyxDQUFDLEdBQUcsWUFBWSxDQUFDLHNCQUFzQixDQUMxRCxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsMkJBQTJCLENBQUMsRUFBRSxrQkFBa0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUN6RSxpQkFBaUIsQ0FDbEIsQ0FBQztJQUNGLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLFlBQVksQ0FBQyxzQkFBc0IsQ0FDN0QsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLCtCQUErQixDQUFDLEVBQUUsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQ3JFLG1CQUFtQixDQUNwQixDQUFDO0lBRUYsNEZBQTRGO0lBQzVGLGtDQUFrQztJQUNsQyxNQUFNLGNBQWMsR0FBa0I7UUFDcEMsRUFBRSxNQUFNLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRTtRQUMvRCxFQUFFLE1BQU0sRUFBRSxrQkFBa0IsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUU7UUFDbEUsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRTtRQUMxRCxFQUFFLE1BQU0sRUFBRSx1QkFBdUIsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUU7UUFDdkUsRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRTtRQUM5RCxFQUFFLE1BQU0sRUFBRSxpQkFBaUIsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUU7S0FDbEUsQ0FBQztJQUNGLE1BQU0sYUFBYSxHQUFHLE1BQU0seUJBQXlCLENBQ25ELFVBQVUsRUFDVixpQkFBaUIsRUFDakIsY0FBYyxFQUNkLG1CQUFtQixDQUNwQixDQUFDO0lBRUYsK0ZBQStGO0lBQy9GLGdFQUFnRTtJQUNoRSxNQUFNLGFBQWEsR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztRQUMxRCxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUU7UUFDOUIsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO1FBQ3ZCLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVTtLQUM1QixDQUFDLENBQUMsQ0FBQztJQUVKLE9BQU87UUFDTCxVQUFVLEVBQUUsSUFBSTtRQUNoQixhQUFhLEVBQUUsbUJBQW1CLENBQUMsUUFBUSxFQUFFO1FBQzdDLFdBQVcsRUFBRSxjQUFjLENBQUMsUUFBUSxFQUFFO1FBQ3RDLFVBQVUsRUFBRSxhQUFhLENBQUMsUUFBUSxFQUFFO1FBQ3BDLFlBQVksRUFBRSxxQkFBcUIsQ0FBQyxRQUFRLEVBQUU7UUFDOUMsYUFBYSxFQUFFLGFBQWEsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFO1FBQ2pELGFBQWE7S0FDZCxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQHByZXR0aWVyXG4gKlxuICogUmV1c2FibGUgVG9rZW4tMjAyMiByZXNvbHV0aW9uIGxvZ2ljIChUcmFuc2ZlciBIb29rIGV4dHJhIGFjY291bnRzIGFuZCBzUkZDLTM3XG4gKiBUb2tlbiBBQ0wgcGVybWlzc2lvbmxlc3MgdGhhdyksIGRlY291cGxlZCBmcm9tIHRoZSBgU29sYCBjb2luIGNsYXNzIHNvIGFueSBjYWxsZXJcbiAqIHdpdGggaXRzIG93biBhY2NvdW50LWZldGNoZXIgKGUuZy4gd2FsbGV0LXBsYXRmb3JtIHJlYWRpbmcgY2hhaW4gc3RhdGUgdmlhIElNUyBSUEMpXG4gKiBjYW4gcmVzb2x2ZSB0aGVzZSBkZXBlbmRlbmNpZXMgb2ZmbGluZSBvZiB0aGUgU0RLJ3Mgbm9kZSB0cmFuc3BvcnQuXG4gKlxuICogVGhlIHJlc29sdXRpb24gZnVuY3Rpb25zIHRha2UgYSBgQ29ubmVjdGlvbmAgKG9ubHkgYGdldEFjY291bnRJbmZvYCBpcyByZXF1aXJlZCk7XG4gKiB7QGxpbmsgYnVpbGRTb2xBY2NvdW50Q29ubmVjdGlvbn0gYWRhcHRzIGEgcGxhaW4ge0BsaW5rIFNvbEFjY291bnRGZXRjaGVyfSBpbnRvIHRoZVxuICogc2hhcGUgYEBzb2xhbmEvc3BsLXRva2VuYCdzIHRyYW5zZmVyLWhvb2sgaGVscGVycyBleHBlY3QuXG4gKi9cblxuaW1wb3J0IHtcbiAgVE9LRU5fMjAyMl9QUk9HUkFNX0lELFxuICBhZGRFeHRyYUFjY291bnRNZXRhc0ZvckV4ZWN1dGUsXG4gIGNyZWF0ZVRyYW5zZmVyQ2hlY2tlZEluc3RydWN0aW9uLFxuICBnZXRFeHRyYUFjY291bnRNZXRhcyxcbiAgZ2V0VHJhbnNmZXJIb29rLFxuICByZXNvbHZlRXh0cmFBY2NvdW50TWV0YSxcbiAgdW5wYWNrTWludCxcbn0gZnJvbSAnQHNvbGFuYS9zcGwtdG9rZW4nO1xuaW1wb3J0IHtcbiAgQWNjb3VudEluZm8sXG4gIEFjY291bnRNZXRhLFxuICBDb21taXRtZW50LFxuICBDb25uZWN0aW9uLFxuICBQdWJsaWNLZXkgYXMgU29sUHVibGljS2V5LFxuICBTeXN0ZW1Qcm9ncmFtLFxuICBUcmFuc2FjdGlvbkluc3RydWN0aW9uLFxufSBmcm9tICdAc29sYW5hL3dlYjMuanMnO1xuXG5pbXBvcnQge1xuICBUSEFXX1BFUk1JU1NJT05MRVNTX0lERU1QT1RFTlRfRElTQ1JJTUlOQVRPUixcbiAgVE9LRU5fQUNMX0ZMQUdfQUNDT1VOVF9TRUVELFxuICBUT0tFTl9BQ0xfTUlOVF9DT05GSUdfU0VFRCxcbiAgVE9LRU5fQUNMX1BST0dSQU1fSUQsXG4gIFRPS0VOX0FDTF9USEFXX0VYVFJBX01FVEFTX1NFRUQsXG59IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IEV4dHJhQWNjb3VudE1ldGEgfSBmcm9tICcuL2lmYWNlJztcblxuLyoqXG4gKiBBIG1pbmltYWwgYWNjb3VudC1mZXRjaGVyOiBnaXZlbiBhIGJhc2U1OCBhZGRyZXNzLCByZXR1cm4gaXRzIG9uLWNoYWluXG4gKiB7QGxpbmsgQWNjb3VudEluZm99ICh3aXRoIGBkYXRhYCBhbHJlYWR5IGRlY29kZWQgaW50byBhIGBCdWZmZXJgKSBvciBgbnVsbGBcbiAqIHdoZW4gdGhlIGFjY291bnQgZG9lcyBub3QgZXhpc3QuIENhbGxlcnMgc3VwcGx5IHRoZWlyIG93biB0cmFuc3BvcnQgKFNESyBub2RlXG4gKiByZXF1ZXN0LCB3YWxsZXQtcGxhdGZvcm0gSU1TIFJQQywgYSBmdWxsIGBDb25uZWN0aW9uYCwgZXRjLikuXG4gKi9cbmV4cG9ydCB0eXBlIFNvbEFjY291bnRGZXRjaGVyID0gKGFkZHJlc3M6IHN0cmluZykgPT4gUHJvbWlzZTxBY2NvdW50SW5mbzxCdWZmZXI+IHwgbnVsbD47XG5cbi8qKlxuICogUmVzdWx0IG9mIHJlc29sdmluZyB0aGUgc1JGQy0zNyBUb2tlbiBBQ0wgcGVybWlzc2lvbmxlc3MgdGhhdyBmb3IgYSBtaW50IC8gdG9rZW4gYWNjb3VudC5cbiAqXG4gKiBXaGVuIGBhcHBsaWNhYmxlYCBpcyBmYWxzZSAodGhlIG1pbnQgaGFzIG5vIFRva2VuIEFDTCBNaW50Q29uZmlnLCBvciBwZXJtaXNzaW9ubGVzcyB0aGF3IGlzXG4gKiBkaXNhYmxlZCkgYWxsIG90aGVyIGZpZWxkcyBhcmUgb21pdHRlZCBhbmQgdGhlIGNhbGxlciBzaG91bGQgbm90IGVtaXQgYSB0aGF3IGluc3RydWN0aW9uLlxuICogV2hlbiBgYXBwbGljYWJsZWAgaXMgdHJ1ZSwgdGhlIGZpZWxkcyBhcmUgcmVhZHkgdG8gdGhyZWFkIGludG8gdGhlIHRva2VuLXRyYW5zZmVyIGJ1aWxkZXIgdmlhXG4gKiBgcGVybWlzc2lvbmxlc3NUaGF3KC4uLilgLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc29sdmVQZXJtaXNzaW9ubGVzc1RoYXdSZXN1bHQge1xuICBhcHBsaWNhYmxlOiBib29sZWFuO1xuICBnYXRpbmdQcm9ncmFtPzogc3RyaW5nO1xuICBmbGFnQWNjb3VudD86IHN0cmluZztcbiAgbWludENvbmZpZz86IHN0cmluZztcbiAgdG9rZW5Qcm9ncmFtPzogc3RyaW5nO1xuICBzeXN0ZW1Qcm9ncmFtPzogc3RyaW5nO1xuICBleHRyYUFjY291bnRzPzogRXh0cmFBY2NvdW50TWV0YVtdO1xufVxuXG4vKipcbiAqIEJ1aWxkIGEgbWluaW1hbCBgQ29ubmVjdGlvbmAtbGlrZSBzaGltIGJhY2tlZCBieSBhIHtAbGluayBTb2xBY2NvdW50RmV0Y2hlcn0uXG4gKlxuICogYEBzb2xhbmEvc3BsLXRva2VuYCdzIHRyYW5zZmVyLWhvb2sgcmVzb2x1dGlvbiBoZWxwZXJzIG9ubHkgcmVxdWlyZVxuICogYGdldEFjY291bnRJbmZvKHB1YmxpY0tleSlgIHJldHVybmluZyBhbiBgQWNjb3VudEluZm88QnVmZmVyPmAuIFRoaXMgYWRhcHRzIGFcbiAqIHBsYWluIGFkZHJlc3MtYmFzZWQgZmV0Y2hlciB0byB0aGF0IHNoYXBlIHNvIGFueSB0cmFuc3BvcnQgY2FuIGRyaXZlIHRoZVxuICogcmVzb2x1dGlvbiBiZWxvdyB3aXRob3V0IG9wZW5pbmcgYSBkZWRpY2F0ZWQgUlBDIGNvbm5lY3Rpb24uXG4gKlxuICogQHBhcmFtIHtTb2xBY2NvdW50RmV0Y2hlcn0gZmV0Y2ggLSBmZXRjaGVyIHJldHVybmluZyBkZWNvZGVkIGFjY291bnQgaW5mbyBieSBhZGRyZXNzXG4gKiBAcmV0dXJucyB7Q29ubmVjdGlvbn0gYSBzaGltIGV4cG9zaW5nIGBnZXRBY2NvdW50SW5mb2AsIGNhc3QgdG8gYENvbm5lY3Rpb25gXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFNvbEFjY291bnRDb25uZWN0aW9uKGZldGNoOiBTb2xBY2NvdW50RmV0Y2hlcik6IENvbm5lY3Rpb24ge1xuICBjb25zdCBnZXRBY2NvdW50SW5mbyA9IGFzeW5jIChcbiAgICBwdWJsaWNLZXk6IFNvbFB1YmxpY0tleSxcbiAgICBfY29tbWl0bWVudE9yQ29uZmlnPzogQ29tbWl0bWVudFxuICApOiBQcm9taXNlPEFjY291bnRJbmZvPEJ1ZmZlcj4gfCBudWxsPiA9PiB7XG4gICAgcmV0dXJuIGZldGNoKHB1YmxpY0tleS50b0Jhc2U1OCgpKTtcbiAgfTtcbiAgcmV0dXJuIHsgZ2V0QWNjb3VudEluZm8gfSBhcyB1bmtub3duIGFzIENvbm5lY3Rpb247XG59XG5cbi8qKlxuICogTWFwIHRoZSBleHRyYSBrZXlzIGFwcGVuZGVkIHRvIGEgcmVzb2x2ZWQgdHJhbnNmZXIgaW5zdHJ1Y3Rpb24gaW50byB0aGVcbiAqIHNlcmlhbGl6YWJsZSB7QGxpbmsgRXh0cmFBY2NvdW50TWV0YX0gc2hhcGUuXG4gKi9cbmZ1bmN0aW9uIHRvRXh0cmFBY2NvdW50TWV0YXMoaW5zdHJ1Y3Rpb246IFRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb24sIGJhc2VLZXlDb3VudDogbnVtYmVyKTogRXh0cmFBY2NvdW50TWV0YVtdIHtcbiAgcmV0dXJuIGluc3RydWN0aW9uLmtleXMuc2xpY2UoYmFzZUtleUNvdW50KS5tYXAoKG1ldGEpID0+ICh7XG4gICAgcHVia2V5OiBtZXRhLnB1YmtleS50b0Jhc2U1OCgpLFxuICAgIGlzU2lnbmVyOiBtZXRhLmlzU2lnbmVyLFxuICAgIGlzV3JpdGFibGU6IG1ldGEuaXNXcml0YWJsZSxcbiAgfSkpO1xufVxuXG4vKipcbiAqIERlY29kZSB0aGUgZmllbGRzIG9mIGEgVG9rZW4gQUNMIE1pbnRDb25maWcgYWNjb3VudCB3ZSBkZXBlbmQgb24uXG4gKlxuICogTGF5b3V0OiBgdTggZGlzY3JpbWluYXRvciwgdTggYnVtcCwgYm9vbCBlbmFibGVQZXJtaXNzaW9ubGVzc1RoYXcsIGJvb2wgZW5hYmxlUGVybWlzc2lvbmxlc3NGcmVlemUsXG4gKiBwdWJrZXkgbWludCgzMiksIHB1YmtleSBmcmVlemVBdXRob3JpdHkoMzIpLCBwdWJrZXkgZ2F0aW5nUHJvZ3JhbSgzMilgLlxuICovXG5mdW5jdGlvbiBkZWNvZGVUb2tlbkFjbE1pbnRDb25maWcoZGF0YTogQnVmZmVyKTogeyBlbmFibGVQZXJtaXNzaW9ubGVzc1RoYXc6IGJvb2xlYW47IGdhdGluZ1Byb2dyYW06IFNvbFB1YmxpY0tleSB9IHtcbiAgY29uc3QgZW5hYmxlUGVybWlzc2lvbmxlc3NUaGF3ID0gZGF0YVsyXSA9PT0gMTtcbiAgY29uc3QgZ2F0aW5nUHJvZ3JhbSA9IG5ldyBTb2xQdWJsaWNLZXkoZGF0YS5zdWJhcnJheSg2OCwgMTAwKSk7XG4gIHJldHVybiB7IGVuYWJsZVBlcm1pc3Npb25sZXNzVGhhdywgZ2F0aW5nUHJvZ3JhbSB9O1xufVxuXG4vKipcbiAqIFJlc29sdmUgdGhlIGdhdGluZyBwcm9ncmFtJ3MgdGhhdyBFeHRyYUFjY291bnRNZXRhTGlzdCBvbnRvIGEgY2FuLXRoYXcgY29udGV4dC5cbiAqXG4gKiBNaXJyb3JzIHRoZSByZWZlcmVuY2UgYHJlc29sdmVFeHRyYU1ldGFzYDogZmV0Y2ggdGhlIGV4dHJhLW1ldGFzIGFjY291bnQsIHVucGFjayBpdHNcbiAqIEV4dHJhQWNjb3VudE1ldGEgZW50cmllcywgdGhlbiByZXNvbHZlIGVhY2ggb25lIChmaXhlZCBhZGRyZXNzLCBQREEsIG9yIGFjY291bnQtZGF0YSBkZXJpdmVkKVxuICogYWdhaW5zdCB0aGUgYWNjdW11bGF0aW5nIG1ldGFzIHVzaW5nIHRoZSBzcGwtdG9rZW4gdHJhbnNmZXItaG9vayBoZWxwZXJzLiBXaGVuIHRoZSBleHRyYS1tZXRhc1xuICogYWNjb3VudCBkb2VzIG5vdCBleGlzdCwgdGhlcmUgYXJlIG5vIGV4dHJhcyB0byBhcHBlbmQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJlc29sdmVUb2tlbkFjbEV4dHJhTWV0YXMoXG4gIGNvbm5lY3Rpb246IENvbm5lY3Rpb24sXG4gIGV4dHJhTWV0YXNBZGRyZXNzOiBTb2xQdWJsaWNLZXksXG4gIHByZXZpb3VzTWV0YXM6IEFjY291bnRNZXRhW10sXG4gIGdhdGluZ1Byb2dyYW06IFNvbFB1YmxpY0tleVxuKTogUHJvbWlzZTxBY2NvdW50TWV0YVtdPiB7XG4gIGNvbnN0IGluc3RydWN0aW9uRGF0YSA9IEJ1ZmZlci5mcm9tKFtUSEFXX1BFUk1JU1NJT05MRVNTX0lERU1QT1RFTlRfRElTQ1JJTUlOQVRPUl0pO1xuICBjb25zdCByZXNvbHZlZE1ldGFzOiBBY2NvdW50TWV0YVtdID0gWy4uLnByZXZpb3VzTWV0YXNdO1xuICBjb25zdCBleHRyYU1ldGFzQWNjb3VudCA9IGF3YWl0IGNvbm5lY3Rpb24uZ2V0QWNjb3VudEluZm8oZXh0cmFNZXRhc0FkZHJlc3MpO1xuICBpZiAoIWV4dHJhTWV0YXNBY2NvdW50KSB7XG4gICAgcmV0dXJuIHJlc29sdmVkTWV0YXM7XG4gIH1cbiAgY29uc3QgZXh0cmFBY2NvdW50TWV0YXMgPSBnZXRFeHRyYUFjY291bnRNZXRhcyhleHRyYU1ldGFzQWNjb3VudCk7XG4gIGZvciAoY29uc3QgZXh0cmFBY2NvdW50TWV0YSBvZiBleHRyYUFjY291bnRNZXRhcykge1xuICAgIGNvbnN0IHJlc29sdmVkTWV0YSA9IGF3YWl0IHJlc29sdmVFeHRyYUFjY291bnRNZXRhKFxuICAgICAgY29ubmVjdGlvbixcbiAgICAgIGV4dHJhQWNjb3VudE1ldGEsXG4gICAgICByZXNvbHZlZE1ldGFzLFxuICAgICAgaW5zdHJ1Y3Rpb25EYXRhLFxuICAgICAgZ2F0aW5nUHJvZ3JhbVxuICAgICk7XG4gICAgcmVzb2x2ZWRNZXRhcy5wdXNoKHJlc29sdmVkTWV0YSk7XG4gIH1cbiAgcmV0dXJuIHJlc29sdmVkTWV0YXM7XG59XG5cbi8qKlxuICogUmVzb2x2ZSB0aGUgVG9rZW4tMjAyMiBUcmFuc2ZlciBIb29rIGV4dHJhIGFjY291bnRzIGZvciBhIHNwZWNpZmljIHRyYW5zZmVyLlxuICpcbiAqIFRoaXMgaXMgZ2VuZXJpYzogaXQgd29ya3MgZm9yIGFueSBUb2tlbi0yMDIyIG1pbnQgYnkgcmVhZGluZyB0aGUgbWludCdzXG4gKiBUcmFuc2Zlckhvb2sgZXh0ZW5zaW9uIGFuZCB0aGUgaG9vayBwcm9ncmFtJ3MgRXh0cmFBY2NvdW50TWV0YUxpc3QgbGl2ZSBmcm9tXG4gKiB0aGUgbm9kZSwgdGhlbiByZXNvbHZpbmcgZWFjaCBleHRyYSBhY2NvdW50IChpbmNsdWRpbmcgc2VlZC1kZXJpdmVkIFBEQXMpIHZpYVxuICogdGhlIHN0YW5kYXJkIGBzcGwtdHJhbnNmZXItaG9vay1pbnRlcmZhY2VgIGhlbHBlcnMuIFRoZSByZXR1cm5lZCBtZXRhcyBhcmUgaW5cbiAqIHRoZSBleGFjdCBvcmRlciB0aGUgaG9vayByZXF1aXJlcyBhbmQgYXJlIHN1aXRhYmxlIGZvclxuICogYFRva2VuVHJhbnNmZXIucGFyYW1zLnRyYW5zZmVySG9va0FjY291bnRzYC5cbiAqXG4gKiBXaGVuIHRoZSBtaW50IGhhcyBubyBUcmFuc2ZlciBIb29rLCB0aGlzIHJldHVybnMgYW4gZW1wdHkgYXJyYXkgYW5kIGNhbGxlcnMgY2FuXG4gKiBvbWl0IHRoZSBwYXJhbS5cbiAqXG4gKiBAcGFyYW0ge0Nvbm5lY3Rpb259IGNvbm5lY3Rpb24gLSBhIGBDb25uZWN0aW9uYCAob3Igc2hpbSkgZXhwb3NpbmcgYGdldEFjY291bnRJbmZvYFxuICogQHBhcmFtIHBhcmFtcyAtIHRoZSB0cmFuc2ZlciBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0ge3N0cmluZ30gcGFyYW1zLm1pbnQgLSB0aGUgVG9rZW4tMjAyMiBtaW50IGFkZHJlc3NcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXJhbXMuc291cmNlIC0gdGhlIHNvdXJjZSB0b2tlbiBhY2NvdW50IChzZW5kZXIgQVRBKVxuICogQHBhcmFtIHtzdHJpbmd9IHBhcmFtcy5kZXN0aW5hdGlvbiAtIHRoZSBkZXN0aW5hdGlvbiB0b2tlbiBhY2NvdW50IChyZWNpcGllbnQgQVRBKVxuICogQHBhcmFtIHtzdHJpbmd9IHBhcmFtcy5vd25lciAtIHRoZSBzb3VyY2UgYWNjb3VudCBvd25lciAvIHRyYW5zZmVyIGF1dGhvcml0eVxuICogQHBhcmFtIHtzdHJpbmd9IHBhcmFtcy5hbW91bnQgLSB0aGUgcmF3IHRyYW5zZmVyIGFtb3VudCBpbiBiYXNlIHVuaXRzXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxFeHRyYUFjY291bnRNZXRhW10+fSBvcmRlcmVkIGV4dHJhIGFjY291bnQgbWV0YXMsIG9yIFtdIHdoZW4gbm8gaG9va1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVRyYW5zZmVySG9va0FjY291bnRzKFxuICBjb25uZWN0aW9uOiBDb25uZWN0aW9uLFxuICBwYXJhbXM6IHsgbWludDogc3RyaW5nOyBzb3VyY2U6IHN0cmluZzsgZGVzdGluYXRpb246IHN0cmluZzsgb3duZXI6IHN0cmluZzsgYW1vdW50OiBzdHJpbmcgfVxuKTogUHJvbWlzZTxFeHRyYUFjY291bnRNZXRhW10+IHtcbiAgY29uc3QgeyBtaW50LCBzb3VyY2UsIGRlc3RpbmF0aW9uLCBvd25lciwgYW1vdW50IH0gPSBwYXJhbXM7XG4gIGNvbnN0IG1pbnRQdWJrZXkgPSBuZXcgU29sUHVibGljS2V5KG1pbnQpO1xuXG4gIC8vIFJlYWQgdGhlIG1pbnQgYW5kIGRldGVjdCB3aGV0aGVyIGEgVHJhbnNmZXIgSG9vayBleHRlbnNpb24gaXMgY29uZmlndXJlZC5cbiAgY29uc3QgbWludEFjY291bnRJbmZvID0gYXdhaXQgY29ubmVjdGlvbi5nZXRBY2NvdW50SW5mbyhtaW50UHVia2V5KTtcbiAgaWYgKCFtaW50QWNjb3VudEluZm8pIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgY29uc3QgbWludFN0YXRlID0gdW5wYWNrTWludChtaW50UHVia2V5LCBtaW50QWNjb3VudEluZm8sIFRPS0VOXzIwMjJfUFJPR1JBTV9JRCk7XG4gIGNvbnN0IHRyYW5zZmVySG9vayA9IGdldFRyYW5zZmVySG9vayhtaW50U3RhdGUpO1xuICBpZiAoIXRyYW5zZmVySG9vayB8fCB0cmFuc2Zlckhvb2sucHJvZ3JhbUlkLmVxdWFscyhTb2xQdWJsaWNLZXkuZGVmYXVsdCkpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBjb25zdCBzb3VyY2VQdWJrZXkgPSBuZXcgU29sUHVibGljS2V5KHNvdXJjZSk7XG4gIGNvbnN0IGRlc3RpbmF0aW9uUHVia2V5ID0gbmV3IFNvbFB1YmxpY0tleShkZXN0aW5hdGlvbik7XG4gIGNvbnN0IG93bmVyUHVia2V5ID0gbmV3IFNvbFB1YmxpY0tleShvd25lcik7XG4gIGNvbnN0IHRyYW5zZmVyQW1vdW50ID0gQmlnSW50KGFtb3VudCk7XG5cbiAgLy8gU3RhcnQgZnJvbSBhIGJhc2UgdHJhbnNmZXJDaGVja2VkIGluc3RydWN0aW9uOyBhZGRFeHRyYUFjY291bnRNZXRhc0ZvckV4ZWN1dGVcbiAgLy8gYXBwZW5kcyB0aGUgcmVzb2x2ZWQgZXh0cmEgYWNjb3VudHMsIHRoZSBob29rIHByb2dyYW0sIGFuZCB0aGUgdmFsaWRhdGlvblxuICAvLyBzdGF0ZSBhY2NvdW50IGluIHRoZSByZXF1aXJlZCBvcmRlci5cbiAgY29uc3QgaW5zdHJ1Y3Rpb24gPSBjcmVhdGVUcmFuc2ZlckNoZWNrZWRJbnN0cnVjdGlvbihcbiAgICBzb3VyY2VQdWJrZXksXG4gICAgbWludFB1YmtleSxcbiAgICBkZXN0aW5hdGlvblB1YmtleSxcbiAgICBvd25lclB1YmtleSxcbiAgICB0cmFuc2ZlckFtb3VudCxcbiAgICBtaW50U3RhdGUuZGVjaW1hbHMsXG4gICAgW10sXG4gICAgVE9LRU5fMjAyMl9QUk9HUkFNX0lEXG4gICk7XG4gIGNvbnN0IGJhc2VLZXlDb3VudCA9IGluc3RydWN0aW9uLmtleXMubGVuZ3RoO1xuICBhd2FpdCBhZGRFeHRyYUFjY291bnRNZXRhc0ZvckV4ZWN1dGUoXG4gICAgY29ubmVjdGlvbixcbiAgICBpbnN0cnVjdGlvbixcbiAgICB0cmFuc2Zlckhvb2sucHJvZ3JhbUlkLFxuICAgIHNvdXJjZVB1YmtleSxcbiAgICBtaW50UHVia2V5LFxuICAgIGRlc3RpbmF0aW9uUHVia2V5LFxuICAgIG93bmVyUHVia2V5LFxuICAgIHRyYW5zZmVyQW1vdW50XG4gICk7XG5cbiAgcmV0dXJuIHRvRXh0cmFBY2NvdW50TWV0YXMoaW5zdHJ1Y3Rpb24sIGJhc2VLZXlDb3VudCk7XG59XG5cbi8qKlxuICogUmVzb2x2ZSB0aGUgc1JGQy0zNyBUb2tlbiBBQ0wgcGVybWlzc2lvbmxlc3MtdGhhdyBkZXBlbmRlbmNpZXMgZm9yIGEgdG9rZW4gYWNjb3VudC5cbiAqXG4gKiBUaGlzIGlzIGdlbmVyaWM6IGl0IHdvcmtzIGZvciBBTlkgYWxsb3dsaXN0L2Jsb2NrbGlzdCAoRGVmYXVsdEFjY291bnRTdGF0ZSkgVG9rZW4tMjAyMiBtaW50XG4gKiBnYXRlZCBieSB0aGUgVG9rZW4gQUNMIHByb2dyYW0g4oCUIG5vIGlzc3VlciBpcyBoYXJkY29kZWQuIEl0IHJlYWRzIHRoZSBtaW50J3MgTWludENvbmZpZyBQREFcbiAqIGxpdmUgZnJvbSB0aGUgbm9kZSwgYW5kIG9ubHkgd2hlbiBwZXJtaXNzaW9ubGVzcyB0aGF3IGlzIGVuYWJsZWQgZG9lcyBpdCBkZXJpdmUgdGhlIGZsYWcgL1xuICogbWludC1jb25maWcgLyB0aGF3LWV4dHJhLW1ldGFzIFBEQXMgYW5kIHJlc29sdmUgdGhlIGdhdGluZyBwcm9ncmFtJ3MgZXh0cmEgYWNjb3VudCBtZXRhcyAoaW5cbiAqIHRoZSBleGFjdCBvcmRlciB0aGUgZ2F0aW5nIHByb2dyYW0gcmVxdWlyZXMsIG1pcnJvcmluZyBgcmVzb2x2ZUV4dHJhTWV0YXNgKS5cbiAqXG4gKiBXaGVuIHRoZSBtaW50IGlzIG5vdCBhIFRva2VuIEFDTCBtaW50LCBvciBwZXJtaXNzaW9ubGVzcyB0aGF3IGlzIGRpc2FibGVkLCB0aGlzIHJldHVybnNcbiAqIGB7IGFwcGxpY2FibGU6IGZhbHNlIH1gIGFuZCBjYWxsZXJzIHNraXAgdGhlIHRoYXcuXG4gKlxuICogQHBhcmFtIHtDb25uZWN0aW9ufSBjb25uZWN0aW9uIC0gYSBgQ29ubmVjdGlvbmAgKG9yIHNoaW0pIGV4cG9zaW5nIGBnZXRBY2NvdW50SW5mb2BcbiAqIEBwYXJhbSBwYXJhbXMgLSB0aGUgdGhhdyBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0ge3N0cmluZ30gcGFyYW1zLm1pbnQgLSB0aGUgVG9rZW4tMjAyMiBtaW50IGFkZHJlc3NcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXJhbXMudG9rZW5BY2NvdW50IC0gdGhlIHRva2VuIGFjY291bnQgKEFUQSkgdG8gdGhhd1xuICogQHBhcmFtIHtzdHJpbmd9IHBhcmFtcy50b2tlbkFjY291bnRPd25lciAtIHRoZSBvd25lciBvZiB0aGUgdG9rZW4gYWNjb3VudFxuICogQHBhcmFtIHtzdHJpbmd9IHBhcmFtcy5hdXRob3JpdHkgLSB0aGUgc2lnbmVyIGludm9raW5nIHRoZSB0aGF3IChmZWUgcGF5ZXIgLyBhdXRob3JpdHkpXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxSZXNvbHZlUGVybWlzc2lvbmxlc3NUaGF3UmVzdWx0Pn0gdGhlIHJlc29sdmVkIHRoYXcgcGFyYW1zLCBvciBgeyBhcHBsaWNhYmxlOiBmYWxzZSB9YFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVBlcm1pc3Npb25sZXNzVGhhdyhcbiAgY29ubmVjdGlvbjogQ29ubmVjdGlvbixcbiAgcGFyYW1zOiB7IG1pbnQ6IHN0cmluZzsgdG9rZW5BY2NvdW50OiBzdHJpbmc7IHRva2VuQWNjb3VudE93bmVyOiBzdHJpbmc7IGF1dGhvcml0eTogc3RyaW5nIH1cbik6IFByb21pc2U8UmVzb2x2ZVBlcm1pc3Npb25sZXNzVGhhd1Jlc3VsdD4ge1xuICBjb25zdCB7IG1pbnQsIHRva2VuQWNjb3VudCwgdG9rZW5BY2NvdW50T3duZXIsIGF1dGhvcml0eSB9ID0gcGFyYW1zO1xuICBjb25zdCBtaW50UHVia2V5ID0gbmV3IFNvbFB1YmxpY0tleShtaW50KTtcbiAgY29uc3QgdG9rZW5BY2NvdW50UHVia2V5ID0gbmV3IFNvbFB1YmxpY0tleSh0b2tlbkFjY291bnQpO1xuICBjb25zdCB0b2tlbkFjY291bnRPd25lclB1YmtleSA9IG5ldyBTb2xQdWJsaWNLZXkodG9rZW5BY2NvdW50T3duZXIpO1xuICBjb25zdCBhdXRob3JpdHlQdWJrZXkgPSBuZXcgU29sUHVibGljS2V5KGF1dGhvcml0eSk7XG4gIGNvbnN0IHRva2VuQWNsUHJvZ3JhbUlkID0gbmV3IFNvbFB1YmxpY0tleShUT0tFTl9BQ0xfUFJPR1JBTV9JRCk7XG5cbiAgLy8gMS4gUmVhZCB0aGUgbWludCdzIE1pbnRDb25maWcgUERBLiBBYnNlbnQgPT4gdGhlIG1pbnQgaXMgbm90IGEgVG9rZW4gQUNMIG1pbnQuXG4gIGNvbnN0IFttaW50Q29uZmlnUGRhXSA9IFNvbFB1YmxpY0tleS5maW5kUHJvZ3JhbUFkZHJlc3NTeW5jKFxuICAgIFtCdWZmZXIuZnJvbShUT0tFTl9BQ0xfTUlOVF9DT05GSUdfU0VFRCksIG1pbnRQdWJrZXkudG9CdWZmZXIoKV0sXG4gICAgdG9rZW5BY2xQcm9ncmFtSWRcbiAgKTtcbiAgY29uc3QgbWludENvbmZpZ0FjY291bnQgPSBhd2FpdCBjb25uZWN0aW9uLmdldEFjY291bnRJbmZvKG1pbnRDb25maWdQZGEpO1xuICBpZiAoIW1pbnRDb25maWdBY2NvdW50KSB7XG4gICAgcmV0dXJuIHsgYXBwbGljYWJsZTogZmFsc2UgfTtcbiAgfVxuXG4gIC8vIDIuIERlY29kZSB0aGUgTWludENvbmZpZzsgcGVybWlzc2lvbmxlc3MgdGhhdyBtdXN0IGJlIGVuYWJsZWQuXG4gIGNvbnN0IG1pbnRDb25maWcgPSBkZWNvZGVUb2tlbkFjbE1pbnRDb25maWcobWludENvbmZpZ0FjY291bnQuZGF0YSk7XG4gIGlmICghbWludENvbmZpZy5lbmFibGVQZXJtaXNzaW9ubGVzc1RoYXcpIHtcbiAgICByZXR1cm4geyBhcHBsaWNhYmxlOiBmYWxzZSB9O1xuICB9XG4gIGNvbnN0IGdhdGluZ1Byb2dyYW1QdWJrZXkgPSBtaW50Q29uZmlnLmdhdGluZ1Byb2dyYW07XG5cbiAgLy8gMy4gRGVyaXZlIHRoZSByZW1haW5pbmcgUERBcyAoZmxhZyBhY2NvdW50IHVuZGVyIFRva2VuIEFDTCwgdGhhdyBleHRyYSBtZXRhcyB1bmRlciBnYXRpbmcpLlxuICBjb25zdCBbZmxhZ0FjY291bnRQZGFdID0gU29sUHVibGljS2V5LmZpbmRQcm9ncmFtQWRkcmVzc1N5bmMoXG4gICAgW0J1ZmZlci5mcm9tKFRPS0VOX0FDTF9GTEFHX0FDQ09VTlRfU0VFRCksIHRva2VuQWNjb3VudFB1YmtleS50b0J1ZmZlcigpXSxcbiAgICB0b2tlbkFjbFByb2dyYW1JZFxuICApO1xuICBjb25zdCBbdGhhd0V4dHJhTWV0YXNQZGFdID0gU29sUHVibGljS2V5LmZpbmRQcm9ncmFtQWRkcmVzc1N5bmMoXG4gICAgW0J1ZmZlci5mcm9tKFRPS0VOX0FDTF9USEFXX0VYVFJBX01FVEFTX1NFRUQpLCBtaW50UHVia2V5LnRvQnVmZmVyKCldLFxuICAgIGdhdGluZ1Byb2dyYW1QdWJrZXlcbiAgKTtcblxuICAvLyA0LiBCdWlsZCB0aGUgNi1hY2NvdW50IGNhbi10aGF3IGNvbnRleHQgKGFsbCByZWFkb25seSksIHRoZW4gcmVzb2x2ZSB0aGUgZ2F0aW5nIHByb2dyYW0nc1xuICAvLyAgICBleHRyYSBhY2NvdW50IG1ldGFzIG9udG8gaXQuXG4gIGNvbnN0IGNhblRoYXdDb250ZXh0OiBBY2NvdW50TWV0YVtdID0gW1xuICAgIHsgcHVia2V5OiBhdXRob3JpdHlQdWJrZXksIGlzU2lnbmVyOiBmYWxzZSwgaXNXcml0YWJsZTogZmFsc2UgfSxcbiAgICB7IHB1YmtleTogdG9rZW5BY2NvdW50UHVia2V5LCBpc1NpZ25lcjogZmFsc2UsIGlzV3JpdGFibGU6IGZhbHNlIH0sXG4gICAgeyBwdWJrZXk6IG1pbnRQdWJrZXksIGlzU2lnbmVyOiBmYWxzZSwgaXNXcml0YWJsZTogZmFsc2UgfSxcbiAgICB7IHB1YmtleTogdG9rZW5BY2NvdW50T3duZXJQdWJrZXksIGlzU2lnbmVyOiBmYWxzZSwgaXNXcml0YWJsZTogZmFsc2UgfSxcbiAgICB7IHB1YmtleTogZmxhZ0FjY291bnRQZGEsIGlzU2lnbmVyOiBmYWxzZSwgaXNXcml0YWJsZTogZmFsc2UgfSxcbiAgICB7IHB1YmtleTogdGhhd0V4dHJhTWV0YXNQZGEsIGlzU2lnbmVyOiBmYWxzZSwgaXNXcml0YWJsZTogZmFsc2UgfSxcbiAgXTtcbiAgY29uc3QgcmVzb2x2ZWRNZXRhcyA9IGF3YWl0IHJlc29sdmVUb2tlbkFjbEV4dHJhTWV0YXMoXG4gICAgY29ubmVjdGlvbixcbiAgICB0aGF3RXh0cmFNZXRhc1BkYSxcbiAgICBjYW5UaGF3Q29udGV4dCxcbiAgICBnYXRpbmdQcm9ncmFtUHVia2V5XG4gICk7XG5cbiAgLy8gNS4gRHJvcCB0aGUgZmlyc3QgZml2ZSBjb250ZXh0IGFjY291bnRzOyB0aGUgcmVtYWluZGVyIChbdGhhd0V4dHJhTWV0YXMsIC4uLmV4dHJhc10pIGFyZSB0aGVcbiAgLy8gICAgYWNjb3VudHMgYXBwZW5kZWQgYWZ0ZXIgdGhlIHRoYXcgaW5zdHJ1Y3Rpb24ncyBmaXhlZCBuaW5lLlxuICBjb25zdCBleHRyYUFjY291bnRzID0gcmVzb2x2ZWRNZXRhcy5zbGljZSg1KS5tYXAoKG1ldGEpID0+ICh7XG4gICAgcHVia2V5OiBtZXRhLnB1YmtleS50b0Jhc2U1OCgpLFxuICAgIGlzU2lnbmVyOiBtZXRhLmlzU2lnbmVyLFxuICAgIGlzV3JpdGFibGU6IG1ldGEuaXNXcml0YWJsZSxcbiAgfSkpO1xuXG4gIHJldHVybiB7XG4gICAgYXBwbGljYWJsZTogdHJ1ZSxcbiAgICBnYXRpbmdQcm9ncmFtOiBnYXRpbmdQcm9ncmFtUHVia2V5LnRvQmFzZTU4KCksXG4gICAgZmxhZ0FjY291bnQ6IGZsYWdBY2NvdW50UGRhLnRvQmFzZTU4KCksXG4gICAgbWludENvbmZpZzogbWludENvbmZpZ1BkYS50b0Jhc2U1OCgpLFxuICAgIHRva2VuUHJvZ3JhbTogVE9LRU5fMjAyMl9QUk9HUkFNX0lELnRvQmFzZTU4KCksXG4gICAgc3lzdGVtUHJvZ3JhbTogU3lzdGVtUHJvZ3JhbS5wcm9ncmFtSWQudG9CYXNlNTgoKSxcbiAgICBleHRyYUFjY291bnRzLFxuICB9O1xufVxuIl19
@@ -0,0 +1,26 @@
1
+ import { SolTokenExtensions, SolTokenExtensionType } from '@bitgo-beta/statics';
2
+ import { type Mint } from '@solana/spl-token';
3
+ import { Commitment, Connection, PublicKey } from '@solana/web3.js';
4
+ /**
5
+ * Result of reading a Token-2022 mint's extension data.
6
+ *
7
+ * `detectedTypeNames` lists EVERY extension present on the mint — including ones BitGo does
8
+ * not model — so callers can run the onboarding safety gate (`getUnsupportedSolTokenExtensions`).
9
+ * `extensions` is the typed, storable config for the extensions BitGo does model.
10
+ */
11
+ export interface MintExtensionReadResult {
12
+ detectedTypeNames: string[];
13
+ extensions: SolTokenExtensions;
14
+ }
15
+ /** Human-readable names of every extension type present on the mint. */
16
+ export declare function extensionTypeNames(mintInfo: Mint): string[];
17
+ /** The subset of detected extensions that BitGo models. Pure — unit-testable without chain data. */
18
+ export declare function mapModeledExtensions(detectedTypeNames: readonly string[]): SolTokenExtensionType[];
19
+ /**
20
+ * Parse a decoded Token-2022 `Mint` into BitGo's extension model. Separated from the RPC call
21
+ * so it can be unit-tested against recorded mint fixtures.
22
+ */
23
+ export declare function parseMintExtensions(mintInfo: Mint): MintExtensionReadResult;
24
+ /** Fetch a Token-2022 mint and parse its extensions. Uses `finalized` commitment rules. */
25
+ export declare function readMintExtensions(connection: Connection, mint: string | PublicKey, commitment?: Commitment): Promise<MintExtensionReadResult>;
26
+ //# sourceMappingURL=tokenExtensions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokenExtensions.d.ts","sourceRoot":"","sources":["../../../src/lib/tokenExtensions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAChF,OAAO,EAUL,KAAK,IAAI,EAEV,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEpE;;;;;;GAMG;AACH,MAAM,WAAW,uBAAuB;IACtC,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,UAAU,EAAE,kBAAkB,CAAC;CAChC;AAYD,wEAAwE;AACxE,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,IAAI,GAAG,MAAM,EAAE,CAK3D;AAED,oGAAoG;AACpG,wBAAgB,oBAAoB,CAAC,iBAAiB,EAAE,SAAS,MAAM,EAAE,GAAG,qBAAqB,EAAE,CASlG;AAcD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,IAAI,GAAG,uBAAuB,CAwD3E;AAED,2FAA2F;AAC3F,wBAAsB,kBAAkB,CACtC,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,UAAU,GAAE,UAAwB,GACnC,OAAO,CAAC,uBAAuB,CAAC,CAIlC"}
@@ -0,0 +1,99 @@
1
+ import { SolTokenExtensionType } from '@bitgo-beta/statics';
2
+ import { AccountState, ExtensionType, getExtensionData, getExtensionTypes, getInterestBearingMintConfigState, getMint, getPermanentDelegate, getTransferFeeConfig, getTransferHook, TOKEN_2022_PROGRAM_ID, } from '@solana/spl-token';
3
+ import { PublicKey } from '@solana/web3.js';
4
+ /** Map from `@solana/spl-token` ExtensionType names to BitGo's modeled extension types. */
5
+ const EXTENSION_NAME_MAP = {
6
+ TransferFeeConfig: SolTokenExtensionType.TransferFee,
7
+ TransferHook: SolTokenExtensionType.TransferHook,
8
+ PermanentDelegate: SolTokenExtensionType.PermanentDelegate,
9
+ InterestBearingConfig: SolTokenExtensionType.InterestBearing,
10
+ DefaultAccountState: SolTokenExtensionType.DefaultAccountState,
11
+ ScaledUiAmountConfig: SolTokenExtensionType.ScaledUiAmount,
12
+ };
13
+ /** Human-readable names of every extension type present on the mint. */
14
+ export function extensionTypeNames(mintInfo) {
15
+ if (mintInfo.tlvData.length === 0) {
16
+ return [];
17
+ }
18
+ return getExtensionTypes(mintInfo.tlvData).map((t) => ExtensionType[t] ?? `unknown(${t})`);
19
+ }
20
+ /** The subset of detected extensions that BitGo models. Pure — unit-testable without chain data. */
21
+ export function mapModeledExtensions(detectedTypeNames) {
22
+ const modeled = [];
23
+ for (const name of detectedTypeNames) {
24
+ const mapped = EXTENSION_NAME_MAP[name];
25
+ if (mapped !== undefined && !modeled.includes(mapped)) {
26
+ modeled.push(mapped);
27
+ }
28
+ }
29
+ return modeled;
30
+ }
31
+ // No SDK-level extension-combination assert: the on-chain program already
32
+ // enforces its own invalid-combination rules at extension init
33
+ // (`check_for_invalid_mint_extension_combinations` in token-2022), and it does
34
+ // NOT forbid TransferHook + ConfidentialTransferMint. A previous assert here
35
+ // rejected that legal pair and blocked onboarding of real mints. Custody
36
+ // policy on which combinations BitGo will serve belongs to consumers
37
+ // (statics `getUnsupportedSolTokenExtensions`, the AMS onboarding gate).
38
+ function toBase58(key) {
39
+ return key ? key.toBase58() : undefined;
40
+ }
41
+ /**
42
+ * Parse a decoded Token-2022 `Mint` into BitGo's extension model. Separated from the RPC call
43
+ * so it can be unit-tested against recorded mint fixtures.
44
+ */
45
+ export function parseMintExtensions(mintInfo) {
46
+ const detectedTypeNames = extensionTypeNames(mintInfo);
47
+ const extensions = { detected: mapModeledExtensions(detectedTypeNames) };
48
+ const authorities = {
49
+ mintAuthority: toBase58(mintInfo.mintAuthority),
50
+ freezeAuthority: toBase58(mintInfo.freezeAuthority),
51
+ };
52
+ const feeConfig = getTransferFeeConfig(mintInfo);
53
+ if (feeConfig) {
54
+ extensions.transferFee = {
55
+ transferFeeBasisPoints: feeConfig.newerTransferFee.transferFeeBasisPoints,
56
+ maximumFee: feeConfig.newerTransferFee.maximumFee.toString(),
57
+ };
58
+ authorities.transferFeeConfigAuthority = toBase58(feeConfig.transferFeeConfigAuthority);
59
+ authorities.withdrawWithheldAuthority = toBase58(feeConfig.withdrawWithheldAuthority);
60
+ }
61
+ const hook = getTransferHook(mintInfo);
62
+ if (hook) {
63
+ extensions.transferHookProgramId = hook.programId.toBase58();
64
+ }
65
+ const delegate = getPermanentDelegate(mintInfo);
66
+ if (delegate?.delegate) {
67
+ authorities.permanentDelegate = delegate.delegate.toBase58();
68
+ }
69
+ const interest = getInterestBearingMintConfigState(mintInfo);
70
+ if (interest) {
71
+ extensions.interestBearing = { rateBasisPoints: interest.currentRate };
72
+ authorities.rateAuthority = toBase58(interest.rateAuthority);
73
+ }
74
+ // DefaultAccountState is a single byte (AccountState). Decoded generically to avoid depending
75
+ // on a version-specific typed getter. permissionlessThaw is NOT on-chain — resolved separately
76
+ // at onboarding; defaults false until confirmed.
77
+ const defaultStateData = getExtensionData(ExtensionType.DefaultAccountState, mintInfo.tlvData);
78
+ if (defaultStateData) {
79
+ extensions.defaultAccountState = {
80
+ frozen: defaultStateData[0] === AccountState.Frozen,
81
+ permissionlessThaw: false,
82
+ };
83
+ }
84
+ // NOTE: ScaledUiAmount config parsing (initialMultiplier) is intentionally deferred — the typed
85
+ // getter is not available in @solana/spl-token@0.4.9. The extension is still *detected* above
86
+ // (so the safety gate sees it); populating scaledUiAmount.initialMultiplier is a follow-up that
87
+ // bumps @solana/spl-token to a version exposing getScaledUiAmountConfig. See PR for 3.4.
88
+ if (Object.values(authorities).some((v) => v !== undefined)) {
89
+ extensions.authorities = authorities;
90
+ }
91
+ return { detectedTypeNames, extensions };
92
+ }
93
+ /** Fetch a Token-2022 mint and parse its extensions. Uses `finalized` commitment rules. */
94
+ export async function readMintExtensions(connection, mint, commitment = 'finalized') {
95
+ const mintPubkey = typeof mint === 'string' ? new PublicKey(mint) : mint;
96
+ const mintInfo = await getMint(connection, mintPubkey, commitment, TOKEN_2022_PROGRAM_ID);
97
+ return parseMintExtensions(mintInfo);
98
+ }
99
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW5FeHRlbnNpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi90b2tlbkV4dGVuc2lvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFzQixxQkFBcUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2hGLE9BQU8sRUFDTCxZQUFZLEVBQ1osYUFBYSxFQUNiLGdCQUFnQixFQUNoQixpQkFBaUIsRUFDakIsaUNBQWlDLEVBQ2pDLE9BQU8sRUFDUCxvQkFBb0IsRUFDcEIsb0JBQW9CLEVBQ3BCLGVBQWUsRUFFZixxQkFBcUIsR0FDdEIsTUFBTSxtQkFBbUIsQ0FBQztBQUMzQixPQUFPLEVBQTBCLFNBQVMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBY3BFLDJGQUEyRjtBQUMzRixNQUFNLGtCQUFrQixHQUFvRDtJQUMxRSxpQkFBaUIsRUFBRSxxQkFBcUIsQ0FBQyxXQUFXO0lBQ3BELFlBQVksRUFBRSxxQkFBcUIsQ0FBQyxZQUFZO0lBQ2hELGlCQUFpQixFQUFFLHFCQUFxQixDQUFDLGlCQUFpQjtJQUMxRCxxQkFBcUIsRUFBRSxxQkFBcUIsQ0FBQyxlQUFlO0lBQzVELG1CQUFtQixFQUFFLHFCQUFxQixDQUFDLG1CQUFtQjtJQUM5RCxvQkFBb0IsRUFBRSxxQkFBcUIsQ0FBQyxjQUFjO0NBQzNELENBQUM7QUFFRix3RUFBd0U7QUFDeEUsTUFBTSxVQUFVLGtCQUFrQixDQUFDLFFBQWM7SUFDL0MsSUFBSSxRQUFRLENBQUMsT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNsQyxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFDRCxPQUFPLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDN0Ys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QVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMvRixJQUFJLGdCQUFnQixFQUFFLENBQUM7UUFDckIsVUFBVSxDQUFDLG1CQUFtQixHQUFHO1lBQy9CLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsS0FBSyxZQUFZLENBQUMsTUFBTTtZQUNuRCxrQkFBa0IsRUFBRSxLQUFLO1NBQzFCLENBQUM7SUFDSixDQUFDO0lBRUQsZ0dBQWdHO0lBQ2hHLDhGQUE4RjtJQUM5RixnR0FBZ0c7SUFDaEcseUZBQXlGO0lBRXpGLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxTQUFTLENBQUMsRUFBRSxDQUFDO1FBQzVELFVBQVUsQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsVUFBVSxFQUFFLENBQUM7QUFDM0MsQ0FBQztBQUVELDJGQUEyRjtBQUMzRixNQUFNLENBQUMsS0FBSyxVQUFVLGtCQUFrQixDQUN0QyxVQUFzQixFQUN0QixJQUF3QixFQUN4QixhQUF5QixXQUFXO0lBRXBDLE1BQU0sVUFBVSxHQUFHLE9BQU8sSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUN6RSxNQUFNLFFBQVEsR0FBRyxNQUFNLE9BQU8sQ0FBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO0lBQzFGLE9BQU8sbUJBQW1CLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDdkMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNvbFRva2VuRXh0ZW5zaW9ucywgU29sVG9rZW5FeHRlbnNpb25UeXBlIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQge1xuICBBY2NvdW50U3RhdGUsXG4gIEV4dGVuc2lvblR5cGUsXG4gIGdldEV4dGVuc2lvbkRhdGEsXG4gIGdldEV4dGVuc2lvblR5cGVzLFxuICBnZXRJbnRlcmVzdEJlYXJpbmdNaW50Q29uZmlnU3RhdGUsXG4gIGdldE1pbnQsXG4gIGdldFBlcm1hbmVudERlbGVnYXRlLFxuICBnZXRUcmFuc2ZlckZlZUNvbmZpZyxcbiAgZ2V0VHJhbnNmZXJIb29rLFxuICB0eXBlIE1pbnQsXG4gIFRPS0VOXzIwMjJfUFJPR1JBTV9JRCxcbn0gZnJvbSAnQHNvbGFuYS9zcGwtdG9rZW4nO1xuaW1wb3J0IHsgQ29tbWl0bWVudCwgQ29ubmVjdGlvbiwgUHVibGljS2V5IH0gZnJvbSAnQHNvbGFuYS93ZWIzLmpzJztcblxuLyoqXG4gKiBSZXN1bHQgb2YgcmVhZGluZyBhIFRva2VuLTIwMjIgbWludCdzIGV4dGVuc2lvbiBkYXRhLlxuICpcbiAqIGBkZXRlY3RlZFR5cGVOYW1lc2AgbGlzdHMgRVZFUlkgZXh0ZW5zaW9uIHByZXNlbnQgb24gdGhlIG1pbnQg4oCUIGluY2x1ZGluZyBvbmVzIEJpdEdvIGRvZXNcbiAqIG5vdCBtb2RlbCDigJQgc28gY2FsbGVycyBjYW4gcnVuIHRoZSBvbmJvYXJkaW5nIHNhZmV0eSBnYXRlIChgZ2V0VW5zdXBwb3J0ZWRTb2xUb2tlbkV4dGVuc2lvbnNgKS5cbiAqIGBleHRlbnNpb25zYCBpcyB0aGUgdHlwZWQsIHN0b3JhYmxlIGNvbmZpZyBmb3IgdGhlIGV4dGVuc2lvbnMgQml0R28gZG9lcyBtb2RlbC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNaW50RXh0ZW5zaW9uUmVhZFJlc3VsdCB7XG4gIGRldGVjdGVkVHlwZU5hbWVzOiBzdHJpbmdbXTtcbiAgZXh0ZW5zaW9uczogU29sVG9rZW5FeHRlbnNpb25zO1xufVxuXG4vKiogTWFwIGZyb20gYEBzb2xhbmEvc3BsLXRva2VuYCBFeHRlbnNpb25UeXBlIG5hbWVzIHRvIEJpdEdvJ3MgbW9kZWxlZCBleHRlbnNpb24gdHlwZXMuICovXG5jb25zdCBFWFRFTlNJT05fTkFNRV9NQVA6IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIFNvbFRva2VuRXh0ZW5zaW9uVHlwZT4+ID0ge1xuICBUcmFuc2ZlckZlZUNvbmZpZzogU29sVG9rZW5FeHRlbnNpb25UeXBlLlRyYW5zZmVyRmVlLFxuICBUcmFuc2Zlckhvb2s6IFNvbFRva2VuRXh0ZW5zaW9uVHlwZS5UcmFuc2Zlckhvb2ssXG4gIFBlcm1hbmVudERlbGVnYXRlOiBTb2xUb2tlbkV4dGVuc2lvblR5cGUuUGVybWFuZW50RGVsZWdhdGUsXG4gIEludGVyZXN0QmVhcmluZ0NvbmZpZzogU29sVG9rZW5FeHRlbnNpb25UeXBlLkludGVyZXN0QmVhcmluZyxcbiAgRGVmYXVsdEFjY291bnRTdGF0ZTogU29sVG9rZW5FeHRlbnNpb25UeXBlLkRlZmF1bHRBY2NvdW50U3RhdGUsXG4gIFNjYWxlZFVpQW1vdW50Q29uZmlnOiBTb2xUb2tlbkV4dGVuc2lvblR5cGUuU2NhbGVkVWlBbW91bnQsXG59O1xuXG4vKiogSHVtYW4tcmVhZGFibGUgbmFtZXMgb2YgZXZlcnkgZXh0ZW5zaW9uIHR5cGUgcHJlc2VudCBvbiB0aGUgbWludC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHRlbnNpb25UeXBlTmFtZXMobWludEluZm86IE1pbnQpOiBzdHJpbmdbXSB7XG4gIGlmIChtaW50SW5mby50bHZEYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICByZXR1cm4gZ2V0RXh0ZW5zaW9uVHlwZXMobWludEluZm8udGx2RGF0YSkubWFwKCh0KSA9PiBFeHRlbnNpb25UeXBlW3RdID8/IGB1bmtub3duKCR7dH0pYCk7XG59XG5cbi8qKiBUaGUgc3Vic2V0IG9mIGRldGVjdGVkIGV4dGVuc2lvbnMgdGhhdCBCaXRHbyBtb2RlbHMuIFB1cmUg4oCUIHVuaXQtdGVzdGFibGUgd2l0aG91dCBjaGFpbiBkYXRhLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1hcE1vZGVsZWRFeHRlbnNpb25zKGRldGVjdGVkVHlwZU5hbWVzOiByZWFkb25seSBzdHJpbmdbXSk6IFNvbFRva2VuRXh0ZW5zaW9uVHlwZVtdIHtcbiAgY29uc3QgbW9kZWxlZDogU29sVG9rZW5FeHRlbnNpb25UeXBlW10gPSBbXTtcbiAgZm9yIChjb25zdCBuYW1lIG9mIGRldGVjdGVkVHlwZU5hbWVzKSB7XG4gICAgY29uc3QgbWFwcGVkID0gRVhURU5TSU9OX05BTUVfTUFQW25hbWVdO1xuICAgIGlmIChtYXBwZWQgIT09IHVuZGVmaW5lZCAmJiAhbW9kZWxlZC5pbmNsdWRlcyhtYXBwZWQpKSB7XG4gICAgICBtb2RlbGVkLnB1c2gobWFwcGVkKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1vZGVsZWQ7XG59XG5cbi8vIE5vIFNESy1sZXZlbCBleHRlbnNpb24tY29tYmluYXRpb24gYXNzZXJ0OiB0aGUgb24tY2hhaW4gcHJvZ3JhbSBhbHJlYWR5XG4vLyBlbmZvcmNlcyBpdHMgb3duIGludmFsaWQtY29tYmluYXRpb24gcnVsZXMgYXQgZXh0ZW5zaW9uIGluaXRcbi8vIChgY2hlY2tfZm9yX2ludmFsaWRfbWludF9leHRlbnNpb25fY29tYmluYXRpb25zYCBpbiB0b2tlbi0yMDIyKSwgYW5kIGl0IGRvZXNcbi8vIE5PVCBmb3JiaWQgVHJhbnNmZXJIb29rICsgQ29uZmlkZW50aWFsVHJhbnNmZXJNaW50LiBBIHByZXZpb3VzIGFzc2VydCBoZXJlXG4vLyByZWplY3RlZCB0aGF0IGxlZ2FsIHBhaXIgYW5kIGJsb2NrZWQgb25ib2FyZGluZyBvZiByZWFsIG1pbnRzLiBDdXN0b2R5XG4vLyBwb2xpY3kgb24gd2hpY2ggY29tYmluYXRpb25zIEJpdEdvIHdpbGwgc2VydmUgYmVsb25ncyB0byBjb25zdW1lcnNcbi8vIChzdGF0aWNzIGBnZXRVbnN1cHBvcnRlZFNvbFRva2VuRXh0ZW5zaW9uc2AsIHRoZSBBTVMgb25ib2FyZGluZyBnYXRlKS5cblxuZnVuY3Rpb24gdG9CYXNlNTgoa2V5OiBQdWJsaWNLZXkgfCBudWxsKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIGtleSA/IGtleS50b0Jhc2U1OCgpIDogdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFBhcnNlIGEgZGVjb2RlZCBUb2tlbi0yMDIyIGBNaW50YCBpbnRvIEJpdEdvJ3MgZXh0ZW5zaW9uIG1vZGVsLiBTZXBhcmF0ZWQgZnJvbSB0aGUgUlBDIGNhbGxcbiAqIHNvIGl0IGNhbiBiZSB1bml0LXRlc3RlZCBhZ2FpbnN0IHJlY29yZGVkIG1pbnQgZml4dHVyZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU1pbnRFeHRlbnNpb25zKG1pbnRJbmZvOiBNaW50KTogTWludEV4dGVuc2lvblJlYWRSZXN1bHQge1xuICBjb25zdCBkZXRlY3RlZFR5cGVOYW1lcyA9IGV4dGVuc2lvblR5cGVOYW1lcyhtaW50SW5mbyk7XG5cbiAgY29uc3QgZXh0ZW5zaW9uczogU29sVG9rZW5FeHRlbnNpb25zID0geyBkZXRlY3RlZDogbWFwTW9kZWxlZEV4dGVuc2lvbnMoZGV0ZWN0ZWRUeXBlTmFtZXMpIH07XG4gIGNvbnN0IGF1dGhvcml0aWVzOiBOb25OdWxsYWJsZTxTb2xUb2tlbkV4dGVuc2lvbnNbJ2F1dGhvcml0aWVzJ10+ID0ge1xuICAgIG1pbnRBdXRob3JpdHk6IHRvQmFzZTU4KG1pbnRJbmZvLm1pbnRBdXRob3JpdHkpLFxuICAgIGZyZWV6ZUF1dGhvcml0eTogdG9CYXNlNTgobWludEluZm8uZnJlZXplQXV0aG9yaXR5KSxcbiAgfTtcblxuICBjb25zdCBmZWVDb25maWcgPSBnZXRUcmFuc2ZlckZlZUNvbmZpZyhtaW50SW5mbyk7XG4gIGlmIChmZWVDb25maWcpIHtcbiAgICBleHRlbnNpb25zLnRyYW5zZmVyRmVlID0ge1xuICAgICAgdHJhbnNmZXJGZWVCYXNpc1BvaW50czogZmVlQ29uZmlnLm5ld2VyVHJhbnNmZXJGZWUudHJhbnNmZXJGZWVCYXNpc1BvaW50cyxcbiAgICAgIG1heGltdW1GZWU6IGZlZUNvbmZpZy5uZXdlclRyYW5zZmVyRmVlLm1heGltdW1GZWUudG9TdHJpbmcoKSxcbiAgICB9O1xuICAgIGF1dGhvcml0aWVzLnRyYW5zZmVyRmVlQ29uZmlnQXV0aG9yaXR5ID0gdG9CYXNlNTgoZmVlQ29uZmlnLnRyYW5zZmVyRmVlQ29uZmlnQXV0aG9yaXR5KTtcbiAgICBhdXRob3JpdGllcy53aXRoZHJhd1dpdGhoZWxkQXV0aG9yaXR5ID0gdG9CYXNlNTgoZmVlQ29uZmlnLndpdGhkcmF3V2l0aGhlbGRBdXRob3JpdHkpO1xuICB9XG5cbiAgY29uc3QgaG9vayA9IGdldFRyYW5zZmVySG9vayhtaW50SW5mbyk7XG4gIGlmIChob29rKSB7XG4gICAgZXh0ZW5zaW9ucy50cmFuc2Zlckhvb2tQcm9ncmFtSWQgPSBob29rLnByb2dyYW1JZC50b0Jhc2U1OCgpO1xuICB9XG5cbiAgY29uc3QgZGVsZWdhdGUgPSBnZXRQZXJtYW5lbnREZWxlZ2F0ZShtaW50SW5mbyk7XG4gIGlmIChkZWxlZ2F0ZT8uZGVsZWdhdGUpIHtcbiAgICBhdXRob3JpdGllcy5wZXJtYW5lbnREZWxlZ2F0ZSA9IGRlbGVnYXRlLmRlbGVnYXRlLnRvQmFzZTU4KCk7XG4gIH1cblxuICBjb25zdCBpbnRlcmVzdCA9IGdldEludGVyZXN0QmVhcmluZ01pbnRDb25maWdTdGF0ZShtaW50SW5mbyk7XG4gIGlmIChpbnRlcmVzdCkge1xuICAgIGV4dGVuc2lvbnMuaW50ZXJlc3RCZWFyaW5nID0geyByYXRlQmFzaXNQb2ludHM6IGludGVyZXN0LmN1cnJlbnRSYXRlIH07XG4gICAgYXV0aG9yaXRpZXMucmF0ZUF1dGhvcml0eSA9IHRvQmFzZTU4KGludGVyZXN0LnJhdGVBdXRob3JpdHkpO1xuICB9XG5cbiAgLy8gRGVmYXVsdEFjY291bnRTdGF0ZSBpcyBhIHNpbmdsZSBieXRlIChBY2NvdW50U3RhdGUpLiBEZWNvZGVkIGdlbmVyaWNhbGx5IHRvIGF2b2lkIGRlcGVuZGluZ1xuICAvLyBvbiBhIHZlcnNpb24tc3BlY2lmaWMgdHlwZWQgZ2V0dGVyLiBwZXJtaXNzaW9ubGVzc1RoYXcgaXMgTk9UIG9uLWNoYWluIOKAlCByZXNvbHZlZCBzZXBhcmF0ZWx5XG4gIC8vIGF0IG9uYm9hcmRpbmc7IGRlZmF1bHRzIGZhbHNlIHVudGlsIGNvbmZpcm1lZC5cbiAgY29uc3QgZGVmYXVsdFN0YXRlRGF0YSA9IGdldEV4dGVuc2lvbkRhdGEoRXh0ZW5zaW9uVHlwZS5EZWZhdWx0QWNjb3VudFN0YXRlLCBtaW50SW5mby50bHZEYXRhKTtcbiAgaWYgKGRlZmF1bHRTdGF0ZURhdGEpIHtcbiAgICBleHRlbnNpb25zLmRlZmF1bHRBY2NvdW50U3RhdGUgPSB7XG4gICAgICBmcm96ZW46IGRlZmF1bHRTdGF0ZURhdGFbMF0gPT09IEFjY291bnRTdGF0ZS5Gcm96ZW4sXG4gICAgICBwZXJtaXNzaW9ubGVzc1RoYXc6IGZhbHNlLFxuICAgIH07XG4gIH1cblxuICAvLyBOT1RFOiBTY2FsZWRVaUFtb3VudCBjb25maWcgcGFyc2luZyAoaW5pdGlhbE11bHRpcGxpZXIpIGlzIGludGVudGlvbmFsbHkgZGVmZXJyZWQg4oCUIHRoZSB0eXBlZFxuICAvLyBnZXR0ZXIgaXMgbm90IGF2YWlsYWJsZSBpbiBAc29sYW5hL3NwbC10b2tlbkAwLjQuOS4gVGhlIGV4dGVuc2lvbiBpcyBzdGlsbCAqZGV0ZWN0ZWQqIGFib3ZlXG4gIC8vIChzbyB0aGUgc2FmZXR5IGdhdGUgc2VlcyBpdCk7IHBvcHVsYXRpbmcgc2NhbGVkVWlBbW91bnQuaW5pdGlhbE11bHRpcGxpZXIgaXMgYSBmb2xsb3ctdXAgdGhhdFxuICAvLyBidW1wcyBAc29sYW5hL3NwbC10b2tlbiB0byBhIHZlcnNpb24gZXhwb3NpbmcgZ2V0U2NhbGVkVWlBbW91bnRDb25maWcuIFNlZSBQUiBmb3IgMy40LlxuXG4gIGlmIChPYmplY3QudmFsdWVzKGF1dGhvcml0aWVzKS5zb21lKCh2KSA9PiB2ICE9PSB1bmRlZmluZWQpKSB7XG4gICAgZXh0ZW5zaW9ucy5hdXRob3JpdGllcyA9IGF1dGhvcml0aWVzO1xuICB9XG5cbiAgcmV0dXJuIHsgZGV0ZWN0ZWRUeXBlTmFtZXMsIGV4dGVuc2lvbnMgfTtcbn1cblxuLyoqIEZldGNoIGEgVG9rZW4tMjAyMiBtaW50IGFuZCBwYXJzZSBpdHMgZXh0ZW5zaW9ucy4gVXNlcyBgZmluYWxpemVkYCBjb21taXRtZW50IHJ1bGVzLiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWRNaW50RXh0ZW5zaW9ucyhcbiAgY29ubmVjdGlvbjogQ29ubmVjdGlvbixcbiAgbWludDogc3RyaW5nIHwgUHVibGljS2V5LFxuICBjb21taXRtZW50OiBDb21taXRtZW50ID0gJ2ZpbmFsaXplZCdcbik6IFByb21pc2U8TWludEV4dGVuc2lvblJlYWRSZXN1bHQ+IHtcbiAgY29uc3QgbWludFB1YmtleSA9IHR5cGVvZiBtaW50ID09PSAnc3RyaW5nJyA/IG5ldyBQdWJsaWNLZXkobWludCkgOiBtaW50O1xuICBjb25zdCBtaW50SW5mbyA9IGF3YWl0IGdldE1pbnQoY29ubmVjdGlvbiwgbWludFB1YmtleSwgY29tbWl0bWVudCwgVE9LRU5fMjAyMl9QUk9HUkFNX0lEKTtcbiAgcmV0dXJuIHBhcnNlTWludEV4dGVuc2lvbnMobWludEluZm8pO1xufVxuIl19