@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.
- 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/index.d.ts.map +1 -0
- package/dist/{src → cjs/src}/index.js +1 -1
- package/dist/{src → cjs/src}/lib/ataInitializationBuilder.d.ts +12 -1
- package/dist/cjs/src/lib/ataInitializationBuilder.d.ts.map +1 -0
- package/dist/cjs/src/lib/ataInitializationBuilder.js +231 -0
- package/dist/cjs/src/lib/closeAtaBuilder.d.ts +55 -0
- package/dist/cjs/src/lib/closeAtaBuilder.d.ts.map +1 -0
- package/dist/cjs/src/lib/closeAtaBuilder.js +162 -0
- package/dist/cjs/src/lib/confidentialTransferBuilder.d.ts +128 -0
- package/dist/cjs/src/lib/confidentialTransferBuilder.d.ts.map +1 -0
- package/dist/cjs/src/lib/confidentialTransferBuilder.js +311 -0
- package/dist/{src → cjs/src}/lib/constants.d.ts +89 -2
- package/dist/cjs/src/lib/constants.d.ts.map +1 -0
- package/dist/cjs/src/lib/constants.js +269 -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 +304 -0
- package/dist/cjs/src/lib/iface.d.ts +526 -0
- 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 +5 -0
- package/dist/cjs/src/lib/index.d.ts.map +1 -0
- package/dist/cjs/src/lib/index.js +93 -0
- package/dist/{src → cjs/src}/lib/instructionParamsFactory.d.ts +3 -1
- package/dist/cjs/src/lib/instructionParamsFactory.d.ts.map +1 -0
- package/dist/cjs/src/lib/instructionParamsFactory.js +1220 -0
- package/dist/cjs/src/lib/jitoStakePoolOperations.d.ts.map +1 -0
- package/dist/cjs/src/lib/jitoStakePoolOperations.js +200 -0
- package/dist/{src → cjs/src}/lib/keyPair.d.ts +6 -0
- package/dist/cjs/src/lib/keyPair.d.ts.map +1 -0
- package/dist/cjs/src/lib/keyPair.js +112 -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/scaledUiAmount.d.ts +30 -0
- package/dist/cjs/src/lib/scaledUiAmount.d.ts.map +1 -0
- package/dist/cjs/src/lib/scaledUiAmount.js +112 -0
- package/dist/cjs/src/lib/serialization/codecs/v1/config.d.ts +21 -0
- package/dist/cjs/src/lib/serialization/codecs/v1/config.d.ts.map +1 -0
- package/dist/cjs/src/lib/serialization/codecs/v1/config.js +34 -0
- package/dist/cjs/src/lib/serialization/codecs/v1/instruction.d.ts +14 -0
- package/dist/cjs/src/lib/serialization/codecs/v1/instruction.d.ts.map +1 -0
- package/dist/cjs/src/lib/serialization/codecs/v1/instruction.js +32 -0
- package/dist/cjs/src/lib/serialization/codecs/v1/message.d.ts +27 -0
- package/dist/cjs/src/lib/serialization/codecs/v1/message.d.ts.map +1 -0
- package/dist/cjs/src/lib/serialization/codecs/v1/message.js +196 -0
- package/dist/cjs/src/lib/serialization/compileTransactionMessage.d.ts +30 -0
- package/dist/cjs/src/lib/serialization/compileTransactionMessage.d.ts.map +1 -0
- package/dist/cjs/src/lib/serialization/compileTransactionMessage.js +205 -0
- package/dist/cjs/src/lib/serialization/parseWireTransaction.d.ts +9 -0
- package/dist/cjs/src/lib/serialization/parseWireTransaction.d.ts.map +1 -0
- package/dist/cjs/src/lib/serialization/parseWireTransaction.js +58 -0
- package/dist/cjs/src/lib/serialization/wire-transaction.d.ts +14 -0
- package/dist/cjs/src/lib/serialization/wire-transaction.d.ts.map +1 -0
- package/dist/cjs/src/lib/serialization/wire-transaction.js +51 -0
- package/dist/{src → cjs/src}/lib/solInstructionFactory.d.ts +1 -1
- package/dist/cjs/src/lib/solInstructionFactory.d.ts.map +1 -0
- package/dist/cjs/src/lib/solInstructionFactory.js +1094 -0
- package/dist/cjs/src/lib/stakingActivateBuilder.d.ts.map +1 -0
- package/dist/cjs/src/lib/stakingActivateBuilder.js +129 -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 +214 -0
- package/dist/cjs/src/lib/stakingDelegateBuilder.d.ts.map +1 -0
- package/dist/cjs/src/lib/stakingDelegateBuilder.js +126 -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 +87 -0
- package/dist/cjs/src/lib/token2022Resolve.d.ts +106 -0
- package/dist/cjs/src/lib/token2022Resolve.d.ts.map +1 -0
- package/dist/cjs/src/lib/token2022Resolve.js +199 -0
- package/dist/cjs/src/lib/tokenExtensions.d.ts +26 -0
- package/dist/cjs/src/lib/tokenExtensions.d.ts.map +1 -0
- package/dist/cjs/src/lib/tokenExtensions.js +105 -0
- package/dist/{src → cjs/src}/lib/tokenTransferBuilder.d.ts +27 -1
- package/dist/cjs/src/lib/tokenTransferBuilder.d.ts.map +1 -0
- package/dist/cjs/src/lib/tokenTransferBuilder.js +237 -0
- package/dist/{src → cjs/src}/lib/transaction.d.ts +22 -0
- package/dist/cjs/src/lib/transaction.d.ts.map +1 -0
- package/dist/cjs/src/lib/transaction.js +661 -0
- package/dist/{src → cjs/src}/lib/transactionBuilder.d.ts +9 -1
- package/dist/cjs/src/lib/transactionBuilder.d.ts.map +1 -0
- package/dist/cjs/src/lib/transactionBuilder.js +388 -0
- package/dist/{src → cjs/src}/lib/transactionBuilderFactory.d.ts +14 -0
- package/dist/cjs/src/lib/transactionBuilderFactory.d.ts.map +1 -0
- package/dist/cjs/src/lib/transactionBuilderFactory.js +222 -0
- package/dist/cjs/src/lib/transferBuilder.d.ts.map +1 -0
- package/dist/cjs/src/lib/transferBuilder.js +81 -0
- package/dist/cjs/src/lib/transferBuilderV2.d.ts +69 -0
- package/dist/cjs/src/lib/transferBuilderV2.d.ts.map +1 -0
- package/dist/cjs/src/lib/transferBuilderV2.js +252 -0
- package/dist/{src → cjs/src}/lib/utils.d.ts +5 -0
- package/dist/cjs/src/lib/utils.d.ts.map +1 -0
- package/dist/cjs/src/lib/utils.js +657 -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 +5 -0
- package/dist/cjs/src/register.d.ts.map +1 -0
- package/dist/cjs/src/register.js +29 -0
- package/dist/{src → cjs/src}/sol.d.ts +114 -3
- package/dist/cjs/src/sol.d.ts.map +1 -0
- package/dist/cjs/src/sol.js +1670 -0
- package/dist/{src → cjs/src}/solToken.d.ts +7 -0
- package/dist/cjs/src/solToken.d.ts.map +1 -0
- package/dist/cjs/src/solToken.js +79 -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 +29 -29
- 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 +66 -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 +425 -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/cjs/test/unit/register.d.ts +2 -0
- package/dist/cjs/test/unit/register.d.ts.map +1 -0
- package/dist/cjs/test/unit/register.js +65 -0
- package/dist/cjs/test/unit/scaledUiAmount.d.ts +2 -0
- package/dist/cjs/test/unit/scaledUiAmount.d.ts.map +1 -0
- package/dist/cjs/test/unit/scaledUiAmount.js +101 -0
- package/dist/cjs/test/unit/serialization/decodeV1Message.d.ts +2 -0
- package/dist/cjs/test/unit/serialization/decodeV1Message.d.ts.map +1 -0
- package/dist/cjs/test/unit/serialization/decodeV1Message.js +63 -0
- package/dist/cjs/test/unit/serialization/parseWireTransaction.d.ts +2 -0
- package/dist/cjs/test/unit/serialization/parseWireTransaction.d.ts.map +1 -0
- package/dist/cjs/test/unit/serialization/parseWireTransaction.js +90 -0
- package/dist/cjs/test/unit/serialization/transactionV1.d.ts +2 -0
- package/dist/cjs/test/unit/serialization/transactionV1.d.ts.map +1 -0
- package/dist/cjs/test/unit/serialization/transactionV1.js +136 -0
- package/dist/{test → cjs/test}/unit/sol.d.ts.map +1 -1
- package/dist/cjs/test/unit/sol.js +5038 -0
- package/dist/cjs/test/unit/solInstructionFactory.d.ts.map +1 -0
- package/dist/cjs/test/unit/solInstructionFactory.js +623 -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/token2022Resolve.d.ts +2 -0
- package/dist/cjs/test/unit/token2022Resolve.d.ts.map +1 -0
- package/dist/cjs/test/unit/token2022Resolve.js +252 -0
- package/dist/cjs/test/unit/tokenExtensions.d.ts +2 -0
- package/dist/cjs/test/unit/tokenExtensions.d.ts.map +1 -0
- package/dist/cjs/test/unit/tokenExtensions.js +58 -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 +508 -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 +343 -0
- package/dist/cjs/test/unit/transactionBuilder/confidentialTransferBuilder.d.ts +2 -0
- package/dist/cjs/test/unit/transactionBuilder/confidentialTransferBuilder.d.ts.map +1 -0
- package/dist/cjs/test/unit/transactionBuilder/confidentialTransferBuilder.js +909 -0
- package/dist/cjs/test/unit/transactionBuilder/confidentialTransferV1.d.ts +2 -0
- package/dist/cjs/test/unit/transactionBuilder/confidentialTransferV1.d.ts.map +1 -0
- package/dist/cjs/test/unit/transactionBuilder/confidentialTransferV1.js +144 -0
- package/dist/cjs/test/unit/transactionBuilder/confidentialTransferV1Ops.d.ts +2 -0
- package/dist/cjs/test/unit/transactionBuilder/confidentialTransferV1Ops.d.ts.map +1 -0
- package/dist/cjs/test/unit/transactionBuilder/confidentialTransferV1Ops.js +167 -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 +926 -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 +302 -0
- package/dist/cjs/test/unit/transactionBuilder/transferBuilderV2.d.ts.map +1 -0
- package/dist/cjs/test/unit/transactionBuilder/transferBuilderV2.js +910 -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 +628 -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/index.d.ts +7 -0
- package/dist/esm/index.js +7 -0
- package/dist/esm/lib/ataInitializationBuilder.d.ts +58 -0
- package/dist/esm/lib/ataInitializationBuilder.d.ts.map +1 -0
- package/dist/esm/lib/ataInitializationBuilder.js +191 -0
- package/dist/esm/lib/closeAtaBuilder.d.ts +55 -0
- package/dist/esm/lib/closeAtaBuilder.d.ts.map +1 -0
- package/dist/esm/lib/closeAtaBuilder.js +155 -0
- package/dist/esm/lib/confidentialTransferBuilder.d.ts +128 -0
- package/dist/esm/lib/confidentialTransferBuilder.d.ts.map +1 -0
- package/dist/esm/lib/confidentialTransferBuilder.js +304 -0
- package/dist/esm/lib/constants.d.ts +227 -0
- package/dist/esm/lib/constants.d.ts.map +1 -0
- package/dist/esm/lib/constants.js +266 -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 +301 -0
- package/dist/esm/lib/iface.d.ts +526 -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 +27 -0
- package/dist/esm/lib/index.d.ts.map +1 -0
- package/dist/esm/lib/index.js +27 -0
- package/dist/esm/lib/instructionParamsFactory.d.ts +14 -0
- package/dist/esm/lib/instructionParamsFactory.d.ts.map +1 -0
- package/dist/esm/lib/instructionParamsFactory.js +1212 -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 +32 -0
- package/dist/esm/lib/keyPair.d.ts.map +1 -0
- package/dist/esm/lib/keyPair.js +75 -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/scaledUiAmount.d.ts +30 -0
- package/dist/esm/lib/scaledUiAmount.d.ts.map +1 -0
- package/dist/esm/lib/scaledUiAmount.js +108 -0
- package/dist/esm/lib/serialization/codecs/v1/config.d.ts +21 -0
- package/dist/esm/lib/serialization/codecs/v1/config.d.ts.map +1 -0
- package/dist/esm/lib/serialization/codecs/v1/config.js +30 -0
- package/dist/esm/lib/serialization/codecs/v1/instruction.d.ts +14 -0
- package/dist/esm/lib/serialization/codecs/v1/instruction.d.ts.map +1 -0
- package/dist/esm/lib/serialization/codecs/v1/instruction.js +29 -0
- package/dist/esm/lib/serialization/codecs/v1/message.d.ts +27 -0
- package/dist/esm/lib/serialization/codecs/v1/message.d.ts.map +1 -0
- package/dist/esm/lib/serialization/codecs/v1/message.js +188 -0
- package/dist/esm/lib/serialization/compileTransactionMessage.d.ts +30 -0
- package/dist/esm/lib/serialization/compileTransactionMessage.d.ts.map +1 -0
- package/dist/esm/lib/serialization/compileTransactionMessage.js +202 -0
- package/dist/esm/lib/serialization/parseWireTransaction.d.ts +9 -0
- package/dist/esm/lib/serialization/parseWireTransaction.d.ts.map +1 -0
- package/dist/esm/lib/serialization/parseWireTransaction.js +50 -0
- package/dist/esm/lib/serialization/wire-transaction.d.ts +14 -0
- package/dist/esm/lib/serialization/wire-transaction.d.ts.map +1 -0
- package/dist/esm/lib/serialization/wire-transaction.js +48 -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 +1088 -0
- package/dist/esm/lib/stakingActivateBuilder.d.ts +59 -0
- package/dist/{src → esm}/lib/stakingActivateBuilder.d.ts.map +1 -1
- package/dist/esm/lib/stakingActivateBuilder.js +122 -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.d.ts.map +1 -1
- package/dist/esm/lib/stakingDeactivateBuilder.js +207 -0
- package/dist/esm/lib/stakingDelegateBuilder.d.ts +42 -0
- package/dist/{src → esm}/lib/stakingDelegateBuilder.d.ts.map +1 -1
- package/dist/esm/lib/stakingDelegateBuilder.js +119 -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/{src → esm}/lib/stakingWithdrawBuilder.d.ts.map +1 -1
- package/dist/esm/lib/stakingWithdrawBuilder.js +80 -0
- package/dist/esm/lib/token2022Resolve.d.ts +106 -0
- package/dist/esm/lib/token2022Resolve.d.ts.map +1 -0
- package/dist/esm/lib/token2022Resolve.js +194 -0
- package/dist/esm/lib/tokenExtensions.d.ts +26 -0
- package/dist/esm/lib/tokenExtensions.d.ts.map +1 -0
- package/dist/esm/lib/tokenExtensions.js +99 -0
- package/dist/esm/lib/tokenTransferBuilder.d.ts +67 -0
- package/dist/esm/lib/tokenTransferBuilder.d.ts.map +1 -0
- package/dist/esm/lib/tokenTransferBuilder.js +230 -0
- package/dist/esm/lib/transaction.d.ts +125 -0
- package/dist/esm/lib/transaction.d.ts.map +1 -0
- package/dist/esm/lib/transaction.js +654 -0
- package/dist/esm/lib/transactionBuilder.d.ts +136 -0
- package/dist/esm/lib/transactionBuilder.d.ts.map +1 -0
- package/dist/esm/lib/transactionBuilder.js +381 -0
- package/dist/esm/lib/transactionBuilderFactory.d.ts +129 -0
- package/dist/esm/lib/transactionBuilderFactory.d.ts.map +1 -0
- package/dist/esm/lib/transactionBuilderFactory.js +218 -0
- package/dist/esm/lib/transferBuilder.d.ts +26 -0
- package/dist/{src → esm}/lib/transferBuilder.d.ts.map +1 -1
- package/dist/esm/lib/transferBuilder.js +74 -0
- package/dist/esm/lib/transferBuilderV2.d.ts +69 -0
- package/dist/esm/lib/transferBuilderV2.d.ts.map +1 -0
- package/dist/esm/lib/transferBuilderV2.js +245 -0
- package/dist/esm/lib/utils.d.ts +205 -0
- package/dist/{src → esm}/lib/utils.d.ts.map +1 -1
- package/dist/esm/lib/utils.js +619 -0
- package/dist/esm/lib/walletInitializationBuilder.d.ts +26 -0
- package/dist/esm/lib/walletInitializationBuilder.js +64 -0
- package/dist/esm/register.d.ts +5 -0
- package/dist/esm/register.d.ts.map +1 -0
- package/dist/esm/register.js +24 -0
- package/dist/esm/sol.d.ts +351 -0
- package/dist/esm/sol.d.ts.map +1 -0
- package/dist/esm/sol.js +1629 -0
- package/dist/esm/solToken.d.ts +44 -0
- package/dist/esm/solToken.d.ts.map +1 -0
- package/dist/esm/solToken.js +75 -0
- package/dist/esm/tsol.d.ts +11 -0
- package/dist/esm/tsol.js +20 -0
- package/package.json +36 -16
- package/dist/src/config/token2022StaticConfig.d.ts +0 -3
- package/dist/src/config/token2022StaticConfig.d.ts.map +0 -1
- package/dist/src/config/token2022StaticConfig.js +0 -50
- package/dist/src/lib/ataInitializationBuilder.d.ts.map +0 -1
- package/dist/src/lib/ataInitializationBuilder.js +0 -196
- 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 +0 -244
- package/dist/src/lib/iface.d.ts.map +0 -1
- package/dist/src/lib/iface.js +0 -7
- package/dist/src/lib/index.d.ts.map +0 -1
- package/dist/src/lib/index.js +0 -77
- package/dist/src/lib/instructionParamsFactory.d.ts.map +0 -1
- package/dist/src/lib/instructionParamsFactory.js +0 -1036
- package/dist/src/lib/jitoStakePoolOperations.js +0 -200
- package/dist/src/lib/keyPair.d.ts.map +0 -1
- 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/stakingDeactivateBuilder.js +0 -208
- 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.d.ts +0 -44
- package/dist/src/lib/token2022Config.d.ts.map +0 -1
- package/dist/src/lib/token2022Config.js +0 -27
- package/dist/src/lib/tokenTransferBuilder.d.ts.map +0 -1
- 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.d.ts.map +0 -1
- 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.d.ts +0 -43
- package/dist/src/lib/transferBuilderV2.d.ts.map +0 -1
- 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.d.ts +0 -3
- package/dist/src/register.d.ts.map +0 -1
- package/dist/src/register.js +0 -15
- package/dist/src/sol.d.ts.map +0 -1
- package/dist/src/sol.js +0 -1324
- package/dist/src/solToken.d.ts.map +0 -1
- 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 -3180
- 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}/index.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/messages/index.d.ts +0 -0
- /package/dist/{src → cjs/src}/lib/messages/messageBuilderFactory.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/transferBuilder.d.ts +0 -0
- /package/dist/{src → cjs/src}/lib/walletInitializationBuilder.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}/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/messages/index.d.ts.map +0 -0
- /package/dist/{src → esm}/lib/messages/messageBuilderFactory.d.ts.map +0 -0
- /package/dist/{src → esm}/lib/stakingAuthorizeBuilder.d.ts.map +0 -0
- /package/dist/{src → esm}/lib/stakingRawMsgAuthorizeBuilder.d.ts.map +0 -0
- /package/dist/{src → esm}/lib/walletInitializationBuilder.d.ts.map +0 -0
- /package/dist/{src → esm}/tsol.d.ts.map +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=bigint-buffer-guard.d.ts.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import './bigint-buffer-guard';
|
|
2
|
+
export * from './lib';
|
|
3
|
+
export * from './sol';
|
|
4
|
+
export * from './solToken';
|
|
5
|
+
export * from './tsol';
|
|
6
|
+
export * from './register';
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyx1QkFBdUIsQ0FBQztBQUMvQixjQUFjLE9BQU8sQ0FBQztBQUN0QixjQUFjLE9BQU8sQ0FBQztBQUN0QixjQUFjLFlBQVksQ0FBQztBQUMzQixjQUFjLFFBQVEsQ0FBQztBQUN2QixjQUFjLFlBQVksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAnLi9iaWdpbnQtYnVmZmVyLWd1YXJkJztcbmV4cG9ydCAqIGZyb20gJy4vbGliJztcbmV4cG9ydCAqIGZyb20gJy4vc29sJztcbmV4cG9ydCAqIGZyb20gJy4vc29sVG9rZW4nO1xuZXhwb3J0ICogZnJvbSAnLi90c29sJztcbmV4cG9ydCAqIGZyb20gJy4vcmVnaXN0ZXInO1xuIl19
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { TransactionBuilder } from './transactionBuilder';
|
|
2
|
+
import { TransactionType } from '@bitgo-beta/sdk-core';
|
|
3
|
+
import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
|
|
4
|
+
import { Transaction } from './transaction';
|
|
5
|
+
import { PermissionlessThawIdempotent, TokenAssociateRecipient } from './iface';
|
|
6
|
+
export declare class AtaInitializationBuilder extends TransactionBuilder {
|
|
7
|
+
private _tokenName;
|
|
8
|
+
private _mint;
|
|
9
|
+
private _owner;
|
|
10
|
+
private _tokenAssociateRecipients;
|
|
11
|
+
private _permissionlessThawParams;
|
|
12
|
+
constructor(_coinConfig: Readonly<CoinConfig>);
|
|
13
|
+
protected get transactionType(): TransactionType;
|
|
14
|
+
/** @inheritDoc */
|
|
15
|
+
initBuilder(tx: Transaction): void;
|
|
16
|
+
/**
|
|
17
|
+
* @deprecated - Use the enableToken method instead
|
|
18
|
+
* Sets the mint address of the associated token account
|
|
19
|
+
*
|
|
20
|
+
* @param tokenName name of the token
|
|
21
|
+
*/
|
|
22
|
+
mint(tokenName: string): this;
|
|
23
|
+
/**
|
|
24
|
+
* @deprecated - Use the enableToken method instead
|
|
25
|
+
* Sets the owner address of the associated token account
|
|
26
|
+
*
|
|
27
|
+
* @param owner owner address of associated token account
|
|
28
|
+
*/
|
|
29
|
+
owner(owner: string): this;
|
|
30
|
+
/**
|
|
31
|
+
* @deprecated - Use the associatedTokenAccountRent method instead
|
|
32
|
+
* Used to set the minimum rent exempt amount
|
|
33
|
+
*
|
|
34
|
+
* @param rentExemptAmount minimum rent exempt amount in lamports
|
|
35
|
+
*/
|
|
36
|
+
rentExemptAmount(rentExemptAmount: string): this;
|
|
37
|
+
/**
|
|
38
|
+
* Used for adding token association recipients consisting
|
|
39
|
+
* 1. ownerAddress: owner of the token address
|
|
40
|
+
* 2. tokenName: the name of token enabled that is supported by BitGo
|
|
41
|
+
*
|
|
42
|
+
* @param TokenAssociateRecipient token associate recipient info
|
|
43
|
+
*/
|
|
44
|
+
enableToken(recipient: TokenAssociateRecipient): this;
|
|
45
|
+
/**
|
|
46
|
+
* Set a resolved sRFC-37 Token ACL permissionless-thaw instruction for an ATA enablement.
|
|
47
|
+
*
|
|
48
|
+
* The builder remains offline; callers resolve gating accounts live and pass fully materialized
|
|
49
|
+
* params. Multiple Token-2022 ATA enablements may each add one thaw instruction.
|
|
50
|
+
*
|
|
51
|
+
* @param {PermissionlessThawIdempotent['params']} params - resolved thaw params
|
|
52
|
+
* @returns {AtaInitializationBuilder} This transaction builder
|
|
53
|
+
*/
|
|
54
|
+
permissionlessThaw(params: PermissionlessThawIdempotent['params']): this;
|
|
55
|
+
/** @inheritdoc */
|
|
56
|
+
protected buildImplementation(): Promise<Transaction>;
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=ataInitializationBuilder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ataInitializationBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/ataInitializationBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAA+C,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACpG,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAW,4BAA4B,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAC;AAWzF,qBAAa,wBAAyB,SAAQ,kBAAkB;IAE9D,OAAO,CAAC,UAAU,CAAS;IAE3B,OAAO,CAAC,KAAK,CAAS;IAEtB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,yBAAyB,CAA4B;IAC7D,OAAO,CAAC,yBAAyB,CAA2C;gBAEhE,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAO7C,SAAS,KAAK,eAAe,IAAI,eAAe,CAE/C;IAED,kBAAkB;IAClB,WAAW,CAAC,EAAE,EAAE,WAAW,GAAG,IAAI;IAmBlC;;;;;OAKG;IACH,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAc7B;;;;;OAKG;IACH,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAS1B;;;;;OAKG;IACH,gBAAgB,CAAC,gBAAgB,EAAE,MAAM,GAAG,IAAI;IAIhD;;;;;;OAMG;IAEH,WAAW,CAAC,SAAS,EAAE,uBAAuB,GAAG,IAAI;IA+BrD;;;;;;;;OAQG;IACH,kBAAkB,CAAC,MAAM,EAAE,4BAA4B,CAAC,QAAQ,CAAC,GAAG,IAAI;IAKxE,kBAAkB;cACF,mBAAmB,IAAI,OAAO,CAAC,WAAW,CAAC;CAuE5D"}
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
import { TransactionBuilder } from './transactionBuilder';
|
|
2
|
+
import { BuildTransactionError, DuplicateMethodError, TransactionType } from '@bitgo-beta/sdk-core';
|
|
3
|
+
import { Transaction } from './transaction';
|
|
4
|
+
import { InstructionBuilderTypes } from './constants';
|
|
5
|
+
import { getAssociatedTokenAccountAddress, getSolTokenFromTokenName, validateMintAddress, validateOwnerAddress, } from './utils';
|
|
6
|
+
import assert from 'assert';
|
|
7
|
+
import * as _ from 'lodash';
|
|
8
|
+
export class AtaInitializationBuilder extends TransactionBuilder {
|
|
9
|
+
constructor(_coinConfig) {
|
|
10
|
+
super(_coinConfig);
|
|
11
|
+
this._transaction = new Transaction(_coinConfig);
|
|
12
|
+
this._permissionlessThawParams = [];
|
|
13
|
+
this._tokenAssociateRecipients = [];
|
|
14
|
+
}
|
|
15
|
+
get transactionType() {
|
|
16
|
+
return TransactionType.AssociatedTokenAccountInitialization;
|
|
17
|
+
}
|
|
18
|
+
/** @inheritDoc */
|
|
19
|
+
initBuilder(tx) {
|
|
20
|
+
super.initBuilder(tx);
|
|
21
|
+
this._permissionlessThawParams = [];
|
|
22
|
+
this._tokenAssociateRecipients = [];
|
|
23
|
+
for (const instruction of this._instructionsData) {
|
|
24
|
+
if (instruction.type === InstructionBuilderTypes.CreateAssociatedTokenAccount) {
|
|
25
|
+
const ataInitInstruction = instruction;
|
|
26
|
+
this._tokenAssociateRecipients.push({
|
|
27
|
+
ownerAddress: ataInitInstruction.params.ownerAddress,
|
|
28
|
+
tokenName: ataInitInstruction.params.tokenName,
|
|
29
|
+
tokenAddress: ataInitInstruction.params.mintAddress,
|
|
30
|
+
programId: ataInitInstruction.params.programId,
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
else if (instruction.type === InstructionBuilderTypes.PermissionlessThawIdempotent) {
|
|
34
|
+
this._permissionlessThawParams.push(instruction.params);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* @deprecated - Use the enableToken method instead
|
|
40
|
+
* Sets the mint address of the associated token account
|
|
41
|
+
*
|
|
42
|
+
* @param tokenName name of the token
|
|
43
|
+
*/
|
|
44
|
+
mint(tokenName) {
|
|
45
|
+
if (this._tokenAssociateRecipients.length > 0) {
|
|
46
|
+
throw new DuplicateMethodError('Invalid method: enableToken already used');
|
|
47
|
+
}
|
|
48
|
+
const token = getSolTokenFromTokenName(tokenName);
|
|
49
|
+
if (!token) {
|
|
50
|
+
throw new BuildTransactionError('Invalid transaction: invalid token name, got: ' + tokenName);
|
|
51
|
+
}
|
|
52
|
+
this._mint = token.tokenAddress;
|
|
53
|
+
this._tokenName = token.name;
|
|
54
|
+
validateMintAddress(this._mint);
|
|
55
|
+
return this;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* @deprecated - Use the enableToken method instead
|
|
59
|
+
* Sets the owner address of the associated token account
|
|
60
|
+
*
|
|
61
|
+
* @param owner owner address of associated token account
|
|
62
|
+
*/
|
|
63
|
+
owner(owner) {
|
|
64
|
+
if (this._tokenAssociateRecipients.length > 0) {
|
|
65
|
+
throw new DuplicateMethodError('Invalid method: enableToken already used');
|
|
66
|
+
}
|
|
67
|
+
this._owner = owner;
|
|
68
|
+
validateOwnerAddress(owner);
|
|
69
|
+
return this;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* @deprecated - Use the associatedTokenAccountRent method instead
|
|
73
|
+
* Used to set the minimum rent exempt amount
|
|
74
|
+
*
|
|
75
|
+
* @param rentExemptAmount minimum rent exempt amount in lamports
|
|
76
|
+
*/
|
|
77
|
+
rentExemptAmount(rentExemptAmount) {
|
|
78
|
+
return super.associatedTokenAccountRent(rentExemptAmount);
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Used for adding token association recipients consisting
|
|
82
|
+
* 1. ownerAddress: owner of the token address
|
|
83
|
+
* 2. tokenName: the name of token enabled that is supported by BitGo
|
|
84
|
+
*
|
|
85
|
+
* @param TokenAssociateRecipient token associate recipient info
|
|
86
|
+
*/
|
|
87
|
+
enableToken(recipient) {
|
|
88
|
+
if (this._tokenAssociateRecipients.some((tokenAssociate) => _.isEqual(tokenAssociate, recipient))) {
|
|
89
|
+
throw new BuildTransactionError('Invalid transaction: invalid duplicate recipients, got: owner ' +
|
|
90
|
+
recipient.ownerAddress +
|
|
91
|
+
' and tokenName ' +
|
|
92
|
+
recipient.tokenName +
|
|
93
|
+
' twice');
|
|
94
|
+
}
|
|
95
|
+
if (this._tokenName || this._mint) {
|
|
96
|
+
throw new DuplicateMethodError('Invalid method: single mint already used');
|
|
97
|
+
}
|
|
98
|
+
validateOwnerAddress(recipient.ownerAddress);
|
|
99
|
+
let tokenAddress;
|
|
100
|
+
if (recipient.tokenAddress) {
|
|
101
|
+
tokenAddress = recipient.tokenAddress;
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
const token = getSolTokenFromTokenName(recipient.tokenName);
|
|
105
|
+
if (token) {
|
|
106
|
+
tokenAddress = token.tokenAddress;
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
throw new BuildTransactionError('Invalid transaction: invalid token name, got: ' + recipient.tokenName);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
validateMintAddress(tokenAddress);
|
|
113
|
+
this._tokenAssociateRecipients.push(recipient);
|
|
114
|
+
return this;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Set a resolved sRFC-37 Token ACL permissionless-thaw instruction for an ATA enablement.
|
|
118
|
+
*
|
|
119
|
+
* The builder remains offline; callers resolve gating accounts live and pass fully materialized
|
|
120
|
+
* params. Multiple Token-2022 ATA enablements may each add one thaw instruction.
|
|
121
|
+
*
|
|
122
|
+
* @param {PermissionlessThawIdempotent['params']} params - resolved thaw params
|
|
123
|
+
* @returns {AtaInitializationBuilder} This transaction builder
|
|
124
|
+
*/
|
|
125
|
+
permissionlessThaw(params) {
|
|
126
|
+
this._permissionlessThawParams.push(params);
|
|
127
|
+
return this;
|
|
128
|
+
}
|
|
129
|
+
/** @inheritdoc */
|
|
130
|
+
async buildImplementation() {
|
|
131
|
+
assert(this._sender, 'Sender must be set before building the transaction');
|
|
132
|
+
if (this._tokenAssociateRecipients.length === 0) {
|
|
133
|
+
assert(this._mint && this._tokenName, 'Mint must be set before building the transaction');
|
|
134
|
+
this._owner = this._owner || this._sender;
|
|
135
|
+
this._tokenAssociateRecipients.push({
|
|
136
|
+
ownerAddress: this._owner,
|
|
137
|
+
tokenName: this._tokenName,
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
this._instructionsData = [];
|
|
141
|
+
if (this._priorityFee && this._priorityFee !== Number(0)) {
|
|
142
|
+
this._instructionsData.push({
|
|
143
|
+
type: InstructionBuilderTypes.SetPriorityFee,
|
|
144
|
+
params: {
|
|
145
|
+
fee: this._priorityFee,
|
|
146
|
+
},
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
await Promise.all(this._tokenAssociateRecipients.map(async (recipient) => {
|
|
150
|
+
let tokenAddress;
|
|
151
|
+
let programId;
|
|
152
|
+
if (recipient.tokenAddress && recipient.programId) {
|
|
153
|
+
tokenAddress = recipient.tokenAddress;
|
|
154
|
+
programId = recipient.programId;
|
|
155
|
+
}
|
|
156
|
+
else {
|
|
157
|
+
const token = getSolTokenFromTokenName(recipient.tokenName);
|
|
158
|
+
if (token) {
|
|
159
|
+
tokenAddress = token.tokenAddress;
|
|
160
|
+
programId = token.programId;
|
|
161
|
+
}
|
|
162
|
+
else {
|
|
163
|
+
throw new BuildTransactionError('Invalid transaction: invalid token name, got: ' + recipient.tokenName);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
// Use the provided ataAddress if it exists, otherwise calculate it
|
|
167
|
+
let ataPk = recipient.ataAddress;
|
|
168
|
+
if (!ataPk) {
|
|
169
|
+
ataPk = await getAssociatedTokenAccountAddress(tokenAddress, recipient.ownerAddress, false, programId);
|
|
170
|
+
}
|
|
171
|
+
this._instructionsData.push({
|
|
172
|
+
type: InstructionBuilderTypes.CreateAssociatedTokenAccount,
|
|
173
|
+
params: {
|
|
174
|
+
mintAddress: tokenAddress,
|
|
175
|
+
ataAddress: ataPk,
|
|
176
|
+
ownerAddress: recipient.ownerAddress,
|
|
177
|
+
// Match transactionBuilder fee payer selection when a distinct fee payer is set.
|
|
178
|
+
payerAddress: this._feePayer ?? this._sender,
|
|
179
|
+
tokenName: recipient.tokenName,
|
|
180
|
+
programId: programId,
|
|
181
|
+
},
|
|
182
|
+
});
|
|
183
|
+
}));
|
|
184
|
+
this._instructionsData.push(...this._permissionlessThawParams.map((params) => ({
|
|
185
|
+
type: InstructionBuilderTypes.PermissionlessThawIdempotent,
|
|
186
|
+
params,
|
|
187
|
+
})));
|
|
188
|
+
return await super.buildImplementation();
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXRhSW5pdGlhbGl6YXRpb25CdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9hdGFJbml0aWFsaXphdGlvbkJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDMUQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLG9CQUFvQixFQUFFLGVBQWUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXBHLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFNUMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3RELE9BQU8sRUFDTCxnQ0FBZ0MsRUFDaEMsd0JBQXdCLEVBQ3hCLG1CQUFtQixFQUNuQixvQkFBb0IsR0FDckIsTUFBTSxTQUFTLENBQUM7QUFDakIsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sS0FBSyxDQUFDLE1BQU0sUUFBUSxDQUFDO0FBRTVCLE1BQU0sT0FBTyx3QkFBeUIsU0FBUSxrQkFBa0I7SUFVOUQsWUFBWSxXQUFpQztRQUMzQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDbkIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNqRCxJQUFJLENBQUMseUJBQXlCLEdBQUcsRUFBRSxDQUFDO1FBQ3BDLElBQUksQ0FBQyx5QkFBeUIsR0FBRyxFQUFFLENBQUM7SUFDdEMsQ0FBQztJQUVELElBQWMsZUFBZTtRQUMzQixPQUFPLGVBQWUsQ0FBQyxvQ0FBb0MsQ0FBQztJQUM5RCxDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLFdBQVcsQ0FBQyxFQUFlO1FBQ3pCLEtBQUssQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdEIsSUFBSSxDQUFDLHlCQUF5QixHQUFHLEVBQUUsQ0FBQztRQUNwQyxJQUFJ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QyxDQUFDO2dCQUMxRyxDQUFDO1lBQ0gsQ0FBQztZQUVELG1FQUFtRTtZQUNuRSxJQUFJLEtBQUssR0FBRyxTQUFTLENBQUMsVUFBVSxDQUFDO1lBQ2pDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDWCxLQUFLLEdBQUcsTUFBTSxnQ0FBZ0MsQ0FBQyxZQUFZLEVBQUUsU0FBUyxDQUFDLFlBQVksRUFBRSxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDekcsQ0FBQztZQUVELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUM7Z0JBQzFCLElBQUksRUFBRSx1QkFBdUIsQ0FBQyw0QkFBNEI7Z0JBQzFELE1BQU0sRUFBRTtvQkFDTixXQUFXLEVBQUUsWUFBWTtvQkFDekIsVUFBVSxFQUFFLEtBQUs7b0JBQ2pCLFlBQVksRUFBRSxTQUFTLENBQUMsWUFBWTtvQkFDcEMsaUZBQWlGO29CQUNqRixZQUFZLEVBQUUsSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsT0FBTztvQkFDNUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxTQUFTO29CQUM5QixTQUFTLEVBQUUsU0FBUztpQkFDckI7YUFDRixDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FDSCxDQUFDO1FBRUYsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FDekIsR0FBRyxJQUFJLENBQUMseUJBQXlCLENBQUMsR0FBRyxDQUNuQyxDQUFDLE1BQU0sRUFBZ0MsRUFBRSxDQUFDLENBQUM7WUFDekMsSUFBSSxFQUFFLHVCQUF1QixDQUFDLDRCQUE0QjtZQUMxRCxNQUFNO1NBQ1AsQ0FBQyxDQUNILENBQ0YsQ0FBQztRQUVGLE9BQU8sTUFBTSxLQUFLLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztJQUMzQyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUcmFuc2FjdGlvbkJ1aWxkZXIgfSBmcm9tICcuL3RyYW5zYWN0aW9uQnVpbGRlcic7XG5pbXBvcnQgeyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IsIER1cGxpY2F0ZU1ldGhvZEVycm9yLCBUcmFuc2FjdGlvblR5cGUgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBCYXNlQ29pbiBhcyBDb2luQ29uZmlnIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbiB9IGZyb20gJy4vdHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgQXRhSW5pdCwgUGVybWlzc2lvbmxlc3NUaGF3SWRlbXBvdGVudCwgVG9rZW5Bc3NvY2lhdGVSZWNpcGllbnQgfSBmcm9tICcuL2lmYWNlJztcbmltcG9ydCB7IEluc3RydWN0aW9uQnVpbGRlclR5cGVzIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHtcbiAgZ2V0QXNzb2NpYXRlZFRva2VuQWNjb3VudEFkZHJlc3MsXG4gIGdldFNvbFRva2VuRnJvbVRva2VuTmFtZSxcbiAgdmFsaWRhdGVNaW50QWRkcmVzcyxcbiAgdmFsaWRhdGVPd25lckFkZHJlc3MsXG59IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnO1xuXG5leHBvcnQgY2xhc3MgQXRhSW5pdGlhbGl6YXRpb25CdWlsZGVyIGV4dGVuZHMgVHJhbnNhY3Rpb25CdWlsZGVyIHtcbiAgLy8gQGRlcHJlY2F0ZWQgLSBVc2UgdGhlIF90b2tlbkFzc29jaWF0ZVJlY2lwaWVudHMgZmllbGQgaW5zdGVhZFxuICBwcml2YXRlIF90b2tlbk5hbWU6IHN0cmluZztcbiAgLy8gQGRlcHJlY2F0ZWQgLSBVc2UgdGhlIF90b2tlbkFzc29jaWF0ZVJlY2lwaWVudHMgZmllbGQgaW5zdGVhZFxuICBwcml2YXRlIF9taW50OiBzdHJpbmc7XG4gIC8vIEBkZXByZWNhdGVkIC0gVXNlIHRoZSBfdG9rZW5Bc3NvY2lhdGVSZWNpcGllbnRzIGZpZWxkIGluc3RlYWRcbiAgcHJpdmF0ZSBfb3duZXI6IHN0cmluZztcbiAgcHJpdmF0ZSBfdG9rZW5Bc3NvY2lhdGVSZWNpcGllbnRzOiBUb2tlbkFzc29jaWF0ZVJlY2lwaWVudFtdO1xuICBwcml2YXRlIF9wZXJtaXNzaW9ubGVzc1RoYXdQYXJhbXM6IFBlcm1pc3Npb25sZXNzVGhhd0lkZW1wb3RlbnRbJ3BhcmFtcyddW107XG5cbiAgY29uc3RydWN0b3IoX2NvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoX2NvaW5Db25maWcpO1xuICAgIHRoaXMuX3RyYW5zYWN0aW9uID0gbmV3IFRyYW5zYWN0aW9uKF9jb2luQ29uZmlnKTtcbiAgICB0aGlzLl9wZXJtaXNzaW9ubGVzc1RoYXdQYXJhbXMgPSBbXTtcbiAgICB0aGlzLl90b2tlbkFzc29jaWF0ZVJlY2lwaWVudHMgPSBbXTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgdHJhbnNhY3Rpb25UeXBlKCk6IFRyYW5zYWN0aW9uVHlwZSB7XG4gICAgcmV0dXJuIFRyYW5zYWN0aW9uVHlwZS5Bc3NvY2lhdGVkVG9rZW5BY2NvdW50SW5pdGlhbGl6YXRpb247XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgaW5pdEJ1aWxkZXIodHg6IFRyYW5zYWN0aW9uKTogdm9pZCB7XG4gICAgc3VwZXIuaW5pdEJ1aWxkZXIodHgpO1xuICAgIHRoaXMuX3Blcm1pc3Npb25sZXNzVGhhd1BhcmFtcyA9IFtdO1xuICAgIHRoaXMuX3Rva2VuQXNzb2NpYXRlUmVjaXBpZW50cyA9IFtdO1xuICAgIGZvciAoY29uc3QgaW5zdHJ1Y3Rpb24gb2YgdGhpcy5faW5zdHJ1Y3Rpb25zRGF0YSkge1xuICAgICAgaWYgKGluc3RydWN0aW9uLnR5cGUgPT09IEluc3RydWN0aW9uQnVpbGRlclR5cGVzLkNyZWF0ZUFzc29jaWF0ZWRUb2tlbkFjY291bnQpIHtcbiAgICAgICAgY29uc3QgYXRhSW5pdEluc3RydWN0aW9uOiBBdGFJbml0ID0gaW5zdHJ1Y3Rpb247XG4gICAgICAgIHRoaXMuX3Rva2VuQXNzb2NpYXRlUmVjaXBpZW50cy5wdXNoKHtcbiAgICAgICAgICBvd25lckFkZHJlc3M6IGF0YUluaXRJbnN0cnVjdGlvbi5wYXJhbXMub3duZXJBZGRyZXNzLFxuICAgICAgICAgIHRva2VuTmFtZTogYXRhSW5pdEluc3RydWN0aW9uLnBhcmFtcy50b2tlbk5hbWUsXG4gICAgICAgICAgdG9rZW5BZGRyZXNzOiBhdGFJbml0SW5zdHJ1Y3Rpb24ucGFyYW1zLm1pbnRBZGRyZXNzLFxuICAgICAgICAgIHByb2dyYW1JZDogYXRhSW5pdEluc3RydWN0aW9uLnBhcmFtcy5wcm9ncmFtSWQsXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmIChpbnN0cnVjdGlvbi50eXBlID09PSBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5QZXJtaXNzaW9ubGVzc1RoYXdJZGVtcG90ZW50KSB7XG4gICAgICAgIHRoaXMuX3Blcm1pc3Npb25sZXNzVGhhd1BhcmFtcy5wdXNoKChpbnN0cnVjdGlvbiBhcyBQZXJtaXNzaW9ubGVzc1RoYXdJZGVtcG90ZW50KS5wYXJhbXMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCAtIFVzZSB0aGUgZW5hYmxlVG9rZW4gbWV0aG9kIGluc3RlYWRcbiAgICogU2V0cyB0aGUgbWludCBhZGRyZXNzIG9mIHRoZSBhc3NvY2lhdGVkIHRva2VuIGFjY291bnRcbiAgICpcbiAgICogQHBhcmFtIHRva2VuTmFtZSBuYW1lIG9mIHRoZSB0b2tlblxuICAgKi9cbiAgbWludCh0b2tlbk5hbWU6IHN0cmluZyk6IHRoaXMge1xuICAgIGlmICh0aGlzLl90b2tlbkFzc29jaWF0ZVJlY2lwaWVudHMubGVuZ3RoID4gMCkge1xuICAgICAgdGhyb3cgbmV3IER1cGxpY2F0ZU1ldGhvZEVycm9yKCdJbnZhbGlkIG1ldGhvZDogZW5hYmxlVG9rZW4gYWxyZWFkeSB1c2VkJyk7XG4gICAgfVxuICAgIGNvbnN0IHRva2VuID0gZ2V0U29sVG9rZW5Gcm9tVG9rZW5OYW1lKHRva2VuTmFtZSk7XG4gICAgaWYgKCF0b2tlbikge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCB0cmFuc2FjdGlvbjogaW52YWxpZCB0b2tlbiBuYW1lLCBnb3Q6ICcgKyB0b2tlbk5hbWUpO1xuICAgIH1cbiAgICB0aGlzLl9taW50ID0gdG9rZW4udG9rZW5BZGRyZXNzO1xuICAgIHRoaXMuX3Rva2VuTmFtZSA9IHRva2VuLm5hbWU7XG4gICAgdmFsaWRhdGVNaW50QWRkcmVzcyh0aGlzLl9taW50KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCAtIFVzZSB0aGUgZW5hYmxlVG9rZW4gbWV0aG9kIGluc3RlYWRcbiAgICogU2V0cyB0aGUgb3duZXIgYWRkcmVzcyBvZiB0aGUgYXNzb2NpYXRlZCB0b2tlbiBhY2NvdW50XG4gICAqXG4gICAqIEBwYXJhbSBvd25lciBvd25lciBhZGRyZXNzIG9mIGFzc29jaWF0ZWQgdG9rZW4gYWNjb3VudFxuICAgKi9cbiAgb3duZXIob3duZXI6IHN0cmluZyk6IHRoaXMge1xuICAgIGlmICh0aGlzLl90b2tlbkFzc29jaWF0ZVJlY2lwaWVudHMubGVuZ3RoID4gMCkge1xuICAgICAgdGhyb3cgbmV3IER1cGxpY2F0ZU1ldGhvZEVycm9yKCdJbnZhbGlkIG1ldGhvZDogZW5hYmxlVG9rZW4gYWxyZWFkeSB1c2VkJyk7XG4gICAgfVxuICAgIHRoaXMuX293bmVyID0gb3duZXI7XG4gICAgdmFsaWRhdGVPd25lckFkZHJlc3Mob3duZXIpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIC0gVXNlIHRoZSBhc3NvY2lhdGVkVG9rZW5BY2NvdW50UmVudCBtZXRob2QgaW5zdGVhZFxuICAgKiBVc2VkIHRvIHNldCB0aGUgbWluaW11bSByZW50IGV4ZW1wdCBhbW91bnRcbiAgICpcbiAgICogQHBhcmFtIHJlbnRFeGVtcHRBbW91bnQgbWluaW11bSByZW50IGV4ZW1wdCBhbW91bnQgaW4gbGFtcG9ydHNcbiAgICovXG4gIHJlbnRFeGVtcHRBbW91bnQocmVudEV4ZW1wdEFtb3VudDogc3RyaW5nKTogdGhpcyB7XG4gICAgcmV0dXJuIHN1cGVyLmFzc29jaWF0ZWRUb2tlbkFjY291bnRSZW50KHJlbnRFeGVtcHRBbW91bnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVzZWQgZm9yIGFkZGluZyB0b2tlbiBhc3NvY2lhdGlvbiByZWNpcGllbnRzIGNvbnNpc3RpbmdcbiAgICogIDEuIG93bmVyQWRkcmVzczogb3duZXIgb2YgdGhlIHRva2VuIGFkZHJlc3NcbiAgICogIDIuIHRva2VuTmFtZTogdGhlIG5hbWUgb2YgdG9rZW4gZW5hYmxlZCB0aGF0IGlzIHN1cHBvcnRlZCBieSBCaXRHb1xuICAgKlxuICAgKiAgQHBhcmFtIFRva2VuQXNzb2NpYXRlUmVjaXBpZW50IHRva2VuIGFzc29jaWF0ZSByZWNpcGllbnQgaW5mb1xuICAgKi9cblxuICBlbmFibGVUb2tlbihyZWNpcGllbnQ6IFRva2VuQXNzb2NpYXRlUmVjaXBpZW50KTogdGhpcyB7XG4gICAgaWYgKHRoaXMuX3Rva2VuQXNzb2NpYXRlUmVjaXBpZW50cy5zb21lKCh0b2tlbkFzc29jaWF0ZSkgPT4gXy5pc0VxdWFsKHRva2VuQXNzb2NpYXRlLCByZWNpcGllbnQpKSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcihcbiAgICAgICAgJ0ludmFsaWQgdHJhbnNhY3Rpb246IGludmFsaWQgZHVwbGljYXRlIHJlY2lwaWVudHMsIGdvdDogb3duZXIgJyArXG4gICAgICAgICAgcmVjaXBpZW50Lm93bmVyQWRkcmVzcyArXG4gICAgICAgICAgJyBhbmQgdG9rZW5OYW1lICcgK1xuICAgICAgICAgIHJlY2lwaWVudC50b2tlbk5hbWUgK1xuICAgICAgICAgICcgdHdpY2UnXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAodGhpcy5fdG9rZW5OYW1lIHx8IHRoaXMuX21pbnQpIHtcbiAgICAgIHRocm93IG5ldyBEdXBsaWNhdGVNZXRob2RFcnJvcignSW52YWxpZCBtZXRob2Q6IHNpbmdsZSBtaW50IGFscmVhZHkgdXNlZCcpO1xuICAgIH1cbiAgICB2YWxpZGF0ZU93bmVyQWRkcmVzcyhyZWNpcGllbnQub3duZXJBZGRyZXNzKTtcbiAgICBsZXQgdG9rZW5BZGRyZXNzOiBzdHJpbmc7XG4gICAgaWYgKHJlY2lwaWVudC50b2tlbkFkZHJlc3MpIHtcbiAgICAgIHRva2VuQWRkcmVzcyA9IHJlY2lwaWVudC50b2tlbkFkZHJlc3M7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHRva2VuID0gZ2V0U29sVG9rZW5Gcm9tVG9rZW5OYW1lKHJlY2lwaWVudC50b2tlbk5hbWUpO1xuICAgICAgaWYgKHRva2VuKSB7XG4gICAgICAgIHRva2VuQWRkcmVzcyA9IHRva2VuLnRva2VuQWRkcmVzcztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQgdHJhbnNhY3Rpb246IGludmFsaWQgdG9rZW4gbmFtZSwgZ290OiAnICsgcmVjaXBpZW50LnRva2VuTmFtZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHZhbGlkYXRlTWludEFkZHJlc3ModG9rZW5BZGRyZXNzKTtcblxuICAgIHRoaXMuX3Rva2VuQXNzb2NpYXRlUmVjaXBpZW50cy5wdXNoKHJlY2lwaWVudCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0IGEgcmVzb2x2ZWQgc1JGQy0zNyBUb2tlbiBBQ0wgcGVybWlzc2lvbmxlc3MtdGhhdyBpbnN0cnVjdGlvbiBmb3IgYW4gQVRBIGVuYWJsZW1lbnQuXG4gICAqXG4gICAqIFRoZSBidWlsZGVyIHJlbWFpbnMgb2ZmbGluZTsgY2FsbGVycyByZXNvbHZlIGdhdGluZyBhY2NvdW50cyBsaXZlIGFuZCBwYXNzIGZ1bGx5IG1hdGVyaWFsaXplZFxuICAgKiBwYXJhbXMuIE11bHRpcGxlIFRva2VuLTIwMjIgQVRBIGVuYWJsZW1lbnRzIG1heSBlYWNoIGFkZCBvbmUgdGhhdyBpbnN0cnVjdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtQZXJtaXNzaW9ubGVzc1RoYXdJZGVtcG90ZW50WydwYXJhbXMnXX0gcGFyYW1zIC0gcmVzb2x2ZWQgdGhhdyBwYXJhbXNcbiAgICogQHJldHVybnMge0F0YUluaXRpYWxpemF0aW9uQnVpbGRlcn0gVGhpcyB0cmFuc2FjdGlvbiBidWlsZGVyXG4gICAqL1xuICBwZXJtaXNzaW9ubGVzc1RoYXcocGFyYW1zOiBQZXJtaXNzaW9ubGVzc1RoYXdJZGVtcG90ZW50WydwYXJhbXMnXSk6IHRoaXMge1xuICAgIHRoaXMuX3Blcm1pc3Npb25sZXNzVGhhd1BhcmFtcy5wdXNoKHBhcmFtcyk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGJ1aWxkSW1wbGVtZW50YXRpb24oKTogUHJvbWlzZTxUcmFuc2FjdGlvbj4ge1xuICAgIGFzc2VydCh0aGlzLl9zZW5kZXIsICdTZW5kZXIgbXVzdCBiZSBzZXQgYmVmb3JlIGJ1aWxkaW5nIHRoZSB0cmFuc2FjdGlvbicpO1xuICAgIGlmICh0aGlzLl90b2tlbkFzc29jaWF0ZVJlY2lwaWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICBhc3NlcnQodGhpcy5fbWludCAmJiB0aGlzLl90b2tlbk5hbWUsICdNaW50IG11c3QgYmUgc2V0IGJlZm9yZSBidWlsZGluZyB0aGUgdHJhbnNhY3Rpb24nKTtcbiAgICAgIHRoaXMuX293bmVyID0gdGhpcy5fb3duZXIgfHwgdGhpcy5fc2VuZGVyO1xuXG4gICAgICB0aGlzLl90b2tlbkFzc29jaWF0ZVJlY2lwaWVudHMucHVzaCh7XG4gICAgICAgIG93bmVyQWRkcmVzczogdGhpcy5fb3duZXIsXG4gICAgICAgIHRva2VuTmFtZTogdGhpcy5fdG9rZW5OYW1lLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5faW5zdHJ1Y3Rpb25zRGF0YSA9IFtdO1xuICAgIGlmICh0aGlzLl9wcmlvcml0eUZlZSAmJiB0aGlzLl9wcmlvcml0eUZlZSAhPT0gTnVtYmVyKDApKSB7XG4gICAgICB0aGlzLl9pbnN0cnVjdGlvbnNEYXRhLnB1c2goe1xuICAgICAgICB0eXBlOiBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcy5TZXRQcmlvcml0eUZlZSxcbiAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgZmVlOiB0aGlzLl9wcmlvcml0eUZlZSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgdGhpcy5fdG9rZW5Bc3NvY2lhdGVSZWNpcGllbnRzLm1hcChhc3luYyAocmVjaXBpZW50KSA9PiB7XG4gICAgICAgIGxldCB0b2tlbkFkZHJlc3M6IHN0cmluZztcbiAgICAgICAgbGV0IHByb2dyYW1JZDogc3RyaW5nO1xuICAgICAgICBpZiAocmVjaXBpZW50LnRva2VuQWRkcmVzcyAmJiByZWNpcGllbnQucHJvZ3JhbUlkKSB7XG4gICAgICAgICAgdG9rZW5BZGRyZXNzID0gcmVjaXBpZW50LnRva2VuQWRkcmVzcztcbiAgICAgICAgICBwcm9ncmFtSWQgPSByZWNpcGllbnQucHJvZ3JhbUlkO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHRva2VuID0gZ2V0U29sVG9rZW5Gcm9tVG9rZW5OYW1lKHJlY2lwaWVudC50b2tlbk5hbWUpO1xuICAgICAgICAgIGlmICh0b2tlbikge1xuICAgICAgICAgICAgdG9rZW5BZGRyZXNzID0gdG9rZW4udG9rZW5BZGRyZXNzO1xuICAgICAgICAgICAgcHJvZ3JhbUlkID0gdG9rZW4ucHJvZ3JhbUlkO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIHRyYW5zYWN0aW9uOiBpbnZhbGlkIHRva2VuIG5hbWUsIGdvdDogJyArIHJlY2lwaWVudC50b2tlbk5hbWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFVzZSB0aGUgcHJvdmlkZWQgYXRhQWRkcmVzcyBpZiBpdCBleGlzdHMsIG90aGVyd2lzZSBjYWxjdWxhdGUgaXRcbiAgICAgICAgbGV0IGF0YVBrID0gcmVjaXBpZW50LmF0YUFkZHJlc3M7XG4gICAgICAgIGlmICghYXRhUGspIHtcbiAgICAgICAgICBhdGFQayA9IGF3YWl0IGdldEFzc29jaWF0ZWRUb2tlbkFjY291bnRBZGRyZXNzKHRva2VuQWRkcmVzcywgcmVjaXBpZW50Lm93bmVyQWRkcmVzcywgZmFsc2UsIHByb2dyYW1JZCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9pbnN0cnVjdGlvbnNEYXRhLnB1c2goe1xuICAgICAgICAgIHR5cGU6IEluc3RydWN0aW9uQnVpbGRlclR5cGVzLkNyZWF0ZUFzc29jaWF0ZWRUb2tlbkFjY291bnQsXG4gICAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICBtaW50QWRkcmVzczogdG9rZW5BZGRyZXNzLFxuICAgICAgICAgICAgYXRhQWRkcmVzczogYXRhUGssXG4gICAgICAgICAgICBvd25lckFkZHJlc3M6IHJlY2lwaWVudC5vd25lckFkZHJlc3MsXG4gICAgICAgICAgICAvLyBNYXRjaCB0cmFuc2FjdGlvbkJ1aWxkZXIgZmVlIHBheWVyIHNlbGVjdGlvbiB3aGVuIGEgZGlzdGluY3QgZmVlIHBheWVyIGlzIHNldC5cbiAgICAgICAgICAgIHBheWVyQWRkcmVzczogdGhpcy5fZmVlUGF5ZXIgPz8gdGhpcy5fc2VuZGVyLFxuICAgICAgICAgICAgdG9rZW5OYW1lOiByZWNpcGllbnQudG9rZW5OYW1lLFxuICAgICAgICAgICAgcHJvZ3JhbUlkOiBwcm9ncmFtSWQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLl9pbnN0cnVjdGlvbnNEYXRhLnB1c2goXG4gICAgICAuLi50aGlzLl9wZXJtaXNzaW9ubGVzc1RoYXdQYXJhbXMubWFwKFxuICAgICAgICAocGFyYW1zKTogUGVybWlzc2lvbmxlc3NUaGF3SWRlbXBvdGVudCA9PiAoe1xuICAgICAgICAgIHR5cGU6IEluc3RydWN0aW9uQnVpbGRlclR5cGVzLlBlcm1pc3Npb25sZXNzVGhhd0lkZW1wb3RlbnQsXG4gICAgICAgICAgcGFyYW1zLFxuICAgICAgICB9KVxuICAgICAgKVxuICAgICk7XG5cbiAgICByZXR1cm4gYXdhaXQgc3VwZXIuYnVpbGRJbXBsZW1lbnRhdGlvbigpO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { TransactionType } from '@bitgo-beta/sdk-core';
|
|
2
|
+
import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
|
|
3
|
+
import { Transaction } from './transaction';
|
|
4
|
+
import { TransactionBuilder } from './transactionBuilder';
|
|
5
|
+
export declare class CloseAtaBuilder extends TransactionBuilder {
|
|
6
|
+
protected _closeAtaEntries: {
|
|
7
|
+
accountAddress: string;
|
|
8
|
+
destinationAddress: string;
|
|
9
|
+
authorityAddress: string;
|
|
10
|
+
programId?: string;
|
|
11
|
+
}[];
|
|
12
|
+
private _apiMode;
|
|
13
|
+
constructor(_coinConfig: Readonly<CoinConfig>);
|
|
14
|
+
protected get transactionType(): TransactionType;
|
|
15
|
+
/**
|
|
16
|
+
* Sets the ATA account address to close (single-ATA API, backward compatible).
|
|
17
|
+
* Cannot be mixed with addCloseAtaInstruction().
|
|
18
|
+
*/
|
|
19
|
+
accountAddress(accountAddress: string): this;
|
|
20
|
+
/**
|
|
21
|
+
* Sets the destination address for rent SOL (single-ATA API, backward compatible).
|
|
22
|
+
* Cannot be mixed with addCloseAtaInstruction().
|
|
23
|
+
*/
|
|
24
|
+
destinationAddress(destinationAddress: string): this;
|
|
25
|
+
/**
|
|
26
|
+
* Sets the authority address / ATA owner (single-ATA API, backward compatible).
|
|
27
|
+
* Cannot be mixed with addCloseAtaInstruction().
|
|
28
|
+
*/
|
|
29
|
+
authorityAddress(authorityAddress: string): this;
|
|
30
|
+
/** Sets the SPL token program used by the close instruction. */
|
|
31
|
+
programId(programId: string): this;
|
|
32
|
+
/**
|
|
33
|
+
* Throws if the bulk-ATA API has already been used on this builder.
|
|
34
|
+
*/
|
|
35
|
+
private _assertSingleAtaApiUsable;
|
|
36
|
+
/**
|
|
37
|
+
* Ensures a single entry exists in _closeAtaEntries for the legacy API.
|
|
38
|
+
*/
|
|
39
|
+
private _ensureSingleEntry;
|
|
40
|
+
/**
|
|
41
|
+
* Add an ATA to close in this transaction (for bulk closure).
|
|
42
|
+
* Cannot be mixed with the single-ATA API (accountAddress/destinationAddress/authorityAddress).
|
|
43
|
+
*
|
|
44
|
+
* @param accountAddress - the ATA address to close
|
|
45
|
+
* @param destinationAddress - where rent SOL goes (root wallet address)
|
|
46
|
+
* @param authorityAddress - ATA owner who must sign
|
|
47
|
+
* @param programId - SPL token program owning the ATA; omitted for legacy SPL
|
|
48
|
+
*/
|
|
49
|
+
addCloseAtaInstruction(accountAddress: string, destinationAddress: string, authorityAddress: string, programId?: string): this;
|
|
50
|
+
/** @inheritDoc */
|
|
51
|
+
initBuilder(tx: Transaction): void;
|
|
52
|
+
/** @inheritdoc */
|
|
53
|
+
protected buildImplementation(): Promise<Transaction>;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=closeAtaBuilder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"closeAtaBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/closeAtaBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC9E,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAI7D,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAQ1D,qBAAa,eAAgB,SAAQ,kBAAkB;IAErD,SAAS,CAAC,gBAAgB,EAAE;QAC1B,cAAc,EAAE,MAAM,CAAC;QACvB,kBAAkB,EAAE,MAAM,CAAC;QAC3B,gBAAgB,EAAE,MAAM,CAAC;QACzB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,EAAE,CAAM;IAOT,OAAO,CAAC,QAAQ,CAA0C;gBAE9C,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAK7C,SAAS,KAAK,eAAe,IAAI,eAAe,CAE/C;IAED;;;OAGG;IACH,cAAc,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI;IAS5C;;;OAGG;IACH,kBAAkB,CAAC,kBAAkB,EAAE,MAAM,GAAG,IAAI;IASpD;;;OAGG;IACH,gBAAgB,CAAC,gBAAgB,EAAE,MAAM,GAAG,IAAI;IAShD,gEAAgE;IAChE,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IASlC;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAMjC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAM1B;;;;;;;;OAQG;IACH,sBAAsB,CACpB,cAAc,EAAE,MAAM,EACtB,kBAAkB,EAAE,MAAM,EAC1B,gBAAgB,EAAE,MAAM,EACxB,SAAS,CAAC,EAAE,MAAM,GACjB,IAAI;IAyBP,kBAAkB;IAClB,WAAW,CAAC,EAAE,EAAE,WAAW,GAAG,IAAI;IAkBlC,kBAAkB;cACF,mBAAmB,IAAI,OAAO,CAAC,WAAW,CAAC;CA2B5D"}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
import { BuildTransactionError, TransactionType } from '@bitgo-beta/sdk-core';
|
|
2
|
+
import assert from 'assert';
|
|
3
|
+
import { InstructionBuilderTypes } from './constants';
|
|
4
|
+
import { Transaction } from './transaction';
|
|
5
|
+
import { TransactionBuilder } from './transactionBuilder';
|
|
6
|
+
import { validateAddress } from './utils';
|
|
7
|
+
const MIX_API_ERROR_MESSAGE = 'Cannot mix single-ATA API (accountAddress/destinationAddress/authorityAddress) with bulk-ATA API (addCloseAtaInstruction)';
|
|
8
|
+
export class CloseAtaBuilder extends TransactionBuilder {
|
|
9
|
+
constructor(_coinConfig) {
|
|
10
|
+
super(_coinConfig);
|
|
11
|
+
// Unified storage for all close entries (single or bulk)
|
|
12
|
+
this._closeAtaEntries = [];
|
|
13
|
+
// Which API has been used on this builder instance. Locks in on first call so we can
|
|
14
|
+
// reject attempts to mix the legacy single-ATA setters with the bulk addCloseAtaInstruction().
|
|
15
|
+
// After initBuilder(): remains undefined for a single parsed close (either API may extend/edit);
|
|
16
|
+
// set to 'bulk' when the parsed tx had multiple closes so legacy setters cannot partially
|
|
17
|
+
// overwrite entry[0] while leaving other parsed entries in place.
|
|
18
|
+
this._apiMode = undefined;
|
|
19
|
+
this._transaction = new Transaction(_coinConfig);
|
|
20
|
+
}
|
|
21
|
+
get transactionType() {
|
|
22
|
+
return TransactionType.CloseAssociatedTokenAccount;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Sets the ATA account address to close (single-ATA API, backward compatible).
|
|
26
|
+
* Cannot be mixed with addCloseAtaInstruction().
|
|
27
|
+
*/
|
|
28
|
+
accountAddress(accountAddress) {
|
|
29
|
+
this._assertSingleAtaApiUsable();
|
|
30
|
+
validateAddress(accountAddress, 'accountAddress');
|
|
31
|
+
this._apiMode = 'single';
|
|
32
|
+
this._ensureSingleEntry();
|
|
33
|
+
this._closeAtaEntries[0].accountAddress = accountAddress;
|
|
34
|
+
return this;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Sets the destination address for rent SOL (single-ATA API, backward compatible).
|
|
38
|
+
* Cannot be mixed with addCloseAtaInstruction().
|
|
39
|
+
*/
|
|
40
|
+
destinationAddress(destinationAddress) {
|
|
41
|
+
this._assertSingleAtaApiUsable();
|
|
42
|
+
validateAddress(destinationAddress, 'destinationAddress');
|
|
43
|
+
this._apiMode = 'single';
|
|
44
|
+
this._ensureSingleEntry();
|
|
45
|
+
this._closeAtaEntries[0].destinationAddress = destinationAddress;
|
|
46
|
+
return this;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Sets the authority address / ATA owner (single-ATA API, backward compatible).
|
|
50
|
+
* Cannot be mixed with addCloseAtaInstruction().
|
|
51
|
+
*/
|
|
52
|
+
authorityAddress(authorityAddress) {
|
|
53
|
+
this._assertSingleAtaApiUsable();
|
|
54
|
+
validateAddress(authorityAddress, 'authorityAddress');
|
|
55
|
+
this._apiMode = 'single';
|
|
56
|
+
this._ensureSingleEntry();
|
|
57
|
+
this._closeAtaEntries[0].authorityAddress = authorityAddress;
|
|
58
|
+
return this;
|
|
59
|
+
}
|
|
60
|
+
/** Sets the SPL token program used by the close instruction. */
|
|
61
|
+
programId(programId) {
|
|
62
|
+
this._assertSingleAtaApiUsable();
|
|
63
|
+
validateAddress(programId, 'programId');
|
|
64
|
+
this._apiMode = 'single';
|
|
65
|
+
this._ensureSingleEntry();
|
|
66
|
+
this._closeAtaEntries[0].programId = programId;
|
|
67
|
+
return this;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Throws if the bulk-ATA API has already been used on this builder.
|
|
71
|
+
*/
|
|
72
|
+
_assertSingleAtaApiUsable() {
|
|
73
|
+
if (this._apiMode === 'bulk') {
|
|
74
|
+
throw new BuildTransactionError(MIX_API_ERROR_MESSAGE);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Ensures a single entry exists in _closeAtaEntries for the legacy API.
|
|
79
|
+
*/
|
|
80
|
+
_ensureSingleEntry() {
|
|
81
|
+
if (this._closeAtaEntries.length === 0) {
|
|
82
|
+
this._closeAtaEntries.push({ accountAddress: '', destinationAddress: '', authorityAddress: '' });
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Add an ATA to close in this transaction (for bulk closure).
|
|
87
|
+
* Cannot be mixed with the single-ATA API (accountAddress/destinationAddress/authorityAddress).
|
|
88
|
+
*
|
|
89
|
+
* @param accountAddress - the ATA address to close
|
|
90
|
+
* @param destinationAddress - where rent SOL goes (root wallet address)
|
|
91
|
+
* @param authorityAddress - ATA owner who must sign
|
|
92
|
+
* @param programId - SPL token program owning the ATA; omitted for legacy SPL
|
|
93
|
+
*/
|
|
94
|
+
addCloseAtaInstruction(accountAddress, destinationAddress, authorityAddress, programId) {
|
|
95
|
+
if (this._apiMode === 'single') {
|
|
96
|
+
throw new BuildTransactionError(MIX_API_ERROR_MESSAGE);
|
|
97
|
+
}
|
|
98
|
+
validateAddress(accountAddress, 'accountAddress');
|
|
99
|
+
validateAddress(destinationAddress, 'destinationAddress');
|
|
100
|
+
validateAddress(authorityAddress, 'authorityAddress');
|
|
101
|
+
if (programId) {
|
|
102
|
+
validateAddress(programId, 'programId');
|
|
103
|
+
}
|
|
104
|
+
if (accountAddress === destinationAddress) {
|
|
105
|
+
throw new BuildTransactionError('Account address to close cannot be the same as the destination address');
|
|
106
|
+
}
|
|
107
|
+
if (this._closeAtaEntries.some((entry) => entry.accountAddress === accountAddress)) {
|
|
108
|
+
throw new BuildTransactionError('Duplicate ATA address: ' + accountAddress);
|
|
109
|
+
}
|
|
110
|
+
this._apiMode = 'bulk';
|
|
111
|
+
this._closeAtaEntries.push({ accountAddress, destinationAddress, authorityAddress, programId });
|
|
112
|
+
return this;
|
|
113
|
+
}
|
|
114
|
+
/** @inheritDoc */
|
|
115
|
+
initBuilder(tx) {
|
|
116
|
+
super.initBuilder(tx);
|
|
117
|
+
for (const instruction of this._instructionsData) {
|
|
118
|
+
if (instruction.type === InstructionBuilderTypes.CloseAssociatedTokenAccount) {
|
|
119
|
+
const ataCloseInstruction = instruction;
|
|
120
|
+
this._closeAtaEntries.push({
|
|
121
|
+
accountAddress: ataCloseInstruction.params.accountAddress,
|
|
122
|
+
destinationAddress: ataCloseInstruction.params.destinationAddress,
|
|
123
|
+
authorityAddress: ataCloseInstruction.params.authorityAddress,
|
|
124
|
+
programId: ataCloseInstruction.params.programId,
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
if (this._closeAtaEntries.length > 1) {
|
|
129
|
+
this._apiMode = 'bulk';
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
/** @inheritdoc */
|
|
133
|
+
async buildImplementation() {
|
|
134
|
+
assert(this._closeAtaEntries.length > 0, 'At least one ATA must be specified before building the transaction');
|
|
135
|
+
for (const entry of this._closeAtaEntries) {
|
|
136
|
+
assert(entry.accountAddress, 'Account Address must be set before building the transaction');
|
|
137
|
+
assert(entry.destinationAddress, 'Destination Address must be set before building the transaction');
|
|
138
|
+
assert(entry.authorityAddress, 'Authority Address must be set before building the transaction');
|
|
139
|
+
if (entry.accountAddress === entry.destinationAddress) {
|
|
140
|
+
throw new BuildTransactionError('Account address to close cannot be the same as the destination address');
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
this._instructionsData = this._closeAtaEntries.map((entry) => ({
|
|
144
|
+
type: InstructionBuilderTypes.CloseAssociatedTokenAccount,
|
|
145
|
+
params: {
|
|
146
|
+
accountAddress: entry.accountAddress,
|
|
147
|
+
destinationAddress: entry.destinationAddress,
|
|
148
|
+
authorityAddress: entry.authorityAddress,
|
|
149
|
+
...(entry.programId ? { programId: entry.programId } : {}),
|
|
150
|
+
},
|
|
151
|
+
}));
|
|
152
|
+
return await super.buildImplementation();
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xvc2VBdGFCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9jbG9zZUF0YUJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHFCQUFxQixFQUFFLGVBQWUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRTlFLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFdEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBSTFDLE1BQU0scUJBQXFCLEdBQ3pCLDJIQUEySCxDQUFDO0FBRTlILE1BQU0sT0FBTyxlQUFnQixTQUFRLGtCQUFrQjtJQWdCckQsWUFBWSxXQUFpQztRQUMzQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7UUFoQnJCLHlEQUF5RDtRQUMvQyxxQkFBZ0IsR0FLcEIsRUFBRSxDQUFDO1FBRVQscUZBQXFGO1FBQ3JGLCtGQUErRjtRQUMvRixpR0FBaUc7UUFDakcsMEZBQTBGO1FBQzFGLGtFQUFrRTtRQUMxRCxhQUFRLEdBQWdDLFNBQVMsQ0FBQztRQUl4RCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRCxJQUFjLGVBQWU7UUFDM0IsT0FBTyxlQUFlLENBQUMsMkJBQTJCLENBQUM7SUFDckQsQ0FBQztJQUVEOzs7T0FHRztJQUNILGNBQWMsQ0FBQyxjQUFzQjtRQUNuQyxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQztRQUNqQyxlQUFlLENBQUMsY0FBYyxFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFDbEQsSUFBSSxDQUFDLFFBQVEsR0FBRyxR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LENBQUM7SUFDM0MsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQnVpbGRUcmFuc2FjdGlvbkVycm9yLCBUcmFuc2FjdGlvblR5cGUgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBCYXNlQ29pbiBhcyBDb2luQ29uZmlnIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgeyBJbnN0cnVjdGlvbkJ1aWxkZXJUeXBlcyB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IEF0YUNsb3NlIH0gZnJvbSAnLi9pZmFjZSc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbiB9IGZyb20gJy4vdHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25CdWlsZGVyIH0gZnJvbSAnLi90cmFuc2FjdGlvbkJ1aWxkZXInO1xuaW1wb3J0IHsgdmFsaWRhdGVBZGRyZXNzIH0gZnJvbSAnLi91dGlscyc7XG5cbnR5cGUgQ2xvc2VBdGFBcGlNb2RlID0gJ3NpbmdsZScgfCAnYnVsayc7XG5cbmNvbnN0IE1JWF9BUElfRVJST1JfTUVTU0FHRSA9XG4gICdDYW5ub3QgbWl4IHNpbmdsZS1BVEEgQVBJIChhY2NvdW50QWRkcmVzcy9kZXN0aW5hdGlvbkFkZHJlc3MvYXV0aG9yaXR5QWRkcmVzcykgd2l0aCBidWxrLUFUQSBBUEkgKGFkZENsb3NlQXRhSW5zdHJ1Y3Rpb24pJztcblxuZXhwb3J0IGNsYXNzIENsb3NlQXRhQnVpbGRlciBleHRlbmRzIFRyYW5zYWN0aW9uQnVpbGRlciB7XG4gIC8vIFVuaWZpZWQgc3RvcmFnZSBmb3IgYWxsIGNsb3NlIGVudHJpZXMgKHNpbmdsZSBvciBidWxrKVxuICBwcm90ZWN0ZWQgX2Nsb3NlQXRhRW50cmllczoge1xuICAgIGFjY291bnRBZGRyZXNzOiBzdHJpbmc7XG4gICAgZGVzdGluYXRpb25BZGRyZXNzOiBzdHJpbmc7XG4gICAgYXV0aG9yaXR5QWRkcmVzczogc3RyaW5nO1xuICAgIHByb2dyYW1JZD86IHN0cmluZztcbiAgfVtdID0gW107XG5cbiAgLy8gV2hpY2ggQVBJIGhhcyBiZWVuIHVzZWQgb24gdGhpcyBidWlsZGVyIGluc3RhbmNlLiBMb2NrcyBpbiBvbiBmaXJzdCBjYWxsIHNvIHdlIGNhblxuICAvLyByZWplY3QgYXR0ZW1wdHMgdG8gbWl4IHRoZSBsZWdhY3kgc2luZ2xlLUFUQSBzZXR0ZXJzIHdpdGggdGhlIGJ1bGsgYWRkQ2xvc2VBdGFJbnN0cnVjdGlvbigpLlxuICAvLyBBZnRlciBpbml0QnVpbGRlcigpOiByZW1haW5zIHVuZGVmaW5lZCBmb3IgYSBzaW5nbGUgcGFyc2VkIGNsb3NlIChlaXRoZXIgQVBJIG1heSBleHRlbmQvZWRpdCk7XG4gIC8vIHNldCB0byAnYnVsaycgd2hlbiB0aGUgcGFyc2VkIHR4IGhhZCBtdWx0aXBsZSBjbG9zZXMgc28gbGVnYWN5IHNldHRlcnMgY2Fubm90IHBhcnRpYWxseVxuICAvLyBvdmVyd3JpdGUgZW50cnlbMF0gd2hpbGUgbGVhdmluZyBvdGhlciBwYXJzZWQgZW50cmllcyBpbiBwbGFjZS5cbiAgcHJpdmF0ZSBfYXBpTW9kZTogQ2xvc2VBdGFBcGlNb2RlIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKF9jb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKF9jb2luQ29uZmlnKTtcbiAgICB0aGlzLl90cmFuc2FjdGlvbiA9IG5ldyBUcmFuc2FjdGlvbihfY29pbkNvbmZpZyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0IHRyYW5zYWN0aW9uVHlwZSgpOiBUcmFuc2FjdGlvblR5cGUge1xuICAgIHJldHVybiBUcmFuc2FjdGlvblR5cGUuQ2xvc2VBc3NvY2lhdGVkVG9rZW5BY2NvdW50O1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIEFUQSBhY2NvdW50IGFkZHJlc3MgdG8gY2xvc2UgKHNpbmdsZS1BVEEgQVBJLCBiYWNrd2FyZCBjb21wYXRpYmxlKS5cbiAgICogQ2Fubm90IGJlIG1peGVkIHdpdGggYWRkQ2xvc2VBdGFJbnN0cnVjdGlvbigpLlxuICAgKi9cbiAgYWNjb3VudEFkZHJlc3MoYWNjb3VudEFkZHJlc3M6IHN0cmluZyk6IHRoaXMge1xuICAgIHRoaXMuX2Fzc2VydFNpbmdsZUF0YUFwaVVzYWJsZSgpO1xuICAgIHZhbGlkYXRlQWRkcmVzcyhhY2NvdW50QWRkcmVzcywgJ2FjY291bnRBZGRyZXNzJyk7XG4gICAgdGhpcy5fYXBpTW9kZSA9ICdzaW5nbGUnO1xuICAgIHRoaXMuX2Vuc3VyZVNpbmdsZUVudHJ5KCk7XG4gICAgdGhpcy5fY2xvc2VBdGFFbnRyaWVzWzBdLmFjY291bnRBZGRyZXNzID0gYWNjb3VudEFkZHJlc3M7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgZGVzdGluYXRpb24gYWRkcmVzcyBmb3IgcmVudCBTT0wgKHNpbmdsZS1BVEEgQVBJLCBiYWNrd2FyZCBjb21wYXRpYmxlKS5cbiAgICogQ2Fubm90IGJlIG1peGVkIHdpdGggYWRkQ2xvc2VBdGFJbnN0cnVjdGlvbigpLlxuICAgKi9cbiAgZGVzdGluYXRpb25BZGRyZXNzKGRlc3RpbmF0aW9uQWRkcmVzczogc3RyaW5nKTogdGhpcyB7XG4gICAgdGhpcy5fYXNzZXJ0U2luZ2xlQXRhQXBpVXNhYmxlKCk7XG4gICAgdmFsaWRhdGVBZGRyZXNzKGRlc3RpbmF0aW9uQWRkcmVzcywgJ2Rlc3RpbmF0aW9uQWRkcmVzcycpO1xuICAgIHRoaXMuX2FwaU1vZGUgPSAnc2luZ2xlJztcbiAgICB0aGlzLl9lbnN1cmVTaW5nbGVFbnRyeSgpO1xuICAgIHRoaXMuX2Nsb3NlQXRhRW50cmllc1swXS5kZXN0aW5hdGlvbkFkZHJlc3MgPSBkZXN0aW5hdGlvbkFkZHJlc3M7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgYXV0aG9yaXR5IGFkZHJlc3MgLyBBVEEgb3duZXIgKHNpbmdsZS1BVEEgQVBJLCBiYWNrd2FyZCBjb21wYXRpYmxlKS5cbiAgICogQ2Fubm90IGJlIG1peGVkIHdpdGggYWRkQ2xvc2VBdGFJbnN0cnVjdGlvbigpLlxuICAgKi9cbiAgYXV0aG9yaXR5QWRkcmVzcyhhdXRob3JpdHlBZGRyZXNzOiBzdHJpbmcpOiB0aGlzIHtcbiAgICB0aGlzLl9hc3NlcnRTaW5nbGVBdGFBcGlVc2FibGUoKTtcbiAgICB2YWxpZGF0ZUFkZHJlc3MoYXV0aG9yaXR5QWRkcmVzcywgJ2F1dGhvcml0eUFkZHJlc3MnKTtcbiAgICB0aGlzLl9hcGlNb2RlID0gJ3NpbmdsZSc7XG4gICAgdGhpcy5fZW5zdXJlU2luZ2xlRW50cnkoKTtcbiAgICB0aGlzLl9jbG9zZUF0YUVudHJpZXNbMF0uYXV0aG9yaXR5QWRkcmVzcyA9IGF1dGhvcml0eUFkZHJlc3M7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKiogU2V0cyB0aGUgU1BMIHRva2VuIHByb2dyYW0gdXNlZCBieSB0aGUgY2xvc2UgaW5zdHJ1Y3Rpb24uICovXG4gIHByb2dyYW1JZChwcm9ncmFtSWQ6IHN0cmluZyk6IHRoaXMge1xuICAgIHRoaXMuX2Fzc2VydFNpbmdsZUF0YUFwaVVzYWJsZSgpO1xuICAgIHZhbGlkYXRlQWRkcmVzcyhwcm9ncmFtSWQsICdwcm9ncmFtSWQnKTtcbiAgICB0aGlzLl9hcGlNb2RlID0gJ3NpbmdsZSc7XG4gICAgdGhpcy5fZW5zdXJlU2luZ2xlRW50cnkoKTtcbiAgICB0aGlzLl9jbG9zZUF0YUVudHJpZXNbMF0ucHJvZ3JhbUlkID0gcHJvZ3JhbUlkO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFRocm93cyBpZiB0aGUgYnVsay1BVEEgQVBJIGhhcyBhbHJlYWR5IGJlZW4gdXNlZCBvbiB0aGlzIGJ1aWxkZXIuXG4gICAqL1xuICBwcml2YXRlIF9hc3NlcnRTaW5nbGVBdGFBcGlVc2FibGUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2FwaU1vZGUgPT09ICdidWxrJykge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcihNSVhfQVBJX0VSUk9SX01FU1NBR0UpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFbnN1cmVzIGEgc2luZ2xlIGVudHJ5IGV4aXN0cyBpbiBfY2xvc2VBdGFFbnRyaWVzIGZvciB0aGUgbGVnYWN5IEFQSS5cbiAgICovXG4gIHByaXZhdGUgX2Vuc3VyZVNpbmdsZUVudHJ5KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9jbG9zZUF0YUVudHJpZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLl9jbG9zZUF0YUVudHJpZXMucHVzaCh7IGFjY291bnRBZGRyZXNzOiAnJywgZGVzdGluYXRpb25BZGRyZXNzOiAnJywgYXV0aG9yaXR5QWRkcmVzczogJycgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhbiBBVEEgdG8gY2xvc2UgaW4gdGhpcyB0cmFuc2FjdGlvbiAoZm9yIGJ1bGsgY2xvc3VyZSkuXG4gICAqIENhbm5vdCBiZSBtaXhlZCB3aXRoIHRoZSBzaW5nbGUtQVRBIEFQSSAoYWNjb3VudEFkZHJlc3MvZGVzdGluYXRpb25BZGRyZXNzL2F1dGhvcml0eUFkZHJlc3MpLlxuICAgKlxuICAgKiBAcGFyYW0gYWNjb3VudEFkZHJlc3MgLSB0aGUgQVRBIGFkZHJlc3MgdG8gY2xvc2VcbiAgICogQHBhcmFtIGRlc3RpbmF0aW9uQWRkcmVzcyAtIHdoZXJlIHJlbnQgU09MIGdvZXMgKHJvb3Qgd2FsbGV0IGFkZHJlc3MpXG4gICAqIEBwYXJhbSBhdXRob3JpdHlBZGRyZXNzIC0gQVRBIG93bmVyIHdobyBtdXN0IHNpZ25cbiAgICogQHBhcmFtIHByb2dyYW1JZCAtIFNQTCB0b2tlbiBwcm9ncmFtIG93bmluZyB0aGUgQVRBOyBvbWl0dGVkIGZvciBsZWdhY3kgU1BMXG4gICAqL1xuICBhZGRDbG9zZUF0YUluc3RydWN0aW9uKFxuICAgIGFjY291bnRBZGRyZXNzOiBzdHJpbmcsXG4gICAgZGVzdGluYXRpb25BZGRyZXNzOiBzdHJpbmcsXG4gICAgYXV0aG9yaXR5QWRkcmVzczogc3RyaW5nLFxuICAgIHByb2dyYW1JZD86IHN0cmluZ1xuICApOiB0aGlzIHtcbiAgICBpZiAodGhpcy5fYXBpTW9kZSA9PT0gJ3NpbmdsZScpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoTUlYX0FQSV9FUlJPUl9NRVNTQUdFKTtcbiAgICB9XG5cbiAgICB2YWxpZGF0ZUFkZHJlc3MoYWNjb3VudEFkZHJlc3MsICdhY2NvdW50QWRkcmVzcycpO1xuICAgIHZhbGlkYXRlQWRkcmVzcyhkZXN0aW5hdGlvbkFkZHJlc3MsICdkZXN0aW5hdGlvbkFkZHJlc3MnKTtcbiAgICB2YWxpZGF0ZUFkZHJlc3MoYXV0aG9yaXR5QWRkcmVzcywgJ2F1dGhvcml0eUFkZHJlc3MnKTtcbiAgICBpZiAocHJvZ3JhbUlkKSB7XG4gICAgICB2YWxpZGF0ZUFkZHJlc3MocHJvZ3JhbUlkLCAncHJvZ3JhbUlkJyk7XG4gICAgfVxuXG4gICAgaWYgKGFjY291bnRBZGRyZXNzID09PSBkZXN0aW5hdGlvbkFkZHJlc3MpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0FjY291bnQgYWRkcmVzcyB0byBjbG9zZSBjYW5ub3QgYmUgdGhlIHNhbWUgYXMgdGhlIGRlc3RpbmF0aW9uIGFkZHJlc3MnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fY2xvc2VBdGFFbnRyaWVzLnNvbWUoKGVudHJ5KSA9PiBlbnRyeS5hY2NvdW50QWRkcmVzcyA9PT0gYWNjb3VudEFkZHJlc3MpKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdEdXBsaWNhdGUgQVRBIGFkZHJlc3M6ICcgKyBhY2NvdW50QWRkcmVzcyk7XG4gICAgfVxuXG4gICAgdGhpcy5fYXBpTW9kZSA9ICdidWxrJztcbiAgICB0aGlzLl9jbG9zZUF0YUVudHJpZXMucHVzaCh7IGFjY291bnRBZGRyZXNzLCBkZXN0aW5hdGlvbkFkZHJlc3MsIGF1dGhvcml0eUFkZHJlc3MsIHByb2dyYW1JZCB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBpbml0QnVpbGRlcih0eDogVHJhbnNhY3Rpb24pOiB2b2lkIHtcbiAgICBzdXBlci5pbml0QnVpbGRlcih0eCk7XG4gICAgZm9yIChjb25zdCBpbnN0cnVjdGlvbiBvZiB0aGlzLl9pbnN0cnVjdGlvbnNEYXRhKSB7XG4gICAgICBpZiAoaW5zdHJ1Y3Rpb24udHlwZSA9PT0gSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuQ2xvc2VBc3NvY2lhdGVkVG9rZW5BY2NvdW50KSB7XG4gICAgICAgIGNvbnN0IGF0YUNsb3NlSW5zdHJ1Y3Rpb246IEF0YUNsb3NlID0gaW5zdHJ1Y3Rpb247XG4gICAgICAgIHRoaXMuX2Nsb3NlQXRhRW50cmllcy5wdXNoKHtcbiAgICAgICAgICBhY2NvdW50QWRkcmVzczogYXRhQ2xvc2VJbnN0cnVjdGlvbi5wYXJhbXMuYWNjb3VudEFkZHJlc3MsXG4gICAgICAgICAgZGVzdGluYXRpb25BZGRyZXNzOiBhdGFDbG9zZUluc3RydWN0aW9uLnBhcmFtcy5kZXN0aW5hdGlvbkFkZHJlc3MsXG4gICAgICAgICAgYXV0aG9yaXR5QWRkcmVzczogYXRhQ2xvc2VJbnN0cnVjdGlvbi5wYXJhbXMuYXV0aG9yaXR5QWRkcmVzcyxcbiAgICAgICAgICBwcm9ncmFtSWQ6IGF0YUNsb3NlSW5zdHJ1Y3Rpb24ucGFyYW1zLnByb2dyYW1JZCxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLl9jbG9zZUF0YUVudHJpZXMubGVuZ3RoID4gMSkge1xuICAgICAgdGhpcy5fYXBpTW9kZSA9ICdidWxrJztcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGJ1aWxkSW1wbGVtZW50YXRpb24oKTogUHJvbWlzZTxUcmFuc2FjdGlvbj4ge1xuICAgIGFzc2VydCh0aGlzLl9jbG9zZUF0YUVudHJpZXMubGVuZ3RoID4gMCwgJ0F0IGxlYXN0IG9uZSBBVEEgbXVzdCBiZSBzcGVjaWZpZWQgYmVmb3JlIGJ1aWxkaW5nIHRoZSB0cmFuc2FjdGlvbicpO1xuXG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiB0aGlzLl9jbG9zZUF0YUVudHJpZXMpIHtcbiAgICAgIGFzc2VydChlbnRyeS5hY2NvdW50QWRkcmVzcywgJ0FjY291bnQgQWRkcmVzcyBtdXN0IGJlIHNldCBiZWZvcmUgYnVpbGRpbmcgdGhlIHRyYW5zYWN0aW9uJyk7XG4gICAgICBhc3NlcnQoZW50cnkuZGVzdGluYXRpb25BZGRyZXNzLCAnRGVzdGluYXRpb24gQWRkcmVzcyBtdXN0IGJlIHNldCBiZWZvcmUgYnVpbGRpbmcgdGhlIHRyYW5zYWN0aW9uJyk7XG4gICAgICBhc3NlcnQoZW50cnkuYXV0aG9yaXR5QWRkcmVzcywgJ0F1dGhvcml0eSBBZGRyZXNzIG11c3QgYmUgc2V0IGJlZm9yZSBidWlsZGluZyB0aGUgdHJhbnNhY3Rpb24nKTtcblxuICAgICAgaWYgKGVudHJ5LmFjY291bnRBZGRyZXNzID09PSBlbnRyeS5kZXN0aW5hdGlvbkFkZHJlc3MpIHtcbiAgICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignQWNjb3VudCBhZGRyZXNzIHRvIGNsb3NlIGNhbm5vdCBiZSB0aGUgc2FtZSBhcyB0aGUgZGVzdGluYXRpb24gYWRkcmVzcycpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX2luc3RydWN0aW9uc0RhdGEgPSB0aGlzLl9jbG9zZUF0YUVudHJpZXMubWFwKFxuICAgICAgKGVudHJ5KTogQXRhQ2xvc2UgPT4gKHtcbiAgICAgICAgdHlwZTogSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuQ2xvc2VBc3NvY2lhdGVkVG9rZW5BY2NvdW50LFxuICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICBhY2NvdW50QWRkcmVzczogZW50cnkuYWNjb3VudEFkZHJlc3MsXG4gICAgICAgICAgZGVzdGluYXRpb25BZGRyZXNzOiBlbnRyeS5kZXN0aW5hdGlvbkFkZHJlc3MsXG4gICAgICAgICAgYXV0aG9yaXR5QWRkcmVzczogZW50cnkuYXV0aG9yaXR5QWRkcmVzcyxcbiAgICAgICAgICAuLi4oZW50cnkucHJvZ3JhbUlkID8geyBwcm9ncmFtSWQ6IGVudHJ5LnByb2dyYW1JZCB9IDoge30pLFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICApO1xuXG4gICAgcmV0dXJuIGF3YWl0IHN1cGVyLmJ1aWxkSW1wbGVtZW50YXRpb24oKTtcbiAgfVxufVxuIl19
|