@bitgo-beta/sdk-coin-sol 7.6.4-beta.45 → 7.6.4-beta.451
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.
- package/dist/cjs/src/bigint-buffer-guard.d.ts.map +1 -0
- package/dist/cjs/src/bigint-buffer-guard.js +29 -0
- package/dist/cjs/src/config/token2022StaticConfig.d.ts.map +1 -0
- package/dist/cjs/src/config/token2022StaticConfig.js +50 -0
- package/dist/cjs/src/index.d.ts.map +1 -0
- package/dist/{src → cjs/src}/index.js +1 -1
- package/dist/cjs/src/lib/ataInitializationBuilder.d.ts.map +1 -0
- package/dist/{src → cjs/src}/lib/ataInitializationBuilder.js +16 -12
- package/dist/cjs/src/lib/closeAtaBuilder.d.ts +51 -0
- package/dist/cjs/src/lib/closeAtaBuilder.d.ts.map +1 -0
- package/dist/cjs/src/lib/closeAtaBuilder.js +147 -0
- package/dist/{src → cjs/src}/lib/constants.d.ts +24 -0
- package/dist/cjs/src/lib/constants.d.ts.map +1 -0
- package/dist/cjs/src/lib/constants.js +196 -0
- package/dist/cjs/src/lib/customInstructionBuilder.d.ts.map +1 -0
- package/dist/cjs/src/lib/customInstructionBuilder.js +289 -0
- package/dist/cjs/src/lib/explainTransactionWasm.d.ts +21 -0
- package/dist/cjs/src/lib/explainTransactionWasm.d.ts.map +1 -0
- package/dist/cjs/src/lib/explainTransactionWasm.js +264 -0
- package/dist/{src → cjs/src}/lib/iface.d.ts +20 -2
- package/dist/cjs/src/lib/iface.d.ts.map +1 -0
- package/dist/cjs/src/lib/iface.js +7 -0
- package/dist/{src → cjs/src}/lib/index.d.ts +1 -0
- package/dist/cjs/src/lib/index.d.ts.map +1 -0
- package/dist/{src → cjs/src}/lib/index.js +4 -2
- package/dist/{src → cjs/src}/lib/instructionParamsFactory.d.ts +1 -0
- package/dist/cjs/src/lib/instructionParamsFactory.d.ts.map +1 -0
- package/dist/cjs/src/lib/instructionParamsFactory.js +1059 -0
- package/dist/cjs/src/lib/jitoStakePoolOperations.d.ts.map +1 -0
- package/dist/cjs/src/lib/jitoStakePoolOperations.js +200 -0
- package/dist/cjs/src/lib/keyPair.d.ts.map +1 -0
- package/dist/cjs/src/lib/keyPair.js +63 -0
- package/dist/cjs/src/lib/messages/index.d.ts.map +1 -0
- package/dist/{src → cjs/src}/lib/messages/index.js +1 -1
- package/dist/cjs/src/lib/messages/messageBuilderFactory.d.ts.map +1 -0
- package/dist/cjs/src/lib/messages/messageBuilderFactory.js +19 -0
- package/dist/cjs/src/lib/recoverNestedAtaBuilder.d.ts +25 -0
- package/dist/cjs/src/lib/recoverNestedAtaBuilder.d.ts.map +1 -0
- package/dist/cjs/src/lib/recoverNestedAtaBuilder.js +90 -0
- package/dist/cjs/src/lib/solInstructionFactory.d.ts.map +1 -0
- package/dist/cjs/src/lib/solInstructionFactory.js +595 -0
- package/dist/cjs/src/lib/stakingActivateBuilder.d.ts.map +1 -0
- package/dist/cjs/src/lib/stakingActivateBuilder.js +120 -0
- package/dist/cjs/src/lib/stakingAuthorizeBuilder.d.ts.map +1 -0
- package/dist/cjs/src/lib/stakingAuthorizeBuilder.js +89 -0
- package/dist/cjs/src/lib/stakingDeactivateBuilder.d.ts.map +1 -0
- package/dist/cjs/src/lib/stakingDeactivateBuilder.js +208 -0
- package/dist/cjs/src/lib/stakingDelegateBuilder.d.ts.map +1 -0
- package/dist/cjs/src/lib/stakingDelegateBuilder.js +120 -0
- package/dist/cjs/src/lib/stakingRawMsgAuthorizeBuilder.d.ts.map +1 -0
- package/dist/cjs/src/lib/stakingRawMsgAuthorizeBuilder.js +110 -0
- package/dist/cjs/src/lib/stakingWithdrawBuilder.d.ts.map +1 -0
- package/dist/cjs/src/lib/stakingWithdrawBuilder.js +78 -0
- package/dist/cjs/src/lib/token2022Config.d.ts.map +1 -0
- package/dist/cjs/src/lib/token2022Config.js +27 -0
- package/dist/cjs/src/lib/tokenTransferBuilder.d.ts.map +1 -0
- package/dist/cjs/src/lib/tokenTransferBuilder.js +194 -0
- package/dist/cjs/src/lib/transaction.d.ts.map +1 -0
- package/dist/cjs/src/lib/transaction.js +612 -0
- package/dist/cjs/src/lib/transactionBuilder.d.ts.map +1 -0
- package/dist/cjs/src/lib/transactionBuilder.js +380 -0
- package/dist/{src → cjs/src}/lib/transactionBuilderFactory.d.ts +5 -0
- package/dist/cjs/src/lib/transactionBuilderFactory.d.ts.map +1 -0
- package/dist/cjs/src/lib/transactionBuilderFactory.js +209 -0
- package/dist/cjs/src/lib/transferBuilder.d.ts.map +1 -0
- package/dist/cjs/src/lib/transferBuilder.js +70 -0
- package/dist/cjs/src/lib/transferBuilderV2.d.ts.map +1 -0
- package/dist/cjs/src/lib/transferBuilderV2.js +210 -0
- package/dist/cjs/src/lib/utils.d.ts.map +1 -0
- package/dist/cjs/src/lib/utils.js +604 -0
- package/dist/cjs/src/lib/walletInitializationBuilder.d.ts.map +1 -0
- package/dist/cjs/src/lib/walletInitializationBuilder.js +71 -0
- package/dist/cjs/src/register.d.ts.map +1 -0
- package/dist/cjs/src/register.js +15 -0
- package/dist/{src → cjs/src}/sol.d.ts +53 -0
- package/dist/cjs/src/sol.d.ts.map +1 -0
- package/dist/cjs/src/sol.js +1464 -0
- package/dist/{src → cjs/src}/solToken.d.ts +5 -0
- package/dist/cjs/src/solToken.d.ts.map +1 -0
- package/dist/cjs/src/solToken.js +76 -0
- package/dist/cjs/src/tsol.d.ts.map +1 -0
- package/dist/cjs/src/tsol.js +24 -0
- package/dist/{test → cjs/test}/fixtures/sol.d.ts.map +1 -1
- package/dist/cjs/test/fixtures/sol.js +1433 -0
- package/dist/{test → cjs/test}/resources/sol.d.ts +27 -27
- package/dist/cjs/test/resources/sol.d.ts.map +1 -0
- package/dist/cjs/test/resources/sol.js +320 -0
- package/dist/cjs/test/unit/explainTransactionWasm.d.ts +5 -0
- package/dist/cjs/test/unit/explainTransactionWasm.d.ts.map +1 -0
- package/dist/cjs/test/unit/explainTransactionWasm.js +26 -0
- package/dist/cjs/test/unit/fixtures/solBackupKey.d.ts.map +1 -0
- package/dist/cjs/test/unit/fixtures/solBackupKey.js +8 -0
- package/dist/cjs/test/unit/getBuilderFactory.d.ts.map +1 -0
- package/dist/cjs/test/unit/getBuilderFactory.js +10 -0
- package/dist/cjs/test/unit/instructionParamsFactory.d.ts.map +1 -0
- package/dist/cjs/test/unit/instructionParamsFactory.js +412 -0
- package/dist/cjs/test/unit/instructionParamsFactory.staking.d.ts.map +1 -0
- package/dist/cjs/test/unit/instructionParamsFactory.staking.js +1059 -0
- package/dist/cjs/test/unit/jitoWasmVerification.d.ts +2 -0
- package/dist/cjs/test/unit/jitoWasmVerification.d.ts.map +1 -0
- package/dist/cjs/test/unit/jitoWasmVerification.js +78 -0
- package/dist/{test → cjs/test}/unit/keyPair.d.ts.map +1 -1
- package/dist/cjs/test/unit/keyPair.js +177 -0
- package/dist/cjs/test/unit/messages/messageBuilderFactory.d.ts.map +1 -0
- package/dist/cjs/test/unit/messages/messageBuilderFactory.js +118 -0
- package/dist/cjs/test/unit/messages/simpleMessageBuilder.d.ts.map +1 -0
- package/dist/cjs/test/unit/messages/simpleMessageBuilder.js +194 -0
- package/dist/{test → cjs/test}/unit/sol.d.ts.map +1 -1
- package/dist/cjs/test/unit/sol.js +3504 -0
- package/dist/cjs/test/unit/solInstructionFactory.d.ts.map +1 -0
- package/dist/cjs/test/unit/solInstructionFactory.js +454 -0
- package/dist/cjs/test/unit/solToken.d.ts.map +1 -0
- package/dist/cjs/test/unit/solToken.js +37 -0
- package/dist/cjs/test/unit/transaction.d.ts.map +1 -0
- package/dist/cjs/test/unit/transaction.js +1108 -0
- package/dist/cjs/test/unit/transactionBuilder/StakingWithdrawBuilder.d.ts.map +1 -0
- package/dist/cjs/test/unit/transactionBuilder/StakingWithdrawBuilder.js +202 -0
- package/dist/cjs/test/unit/transactionBuilder/ataInitBuilder.d.ts.map +1 -0
- package/dist/cjs/test/unit/transactionBuilder/ataInitBuilder.js +471 -0
- package/dist/cjs/test/unit/transactionBuilder/closeAtaBuilder.d.ts +2 -0
- package/dist/cjs/test/unit/transactionBuilder/closeAtaBuilder.d.ts.map +1 -0
- package/dist/cjs/test/unit/transactionBuilder/closeAtaBuilder.js +333 -0
- package/dist/cjs/test/unit/transactionBuilder/customInstructionBuilder.d.ts.map +1 -0
- package/dist/cjs/test/unit/transactionBuilder/customInstructionBuilder.js +413 -0
- package/dist/cjs/test/unit/transactionBuilder/stakingActivateBuilder.d.ts.map +1 -0
- package/dist/cjs/test/unit/transactionBuilder/stakingActivateBuilder.js +430 -0
- package/dist/cjs/test/unit/transactionBuilder/stakingAuthorizeBuilder.d.ts.map +1 -0
- package/dist/cjs/test/unit/transactionBuilder/stakingAuthorizeBuilder.js +157 -0
- package/dist/cjs/test/unit/transactionBuilder/stakingDeactivateBuilder.d.ts.map +1 -0
- package/dist/cjs/test/unit/transactionBuilder/stakingDeactivateBuilder.js +384 -0
- package/dist/cjs/test/unit/transactionBuilder/stakingDelegateBuilder.d.ts.map +1 -0
- package/dist/cjs/test/unit/transactionBuilder/stakingDelegateBuilder.js +224 -0
- package/dist/cjs/test/unit/transactionBuilder/stakingRawMsgAuthorizeBuilder.d.ts.map +1 -0
- package/dist/cjs/test/unit/transactionBuilder/stakingRawMsgAuthorizeBuilder.js +259 -0
- package/dist/cjs/test/unit/transactionBuilder/tokenTransferBuilder.d.ts.map +1 -0
- package/dist/cjs/test/unit/transactionBuilder/tokenTransferBuilder.js +787 -0
- package/dist/cjs/test/unit/transactionBuilder/transactionBuilder.d.ts.map +1 -0
- package/dist/cjs/test/unit/transactionBuilder/transactionBuilder.js +495 -0
- package/dist/cjs/test/unit/transactionBuilder/transferBuilder.d.ts.map +1 -0
- package/dist/cjs/test/unit/transactionBuilder/transferBuilder.js +286 -0
- package/dist/cjs/test/unit/transactionBuilder/transferBuilderV2.d.ts.map +1 -0
- package/dist/cjs/test/unit/transactionBuilder/transferBuilderV2.js +862 -0
- package/dist/cjs/test/unit/transactionBuilder/walletInitBuilder.d.ts.map +1 -0
- package/dist/cjs/test/unit/transactionBuilder/walletInitBuilder.js +259 -0
- package/dist/{test → cjs/test}/unit/utils.d.ts.map +1 -1
- package/dist/cjs/test/unit/utils.js +517 -0
- package/dist/cjs/test/unit/versionedTransaction.d.ts.map +1 -0
- package/dist/cjs/test/unit/versionedTransaction.js +207 -0
- package/dist/cjs/tsconfig.tsbuildinfo +1 -0
- package/dist/esm/bigint-buffer-guard.d.ts +1 -0
- package/dist/esm/config/token2022StaticConfig.d.ts +3 -0
- package/dist/esm/config/token2022StaticConfig.js +47 -0
- package/dist/esm/index.d.ts +7 -0
- package/dist/esm/index.js +7 -0
- package/dist/esm/lib/ataInitializationBuilder.d.ts +47 -0
- package/dist/{src → esm}/lib/ataInitializationBuilder.d.ts.map +1 -1
- package/dist/esm/lib/ataInitializationBuilder.js +160 -0
- package/dist/esm/lib/closeAtaBuilder.d.ts +51 -0
- package/dist/esm/lib/closeAtaBuilder.d.ts.map +1 -0
- package/dist/esm/lib/closeAtaBuilder.js +140 -0
- package/dist/esm/lib/constants.d.ts +164 -0
- package/dist/esm/lib/constants.d.ts.map +1 -0
- package/dist/esm/lib/constants.js +193 -0
- package/dist/esm/lib/customInstructionBuilder.d.ts +72 -0
- package/dist/esm/lib/customInstructionBuilder.js +282 -0
- package/dist/esm/lib/explainTransactionWasm.d.ts +21 -0
- package/dist/esm/lib/explainTransactionWasm.d.ts.map +1 -0
- package/dist/esm/lib/explainTransactionWasm.js +261 -0
- package/dist/esm/lib/iface.d.ts +262 -0
- package/dist/esm/lib/iface.d.ts.map +1 -0
- package/dist/esm/lib/iface.js +3 -0
- package/dist/esm/lib/index.d.ts +23 -0
- package/dist/{src → esm}/lib/index.d.ts.map +1 -1
- package/dist/esm/lib/index.js +23 -0
- package/dist/esm/lib/instructionParamsFactory.d.ts +13 -0
- package/dist/{src → esm}/lib/instructionParamsFactory.d.ts.map +1 -1
- package/dist/esm/lib/instructionParamsFactory.js +1052 -0
- package/dist/esm/lib/jitoStakePoolOperations.d.ts +113 -0
- package/dist/esm/lib/jitoStakePoolOperations.js +189 -0
- package/dist/esm/lib/keyPair.d.ts +26 -0
- package/dist/esm/lib/keyPair.js +59 -0
- package/dist/esm/lib/messages/index.d.ts +2 -0
- package/dist/esm/lib/messages/index.js +2 -0
- package/dist/esm/lib/messages/messageBuilderFactory.d.ts +7 -0
- package/dist/{src → esm}/lib/messages/messageBuilderFactory.js +5 -9
- package/dist/esm/lib/recoverNestedAtaBuilder.d.ts +25 -0
- package/dist/esm/lib/recoverNestedAtaBuilder.d.ts.map +1 -0
- package/dist/esm/lib/recoverNestedAtaBuilder.js +83 -0
- package/dist/esm/lib/solInstructionFactory.d.ts +10 -0
- package/dist/esm/lib/solInstructionFactory.d.ts.map +1 -0
- package/dist/esm/lib/solInstructionFactory.js +589 -0
- package/dist/esm/lib/stakingActivateBuilder.d.ts +59 -0
- package/dist/esm/lib/stakingActivateBuilder.js +113 -0
- package/dist/esm/lib/stakingAuthorizeBuilder.d.ts +43 -0
- package/dist/esm/lib/stakingAuthorizeBuilder.js +82 -0
- package/dist/esm/lib/stakingDeactivateBuilder.d.ts +81 -0
- package/dist/{src → esm}/lib/stakingDeactivateBuilder.js +31 -38
- package/dist/esm/lib/stakingDelegateBuilder.d.ts +42 -0
- package/dist/esm/lib/stakingDelegateBuilder.js +113 -0
- package/dist/esm/lib/stakingRawMsgAuthorizeBuilder.d.ts +33 -0
- package/dist/esm/lib/stakingRawMsgAuthorizeBuilder.js +103 -0
- package/dist/esm/lib/stakingWithdrawBuilder.d.ts +31 -0
- package/dist/esm/lib/stakingWithdrawBuilder.js +71 -0
- package/dist/esm/lib/token2022Config.d.ts +44 -0
- package/dist/esm/lib/token2022Config.js +23 -0
- package/dist/esm/lib/tokenTransferBuilder.d.ts +41 -0
- package/dist/{src → esm}/lib/tokenTransferBuilder.d.ts.map +1 -1
- package/dist/esm/lib/tokenTransferBuilder.js +187 -0
- package/dist/esm/lib/transaction.d.ts +103 -0
- package/dist/esm/lib/transaction.d.ts.map +1 -0
- package/dist/esm/lib/transaction.js +605 -0
- package/dist/esm/lib/transactionBuilder.d.ts +128 -0
- package/dist/esm/lib/transactionBuilder.js +373 -0
- package/dist/esm/lib/transactionBuilderFactory.d.ts +120 -0
- package/dist/esm/lib/transactionBuilderFactory.d.ts.map +1 -0
- package/dist/esm/lib/transactionBuilderFactory.js +205 -0
- package/dist/esm/lib/transferBuilder.d.ts +26 -0
- package/dist/esm/lib/transferBuilder.js +63 -0
- package/dist/esm/lib/transferBuilderV2.d.ts +43 -0
- package/dist/esm/lib/transferBuilderV2.js +203 -0
- package/dist/esm/lib/utils.d.ts +200 -0
- package/dist/{src → esm}/lib/utils.d.ts.map +1 -1
- package/dist/esm/lib/utils.js +567 -0
- package/dist/esm/lib/walletInitializationBuilder.d.ts +26 -0
- package/dist/esm/lib/walletInitializationBuilder.js +64 -0
- package/dist/esm/register.d.ts +3 -0
- package/dist/esm/register.js +11 -0
- package/dist/esm/sol.d.ts +280 -0
- package/dist/esm/sol.d.ts.map +1 -0
- package/dist/esm/sol.js +1423 -0
- package/dist/esm/solToken.d.ts +42 -0
- package/dist/{src → esm}/solToken.d.ts.map +1 -1
- package/dist/esm/solToken.js +72 -0
- package/dist/esm/tsol.d.ts +11 -0
- package/dist/esm/tsol.js +20 -0
- package/package.json +35 -16
- package/dist/src/config/token2022StaticConfig.js +0 -50
- package/dist/src/lib/closeAtaBuilder.d.ts +0 -19
- package/dist/src/lib/closeAtaBuilder.d.ts.map +0 -1
- package/dist/src/lib/closeAtaBuilder.js +0 -69
- package/dist/src/lib/constants.d.ts.map +0 -1
- package/dist/src/lib/constants.js +0 -171
- package/dist/src/lib/customInstructionBuilder.js +0 -289
- package/dist/src/lib/iface.d.ts.map +0 -1
- package/dist/src/lib/iface.js +0 -7
- package/dist/src/lib/instructionParamsFactory.js +0 -1036
- package/dist/src/lib/jitoStakePoolOperations.js +0 -200
- package/dist/src/lib/keyPair.js +0 -63
- package/dist/src/lib/solInstructionFactory.d.ts.map +0 -1
- package/dist/src/lib/solInstructionFactory.js +0 -572
- package/dist/src/lib/stakingActivateBuilder.js +0 -120
- package/dist/src/lib/stakingAuthorizeBuilder.js +0 -89
- package/dist/src/lib/stakingDelegateBuilder.js +0 -120
- package/dist/src/lib/stakingRawMsgAuthorizeBuilder.js +0 -110
- package/dist/src/lib/stakingWithdrawBuilder.js +0 -78
- package/dist/src/lib/token2022Config.js +0 -27
- package/dist/src/lib/tokenTransferBuilder.js +0 -188
- package/dist/src/lib/transaction.d.ts.map +0 -1
- package/dist/src/lib/transaction.js +0 -595
- package/dist/src/lib/transactionBuilder.js +0 -380
- package/dist/src/lib/transactionBuilderFactory.d.ts.map +0 -1
- package/dist/src/lib/transactionBuilderFactory.js +0 -202
- package/dist/src/lib/transferBuilder.js +0 -70
- package/dist/src/lib/transferBuilderV2.js +0 -210
- package/dist/src/lib/utils.js +0 -589
- package/dist/src/lib/walletInitializationBuilder.js +0 -71
- package/dist/src/register.js +0 -15
- package/dist/src/sol.d.ts.map +0 -1
- package/dist/src/sol.js +0 -1285
- package/dist/src/solToken.js +0 -69
- package/dist/src/tsol.js +0 -24
- package/dist/test/fixtures/sol.js +0 -1433
- package/dist/test/resources/sol.d.ts.map +0 -1
- package/dist/test/resources/sol.js +0 -320
- package/dist/test/unit/fixtures/solBackupKey.d.ts.map +0 -1
- package/dist/test/unit/fixtures/solBackupKey.js +0 -8
- package/dist/test/unit/getBuilderFactory.d.ts.map +0 -1
- package/dist/test/unit/getBuilderFactory.js +0 -10
- package/dist/test/unit/instructionParamsFactory.d.ts.map +0 -1
- package/dist/test/unit/instructionParamsFactory.js +0 -412
- package/dist/test/unit/instructionParamsFactory.staking.d.ts.map +0 -1
- package/dist/test/unit/instructionParamsFactory.staking.js +0 -1059
- package/dist/test/unit/keyPair.js +0 -177
- package/dist/test/unit/messages/messageBuilderFactory.d.ts.map +0 -1
- package/dist/test/unit/messages/messageBuilderFactory.js +0 -118
- package/dist/test/unit/messages/simpleMessageBuilder.d.ts.map +0 -1
- package/dist/test/unit/messages/simpleMessageBuilder.js +0 -194
- package/dist/test/unit/sol.js +0 -3108
- package/dist/test/unit/solInstructionFactory.d.ts.map +0 -1
- package/dist/test/unit/solInstructionFactory.js +0 -454
- package/dist/test/unit/solToken.d.ts.map +0 -1
- package/dist/test/unit/solToken.js +0 -31
- package/dist/test/unit/transaction.d.ts.map +0 -1
- package/dist/test/unit/transaction.js +0 -983
- package/dist/test/unit/transactionBuilder/StakingWithdrawBuilder.d.ts.map +0 -1
- package/dist/test/unit/transactionBuilder/StakingWithdrawBuilder.js +0 -202
- package/dist/test/unit/transactionBuilder/ataInitBuilder.d.ts.map +0 -1
- package/dist/test/unit/transactionBuilder/ataInitBuilder.js +0 -471
- package/dist/test/unit/transactionBuilder/customInstructionBuilder.d.ts.map +0 -1
- package/dist/test/unit/transactionBuilder/customInstructionBuilder.js +0 -413
- package/dist/test/unit/transactionBuilder/stakingActivateBuilder.d.ts.map +0 -1
- package/dist/test/unit/transactionBuilder/stakingActivateBuilder.js +0 -430
- package/dist/test/unit/transactionBuilder/stakingAuthorizeBuilder.d.ts.map +0 -1
- package/dist/test/unit/transactionBuilder/stakingAuthorizeBuilder.js +0 -157
- package/dist/test/unit/transactionBuilder/stakingDeactivateBuilder.d.ts.map +0 -1
- package/dist/test/unit/transactionBuilder/stakingDeactivateBuilder.js +0 -384
- package/dist/test/unit/transactionBuilder/stakingDelegateBuilder.d.ts.map +0 -1
- package/dist/test/unit/transactionBuilder/stakingDelegateBuilder.js +0 -224
- package/dist/test/unit/transactionBuilder/stakingRawMsgAuthorizeBuilder.d.ts.map +0 -1
- package/dist/test/unit/transactionBuilder/stakingRawMsgAuthorizeBuilder.js +0 -259
- package/dist/test/unit/transactionBuilder/tokenTransferBuilder.d.ts.map +0 -1
- package/dist/test/unit/transactionBuilder/tokenTransferBuilder.js +0 -787
- package/dist/test/unit/transactionBuilder/transactionBuilder.d.ts.map +0 -1
- package/dist/test/unit/transactionBuilder/transactionBuilder.js +0 -495
- package/dist/test/unit/transactionBuilder/transferBuilder.d.ts.map +0 -1
- package/dist/test/unit/transactionBuilder/transferBuilder.js +0 -286
- package/dist/test/unit/transactionBuilder/transferBuilderV2.d.ts.map +0 -1
- package/dist/test/unit/transactionBuilder/transferBuilderV2.js +0 -862
- package/dist/test/unit/transactionBuilder/walletInitBuilder.d.ts.map +0 -1
- package/dist/test/unit/transactionBuilder/walletInitBuilder.js +0 -259
- package/dist/test/unit/utils.js +0 -517
- package/dist/test/unit/versionedTransaction.d.ts.map +0 -1
- package/dist/test/unit/versionedTransaction.js +0 -207
- package/dist/tsconfig.tsbuildinfo +0 -1
- /package/dist/{src → cjs/src}/bigint-buffer-guard.d.ts +0 -0
- /package/dist/{src → cjs/src}/config/token2022StaticConfig.d.ts +0 -0
- /package/dist/{src → cjs/src}/index.d.ts +0 -0
- /package/dist/{src → cjs/src}/lib/ataInitializationBuilder.d.ts +0 -0
- /package/dist/{src → cjs/src}/lib/customInstructionBuilder.d.ts +0 -0
- /package/dist/{src → cjs/src}/lib/jitoStakePoolOperations.d.ts +0 -0
- /package/dist/{src → cjs/src}/lib/keyPair.d.ts +0 -0
- /package/dist/{src → cjs/src}/lib/messages/index.d.ts +0 -0
- /package/dist/{src → cjs/src}/lib/messages/messageBuilderFactory.d.ts +0 -0
- /package/dist/{src → cjs/src}/lib/solInstructionFactory.d.ts +0 -0
- /package/dist/{src → cjs/src}/lib/stakingActivateBuilder.d.ts +0 -0
- /package/dist/{src → cjs/src}/lib/stakingAuthorizeBuilder.d.ts +0 -0
- /package/dist/{src → cjs/src}/lib/stakingDeactivateBuilder.d.ts +0 -0
- /package/dist/{src → cjs/src}/lib/stakingDelegateBuilder.d.ts +0 -0
- /package/dist/{src → cjs/src}/lib/stakingRawMsgAuthorizeBuilder.d.ts +0 -0
- /package/dist/{src → cjs/src}/lib/stakingWithdrawBuilder.d.ts +0 -0
- /package/dist/{src → cjs/src}/lib/token2022Config.d.ts +0 -0
- /package/dist/{src → cjs/src}/lib/tokenTransferBuilder.d.ts +0 -0
- /package/dist/{src → cjs/src}/lib/transaction.d.ts +0 -0
- /package/dist/{src → cjs/src}/lib/transactionBuilder.d.ts +0 -0
- /package/dist/{src → cjs/src}/lib/transferBuilder.d.ts +0 -0
- /package/dist/{src → cjs/src}/lib/transferBuilderV2.d.ts +0 -0
- /package/dist/{src → cjs/src}/lib/utils.d.ts +0 -0
- /package/dist/{src → cjs/src}/lib/walletInitializationBuilder.d.ts +0 -0
- /package/dist/{src → cjs/src}/register.d.ts +0 -0
- /package/dist/{src → cjs/src}/tsol.d.ts +0 -0
- /package/dist/{test → cjs/test}/fixtures/sol.d.ts +0 -0
- /package/dist/{test → cjs/test}/unit/fixtures/solBackupKey.d.ts +0 -0
- /package/dist/{test → cjs/test}/unit/getBuilderFactory.d.ts +0 -0
- /package/dist/{test → cjs/test}/unit/instructionParamsFactory.d.ts +0 -0
- /package/dist/{test → cjs/test}/unit/instructionParamsFactory.staking.d.ts +0 -0
- /package/dist/{test → cjs/test}/unit/keyPair.d.ts +0 -0
- /package/dist/{test → cjs/test}/unit/messages/messageBuilderFactory.d.ts +0 -0
- /package/dist/{test → cjs/test}/unit/messages/simpleMessageBuilder.d.ts +0 -0
- /package/dist/{test → cjs/test}/unit/sol.d.ts +0 -0
- /package/dist/{test → cjs/test}/unit/solInstructionFactory.d.ts +0 -0
- /package/dist/{test → cjs/test}/unit/solToken.d.ts +0 -0
- /package/dist/{test → cjs/test}/unit/transaction.d.ts +0 -0
- /package/dist/{test → cjs/test}/unit/transactionBuilder/StakingWithdrawBuilder.d.ts +0 -0
- /package/dist/{test → cjs/test}/unit/transactionBuilder/ataInitBuilder.d.ts +0 -0
- /package/dist/{test → cjs/test}/unit/transactionBuilder/customInstructionBuilder.d.ts +0 -0
- /package/dist/{test → cjs/test}/unit/transactionBuilder/stakingActivateBuilder.d.ts +0 -0
- /package/dist/{test → cjs/test}/unit/transactionBuilder/stakingAuthorizeBuilder.d.ts +0 -0
- /package/dist/{test → cjs/test}/unit/transactionBuilder/stakingDeactivateBuilder.d.ts +0 -0
- /package/dist/{test → cjs/test}/unit/transactionBuilder/stakingDelegateBuilder.d.ts +0 -0
- /package/dist/{test → cjs/test}/unit/transactionBuilder/stakingRawMsgAuthorizeBuilder.d.ts +0 -0
- /package/dist/{test → cjs/test}/unit/transactionBuilder/tokenTransferBuilder.d.ts +0 -0
- /package/dist/{test → cjs/test}/unit/transactionBuilder/transactionBuilder.d.ts +0 -0
- /package/dist/{test → cjs/test}/unit/transactionBuilder/transferBuilder.d.ts +0 -0
- /package/dist/{test → cjs/test}/unit/transactionBuilder/transferBuilderV2.d.ts +0 -0
- /package/dist/{test → cjs/test}/unit/transactionBuilder/walletInitBuilder.d.ts +0 -0
- /package/dist/{test → cjs/test}/unit/utils.d.ts +0 -0
- /package/dist/{test → cjs/test}/unit/versionedTransaction.d.ts +0 -0
- /package/dist/{src → esm}/bigint-buffer-guard.d.ts.map +0 -0
- /package/dist/{src → esm}/bigint-buffer-guard.js +0 -0
- /package/dist/{src → esm}/config/token2022StaticConfig.d.ts.map +0 -0
- /package/dist/{src → esm}/index.d.ts.map +0 -0
- /package/dist/{src → esm}/lib/customInstructionBuilder.d.ts.map +0 -0
- /package/dist/{src → esm}/lib/jitoStakePoolOperations.d.ts.map +0 -0
- /package/dist/{src → esm}/lib/keyPair.d.ts.map +0 -0
- /package/dist/{src → esm}/lib/messages/index.d.ts.map +0 -0
- /package/dist/{src → esm}/lib/messages/messageBuilderFactory.d.ts.map +0 -0
- /package/dist/{src → esm}/lib/stakingActivateBuilder.d.ts.map +0 -0
- /package/dist/{src → esm}/lib/stakingAuthorizeBuilder.d.ts.map +0 -0
- /package/dist/{src → esm}/lib/stakingDeactivateBuilder.d.ts.map +0 -0
- /package/dist/{src → esm}/lib/stakingDelegateBuilder.d.ts.map +0 -0
- /package/dist/{src → esm}/lib/stakingRawMsgAuthorizeBuilder.d.ts.map +0 -0
- /package/dist/{src → esm}/lib/stakingWithdrawBuilder.d.ts.map +0 -0
- /package/dist/{src → esm}/lib/token2022Config.d.ts.map +0 -0
- /package/dist/{src → esm}/lib/transactionBuilder.d.ts.map +0 -0
- /package/dist/{src → esm}/lib/transferBuilder.d.ts.map +0 -0
- /package/dist/{src → esm}/lib/transferBuilderV2.d.ts.map +0 -0
- /package/dist/{src → esm}/lib/walletInitializationBuilder.d.ts.map +0 -0
- /package/dist/{src → esm}/register.d.ts.map +0 -0
- /package/dist/{src → esm}/tsol.d.ts.map +0 -0
|
@@ -0,0 +1,333 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
const src_1 = require("../../../src");
|
|
40
|
+
const should_1 = __importDefault(require("should"));
|
|
41
|
+
const testData = __importStar(require("../../resources/sol"));
|
|
42
|
+
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
43
|
+
const getBuilderFactory_1 = require("../getBuilderFactory");
|
|
44
|
+
const constants_1 = require("../../../src/lib/constants");
|
|
45
|
+
describe('Sol Close ATA Builder', () => {
|
|
46
|
+
const factory = (0, getBuilderFactory_1.getBuilderFactory)('tsol');
|
|
47
|
+
const recentBlockHash = 'GHtXQBsoZHVnNFa9YevAzFr17DJjgHXk3ycTKD5xD3Zi';
|
|
48
|
+
const account = new src_1.KeyPair(testData.authAccount).getKeys();
|
|
49
|
+
const nonceAccount = new src_1.KeyPair(testData.nonceAccount).getKeys();
|
|
50
|
+
const account2 = new src_1.KeyPair(testData.authAccount2).getKeys();
|
|
51
|
+
// ATA addresses (valid Solana addresses from test fixtures)
|
|
52
|
+
const ataAddress1 = nonceAccount.pub;
|
|
53
|
+
const ataAddress2 = account2.pub;
|
|
54
|
+
const destinationAddress = account.pub;
|
|
55
|
+
const closeAtaBuilder = () => {
|
|
56
|
+
const txBuilder = factory.getCloseAtaInitializationBuilder();
|
|
57
|
+
txBuilder.nonce(recentBlockHash);
|
|
58
|
+
txBuilder.sender(account.pub);
|
|
59
|
+
return txBuilder;
|
|
60
|
+
};
|
|
61
|
+
describe('Single ATA close (backward compatible)', () => {
|
|
62
|
+
describe('Succeed', () => {
|
|
63
|
+
it('build a single close ATA tx unsigned', async () => {
|
|
64
|
+
const txBuilder = closeAtaBuilder();
|
|
65
|
+
txBuilder.accountAddress(ataAddress1);
|
|
66
|
+
txBuilder.destinationAddress(destinationAddress);
|
|
67
|
+
txBuilder.authorityAddress(account.pub);
|
|
68
|
+
const tx = await txBuilder.build();
|
|
69
|
+
tx.type.should.equal(sdk_core_1.TransactionType.CloseAssociatedTokenAccount);
|
|
70
|
+
const rawTx = tx.toBroadcastFormat();
|
|
71
|
+
should_1.default.equal(src_1.Utils.isValidRawTransaction(rawTx), true);
|
|
72
|
+
const instructions = tx.toJson().instructionsData;
|
|
73
|
+
instructions.length.should.equal(1);
|
|
74
|
+
instructions[0].type.should.equal(constants_1.InstructionBuilderTypes.CloseAssociatedTokenAccount);
|
|
75
|
+
instructions[0].params.accountAddress.should.equal(ataAddress1);
|
|
76
|
+
instructions[0].params.destinationAddress.should.equal(destinationAddress);
|
|
77
|
+
instructions[0].params.authorityAddress.should.equal(account.pub);
|
|
78
|
+
});
|
|
79
|
+
it('build a single close ATA tx signed', async () => {
|
|
80
|
+
const txBuilder = closeAtaBuilder();
|
|
81
|
+
txBuilder.accountAddress(ataAddress1);
|
|
82
|
+
txBuilder.destinationAddress(destinationAddress);
|
|
83
|
+
txBuilder.authorityAddress(account.pub);
|
|
84
|
+
txBuilder.sign({ key: account.prv });
|
|
85
|
+
const tx = await txBuilder.build();
|
|
86
|
+
tx.type.should.equal(sdk_core_1.TransactionType.CloseAssociatedTokenAccount);
|
|
87
|
+
const rawTx = tx.toBroadcastFormat();
|
|
88
|
+
should_1.default.equal(src_1.Utils.isValidRawTransaction(rawTx), true);
|
|
89
|
+
});
|
|
90
|
+
it('build a single close ATA tx with durable nonce', async () => {
|
|
91
|
+
const txBuilder = closeAtaBuilder();
|
|
92
|
+
txBuilder.nonce(recentBlockHash, {
|
|
93
|
+
walletNonceAddress: nonceAccount.pub,
|
|
94
|
+
authWalletAddress: account.pub,
|
|
95
|
+
});
|
|
96
|
+
txBuilder.accountAddress(ataAddress2);
|
|
97
|
+
txBuilder.destinationAddress(destinationAddress);
|
|
98
|
+
txBuilder.authorityAddress(account.pub);
|
|
99
|
+
const tx = await txBuilder.build();
|
|
100
|
+
tx.type.should.equal(sdk_core_1.TransactionType.CloseAssociatedTokenAccount);
|
|
101
|
+
const rawTx = tx.toBroadcastFormat();
|
|
102
|
+
should_1.default.equal(src_1.Utils.isValidRawTransaction(rawTx), true);
|
|
103
|
+
});
|
|
104
|
+
});
|
|
105
|
+
describe('Fail', () => {
|
|
106
|
+
it('should fail when account address is not set', async () => {
|
|
107
|
+
const txBuilder = closeAtaBuilder();
|
|
108
|
+
txBuilder.destinationAddress(destinationAddress);
|
|
109
|
+
txBuilder.authorityAddress(account.pub);
|
|
110
|
+
await txBuilder.build().should.rejectedWith('Account Address must be set before building the transaction');
|
|
111
|
+
});
|
|
112
|
+
it('should fail when destination address is not set', async () => {
|
|
113
|
+
const txBuilder = closeAtaBuilder();
|
|
114
|
+
txBuilder.accountAddress(ataAddress1);
|
|
115
|
+
txBuilder.authorityAddress(account.pub);
|
|
116
|
+
await txBuilder.build().should.rejectedWith('Destination Address must be set before building the transaction');
|
|
117
|
+
});
|
|
118
|
+
it('should fail when authority address is not set', async () => {
|
|
119
|
+
const txBuilder = closeAtaBuilder();
|
|
120
|
+
txBuilder.accountAddress(ataAddress1);
|
|
121
|
+
txBuilder.destinationAddress(destinationAddress);
|
|
122
|
+
await txBuilder.build().should.rejectedWith('Authority Address must be set before building the transaction');
|
|
123
|
+
});
|
|
124
|
+
it('should fail when account address equals destination address', async () => {
|
|
125
|
+
const txBuilder = closeAtaBuilder();
|
|
126
|
+
txBuilder.accountAddress(destinationAddress);
|
|
127
|
+
txBuilder.destinationAddress(destinationAddress);
|
|
128
|
+
txBuilder.authorityAddress(account.pub);
|
|
129
|
+
await txBuilder
|
|
130
|
+
.build()
|
|
131
|
+
.should.rejectedWith('Account address to close cannot be the same as the destination address');
|
|
132
|
+
});
|
|
133
|
+
it('should fail with invalid account address', () => {
|
|
134
|
+
const txBuilder = closeAtaBuilder();
|
|
135
|
+
(0, should_1.default)(() => txBuilder.accountAddress('invalidAddress')).throwError();
|
|
136
|
+
});
|
|
137
|
+
it('should fail with invalid destination address', () => {
|
|
138
|
+
const txBuilder = closeAtaBuilder();
|
|
139
|
+
(0, should_1.default)(() => txBuilder.destinationAddress('invalidAddress')).throwError();
|
|
140
|
+
});
|
|
141
|
+
it('should fail with invalid authority address', () => {
|
|
142
|
+
const txBuilder = closeAtaBuilder();
|
|
143
|
+
(0, should_1.default)(() => txBuilder.authorityAddress('invalidAddress')).throwError();
|
|
144
|
+
});
|
|
145
|
+
it('should fail when nonce is not provided', async () => {
|
|
146
|
+
const txBuilder = factory.getCloseAtaInitializationBuilder();
|
|
147
|
+
txBuilder.sender(account.pub);
|
|
148
|
+
txBuilder.accountAddress(ataAddress1);
|
|
149
|
+
txBuilder.destinationAddress(destinationAddress);
|
|
150
|
+
txBuilder.authorityAddress(account.pub);
|
|
151
|
+
await txBuilder.build().should.rejectedWith('Invalid transaction: missing nonce blockhash');
|
|
152
|
+
});
|
|
153
|
+
it('should fail when sender is not provided', async () => {
|
|
154
|
+
const txBuilder = factory.getCloseAtaInitializationBuilder();
|
|
155
|
+
txBuilder.nonce(recentBlockHash);
|
|
156
|
+
txBuilder.accountAddress(ataAddress1);
|
|
157
|
+
txBuilder.destinationAddress(destinationAddress);
|
|
158
|
+
txBuilder.authorityAddress(account.pub);
|
|
159
|
+
await txBuilder.build().should.rejectedWith('Invalid transaction: missing sender');
|
|
160
|
+
});
|
|
161
|
+
});
|
|
162
|
+
});
|
|
163
|
+
describe('Bulk ATA close (addCloseAtaInstruction)', () => {
|
|
164
|
+
describe('Succeed', () => {
|
|
165
|
+
it('build a bulk close ATA tx with multiple ATAs unsigned', async () => {
|
|
166
|
+
const txBuilder = closeAtaBuilder();
|
|
167
|
+
txBuilder.addCloseAtaInstruction(ataAddress1, destinationAddress, account.pub);
|
|
168
|
+
txBuilder.addCloseAtaInstruction(ataAddress2, destinationAddress, account.pub);
|
|
169
|
+
const tx = await txBuilder.build();
|
|
170
|
+
tx.type.should.equal(sdk_core_1.TransactionType.CloseAssociatedTokenAccount);
|
|
171
|
+
const rawTx = tx.toBroadcastFormat();
|
|
172
|
+
should_1.default.equal(src_1.Utils.isValidRawTransaction(rawTx), true);
|
|
173
|
+
const instructions = tx.toJson().instructionsData;
|
|
174
|
+
instructions.length.should.equal(2);
|
|
175
|
+
instructions[0].type.should.equal(constants_1.InstructionBuilderTypes.CloseAssociatedTokenAccount);
|
|
176
|
+
instructions[0].params.accountAddress.should.equal(ataAddress1);
|
|
177
|
+
instructions[0].params.destinationAddress.should.equal(destinationAddress);
|
|
178
|
+
instructions[0].params.authorityAddress.should.equal(account.pub);
|
|
179
|
+
instructions[1].type.should.equal(constants_1.InstructionBuilderTypes.CloseAssociatedTokenAccount);
|
|
180
|
+
instructions[1].params.accountAddress.should.equal(ataAddress2);
|
|
181
|
+
instructions[1].params.destinationAddress.should.equal(destinationAddress);
|
|
182
|
+
instructions[1].params.authorityAddress.should.equal(account.pub);
|
|
183
|
+
});
|
|
184
|
+
it('build a bulk close ATA tx signed', async () => {
|
|
185
|
+
const txBuilder = closeAtaBuilder();
|
|
186
|
+
txBuilder.addCloseAtaInstruction(ataAddress1, destinationAddress, account.pub);
|
|
187
|
+
txBuilder.addCloseAtaInstruction(ataAddress2, destinationAddress, account.pub);
|
|
188
|
+
txBuilder.sign({ key: account.prv });
|
|
189
|
+
const tx = await txBuilder.build();
|
|
190
|
+
tx.type.should.equal(sdk_core_1.TransactionType.CloseAssociatedTokenAccount);
|
|
191
|
+
const rawTx = tx.toBroadcastFormat();
|
|
192
|
+
should_1.default.equal(src_1.Utils.isValidRawTransaction(rawTx), true);
|
|
193
|
+
const instructions = tx.toJson().instructionsData;
|
|
194
|
+
instructions.length.should.equal(2);
|
|
195
|
+
});
|
|
196
|
+
it('build a single close using addCloseAtaInstruction', async () => {
|
|
197
|
+
const txBuilder = closeAtaBuilder();
|
|
198
|
+
txBuilder.addCloseAtaInstruction(ataAddress1, destinationAddress, account.pub);
|
|
199
|
+
const tx = await txBuilder.build();
|
|
200
|
+
tx.type.should.equal(sdk_core_1.TransactionType.CloseAssociatedTokenAccount);
|
|
201
|
+
const instructions = tx.toJson().instructionsData;
|
|
202
|
+
instructions.length.should.equal(1);
|
|
203
|
+
instructions[0].params.accountAddress.should.equal(ataAddress1);
|
|
204
|
+
});
|
|
205
|
+
it('all close instructions have same destination (root wallet)', async () => {
|
|
206
|
+
const txBuilder = closeAtaBuilder();
|
|
207
|
+
txBuilder.addCloseAtaInstruction(ataAddress1, destinationAddress, account.pub);
|
|
208
|
+
txBuilder.addCloseAtaInstruction(ataAddress2, destinationAddress, account.pub);
|
|
209
|
+
const tx = await txBuilder.build();
|
|
210
|
+
const instructions = tx.toJson().instructionsData;
|
|
211
|
+
for (const instruction of instructions) {
|
|
212
|
+
instruction.params.destinationAddress.should.equal(destinationAddress);
|
|
213
|
+
}
|
|
214
|
+
});
|
|
215
|
+
});
|
|
216
|
+
describe('Fail', () => {
|
|
217
|
+
it('should fail with duplicate ATA address', () => {
|
|
218
|
+
const txBuilder = closeAtaBuilder();
|
|
219
|
+
txBuilder.addCloseAtaInstruction(ataAddress1, destinationAddress, account.pub);
|
|
220
|
+
(0, should_1.default)(() => txBuilder.addCloseAtaInstruction(ataAddress1, destinationAddress, account.pub)).throwError('Duplicate ATA address: ' + ataAddress1);
|
|
221
|
+
});
|
|
222
|
+
it('should fail when account equals destination', () => {
|
|
223
|
+
const txBuilder = closeAtaBuilder();
|
|
224
|
+
(0, should_1.default)(() => txBuilder.addCloseAtaInstruction(destinationAddress, destinationAddress, account.pub)).throwError('Account address to close cannot be the same as the destination address');
|
|
225
|
+
});
|
|
226
|
+
it('should fail with invalid account address', () => {
|
|
227
|
+
const txBuilder = closeAtaBuilder();
|
|
228
|
+
(0, should_1.default)(() => txBuilder.addCloseAtaInstruction('invalid', destinationAddress, account.pub)).throwError();
|
|
229
|
+
});
|
|
230
|
+
it('should fail with invalid destination address', () => {
|
|
231
|
+
const txBuilder = closeAtaBuilder();
|
|
232
|
+
(0, should_1.default)(() => txBuilder.addCloseAtaInstruction(ataAddress1, 'invalid', account.pub)).throwError();
|
|
233
|
+
});
|
|
234
|
+
it('should fail with invalid authority address', () => {
|
|
235
|
+
const txBuilder = closeAtaBuilder();
|
|
236
|
+
(0, should_1.default)(() => txBuilder.addCloseAtaInstruction(ataAddress1, destinationAddress, 'invalid')).throwError();
|
|
237
|
+
});
|
|
238
|
+
});
|
|
239
|
+
});
|
|
240
|
+
describe('Mixing single-ATA and bulk APIs', () => {
|
|
241
|
+
const mixErrorMessage = /Cannot mix single-ATA API .* with bulk-ATA API/;
|
|
242
|
+
it('should throw when single-ATA setter is called after addCloseAtaInstruction (accountAddress)', () => {
|
|
243
|
+
const txBuilder = closeAtaBuilder();
|
|
244
|
+
txBuilder.addCloseAtaInstruction(ataAddress1, destinationAddress, account.pub);
|
|
245
|
+
(0, should_1.default)(() => txBuilder.accountAddress(ataAddress2)).throw(mixErrorMessage);
|
|
246
|
+
});
|
|
247
|
+
it('should throw when single-ATA setter is called after addCloseAtaInstruction (destinationAddress)', () => {
|
|
248
|
+
const txBuilder = closeAtaBuilder();
|
|
249
|
+
txBuilder.addCloseAtaInstruction(ataAddress1, destinationAddress, account.pub);
|
|
250
|
+
(0, should_1.default)(() => txBuilder.destinationAddress(account2.pub)).throw(mixErrorMessage);
|
|
251
|
+
});
|
|
252
|
+
it('should throw when single-ATA setter is called after addCloseAtaInstruction (authorityAddress)', () => {
|
|
253
|
+
const txBuilder = closeAtaBuilder();
|
|
254
|
+
txBuilder.addCloseAtaInstruction(ataAddress1, destinationAddress, account.pub);
|
|
255
|
+
(0, should_1.default)(() => txBuilder.authorityAddress(account2.pub)).throw(mixErrorMessage);
|
|
256
|
+
});
|
|
257
|
+
it('should throw when addCloseAtaInstruction is called after single-ATA setter', () => {
|
|
258
|
+
const txBuilder = closeAtaBuilder();
|
|
259
|
+
txBuilder.accountAddress(ataAddress1);
|
|
260
|
+
(0, should_1.default)(() => txBuilder.addCloseAtaInstruction(ataAddress2, destinationAddress, account.pub)).throw(mixErrorMessage);
|
|
261
|
+
});
|
|
262
|
+
it('should not corrupt the first bulk entry when bulk-then-single is rejected', () => {
|
|
263
|
+
const txBuilder = closeAtaBuilder();
|
|
264
|
+
txBuilder.addCloseAtaInstruction(ataAddress1, destinationAddress, account.pub);
|
|
265
|
+
try {
|
|
266
|
+
txBuilder.accountAddress(ataAddress2);
|
|
267
|
+
}
|
|
268
|
+
catch {
|
|
269
|
+
/* expected */
|
|
270
|
+
}
|
|
271
|
+
// First entry must still be intact after the rejected mix attempt.
|
|
272
|
+
const entries = txBuilder
|
|
273
|
+
._closeAtaEntries;
|
|
274
|
+
entries.length.should.equal(1);
|
|
275
|
+
entries[0].accountAddress.should.equal(ataAddress1);
|
|
276
|
+
});
|
|
277
|
+
});
|
|
278
|
+
describe('From raw transaction', () => {
|
|
279
|
+
it('should parse a single close ATA tx from raw and rebuild', async () => {
|
|
280
|
+
// Build a tx first
|
|
281
|
+
const txBuilder = closeAtaBuilder();
|
|
282
|
+
txBuilder.accountAddress(ataAddress1);
|
|
283
|
+
txBuilder.destinationAddress(destinationAddress);
|
|
284
|
+
txBuilder.authorityAddress(account.pub);
|
|
285
|
+
const tx = await txBuilder.build();
|
|
286
|
+
const rawTx = tx.toBroadcastFormat();
|
|
287
|
+
// Parse from raw
|
|
288
|
+
const rebuiltBuilder = factory.from(rawTx);
|
|
289
|
+
const rebuiltTx = await rebuiltBuilder.build();
|
|
290
|
+
rebuiltTx.type.should.equal(sdk_core_1.TransactionType.CloseAssociatedTokenAccount);
|
|
291
|
+
const instructions = rebuiltTx.toJson().instructionsData;
|
|
292
|
+
instructions.length.should.equal(1);
|
|
293
|
+
instructions[0].type.should.equal(constants_1.InstructionBuilderTypes.CloseAssociatedTokenAccount);
|
|
294
|
+
instructions[0].params.accountAddress.should.equal(ataAddress1);
|
|
295
|
+
instructions[0].params.destinationAddress.should.equal(destinationAddress);
|
|
296
|
+
instructions[0].params.authorityAddress.should.equal(account.pub);
|
|
297
|
+
});
|
|
298
|
+
it('should parse a bulk close ATA tx from raw and rebuild', async () => {
|
|
299
|
+
// Build a bulk tx first
|
|
300
|
+
const txBuilder = closeAtaBuilder();
|
|
301
|
+
txBuilder.addCloseAtaInstruction(ataAddress1, destinationAddress, account.pub);
|
|
302
|
+
txBuilder.addCloseAtaInstruction(ataAddress2, destinationAddress, account.pub);
|
|
303
|
+
const tx = await txBuilder.build();
|
|
304
|
+
const rawTx = tx.toBroadcastFormat();
|
|
305
|
+
// Parse from raw
|
|
306
|
+
const rebuiltBuilder = factory.from(rawTx);
|
|
307
|
+
const rebuiltTx = await rebuiltBuilder.build();
|
|
308
|
+
rebuiltTx.type.should.equal(sdk_core_1.TransactionType.CloseAssociatedTokenAccount);
|
|
309
|
+
const instructions = rebuiltTx.toJson().instructionsData;
|
|
310
|
+
instructions.length.should.equal(2);
|
|
311
|
+
instructions[0].params.accountAddress.should.equal(ataAddress1);
|
|
312
|
+
instructions[1].params.accountAddress.should.equal(ataAddress2);
|
|
313
|
+
});
|
|
314
|
+
it('should reject legacy single-ATA setters on a parsed bulk close tx', async () => {
|
|
315
|
+
const txBuilder = closeAtaBuilder();
|
|
316
|
+
txBuilder.addCloseAtaInstruction(ataAddress1, destinationAddress, account.pub);
|
|
317
|
+
txBuilder.addCloseAtaInstruction(ataAddress2, destinationAddress, account.pub);
|
|
318
|
+
const rawTx = (await txBuilder.build()).toBroadcastFormat();
|
|
319
|
+
const parsed = factory.from(rawTx);
|
|
320
|
+
const mixErrorMessage = /Cannot mix single-ATA API .* with bulk-ATA API/;
|
|
321
|
+
(0, should_1.default)(() => parsed.accountAddress(ataAddress1)).throw(mixErrorMessage);
|
|
322
|
+
(0, should_1.default)(() => parsed.destinationAddress(destinationAddress)).throw(mixErrorMessage);
|
|
323
|
+
(0, should_1.default)(() => parsed.authorityAddress(account.pub)).throw(mixErrorMessage);
|
|
324
|
+
});
|
|
325
|
+
it('should parse existing close ATA raw tx from test resources', async () => {
|
|
326
|
+
const txnBuilder = factory.from(testData.TRANSFER_UNSIGNED_TX_CLOSE_ATA);
|
|
327
|
+
should_1.default.exist(txnBuilder);
|
|
328
|
+
const tx = await txnBuilder.build();
|
|
329
|
+
tx.type.should.equal(sdk_core_1.TransactionType.CloseAssociatedTokenAccount);
|
|
330
|
+
});
|
|
331
|
+
});
|
|
332
|
+
});
|
|
333
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xvc2VBdGFCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGVzdC91bml0L3RyYW5zYWN0aW9uQnVpbGRlci9jbG9zZUF0YUJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxzQ0FBOEM7QUFFOUMsb0RBQTRCO0FBQzVCLDhEQUFnRDtBQUNoRCxtREFBdUQ7QUFDdkQsNERBQXlEO0FBQ3pELDBEQUFxRTtBQUVyRSxRQUFRLENBQUMsdUJBQXVCLEVBQUUsR0FBRyxFQUFFO0lBQ3JDLE1BQU0sT0FBTyxHQUFHLElBQUEscUNBQWlCLEVBQUMsTUFBTSxDQUFDLENBQUM7SUFDMUMsTUFBTSxlQUFlLEdBQUcsOENBQThDLENBQUM7SUFFdkUsTUFBTSxPQUFPLEdBQUcsSUFBSSxhQUFPLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQzVELE1BQU0sWUFBWSxHQUFHLElBQUksYUFBTyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNsRSxNQUFNLFFBQVEsR0FBRyxJQUFJLGFBQU8sQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7SUFFOUQsNERBQTREO0lBQzVELE1BQU0sV0FBVyxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUM7SUFDckMsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQztJQUNqQyxNQUFNLGtCQUFrQixHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUM7SUFFdkMsTUFBTSxlQUFlLEdBQUcsR0FBRyxFQUFFO1FBQzNCLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxnQ0FBZ0MsRUFBRSxDQUFDO1FBQzdELFNBQVMsQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDakMsU0FBUyxDQUFDLE1B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O1lBQ25GLElBQUEsZ0JBQU0sRUFBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQzVFLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDREQUE0RCxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQzFFLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLDhCQUE4QixDQUFDLENBQUM7WUFDekUsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7WUFFekIsTUFBTSxFQUFFLEdBQUcsTUFBTSxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDcEMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLDBCQUFlLENBQUMsMkJBQTJCLENBQUMsQ0FBQztRQUNwRSxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBLZXlQYWlyLCBVdGlscyB9IGZyb20gJy4uLy4uLy4uL3NyYyc7XG5pbXBvcnQgeyBDbG9zZUF0YUJ1aWxkZXIgfSBmcm9tICcuLi8uLi8uLi9zcmMvbGliL2Nsb3NlQXRhQnVpbGRlcic7XG5pbXBvcnQgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5pbXBvcnQgKiBhcyB0ZXN0RGF0YSBmcm9tICcuLi8uLi9yZXNvdXJjZXMvc29sJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uVHlwZSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IGdldEJ1aWxkZXJGYWN0b3J5IH0gZnJvbSAnLi4vZ2V0QnVpbGRlckZhY3RvcnknO1xuaW1wb3J0IHsgSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMgfSBmcm9tICcuLi8uLi8uLi9zcmMvbGliL2NvbnN0YW50cyc7XG5cbmRlc2NyaWJlKCdTb2wgQ2xvc2UgQVRBIEJ1aWxkZXInLCAoKSA9PiB7XG4gIGNvbnN0IGZhY3RvcnkgPSBnZXRCdWlsZGVyRmFjdG9yeSgndHNvbCcpO1xuICBjb25zdCByZWNlbnRCbG9ja0hhc2ggPSAnR0h0WFFCc29aSFZuTkZhOVlldkF6RnIxN0RKamdIWGszeWNUS0Q1eEQzWmknO1xuXG4gIGNvbnN0IGFjY291bnQgPSBuZXcgS2V5UGFpcih0ZXN0RGF0YS5hdXRoQWNjb3VudCkuZ2V0S2V5cygpO1xuICBjb25zdCBub25jZUFjY291bnQgPSBuZXcgS2V5UGFpcih0ZXN0RGF0YS5ub25jZUFjY291bnQpLmdldEtleXMoKTtcbiAgY29uc3QgYWNjb3VudDIgPSBuZXcgS2V5UGFpcih0ZXN0RGF0YS5hdXRoQWNjb3VudDIpLmdldEtleXMoKTtcblxuICAvLyBBVEEgYWRkcmVzc2VzICh2YWxpZCBTb2xhbmEgYWRkcmVzc2VzIGZyb20gdGVzdCBmaXh0dXJlcylcbiAgY29uc3QgYXRhQWRkcmVzczEgPSBub25jZUFjY291bnQucHViO1xuICBjb25zdCBhdGFBZGRyZXNzMiA9IGFjY291bnQyLnB1YjtcbiAgY29uc3QgZGVzdGluYXRpb25BZGRyZXNzID0gYWNjb3VudC5wdWI7XG5cbiAgY29uc3QgY2xvc2VBdGFCdWlsZGVyID0gKCkgPT4ge1xuICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZ2V0Q2xvc2VBdGFJbml0aWFsaXphdGlvbkJ1aWxkZXIoKTtcbiAgICB0eEJ1aWxkZXIubm9uY2UocmVjZW50QmxvY2tIYXNoKTtcbiAgICB0eEJ1aWxkZXIuc2VuZGVyKGFjY291bnQucHViKTtcbiAgICByZXR1cm4gdHhCdWlsZGVyO1xuICB9O1xuXG4gIGRlc2NyaWJlKCdTaW5nbGUgQVRBIGNsb3NlIChiYWNrd2FyZCBjb21wYXRpYmxlKScsICgpID0+IHtcbiAgICBkZXNjcmliZSgnU3VjY2VlZCcsICgpID0+IHtcbiAgICAgIGl0KCdidWlsZCBhIHNpbmdsZSBjbG9zZSBBVEEgdHggdW5zaWduZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGNsb3NlQXRhQnVpbGRlcigpO1xuICAgICAgICB0eEJ1aWxkZXIuYWNjb3VudEFkZHJlc3MoYXRhQWRkcmVzczEpO1xuICAgICAgICB0eEJ1aWxkZXIuZGVzdGluYXRpb25BZGRyZXNzKGRlc3RpbmF0aW9uQWRkcmVzcyk7XG4gICAgICAgIHR4QnVpbGRlci5hdXRob3JpdHlBZGRyZXNzKGFjY291bnQucHViKTtcblxuICAgICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgICB0eC50eXBlLnNob3VsZC5lcXVhbChUcmFuc2FjdGlvblR5cGUuQ2xvc2VBc3NvY2lhdGVkVG9rZW5BY2NvdW50KTtcblxuICAgICAgICBjb25zdCByYXdUeCA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG4gICAgICAgIHNob3VsZC5lcXVhbChVdGlscy5pc1ZhbGlkUmF3VHJhbnNhY3Rpb24ocmF3VHgpLCB0cnVlKTtcblxuICAgICAgICBjb25zdCBpbnN0cnVjdGlvbnMgPSB0eC50b0pzb24oKS5pbnN0cnVjdGlvbnNEYXRhO1xuICAgICAgICBpbnN0cnVjdGlvbnMubGVuZ3RoLnNob3VsZC5lcXVhbCgxKTtcbiAgICAgICAgaW5zdHJ1Y3Rpb25zWzBdLnR5cGUuc2hvdWxkLmVxdWFsKEluc3RydWN0aW9uQnVpbGRlclR5cGVzLkNsb3NlQXNzb2NpYXRlZFRva2VuQWNjb3VudCk7XG4gICAgICAgIGluc3RydWN0aW9uc1swXS5wYXJhbXMuYWNjb3VudEFkZHJlc3Muc2hvdWxkLmVxdWFsKGF0YUFkZHJlc3MxKTtcbiAgICAgICAgaW5zdHJ1Y3Rpb25zWzBdLnBhcmFtcy5kZXN0aW5hdGlvbkFkZHJlc3Muc2hvdWxkLmVxdWFsKGRlc3RpbmF0aW9uQWRkcmVzcyk7XG4gICAgICAgIGluc3RydWN0aW9uc1swXS5wYXJhbXMuYXV0aG9yaXR5QWRkcmVzcy5zaG91bGQuZXF1YWwoYWNjb3VudC5wdWIpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdidWlsZCBhIHNpbmdsZSBjbG9zZSBBVEEgdHggc2lnbmVkJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCB0eEJ1aWxkZXIgPSBjbG9zZUF0YUJ1aWxkZXIoKTtcbiAgICAgICAgdHhCdWlsZGVyLmFjY291bnRBZGRyZXNzKGF0YUFkZHJlc3MxKTtcbiAgICAgICAgdHhCdWlsZGVyLmRlc3RpbmF0aW9uQWRkcmVzcyhkZXN0aW5hdGlvbkFkZHJlc3MpO1xuICAgICAgICB0eEJ1aWxkZXIuYXV0aG9yaXR5QWRkcmVzcyhhY2NvdW50LnB1Yik7XG4gICAgICAgIHR4QnVpbGRlci5zaWduKHsga2V5OiBhY2NvdW50LnBydiB9KTtcblxuICAgICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgICB0eC50eXBlLnNob3VsZC5lcXVhbChUcmFuc2FjdGlvblR5cGUuQ2xvc2VBc3NvY2lhdGVkVG9rZW5BY2NvdW50KTtcblxuICAgICAgICBjb25zdCByYXdUeCA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG4gICAgICAgIHNob3VsZC5lcXVhbChVdGlscy5pc1ZhbGlkUmF3VHJhbnNhY3Rpb24ocmF3VHgpLCB0cnVlKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnYnVpbGQgYSBzaW5nbGUgY2xvc2UgQVRBIHR4IHdpdGggZHVyYWJsZSBub25jZScsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgdHhCdWlsZGVyID0gY2xvc2VBdGFCdWlsZGVyKCk7XG4gICAgICAgIHR4QnVpbGRlci5ub25jZShyZWNlbnRCbG9ja0hhc2gsIHtcbiAgICAgICAgICB3YWxsZXROb25jZUFkZHJlc3M6IG5vbmNlQWNjb3VudC5wdWIsXG4gICAgICAgICAgYXV0aFdhbGxldEFkZHJlc3M6IGFjY291bnQucHViLFxuICAgICAgICB9KTtcbiAgICAgICAgdHhCdWlsZGVyLmFjY291bnRBZGRyZXNzKGF0YUFkZHJlc3MyKTtcbiAgICAgICAgdHhCdWlsZGVyLmRlc3RpbmF0aW9uQWRkcmVzcyhkZXN0aW5hdGlvbkFkZHJlc3MpO1xuICAgICAgICB0eEJ1aWxkZXIuYXV0aG9yaXR5QWRkcmVzcyhhY2NvdW50LnB1Yik7XG5cbiAgICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgICAgdHgudHlwZS5zaG91bGQuZXF1YWwoVHJhbnNhY3Rpb25UeXBlLkNsb3NlQXNzb2NpYXRlZFRva2VuQWNjb3VudCk7XG5cbiAgICAgICAgY29uc3QgcmF3VHggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICAgICAgICBzaG91bGQuZXF1YWwoVXRpbHMuaXNWYWxpZFJhd1RyYW5zYWN0aW9uKHJhd1R4KSwgdHJ1ZSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdGYWlsJywgKCkgPT4ge1xuICAgICAgaXQoJ3Nob3VsZCBmYWlsIHdoZW4gYWNjb3VudCBhZGRyZXNzIGlzIG5vdCBzZXQnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGNsb3NlQXRhQnVpbGRlcigpO1xuICAgICAgICB0eEJ1aWxkZXIuZGVzdGluYXRpb25BZGRyZXNzKGRlc3RpbmF0aW9uQWRkcmVzcyk7XG4gICAgICAgIHR4QnVpbGRlci5hdXRob3JpdHlBZGRyZXNzKGFjY291bnQucHViKTtcblxuICAgICAgICBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKS5zaG91bGQucmVqZWN0ZWRXaXRoKCdBY2NvdW50IEFkZHJlc3MgbXVzdCBiZSBzZXQgYmVmb3JlIGJ1aWxkaW5nIHRoZSB0cmFuc2FjdGlvbicpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgZmFpbCB3aGVuIGRlc3RpbmF0aW9uIGFkZHJlc3MgaXMgbm90IHNldCcsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgdHhCdWlsZGVyID0gY2xvc2VBdGFCdWlsZGVyKCk7XG4gICAgICAgIHR4QnVpbGRlci5hY2NvdW50QWRkcmVzcyhhdGFBZGRyZXNzMSk7XG4gICAgICAgIHR4QnVpbGRlci5hdXRob3JpdHlBZGRyZXNzKGFjY291bnQucHViKTtcblxuICAgICAgICBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKS5zaG91bGQucmVqZWN0ZWRXaXRoKCdEZXN0aW5hdGlvbiBBZGRyZXNzIG11c3QgYmUgc2V0IGJlZm9yZSBidWlsZGluZyB0aGUgdHJhbnNhY3Rpb24nKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGZhaWwgd2hlbiBhdXRob3JpdHkgYWRkcmVzcyBpcyBub3Qgc2V0JywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCB0eEJ1aWxkZXIgPSBjbG9zZUF0YUJ1aWxkZXIoKTtcbiAgICAgICAgdHhCdWlsZGVyLmFjY291bnRBZGRyZXNzKGF0YUFkZHJlc3MxKTtcbiAgICAgICAgdHhCdWlsZGVyLmRlc3RpbmF0aW9uQWRkcmVzcyhkZXN0aW5hdGlvbkFkZHJlc3MpO1xuXG4gICAgICAgIGF3YWl0IHR4QnVpbGRlci5idWlsZCgpLnNob3VsZC5yZWplY3RlZFdpdGgoJ0F1dGhvcml0eSBBZGRyZXNzIG11c3QgYmUgc2V0IGJlZm9yZSBidWlsZGluZyB0aGUgdHJhbnNhY3Rpb24nKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGZhaWwgd2hlbiBhY2NvdW50IGFkZHJlc3MgZXF1YWxzIGRlc3RpbmF0aW9uIGFkZHJlc3MnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGNsb3NlQXRhQnVpbGRlcigpO1xuICAgICAgICB0eEJ1aWxkZXIuYWNjb3VudEFkZHJlc3MoZGVzdGluYXRpb25BZGRyZXNzKTtcbiAgICAgICAgdHhCdWlsZGVyLmRlc3RpbmF0aW9uQWRkcmVzcyhkZXN0aW5hdGlvbkFkZHJlc3MpO1xuICAgICAgICB0eEJ1aWxkZXIuYXV0aG9yaXR5QWRkcmVzcyhhY2NvdW50LnB1Yik7XG5cbiAgICAgICAgYXdhaXQgdHhCdWlsZGVyXG4gICAgICAgICAgLmJ1aWxkKClcbiAgICAgICAgICAuc2hvdWxkLnJlamVjdGVkV2l0aCgnQWNjb3VudCBhZGRyZXNzIHRvIGNsb3NlIGNhbm5vdCBiZSB0aGUgc2FtZSBhcyB0aGUgZGVzdGluYXRpb24gYWRkcmVzcycpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgZmFpbCB3aXRoIGludmFsaWQgYWNjb3VudCBhZGRyZXNzJywgKCkgPT4ge1xuICAgICAgICBjb25zdCB0eEJ1aWxkZXIgPSBjbG9zZUF0YUJ1aWxkZXIoKTtcbiAgICAgICAgc2hvdWxkKCgpID0+IHR4QnVpbGRlci5hY2NvdW50QWRkcmVzcygnaW52YWxpZEFkZHJlc3MnKSkudGhyb3dFcnJvcigpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgZmFpbCB3aXRoIGludmFsaWQgZGVzdGluYXRpb24gYWRkcmVzcycsICgpID0+IHtcbiAgICAgICAgY29uc3QgdHhCdWlsZGVyID0gY2xvc2VBdGFCdWlsZGVyKCk7XG4gICAgICAgIHNob3VsZCgoKSA9PiB0eEJ1aWxkZXIuZGVzdGluYXRpb25BZGRyZXNzKCdpbnZhbGlkQWRkcmVzcycpKS50aHJvd0Vycm9yKCk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBmYWlsIHdpdGggaW52YWxpZCBhdXRob3JpdHkgYWRkcmVzcycsICgpID0+IHtcbiAgICAgICAgY29uc3QgdHhCdWlsZGVyID0gY2xvc2VBdGFCdWlsZGVyKCk7XG4gICAgICAgIHNob3VsZCgoKSA9PiB0eEJ1aWxkZXIuYXV0aG9yaXR5QWRkcmVzcygnaW52YWxpZEFkZHJlc3MnKSkudGhyb3dFcnJvcigpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgZmFpbCB3aGVuIG5vbmNlIGlzIG5vdCBwcm92aWRlZCcsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRDbG9zZUF0YUluaXRpYWxpemF0aW9uQnVpbGRlcigpO1xuICAgICAgICB0eEJ1aWxkZXIuc2VuZGVyKGFjY291bnQucHViKTtcbiAgICAgICAgdHhCdWlsZGVyLmFjY291bnRBZGRyZXNzKGF0YUFkZHJlc3MxKTtcbiAgICAgICAgdHhCdWlsZGVyLmRlc3RpbmF0aW9uQWRkcmVzcyhkZXN0aW5hdGlvbkFkZHJlc3MpO1xuICAgICAgICB0eEJ1aWxkZXIuYXV0aG9yaXR5QWRkcmVzcyhhY2NvdW50LnB1Yik7XG5cbiAgICAgICAgYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCkuc2hvdWxkLnJlamVjdGVkV2l0aCgnSW52YWxpZCB0cmFuc2FjdGlvbjogbWlzc2luZyBub25jZSBibG9ja2hhc2gnKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGZhaWwgd2hlbiBzZW5kZXIgaXMgbm90IHByb3ZpZGVkJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldENsb3NlQXRhSW5pdGlhbGl6YXRpb25CdWlsZGVyKCk7XG4gICAgICAgIHR4QnVpbGRlci5ub25jZShyZWNlbnRCbG9ja0hhc2gpO1xuICAgICAgICB0eEJ1aWxkZXIuYWNjb3VudEFkZHJlc3MoYXRhQWRkcmVzczEpO1xuICAgICAgICB0eEJ1aWxkZXIuZGVzdGluYXRpb25BZGRyZXNzKGRlc3RpbmF0aW9uQWRkcmVzcyk7XG4gICAgICAgIHR4QnVpbGRlci5hdXRob3JpdHlBZGRyZXNzKGFjY291bnQucHViKTtcblxuICAgICAgICBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKS5zaG91bGQucmVqZWN0ZWRXaXRoKCdJbnZhbGlkIHRyYW5zYWN0aW9uOiBtaXNzaW5nIHNlbmRlcicpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdCdWxrIEFUQSBjbG9zZSAoYWRkQ2xvc2VBdGFJbnN0cnVjdGlvbiknLCAoKSA9PiB7XG4gICAgZGVzY3JpYmUoJ1N1Y2NlZWQnLCAoKSA9PiB7XG4gICAgICBpdCgnYnVpbGQgYSBidWxrIGNsb3NlIEFUQSB0eCB3aXRoIG11bHRpcGxlIEFUQXMgdW5zaWduZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGNsb3NlQXRhQnVpbGRlcigpO1xuICAgICAgICB0eEJ1aWxkZXIuYWRkQ2xvc2VBdGFJbnN0cnVjdGlvbihhdGFBZGRyZXNzMSwgZGVzdGluYXRpb25BZGRyZXNzLCBhY2NvdW50LnB1Yik7XG4gICAgICAgIHR4QnVpbGRlci5hZGRDbG9zZUF0YUluc3RydWN0aW9uKGF0YUFkZHJlc3MyLCBkZXN0aW5hdGlvbkFkZHJlc3MsIGFjY291bnQucHViKTtcblxuICAgICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgICB0eC50eXBlLnNob3VsZC5lcXVhbChUcmFuc2FjdGlvblR5cGUuQ2xvc2VBc3NvY2lhdGVkVG9rZW5BY2NvdW50KTtcblxuICAgICAgICBjb25zdCByYXdUeCA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG4gICAgICAgIHNob3VsZC5lcXVhbChVdGlscy5pc1ZhbGlkUmF3VHJhbnNhY3Rpb24ocmF3VHgpLCB0cnVlKTtcblxuICAgICAgICBjb25zdCBpbnN0cnVjdGlvbnMgPSB0eC50b0pzb24oKS5pbnN0cnVjdGlvbnNEYXRhO1xuICAgICAgICBpbnN0cnVjdGlvbnMubGVuZ3RoLnNob3VsZC5lcXVhbCgyKTtcblxuICAgICAgICBpbnN0cnVjdGlvbnNbMF0udHlwZS5zaG91bGQuZXF1YWwoSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuQ2xvc2VBc3NvY2lhdGVkVG9rZW5BY2NvdW50KTtcbiAgICAgICAgaW5zdHJ1Y3Rpb25zWzBdLnBhcmFtcy5hY2NvdW50QWRkcmVzcy5zaG91bGQuZXF1YWwoYXRhQWRkcmVzczEpO1xuICAgICAgICBpbnN0cnVjdGlvbnNbMF0ucGFyYW1zLmRlc3RpbmF0aW9uQWRkcmVzcy5zaG91bGQuZXF1YWwoZGVzdGluYXRpb25BZGRyZXNzKTtcbiAgICAgICAgaW5zdHJ1Y3Rpb25zWzBdLnBhcmFtcy5hdXRob3JpdHlBZGRyZXNzLnNob3VsZC5lcXVhbChhY2NvdW50LnB1Yik7XG5cbiAgICAgICAgaW5zdHJ1Y3Rpb25zWzFdLnR5cGUuc2hvdWxkLmVxdWFsKEluc3RydWN0aW9uQnVpbGRlclR5cGVzLkNsb3NlQXNzb2NpYXRlZFRva2VuQWNjb3VudCk7XG4gICAgICAgIGluc3RydWN0aW9uc1sxXS5wYXJhbXMuYWNjb3VudEFkZHJlc3Muc2hvdWxkLmVxdWFsKGF0YUFkZHJlc3MyKTtcbiAgICAgICAgaW5zdHJ1Y3Rpb25zWzFdLnBhcmFtcy5kZXN0aW5hdGlvbkFkZHJlc3Muc2hvdWxkLmVxdWFsKGRlc3RpbmF0aW9uQWRkcmVzcyk7XG4gICAgICAgIGluc3RydWN0aW9uc1sxXS5wYXJhbXMuYXV0aG9yaXR5QWRkcmVzcy5zaG91bGQuZXF1YWwoYWNjb3VudC5wdWIpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdidWlsZCBhIGJ1bGsgY2xvc2UgQVRBIHR4IHNpZ25lZCcsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgdHhCdWlsZGVyID0gY2xvc2VBdGFCdWlsZGVyKCk7XG4gICAgICAgIHR4QnVpbGRlci5hZGRDbG9zZUF0YUluc3RydWN0aW9uKGF0YUFkZHJlc3MxLCBkZXN0aW5hdGlvbkFkZHJlc3MsIGFjY291bnQucHViKTtcbiAgICAgICAgdHhCdWlsZGVyLmFkZENsb3NlQXRhSW5zdHJ1Y3Rpb24oYXRhQWRkcmVzczIsIGRlc3RpbmF0aW9uQWRkcmVzcywgYWNjb3VudC5wdWIpO1xuICAgICAgICB0eEJ1aWxkZXIuc2lnbih7IGtleTogYWNjb3VudC5wcnYgfSk7XG5cbiAgICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgICAgdHgudHlwZS5zaG91bGQuZXF1YWwoVHJhbnNhY3Rpb25UeXBlLkNsb3NlQXNzb2NpYXRlZFRva2VuQWNjb3VudCk7XG5cbiAgICAgICAgY29uc3QgcmF3VHggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICAgICAgICBzaG91bGQuZXF1YWwoVXRpbHMuaXNWYWxpZFJhd1RyYW5zYWN0aW9uKHJhd1R4KSwgdHJ1ZSk7XG5cbiAgICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25zID0gdHgudG9Kc29uKCkuaW5zdHJ1Y3Rpb25zRGF0YTtcbiAgICAgICAgaW5zdHJ1Y3Rpb25zLmxlbmd0aC5zaG91bGQuZXF1YWwoMik7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ2J1aWxkIGEgc2luZ2xlIGNsb3NlIHVzaW5nIGFkZENsb3NlQXRhSW5zdHJ1Y3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGNsb3NlQXRhQnVpbGRlcigpO1xuICAgICAgICB0eEJ1aWxkZXIuYWRkQ2xvc2VBdGFJbnN0cnVjdGlvbihhdGFBZGRyZXNzMSwgZGVzdGluYXRpb25BZGRyZXNzLCBhY2NvdW50LnB1Yik7XG5cbiAgICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgICAgdHgudHlwZS5zaG91bGQuZXF1YWwoVHJhbnNhY3Rpb25UeXBlLkNsb3NlQXNzb2NpYXRlZFRva2VuQWNjb3VudCk7XG5cbiAgICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25zID0gdHgudG9Kc29uKCkuaW5zdHJ1Y3Rpb25zRGF0YTtcbiAgICAgICAgaW5zdHJ1Y3Rpb25zLmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG4gICAgICAgIGluc3RydWN0aW9uc1swXS5wYXJhbXMuYWNjb3VudEFkZHJlc3Muc2hvdWxkLmVxdWFsKGF0YUFkZHJlc3MxKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnYWxsIGNsb3NlIGluc3RydWN0aW9ucyBoYXZlIHNhbWUgZGVzdGluYXRpb24gKHJvb3Qgd2FsbGV0KScsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgdHhCdWlsZGVyID0gY2xvc2VBdGFCdWlsZGVyKCk7XG4gICAgICAgIHR4QnVpbGRlci5hZGRDbG9zZUF0YUluc3RydWN0aW9uKGF0YUFkZHJlc3MxLCBkZXN0aW5hdGlvbkFkZHJlc3MsIGFjY291bnQucHViKTtcbiAgICAgICAgdHhCdWlsZGVyLmFkZENsb3NlQXRhSW5zdHJ1Y3Rpb24oYXRhQWRkcmVzczIsIGRlc3RpbmF0aW9uQWRkcmVzcywgYWNjb3VudC5wdWIpO1xuXG4gICAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICAgIGNvbnN0IGluc3RydWN0aW9ucyA9IHR4LnRvSnNvbigpLmluc3RydWN0aW9uc0RhdGE7XG5cbiAgICAgICAgZm9yIChjb25zdCBpbnN0cnVjdGlvbiBvZiBpbnN0cnVjdGlvbnMpIHtcbiAgICAgICAgICBpbnN0cnVjdGlvbi5wYXJhbXMuZGVzdGluYXRpb25BZGRyZXNzLnNob3VsZC5lcXVhbChkZXN0aW5hdGlvbkFkZHJlc3MpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdGYWlsJywgKCkgPT4ge1xuICAgICAgaXQoJ3Nob3VsZCBmYWlsIHdpdGggZHVwbGljYXRlIEFUQSBhZGRyZXNzJywgKCkgPT4ge1xuICAgICAgICBjb25zdCB0eEJ1aWxkZXIgPSBjbG9zZUF0YUJ1aWxkZXIoKTtcbiAgICAgICAgdHhCdWlsZGVyLmFkZENsb3NlQXRhSW5zdHJ1Y3Rpb24oYXRhQWRkcmVzczEsIGRlc3RpbmF0aW9uQWRkcmVzcywgYWNjb3VudC5wdWIpO1xuXG4gICAgICAgIHNob3VsZCgoKSA9PiB0eEJ1aWxkZXIuYWRkQ2xvc2VBdGFJbnN0cnVjdGlvbihhdGFBZGRyZXNzMSwgZGVzdGluYXRpb25BZGRyZXNzLCBhY2NvdW50LnB1YikpLnRocm93RXJyb3IoXG4gICAgICAgICAgJ0R1cGxpY2F0ZSBBVEEgYWRkcmVzczogJyArIGF0YUFkZHJlc3MxXG4gICAgICAgICk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBmYWlsIHdoZW4gYWNjb3VudCBlcXVhbHMgZGVzdGluYXRpb24nLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGNsb3NlQXRhQnVpbGRlcigpO1xuXG4gICAgICAgIHNob3VsZCgoKSA9PiB0eEJ1aWxkZXIuYWRkQ2xvc2VBdGFJbnN0cnVjdGlvbihkZXN0aW5hdGlvbkFkZHJlc3MsIGRlc3RpbmF0aW9uQWRkcmVzcywgYWNjb3VudC5wdWIpKS50aHJvd0Vycm9yKFxuICAgICAgICAgICdBY2NvdW50IGFkZHJlc3MgdG8gY2xvc2UgY2Fubm90IGJlIHRoZSBzYW1lIGFzIHRoZSBkZXN0aW5hdGlvbiBhZGRyZXNzJ1xuICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgZmFpbCB3aXRoIGludmFsaWQgYWNjb3VudCBhZGRyZXNzJywgKCkgPT4ge1xuICAgICAgICBjb25zdCB0eEJ1aWxkZXIgPSBjbG9zZUF0YUJ1aWxkZXIoKTtcbiAgICAgICAgc2hvdWxkKCgpID0+IHR4QnVpbGRlci5hZGRDbG9zZUF0YUluc3RydWN0aW9uKCdpbnZhbGlkJywgZGVzdGluYXRpb25BZGRyZXNzLCBhY2NvdW50LnB1YikpLnRocm93RXJyb3IoKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnc2hvdWxkIGZhaWwgd2l0aCBpbnZhbGlkIGRlc3RpbmF0aW9uIGFkZHJlc3MnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGNsb3NlQXRhQnVpbGRlcigpO1xuICAgICAgICBzaG91bGQoKCkgPT4gdHhCdWlsZGVyLmFkZENsb3NlQXRhSW5zdHJ1Y3Rpb24oYXRhQWRkcmVzczEsICdpbnZhbGlkJywgYWNjb3VudC5wdWIpKS50aHJvd0Vycm9yKCk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3Nob3VsZCBmYWlsIHdpdGggaW52YWxpZCBhdXRob3JpdHkgYWRkcmVzcycsICgpID0+IHtcbiAgICAgICAgY29uc3QgdHhCdWlsZGVyID0gY2xvc2VBdGFCdWlsZGVyKCk7XG4gICAgICAgIHNob3VsZCgoKSA9PiB0eEJ1aWxkZXIuYWRkQ2xvc2VBdGFJbnN0cnVjdGlvbihhdGFBZGRyZXNzMSwgZGVzdGluYXRpb25BZGRyZXNzLCAnaW52YWxpZCcpKS50aHJvd0Vycm9yKCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ01peGluZyBzaW5nbGUtQVRBIGFuZCBidWxrIEFQSXMnLCAoKSA9PiB7XG4gICAgY29uc3QgbWl4RXJyb3JNZXNzYWdlID0gL0Nhbm5vdCBtaXggc2luZ2xlLUFUQSBBUEkgLiogd2l0aCBidWxrLUFUQSBBUEkvO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyB3aGVuIHNpbmdsZS1BVEEgc2V0dGVyIGlzIGNhbGxlZCBhZnRlciBhZGRDbG9zZUF0YUluc3RydWN0aW9uIChhY2NvdW50QWRkcmVzcyknLCAoKSA9PiB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBjbG9zZUF0YUJ1aWxkZXIoKTtcbiAgICAgIHR4QnVpbGRlci5hZGRDbG9zZUF0YUluc3RydWN0aW9uKGF0YUFkZHJlc3MxLCBkZXN0aW5hdGlvbkFkZHJlc3MsIGFjY291bnQucHViKTtcbiAgICAgIHNob3VsZCgoKSA9PiB0eEJ1aWxkZXIuYWNjb3VudEFkZHJlc3MoYXRhQWRkcmVzczIpKS50aHJvdyhtaXhFcnJvck1lc3NhZ2UpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyB3aGVuIHNpbmdsZS1BVEEgc2V0dGVyIGlzIGNhbGxlZCBhZnRlciBhZGRDbG9zZUF0YUluc3RydWN0aW9uIChkZXN0aW5hdGlvbkFkZHJlc3MpJywgKCkgPT4ge1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gY2xvc2VBdGFCdWlsZGVyKCk7XG4gICAgICB0eEJ1aWxkZXIuYWRkQ2xvc2VBdGFJbnN0cnVjdGlvbihhdGFBZGRyZXNzMSwgZGVzdGluYXRpb25BZGRyZXNzLCBhY2NvdW50LnB1Yik7XG4gICAgICBzaG91bGQoKCkgPT4gdHhCdWlsZGVyLmRlc3RpbmF0aW9uQWRkcmVzcyhhY2NvdW50Mi5wdWIpKS50aHJvdyhtaXhFcnJvck1lc3NhZ2UpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyB3aGVuIHNpbmdsZS1BVEEgc2V0dGVyIGlzIGNhbGxlZCBhZnRlciBhZGRDbG9zZUF0YUluc3RydWN0aW9uIChhdXRob3JpdHlBZGRyZXNzKScsICgpID0+IHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGNsb3NlQXRhQnVpbGRlcigpO1xuICAgICAgdHhCdWlsZGVyLmFkZENsb3NlQXRhSW5zdHJ1Y3Rpb24oYXRhQWRkcmVzczEsIGRlc3RpbmF0aW9uQWRkcmVzcywgYWNjb3VudC5wdWIpO1xuICAgICAgc2hvdWxkKCgpID0+IHR4QnVpbGRlci5hdXRob3JpdHlBZGRyZXNzKGFjY291bnQyLnB1YikpLnRocm93KG1peEVycm9yTWVzc2FnZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IHdoZW4gYWRkQ2xvc2VBdGFJbnN0cnVjdGlvbiBpcyBjYWxsZWQgYWZ0ZXIgc2luZ2xlLUFUQSBzZXR0ZXInLCAoKSA9PiB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBjbG9zZUF0YUJ1aWxkZXIoKTtcbiAgICAgIHR4QnVpbGRlci5hY2NvdW50QWRkcmVzcyhhdGFBZGRyZXNzMSk7XG4gICAgICBzaG91bGQoKCkgPT4gdHhCdWlsZGVyLmFkZENsb3NlQXRhSW5zdHJ1Y3Rpb24oYXRhQWRkcmVzczIsIGRlc3RpbmF0aW9uQWRkcmVzcywgYWNjb3VudC5wdWIpKS50aHJvdyhcbiAgICAgICAgbWl4RXJyb3JNZXNzYWdlXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBub3QgY29ycnVwdCB0aGUgZmlyc3QgYnVsayBlbnRyeSB3aGVuIGJ1bGstdGhlbi1zaW5nbGUgaXMgcmVqZWN0ZWQnLCAoKSA9PiB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBjbG9zZUF0YUJ1aWxkZXIoKTtcbiAgICAgIHR4QnVpbGRlci5hZGRDbG9zZUF0YUluc3RydWN0aW9uKGF0YUFkZHJlc3MxLCBkZXN0aW5hdGlvbkFkZHJlc3MsIGFjY291bnQucHViKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHR4QnVpbGRlci5hY2NvdW50QWRkcmVzcyhhdGFBZGRyZXNzMik7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLyogZXhwZWN0ZWQgKi9cbiAgICAgIH1cbiAgICAgIC8vIEZpcnN0IGVudHJ5IG11c3Qgc3RpbGwgYmUgaW50YWN0IGFmdGVyIHRoZSByZWplY3RlZCBtaXggYXR0ZW1wdC5cbiAgICAgIGNvbnN0IGVudHJpZXMgPSAodHhCdWlsZGVyIGFzIHVua25vd24gYXMgeyBfY2xvc2VBdGFFbnRyaWVzOiBBcnJheTx7IGFjY291bnRBZGRyZXNzOiBzdHJpbmcgfT4gfSlcbiAgICAgICAgLl9jbG9zZUF0YUVudHJpZXM7XG4gICAgICBlbnRyaWVzLmxlbmd0aC5zaG91bGQuZXF1YWwoMSk7XG4gICAgICBlbnRyaWVzWzBdLmFjY291bnRBZGRyZXNzLnNob3VsZC5lcXVhbChhdGFBZGRyZXNzMSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdGcm9tIHJhdyB0cmFuc2FjdGlvbicsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIHBhcnNlIGEgc2luZ2xlIGNsb3NlIEFUQSB0eCBmcm9tIHJhdyBhbmQgcmVidWlsZCcsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIEJ1aWxkIGEgdHggZmlyc3RcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGNsb3NlQXRhQnVpbGRlcigpO1xuICAgICAgdHhCdWlsZGVyLmFjY291bnRBZGRyZXNzKGF0YUFkZHJlc3MxKTtcbiAgICAgIHR4QnVpbGRlci5kZXN0aW5hdGlvbkFkZHJlc3MoZGVzdGluYXRpb25BZGRyZXNzKTtcbiAgICAgIHR4QnVpbGRlci5hdXRob3JpdHlBZGRyZXNzKGFjY291bnQucHViKTtcblxuICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGNvbnN0IHJhd1R4ID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcblxuICAgICAgLy8gUGFyc2UgZnJvbSByYXdcbiAgICAgIGNvbnN0IHJlYnVpbHRCdWlsZGVyID0gZmFjdG9yeS5mcm9tKHJhd1R4KTtcbiAgICAgIGNvbnN0IHJlYnVpbHRUeCA9IGF3YWl0IHJlYnVpbHRCdWlsZGVyLmJ1aWxkKCk7XG5cbiAgICAgIHJlYnVpbHRUeC50eXBlLnNob3VsZC5lcXVhbChUcmFuc2FjdGlvblR5cGUuQ2xvc2VBc3NvY2lhdGVkVG9rZW5BY2NvdW50KTtcblxuICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25zID0gcmVidWlsdFR4LnRvSnNvbigpLmluc3RydWN0aW9uc0RhdGE7XG4gICAgICBpbnN0cnVjdGlvbnMubGVuZ3RoLnNob3VsZC5lcXVhbCgxKTtcbiAgICAgIGluc3RydWN0aW9uc1swXS50eXBlLnNob3VsZC5lcXVhbChJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5DbG9zZUFzc29jaWF0ZWRUb2tlbkFjY291bnQpO1xuICAgICAgaW5zdHJ1Y3Rpb25zWzBdLnBhcmFtcy5hY2NvdW50QWRkcmVzcy5zaG91bGQuZXF1YWwoYXRhQWRkcmVzczEpO1xuICAgICAgaW5zdHJ1Y3Rpb25zWzBdLnBhcmFtcy5kZXN0aW5hdGlvbkFkZHJlc3Muc2hvdWxkLmVxdWFsKGRlc3RpbmF0aW9uQWRkcmVzcyk7XG4gICAgICBpbnN0cnVjdGlvbnNbMF0ucGFyYW1zLmF1dGhvcml0eUFkZHJlc3Muc2hvdWxkLmVxdWFsKGFjY291bnQucHViKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcGFyc2UgYSBidWxrIGNsb3NlIEFUQSB0eCBmcm9tIHJhdyBhbmQgcmVidWlsZCcsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIEJ1aWxkIGEgYnVsayB0eCBmaXJzdFxuICAgICAgY29uc3QgdHhCdWlsZGVyID0gY2xvc2VBdGFCdWlsZGVyKCk7XG4gICAgICB0eEJ1aWxkZXIuYWRkQ2xvc2VBdGFJbnN0cnVjdGlvbihhdGFBZGRyZXNzMSwgZGVzdGluYXRpb25BZGRyZXNzLCBhY2NvdW50LnB1Yik7XG4gICAgICB0eEJ1aWxkZXIuYWRkQ2xvc2VBdGFJbnN0cnVjdGlvbihhdGFBZGRyZXNzMiwgZGVzdGluYXRpb25BZGRyZXNzLCBhY2NvdW50LnB1Yik7XG5cbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICBjb25zdCByYXdUeCA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG5cbiAgICAgIC8vIFBhcnNlIGZyb20gcmF3XG4gICAgICBjb25zdCByZWJ1aWx0QnVpbGRlciA9IGZhY3RvcnkuZnJvbShyYXdUeCk7XG4gICAgICBjb25zdCByZWJ1aWx0VHggPSBhd2FpdCByZWJ1aWx0QnVpbGRlci5idWlsZCgpO1xuXG4gICAgICByZWJ1aWx0VHgudHlwZS5zaG91bGQuZXF1YWwoVHJhbnNhY3Rpb25UeXBlLkNsb3NlQXNzb2NpYXRlZFRva2VuQWNjb3VudCk7XG5cbiAgICAgIGNvbnN0IGluc3RydWN0aW9ucyA9IHJlYnVpbHRUeC50b0pzb24oKS5pbnN0cnVjdGlvbnNEYXRhO1xuICAgICAgaW5zdHJ1Y3Rpb25zLmxlbmd0aC5zaG91bGQuZXF1YWwoMik7XG4gICAgICBpbnN0cnVjdGlvbnNbMF0ucGFyYW1zLmFjY291bnRBZGRyZXNzLnNob3VsZC5lcXVhbChhdGFBZGRyZXNzMSk7XG4gICAgICBpbnN0cnVjdGlvbnNbMV0ucGFyYW1zLmFjY291bnRBZGRyZXNzLnNob3VsZC5lcXVhbChhdGFBZGRyZXNzMik7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlamVjdCBsZWdhY3kgc2luZ2xlLUFUQSBzZXR0ZXJzIG9uIGEgcGFyc2VkIGJ1bGsgY2xvc2UgdHgnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBjbG9zZUF0YUJ1aWxkZXIoKTtcbiAgICAgIHR4QnVpbGRlci5hZGRDbG9zZUF0YUluc3RydWN0aW9uKGF0YUFkZHJlc3MxLCBkZXN0aW5hdGlvbkFkZHJlc3MsIGFjY291bnQucHViKTtcbiAgICAgIHR4QnVpbGRlci5hZGRDbG9zZUF0YUluc3RydWN0aW9uKGF0YUFkZHJlc3MyLCBkZXN0aW5hdGlvbkFkZHJlc3MsIGFjY291bnQucHViKTtcbiAgICAgIGNvbnN0IHJhd1R4ID0gKGF3YWl0IHR4QnVpbGRlci5idWlsZCgpKS50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuXG4gICAgICBjb25zdCBwYXJzZWQgPSBmYWN0b3J5LmZyb20ocmF3VHgpIGFzIENsb3NlQXRhQnVpbGRlcjtcbiAgICAgIGNvbnN0IG1peEVycm9yTWVzc2FnZSA9IC9DYW5ub3QgbWl4IHNpbmdsZS1BVEEgQVBJIC4qIHdpdGggYnVsay1BVEEgQVBJLztcbiAgICAgIHNob3VsZCgoKSA9PiBwYXJzZWQuYWNjb3VudEFkZHJlc3MoYXRhQWRkcmVzczEpKS50aHJvdyhtaXhFcnJvck1lc3NhZ2UpO1xuICAgICAgc2hvdWxkKCgpID0+IHBhcnNlZC5kZXN0aW5hdGlvbkFkZHJlc3MoZGVzdGluYXRpb25BZGRyZXNzKSkudGhyb3cobWl4RXJyb3JNZXNzYWdlKTtcbiAgICAgIHNob3VsZCgoKSA9PiBwYXJzZWQuYXV0aG9yaXR5QWRkcmVzcyhhY2NvdW50LnB1YikpLnRocm93KG1peEVycm9yTWVzc2FnZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHBhcnNlIGV4aXN0aW5nIGNsb3NlIEFUQSByYXcgdHggZnJvbSB0ZXN0IHJlc291cmNlcycsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4bkJ1aWxkZXIgPSBmYWN0b3J5LmZyb20odGVzdERhdGEuVFJBTlNGRVJfVU5TSUdORURfVFhfQ0xPU0VfQVRBKTtcbiAgICAgIHNob3VsZC5leGlzdCh0eG5CdWlsZGVyKTtcblxuICAgICAgY29uc3QgdHggPSBhd2FpdCB0eG5CdWlsZGVyLmJ1aWxkKCk7XG4gICAgICB0eC50eXBlLnNob3VsZC5lcXVhbChUcmFuc2FjdGlvblR5cGUuQ2xvc2VBc3NvY2lhdGVkVG9rZW5BY2NvdW50KTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"customInstructionBuilder.d.ts","sourceRoot":"","sources":["../../../../../test/unit/transactionBuilder/customInstructionBuilder.ts"],"names":[],"mappings":""}
|