@algorandfoundation/algokit-utils 6.3.0-beta.1 → 7.0.0-alpha.1
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/LICENSE +21 -0
- package/README.md +22 -26
- package/account/account.d.ts +12 -10
- package/account/get-account-config-from-environment.d.ts +0 -1
- package/account/get-account.d.ts +2 -3
- package/account/get-dispenser-account.d.ts +2 -3
- package/account/index.d.ts +0 -1
- package/account/mnemonic-account.d.ts +1 -2
- package/amount.d.ts +15 -5
- package/app-client.d.ts +19 -5
- package/app-deploy.d.ts +18 -2
- package/app.d.ts +39 -3
- package/asset.d.ts +5 -6
- package/config.d.ts +0 -1
- package/debugging/debugging.d.ts +3 -5
- package/debugging/index.d.ts +0 -2
- package/dispenser-client.d.ts +0 -1
- package/index.d.ts +5 -4
- package/index.js +56 -46
- package/index.js.map +1 -1
- package/index.mjs +26 -25
- package/index.mjs.map +1 -1
- package/indexer-lookup.d.ts +10 -9
- package/localnet/get-kmd-wallet-account.d.ts +1 -2
- package/localnet/get-localnet-dispenser-account.d.ts +1 -2
- package/localnet/get-or-create-kmd-wallet-account.d.ts +1 -2
- package/localnet/index.d.ts +0 -1
- package/localnet/is-localnet.d.ts +1 -2
- package/network-client.d.ts +3 -10
- package/package.json +3 -4
- package/{account → src/account}/account.js +21 -18
- package/src/account/account.js.map +1 -0
- package/{account → src/account}/account.mjs +22 -19
- package/src/account/account.mjs.map +1 -0
- package/src/account/get-account-config-from-environment.js.map +1 -0
- package/src/account/get-account-config-from-environment.mjs.map +1 -0
- package/{account → src/account}/get-account.js +3 -3
- package/src/account/get-account.js.map +1 -0
- package/{account → src/account}/get-account.mjs +3 -3
- package/src/account/get-account.mjs.map +1 -0
- package/{account → src/account}/get-dispenser-account.js +3 -3
- package/src/account/get-dispenser-account.js.map +1 -0
- package/{account → src/account}/get-dispenser-account.mjs +3 -3
- package/src/account/get-dispenser-account.mjs.map +1 -0
- package/{account → src/account}/mnemonic-account.js +1 -1
- package/src/account/mnemonic-account.js.map +1 -0
- package/{account → src/account}/mnemonic-account.mjs +1 -1
- package/src/account/mnemonic-account.mjs.map +1 -0
- package/{amount.js → src/amount.js} +10 -3
- package/src/amount.js.map +1 -0
- package/{amount.mjs → src/amount.mjs} +10 -4
- package/src/amount.mjs.map +1 -0
- package/{app-client.js → src/app-client.js} +20 -5
- package/src/app-client.js.map +1 -0
- package/{app-client.mjs → src/app-client.mjs} +20 -5
- package/src/app-client.mjs.map +1 -0
- package/src/app-deploy.js +285 -0
- package/src/app-deploy.js.map +1 -0
- package/src/app-deploy.mjs +276 -0
- package/src/app-deploy.mjs.map +1 -0
- package/src/app.js +349 -0
- package/src/app.js.map +1 -0
- package/src/app.mjs +329 -0
- package/src/app.mjs.map +1 -0
- package/{asset.js → src/asset.js} +6 -9
- package/src/asset.js.map +1 -0
- package/{asset.mjs → src/asset.mjs} +6 -9
- package/src/asset.mjs.map +1 -0
- package/{config.js → src/config.js} +1 -1
- package/src/config.js.map +1 -0
- package/{config.mjs → src/config.mjs} +1 -1
- package/src/config.mjs.map +1 -0
- package/src/debugging/debugging.js +15 -0
- package/src/debugging/debugging.js.map +1 -0
- package/src/debugging/debugging.mjs +13 -0
- package/src/debugging/debugging.mjs.map +1 -0
- package/{dispenser-client.js → src/dispenser-client.js} +1 -1
- package/src/dispenser-client.js.map +1 -0
- package/{dispenser-client.mjs → src/dispenser-client.mjs} +1 -1
- package/src/dispenser-client.mjs.map +1 -0
- package/{indexer-lookup.js → src/indexer-lookup.js} +14 -10
- package/src/indexer-lookup.js.map +1 -0
- package/{indexer-lookup.mjs → src/indexer-lookup.mjs} +14 -10
- package/src/indexer-lookup.mjs.map +1 -0
- package/{localnet → src/localnet}/get-kmd-wallet-account.js +3 -3
- package/src/localnet/get-kmd-wallet-account.js.map +1 -0
- package/{localnet → src/localnet}/get-kmd-wallet-account.mjs +3 -3
- package/src/localnet/get-kmd-wallet-account.mjs.map +1 -0
- package/{localnet → src/localnet}/get-localnet-dispenser-account.js +3 -3
- package/src/localnet/get-localnet-dispenser-account.js.map +1 -0
- package/{localnet → src/localnet}/get-localnet-dispenser-account.mjs +3 -3
- package/src/localnet/get-localnet-dispenser-account.mjs.map +1 -0
- package/{localnet → src/localnet}/get-or-create-kmd-wallet-account.js +3 -3
- package/src/localnet/get-or-create-kmd-wallet-account.js.map +1 -0
- package/{localnet → src/localnet}/get-or-create-kmd-wallet-account.mjs +3 -3
- package/src/localnet/get-or-create-kmd-wallet-account.mjs.map +1 -0
- package/{localnet → src/localnet}/is-localnet.js +2 -2
- package/src/localnet/is-localnet.js.map +1 -0
- package/{localnet → src/localnet}/is-localnet.mjs +2 -2
- package/src/localnet/is-localnet.mjs.map +1 -0
- package/{network-client.js → src/network-client.js} +5 -12
- package/src/network-client.js.map +1 -0
- package/{network-client.mjs → src/network-client.mjs} +5 -12
- package/src/network-client.mjs.map +1 -0
- package/{testing → src/testing}/account.js +9 -3
- package/src/testing/account.js.map +1 -0
- package/{testing → src/testing}/account.mjs +10 -4
- package/src/testing/account.mjs.map +1 -0
- package/src/testing/fixtures/algokit-log-capture-fixture.js.map +1 -0
- package/src/testing/fixtures/algokit-log-capture-fixture.mjs.map +1 -0
- package/{testing → src/testing}/fixtures/algorand-fixture.js +15 -16
- package/src/testing/fixtures/algorand-fixture.js.map +1 -0
- package/{testing → src/testing}/fixtures/algorand-fixture.mjs +15 -16
- package/src/testing/fixtures/algorand-fixture.mjs.map +1 -0
- package/src/testing/indexer.js.map +1 -0
- package/src/testing/indexer.mjs.map +1 -0
- package/{testing → src/testing}/test-logger.js +7 -3
- package/src/testing/test-logger.js.map +1 -0
- package/{testing → src/testing}/test-logger.mjs +7 -3
- package/src/testing/test-logger.mjs.map +1 -0
- package/src/testing/transaction-logger.js.map +1 -0
- package/src/testing/transaction-logger.mjs.map +1 -0
- package/src/transaction/legacy-bridge.js +129 -0
- package/src/transaction/legacy-bridge.js.map +1 -0
- package/src/transaction/legacy-bridge.mjs +124 -0
- package/src/transaction/legacy-bridge.mjs.map +1 -0
- package/{transaction → src/transaction}/perform-atomic-transaction-composer-simulate.js +14 -9
- package/src/transaction/perform-atomic-transaction-composer-simulate.js.map +1 -0
- package/{transaction → src/transaction}/perform-atomic-transaction-composer-simulate.mjs +15 -10
- package/src/transaction/perform-atomic-transaction-composer-simulate.mjs.map +1 -0
- package/{transaction → src/transaction}/transaction.js +217 -137
- package/src/transaction/transaction.js.map +1 -0
- package/{transaction → src/transaction}/transaction.mjs +218 -138
- package/src/transaction/transaction.mjs.map +1 -0
- package/{transfer → src/transfer}/transfer-algos.js +1 -1
- package/src/transfer/transfer-algos.js.map +1 -0
- package/{transfer → src/transfer}/transfer-algos.mjs +1 -1
- package/src/transfer/transfer-algos.mjs.map +1 -0
- package/{transfer → src/transfer}/transfer.js +8 -6
- package/src/transfer/transfer.js.map +1 -0
- package/{transfer → src/transfer}/transfer.mjs +8 -6
- package/src/transfer/transfer.mjs.map +1 -0
- package/{util.js → src/util.js} +11 -10
- package/src/util.js.map +1 -0
- package/{util.mjs → src/util.mjs} +11 -10
- package/src/util.mjs.map +1 -0
- package/testing/_asset.d.ts +2 -2
- package/testing/account.d.ts +4 -4
- package/testing/fixtures/algokit-log-capture-fixture.d.ts +0 -1
- package/testing/fixtures/algorand-fixture.d.ts +0 -1
- package/testing/fixtures/index.d.ts +0 -1
- package/testing/index.d.ts +0 -1
- package/testing/index.js +6 -6
- package/testing/index.mjs +6 -6
- package/testing/indexer.d.ts +0 -1
- package/testing/test-logger.d.ts +0 -1
- package/testing/transaction-logger.d.ts +0 -1
- package/transaction/index.d.ts +0 -1
- package/transaction/legacy-bridge.d.ts +31 -6
- package/transaction/perform-atomic-transaction-composer-simulate.d.ts +4 -2
- package/transaction/transaction.d.ts +38 -19
- package/transfer/index.d.ts +0 -1
- package/transfer/transfer-algos.d.ts +1 -2
- package/transfer/transfer.d.ts +1 -2
- package/types/account-manager.d.ts +33 -25
- package/types/account-manager.js +56 -33
- package/types/account-manager.js.map +1 -1
- package/types/account-manager.mjs +58 -35
- package/types/account-manager.mjs.map +1 -1
- package/types/account.d.ts +17 -9
- package/types/account.js +2 -2
- package/types/account.js.map +1 -1
- package/types/account.mjs +3 -3
- package/types/account.mjs.map +1 -1
- package/types/algo-http-client-with-retry.d.ts +1 -3
- package/types/algo-http-client-with-retry.js +34 -4
- package/types/algo-http-client-with-retry.js.map +1 -1
- package/types/algo-http-client-with-retry.mjs +33 -3
- package/types/algo-http-client-with-retry.mjs.map +1 -1
- package/types/algorand-client-interface.d.ts +28 -0
- package/types/algorand-client-interface.js +3 -0
- package/types/algorand-client-interface.js.map +1 -0
- package/types/algorand-client-interface.mjs +2 -0
- package/types/algorand-client-interface.mjs.map +1 -0
- package/types/algorand-client-transaction-creator.d.ts +452 -23
- package/types/algorand-client-transaction-creator.js +407 -23
- package/types/algorand-client-transaction-creator.js.map +1 -1
- package/types/algorand-client-transaction-creator.mjs +407 -23
- package/types/algorand-client-transaction-creator.mjs.map +1 -1
- package/types/algorand-client-transaction-sender.d.ts +772 -47
- package/types/algorand-client-transaction-sender.js +446 -16
- package/types/algorand-client-transaction-sender.js.map +1 -1
- package/types/algorand-client-transaction-sender.mjs +446 -16
- package/types/algorand-client-transaction-sender.mjs.map +1 -1
- package/types/algorand-client.d.ts +24 -17
- package/types/algorand-client.js +26 -16
- package/types/algorand-client.js.map +1 -1
- package/types/algorand-client.mjs +28 -15
- package/types/algorand-client.mjs.map +1 -1
- package/types/amount.d.ts +10 -11
- package/types/amount.js +7 -7
- package/types/amount.js.map +1 -1
- package/types/amount.mjs +7 -7
- package/types/amount.mjs.map +1 -1
- package/types/app-arc56.d.ts +359 -0
- package/types/app-arc56.js +184 -0
- package/types/app-arc56.js.map +1 -0
- package/types/app-arc56.mjs +175 -0
- package/types/app-arc56.mjs.map +1 -0
- package/types/app-client.d.ts +1508 -12
- package/types/app-client.js +1023 -34
- package/types/app-client.js.map +1 -1
- package/types/app-client.mjs +1024 -36
- package/types/app-client.mjs.map +1 -1
- package/types/app-deployer.d.ts +126 -0
- package/types/app-deployer.js +353 -0
- package/types/app-deployer.js.map +1 -0
- package/types/app-deployer.mjs +351 -0
- package/types/app-deployer.mjs.map +1 -0
- package/types/app-factory.d.ts +846 -0
- package/types/app-factory.js +410 -0
- package/types/app-factory.js.map +1 -0
- package/types/app-factory.mjs +408 -0
- package/types/app-factory.mjs.map +1 -0
- package/types/app-manager.d.ts +244 -0
- package/types/app-manager.js +423 -0
- package/types/app-manager.js.map +1 -0
- package/types/app-manager.mjs +421 -0
- package/types/app-manager.mjs.map +1 -0
- package/types/app-spec.d.ts +2 -1
- package/types/app-spec.js +127 -0
- package/types/app-spec.js.map +1 -1
- package/types/app-spec.mjs +126 -0
- package/types/app-spec.mjs.map +1 -1
- package/types/app.d.ts +57 -18
- package/types/app.js +1 -1
- package/types/app.js.map +1 -1
- package/types/app.mjs +1 -1
- package/types/app.mjs.map +1 -1
- package/types/asset-manager.d.ts +10 -10
- package/types/asset-manager.js +15 -19
- package/types/asset-manager.js.map +1 -1
- package/types/asset-manager.mjs +15 -19
- package/types/asset-manager.mjs.map +1 -1
- package/types/asset.d.ts +0 -1
- package/types/async-event-emitter.d.ts +14 -0
- package/types/async-event-emitter.js +50 -0
- package/types/async-event-emitter.js.map +1 -0
- package/types/async-event-emitter.mjs +48 -0
- package/types/async-event-emitter.mjs.map +1 -0
- package/types/client-manager.d.ts +135 -60
- package/types/client-manager.js +158 -44
- package/types/client-manager.js.map +1 -1
- package/types/client-manager.mjs +159 -45
- package/types/client-manager.mjs.map +1 -1
- package/types/composer.d.ts +271 -87
- package/types/composer.js +406 -126
- package/types/composer.js.map +1 -1
- package/types/composer.mjs +407 -125
- package/types/composer.mjs.map +1 -1
- package/types/config.d.ts +3 -6
- package/types/config.js +5 -44
- package/types/config.js.map +1 -1
- package/types/config.mjs +5 -27
- package/types/config.mjs.map +1 -1
- package/types/debugging.d.ts +29 -101
- package/types/debugging.js +16 -109
- package/types/debugging.js.map +1 -1
- package/types/debugging.mjs +12 -107
- package/types/debugging.mjs.map +1 -1
- package/types/dispenser-client.d.ts +2 -2
- package/types/dispenser-client.js +10 -5
- package/types/dispenser-client.js.map +1 -1
- package/types/dispenser-client.mjs +10 -5
- package/types/dispenser-client.mjs.map +1 -1
- package/types/expand.d.ts +7 -0
- package/types/expand.js +3 -0
- package/types/expand.js.map +1 -0
- package/types/expand.mjs +2 -0
- package/types/expand.mjs.map +1 -0
- package/types/indexer.d.ts +74 -756
- package/types/indexer.js.map +1 -1
- package/types/indexer.mjs.map +1 -1
- package/types/kmd-account-manager.d.ts +2 -3
- package/types/kmd-account-manager.js +4 -4
- package/types/kmd-account-manager.js.map +1 -1
- package/types/kmd-account-manager.mjs +5 -5
- package/types/kmd-account-manager.mjs.map +1 -1
- package/types/lifecycle-events.d.ts +10 -0
- package/types/lifecycle-events.js +8 -0
- package/types/lifecycle-events.js.map +1 -0
- package/types/lifecycle-events.mjs +8 -0
- package/types/lifecycle-events.mjs.map +1 -0
- package/types/logging.d.ts +0 -1
- package/types/logging.js.map +1 -1
- package/types/logging.mjs.map +1 -1
- package/types/logic-error.d.ts +2 -4
- package/types/logic-error.js +3 -3
- package/types/logic-error.js.map +1 -1
- package/types/logic-error.mjs +3 -3
- package/types/logic-error.mjs.map +1 -1
- package/types/network-client.d.ts +14 -2
- package/types/network-client.js.map +1 -1
- package/types/network-client.mjs.map +1 -1
- package/types/testing.d.ts +8 -10
- package/types/transaction.d.ts +17 -4
- package/types/transfer.d.ts +0 -1
- package/util.d.ts +2 -2
- package/account/account.d.ts.map +0 -1
- package/account/account.js.map +0 -1
- package/account/account.mjs.map +0 -1
- package/account/get-account-config-from-environment.d.ts.map +0 -1
- package/account/get-account-config-from-environment.js.map +0 -1
- package/account/get-account-config-from-environment.mjs.map +0 -1
- package/account/get-account.d.ts.map +0 -1
- package/account/get-account.js.map +0 -1
- package/account/get-account.mjs.map +0 -1
- package/account/get-dispenser-account.d.ts.map +0 -1
- package/account/get-dispenser-account.js.map +0 -1
- package/account/get-dispenser-account.mjs.map +0 -1
- package/account/index.d.ts.map +0 -1
- package/account/mnemonic-account.d.ts.map +0 -1
- package/account/mnemonic-account.js.map +0 -1
- package/account/mnemonic-account.mjs.map +0 -1
- package/amount.d.ts.map +0 -1
- package/amount.js.map +0 -1
- package/amount.mjs.map +0 -1
- package/app-client.d.ts.map +0 -1
- package/app-client.js.map +0 -1
- package/app-client.mjs.map +0 -1
- package/app-deploy.d.ts.map +0 -1
- package/app-deploy.js +0 -468
- package/app-deploy.js.map +0 -1
- package/app-deploy.mjs +0 -459
- package/app-deploy.mjs.map +0 -1
- package/app.d.ts.map +0 -1
- package/app.js +0 -599
- package/app.js.map +0 -1
- package/app.mjs +0 -579
- package/app.mjs.map +0 -1
- package/asset.d.ts.map +0 -1
- package/asset.js.map +0 -1
- package/asset.mjs.map +0 -1
- package/config.d.ts.map +0 -1
- package/config.js.map +0 -1
- package/config.mjs.map +0 -1
- package/debugging/debugging.d.ts.map +0 -1
- package/debugging/debugging.js +0 -139
- package/debugging/debugging.js.map +0 -1
- package/debugging/debugging.mjs +0 -118
- package/debugging/debugging.mjs.map +0 -1
- package/debugging/index.d.ts.map +0 -1
- package/debugging/simulate-and-persist-response.d.ts +0 -20
- package/debugging/simulate-and-persist-response.d.ts.map +0 -1
- package/debugging/simulate-and-persist-response.js +0 -108
- package/debugging/simulate-and-persist-response.js.map +0 -1
- package/debugging/simulate-and-persist-response.mjs +0 -89
- package/debugging/simulate-and-persist-response.mjs.map +0 -1
- package/dispenser-client.d.ts.map +0 -1
- package/dispenser-client.js.map +0 -1
- package/dispenser-client.mjs.map +0 -1
- package/index.d.ts.map +0 -1
- package/indexer-lookup.d.ts.map +0 -1
- package/indexer-lookup.js.map +0 -1
- package/indexer-lookup.mjs.map +0 -1
- package/localnet/get-kmd-wallet-account.d.ts.map +0 -1
- package/localnet/get-kmd-wallet-account.js.map +0 -1
- package/localnet/get-kmd-wallet-account.mjs.map +0 -1
- package/localnet/get-localnet-dispenser-account.d.ts.map +0 -1
- package/localnet/get-localnet-dispenser-account.js.map +0 -1
- package/localnet/get-localnet-dispenser-account.mjs.map +0 -1
- package/localnet/get-or-create-kmd-wallet-account.d.ts.map +0 -1
- package/localnet/get-or-create-kmd-wallet-account.js.map +0 -1
- package/localnet/get-or-create-kmd-wallet-account.mjs.map +0 -1
- package/localnet/index.d.ts.map +0 -1
- package/localnet/is-localnet.d.ts.map +0 -1
- package/localnet/is-localnet.js.map +0 -1
- package/localnet/is-localnet.mjs.map +0 -1
- package/network-client.d.ts.map +0 -1
- package/network-client.js.map +0 -1
- package/network-client.mjs.map +0 -1
- package/testing/_asset.d.ts.map +0 -1
- package/testing/account.d.ts.map +0 -1
- package/testing/account.js.map +0 -1
- package/testing/account.mjs.map +0 -1
- package/testing/fixtures/algokit-log-capture-fixture.d.ts.map +0 -1
- package/testing/fixtures/algokit-log-capture-fixture.js.map +0 -1
- package/testing/fixtures/algokit-log-capture-fixture.mjs.map +0 -1
- package/testing/fixtures/algorand-fixture.d.ts.map +0 -1
- package/testing/fixtures/algorand-fixture.js.map +0 -1
- package/testing/fixtures/algorand-fixture.mjs.map +0 -1
- package/testing/fixtures/index.d.ts.map +0 -1
- package/testing/index.d.ts.map +0 -1
- package/testing/indexer.d.ts.map +0 -1
- package/testing/indexer.js.map +0 -1
- package/testing/indexer.mjs.map +0 -1
- package/testing/test-logger.d.ts.map +0 -1
- package/testing/test-logger.js.map +0 -1
- package/testing/test-logger.mjs.map +0 -1
- package/testing/transaction-logger.d.ts.map +0 -1
- package/testing/transaction-logger.js.map +0 -1
- package/testing/transaction-logger.mjs.map +0 -1
- package/transaction/index.d.ts.map +0 -1
- package/transaction/legacy-bridge.d.ts.map +0 -1
- package/transaction/legacy-bridge.js +0 -35
- package/transaction/legacy-bridge.js.map +0 -1
- package/transaction/legacy-bridge.mjs +0 -33
- package/transaction/legacy-bridge.mjs.map +0 -1
- package/transaction/perform-atomic-transaction-composer-simulate.d.ts.map +0 -1
- package/transaction/perform-atomic-transaction-composer-simulate.js.map +0 -1
- package/transaction/perform-atomic-transaction-composer-simulate.mjs.map +0 -1
- package/transaction/transaction.d.ts.map +0 -1
- package/transaction/transaction.js.map +0 -1
- package/transaction/transaction.mjs.map +0 -1
- package/transfer/index.d.ts.map +0 -1
- package/transfer/transfer-algos.d.ts.map +0 -1
- package/transfer/transfer-algos.js.map +0 -1
- package/transfer/transfer-algos.mjs.map +0 -1
- package/transfer/transfer.d.ts.map +0 -1
- package/transfer/transfer.js.map +0 -1
- package/transfer/transfer.mjs.map +0 -1
- package/types/account-manager.d.ts.map +0 -1
- package/types/account.d.ts.map +0 -1
- package/types/algo-http-client-with-retry.d.ts.map +0 -1
- package/types/algorand-client-transaction-creator.d.ts.map +0 -1
- package/types/algorand-client-transaction-sender.d.ts.map +0 -1
- package/types/algorand-client.d.ts.map +0 -1
- package/types/amount.d.ts.map +0 -1
- package/types/app-client.d.ts.map +0 -1
- package/types/app-spec.d.ts.map +0 -1
- package/types/app.d.ts.map +0 -1
- package/types/asset-manager.d.ts.map +0 -1
- package/types/asset.d.ts.map +0 -1
- package/types/client-manager.d.ts.map +0 -1
- package/types/composer.d.ts.map +0 -1
- package/types/config.d.ts.map +0 -1
- package/types/debugging.d.ts.map +0 -1
- package/types/dispenser-client.d.ts.map +0 -1
- package/types/indexer.d.ts.map +0 -1
- package/types/kmd-account-manager.d.ts.map +0 -1
- package/types/logging.d.ts.map +0 -1
- package/types/logic-error.d.ts.map +0 -1
- package/types/network-client.d.ts.map +0 -1
- package/types/testing.d.ts.map +0 -1
- package/types/transaction.d.ts.map +0 -1
- package/types/transfer.d.ts.map +0 -1
- package/types/urlTokenBaseHTTPClient.d.ts +0 -41
- package/types/urlTokenBaseHTTPClient.d.ts.map +0 -1
- package/types/urlTokenBaseHTTPClient.js +0 -153
- package/types/urlTokenBaseHTTPClient.js.map +0 -1
- package/types/urlTokenBaseHTTPClient.mjs +0 -151
- package/types/urlTokenBaseHTTPClient.mjs.map +0 -1
- package/util.d.ts.map +0 -1
- package/util.js.map +0 -1
- package/util.mjs.map +0 -1
- /package/{account → src/account}/get-account-config-from-environment.js +0 -0
- /package/{account → src/account}/get-account-config-from-environment.mjs +0 -0
- /package/{testing → src/testing}/fixtures/algokit-log-capture-fixture.js +0 -0
- /package/{testing → src/testing}/fixtures/algokit-log-capture-fixture.mjs +0 -0
- /package/{testing → src/testing}/indexer.js +0 -0
- /package/{testing → src/testing}/indexer.mjs +0 -0
- /package/{testing → src/testing}/transaction-logger.js +0 -0
- /package/{testing → src/testing}/transaction-logger.mjs +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"algokit-log-capture-fixture.mjs","sources":["../../../../src/testing/fixtures/algokit-log-capture-fixture.ts"],"sourcesContent":["import { Config } from '../../'\nimport { AlgoKitLogCaptureFixture } from '../../types/testing'\nimport { TestLogger } from '../test-logger'\n\n/**\n * Creates a test fixture for capturing AlgoKit logs.\n *\n * @example\n * ```typescript\n * const logs = algoKitLogCaptureFixture()\n *\n * beforeEach(logs.beforeEach)\n * afterEach(logs.afterEach)\n *\n * test('My test', () => {\n * const capturedLogs = logs.testLogger.capturedLogs\n * })\n * ```\n *\n * @returns The fixture\n */\nexport const algoKitLogCaptureFixture: () => AlgoKitLogCaptureFixture = () => {\n const originalLogger = Config.logger\n\n let hybridLogger: TestLogger\n\n return {\n get testLogger() {\n return hybridLogger\n },\n beforeEach: () => {\n hybridLogger = new TestLogger(originalLogger)\n Config.configure({\n logger: hybridLogger,\n })\n },\n afterEach: () => {\n Config.configure({\n logger: originalLogger,\n })\n },\n }\n}\n"],"names":[],"mappings":";;;AAIA;;;;;;;;;;;;;;;;AAgBG;AACI,MAAM,wBAAwB,GAAmC,MAAK;AAC3E,IAAA,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAA;AAEpC,IAAA,IAAI,YAAwB,CAAA;IAE5B,OAAO;AACL,QAAA,IAAI,UAAU,GAAA;AACZ,YAAA,OAAO,YAAY,CAAA;SACpB;QACD,UAAU,EAAE,MAAK;AACf,YAAA,YAAY,GAAG,IAAI,UAAU,CAAC,cAAc,CAAC,CAAA;YAC7C,MAAM,CAAC,SAAS,CAAC;AACf,gBAAA,MAAM,EAAE,YAAY;AACrB,aAAA,CAAC,CAAA;SACH;QACD,SAAS,EAAE,MAAK;YACd,MAAM,CAAC,SAAS,CAAC;AACf,gBAAA,MAAM,EAAE,cAAc;AACvB,aAAA,CAAC,CAAA;SACH;KACF,CAAA;AACH;;;;"}
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var types_algorandClient = require('
|
|
4
|
-
var types_clientManager = require('
|
|
3
|
+
var types_algorandClient = require('../../../types/algorand-client.js');
|
|
4
|
+
var types_clientManager = require('../../../types/client-manager.js');
|
|
5
5
|
var account = require('../account.js');
|
|
6
6
|
var indexer = require('../indexer.js');
|
|
7
7
|
var transactionLogger = require('../transaction-logger.js');
|
|
8
8
|
var amount = require('../../amount.js');
|
|
9
|
-
var indexerLookup = require('../../indexer-lookup.js');
|
|
10
9
|
var config = require('../../config.js');
|
|
11
10
|
|
|
12
11
|
function algorandFixture(fixtureConfig, config$1) {
|
|
@@ -18,34 +17,34 @@ function algorandFixture(fixtureConfig, config$1) {
|
|
|
18
17
|
const indexer$1 = fixtureConfig.indexer ?? types_clientManager.ClientManager.getIndexerClient(fixtureConfig.indexerConfig);
|
|
19
18
|
const kmd = fixtureConfig.kmd ?? types_clientManager.ClientManager.getKmdClient(fixtureConfig.kmdConfig);
|
|
20
19
|
let context;
|
|
21
|
-
let
|
|
20
|
+
let algorand;
|
|
22
21
|
const beforeEach = async () => {
|
|
23
22
|
config.Config.configure({ debug: true });
|
|
24
23
|
const transactionLogger$1 = new transactionLogger.TransactionLogger();
|
|
25
24
|
const transactionLoggerAlgod = transactionLogger$1.capture(algod);
|
|
26
|
-
|
|
27
|
-
const
|
|
28
|
-
|
|
25
|
+
algorand = types_algorandClient.AlgorandClient.fromClients({ algod: transactionLoggerAlgod, indexer: indexer$1, kmd });
|
|
26
|
+
const testAccount = await account.getTestAccount({ initialFunds: fixtureConfig?.testAccountFunding ?? amount.algos(10), suppressLog: true }, algorand);
|
|
27
|
+
algorand.setSignerFromAccount(testAccount).setSuggestedParamsCacheTimeout(0);
|
|
29
28
|
// If running against LocalNet we are likely in dev mode and we need to set a much higher validity window
|
|
30
29
|
// otherwise we are more likely to get invalid transactions.
|
|
31
|
-
if (await
|
|
32
|
-
|
|
30
|
+
if (await algorand.client.isLocalNet()) {
|
|
31
|
+
algorand.setDefaultValidityWindow(1000);
|
|
33
32
|
}
|
|
34
|
-
|
|
33
|
+
algorand.account.setSignerFromAccount(testAccount);
|
|
35
34
|
context = {
|
|
36
|
-
algorand
|
|
35
|
+
algorand,
|
|
37
36
|
algod: transactionLoggerAlgod,
|
|
38
37
|
indexer: indexer$1,
|
|
39
38
|
kmd: kmd,
|
|
40
39
|
testAccount,
|
|
41
40
|
generateAccount: async (params) => {
|
|
42
|
-
const account$1 = await account.getTestAccount(params,
|
|
43
|
-
|
|
44
|
-
return
|
|
41
|
+
const account$1 = await account.getTestAccount(params, algorand);
|
|
42
|
+
algorand.setSignerFromAccount(account$1);
|
|
43
|
+
return account$1;
|
|
45
44
|
},
|
|
46
45
|
transactionLogger: transactionLogger$1,
|
|
47
46
|
waitForIndexer: () => transactionLogger$1.waitForIndexer(indexer$1),
|
|
48
|
-
waitForIndexerTransaction: (transactionId) => indexer.runWhenIndexerCaughtUp(() =>
|
|
47
|
+
waitForIndexerTransaction: (transactionId) => indexer.runWhenIndexerCaughtUp(() => indexer$1.lookupTransactionByID(transactionId).do()),
|
|
49
48
|
};
|
|
50
49
|
};
|
|
51
50
|
return {
|
|
@@ -53,7 +52,7 @@ function algorandFixture(fixtureConfig, config$1) {
|
|
|
53
52
|
return context;
|
|
54
53
|
},
|
|
55
54
|
get algorand() {
|
|
56
|
-
return
|
|
55
|
+
return algorand;
|
|
57
56
|
},
|
|
58
57
|
beforeEach,
|
|
59
58
|
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"algorand-fixture.js","sources":["../../../../src/testing/fixtures/algorand-fixture.ts"],"sourcesContent":["import { algos, Config } from '../../'\nimport { AlgorandClient } from '../../types/algorand-client'\nimport { ClientManager } from '../../types/client-manager'\nimport { AlgoConfig } from '../../types/network-client'\nimport { AlgorandFixture, AlgorandFixtureConfig, AlgorandTestAutomationContext, GetTestAccountParams } from '../../types/testing'\nimport { getTestAccount } from '../account'\nimport { runWhenIndexerCaughtUp } from '../indexer'\nimport { TransactionLogger } from '../transaction-logger'\n\n/**\n * Creates a test fixture for automated testing against Algorand.\n * By default it tests against an environment variable specified client\n * if the standard environment variables are specified, otherwise against\n * a default LocalNet instance, but you can pass in an algod, indexer\n * and/or kmd (or their respective config) if you want to test against\n * an explicitly defined network.\n *\n * @example No config\n * ```typescript\n * const algorand = algorandFixture()\n *\n * beforeEach(algorand.beforeEach, 10_000)\n *\n * test('My test', async () => {\n * const {algod, indexer, testAccount, ...} = algorand.context\n * // test things...\n * })\n * ```\n *\n * @example With config\n * ```typescript\n * const algorand = algorandFixture({\n * algod: new Algodv2('localhost', 12345, 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'),\n * // ...\n * })\n *\n * beforeEach(algorand.beforeEach, 10_000)\n *\n * test('My test', async () => {\n * const {algod, indexer, testAccount, ...} = algorand.context\n * // test things...\n * })\n * ```\n *\n * @param fixtureConfig The fixture configuration\n * @returns The fixture\n */\nexport function algorandFixture(fixtureConfig?: AlgorandFixtureConfig): AlgorandFixture\n\n/**\n * @deprecated Config can be passed in directly to fixture config now.\n *\n * Creates a test fixture for automated testing against Algorand.\n * By default it tests against an environment variable specified client\n * if the standard environment variables are specified, otherwise against\n * a default LocalNet instance, but you can pass in an algod, indexer\n * and/or kmd if you want to test against an explicitly defined network.\n *\n * @example\n * ```typescript\n * const algorand = algorandFixture(undefined, getConfigFromEnvOrDefaults())\n *\n * beforeEach(algorand.beforeEach, 10_000)\n *\n * test('My test', async () => {\n * const {algod, indexer, testAccount, ...} = algorand.context\n * // test things...\n * })\n * ```\n *\n * @param fixtureConfig The fixture configuration\n * @param config The fixture configuration\n * @returns The fixture\n */\nexport function algorandFixture(fixtureConfig: AlgorandFixtureConfig | undefined, config: AlgoConfig): AlgorandFixture\n\nexport function algorandFixture(fixtureConfig?: AlgorandFixtureConfig, config?: AlgoConfig): AlgorandFixture {\n fixtureConfig = { ...fixtureConfig, ...config }\n if (!fixtureConfig.algod || !fixtureConfig.indexer || !fixtureConfig.kmd) {\n fixtureConfig = { ...ClientManager.getConfigFromEnvironmentOrLocalNet(), ...fixtureConfig }\n }\n\n const algod = fixtureConfig.algod ?? ClientManager.getAlgodClient(fixtureConfig.algodConfig!)\n const indexer = fixtureConfig.indexer ?? ClientManager.getIndexerClient(fixtureConfig.indexerConfig!)\n const kmd = fixtureConfig.kmd ?? ClientManager.getKmdClient(fixtureConfig.kmdConfig!)\n let context: AlgorandTestAutomationContext\n let algorand: AlgorandClient\n\n const beforeEach = async () => {\n Config.configure({ debug: true })\n const transactionLogger = new TransactionLogger()\n const transactionLoggerAlgod = transactionLogger.capture(algod)\n algorand = AlgorandClient.fromClients({ algod: transactionLoggerAlgod, indexer, kmd })\n const testAccount = await getTestAccount({ initialFunds: fixtureConfig?.testAccountFunding ?? algos(10), suppressLog: true }, algorand)\n algorand.setSignerFromAccount(testAccount).setSuggestedParamsCacheTimeout(0)\n // If running against LocalNet we are likely in dev mode and we need to set a much higher validity window\n // otherwise we are more likely to get invalid transactions.\n if (await algorand.client.isLocalNet()) {\n algorand.setDefaultValidityWindow(1000)\n }\n algorand.account.setSignerFromAccount(testAccount)\n context = {\n algorand,\n algod: transactionLoggerAlgod,\n indexer: indexer,\n kmd: kmd,\n testAccount,\n generateAccount: async (params: GetTestAccountParams) => {\n const account = await getTestAccount(params, algorand)\n algorand.setSignerFromAccount(account)\n return account\n },\n transactionLogger: transactionLogger,\n waitForIndexer: () => transactionLogger.waitForIndexer(indexer),\n waitForIndexerTransaction: (transactionId: string) => runWhenIndexerCaughtUp(() => indexer.lookupTransactionByID(transactionId).do()),\n }\n }\n\n return {\n get context() {\n return context\n },\n get algorand() {\n return algorand\n },\n beforeEach,\n }\n}\n"],"names":["config","ClientManager","indexer","Config","transactionLogger","TransactionLogger","AlgorandClient","getTestAccount","algos","account","runWhenIndexerCaughtUp"],"mappings":";;;;;;;;;;AA4EgB,SAAA,eAAe,CAAC,aAAqC,EAAEA,QAAmB,EAAA;IACxF,aAAa,GAAG,EAAE,GAAG,aAAa,EAAE,GAAGA,QAAM,EAAE,CAAA;AAC/C,IAAA,IAAI,CAAC,aAAa,CAAC,KAAK,IAAI,CAAC,aAAa,CAAC,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE;QACxE,aAAa,GAAG,EAAE,GAAGC,iCAAa,CAAC,kCAAkC,EAAE,EAAE,GAAG,aAAa,EAAE,CAAA;KAC5F;AAED,IAAA,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,IAAIA,iCAAa,CAAC,cAAc,CAAC,aAAa,CAAC,WAAY,CAAC,CAAA;AAC7F,IAAA,MAAMC,SAAO,GAAG,aAAa,CAAC,OAAO,IAAID,iCAAa,CAAC,gBAAgB,CAAC,aAAa,CAAC,aAAc,CAAC,CAAA;AACrG,IAAA,MAAM,GAAG,GAAG,aAAa,CAAC,GAAG,IAAIA,iCAAa,CAAC,YAAY,CAAC,aAAa,CAAC,SAAU,CAAC,CAAA;AACrF,IAAA,IAAI,OAAsC,CAAA;AAC1C,IAAA,IAAI,QAAwB,CAAA;AAE5B,IAAA,MAAM,UAAU,GAAG,YAAW;QAC5BE,aAAM,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;AACjC,QAAA,MAAMC,mBAAiB,GAAG,IAAIC,mCAAiB,EAAE,CAAA;QACjD,MAAM,sBAAsB,GAAGD,mBAAiB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;AAC/D,QAAA,QAAQ,GAAGE,mCAAc,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,sBAAsB,WAAEJ,SAAO,EAAE,GAAG,EAAE,CAAC,CAAA;QACtF,MAAM,WAAW,GAAG,MAAMK,sBAAc,CAAC,EAAE,YAAY,EAAE,aAAa,EAAE,kBAAkB,IAAIC,YAAK,CAAC,EAAE,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,QAAQ,CAAC,CAAA;QACvI,QAAQ,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC,8BAA8B,CAAC,CAAC,CAAC,CAAA;;;QAG5E,IAAI,MAAM,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE;AACtC,YAAA,QAAQ,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAA;SACxC;AACD,QAAA,QAAQ,CAAC,OAAO,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAA;AAClD,QAAA,OAAO,GAAG;YACR,QAAQ;AACR,YAAA,KAAK,EAAE,sBAAsB;AAC7B,YAAA,OAAO,EAAEN,SAAO;AAChB,YAAA,GAAG,EAAE,GAAG;YACR,WAAW;AACX,YAAA,eAAe,EAAE,OAAO,MAA4B,KAAI;gBACtD,MAAMO,SAAO,GAAG,MAAMF,sBAAc,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;AACtD,gBAAA,QAAQ,CAAC,oBAAoB,CAACE,SAAO,CAAC,CAAA;AACtC,gBAAA,OAAOA,SAAO,CAAA;aACf;AACD,YAAA,iBAAiB,EAAEL,mBAAiB;YACpC,cAAc,EAAE,MAAMA,mBAAiB,CAAC,cAAc,CAACF,SAAO,CAAC;YAC/D,yBAAyB,EAAE,CAAC,aAAqB,KAAKQ,8BAAsB,CAAC,MAAMR,SAAO,CAAC,qBAAqB,CAAC,aAAa,CAAC,CAAC,EAAE,EAAE,CAAC;SACtI,CAAA;AACH,KAAC,CAAA;IAED,OAAO;AACL,QAAA,IAAI,OAAO,GAAA;AACT,YAAA,OAAO,OAAO,CAAA;SACf;AACD,QAAA,IAAI,QAAQ,GAAA;AACV,YAAA,OAAO,QAAQ,CAAA;SAChB;QACD,UAAU;KACX,CAAA;AACH;;;;"}
|
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
import { AlgorandClient } from '
|
|
2
|
-
import { ClientManager } from '
|
|
1
|
+
import { AlgorandClient } from '../../../types/algorand-client.mjs';
|
|
2
|
+
import { ClientManager } from '../../../types/client-manager.mjs';
|
|
3
3
|
import { getTestAccount } from '../account.mjs';
|
|
4
4
|
import { runWhenIndexerCaughtUp } from '../indexer.mjs';
|
|
5
5
|
import { TransactionLogger } from '../transaction-logger.mjs';
|
|
6
6
|
import { algos } from '../../amount.mjs';
|
|
7
|
-
import { lookupTransactionById } from '../../indexer-lookup.mjs';
|
|
8
7
|
import { Config } from '../../config.mjs';
|
|
9
8
|
|
|
10
9
|
function algorandFixture(fixtureConfig, config) {
|
|
@@ -16,34 +15,34 @@ function algorandFixture(fixtureConfig, config) {
|
|
|
16
15
|
const indexer = fixtureConfig.indexer ?? ClientManager.getIndexerClient(fixtureConfig.indexerConfig);
|
|
17
16
|
const kmd = fixtureConfig.kmd ?? ClientManager.getKmdClient(fixtureConfig.kmdConfig);
|
|
18
17
|
let context;
|
|
19
|
-
let
|
|
18
|
+
let algorand;
|
|
20
19
|
const beforeEach = async () => {
|
|
21
20
|
Config.configure({ debug: true });
|
|
22
21
|
const transactionLogger = new TransactionLogger();
|
|
23
22
|
const transactionLoggerAlgod = transactionLogger.capture(algod);
|
|
24
|
-
|
|
25
|
-
const
|
|
26
|
-
|
|
23
|
+
algorand = AlgorandClient.fromClients({ algod: transactionLoggerAlgod, indexer, kmd });
|
|
24
|
+
const testAccount = await getTestAccount({ initialFunds: fixtureConfig?.testAccountFunding ?? algos(10), suppressLog: true }, algorand);
|
|
25
|
+
algorand.setSignerFromAccount(testAccount).setSuggestedParamsCacheTimeout(0);
|
|
27
26
|
// If running against LocalNet we are likely in dev mode and we need to set a much higher validity window
|
|
28
27
|
// otherwise we are more likely to get invalid transactions.
|
|
29
|
-
if (await
|
|
30
|
-
|
|
28
|
+
if (await algorand.client.isLocalNet()) {
|
|
29
|
+
algorand.setDefaultValidityWindow(1000);
|
|
31
30
|
}
|
|
32
|
-
|
|
31
|
+
algorand.account.setSignerFromAccount(testAccount);
|
|
33
32
|
context = {
|
|
34
|
-
algorand
|
|
33
|
+
algorand,
|
|
35
34
|
algod: transactionLoggerAlgod,
|
|
36
35
|
indexer: indexer,
|
|
37
36
|
kmd: kmd,
|
|
38
37
|
testAccount,
|
|
39
38
|
generateAccount: async (params) => {
|
|
40
|
-
const account = await getTestAccount(params,
|
|
41
|
-
|
|
42
|
-
return
|
|
39
|
+
const account = await getTestAccount(params, algorand);
|
|
40
|
+
algorand.setSignerFromAccount(account);
|
|
41
|
+
return account;
|
|
43
42
|
},
|
|
44
43
|
transactionLogger: transactionLogger,
|
|
45
44
|
waitForIndexer: () => transactionLogger.waitForIndexer(indexer),
|
|
46
|
-
waitForIndexerTransaction: (transactionId) => runWhenIndexerCaughtUp(() =>
|
|
45
|
+
waitForIndexerTransaction: (transactionId) => runWhenIndexerCaughtUp(() => indexer.lookupTransactionByID(transactionId).do()),
|
|
47
46
|
};
|
|
48
47
|
};
|
|
49
48
|
return {
|
|
@@ -51,7 +50,7 @@ function algorandFixture(fixtureConfig, config) {
|
|
|
51
50
|
return context;
|
|
52
51
|
},
|
|
53
52
|
get algorand() {
|
|
54
|
-
return
|
|
53
|
+
return algorand;
|
|
55
54
|
},
|
|
56
55
|
beforeEach,
|
|
57
56
|
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"algorand-fixture.mjs","sources":["../../../../src/testing/fixtures/algorand-fixture.ts"],"sourcesContent":["import { algos, Config } from '../../'\nimport { AlgorandClient } from '../../types/algorand-client'\nimport { ClientManager } from '../../types/client-manager'\nimport { AlgoConfig } from '../../types/network-client'\nimport { AlgorandFixture, AlgorandFixtureConfig, AlgorandTestAutomationContext, GetTestAccountParams } from '../../types/testing'\nimport { getTestAccount } from '../account'\nimport { runWhenIndexerCaughtUp } from '../indexer'\nimport { TransactionLogger } from '../transaction-logger'\n\n/**\n * Creates a test fixture for automated testing against Algorand.\n * By default it tests against an environment variable specified client\n * if the standard environment variables are specified, otherwise against\n * a default LocalNet instance, but you can pass in an algod, indexer\n * and/or kmd (or their respective config) if you want to test against\n * an explicitly defined network.\n *\n * @example No config\n * ```typescript\n * const algorand = algorandFixture()\n *\n * beforeEach(algorand.beforeEach, 10_000)\n *\n * test('My test', async () => {\n * const {algod, indexer, testAccount, ...} = algorand.context\n * // test things...\n * })\n * ```\n *\n * @example With config\n * ```typescript\n * const algorand = algorandFixture({\n * algod: new Algodv2('localhost', 12345, 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'),\n * // ...\n * })\n *\n * beforeEach(algorand.beforeEach, 10_000)\n *\n * test('My test', async () => {\n * const {algod, indexer, testAccount, ...} = algorand.context\n * // test things...\n * })\n * ```\n *\n * @param fixtureConfig The fixture configuration\n * @returns The fixture\n */\nexport function algorandFixture(fixtureConfig?: AlgorandFixtureConfig): AlgorandFixture\n\n/**\n * @deprecated Config can be passed in directly to fixture config now.\n *\n * Creates a test fixture for automated testing against Algorand.\n * By default it tests against an environment variable specified client\n * if the standard environment variables are specified, otherwise against\n * a default LocalNet instance, but you can pass in an algod, indexer\n * and/or kmd if you want to test against an explicitly defined network.\n *\n * @example\n * ```typescript\n * const algorand = algorandFixture(undefined, getConfigFromEnvOrDefaults())\n *\n * beforeEach(algorand.beforeEach, 10_000)\n *\n * test('My test', async () => {\n * const {algod, indexer, testAccount, ...} = algorand.context\n * // test things...\n * })\n * ```\n *\n * @param fixtureConfig The fixture configuration\n * @param config The fixture configuration\n * @returns The fixture\n */\nexport function algorandFixture(fixtureConfig: AlgorandFixtureConfig | undefined, config: AlgoConfig): AlgorandFixture\n\nexport function algorandFixture(fixtureConfig?: AlgorandFixtureConfig, config?: AlgoConfig): AlgorandFixture {\n fixtureConfig = { ...fixtureConfig, ...config }\n if (!fixtureConfig.algod || !fixtureConfig.indexer || !fixtureConfig.kmd) {\n fixtureConfig = { ...ClientManager.getConfigFromEnvironmentOrLocalNet(), ...fixtureConfig }\n }\n\n const algod = fixtureConfig.algod ?? ClientManager.getAlgodClient(fixtureConfig.algodConfig!)\n const indexer = fixtureConfig.indexer ?? ClientManager.getIndexerClient(fixtureConfig.indexerConfig!)\n const kmd = fixtureConfig.kmd ?? ClientManager.getKmdClient(fixtureConfig.kmdConfig!)\n let context: AlgorandTestAutomationContext\n let algorand: AlgorandClient\n\n const beforeEach = async () => {\n Config.configure({ debug: true })\n const transactionLogger = new TransactionLogger()\n const transactionLoggerAlgod = transactionLogger.capture(algod)\n algorand = AlgorandClient.fromClients({ algod: transactionLoggerAlgod, indexer, kmd })\n const testAccount = await getTestAccount({ initialFunds: fixtureConfig?.testAccountFunding ?? algos(10), suppressLog: true }, algorand)\n algorand.setSignerFromAccount(testAccount).setSuggestedParamsCacheTimeout(0)\n // If running against LocalNet we are likely in dev mode and we need to set a much higher validity window\n // otherwise we are more likely to get invalid transactions.\n if (await algorand.client.isLocalNet()) {\n algorand.setDefaultValidityWindow(1000)\n }\n algorand.account.setSignerFromAccount(testAccount)\n context = {\n algorand,\n algod: transactionLoggerAlgod,\n indexer: indexer,\n kmd: kmd,\n testAccount,\n generateAccount: async (params: GetTestAccountParams) => {\n const account = await getTestAccount(params, algorand)\n algorand.setSignerFromAccount(account)\n return account\n },\n transactionLogger: transactionLogger,\n waitForIndexer: () => transactionLogger.waitForIndexer(indexer),\n waitForIndexerTransaction: (transactionId: string) => runWhenIndexerCaughtUp(() => indexer.lookupTransactionByID(transactionId).do()),\n }\n }\n\n return {\n get context() {\n return context\n },\n get algorand() {\n return algorand\n },\n beforeEach,\n }\n}\n"],"names":[],"mappings":";;;;;;;;AA4EgB,SAAA,eAAe,CAAC,aAAqC,EAAE,MAAmB,EAAA;IACxF,aAAa,GAAG,EAAE,GAAG,aAAa,EAAE,GAAG,MAAM,EAAE,CAAA;AAC/C,IAAA,IAAI,CAAC,aAAa,CAAC,KAAK,IAAI,CAAC,aAAa,CAAC,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE;QACxE,aAAa,GAAG,EAAE,GAAG,aAAa,CAAC,kCAAkC,EAAE,EAAE,GAAG,aAAa,EAAE,CAAA;KAC5F;AAED,IAAA,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,IAAI,aAAa,CAAC,cAAc,CAAC,aAAa,CAAC,WAAY,CAAC,CAAA;AAC7F,IAAA,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,IAAI,aAAa,CAAC,gBAAgB,CAAC,aAAa,CAAC,aAAc,CAAC,CAAA;AACrG,IAAA,MAAM,GAAG,GAAG,aAAa,CAAC,GAAG,IAAI,aAAa,CAAC,YAAY,CAAC,aAAa,CAAC,SAAU,CAAC,CAAA;AACrF,IAAA,IAAI,OAAsC,CAAA;AAC1C,IAAA,IAAI,QAAwB,CAAA;AAE5B,IAAA,MAAM,UAAU,GAAG,YAAW;QAC5B,MAAM,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;AACjC,QAAA,MAAM,iBAAiB,GAAG,IAAI,iBAAiB,EAAE,CAAA;QACjD,MAAM,sBAAsB,GAAG,iBAAiB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;AAC/D,QAAA,QAAQ,GAAG,cAAc,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,sBAAsB,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAA;QACtF,MAAM,WAAW,GAAG,MAAM,cAAc,CAAC,EAAE,YAAY,EAAE,aAAa,EAAE,kBAAkB,IAAI,KAAK,CAAC,EAAE,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,QAAQ,CAAC,CAAA;QACvI,QAAQ,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC,8BAA8B,CAAC,CAAC,CAAC,CAAA;;;QAG5E,IAAI,MAAM,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE;AACtC,YAAA,QAAQ,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAA;SACxC;AACD,QAAA,QAAQ,CAAC,OAAO,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAA;AAClD,QAAA,OAAO,GAAG;YACR,QAAQ;AACR,YAAA,KAAK,EAAE,sBAAsB;AAC7B,YAAA,OAAO,EAAE,OAAO;AAChB,YAAA,GAAG,EAAE,GAAG;YACR,WAAW;AACX,YAAA,eAAe,EAAE,OAAO,MAA4B,KAAI;gBACtD,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;AACtD,gBAAA,QAAQ,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAA;AACtC,gBAAA,OAAO,OAAO,CAAA;aACf;AACD,YAAA,iBAAiB,EAAE,iBAAiB;YACpC,cAAc,EAAE,MAAM,iBAAiB,CAAC,cAAc,CAAC,OAAO,CAAC;YAC/D,yBAAyB,EAAE,CAAC,aAAqB,KAAK,sBAAsB,CAAC,MAAM,OAAO,CAAC,qBAAqB,CAAC,aAAa,CAAC,CAAC,EAAE,EAAE,CAAC;SACtI,CAAA;AACH,KAAC,CAAA;IAED,OAAO;AACL,QAAA,IAAI,OAAO,GAAA;AACT,YAAA,OAAO,OAAO,CAAA;SACf;AACD,QAAA,IAAI,QAAQ,GAAA;AACV,YAAA,OAAO,QAAQ,CAAA;SAChB;QACD,UAAU;KACX,CAAA;AACH;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"indexer.js","sources":["../../../src/testing/indexer.ts"],"sourcesContent":["/**\n * Runs the given indexer call until a 404 error is no longer returned.\n * Tried every 200ms up to 100 times.\n * Very rudimentary implementation designed for automated testing.\n * @example\n * ```typescript\n * const transaction = await runWhenIndexerCaughtUp(() => indexer.lookupTransactionByID(txnId).do())\n * ```\n * @param run The code to run\n * @returns The result (as a promise), or throws if the indexer didn't catch up in time\n */\nexport async function runWhenIndexerCaughtUp<T>(run: () => Promise<T>): Promise<T> {\n let result: T | null = null\n let ok = false\n let tries = 0\n while (!ok) {\n try {\n result = await run()\n ok = true\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (e: any) {\n if (e?.status === 404) {\n tries++\n if (tries > 100) {\n throw e\n }\n await new Promise<void>((resolve) => setTimeout(resolve, 200))\n } else {\n throw e\n }\n }\n }\n\n return result as T\n}\n"],"names":[],"mappings":";;AAAA;;;;;;;;;;AAUG;AACI,eAAe,sBAAsB,CAAI,GAAqB,EAAA;IACnE,IAAI,MAAM,GAAa,IAAI,CAAA;IAC3B,IAAI,EAAE,GAAG,KAAK,CAAA;IACd,IAAI,KAAK,GAAG,CAAC,CAAA;IACb,OAAO,CAAC,EAAE,EAAE;AACV,QAAA,IAAI;AACF,YAAA,MAAM,GAAG,MAAM,GAAG,EAAE,CAAA;YACpB,EAAE,GAAG,IAAI,CAAA;;SAEV;QAAC,OAAO,CAAM,EAAE;AACf,YAAA,IAAI,CAAC,EAAE,MAAM,KAAK,GAAG,EAAE;AACrB,gBAAA,KAAK,EAAE,CAAA;AACP,gBAAA,IAAI,KAAK,GAAG,GAAG,EAAE;AACf,oBAAA,MAAM,CAAC,CAAA;iBACR;AACD,gBAAA,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,KAAK,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAA;aAC/D;iBAAM;AACL,gBAAA,MAAM,CAAC,CAAA;aACR;SACF;KACF;AAED,IAAA,OAAO,MAAW,CAAA;AACpB;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"indexer.mjs","sources":["../../../src/testing/indexer.ts"],"sourcesContent":["/**\n * Runs the given indexer call until a 404 error is no longer returned.\n * Tried every 200ms up to 100 times.\n * Very rudimentary implementation designed for automated testing.\n * @example\n * ```typescript\n * const transaction = await runWhenIndexerCaughtUp(() => indexer.lookupTransactionByID(txnId).do())\n * ```\n * @param run The code to run\n * @returns The result (as a promise), or throws if the indexer didn't catch up in time\n */\nexport async function runWhenIndexerCaughtUp<T>(run: () => Promise<T>): Promise<T> {\n let result: T | null = null\n let ok = false\n let tries = 0\n while (!ok) {\n try {\n result = await run()\n ok = true\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (e: any) {\n if (e?.status === 404) {\n tries++\n if (tries > 100) {\n throw e\n }\n await new Promise<void>((resolve) => setTimeout(resolve, 200))\n } else {\n throw e\n }\n }\n }\n\n return result as T\n}\n"],"names":[],"mappings":"AAAA;;;;;;;;;;AAUG;AACI,eAAe,sBAAsB,CAAI,GAAqB,EAAA;IACnE,IAAI,MAAM,GAAa,IAAI,CAAA;IAC3B,IAAI,EAAE,GAAG,KAAK,CAAA;IACd,IAAI,KAAK,GAAG,CAAC,CAAA;IACb,OAAO,CAAC,EAAE,EAAE;AACV,QAAA,IAAI;AACF,YAAA,MAAM,GAAG,MAAM,GAAG,EAAE,CAAA;YACpB,EAAE,GAAG,IAAI,CAAA;;SAEV;QAAC,OAAO,CAAM,EAAE;AACf,YAAA,IAAI,CAAC,EAAE,MAAM,KAAK,GAAG,EAAE;AACrB,gBAAA,KAAK,EAAE,CAAA;AACP,gBAAA,IAAI,KAAK,GAAG,GAAG,EAAE;AACf,oBAAA,MAAM,CAAC,CAAA;iBACR;AACD,gBAAA,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,KAAK,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAA;aAC/D;iBAAM;AACL,gBAAA,MAAM,CAAC,CAAA;aACR;SACF;KACF;AAED,IAAA,OAAO,MAAW,CAAA;AACpB;;;;"}
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var transaction = require('../transaction/transaction.js');
|
|
4
|
-
|
|
5
3
|
/** Exposes an AlgoKit logger which captures log messages, while wrapping an original logger.
|
|
6
4
|
* This is useful for automated testing.
|
|
7
5
|
*/
|
|
@@ -42,7 +40,13 @@ class TestLogger {
|
|
|
42
40
|
const { transactions: transactionIds, accounts, apps } = config ?? {};
|
|
43
41
|
let snapshot = this.capturedLogs.join('\n');
|
|
44
42
|
transactionIds?.forEach((txn, id) => (snapshot = snapshot.replace(new RegExp(typeof txn === 'string' ? txn : txn.txID(), 'g'), `TXID_${id + 1}`)));
|
|
45
|
-
accounts?.forEach((sender, id) => (snapshot = snapshot.replace(new RegExp(typeof sender === 'string'
|
|
43
|
+
accounts?.forEach((sender, id) => (snapshot = snapshot.replace(new RegExp(typeof sender === 'string'
|
|
44
|
+
? sender
|
|
45
|
+
: 'addr' in sender
|
|
46
|
+
? sender.addr.toString()
|
|
47
|
+
: 'address' in sender
|
|
48
|
+
? sender.address().toString()
|
|
49
|
+
: sender.toString(), 'g'), `ACCOUNT_${id + 1}`)));
|
|
46
50
|
apps?.forEach((app, id) => (snapshot = snapshot.replace(new RegExp(`\\b${app.toString()}\\b(?! bytes)`, 'g'), `APP_${id + 1}`)));
|
|
47
51
|
return snapshot;
|
|
48
52
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-logger.js","sources":["../../../src/testing/test-logger.ts"],"sourcesContent":["import { Logger } from '../types/logging'\nimport { LogSnapshotConfig } from '../types/testing'\n\n/** Exposes an AlgoKit logger which captures log messages, while wrapping an original logger.\n * This is useful for automated testing.\n */\nexport class TestLogger implements Logger {\n private originalLogger: Logger | undefined\n private logs: string[]\n\n /**\n * Create a new test logger that wraps the given logger if provided.\n * @param originalLogger The optional original logger to wrap.\n */\n constructor(originalLogger?: Logger) {\n this.originalLogger = originalLogger\n this.logs = []\n }\n\n /** Returns all logs captured thus far. */\n get capturedLogs(): string[] {\n return this.logs\n }\n\n /** Clears all logs captured so far. */\n clear() {\n this.logs = []\n }\n\n /**\n * Returns a captured log snapshot.\n * This helps ensure that the provided configuration items won't appear\n * with random values in the log snapshot, but rather will get substituted with predictable ids.\n *\n * https://jestjs.io/docs/snapshot-testing#2-tests-should-be-deterministic\n *\n * @example Jest Example\n * ```typescript\n * const logger = new TestLogger()\n * ...\n * expect(logger.getLogSnapshot()).toMatchSnapshot()\n * ```\n * @param config The snapshot configuration\n * @returns The snapshotted logs.\n */\n getLogSnapshot(config?: LogSnapshotConfig) {\n const { transactions: transactionIds, accounts, apps } = config ?? {}\n let snapshot = this.capturedLogs.join('\\n')\n transactionIds?.forEach(\n (txn, id) => (snapshot = snapshot.replace(new RegExp(typeof txn === 'string' ? txn : txn.txID(), 'g'), `TXID_${id + 1}`)),\n )\n accounts?.forEach(\n (sender, id) =>\n (snapshot = snapshot.replace(\n new RegExp(\n typeof sender === 'string'\n ? sender\n : 'addr' in sender\n ? sender.addr.toString()\n : 'address' in sender\n ? sender.address().toString()\n : sender.toString(),\n 'g',\n ),\n `ACCOUNT_${id + 1}`,\n )),\n )\n apps?.forEach((app, id) => (snapshot = snapshot.replace(new RegExp(`\\\\b${app.toString()}\\\\b(?! bytes)`, 'g'), `APP_${id + 1}`)))\n return snapshot\n }\n\n error(message: string, ...optionalParams: unknown[]): void {\n this.originalLogger?.error(message, ...optionalParams)\n this.logs.push(`ERROR: ${message}${optionalParams.length ? ` | ${JSON.stringify(optionalParams)}` : ''}`)\n }\n warn(message: string, ...optionalParams: unknown[]): void {\n this.originalLogger?.warn(message, ...optionalParams)\n this.logs.push(`WARN: ${message}${optionalParams.length ? ` | ${JSON.stringify(optionalParams)}` : ''}`)\n }\n info(message: string, ...optionalParams: unknown[]): void {\n this.originalLogger?.info(message, ...optionalParams)\n this.logs.push(`INFO: ${message}${optionalParams.length ? ` | ${JSON.stringify(optionalParams)}` : ''}`)\n }\n verbose(message: string, ...optionalParams: unknown[]): void {\n this.originalLogger?.verbose(message, ...optionalParams)\n this.logs.push(`VERBOSE: ${message}${optionalParams.length ? ` | ${JSON.stringify(optionalParams)}` : ''}`)\n }\n debug(message: string, ...optionalParams: unknown[]): void {\n this.originalLogger?.debug(message, ...optionalParams)\n this.logs.push(`DEBUG: ${message}${optionalParams.length ? ` | ${JSON.stringify(optionalParams)}` : ''}`)\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
import { getSenderAddress } from '../transaction/transaction.mjs';
|
|
2
|
-
|
|
3
1
|
/** Exposes an AlgoKit logger which captures log messages, while wrapping an original logger.
|
|
4
2
|
* This is useful for automated testing.
|
|
5
3
|
*/
|
|
@@ -40,7 +38,13 @@ class TestLogger {
|
|
|
40
38
|
const { transactions: transactionIds, accounts, apps } = config ?? {};
|
|
41
39
|
let snapshot = this.capturedLogs.join('\n');
|
|
42
40
|
transactionIds?.forEach((txn, id) => (snapshot = snapshot.replace(new RegExp(typeof txn === 'string' ? txn : txn.txID(), 'g'), `TXID_${id + 1}`)));
|
|
43
|
-
accounts?.forEach((sender, id) => (snapshot = snapshot.replace(new RegExp(typeof sender === 'string'
|
|
41
|
+
accounts?.forEach((sender, id) => (snapshot = snapshot.replace(new RegExp(typeof sender === 'string'
|
|
42
|
+
? sender
|
|
43
|
+
: 'addr' in sender
|
|
44
|
+
? sender.addr.toString()
|
|
45
|
+
: 'address' in sender
|
|
46
|
+
? sender.address().toString()
|
|
47
|
+
: sender.toString(), 'g'), `ACCOUNT_${id + 1}`)));
|
|
44
48
|
apps?.forEach((app, id) => (snapshot = snapshot.replace(new RegExp(`\\b${app.toString()}\\b(?! bytes)`, 'g'), `APP_${id + 1}`)));
|
|
45
49
|
return snapshot;
|
|
46
50
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-logger.mjs","sources":["../../../src/testing/test-logger.ts"],"sourcesContent":["import { Logger } from '../types/logging'\nimport { LogSnapshotConfig } from '../types/testing'\n\n/** Exposes an AlgoKit logger which captures log messages, while wrapping an original logger.\n * This is useful for automated testing.\n */\nexport class TestLogger implements Logger {\n private originalLogger: Logger | undefined\n private logs: string[]\n\n /**\n * Create a new test logger that wraps the given logger if provided.\n * @param originalLogger The optional original logger to wrap.\n */\n constructor(originalLogger?: Logger) {\n this.originalLogger = originalLogger\n this.logs = []\n }\n\n /** Returns all logs captured thus far. */\n get capturedLogs(): string[] {\n return this.logs\n }\n\n /** Clears all logs captured so far. */\n clear() {\n this.logs = []\n }\n\n /**\n * Returns a captured log snapshot.\n * This helps ensure that the provided configuration items won't appear\n * with random values in the log snapshot, but rather will get substituted with predictable ids.\n *\n * https://jestjs.io/docs/snapshot-testing#2-tests-should-be-deterministic\n *\n * @example Jest Example\n * ```typescript\n * const logger = new TestLogger()\n * ...\n * expect(logger.getLogSnapshot()).toMatchSnapshot()\n * ```\n * @param config The snapshot configuration\n * @returns The snapshotted logs.\n */\n getLogSnapshot(config?: LogSnapshotConfig) {\n const { transactions: transactionIds, accounts, apps } = config ?? {}\n let snapshot = this.capturedLogs.join('\\n')\n transactionIds?.forEach(\n (txn, id) => (snapshot = snapshot.replace(new RegExp(typeof txn === 'string' ? txn : txn.txID(), 'g'), `TXID_${id + 1}`)),\n )\n accounts?.forEach(\n (sender, id) =>\n (snapshot = snapshot.replace(\n new RegExp(\n typeof sender === 'string'\n ? sender\n : 'addr' in sender\n ? sender.addr.toString()\n : 'address' in sender\n ? sender.address().toString()\n : sender.toString(),\n 'g',\n ),\n `ACCOUNT_${id + 1}`,\n )),\n )\n apps?.forEach((app, id) => (snapshot = snapshot.replace(new RegExp(`\\\\b${app.toString()}\\\\b(?! bytes)`, 'g'), `APP_${id + 1}`)))\n return snapshot\n }\n\n error(message: string, ...optionalParams: unknown[]): void {\n this.originalLogger?.error(message, ...optionalParams)\n this.logs.push(`ERROR: ${message}${optionalParams.length ? ` | ${JSON.stringify(optionalParams)}` : ''}`)\n }\n warn(message: string, ...optionalParams: unknown[]): void {\n this.originalLogger?.warn(message, ...optionalParams)\n this.logs.push(`WARN: ${message}${optionalParams.length ? ` | ${JSON.stringify(optionalParams)}` : ''}`)\n }\n info(message: string, ...optionalParams: unknown[]): void {\n this.originalLogger?.info(message, ...optionalParams)\n this.logs.push(`INFO: ${message}${optionalParams.length ? ` | ${JSON.stringify(optionalParams)}` : ''}`)\n }\n verbose(message: string, ...optionalParams: unknown[]): void {\n this.originalLogger?.verbose(message, ...optionalParams)\n this.logs.push(`VERBOSE: ${message}${optionalParams.length ? ` | ${JSON.stringify(optionalParams)}` : ''}`)\n }\n debug(message: string, ...optionalParams: unknown[]): void {\n this.originalLogger?.debug(message, ...optionalParams)\n this.logs.push(`DEBUG: ${message}${optionalParams.length ? ` | ${JSON.stringify(optionalParams)}` : ''}`)\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transaction-logger.js","sources":["../../../src/testing/transaction-logger.ts"],"sourcesContent":["import algosdk from 'algosdk'\nimport { runWhenIndexerCaughtUp } from './indexer'\nimport Algodv2 = algosdk.Algodv2\nimport decodeSignedTransaction = algosdk.decodeSignedTransaction\nimport Indexer = algosdk.Indexer\n\n/**\n * Allows you to keep track of Algorand transaction IDs by wrapping an `Algodv2` in a proxy.\n * Useful for automated tests.\n */\nexport class TransactionLogger {\n private _sentTransactionIds: string[] = []\n\n /**\n * The list of transaction IDs that has been logged thus far.\n */\n get sentTransactionIds(): Readonly<string[]> {\n return this._sentTransactionIds\n }\n\n /**\n * Clear all logged IDs.\n */\n clear() {\n this._sentTransactionIds = []\n }\n\n /**\n * The method that captures raw transactions and stores the transaction IDs.\n */\n logRawTransaction(signedTransactions: Uint8Array | Uint8Array[]) {\n if (Array.isArray(signedTransactions)) {\n for (const stxn of signedTransactions) {\n const decoded = decodeSignedTransaction(stxn)\n this._sentTransactionIds.push(decoded.txn.txID())\n }\n } else {\n const decoded = decodeSignedTransaction(signedTransactions)\n this._sentTransactionIds.push(decoded.txn.txID())\n }\n }\n\n /** Return a proxy that wraps the given Algodv2 with this transaction logger.\n *\n * @param algod The `Algodv2` to wrap\n * @returns The wrapped `Algodv2`, any transactions sent using this algod instance will be logged by this transaction logger\n */\n capture(algod: Algodv2): Algodv2 {\n return new Proxy<Algodv2>(algod, new TransactionLoggingAlgodv2ProxyHandler(this))\n }\n\n /** Wait until all logged transactions IDs appear in the given `Indexer`. */\n async waitForIndexer(indexer: Indexer) {\n await Promise.all(this._sentTransactionIds.map((txnId) => runWhenIndexerCaughtUp(() => indexer.lookupTransactionByID(txnId).do())))\n }\n}\n\nclass TransactionLoggingAlgodv2ProxyHandler implements ProxyHandler<Algodv2> {\n private transactionLogger: TransactionLogger\n\n constructor(transactionLogger: TransactionLogger) {\n this.transactionLogger = transactionLogger\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n get(target: Algodv2, property: string | symbol, receiver: any) {\n if (property === 'sendRawTransaction') {\n return (stxOrStxs: Uint8Array | Uint8Array[]) => {\n this.transactionLogger.logRawTransaction(stxOrStxs)\n return target[property].call(receiver, stxOrStxs)\n }\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return (target as any)[property]\n }\n}\n"],"names":["indexer","runWhenIndexerCaughtUp"],"mappings":";;;;;AAGA,IAAO,uBAAuB,GAAG,OAAO,CAAC,uBAAuB,CAAA;AAGhE;;;AAGG;MACU,iBAAiB,CAAA;AAA9B,IAAA,WAAA,GAAA;QACU,IAAmB,CAAA,mBAAA,GAAa,EAAE,CAAA;KA4C3C;AA1CC;;AAEG;AACH,IAAA,IAAI,kBAAkB,GAAA;QACpB,OAAO,IAAI,CAAC,mBAAmB,CAAA;KAChC;AAED;;AAEG;IACH,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,mBAAmB,GAAG,EAAE,CAAA;KAC9B;AAED;;AAEG;AACH,IAAA,iBAAiB,CAAC,kBAA6C,EAAA;AAC7D,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,kBAAkB,CAAC,EAAE;AACrC,YAAA,KAAK,MAAM,IAAI,IAAI,kBAAkB,EAAE;AACrC,gBAAA,MAAM,OAAO,GAAG,uBAAuB,CAAC,IAAI,CAAC,CAAA;AAC7C,gBAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAA;aAClD;SACF;aAAM;AACL,YAAA,MAAM,OAAO,GAAG,uBAAuB,CAAC,kBAAkB,CAAC,CAAA;AAC3D,YAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAA;SAClD;KACF;AAED;;;;AAIG;AACH,IAAA,OAAO,CAAC,KAAc,EAAA;QACpB,OAAO,IAAI,KAAK,CAAU,KAAK,EAAE,IAAI,qCAAqC,CAAC,IAAI,CAAC,CAAC,CAAA;KAClF;;IAGD,MAAM,cAAc,CAACA,SAAgB,EAAA;AACnC,QAAA,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,KAAK,KAAKC,8BAAsB,CAAC,MAAMD,SAAO,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAA;KACpI;AACF,CAAA;AAED,MAAM,qCAAqC,CAAA;AAGzC,IAAA,WAAA,CAAY,iBAAoC,EAAA;AAC9C,QAAA,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAA;KAC3C;;AAGD,IAAA,GAAG,CAAC,MAAe,EAAE,QAAyB,EAAE,QAAa,EAAA;AAC3D,QAAA,IAAI,QAAQ,KAAK,oBAAoB,EAAE;YACrC,OAAO,CAAC,SAAoC,KAAI;AAC9C,gBAAA,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAA;gBACnD,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAA;AACnD,aAAC,CAAA;SACF;;AAED,QAAA,OAAQ,MAAc,CAAC,QAAQ,CAAC,CAAA;KACjC;AACF;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transaction-logger.mjs","sources":["../../../src/testing/transaction-logger.ts"],"sourcesContent":["import algosdk from 'algosdk'\nimport { runWhenIndexerCaughtUp } from './indexer'\nimport Algodv2 = algosdk.Algodv2\nimport decodeSignedTransaction = algosdk.decodeSignedTransaction\nimport Indexer = algosdk.Indexer\n\n/**\n * Allows you to keep track of Algorand transaction IDs by wrapping an `Algodv2` in a proxy.\n * Useful for automated tests.\n */\nexport class TransactionLogger {\n private _sentTransactionIds: string[] = []\n\n /**\n * The list of transaction IDs that has been logged thus far.\n */\n get sentTransactionIds(): Readonly<string[]> {\n return this._sentTransactionIds\n }\n\n /**\n * Clear all logged IDs.\n */\n clear() {\n this._sentTransactionIds = []\n }\n\n /**\n * The method that captures raw transactions and stores the transaction IDs.\n */\n logRawTransaction(signedTransactions: Uint8Array | Uint8Array[]) {\n if (Array.isArray(signedTransactions)) {\n for (const stxn of signedTransactions) {\n const decoded = decodeSignedTransaction(stxn)\n this._sentTransactionIds.push(decoded.txn.txID())\n }\n } else {\n const decoded = decodeSignedTransaction(signedTransactions)\n this._sentTransactionIds.push(decoded.txn.txID())\n }\n }\n\n /** Return a proxy that wraps the given Algodv2 with this transaction logger.\n *\n * @param algod The `Algodv2` to wrap\n * @returns The wrapped `Algodv2`, any transactions sent using this algod instance will be logged by this transaction logger\n */\n capture(algod: Algodv2): Algodv2 {\n return new Proxy<Algodv2>(algod, new TransactionLoggingAlgodv2ProxyHandler(this))\n }\n\n /** Wait until all logged transactions IDs appear in the given `Indexer`. */\n async waitForIndexer(indexer: Indexer) {\n await Promise.all(this._sentTransactionIds.map((txnId) => runWhenIndexerCaughtUp(() => indexer.lookupTransactionByID(txnId).do())))\n }\n}\n\nclass TransactionLoggingAlgodv2ProxyHandler implements ProxyHandler<Algodv2> {\n private transactionLogger: TransactionLogger\n\n constructor(transactionLogger: TransactionLogger) {\n this.transactionLogger = transactionLogger\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n get(target: Algodv2, property: string | symbol, receiver: any) {\n if (property === 'sendRawTransaction') {\n return (stxOrStxs: Uint8Array | Uint8Array[]) => {\n this.transactionLogger.logRawTransaction(stxOrStxs)\n return target[property].call(receiver, stxOrStxs)\n }\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return (target as any)[property]\n }\n}\n"],"names":[],"mappings":";;;AAGA,IAAO,uBAAuB,GAAG,OAAO,CAAC,uBAAuB,CAAA;AAGhE;;;AAGG;MACU,iBAAiB,CAAA;AAA9B,IAAA,WAAA,GAAA;QACU,IAAmB,CAAA,mBAAA,GAAa,EAAE,CAAA;KA4C3C;AA1CC;;AAEG;AACH,IAAA,IAAI,kBAAkB,GAAA;QACpB,OAAO,IAAI,CAAC,mBAAmB,CAAA;KAChC;AAED;;AAEG;IACH,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,mBAAmB,GAAG,EAAE,CAAA;KAC9B;AAED;;AAEG;AACH,IAAA,iBAAiB,CAAC,kBAA6C,EAAA;AAC7D,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,kBAAkB,CAAC,EAAE;AACrC,YAAA,KAAK,MAAM,IAAI,IAAI,kBAAkB,EAAE;AACrC,gBAAA,MAAM,OAAO,GAAG,uBAAuB,CAAC,IAAI,CAAC,CAAA;AAC7C,gBAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAA;aAClD;SACF;aAAM;AACL,YAAA,MAAM,OAAO,GAAG,uBAAuB,CAAC,kBAAkB,CAAC,CAAA;AAC3D,YAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAA;SAClD;KACF;AAED;;;;AAIG;AACH,IAAA,OAAO,CAAC,KAAc,EAAA;QACpB,OAAO,IAAI,KAAK,CAAU,KAAK,EAAE,IAAI,qCAAqC,CAAC,IAAI,CAAC,CAAC,CAAA;KAClF;;IAGD,MAAM,cAAc,CAAC,OAAgB,EAAA;AACnC,QAAA,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,sBAAsB,CAAC,MAAM,OAAO,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAA;KACpI;AACF,CAAA;AAED,MAAM,qCAAqC,CAAA;AAGzC,IAAA,WAAA,CAAY,iBAAoC,EAAA;AAC9C,QAAA,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAA;KAC3C;;AAGD,IAAA,GAAG,CAAC,MAAe,EAAE,QAAyB,EAAE,QAAa,EAAA;AAC3D,QAAA,IAAI,QAAQ,KAAK,oBAAoB,EAAE;YACrC,OAAO,CAAC,SAAoC,KAAI;AAC9C,gBAAA,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAA;gBACnD,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAA;AACnD,aAAC,CAAA;SACF;;AAED,QAAA,OAAQ,MAAc,CAAC,QAAQ,CAAC,CAAA;KACjC;AACF;;;;"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var algosdk = require('algosdk');
|
|
4
|
+
var types_algorandClientTransactionCreator = require('../../types/algorand-client-transaction-creator.js');
|
|
5
|
+
var types_algorandClientTransactionSender = require('../../types/algorand-client-transaction-sender.js');
|
|
6
|
+
var types_appManager = require('../../types/app-manager.js');
|
|
7
|
+
var types_assetManager = require('../../types/asset-manager.js');
|
|
8
|
+
var types_composer = require('../../types/composer.js');
|
|
9
|
+
var transaction = require('./transaction.js');
|
|
10
|
+
|
|
11
|
+
var ABIMethod = algosdk.ABIMethod;
|
|
12
|
+
/** @deprecated Bridges between legacy `sendTransaction` behaviour and new `AlgorandClient` behaviour. */
|
|
13
|
+
async function legacySendTransactionBridge(algod, from, sendParams, params, txn, send, suggestedParams) {
|
|
14
|
+
const appManager = new types_appManager.AppManager(algod);
|
|
15
|
+
const newGroup = () => new types_composer.TransactionComposer({
|
|
16
|
+
algod,
|
|
17
|
+
getSigner: () => transaction.getSenderTransactionSigner(from),
|
|
18
|
+
getSuggestedParams: async () => (suggestedParams ? { ...suggestedParams } : await algod.getTransactionParams().do()),
|
|
19
|
+
appManager,
|
|
20
|
+
});
|
|
21
|
+
const transactionSender = new types_algorandClientTransactionSender.AlgorandClientTransactionSender(newGroup, new types_assetManager.AssetManager(algod, newGroup), appManager);
|
|
22
|
+
const transactionCreator = new types_algorandClientTransactionCreator.AlgorandClientTransactionCreator(newGroup);
|
|
23
|
+
if (sendParams.fee) {
|
|
24
|
+
params.staticFee = sendParams.fee;
|
|
25
|
+
}
|
|
26
|
+
if (sendParams.maxFee) {
|
|
27
|
+
params.maxFee = sendParams.maxFee;
|
|
28
|
+
}
|
|
29
|
+
if (sendParams.atc || sendParams.skipSending) {
|
|
30
|
+
const transaction$1 = await txn(transactionCreator)(params);
|
|
31
|
+
const txns = 'transactions' in transaction$1 ? transaction$1.transactions : [transaction$1];
|
|
32
|
+
if (sendParams.atc) {
|
|
33
|
+
const baseIndex = sendParams.atc.count();
|
|
34
|
+
txns
|
|
35
|
+
.map((txn, i) => ({
|
|
36
|
+
txn,
|
|
37
|
+
signer: 'signers' in transaction$1 ? (transaction$1.signers.get(i) ?? transaction.getSenderTransactionSigner(from)) : transaction.getSenderTransactionSigner(from),
|
|
38
|
+
}))
|
|
39
|
+
.forEach((t) => sendParams.atc.addTransaction(t));
|
|
40
|
+
// Populate ATC with method calls
|
|
41
|
+
if ('transactions' in transaction$1) {
|
|
42
|
+
transaction$1.methodCalls.forEach((m, i) => sendParams.atc['methodCalls'].set(i + baseIndex, m));
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return { transaction: txns.at(-1), transactions: txns };
|
|
46
|
+
}
|
|
47
|
+
return { ...(await send(transactionSender)({ ...sendParams, ...params })) };
|
|
48
|
+
}
|
|
49
|
+
/** @deprecated Bridges between legacy `sendTransaction` behaviour for app transactions and new `AlgorandClient` behaviour. */
|
|
50
|
+
async function legacySendAppTransactionBridge(algod, from, appArgs, sendParams, params, txn, send, suggestedParams) {
|
|
51
|
+
const encoder = new TextEncoder();
|
|
52
|
+
const paramsWithAppArgs = {
|
|
53
|
+
...params,
|
|
54
|
+
accountReferences: appArgs?.accounts?.map((a) => (typeof a === 'string' ? a : algosdk.encodeAddress(a.publicKey))),
|
|
55
|
+
appReferences: appArgs?.apps?.map((a) => BigInt(a)),
|
|
56
|
+
assetReferences: appArgs?.assets?.map((a) => BigInt(a)),
|
|
57
|
+
boxReferences: appArgs?.boxes?.map(_getBoxReference)?.map((r) => ({ appId: BigInt(r.appIndex), name: r.name })),
|
|
58
|
+
lease: appArgs?.lease,
|
|
59
|
+
rekeyTo: appArgs?.rekeyTo ? transaction.getSenderAddress(appArgs?.rekeyTo) : undefined,
|
|
60
|
+
args: appArgs
|
|
61
|
+
? 'methodArgs' in appArgs
|
|
62
|
+
? (await _getAppArgsForABICall(appArgs, from)).methodArgs
|
|
63
|
+
: appArgs?.appArgs?.map((a) => (typeof a === 'string' ? encoder.encode(a) : a))
|
|
64
|
+
: undefined,
|
|
65
|
+
note: transaction.encodeTransactionNote(sendParams?.note),
|
|
66
|
+
};
|
|
67
|
+
return await legacySendTransactionBridge(algod, from, sendParams, paramsWithAppArgs, txn, send, suggestedParams);
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* @deprecated
|
|
71
|
+
*/
|
|
72
|
+
async function _getAppArgsForABICall(args, from) {
|
|
73
|
+
const signer = transaction.getSenderTransactionSigner(from);
|
|
74
|
+
const methodArgs = await Promise.all(('methodArgs' in args ? args.methodArgs : args)?.map(async (a, index) => {
|
|
75
|
+
if (a === undefined) {
|
|
76
|
+
throw new Error(`Argument at position ${index} does not have a value`);
|
|
77
|
+
}
|
|
78
|
+
if (typeof a !== 'object') {
|
|
79
|
+
return a;
|
|
80
|
+
}
|
|
81
|
+
// Handle the various forms of transactions to wrangle them for ATC
|
|
82
|
+
return 'txn' in a
|
|
83
|
+
? a
|
|
84
|
+
: a instanceof Promise
|
|
85
|
+
? { txn: (await a).transaction, signer }
|
|
86
|
+
: 'transaction' in a
|
|
87
|
+
? { txn: a.transaction, signer: 'signer' in a ? transaction.getSenderTransactionSigner(a.signer) : signer }
|
|
88
|
+
: 'txID' in a
|
|
89
|
+
? { txn: a, signer }
|
|
90
|
+
: a;
|
|
91
|
+
}));
|
|
92
|
+
return {
|
|
93
|
+
method: 'txnCount' in args.method ? args.method : new ABIMethod(args.method),
|
|
94
|
+
sender: transaction.getSenderAddress(from),
|
|
95
|
+
signer: signer,
|
|
96
|
+
boxes: args.boxes?.map(_getBoxReference),
|
|
97
|
+
lease: transaction.encodeLease(args.lease),
|
|
98
|
+
appForeignApps: args.apps,
|
|
99
|
+
appForeignAssets: args.assets,
|
|
100
|
+
appAccounts: args.accounts?.map(_getAccountAddress),
|
|
101
|
+
methodArgs: methodArgs,
|
|
102
|
+
rekeyTo: args?.rekeyTo ? (typeof args.rekeyTo === 'string' ? args.rekeyTo : transaction.getSenderAddress(args.rekeyTo)) : undefined,
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
function _getAccountAddress(account) {
|
|
106
|
+
return typeof account === 'string' ? account : algosdk.encodeAddress(account.publicKey);
|
|
107
|
+
}
|
|
108
|
+
/** @deprecated */
|
|
109
|
+
function _getBoxReference(box) {
|
|
110
|
+
const encoder = new TextEncoder();
|
|
111
|
+
if (typeof box === 'object' && 'appIndex' in box) {
|
|
112
|
+
return box;
|
|
113
|
+
}
|
|
114
|
+
const ref = typeof box === 'object' && 'appId' in box ? box : { appId: 0, name: box };
|
|
115
|
+
return {
|
|
116
|
+
appIndex: ref.appId,
|
|
117
|
+
name: typeof ref.name === 'string'
|
|
118
|
+
? encoder.encode(ref.name)
|
|
119
|
+
: 'length' in ref.name
|
|
120
|
+
? ref.name
|
|
121
|
+
: algosdk.decodeAddress(transaction.getSenderAddress(ref.name)).publicKey,
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
exports._getAppArgsForABICall = _getAppArgsForABICall;
|
|
126
|
+
exports._getBoxReference = _getBoxReference;
|
|
127
|
+
exports.legacySendAppTransactionBridge = legacySendAppTransactionBridge;
|
|
128
|
+
exports.legacySendTransactionBridge = legacySendTransactionBridge;
|
|
129
|
+
//# sourceMappingURL=legacy-bridge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"legacy-bridge.js","sources":["../../../src/transaction/legacy-bridge.ts"],"sourcesContent":["import algosdk from 'algosdk'\nimport { AlgorandClientTransactionCreator } from '../types/algorand-client-transaction-creator'\nimport { AlgorandClientTransactionSender } from '../types/algorand-client-transaction-sender'\nimport { ABIAppCallArgs, BoxIdentifier as LegacyBoxIdentifier, BoxReference as LegacyBoxReference, RawAppCallArgs } from '../types/app'\nimport { AppManager, BoxReference } from '../types/app-manager'\nimport { AssetManager } from '../types/asset-manager'\nimport {\n AppCallMethodCall,\n AppCallParams,\n AppCreateMethodCall,\n AppCreateParams,\n AppDeleteMethodCall,\n AppDeleteParams,\n AppUpdateMethodCall,\n AppUpdateParams,\n BuiltTransactions,\n CommonTransactionParams,\n TransactionComposer,\n} from '../types/composer'\nimport {\n SendParams,\n SendSingleTransactionResult,\n SendTransactionFrom,\n SendTransactionParams,\n SendTransactionResult,\n TransactionNote,\n} from '../types/transaction'\nimport { encodeLease, encodeTransactionNote, getSenderAddress, getSenderTransactionSigner } from './transaction'\nimport Algodv2 = algosdk.Algodv2\nimport Transaction = algosdk.Transaction\nimport ABIMethod = algosdk.ABIMethod\n\n/** @deprecated Bridges between legacy `sendTransaction` behaviour and new `AlgorandClient` behaviour. */\nexport async function legacySendTransactionBridge<T extends CommonTransactionParams, TResult extends SendSingleTransactionResult>(\n algod: Algodv2,\n from: SendTransactionFrom,\n sendParams: SendTransactionParams,\n params: T,\n txn:\n | ((c: AlgorandClientTransactionCreator) => (params: T) => Promise<Transaction>)\n | ((c: AlgorandClientTransactionCreator) => (params: T) => Promise<BuiltTransactions>),\n send: (c: AlgorandClientTransactionSender) => (params: T & SendParams) => Promise<TResult>,\n suggestedParams?: algosdk.SuggestedParams,\n): Promise<(SendTransactionResult | TResult) & { transactions: Transaction[] }> {\n const appManager = new AppManager(algod)\n const newGroup = () =>\n new TransactionComposer({\n algod,\n getSigner: () => getSenderTransactionSigner(from),\n getSuggestedParams: async () => (suggestedParams ? { ...suggestedParams } : await algod.getTransactionParams().do()),\n appManager,\n })\n const transactionSender = new AlgorandClientTransactionSender(newGroup, new AssetManager(algod, newGroup), appManager)\n const transactionCreator = new AlgorandClientTransactionCreator(newGroup)\n\n if (sendParams.fee) {\n params.staticFee = sendParams.fee\n }\n\n if (sendParams.maxFee) {\n params.maxFee = sendParams.maxFee\n }\n\n if (sendParams.atc || sendParams.skipSending) {\n const transaction = await txn(transactionCreator)(params)\n const txns = 'transactions' in transaction ? transaction.transactions : [transaction]\n if (sendParams.atc) {\n const baseIndex = sendParams.atc.count()\n txns\n .map((txn, i) => ({\n txn,\n signer:\n 'signers' in transaction ? (transaction.signers.get(i) ?? getSenderTransactionSigner(from)) : getSenderTransactionSigner(from),\n }))\n .forEach((t) => sendParams.atc!.addTransaction(t))\n // Populate ATC with method calls\n if ('transactions' in transaction) {\n transaction.methodCalls.forEach((m, i) => sendParams.atc!['methodCalls'].set(i + baseIndex, m))\n }\n }\n return { transaction: txns.at(-1)!, transactions: txns }\n }\n\n return { ...(await send(transactionSender)({ ...sendParams, ...params })) }\n}\n\n/** @deprecated Bridges between legacy `sendTransaction` behaviour for app transactions and new `AlgorandClient` behaviour. */\nexport async function legacySendAppTransactionBridge<\n T extends\n | AppCreateParams\n | AppUpdateParams\n | AppDeleteParams\n | AppCallParams\n | AppCreateMethodCall\n | AppUpdateMethodCall\n | AppDeleteMethodCall\n | AppCallMethodCall,\n TResult extends SendSingleTransactionResult,\n>(\n algod: Algodv2,\n from: SendTransactionFrom,\n appArgs: RawAppCallArgs | ABIAppCallArgs | undefined,\n sendParams: SendTransactionParams & { note?: TransactionNote },\n params: Omit<T, 'accountReferences' | 'appReferences' | 'assetReferences' | 'boxReferences' | 'args' | 'lease' | 'rekeyTo' | 'note'>,\n txn:\n | ((c: AlgorandClientTransactionCreator) => (params: T) => Promise<Transaction>)\n | ((c: AlgorandClientTransactionCreator) => (params: T) => Promise<BuiltTransactions>),\n send: (c: AlgorandClientTransactionSender) => (params: T & SendParams) => Promise<TResult>,\n suggestedParams?: algosdk.SuggestedParams,\n): Promise<(SendTransactionResult | TResult) & { transactions: Transaction[] }> {\n const encoder = new TextEncoder()\n\n const paramsWithAppArgs = {\n ...params,\n accountReferences: appArgs?.accounts?.map((a) => (typeof a === 'string' ? a : algosdk.encodeAddress(a.publicKey))),\n appReferences: appArgs?.apps?.map((a) => BigInt(a)),\n assetReferences: appArgs?.assets?.map((a) => BigInt(a)),\n boxReferences: appArgs?.boxes?.map(_getBoxReference)?.map((r) => ({ appId: BigInt(r.appIndex), name: r.name }) satisfies BoxReference),\n lease: appArgs?.lease,\n rekeyTo: appArgs?.rekeyTo ? getSenderAddress(appArgs?.rekeyTo) : undefined,\n args: appArgs\n ? 'methodArgs' in appArgs\n ? (await _getAppArgsForABICall(appArgs, from)).methodArgs\n : appArgs?.appArgs?.map((a) => (typeof a === 'string' ? encoder.encode(a) : a))\n : undefined,\n note: encodeTransactionNote(sendParams?.note),\n } as T\n\n return await legacySendTransactionBridge(algod, from, sendParams, paramsWithAppArgs, txn, send, suggestedParams)\n}\n\n/**\n * @deprecated\n */\nexport async function _getAppArgsForABICall(args: ABIAppCallArgs, from: SendTransactionFrom) {\n const signer = getSenderTransactionSigner(from)\n const methodArgs = await Promise.all(\n ('methodArgs' in args ? args.methodArgs : args)?.map(async (a, index) => {\n if (a === undefined) {\n throw new Error(`Argument at position ${index} does not have a value`)\n }\n if (typeof a !== 'object') {\n return a\n }\n // Handle the various forms of transactions to wrangle them for ATC\n return 'txn' in a\n ? a\n : a instanceof Promise\n ? { txn: (await a).transaction, signer }\n : 'transaction' in a\n ? { txn: a.transaction, signer: 'signer' in a ? getSenderTransactionSigner(a.signer) : signer }\n : 'txID' in a\n ? { txn: a, signer }\n : a\n }),\n )\n return {\n method: 'txnCount' in args.method ? args.method : new ABIMethod(args.method),\n sender: getSenderAddress(from),\n signer: signer,\n boxes: args.boxes?.map(_getBoxReference),\n lease: encodeLease(args.lease),\n appForeignApps: args.apps,\n appForeignAssets: args.assets,\n appAccounts: args.accounts?.map(_getAccountAddress),\n methodArgs: methodArgs,\n rekeyTo: args?.rekeyTo ? (typeof args.rekeyTo === 'string' ? args.rekeyTo : getSenderAddress(args.rekeyTo)) : undefined,\n }\n}\n\nfunction _getAccountAddress(account: string | algosdk.Address) {\n return typeof account === 'string' ? account : algosdk.encodeAddress(account.publicKey)\n}\n\n/** @deprecated */\nexport function _getBoxReference(box: LegacyBoxIdentifier | LegacyBoxReference | algosdk.BoxReference): algosdk.BoxReference {\n const encoder = new TextEncoder()\n\n if (typeof box === 'object' && 'appIndex' in box) {\n return box\n }\n\n const ref = typeof box === 'object' && 'appId' in box ? box : { appId: 0, name: box }\n return {\n appIndex: ref.appId,\n name:\n typeof ref.name === 'string'\n ? encoder.encode(ref.name)\n : 'length' in ref.name\n ? ref.name\n : algosdk.decodeAddress(getSenderAddress(ref.name)).publicKey,\n } as algosdk.BoxReference\n}\n"],"names":["AppManager","TransactionComposer","getSenderTransactionSigner","AlgorandClientTransactionSender","AssetManager","AlgorandClientTransactionCreator","transaction","getSenderAddress","encodeTransactionNote","encodeLease"],"mappings":"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"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import algosdk from 'algosdk';
|
|
2
|
+
import { AlgorandClientTransactionCreator } from '../../types/algorand-client-transaction-creator.mjs';
|
|
3
|
+
import { AlgorandClientTransactionSender } from '../../types/algorand-client-transaction-sender.mjs';
|
|
4
|
+
import { AppManager } from '../../types/app-manager.mjs';
|
|
5
|
+
import { AssetManager } from '../../types/asset-manager.mjs';
|
|
6
|
+
import { TransactionComposer } from '../../types/composer.mjs';
|
|
7
|
+
import { getSenderTransactionSigner, getSenderAddress, encodeTransactionNote, encodeLease } from './transaction.mjs';
|
|
8
|
+
|
|
9
|
+
var ABIMethod = algosdk.ABIMethod;
|
|
10
|
+
/** @deprecated Bridges between legacy `sendTransaction` behaviour and new `AlgorandClient` behaviour. */
|
|
11
|
+
async function legacySendTransactionBridge(algod, from, sendParams, params, txn, send, suggestedParams) {
|
|
12
|
+
const appManager = new AppManager(algod);
|
|
13
|
+
const newGroup = () => new TransactionComposer({
|
|
14
|
+
algod,
|
|
15
|
+
getSigner: () => getSenderTransactionSigner(from),
|
|
16
|
+
getSuggestedParams: async () => (suggestedParams ? { ...suggestedParams } : await algod.getTransactionParams().do()),
|
|
17
|
+
appManager,
|
|
18
|
+
});
|
|
19
|
+
const transactionSender = new AlgorandClientTransactionSender(newGroup, new AssetManager(algod, newGroup), appManager);
|
|
20
|
+
const transactionCreator = new AlgorandClientTransactionCreator(newGroup);
|
|
21
|
+
if (sendParams.fee) {
|
|
22
|
+
params.staticFee = sendParams.fee;
|
|
23
|
+
}
|
|
24
|
+
if (sendParams.maxFee) {
|
|
25
|
+
params.maxFee = sendParams.maxFee;
|
|
26
|
+
}
|
|
27
|
+
if (sendParams.atc || sendParams.skipSending) {
|
|
28
|
+
const transaction = await txn(transactionCreator)(params);
|
|
29
|
+
const txns = 'transactions' in transaction ? transaction.transactions : [transaction];
|
|
30
|
+
if (sendParams.atc) {
|
|
31
|
+
const baseIndex = sendParams.atc.count();
|
|
32
|
+
txns
|
|
33
|
+
.map((txn, i) => ({
|
|
34
|
+
txn,
|
|
35
|
+
signer: 'signers' in transaction ? (transaction.signers.get(i) ?? getSenderTransactionSigner(from)) : getSenderTransactionSigner(from),
|
|
36
|
+
}))
|
|
37
|
+
.forEach((t) => sendParams.atc.addTransaction(t));
|
|
38
|
+
// Populate ATC with method calls
|
|
39
|
+
if ('transactions' in transaction) {
|
|
40
|
+
transaction.methodCalls.forEach((m, i) => sendParams.atc['methodCalls'].set(i + baseIndex, m));
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return { transaction: txns.at(-1), transactions: txns };
|
|
44
|
+
}
|
|
45
|
+
return { ...(await send(transactionSender)({ ...sendParams, ...params })) };
|
|
46
|
+
}
|
|
47
|
+
/** @deprecated Bridges between legacy `sendTransaction` behaviour for app transactions and new `AlgorandClient` behaviour. */
|
|
48
|
+
async function legacySendAppTransactionBridge(algod, from, appArgs, sendParams, params, txn, send, suggestedParams) {
|
|
49
|
+
const encoder = new TextEncoder();
|
|
50
|
+
const paramsWithAppArgs = {
|
|
51
|
+
...params,
|
|
52
|
+
accountReferences: appArgs?.accounts?.map((a) => (typeof a === 'string' ? a : algosdk.encodeAddress(a.publicKey))),
|
|
53
|
+
appReferences: appArgs?.apps?.map((a) => BigInt(a)),
|
|
54
|
+
assetReferences: appArgs?.assets?.map((a) => BigInt(a)),
|
|
55
|
+
boxReferences: appArgs?.boxes?.map(_getBoxReference)?.map((r) => ({ appId: BigInt(r.appIndex), name: r.name })),
|
|
56
|
+
lease: appArgs?.lease,
|
|
57
|
+
rekeyTo: appArgs?.rekeyTo ? getSenderAddress(appArgs?.rekeyTo) : undefined,
|
|
58
|
+
args: appArgs
|
|
59
|
+
? 'methodArgs' in appArgs
|
|
60
|
+
? (await _getAppArgsForABICall(appArgs, from)).methodArgs
|
|
61
|
+
: appArgs?.appArgs?.map((a) => (typeof a === 'string' ? encoder.encode(a) : a))
|
|
62
|
+
: undefined,
|
|
63
|
+
note: encodeTransactionNote(sendParams?.note),
|
|
64
|
+
};
|
|
65
|
+
return await legacySendTransactionBridge(algod, from, sendParams, paramsWithAppArgs, txn, send, suggestedParams);
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* @deprecated
|
|
69
|
+
*/
|
|
70
|
+
async function _getAppArgsForABICall(args, from) {
|
|
71
|
+
const signer = getSenderTransactionSigner(from);
|
|
72
|
+
const methodArgs = await Promise.all(('methodArgs' in args ? args.methodArgs : args)?.map(async (a, index) => {
|
|
73
|
+
if (a === undefined) {
|
|
74
|
+
throw new Error(`Argument at position ${index} does not have a value`);
|
|
75
|
+
}
|
|
76
|
+
if (typeof a !== 'object') {
|
|
77
|
+
return a;
|
|
78
|
+
}
|
|
79
|
+
// Handle the various forms of transactions to wrangle them for ATC
|
|
80
|
+
return 'txn' in a
|
|
81
|
+
? a
|
|
82
|
+
: a instanceof Promise
|
|
83
|
+
? { txn: (await a).transaction, signer }
|
|
84
|
+
: 'transaction' in a
|
|
85
|
+
? { txn: a.transaction, signer: 'signer' in a ? getSenderTransactionSigner(a.signer) : signer }
|
|
86
|
+
: 'txID' in a
|
|
87
|
+
? { txn: a, signer }
|
|
88
|
+
: a;
|
|
89
|
+
}));
|
|
90
|
+
return {
|
|
91
|
+
method: 'txnCount' in args.method ? args.method : new ABIMethod(args.method),
|
|
92
|
+
sender: getSenderAddress(from),
|
|
93
|
+
signer: signer,
|
|
94
|
+
boxes: args.boxes?.map(_getBoxReference),
|
|
95
|
+
lease: encodeLease(args.lease),
|
|
96
|
+
appForeignApps: args.apps,
|
|
97
|
+
appForeignAssets: args.assets,
|
|
98
|
+
appAccounts: args.accounts?.map(_getAccountAddress),
|
|
99
|
+
methodArgs: methodArgs,
|
|
100
|
+
rekeyTo: args?.rekeyTo ? (typeof args.rekeyTo === 'string' ? args.rekeyTo : getSenderAddress(args.rekeyTo)) : undefined,
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
function _getAccountAddress(account) {
|
|
104
|
+
return typeof account === 'string' ? account : algosdk.encodeAddress(account.publicKey);
|
|
105
|
+
}
|
|
106
|
+
/** @deprecated */
|
|
107
|
+
function _getBoxReference(box) {
|
|
108
|
+
const encoder = new TextEncoder();
|
|
109
|
+
if (typeof box === 'object' && 'appIndex' in box) {
|
|
110
|
+
return box;
|
|
111
|
+
}
|
|
112
|
+
const ref = typeof box === 'object' && 'appId' in box ? box : { appId: 0, name: box };
|
|
113
|
+
return {
|
|
114
|
+
appIndex: ref.appId,
|
|
115
|
+
name: typeof ref.name === 'string'
|
|
116
|
+
? encoder.encode(ref.name)
|
|
117
|
+
: 'length' in ref.name
|
|
118
|
+
? ref.name
|
|
119
|
+
: algosdk.decodeAddress(getSenderAddress(ref.name)).publicKey,
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
export { _getAppArgsForABICall, _getBoxReference, legacySendAppTransactionBridge, legacySendTransactionBridge };
|
|
124
|
+
//# sourceMappingURL=legacy-bridge.mjs.map
|