@algorandfoundation/algokit-utils 7.0.0-beta.1 → 7.0.0-beta.11
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/README.md +3 -25
- package/account/account.d.ts +8 -9
- package/account/account.js +7 -7
- package/account/account.js.map +1 -1
- package/account/account.mjs +7 -7
- package/account/account.mjs.map +1 -1
- package/account/get-account-config-from-environment.d.ts +0 -1
- package/account/get-account-config-from-environment.js.map +1 -1
- package/account/get-account-config-from-environment.mjs.map +1 -1
- package/account/get-account.d.ts +2 -3
- package/account/get-account.js +1 -1
- package/account/get-account.js.map +1 -1
- package/account/get-account.mjs +1 -1
- package/account/get-account.mjs.map +1 -1
- package/account/get-dispenser-account.d.ts +1 -2
- package/account/get-dispenser-account.js +1 -1
- package/account/get-dispenser-account.js.map +1 -1
- package/account/get-dispenser-account.mjs +1 -1
- package/account/get-dispenser-account.mjs.map +1 -1
- package/account/index.d.ts +0 -1
- package/account/mnemonic-account.d.ts +1 -2
- package/account/mnemonic-account.js +1 -1
- package/account/mnemonic-account.js.map +1 -1
- package/account/mnemonic-account.mjs +1 -1
- package/account/mnemonic-account.mjs.map +1 -1
- package/amount.d.ts +14 -5
- package/amount.js +6 -0
- package/amount.js.map +1 -1
- package/amount.mjs +6 -0
- package/amount.mjs.map +1 -1
- package/app-client.d.ts +15 -1
- package/app-client.js +15 -0
- package/app-client.js.map +1 -1
- package/app-client.mjs +15 -0
- package/app-client.mjs.map +1 -1
- package/app-deploy.d.ts +18 -2
- package/app-deploy.js +140 -333
- package/app-deploy.js.map +1 -1
- package/app-deploy.mjs +143 -336
- package/app-deploy.mjs.map +1 -1
- package/app.d.ts +39 -3
- package/app.js +116 -369
- package/app.js.map +1 -1
- package/app.mjs +117 -370
- package/app.mjs.map +1 -1
- package/asset.d.ts +5 -6
- package/asset.js +5 -8
- package/asset.js.map +1 -1
- package/asset.mjs +5 -8
- package/asset.mjs.map +1 -1
- package/config.d.ts +0 -1
- package/config.js.map +1 -1
- package/config.mjs.map +1 -1
- package/debugging/debugging.d.ts +3 -5
- package/debugging/debugging.js +4 -128
- package/debugging/debugging.js.map +1 -1
- package/debugging/debugging.mjs +4 -109
- package/debugging/debugging.mjs.map +1 -1
- package/debugging/index.d.ts +0 -2
- package/dispenser-client.d.ts +0 -1
- package/dispenser-client.js.map +1 -1
- package/dispenser-client.mjs.map +1 -1
- package/index.d.ts +4 -4
- package/index.js +31 -26
- package/index.js.map +1 -1
- package/index.mjs +4 -4
- package/indexer-lookup.d.ts +0 -1
- package/indexer-lookup.js.map +1 -1
- package/indexer-lookup.mjs.map +1 -1
- package/localnet/get-kmd-wallet-account.d.ts +1 -2
- package/localnet/get-kmd-wallet-account.js +1 -1
- package/localnet/get-kmd-wallet-account.js.map +1 -1
- package/localnet/get-kmd-wallet-account.mjs +1 -1
- package/localnet/get-kmd-wallet-account.mjs.map +1 -1
- package/localnet/get-localnet-dispenser-account.d.ts +1 -2
- package/localnet/get-localnet-dispenser-account.js +1 -1
- package/localnet/get-localnet-dispenser-account.js.map +1 -1
- package/localnet/get-localnet-dispenser-account.mjs +1 -1
- package/localnet/get-localnet-dispenser-account.mjs.map +1 -1
- package/localnet/get-or-create-kmd-wallet-account.d.ts +1 -2
- package/localnet/get-or-create-kmd-wallet-account.js +1 -1
- package/localnet/get-or-create-kmd-wallet-account.js.map +1 -1
- package/localnet/get-or-create-kmd-wallet-account.mjs +1 -1
- package/localnet/get-or-create-kmd-wallet-account.mjs.map +1 -1
- package/localnet/index.d.ts +0 -1
- package/localnet/is-localnet.d.ts +1 -2
- package/localnet/is-localnet.js +1 -1
- package/localnet/is-localnet.js.map +1 -1
- package/localnet/is-localnet.mjs +1 -1
- package/localnet/is-localnet.mjs.map +1 -1
- package/network-client.d.ts +2 -3
- package/network-client.js +2 -2
- package/network-client.js.map +1 -1
- package/network-client.mjs +2 -2
- package/network-client.mjs.map +1 -1
- package/package.json +1 -1
- package/testing/_asset.d.ts +0 -1
- package/testing/account.d.ts +0 -1
- package/testing/account.js.map +1 -1
- package/testing/account.mjs.map +1 -1
- package/testing/fixtures/algokit-log-capture-fixture.d.ts +0 -1
- package/testing/fixtures/algokit-log-capture-fixture.js.map +1 -1
- package/testing/fixtures/algokit-log-capture-fixture.mjs.map +1 -1
- package/testing/fixtures/algorand-fixture.d.ts +0 -1
- package/testing/fixtures/algorand-fixture.js +12 -12
- package/testing/fixtures/algorand-fixture.js.map +1 -1
- package/testing/fixtures/algorand-fixture.mjs +12 -12
- package/testing/fixtures/algorand-fixture.mjs.map +1 -1
- package/testing/fixtures/index.d.ts +0 -1
- package/testing/index.d.ts +0 -1
- package/testing/indexer.d.ts +0 -1
- package/testing/indexer.js.map +1 -1
- package/testing/indexer.mjs.map +1 -1
- package/testing/test-logger.d.ts +0 -1
- package/testing/test-logger.js +1 -3
- package/testing/test-logger.js.map +1 -1
- package/testing/test-logger.mjs +1 -3
- package/testing/test-logger.mjs.map +1 -1
- package/testing/transaction-logger.d.ts +0 -1
- package/testing/transaction-logger.js.map +1 -1
- package/testing/transaction-logger.mjs.map +1 -1
- package/transaction/index.d.ts +0 -1
- package/transaction/legacy-bridge.d.ts +31 -6
- package/transaction/legacy-bridge.js +100 -6
- package/transaction/legacy-bridge.js.map +1 -1
- package/transaction/legacy-bridge.mjs +99 -8
- package/transaction/legacy-bridge.mjs.map +1 -1
- package/transaction/perform-atomic-transaction-composer-simulate.d.ts +0 -1
- package/transaction/perform-atomic-transaction-composer-simulate.js.map +1 -1
- package/transaction/perform-atomic-transaction-composer-simulate.mjs.map +1 -1
- package/transaction/transaction.d.ts +41 -6
- package/transaction/transaction.js +108 -45
- package/transaction/transaction.js.map +1 -1
- package/transaction/transaction.mjs +108 -46
- package/transaction/transaction.mjs.map +1 -1
- package/transfer/index.d.ts +0 -1
- package/transfer/transfer-algos.d.ts +1 -2
- package/transfer/transfer-algos.js +1 -1
- package/transfer/transfer-algos.js.map +1 -1
- package/transfer/transfer-algos.mjs +1 -1
- package/transfer/transfer-algos.mjs.map +1 -1
- package/transfer/transfer.d.ts +1 -2
- package/transfer/transfer.js +3 -3
- package/transfer/transfer.js.map +1 -1
- package/transfer/transfer.mjs +3 -3
- package/transfer/transfer.mjs.map +1 -1
- package/types/account-manager.d.ts +14 -6
- package/types/account-manager.js +18 -4
- package/types/account-manager.js.map +1 -1
- package/types/account-manager.mjs +18 -4
- package/types/account-manager.mjs.map +1 -1
- package/types/account.d.ts +0 -1
- package/types/account.js.map +1 -1
- package/types/account.mjs.map +1 -1
- package/types/algo-http-client-with-retry.d.ts +0 -1
- package/types/algo-http-client-with-retry.js.map +1 -1
- 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 +450 -21
- package/types/algorand-client-transaction-creator.js +406 -22
- package/types/algorand-client-transaction-creator.js.map +1 -1
- package/types/algorand-client-transaction-creator.mjs +406 -22
- package/types/algorand-client-transaction-creator.mjs.map +1 -1
- package/types/algorand-client-transaction-sender.d.ts +758 -33
- package/types/algorand-client-transaction-sender.js +444 -14
- package/types/algorand-client-transaction-sender.js.map +1 -1
- package/types/algorand-client-transaction-sender.mjs +444 -14
- package/types/algorand-client-transaction-sender.mjs.map +1 -1
- package/types/algorand-client.d.ts +18 -10
- package/types/algorand-client.js +23 -10
- package/types/algorand-client.js.map +1 -1
- package/types/algorand-client.mjs +23 -10
- 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 +348 -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 +1496 -9
- package/types/app-client.js +903 -21
- package/types/app-client.js.map +1 -1
- package/types/app-client.mjs +904 -23
- package/types/app-client.mjs.map +1 -1
- package/types/app-deployer.d.ts +126 -0
- package/types/app-deployer.js +354 -0
- package/types/app-deployer.js.map +1 -0
- package/types/app-deployer.mjs +352 -0
- package/types/app-deployer.mjs.map +1 -0
- package/types/app-factory.d.ts +846 -0
- package/types/app-factory.js +411 -0
- package/types/app-factory.js.map +1 -0
- package/types/app-factory.mjs +409 -0
- package/types/app-factory.mjs.map +1 -0
- package/types/app-manager.d.ts +244 -0
- package/types/app-manager.js +334 -0
- package/types/app-manager.js.map +1 -0
- package/types/app-manager.mjs +332 -0
- package/types/app-manager.mjs.map +1 -0
- package/types/app-spec.d.ts +2 -1
- package/types/app-spec.js +121 -0
- package/types/app-spec.js.map +1 -1
- package/types/app-spec.mjs +120 -0
- package/types/app-spec.mjs.map +1 -1
- package/types/app.d.ts +53 -13
- 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 +4 -4
- package/types/asset-manager.js +3 -4
- package/types/asset-manager.js.map +1 -1
- package/types/asset-manager.mjs +3 -4
- package/types/asset-manager.mjs.map +1 -1
- package/types/asset.d.ts +0 -1
- package/types/async-event-emitter.d.ts +23 -0
- package/types/async-event-emitter.js +55 -0
- package/types/async-event-emitter.js.map +1 -0
- package/types/async-event-emitter.mjs +53 -0
- package/types/async-event-emitter.mjs.map +1 -0
- package/types/client-manager.d.ts +133 -51
- package/types/client-manager.js +147 -23
- package/types/client-manager.js.map +1 -1
- package/types/client-manager.mjs +148 -24
- package/types/client-manager.mjs.map +1 -1
- package/types/composer.d.ts +232 -49
- package/types/composer.js +320 -65
- package/types/composer.js.map +1 -1
- package/types/composer.mjs +321 -66
- 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 +1 -2
- package/types/dispenser-client.js +6 -5
- package/types/dispenser-client.js.map +1 -1
- package/types/dispenser-client.mjs +6 -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 +0 -1
- package/types/indexer.js.map +1 -1
- package/types/indexer.mjs.map +1 -1
- package/types/kmd-account-manager.d.ts +0 -1
- package/types/kmd-account-manager.js +2 -2
- package/types/kmd-account-manager.js.map +1 -1
- package/types/kmd-account-manager.mjs +2 -2
- package/types/kmd-account-manager.mjs.map +1 -1
- 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 +0 -1
- package/types/logic-error.js.map +1 -1
- package/types/logic-error.mjs.map +1 -1
- package/types/network-client.d.ts +13 -1
- package/types/network-client.js.map +1 -1
- package/types/network-client.mjs.map +1 -1
- package/types/testing.d.ts +3 -4
- package/types/transaction.d.ts +17 -4
- package/types/transfer.d.ts +0 -1
- package/types/urlTokenBaseHTTPClient.d.ts +0 -1
- package/types/urlTokenBaseHTTPClient.js +1 -1
- package/types/urlTokenBaseHTTPClient.js.map +1 -1
- package/types/urlTokenBaseHTTPClient.mjs +1 -1
- package/types/urlTokenBaseHTTPClient.mjs.map +1 -1
- package/util.d.ts +2 -2
- package/util.js +11 -10
- package/util.js.map +1 -1
- package/util.mjs +11 -10
- package/util.mjs.map +1 -1
- package/account/account.d.ts.map +0 -1
- package/account/get-account-config-from-environment.d.ts.map +0 -1
- package/account/get-account.d.ts.map +0 -1
- package/account/get-dispenser-account.d.ts.map +0 -1
- package/account/index.d.ts.map +0 -1
- package/account/mnemonic-account.d.ts.map +0 -1
- package/amount.d.ts.map +0 -1
- package/app-client.d.ts.map +0 -1
- package/app-deploy.d.ts.map +0 -1
- package/app.d.ts.map +0 -1
- package/asset.d.ts.map +0 -1
- package/config.d.ts.map +0 -1
- package/debugging/debugging.d.ts.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/index.d.ts.map +0 -1
- package/indexer-lookup.d.ts.map +0 -1
- package/localnet/get-kmd-wallet-account.d.ts.map +0 -1
- package/localnet/get-localnet-dispenser-account.d.ts.map +0 -1
- package/localnet/get-or-create-kmd-wallet-account.d.ts.map +0 -1
- package/localnet/index.d.ts.map +0 -1
- package/localnet/is-localnet.d.ts.map +0 -1
- package/network-client.d.ts.map +0 -1
- package/testing/_asset.d.ts.map +0 -1
- package/testing/account.d.ts.map +0 -1
- package/testing/fixtures/algokit-log-capture-fixture.d.ts.map +0 -1
- package/testing/fixtures/algorand-fixture.d.ts.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/test-logger.d.ts.map +0 -1
- package/testing/transaction-logger.d.ts.map +0 -1
- package/transaction/index.d.ts.map +0 -1
- package/transaction/legacy-bridge.d.ts.map +0 -1
- package/transaction/perform-atomic-transaction-composer-simulate.d.ts.map +0 -1
- package/transaction/transaction.d.ts.map +0 -1
- package/transfer/index.d.ts.map +0 -1
- package/transfer/transfer-algos.d.ts.map +0 -1
- package/transfer/transfer.d.ts.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.map +0 -1
- package/util.d.ts.map +0 -1
package/network-client.js
CHANGED
|
@@ -141,11 +141,11 @@ function getAlgoIndexerClient(config, overrideIntDecoding) {
|
|
|
141
141
|
function getAlgoKmdClient(config) {
|
|
142
142
|
return config ? types_clientManager.ClientManager.getKmdClient(config) : types_clientManager.ClientManager.getKmdClientFromEnvironment();
|
|
143
143
|
}
|
|
144
|
-
/** @deprecated Use `await
|
|
144
|
+
/** @deprecated Use `await algorand.client.isTestNet()` or `await new ClientManager({ algod }).isTestNet()` instead. */
|
|
145
145
|
async function isTestNet(algod) {
|
|
146
146
|
return await new types_clientManager.ClientManager({ algod }).isTestNet();
|
|
147
147
|
}
|
|
148
|
-
/** @deprecated Use `await
|
|
148
|
+
/** @deprecated Use `await algorand.client.isMainNet()` or `await new ClientManager({ algod }).isMainNet()` instead. */
|
|
149
149
|
async function isMainNet(algod) {
|
|
150
150
|
return await new types_clientManager.ClientManager({ algod }).isMainNet();
|
|
151
151
|
}
|
package/network-client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"network-client.js","sources":["../src/network-client.ts"],"sourcesContent":[
|
|
1
|
+
{"version":3,"file":"network-client.js","sources":["../src/network-client.ts"],"sourcesContent":["import algosdk from 'algosdk'\nimport { ClientManager } from './types/client-manager'\nimport { AlgoClientConfig, AlgoConfig } from './types/network-client'\nimport Algodv2 = algosdk.Algodv2\nimport Indexer = algosdk.Indexer\nimport Kmd = algosdk.Kmd\nimport IntDecoding = algosdk.IntDecoding\n\n/**\n * @deprecated Use `ClientManager.getConfigFromEnvironmentOrLocalNet()` instead.\n *\n * Retrieve configurations from environment variables when defined or get defaults (expects to be called from a Node.js environment not algod-side)\n */\nexport function getConfigFromEnvOrDefaults(): AlgoConfig {\n return ClientManager.getConfigFromEnvironmentOrLocalNet()\n}\n\n/**\n * @deprecated Use `ClientManager.getAlgodConfigFromEnvironment()` instead.\n *\n * Retrieve the algod configuration from environment variables (expects to be called from a Node.js environment not algod-side)\n */\nexport function getAlgodConfigFromEnvironment(): AlgoClientConfig {\n return ClientManager.getAlgodConfigFromEnvironment()\n}\n\n/**\n * @deprecated Use `ClientManager.getIndexerConfigFromEnvironment()` instead.\n *\n * Retrieve the indexer configuration from environment variables (expects to be called from a Node.js environment not algod-side)\n */\nexport function getIndexerConfigFromEnvironment(): AlgoClientConfig {\n return ClientManager.getIndexerConfigFromEnvironment()\n}\n\n/**\n * @deprecated Use `ClientManager.getAlgoNodeConfig(network, config)` instead.\n *\n * Returns the Algorand configuration to point to the AlgoNode service\n *\n * @param network Which network to connect to - TestNet or MainNet\n * @param config Which algod config to return - Algod or Indexer\n */\nexport function getAlgoNodeConfig(network: 'testnet' | 'mainnet', config: 'algod' | 'indexer'): AlgoClientConfig {\n return ClientManager.getAlgoNodeConfig(network, config)\n}\n\n/**\n * @deprecated Use `ClientManager.getDefaultLocalNetConfig(configOrPort)` instead.\n *\n * Returns the Algorand configuration to point to the default LocalNet\n *\n * @param configOrPort Which algod config to return - algod, kmd, or indexer OR a port number\n */\nexport function getDefaultLocalNetConfig(configOrPort: 'algod' | 'indexer' | 'kmd' | number): AlgoClientConfig {\n return ClientManager.getDefaultLocalNetConfig(configOrPort)\n}\n\n/**\n * @deprecated Use `ClientManager.getAlgodClient(config)` or `ClientManager.getAlgodClientFromEnvironment()` instead.\n *\n * Returns an algod SDK client that automatically retries transient failures on idempotent calls\n *\n * @param config The config if you want to override the default (getting config from process.env)\n * @example Default (load from environment variables)\n *\n * ```typescript\n * // Uses process.env.ALGOD_SERVER, process.env.ALGOD_PORT and process.env.ALGOD_TOKEN\n * // Automatically detects if you are using PureStake to switch in the right header name for ALGOD_TOKEN\n * const algod = getAlgoClient()\n * await algod.healthCheck().do()\n * ```\n * @example AlgoNode (testnet)\n * ```typescript\n * const algod = getAlgoClient(getAlgoNodeConfig('testnet', 'algod'))\n * await algod.healthCheck().do()\n * ```\n * @example AlgoNode (mainnet)\n * ```typescript\n * const algod = getAlgoClient(getAlgoNodeConfig('mainnet', 'algod'))\n * await algod.healthCheck().do()\n * ```\n * @example Custom (e.g. default LocalNet, although we recommend loading this into a .env and using the Default option instead)\n * ```typescript\n * const algod = getAlgoClient({server: 'http://localhost', port: '4001', token: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'})\n * await algod.healthCheck().do()\n * ```\n */\nexport function getAlgoClient(config?: AlgoClientConfig): Algodv2 {\n return config ? ClientManager.getAlgodClient(config) : ClientManager.getAlgodClientFromEnvironment()\n}\n\n/**\n * @deprecated Use `ClientManager.getIndexerClient(config, overrideIntDecoding)` or `ClientManager.getIndexerClientFromEnvironment(overrideIntDecoding)` instead.\n *\n * Returns an indexer SDK client that automatically retries transient failures on idempotent calls\n *\n * @param config The config if you want to override the default (getting config from process.env)\n * @param overrideIntDecoding Override the default int decoding for responses, uses MIXED by default to avoid lost precision for big integers\n * @example Default (load from environment variables)\n *\n * ```typescript\n * // Uses process.env.INDEXER_SERVER, process.env.INDEXER_PORT and process.env.INDEXER_TOKEN\n * const indexer = getAlgoIndexerClient()\n * await indexer.makeHealthCheck().do()\n * ```\n * @example AlgoNode (testnet)\n * ```typescript\n * const indexer = getAlgoIndexerClient(getAlgoNodeConfig('testnet', 'indexer'))\n * await indexer.makeHealthCheck().do()\n * ```\n * @example AlgoNode (mainnet)\n * ```typescript\n * const indexer = getAlgoIndexerClient(getAlgoNodeConfig('mainnet', 'indexer'))\n * await indexer.makeHealthCheck().do()\n * ```\n * @example Custom (e.g. default LocalNet, although we recommend loading this into a .env and using the Default option instead)\n * ```typescript\n * const indexer = getAlgoIndexerClient({server: 'http://localhost', port: '8980', token: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'})\n * await indexer.makeHealthCheck().do()\n * ```\n * @example Override int decoding for responses\n * ```typescript\n * const indexer = getAlgoIndexerClient(config, IntDecoding.BIGINT)\n * ```\n */\nexport function getAlgoIndexerClient(config?: AlgoClientConfig, overrideIntDecoding?: IntDecoding): Indexer {\n return config\n ? ClientManager.getIndexerClient(config, overrideIntDecoding)\n : ClientManager.getIndexerClientFromEnvironment(overrideIntDecoding)\n}\n\n/**\n * @deprecated Use `ClientManager.getKmdClient(config)` or `ClientManager.getKmdClientFromEnvironment()` instead.\n *\n * Returns a KMD SDK client that automatically retries transient failures on idempotent calls.\n *\n * KMD client allows you to export private keys, which is useful to get the default account in a LocalNet network.\n *\n * @param config The config if you want to override the default (getting config from process.env)\n * @example Default (load from environment variables)\n *\n * ```typescript\n * // Uses process.env.ALGOD_SERVER, process.env.KMD_PORT (or if not specified: port 4002) and process.env.ALGOD_TOKEN\n * const kmd = getAlgoKmdClient()\n * ```\n * @example Custom (e.g. default LocalNet, although we recommend loading this into a .env and using the Default option instead)\n * ```typescript\n * const kmd = getAlgoKmdClient({server: 'http://localhost', port: '4002', token: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'})\n * ```\n */\nexport function getAlgoKmdClient(config?: AlgoClientConfig): Kmd {\n return config ? ClientManager.getKmdClient(config) : ClientManager.getKmdClientFromEnvironment()\n}\n\n/** @deprecated Use `await algorand.client.isTestNet()` or `await new ClientManager({ algod }).isTestNet()` instead. */\nexport async function isTestNet(algod: Algodv2): Promise<boolean> {\n return await new ClientManager({ algod }).isTestNet()\n}\n\n/** @deprecated Use `await algorand.client.isMainNet()` or `await new ClientManager({ algod }).isMainNet()` instead. */\nexport async function isMainNet(algod: Algodv2): Promise<boolean> {\n return await new ClientManager({ algod }).isMainNet()\n}\n"],"names":["ClientManager"],"mappings":";;;;AAQA;;;;AAIG;SACa,0BAA0B,GAAA;AACxC,IAAA,OAAOA,iCAAa,CAAC,kCAAkC,EAAE,CAAA;AAC3D,CAAC;AAED;;;;AAIG;SACa,6BAA6B,GAAA;AAC3C,IAAA,OAAOA,iCAAa,CAAC,6BAA6B,EAAE,CAAA;AACtD,CAAC;AAED;;;;AAIG;SACa,+BAA+B,GAAA;AAC7C,IAAA,OAAOA,iCAAa,CAAC,+BAA+B,EAAE,CAAA;AACxD,CAAC;AAED;;;;;;;AAOG;AACa,SAAA,iBAAiB,CAAC,OAA8B,EAAE,MAA2B,EAAA;IAC3F,OAAOA,iCAAa,CAAC,iBAAiB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;AACzD,CAAC;AAED;;;;;;AAMG;AACG,SAAU,wBAAwB,CAAC,YAAkD,EAAA;AACzF,IAAA,OAAOA,iCAAa,CAAC,wBAAwB,CAAC,YAAY,CAAC,CAAA;AAC7D,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6BG;AACG,SAAU,aAAa,CAAC,MAAyB,EAAA;AACrD,IAAA,OAAO,MAAM,GAAGA,iCAAa,CAAC,cAAc,CAAC,MAAM,CAAC,GAAGA,iCAAa,CAAC,6BAA6B,EAAE,CAAA;AACtG,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiCG;AACa,SAAA,oBAAoB,CAAC,MAAyB,EAAE,mBAAiC,EAAA;AAC/F,IAAA,OAAO,MAAM;UACTA,iCAAa,CAAC,gBAAgB,CAAC,MAAM,EAAE,mBAAmB,CAAC;AAC7D,UAAEA,iCAAa,CAAC,+BAA+B,CAAC,mBAAmB,CAAC,CAAA;AACxE,CAAC;AAED;;;;;;;;;;;;;;;;;;AAkBG;AACG,SAAU,gBAAgB,CAAC,MAAyB,EAAA;AACxD,IAAA,OAAO,MAAM,GAAGA,iCAAa,CAAC,YAAY,CAAC,MAAM,CAAC,GAAGA,iCAAa,CAAC,2BAA2B,EAAE,CAAA;AAClG,CAAC;AAED;AACO,eAAe,SAAS,CAAC,KAAc,EAAA;IAC5C,OAAO,MAAM,IAAIA,iCAAa,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,SAAS,EAAE,CAAA;AACvD,CAAC;AAED;AACO,eAAe,SAAS,CAAC,KAAc,EAAA;IAC5C,OAAO,MAAM,IAAIA,iCAAa,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,SAAS,EAAE,CAAA;AACvD;;;;;;;;;;;;;"}
|
package/network-client.mjs
CHANGED
|
@@ -139,11 +139,11 @@ function getAlgoIndexerClient(config, overrideIntDecoding) {
|
|
|
139
139
|
function getAlgoKmdClient(config) {
|
|
140
140
|
return config ? ClientManager.getKmdClient(config) : ClientManager.getKmdClientFromEnvironment();
|
|
141
141
|
}
|
|
142
|
-
/** @deprecated Use `await
|
|
142
|
+
/** @deprecated Use `await algorand.client.isTestNet()` or `await new ClientManager({ algod }).isTestNet()` instead. */
|
|
143
143
|
async function isTestNet(algod) {
|
|
144
144
|
return await new ClientManager({ algod }).isTestNet();
|
|
145
145
|
}
|
|
146
|
-
/** @deprecated Use `await
|
|
146
|
+
/** @deprecated Use `await algorand.client.isMainNet()` or `await new ClientManager({ algod }).isMainNet()` instead. */
|
|
147
147
|
async function isMainNet(algod) {
|
|
148
148
|
return await new ClientManager({ algod }).isMainNet();
|
|
149
149
|
}
|
package/network-client.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"network-client.mjs","sources":["../src/network-client.ts"],"sourcesContent":[
|
|
1
|
+
{"version":3,"file":"network-client.mjs","sources":["../src/network-client.ts"],"sourcesContent":["import algosdk from 'algosdk'\nimport { ClientManager } from './types/client-manager'\nimport { AlgoClientConfig, AlgoConfig } from './types/network-client'\nimport Algodv2 = algosdk.Algodv2\nimport Indexer = algosdk.Indexer\nimport Kmd = algosdk.Kmd\nimport IntDecoding = algosdk.IntDecoding\n\n/**\n * @deprecated Use `ClientManager.getConfigFromEnvironmentOrLocalNet()` instead.\n *\n * Retrieve configurations from environment variables when defined or get defaults (expects to be called from a Node.js environment not algod-side)\n */\nexport function getConfigFromEnvOrDefaults(): AlgoConfig {\n return ClientManager.getConfigFromEnvironmentOrLocalNet()\n}\n\n/**\n * @deprecated Use `ClientManager.getAlgodConfigFromEnvironment()` instead.\n *\n * Retrieve the algod configuration from environment variables (expects to be called from a Node.js environment not algod-side)\n */\nexport function getAlgodConfigFromEnvironment(): AlgoClientConfig {\n return ClientManager.getAlgodConfigFromEnvironment()\n}\n\n/**\n * @deprecated Use `ClientManager.getIndexerConfigFromEnvironment()` instead.\n *\n * Retrieve the indexer configuration from environment variables (expects to be called from a Node.js environment not algod-side)\n */\nexport function getIndexerConfigFromEnvironment(): AlgoClientConfig {\n return ClientManager.getIndexerConfigFromEnvironment()\n}\n\n/**\n * @deprecated Use `ClientManager.getAlgoNodeConfig(network, config)` instead.\n *\n * Returns the Algorand configuration to point to the AlgoNode service\n *\n * @param network Which network to connect to - TestNet or MainNet\n * @param config Which algod config to return - Algod or Indexer\n */\nexport function getAlgoNodeConfig(network: 'testnet' | 'mainnet', config: 'algod' | 'indexer'): AlgoClientConfig {\n return ClientManager.getAlgoNodeConfig(network, config)\n}\n\n/**\n * @deprecated Use `ClientManager.getDefaultLocalNetConfig(configOrPort)` instead.\n *\n * Returns the Algorand configuration to point to the default LocalNet\n *\n * @param configOrPort Which algod config to return - algod, kmd, or indexer OR a port number\n */\nexport function getDefaultLocalNetConfig(configOrPort: 'algod' | 'indexer' | 'kmd' | number): AlgoClientConfig {\n return ClientManager.getDefaultLocalNetConfig(configOrPort)\n}\n\n/**\n * @deprecated Use `ClientManager.getAlgodClient(config)` or `ClientManager.getAlgodClientFromEnvironment()` instead.\n *\n * Returns an algod SDK client that automatically retries transient failures on idempotent calls\n *\n * @param config The config if you want to override the default (getting config from process.env)\n * @example Default (load from environment variables)\n *\n * ```typescript\n * // Uses process.env.ALGOD_SERVER, process.env.ALGOD_PORT and process.env.ALGOD_TOKEN\n * // Automatically detects if you are using PureStake to switch in the right header name for ALGOD_TOKEN\n * const algod = getAlgoClient()\n * await algod.healthCheck().do()\n * ```\n * @example AlgoNode (testnet)\n * ```typescript\n * const algod = getAlgoClient(getAlgoNodeConfig('testnet', 'algod'))\n * await algod.healthCheck().do()\n * ```\n * @example AlgoNode (mainnet)\n * ```typescript\n * const algod = getAlgoClient(getAlgoNodeConfig('mainnet', 'algod'))\n * await algod.healthCheck().do()\n * ```\n * @example Custom (e.g. default LocalNet, although we recommend loading this into a .env and using the Default option instead)\n * ```typescript\n * const algod = getAlgoClient({server: 'http://localhost', port: '4001', token: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'})\n * await algod.healthCheck().do()\n * ```\n */\nexport function getAlgoClient(config?: AlgoClientConfig): Algodv2 {\n return config ? ClientManager.getAlgodClient(config) : ClientManager.getAlgodClientFromEnvironment()\n}\n\n/**\n * @deprecated Use `ClientManager.getIndexerClient(config, overrideIntDecoding)` or `ClientManager.getIndexerClientFromEnvironment(overrideIntDecoding)` instead.\n *\n * Returns an indexer SDK client that automatically retries transient failures on idempotent calls\n *\n * @param config The config if you want to override the default (getting config from process.env)\n * @param overrideIntDecoding Override the default int decoding for responses, uses MIXED by default to avoid lost precision for big integers\n * @example Default (load from environment variables)\n *\n * ```typescript\n * // Uses process.env.INDEXER_SERVER, process.env.INDEXER_PORT and process.env.INDEXER_TOKEN\n * const indexer = getAlgoIndexerClient()\n * await indexer.makeHealthCheck().do()\n * ```\n * @example AlgoNode (testnet)\n * ```typescript\n * const indexer = getAlgoIndexerClient(getAlgoNodeConfig('testnet', 'indexer'))\n * await indexer.makeHealthCheck().do()\n * ```\n * @example AlgoNode (mainnet)\n * ```typescript\n * const indexer = getAlgoIndexerClient(getAlgoNodeConfig('mainnet', 'indexer'))\n * await indexer.makeHealthCheck().do()\n * ```\n * @example Custom (e.g. default LocalNet, although we recommend loading this into a .env and using the Default option instead)\n * ```typescript\n * const indexer = getAlgoIndexerClient({server: 'http://localhost', port: '8980', token: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'})\n * await indexer.makeHealthCheck().do()\n * ```\n * @example Override int decoding for responses\n * ```typescript\n * const indexer = getAlgoIndexerClient(config, IntDecoding.BIGINT)\n * ```\n */\nexport function getAlgoIndexerClient(config?: AlgoClientConfig, overrideIntDecoding?: IntDecoding): Indexer {\n return config\n ? ClientManager.getIndexerClient(config, overrideIntDecoding)\n : ClientManager.getIndexerClientFromEnvironment(overrideIntDecoding)\n}\n\n/**\n * @deprecated Use `ClientManager.getKmdClient(config)` or `ClientManager.getKmdClientFromEnvironment()` instead.\n *\n * Returns a KMD SDK client that automatically retries transient failures on idempotent calls.\n *\n * KMD client allows you to export private keys, which is useful to get the default account in a LocalNet network.\n *\n * @param config The config if you want to override the default (getting config from process.env)\n * @example Default (load from environment variables)\n *\n * ```typescript\n * // Uses process.env.ALGOD_SERVER, process.env.KMD_PORT (or if not specified: port 4002) and process.env.ALGOD_TOKEN\n * const kmd = getAlgoKmdClient()\n * ```\n * @example Custom (e.g. default LocalNet, although we recommend loading this into a .env and using the Default option instead)\n * ```typescript\n * const kmd = getAlgoKmdClient({server: 'http://localhost', port: '4002', token: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'})\n * ```\n */\nexport function getAlgoKmdClient(config?: AlgoClientConfig): Kmd {\n return config ? ClientManager.getKmdClient(config) : ClientManager.getKmdClientFromEnvironment()\n}\n\n/** @deprecated Use `await algorand.client.isTestNet()` or `await new ClientManager({ algod }).isTestNet()` instead. */\nexport async function isTestNet(algod: Algodv2): Promise<boolean> {\n return await new ClientManager({ algod }).isTestNet()\n}\n\n/** @deprecated Use `await algorand.client.isMainNet()` or `await new ClientManager({ algod }).isMainNet()` instead. */\nexport async function isMainNet(algod: Algodv2): Promise<boolean> {\n return await new ClientManager({ algod }).isMainNet()\n}\n"],"names":[],"mappings":";;AAQA;;;;AAIG;SACa,0BAA0B,GAAA;AACxC,IAAA,OAAO,aAAa,CAAC,kCAAkC,EAAE,CAAA;AAC3D,CAAC;AAED;;;;AAIG;SACa,6BAA6B,GAAA;AAC3C,IAAA,OAAO,aAAa,CAAC,6BAA6B,EAAE,CAAA;AACtD,CAAC;AAED;;;;AAIG;SACa,+BAA+B,GAAA;AAC7C,IAAA,OAAO,aAAa,CAAC,+BAA+B,EAAE,CAAA;AACxD,CAAC;AAED;;;;;;;AAOG;AACa,SAAA,iBAAiB,CAAC,OAA8B,EAAE,MAA2B,EAAA;IAC3F,OAAO,aAAa,CAAC,iBAAiB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;AACzD,CAAC;AAED;;;;;;AAMG;AACG,SAAU,wBAAwB,CAAC,YAAkD,EAAA;AACzF,IAAA,OAAO,aAAa,CAAC,wBAAwB,CAAC,YAAY,CAAC,CAAA;AAC7D,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6BG;AACG,SAAU,aAAa,CAAC,MAAyB,EAAA;AACrD,IAAA,OAAO,MAAM,GAAG,aAAa,CAAC,cAAc,CAAC,MAAM,CAAC,GAAG,aAAa,CAAC,6BAA6B,EAAE,CAAA;AACtG,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiCG;AACa,SAAA,oBAAoB,CAAC,MAAyB,EAAE,mBAAiC,EAAA;AAC/F,IAAA,OAAO,MAAM;UACT,aAAa,CAAC,gBAAgB,CAAC,MAAM,EAAE,mBAAmB,CAAC;AAC7D,UAAE,aAAa,CAAC,+BAA+B,CAAC,mBAAmB,CAAC,CAAA;AACxE,CAAC;AAED;;;;;;;;;;;;;;;;;;AAkBG;AACG,SAAU,gBAAgB,CAAC,MAAyB,EAAA;AACxD,IAAA,OAAO,MAAM,GAAG,aAAa,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,aAAa,CAAC,2BAA2B,EAAE,CAAA;AAClG,CAAC;AAED;AACO,eAAe,SAAS,CAAC,KAAc,EAAA;IAC5C,OAAO,MAAM,IAAI,aAAa,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,SAAS,EAAE,CAAA;AACvD,CAAC;AAED;AACO,eAAe,SAAS,CAAC,KAAc,EAAA;IAC5C,OAAO,MAAM,IAAI,aAAa,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,SAAS,EAAE,CAAA;AACvD;;;;"}
|
package/package.json
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
"**"
|
|
7
7
|
],
|
|
8
8
|
"name": "@algorandfoundation/algokit-utils",
|
|
9
|
-
"version": "7.0.0-beta.
|
|
9
|
+
"version": "7.0.0-beta.11",
|
|
10
10
|
"private": false,
|
|
11
11
|
"description": "A set of core Algorand utilities written in TypeScript and released via npm that make it easier to build solutions on Algorand.",
|
|
12
12
|
"author": "Algorand Foundation",
|
package/testing/_asset.d.ts
CHANGED
package/testing/account.d.ts
CHANGED
|
@@ -27,4 +27,3 @@ export declare function getTestAccount(params: GetTestAccountParams, algod: Algo
|
|
|
27
27
|
* @returns The account, with private key loaded
|
|
28
28
|
*/
|
|
29
29
|
export declare function getTestAccount(params: GetTestAccountParams, algorand: AlgorandClient): Promise<Account>;
|
|
30
|
-
//# sourceMappingURL=account.d.ts.map
|
package/testing/account.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"account.js","sources":["../../src/testing/account.ts"],"sourcesContent":[
|
|
1
|
+
{"version":3,"file":"account.js","sources":["../../src/testing/account.ts"],"sourcesContent":["import algosdk from 'algosdk'\nimport { AlgorandClient, Config } from '../'\nimport { GetTestAccountParams } from '../types/testing'\nimport Account = algosdk.Account\nimport Algodv2 = algosdk.Algodv2\nimport Kmd = algosdk.Kmd\n\n/**\n * @deprecated Use `getTestAccount(params, algorandClient)` instead. The `algorandClient` object can be created using `AlgorandClient.fromClients({ algod, kmd })`.\n *\n * Creates an ephemeral Algorand account for the purposes of testing.\n * Returns a newly created random test account that is funded from the dispenser\n * DO NOT USE THIS TO CREATE A MAINNET ACCOUNT!\n * Note: By default this will log the mnemonic of the account.\n * @param params The config for the test account to generate\n * @param algod An algod client\n * @param kmd A KMD client, if not specified then a default KMD client will be loaded from environment variables and if not found fallback to the default LocalNet KMD client\n * @returns The account, with private key loaded\n */\nexport async function getTestAccount(params: GetTestAccountParams, algod: Algodv2, kmd?: Kmd): Promise<Account>\n/**\n * Creates an ephemeral Algorand account for the purposes of testing.\n * Returns a newly created random test account that is funded from the dispenser\n * DO NOT USE THIS TO CREATE A MAINNET ACCOUNT!\n * Note: By default this will log the mnemonic of the account.\n * @param params The config for the test account to generate\n * @param algorand An AlgorandClient client\n * @returns The account, with private key loaded\n */\nexport async function getTestAccount(params: GetTestAccountParams, algorand: AlgorandClient): Promise<Account>\nexport async function getTestAccount(\n { suppressLog, initialFunds, accountGetter }: GetTestAccountParams,\n algodOrAlgorandClient: Algodv2 | AlgorandClient,\n kmd?: Kmd,\n): Promise<Account> {\n const algorand =\n algodOrAlgorandClient instanceof AlgorandClient\n ? algodOrAlgorandClient\n : AlgorandClient.fromClients({\n algod: algodOrAlgorandClient,\n kmd,\n })\n\n const account = accountGetter ? await accountGetter(algorand) : algosdk.generateAccount()\n\n Config.getLogger(suppressLog).info(\n `New test account created with address '${account.addr}' and mnemonic '${algosdk.secretKeyToMnemonic(account.sk)}'.`,\n )\n\n const dispenser = await algorand.account.dispenserFromEnvironment()\n\n await algorand.send.payment({\n sender: dispenser.addr,\n receiver: account.addr,\n amount: initialFunds,\n note: 'Funding test account',\n suppressLog,\n })\n\n const accountInfo = await algorand.account.getInformation(account.addr)\n\n Config.getLogger(suppressLog).info('Test account funded; account balance: %d µALGO', accountInfo.balance.microAlgo)\n\n return account\n}\n"],"names":["AlgorandClient","Config"],"mappings":";;;;;;AA8BO,eAAe,cAAc,CAClC,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,EAAwB,EAClE,qBAA+C,EAC/C,GAAS,EAAA;AAET,IAAA,MAAM,QAAQ,GACZ,qBAAqB,YAAYA,mCAAc;AAC7C,UAAE,qBAAqB;AACvB,UAAEA,mCAAc,CAAC,WAAW,CAAC;AACzB,YAAA,KAAK,EAAE,qBAAqB;YAC5B,GAAG;AACJ,SAAA,CAAC,CAAA;AAER,IAAA,MAAM,OAAO,GAAG,aAAa,GAAG,MAAM,aAAa,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,eAAe,EAAE,CAAA;IAEzFC,aAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,IAAI,CAChC,CAAA,uCAAA,EAA0C,OAAO,CAAC,IAAI,CAAmB,gBAAA,EAAA,OAAO,CAAC,mBAAmB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAI,EAAA,CAAA,CACrH,CAAA;IAED,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,wBAAwB,EAAE,CAAA;AAEnE,IAAA,MAAM,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;QAC1B,MAAM,EAAE,SAAS,CAAC,IAAI;QACtB,QAAQ,EAAE,OAAO,CAAC,IAAI;AACtB,QAAA,MAAM,EAAE,YAAY;AACpB,QAAA,IAAI,EAAE,sBAAsB;QAC5B,WAAW;AACZ,KAAA,CAAC,CAAA;AAEF,IAAA,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;AAEvE,IAAAA,aAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,gDAAgD,EAAE,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;AAEnH,IAAA,OAAO,OAAO,CAAA;AAChB;;;;"}
|
package/testing/account.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"account.mjs","sources":["../../src/testing/account.ts"],"sourcesContent":[
|
|
1
|
+
{"version":3,"file":"account.mjs","sources":["../../src/testing/account.ts"],"sourcesContent":["import algosdk from 'algosdk'\nimport { AlgorandClient, Config } from '../'\nimport { GetTestAccountParams } from '../types/testing'\nimport Account = algosdk.Account\nimport Algodv2 = algosdk.Algodv2\nimport Kmd = algosdk.Kmd\n\n/**\n * @deprecated Use `getTestAccount(params, algorandClient)` instead. The `algorandClient` object can be created using `AlgorandClient.fromClients({ algod, kmd })`.\n *\n * Creates an ephemeral Algorand account for the purposes of testing.\n * Returns a newly created random test account that is funded from the dispenser\n * DO NOT USE THIS TO CREATE A MAINNET ACCOUNT!\n * Note: By default this will log the mnemonic of the account.\n * @param params The config for the test account to generate\n * @param algod An algod client\n * @param kmd A KMD client, if not specified then a default KMD client will be loaded from environment variables and if not found fallback to the default LocalNet KMD client\n * @returns The account, with private key loaded\n */\nexport async function getTestAccount(params: GetTestAccountParams, algod: Algodv2, kmd?: Kmd): Promise<Account>\n/**\n * Creates an ephemeral Algorand account for the purposes of testing.\n * Returns a newly created random test account that is funded from the dispenser\n * DO NOT USE THIS TO CREATE A MAINNET ACCOUNT!\n * Note: By default this will log the mnemonic of the account.\n * @param params The config for the test account to generate\n * @param algorand An AlgorandClient client\n * @returns The account, with private key loaded\n */\nexport async function getTestAccount(params: GetTestAccountParams, algorand: AlgorandClient): Promise<Account>\nexport async function getTestAccount(\n { suppressLog, initialFunds, accountGetter }: GetTestAccountParams,\n algodOrAlgorandClient: Algodv2 | AlgorandClient,\n kmd?: Kmd,\n): Promise<Account> {\n const algorand =\n algodOrAlgorandClient instanceof AlgorandClient\n ? algodOrAlgorandClient\n : AlgorandClient.fromClients({\n algod: algodOrAlgorandClient,\n kmd,\n })\n\n const account = accountGetter ? await accountGetter(algorand) : algosdk.generateAccount()\n\n Config.getLogger(suppressLog).info(\n `New test account created with address '${account.addr}' and mnemonic '${algosdk.secretKeyToMnemonic(account.sk)}'.`,\n )\n\n const dispenser = await algorand.account.dispenserFromEnvironment()\n\n await algorand.send.payment({\n sender: dispenser.addr,\n receiver: account.addr,\n amount: initialFunds,\n note: 'Funding test account',\n suppressLog,\n })\n\n const accountInfo = await algorand.account.getInformation(account.addr)\n\n Config.getLogger(suppressLog).info('Test account funded; account balance: %d µALGO', accountInfo.balance.microAlgo)\n\n return account\n}\n"],"names":[],"mappings":";;;;AA8BO,eAAe,cAAc,CAClC,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,EAAwB,EAClE,qBAA+C,EAC/C,GAAS,EAAA;AAET,IAAA,MAAM,QAAQ,GACZ,qBAAqB,YAAY,cAAc;AAC7C,UAAE,qBAAqB;AACvB,UAAE,cAAc,CAAC,WAAW,CAAC;AACzB,YAAA,KAAK,EAAE,qBAAqB;YAC5B,GAAG;AACJ,SAAA,CAAC,CAAA;AAER,IAAA,MAAM,OAAO,GAAG,aAAa,GAAG,MAAM,aAAa,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,eAAe,EAAE,CAAA;IAEzF,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,IAAI,CAChC,CAAA,uCAAA,EAA0C,OAAO,CAAC,IAAI,CAAmB,gBAAA,EAAA,OAAO,CAAC,mBAAmB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAI,EAAA,CAAA,CACrH,CAAA;IAED,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,wBAAwB,EAAE,CAAA;AAEnE,IAAA,MAAM,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;QAC1B,MAAM,EAAE,SAAS,CAAC,IAAI;QACtB,QAAQ,EAAE,OAAO,CAAC,IAAI;AACtB,QAAA,MAAM,EAAE,YAAY;AACpB,QAAA,IAAI,EAAE,sBAAsB;QAC5B,WAAW;AACZ,KAAA,CAAC,CAAA;AAEF,IAAA,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;AAEvE,IAAA,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,gDAAgD,EAAE,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;AAEnH,IAAA,OAAO,OAAO,CAAA;AAChB;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"algokit-log-capture-fixture.js","sources":["../../../src/testing/fixtures/algokit-log-capture-fixture.ts"],"sourcesContent":[
|
|
1
|
+
{"version":3,"file":"algokit-log-capture-fixture.js","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":["Config","TestLogger"],"mappings":";;;;;AAIA;;;;;;;;;;;;;;;;AAgBG;AACI,MAAM,wBAAwB,GAAmC,MAAK;AAC3E,IAAA,MAAM,cAAc,GAAGA,aAAM,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,IAAIC,qBAAU,CAAC,cAAc,CAAC,CAAA;YAC7CD,aAAM,CAAC,SAAS,CAAC;AACf,gBAAA,MAAM,EAAE,YAAY;AACrB,aAAA,CAAC,CAAA;SACH;QACD,SAAS,EAAE,MAAK;YACdA,aAAM,CAAC,SAAS,CAAC;AACf,gBAAA,MAAM,EAAE,cAAc;AACvB,aAAA,CAAC,CAAA;SACH;KACF,CAAA;AACH;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"algokit-log-capture-fixture.mjs","sources":["../../../src/testing/fixtures/algokit-log-capture-fixture.ts"],"sourcesContent":[
|
|
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;;;;"}
|
|
@@ -65,4 +65,3 @@ export declare function algorandFixture(fixtureConfig?: AlgorandFixtureConfig):
|
|
|
65
65
|
* @returns The fixture
|
|
66
66
|
*/
|
|
67
67
|
export declare function algorandFixture(fixtureConfig: AlgorandFixtureConfig | undefined, config: AlgoConfig): AlgorandFixture;
|
|
68
|
-
//# sourceMappingURL=algorand-fixture.d.ts.map
|
|
@@ -18,30 +18,30 @@ function algorandFixture(fixtureConfig, config$1) {
|
|
|
18
18
|
const indexer$1 = fixtureConfig.indexer ?? types_clientManager.ClientManager.getIndexerClient(fixtureConfig.indexerConfig);
|
|
19
19
|
const kmd = fixtureConfig.kmd ?? types_clientManager.ClientManager.getKmdClient(fixtureConfig.kmdConfig);
|
|
20
20
|
let context;
|
|
21
|
-
let
|
|
21
|
+
let algorand;
|
|
22
22
|
const beforeEach = async () => {
|
|
23
23
|
config.Config.configure({ debug: true });
|
|
24
24
|
const transactionLogger$1 = new transactionLogger.TransactionLogger();
|
|
25
25
|
const transactionLoggerAlgod = transactionLogger$1.capture(algod);
|
|
26
|
-
|
|
27
|
-
const acc = await account.getTestAccount({ initialFunds: fixtureConfig?.testAccountFunding ?? amount.algos(10), suppressLog: true },
|
|
28
|
-
|
|
26
|
+
algorand = types_algorandClient.AlgorandClient.fromClients({ algod: transactionLoggerAlgod, indexer: indexer$1, kmd });
|
|
27
|
+
const acc = await account.getTestAccount({ initialFunds: fixtureConfig?.testAccountFunding ?? amount.algos(10), suppressLog: true }, algorand);
|
|
28
|
+
algorand.setSignerFromAccount(acc).setSuggestedParamsCacheTimeout(0);
|
|
29
29
|
// If running against LocalNet we are likely in dev mode and we need to set a much higher validity window
|
|
30
30
|
// otherwise we are more likely to get invalid transactions.
|
|
31
|
-
if (await
|
|
32
|
-
|
|
31
|
+
if (await algorand.client.isLocalNet()) {
|
|
32
|
+
algorand.setDefaultValidityWindow(1000);
|
|
33
33
|
}
|
|
34
|
-
const testAccount = { ...acc, signer:
|
|
34
|
+
const testAccount = { ...acc, signer: algorand.account.getSigner(acc.addr) };
|
|
35
35
|
context = {
|
|
36
|
-
algorand
|
|
36
|
+
algorand,
|
|
37
37
|
algod: transactionLoggerAlgod,
|
|
38
38
|
indexer: indexer$1,
|
|
39
39
|
kmd: kmd,
|
|
40
40
|
testAccount,
|
|
41
41
|
generateAccount: async (params) => {
|
|
42
|
-
const account$1 = await account.getTestAccount(params,
|
|
43
|
-
|
|
44
|
-
return { ...account$1, signer:
|
|
42
|
+
const account$1 = await account.getTestAccount(params, algorand);
|
|
43
|
+
algorand.setSignerFromAccount(account$1);
|
|
44
|
+
return { ...account$1, signer: algorand.account.getSigner(account$1.addr) };
|
|
45
45
|
},
|
|
46
46
|
transactionLogger: transactionLogger$1,
|
|
47
47
|
waitForIndexer: () => transactionLogger$1.waitForIndexer(indexer$1),
|
|
@@ -53,7 +53,7 @@ function algorandFixture(fixtureConfig, config$1) {
|
|
|
53
53
|
return context;
|
|
54
54
|
},
|
|
55
55
|
get algorand() {
|
|
56
|
-
return
|
|
56
|
+
return algorand;
|
|
57
57
|
},
|
|
58
58
|
beforeEach,
|
|
59
59
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"algorand-fixture.js","sources":["../../../src/testing/fixtures/algorand-fixture.ts"],"sourcesContent":[
|
|
1
|
+
{"version":3,"file":"algorand-fixture.js","sources":["../../../src/testing/fixtures/algorand-fixture.ts"],"sourcesContent":["import { algos, Config, lookupTransactionById } 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 acc = await getTestAccount({ initialFunds: fixtureConfig?.testAccountFunding ?? algos(10), suppressLog: true }, algorand)\n algorand.setSignerFromAccount(acc).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 const testAccount = { ...acc, signer: algorand.account.getSigner(acc.addr) }\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, signer: algorand.account.getSigner(account.addr) }\n },\n transactionLogger: transactionLogger,\n waitForIndexer: () => transactionLogger.waitForIndexer(indexer),\n waitForIndexerTransaction: (transactionId: string) => runWhenIndexerCaughtUp(() => lookupTransactionById(transactionId, indexer)),\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","lookupTransactionById"],"mappings":"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"}
|
|
@@ -16,30 +16,30 @@ function algorandFixture(fixtureConfig, config) {
|
|
|
16
16
|
const indexer = fixtureConfig.indexer ?? ClientManager.getIndexerClient(fixtureConfig.indexerConfig);
|
|
17
17
|
const kmd = fixtureConfig.kmd ?? ClientManager.getKmdClient(fixtureConfig.kmdConfig);
|
|
18
18
|
let context;
|
|
19
|
-
let
|
|
19
|
+
let algorand;
|
|
20
20
|
const beforeEach = async () => {
|
|
21
21
|
Config.configure({ debug: true });
|
|
22
22
|
const transactionLogger = new TransactionLogger();
|
|
23
23
|
const transactionLoggerAlgod = transactionLogger.capture(algod);
|
|
24
|
-
|
|
25
|
-
const acc = await getTestAccount({ initialFunds: fixtureConfig?.testAccountFunding ?? algos(10), suppressLog: true },
|
|
26
|
-
|
|
24
|
+
algorand = AlgorandClient.fromClients({ algod: transactionLoggerAlgod, indexer, kmd });
|
|
25
|
+
const acc = await getTestAccount({ initialFunds: fixtureConfig?.testAccountFunding ?? algos(10), suppressLog: true }, algorand);
|
|
26
|
+
algorand.setSignerFromAccount(acc).setSuggestedParamsCacheTimeout(0);
|
|
27
27
|
// If running against LocalNet we are likely in dev mode and we need to set a much higher validity window
|
|
28
28
|
// otherwise we are more likely to get invalid transactions.
|
|
29
|
-
if (await
|
|
30
|
-
|
|
29
|
+
if (await algorand.client.isLocalNet()) {
|
|
30
|
+
algorand.setDefaultValidityWindow(1000);
|
|
31
31
|
}
|
|
32
|
-
const testAccount = { ...acc, signer:
|
|
32
|
+
const testAccount = { ...acc, signer: algorand.account.getSigner(acc.addr) };
|
|
33
33
|
context = {
|
|
34
|
-
algorand
|
|
34
|
+
algorand,
|
|
35
35
|
algod: transactionLoggerAlgod,
|
|
36
36
|
indexer: indexer,
|
|
37
37
|
kmd: kmd,
|
|
38
38
|
testAccount,
|
|
39
39
|
generateAccount: async (params) => {
|
|
40
|
-
const account = await getTestAccount(params,
|
|
41
|
-
|
|
42
|
-
return { ...account, signer:
|
|
40
|
+
const account = await getTestAccount(params, algorand);
|
|
41
|
+
algorand.setSignerFromAccount(account);
|
|
42
|
+
return { ...account, signer: algorand.account.getSigner(account.addr) };
|
|
43
43
|
},
|
|
44
44
|
transactionLogger: transactionLogger,
|
|
45
45
|
waitForIndexer: () => transactionLogger.waitForIndexer(indexer),
|
|
@@ -51,7 +51,7 @@ function algorandFixture(fixtureConfig, config) {
|
|
|
51
51
|
return context;
|
|
52
52
|
},
|
|
53
53
|
get algorand() {
|
|
54
|
-
return
|
|
54
|
+
return algorand;
|
|
55
55
|
},
|
|
56
56
|
beforeEach,
|
|
57
57
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"algorand-fixture.mjs","sources":["../../../src/testing/fixtures/algorand-fixture.ts"],"sourcesContent":[
|
|
1
|
+
{"version":3,"file":"algorand-fixture.mjs","sources":["../../../src/testing/fixtures/algorand-fixture.ts"],"sourcesContent":["import { algos, Config, lookupTransactionById } 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 acc = await getTestAccount({ initialFunds: fixtureConfig?.testAccountFunding ?? algos(10), suppressLog: true }, algorand)\n algorand.setSignerFromAccount(acc).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 const testAccount = { ...acc, signer: algorand.account.getSigner(acc.addr) }\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, signer: algorand.account.getSigner(account.addr) }\n },\n transactionLogger: transactionLogger,\n waitForIndexer: () => transactionLogger.waitForIndexer(indexer),\n waitForIndexerTransaction: (transactionId: string) => runWhenIndexerCaughtUp(() => lookupTransactionById(transactionId, indexer)),\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,GAAG,GAAG,MAAM,cAAc,CAAC,EAAE,YAAY,EAAE,aAAa,EAAE,kBAAkB,IAAI,KAAK,CAAC,EAAE,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,QAAQ,CAAC,CAAA;QAC/H,QAAQ,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,8BAA8B,CAAC,CAAC,CAAC,CAAA;;;QAGpE,IAAI,MAAM,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE;AACtC,YAAA,QAAQ,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAA;SACxC;AACD,QAAA,MAAM,WAAW,GAAG,EAAE,GAAG,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAA;AAC5E,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,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAA;aACxE;AACD,YAAA,iBAAiB,EAAE,iBAAiB;YACpC,cAAc,EAAE,MAAM,iBAAiB,CAAC,cAAc,CAAC,OAAO,CAAC;AAC/D,YAAA,yBAAyB,EAAE,CAAC,aAAqB,KAAK,sBAAsB,CAAC,MAAM,qBAAqB,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;SAClI,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;;;;"}
|
package/testing/index.d.ts
CHANGED
package/testing/indexer.d.ts
CHANGED
package/testing/indexer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"indexer.js","sources":["../../src/testing/indexer.ts"],"sourcesContent":[null],"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
|
+
{"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;;;;"}
|
package/testing/indexer.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"indexer.mjs","sources":["../../src/testing/indexer.ts"],"sourcesContent":[null],"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
|
+
{"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;;;;"}
|
package/testing/test-logger.d.ts
CHANGED
package/testing/test-logger.js
CHANGED
|
@@ -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,7 @@ 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' ? sender :
|
|
43
|
+
accounts?.forEach((sender, id) => (snapshot = snapshot.replace(new RegExp(typeof sender === 'string' ? sender : 'addr' in sender ? sender.addr : sender.address(), 'g'), `ACCOUNT_${id + 1}`)));
|
|
46
44
|
apps?.forEach((app, id) => (snapshot = snapshot.replace(new RegExp(`\\b${app.toString()}\\b(?! bytes)`, 'g'), `APP_${id + 1}`)));
|
|
47
45
|
return snapshot;
|
|
48
46
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-logger.js","sources":["../../src/testing/test-logger.ts"],"sourcesContent":[
|
|
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(typeof sender === 'string' ? sender : 'addr' in sender ? sender.addr : sender.address(), 'g'),\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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"}
|
package/testing/test-logger.mjs
CHANGED
|
@@ -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,7 @@ 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' ? sender :
|
|
41
|
+
accounts?.forEach((sender, id) => (snapshot = snapshot.replace(new RegExp(typeof sender === 'string' ? sender : 'addr' in sender ? sender.addr : sender.address(), 'g'), `ACCOUNT_${id + 1}`)));
|
|
44
42
|
apps?.forEach((app, id) => (snapshot = snapshot.replace(new RegExp(`\\b${app.toString()}\\b(?! bytes)`, 'g'), `APP_${id + 1}`)));
|
|
45
43
|
return snapshot;
|
|
46
44
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-logger.mjs","sources":["../../src/testing/test-logger.ts"],"sourcesContent":[
|
|
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(typeof sender === 'string' ? sender : 'addr' in sender ? sender.addr : sender.address(), 'g'),\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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transaction-logger.js","sources":["../../src/testing/transaction-logger.ts"],"sourcesContent":[
|
|
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;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transaction-logger.mjs","sources":["../../src/testing/transaction-logger.ts"],"sourcesContent":[
|
|
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;;;;"}
|
package/transaction/index.d.ts
CHANGED
|
@@ -1,10 +1,35 @@
|
|
|
1
1
|
import algosdk from 'algosdk';
|
|
2
2
|
import { AlgorandClientTransactionCreator } from '../types/algorand-client-transaction-creator';
|
|
3
|
-
import { AlgorandClientTransactionSender
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
3
|
+
import { AlgorandClientTransactionSender } from '../types/algorand-client-transaction-sender';
|
|
4
|
+
import { ABIAppCallArgs, BoxIdentifier as LegacyBoxIdentifier, BoxReference as LegacyBoxReference, RawAppCallArgs } from '../types/app';
|
|
5
|
+
import { AppCallMethodCall, AppCallParams, AppCreateMethodCall, AppCreateParams, AppDeleteMethodCall, AppDeleteParams, AppUpdateMethodCall, AppUpdateParams, BuiltTransactions, CommonTransactionParams } from '../types/composer';
|
|
6
|
+
import { SendParams, SendSingleTransactionResult, SendTransactionFrom, SendTransactionParams, SendTransactionResult, TransactionNote } from '../types/transaction';
|
|
6
7
|
import Algodv2 = algosdk.Algodv2;
|
|
7
8
|
import Transaction = algosdk.Transaction;
|
|
8
|
-
/** Bridges between legacy `sendTransaction` behaviour and new `AlgorandClient` behaviour. */
|
|
9
|
-
export declare function legacySendTransactionBridge<T extends CommonTransactionParams>(algod: Algodv2, from: SendTransactionFrom, sendParams: SendTransactionParams, params: T, txn: (c: AlgorandClientTransactionCreator) => (params: T) => Promise<Transaction
|
|
10
|
-
|
|
9
|
+
/** @deprecated Bridges between legacy `sendTransaction` behaviour and new `AlgorandClient` behaviour. */
|
|
10
|
+
export declare function legacySendTransactionBridge<T extends CommonTransactionParams, TResult extends SendSingleTransactionResult>(algod: Algodv2, from: SendTransactionFrom, sendParams: SendTransactionParams, params: T, txn: ((c: AlgorandClientTransactionCreator) => (params: T) => Promise<Transaction>) | ((c: AlgorandClientTransactionCreator) => (params: T) => Promise<BuiltTransactions>), send: (c: AlgorandClientTransactionSender) => (params: T & SendParams) => Promise<TResult>, suggestedParams?: algosdk.SuggestedParams): Promise<(SendTransactionResult | TResult) & {
|
|
11
|
+
transactions: Transaction[];
|
|
12
|
+
}>;
|
|
13
|
+
/** @deprecated Bridges between legacy `sendTransaction` behaviour for app transactions and new `AlgorandClient` behaviour. */
|
|
14
|
+
export declare function legacySendAppTransactionBridge<T extends AppCreateParams | AppUpdateParams | AppDeleteParams | AppCallParams | AppCreateMethodCall | AppUpdateMethodCall | AppDeleteMethodCall | AppCallMethodCall, TResult extends SendSingleTransactionResult>(algod: Algodv2, from: SendTransactionFrom, appArgs: RawAppCallArgs | ABIAppCallArgs | undefined, sendParams: SendTransactionParams & {
|
|
15
|
+
note?: TransactionNote;
|
|
16
|
+
}, params: Omit<T, 'accountReferences' | 'appReferences' | 'assetReferences' | 'boxReferences' | 'args' | 'lease' | 'rekeyTo' | 'note'>, txn: ((c: AlgorandClientTransactionCreator) => (params: T) => Promise<Transaction>) | ((c: AlgorandClientTransactionCreator) => (params: T) => Promise<BuiltTransactions>), send: (c: AlgorandClientTransactionSender) => (params: T & SendParams) => Promise<TResult>, suggestedParams?: algosdk.SuggestedParams): Promise<(SendTransactionResult | TResult) & {
|
|
17
|
+
transactions: Transaction[];
|
|
18
|
+
}>;
|
|
19
|
+
/**
|
|
20
|
+
* @deprecated
|
|
21
|
+
*/
|
|
22
|
+
export declare function _getAppArgsForABICall(args: ABIAppCallArgs, from: SendTransactionFrom): Promise<{
|
|
23
|
+
method: algosdk.ABIMethod;
|
|
24
|
+
sender: string;
|
|
25
|
+
signer: algosdk.TransactionSigner;
|
|
26
|
+
boxes: algosdk.BoxReference[] | undefined;
|
|
27
|
+
lease: Uint8Array | undefined;
|
|
28
|
+
appForeignApps: number[] | undefined;
|
|
29
|
+
appForeignAssets: number[] | undefined;
|
|
30
|
+
appAccounts: string[] | undefined;
|
|
31
|
+
methodArgs: (string | number | bigint | boolean | Uint8Array | algosdk.ABIValue[] | algosdk.TransactionWithSigner)[];
|
|
32
|
+
rekeyTo: string | undefined;
|
|
33
|
+
}>;
|
|
34
|
+
/** @deprecated */
|
|
35
|
+
export declare function _getBoxReference(box: LegacyBoxIdentifier | LegacyBoxReference | algosdk.BoxReference): algosdk.BoxReference;
|