@algorandfoundation/algokit-utils 10.0.0-alpha.36 → 10.0.0-alpha.38

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. package/_virtual/_rolldown/runtime.js +0 -2
  2. package/account-manager.js +3 -3
  3. package/account-manager.mjs +3 -3
  4. package/algorand-client.d.ts +19 -0
  5. package/algorand-client.js +22 -0
  6. package/algorand-client.js.map +1 -1
  7. package/algorand-client.mjs +22 -0
  8. package/algorand-client.mjs.map +1 -1
  9. package/app-client.js +2 -2
  10. package/app-client.mjs +2 -2
  11. package/app-deployer.js +1 -1
  12. package/app-deployer.mjs +1 -1
  13. package/app-factory.js +1 -1
  14. package/app-factory.mjs +1 -1
  15. package/app-manager.js +1 -1
  16. package/app-manager.mjs +1 -1
  17. package/composer.js +20 -20
  18. package/composer.js.map +1 -1
  19. package/composer.mjs +4 -4
  20. package/index.d.ts +2 -1
  21. package/index.js +3 -0
  22. package/index.mjs +2 -1
  23. package/kmd-account-manager.js +1 -1
  24. package/kmd-account-manager.mjs +1 -1
  25. package/network-manager.d.ts +143 -0
  26. package/network-manager.js +191 -0
  27. package/network-manager.js.map +1 -0
  28. package/network-manager.mjs +190 -0
  29. package/network-manager.mjs.map +1 -0
  30. package/package.json +3 -1
  31. package/packages/abi/src/abi-method.js +3 -2
  32. package/packages/abi/src/abi-method.js.map +1 -1
  33. package/packages/abi/src/abi-method.mjs +1 -1
  34. package/packages/algo25/src/index.js +1 -1
  35. package/packages/algo25/src/index.mjs +1 -1
  36. package/packages/common/src/address.js +3 -3
  37. package/packages/common/src/address.js.map +1 -1
  38. package/packages/common/src/address.mjs +1 -1
  39. package/packages/crypto/src/ed25519.js +9 -7
  40. package/packages/crypto/src/ed25519.js.map +1 -1
  41. package/packages/crypto/src/ed25519.mjs +7 -7
  42. package/packages/crypto/src/ed25519.mjs.map +1 -1
  43. package/packages/crypto/src/hash.js +3 -2
  44. package/packages/crypto/src/hash.js.map +1 -1
  45. package/packages/crypto/src/hash.mjs +1 -1
  46. package/packages/crypto/src/hd.js +12 -12
  47. package/packages/crypto/src/hd.js.map +1 -1
  48. package/packages/crypto/src/hd.mjs +1 -2
  49. package/packages/crypto/src/hd.mjs.map +1 -1
  50. package/testing/transaction-logger.js +1 -1
  51. package/testing/transaction-logger.mjs +1 -1
  52. package/transactions/app-call.js +1 -1
  53. package/transactions/app-call.mjs +1 -1
  54. package/transactions/method-call.js +1 -1
  55. package/transactions/method-call.mjs +1 -1
  56. package/_virtual/_rolldown/runtime.mjs +0 -33
@@ -5,7 +5,6 @@ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
5
  var __getOwnPropNames = Object.getOwnPropertyNames;
6
6
  var __getProtoOf = Object.getPrototypeOf;
7
7
  var __hasOwnProp = Object.prototype.hasOwnProperty;
8
- var __commonJSMin = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports);
9
8
  var __copyProps = (to, from, except, desc) => {
10
9
  if (from && typeof from === "object" || typeof from === "function") {
11
10
  for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
@@ -27,5 +26,4 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
27
26
 
28
27
  //#endregion
29
28
 
30
- exports.__commonJSMin = __commonJSMin;
31
29
  exports.__toESM = __toESM;
@@ -1,14 +1,14 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
2
  const require_runtime = require('./_virtual/_rolldown/runtime.js');
3
3
  const require_address = require('./packages/common/src/address.js');
4
- const require_amount = require('./amount.js');
5
- const require_config = require('./config.js');
6
- const require_util = require('./util.js');
7
4
  const require_index = require('./packages/algo25/src/index.js');
8
5
  const require_signer = require('./packages/transact/src/signer.js');
9
6
  const require_multisig = require('./packages/transact/src/multisig.js');
10
7
  const require_logicsig = require('./packages/transact/src/logicsig.js');
11
8
  const require_account = require('./account.js');
9
+ const require_amount = require('./amount.js');
10
+ const require_config = require('./config.js');
11
+ const require_util = require('./util.js');
12
12
  const require_composer = require('./composer.js');
13
13
  const require_kmd_account_manager = require('./kmd-account-manager.js');
14
14
  let tweetnacl = require("tweetnacl");
@@ -1,12 +1,12 @@
1
1
  import { Address, getAddress, getOptionalAddress } from "./packages/common/src/address.mjs";
2
- import { AlgoAmount } from "./amount.mjs";
3
- import { Config } from "./config.mjs";
4
- import { calculateFundAmount, memoize } from "./util.mjs";
5
2
  import { seedFromMnemonic } from "./packages/algo25/src/index.mjs";
6
3
  import { generateAddressWithSigners } from "./packages/transact/src/signer.mjs";
7
4
  import { MultisigAccount } from "./packages/transact/src/multisig.mjs";
8
5
  import { LogicSigAccount } from "./packages/transact/src/logicsig.mjs";
9
6
  import { DISPENSER_ACCOUNT } from "./account.mjs";
7
+ import { AlgoAmount } from "./amount.mjs";
8
+ import { Config } from "./config.mjs";
9
+ import { calculateFundAmount, memoize } from "./util.mjs";
10
10
  import { TransactionComposer } from "./composer.mjs";
11
11
  import { KmdAccountManager } from "./kmd-account-manager.mjs";
12
12
  import nacl from "tweetnacl";
@@ -10,6 +10,7 @@ import { AssetManager } from "./asset-manager.js";
10
10
  import { AlgorandClientTransactionSender } from "./algorand-client-transaction-sender.js";
11
11
  import { AppDeployer } from "./app-deployer.js";
12
12
  import { AlgoConfig } from "./network-client.js";
13
+ import { NetworkManager } from "./network-manager.js";
13
14
  import { AlgoSdkClients, ClientManager } from "./client-manager.js";
14
15
  import { AccountManager } from "./account-manager.js";
15
16
 
@@ -23,6 +24,7 @@ declare class AlgorandClient {
23
24
  private _appManager;
24
25
  private _appDeployer;
25
26
  private _assetManager;
27
+ private _networkManager;
26
28
  private _transactionSender;
27
29
  private _transactionCreator;
28
30
  private _cachedSuggestedParams?;
@@ -148,6 +150,23 @@ declare class AlgorandClient {
148
150
  * const deployer = AlgorandClient.mainNet().appDeployer;
149
151
  */
150
152
  get appDeployer(): AppDeployer;
153
+ /**
154
+ * Methods for interacting with the network.
155
+ * Provides utilities for querying blockchain state and waiting for specific conditions.
156
+ * @returns The `NetworkManager` instance.
157
+ * @example
158
+ * ```typescript
159
+ * // Get last round
160
+ * const lastRound = await algorand.network.getLastRound()
161
+ *
162
+ * // Wait for a specific round
163
+ * await algorand.network.waitUntilRound(1000n)
164
+ *
165
+ * // LocalNet-specific: block warp
166
+ * await algorand.network.localNet.blockWarp(100n)
167
+ * ```
168
+ */
169
+ get network(): NetworkManager;
151
170
  /**
152
171
  * Register a function that will be used to transform an error caught when simulating or executing
153
172
  * composed transaction groups made from `newGroup`
@@ -8,6 +8,7 @@ const require_algorand_client_transaction_creator = require('./algorand-client-t
8
8
  const require_algorand_client_transaction_sender = require('./algorand-client-transaction-sender.js');
9
9
  const require_app_deployer = require('./app-deployer.js');
10
10
  const require_asset_manager = require('./asset-manager.js');
11
+ const require_network_manager = require('./network-manager.js');
11
12
 
12
13
  //#region src/algorand-client.ts
13
14
  /**
@@ -19,6 +20,7 @@ var AlgorandClient = class AlgorandClient {
19
20
  _appManager;
20
21
  _appDeployer;
21
22
  _assetManager;
23
+ _networkManager;
22
24
  _transactionSender;
23
25
  _transactionCreator;
24
26
  _cachedSuggestedParams;
@@ -36,6 +38,7 @@ var AlgorandClient = class AlgorandClient {
36
38
  this._accountManager = new require_account_manager.AccountManager(this._clientManager, { ed25519Generator: config.ed25519Generator ?? require_ed25519.nobleEd25519Generator });
37
39
  this._appManager = new require_app_manager.AppManager(this._clientManager.algod);
38
40
  this._assetManager = new require_asset_manager.AssetManager(this._clientManager.algod, (config) => this.newGroup(config));
41
+ this._networkManager = new require_network_manager.NetworkManager(this._clientManager.algod, this);
39
42
  this._transactionSender = new require_algorand_client_transaction_sender.AlgorandClientTransactionSender((config) => this.newGroup(config), this._assetManager, this._appManager);
40
43
  this._transactionCreator = new require_algorand_client_transaction_creator.AlgorandClientTransactionCreator((config) => this.newGroup(config));
41
44
  this._appDeployer = new require_app_deployer.AppDeployer(this._appManager, this._transactionSender, this._clientManager.indexerIfPresent);
@@ -187,6 +190,25 @@ var AlgorandClient = class AlgorandClient {
187
190
  return this._appDeployer;
188
191
  }
189
192
  /**
193
+ * Methods for interacting with the network.
194
+ * Provides utilities for querying blockchain state and waiting for specific conditions.
195
+ * @returns The `NetworkManager` instance.
196
+ * @example
197
+ * ```typescript
198
+ * // Get last round
199
+ * const lastRound = await algorand.network.getLastRound()
200
+ *
201
+ * // Wait for a specific round
202
+ * await algorand.network.waitUntilRound(1000n)
203
+ *
204
+ * // LocalNet-specific: block warp
205
+ * await algorand.network.localNet.blockWarp(100n)
206
+ * ```
207
+ */
208
+ get network() {
209
+ return this._networkManager;
210
+ }
211
+ /**
190
212
  * Register a function that will be used to transform an error caught when simulating or executing
191
213
  * composed transaction groups made from `newGroup`
192
214
  */
@@ -1 +1 @@
1
- {"version":3,"file":"algorand-client.js","names":["ClientManager","AccountManager","nobleEd25519Generator","AppManager","AssetManager","AlgorandClientTransactionSender","AlgorandClientTransactionCreator","AppDeployer","TransactionComposer"],"sources":["../src/algorand-client.ts"],"sourcesContent":["import { SuggestedParams } from '@algorandfoundation/algokit-algod-client'\nimport { Address, ReadableAddress } from '@algorandfoundation/algokit-common'\nimport { AddressWithTransactionSigner, LogicSigAccount, TransactionSigner, MultisigAccount } from '@algorandfoundation/algokit-transact'\nimport { AccountManager, AccountManagerConfig } from './account-manager'\nimport { AlgorandClientTransactionCreator } from './algorand-client-transaction-creator'\nimport { AlgorandClientTransactionSender } from './algorand-client-transaction-sender'\nimport { AppDeployer } from './app-deployer'\nimport { AppManager } from './app-manager'\nimport { AssetManager } from './asset-manager'\nimport { AlgoSdkClients, ClientManager } from './client-manager'\nimport { ErrorTransformer, TransactionComposer, TransactionComposerConfig } from './composer'\nimport { AlgoConfig } from './network-client'\nimport { nobleEd25519Generator } from '@algorandfoundation/algokit-crypto'\n\n\n/**\n * A client that brokers easy access to Algorand functionality.\n */\nexport class AlgorandClient {\n private _clientManager: ClientManager\n private _accountManager: AccountManager\n private _appManager: AppManager\n private _appDeployer: AppDeployer\n private _assetManager: AssetManager\n private _transactionSender: AlgorandClientTransactionSender\n private _transactionCreator: AlgorandClientTransactionCreator\n\n private _cachedSuggestedParams?: SuggestedParams\n private _cachedSuggestedParamsExpiry?: Date\n private _cachedSuggestedParamsTimeout: number = 3_000 // three seconds\n\n private _defaultValidityWindow: bigint | undefined = undefined\n\n /**\n * A set of error transformers to use when an error is caught in simulate or execute\n * `registerErrorTransformer` and `unregisterErrorTransformer` can be used to add and remove\n * error transformers from the set.\n */\n private _errorTransformers: Set<ErrorTransformer> = new Set()\n\n private constructor(config: (AlgoConfig | AlgoSdkClients) & Partial<AccountManagerConfig>) {\n this._clientManager = new ClientManager(config, this)\n this._accountManager = new AccountManager(this._clientManager, { ed25519Generator: config.ed25519Generator ?? nobleEd25519Generator })\n this._appManager = new AppManager(this._clientManager.algod)\n this._assetManager = new AssetManager(this._clientManager.algod, (config) => this.newGroup(config))\n this._transactionSender = new AlgorandClientTransactionSender((config) => this.newGroup(config), this._assetManager, this._appManager)\n this._transactionCreator = new AlgorandClientTransactionCreator((config) => this.newGroup(config))\n this._appDeployer = new AppDeployer(this._appManager, this._transactionSender, this._clientManager.indexerIfPresent)\n }\n\n /**\n * Sets the default validity window for transactions.\n * @param validityWindow The number of rounds between the first and last valid rounds\n * @returns The `AlgorandClient` so method calls can be chained\n * @example\n * ```typescript\n * const algorand = AlgorandClient.mainNet().setDefaultValidityWindow(1000);\n * ```\n */\n public setDefaultValidityWindow(validityWindow: number | bigint) {\n this._defaultValidityWindow = BigInt(validityWindow)\n return this\n }\n\n /**\n * Sets the default signer to use if no other signer is specified.\n * @param signer The signer to use, either a `TransactionSigner` or a `AddressWithSigner`\n * @returns The `AlgorandClient` so method calls can be chained\n * @example\n * ```typescript\n * const signer = new SigningAccount(account, account.addr)\n * const algorand = AlgorandClient.mainNet().setDefaultSigner(signer)\n * ```\n */\n public setDefaultSigner(signer: TransactionSigner | AddressWithTransactionSigner): AlgorandClient {\n this._accountManager.setDefaultSigner(signer)\n return this\n }\n\n /**\n * Tracks the given account (object that encapsulates an address and a signer) for later signing.\n * @param account The account to register, which can be a `AddressWithSigner` or\n * a `algosdk.Account`, `algosdk.LogicSigAccount`, `SigningAccount` or `MultisigAccount`\n * @example\n * ```typescript\n * const accountManager = AlgorandClient.mainNet()\n * .setSignerFromAccount(algosdk.generateAccount())\n * .setSignerFromAccount(new algosdk.LogicSigAccount(program, args))\n * .setSignerFromAccount(new SigningAccount(account, sender))\n * .setSignerFromAccount(new MultisigAccount({version: 1, threshold: 1, addrs: [\"ADDRESS1...\", \"ADDRESS2...\"]}, [account1, account2]))\n * .setSignerFromAccount({addr: \"SENDERADDRESS\", signer: transactionSigner})\n * ```\n * @returns The `AlgorandClient` so method calls can be chained\n */\n public setSignerFromAccount(account: AddressWithTransactionSigner | LogicSigAccount | MultisigAccount) {\n this._accountManager.setSignerFromAccount(account)\n return this\n }\n\n /**\n * Tracks the given signer against the given sender for later signing.\n * @param sender The sender address to use this signer for\n * @param signer The signer to sign transactions with for the given sender\n * @returns The `AlgorandClient` so method calls can be chained\n * @example\n * ```typescript\n * const signer = new SigningAccount(account, account.addr)\n * const algorand = AlgorandClient.mainNet().setSigner(signer.addr, signer.signer)\n * ```\n */\n public setSigner(sender: string | Address, signer: TransactionSigner) {\n this._accountManager.setSigner(sender, signer)\n return this\n }\n\n /**\n * Sets a cache value to use for suggested transaction params.\n * @param suggestedParams The suggested params to use\n * @param until A date until which to cache, or if not specified then the timeout is used\n * @returns The `AlgorandClient` so method calls can be chained\n * @example\n * ```typescript\n * const algorand = AlgorandClient.mainNet().setSuggestedParamsCache(suggestedParams, new Date(+new Date() + 3_600_000))\n * ```\n */\n public setSuggestedParamsCache(suggestedParams: SuggestedParams, until?: Date) {\n this._cachedSuggestedParams = suggestedParams\n this._cachedSuggestedParamsExpiry = until ?? new Date(+new Date() + this._cachedSuggestedParamsTimeout)\n return this\n }\n\n /**\n * Sets the timeout for caching suggested params.\n * @param timeout The timeout in milliseconds\n * @returns The `AlgorandClient` so method calls can be chained\n * @example\n * ```typescript\n * const algorand = AlgorandClient.mainNet().setSuggestedParamsCacheTimeout(10_000)\n * ```\n */\n public setSuggestedParamsCacheTimeout(timeout: number) {\n this._cachedSuggestedParamsTimeout = timeout\n return this\n }\n\n /**\n * Get suggested params for a transaction (either cached or from algod if the cache is stale or empty)\n * @returns The suggested transaction parameters.\n * @example\n * const params = await AlgorandClient.mainNet().getSuggestedParams();\n */\n public async getSuggestedParams(): Promise<SuggestedParams> {\n if (this._cachedSuggestedParams && (!this._cachedSuggestedParamsExpiry || this._cachedSuggestedParamsExpiry > new Date())) {\n return {\n ...this._cachedSuggestedParams,\n }\n }\n\n this._cachedSuggestedParams = await this._clientManager.algod.suggestedParams()\n this._cachedSuggestedParamsExpiry = new Date(new Date().getTime() + this._cachedSuggestedParamsTimeout)\n\n return {\n ...this._cachedSuggestedParams,\n }\n }\n\n /**\n * Get clients, including algosdk clients and app clients.\n * @returns The `ClientManager` instance.\n * @example\n * const clientManager = AlgorandClient.mainNet().client;\n */\n public get client() {\n return this._clientManager\n }\n\n /**\n * Get or create accounts that can sign transactions.\n * @returns The `AccountManager` instance.\n * @example\n * const accountManager = AlgorandClient.mainNet().account;\n */\n public get account() {\n return this._accountManager\n }\n\n /**\n * Methods for interacting with assets.\n * @returns The `AssetManager` instance.\n * @example\n * const assetManager = AlgorandClient.mainNet().asset;\n */\n public get asset() {\n return this._assetManager\n }\n\n /**\n * Methods for interacting with apps.\n * @returns The `AppManager` instance.\n * @example\n * const appManager = AlgorandClient.mainNet().app;\n */\n public get app() {\n return this._appManager\n }\n\n /**\n * Methods for deploying apps and managing app deployment metadata.\n * @returns The `AppDeployer` instance.\n * @example\n * const deployer = AlgorandClient.mainNet().appDeployer;\n */\n public get appDeployer() {\n return this._appDeployer\n }\n\n /**\n * Register a function that will be used to transform an error caught when simulating or executing\n * composed transaction groups made from `newGroup`\n */\n public registerErrorTransformer(transformer: ErrorTransformer) {\n this._errorTransformers.add(transformer)\n }\n\n public unregisterErrorTransformer(transformer: ErrorTransformer) {\n this._errorTransformers.delete(transformer)\n }\n\n /** Start a new `TransactionComposer` transaction group\n * @returns A new instance of `TransactionComposer`.\n * @example\n * {@includeCode ./algorand-client.spec.ts#example-newGroup}\n * @see [Full working example](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/algorand-client.spec.ts)\n */\n public newGroup(composerConfig?: TransactionComposerConfig) {\n return new TransactionComposer({\n algod: this.client.algod,\n getSigner: (addr: ReadableAddress) => this.account.getSigner(addr),\n getSuggestedParams: () => this.getSuggestedParams(),\n defaultValidityWindow: this._defaultValidityWindow,\n appManager: this._appManager,\n errorTransformers: [...this._errorTransformers],\n composerConfig: composerConfig,\n })\n }\n\n /**\n * Methods for sending a transaction.\n * @returns The `AlgorandClientTransactionSender` instance.\n * @example\n * const result = await AlgorandClient.mainNet().send.payment({\n * sender: \"SENDERADDRESS\",\n * receiver: \"RECEIVERADDRESS\",\n * amount: algo(1)\n * })\n */\n public get send() {\n return this._transactionSender\n }\n\n /**\n * Methods for creating a transaction.\n * @returns The `AlgorandClientTransactionCreator` instance.\n * @example\n * const payment = await AlgorandClient.mainNet().createTransaction.payment({\n * sender: \"SENDERADDRESS\",\n * receiver: \"RECEIVERADDRESS\",\n * amount: algo(1)\n * })\n */\n public get createTransaction() {\n return this._transactionCreator\n }\n\n // Static methods to create an `AlgorandClient`\n\n /**\n * Creates an `AlgorandClient` pointing at default LocalNet ports and API token.\n * @returns An instance of the `AlgorandClient`.\n * @example\n * {@includeCode ./algorand-client.spec.ts#example-defaultLocalNet}\n * @see [Full working example](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/algorand-client.spec.ts)\n */\n public static defaultLocalNet() {\n return new AlgorandClient({\n algodConfig: ClientManager.getDefaultLocalNetConfig('algod'),\n indexerConfig: ClientManager.getDefaultLocalNetConfig('indexer'),\n kmdConfig: ClientManager.getDefaultLocalNetConfig('kmd'),\n })\n }\n\n /**\n * Creates an `AlgorandClient` pointing at TestNet using AlgoNode.\n * @returns An instance of the `AlgorandClient`.\n * @example\n * const algorand = AlgorandClient.testNet();\n */\n public static testNet() {\n return new AlgorandClient({\n algodConfig: ClientManager.getAlgoNodeConfig('testnet', 'algod'),\n indexerConfig: ClientManager.getAlgoNodeConfig('testnet', 'indexer'),\n kmdConfig: undefined,\n })\n }\n\n /**\n * Creates an `AlgorandClient` pointing at MainNet using AlgoNode.\n * @returns An instance of the `AlgorandClient`.\n * @example\n * const algorand = AlgorandClient.mainNet();\n */\n public static mainNet() {\n return new AlgorandClient({\n algodConfig: ClientManager.getAlgoNodeConfig('mainnet', 'algod'),\n indexerConfig: ClientManager.getAlgoNodeConfig('mainnet', 'indexer'),\n kmdConfig: undefined,\n })\n }\n\n /**\n * Creates an `AlgorandClient` pointing to the given client(s).\n * @param clients The clients to use.\n * @returns An instance of the `AlgorandClient`.\n * @example\n * const algorand = AlgorandClient.fromClients({ algod, indexer, kmd });\n */\n public static fromClients(clients: AlgoSdkClients) {\n return new AlgorandClient(clients)\n }\n\n /**\n * Creates an `AlgorandClient` loading the configuration from environment variables.\n *\n * Retrieve configurations from environment variables when defined or get default LocalNet configuration if they aren't defined.\n *\n * Expects to be called from a Node.js environment.\n *\n * If `process.env.ALGOD_SERVER` is defined it will use that along with optional `process.env.ALGOD_PORT` and `process.env.ALGOD_TOKEN`.\n *\n * If `process.env.INDEXER_SERVER` is defined it will use that along with optional `process.env.INDEXER_PORT` and `process.env.INDEXER_TOKEN`.\n *\n * If either aren't defined it will use the default LocalNet config.\n *\n * It will return a KMD configuration that uses `process.env.KMD_PORT` (or port 4002) if `process.env.ALGOD_SERVER` is defined,\n * otherwise it will use the default LocalNet config unless it detects testnet or mainnet.\n * @returns An instance of the `AlgorandClient`.\n * @example\n * const client = AlgorandClient.fromEnvironment();\n */\n public static fromEnvironment() {\n return new AlgorandClient(ClientManager.getConfigFromEnvironmentOrLocalNet())\n }\n\n /**\n * Creates an `AlgorandClient` from the given config.\n * @param config The config to use.\n * @returns An instance of the `AlgorandClient`.\n * @example\n * const client = AlgorandClient.fromConfig({ algodConfig, indexerConfig, kmdConfig });\n */\n public static fromConfig(config: AlgoConfig) {\n return new AlgorandClient(config)\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"algorand-client.js","names":["ClientManager","AccountManager","nobleEd25519Generator","AppManager","AssetManager","NetworkManager","AlgorandClientTransactionSender","AlgorandClientTransactionCreator","AppDeployer","TransactionComposer"],"sources":["../src/algorand-client.ts"],"sourcesContent":["import { SuggestedParams } from '@algorandfoundation/algokit-algod-client'\nimport { Address, ReadableAddress } from '@algorandfoundation/algokit-common'\nimport { nobleEd25519Generator } from '@algorandfoundation/algokit-crypto'\nimport { AddressWithTransactionSigner, LogicSigAccount, MultisigAccount, TransactionSigner } from '@algorandfoundation/algokit-transact'\nimport { AccountManager, AccountManagerConfig } from './account-manager'\nimport { AlgorandClientTransactionCreator } from './algorand-client-transaction-creator'\nimport { AlgorandClientTransactionSender } from './algorand-client-transaction-sender'\nimport { AppDeployer } from './app-deployer'\nimport { AppManager } from './app-manager'\nimport { AssetManager } from './asset-manager'\nimport { AlgoSdkClients, ClientManager } from './client-manager'\nimport { ErrorTransformer, TransactionComposer, TransactionComposerConfig } from './composer'\nimport { AlgoConfig } from './network-client'\nimport { NetworkManager } from './network-manager'\n\n/**\n * A client that brokers easy access to Algorand functionality.\n */\nexport class AlgorandClient {\n private _clientManager: ClientManager\n private _accountManager: AccountManager\n private _appManager: AppManager\n private _appDeployer: AppDeployer\n private _assetManager: AssetManager\n private _networkManager: NetworkManager\n private _transactionSender: AlgorandClientTransactionSender\n private _transactionCreator: AlgorandClientTransactionCreator\n\n private _cachedSuggestedParams?: SuggestedParams\n private _cachedSuggestedParamsExpiry?: Date\n private _cachedSuggestedParamsTimeout: number = 3_000 // three seconds\n\n private _defaultValidityWindow: bigint | undefined = undefined\n\n /**\n * A set of error transformers to use when an error is caught in simulate or execute\n * `registerErrorTransformer` and `unregisterErrorTransformer` can be used to add and remove\n * error transformers from the set.\n */\n private _errorTransformers: Set<ErrorTransformer> = new Set()\n\n private constructor(config: (AlgoConfig | AlgoSdkClients) & Partial<AccountManagerConfig>) {\n this._clientManager = new ClientManager(config, this)\n this._accountManager = new AccountManager(this._clientManager, { ed25519Generator: config.ed25519Generator ?? nobleEd25519Generator })\n this._appManager = new AppManager(this._clientManager.algod)\n this._assetManager = new AssetManager(this._clientManager.algod, (config) => this.newGroup(config))\n this._networkManager = new NetworkManager(this._clientManager.algod, this)\n this._transactionSender = new AlgorandClientTransactionSender((config) => this.newGroup(config), this._assetManager, this._appManager)\n this._transactionCreator = new AlgorandClientTransactionCreator((config) => this.newGroup(config))\n this._appDeployer = new AppDeployer(this._appManager, this._transactionSender, this._clientManager.indexerIfPresent)\n }\n\n /**\n * Sets the default validity window for transactions.\n * @param validityWindow The number of rounds between the first and last valid rounds\n * @returns The `AlgorandClient` so method calls can be chained\n * @example\n * ```typescript\n * const algorand = AlgorandClient.mainNet().setDefaultValidityWindow(1000);\n * ```\n */\n public setDefaultValidityWindow(validityWindow: number | bigint) {\n this._defaultValidityWindow = BigInt(validityWindow)\n return this\n }\n\n /**\n * Sets the default signer to use if no other signer is specified.\n * @param signer The signer to use, either a `TransactionSigner` or a `AddressWithSigner`\n * @returns The `AlgorandClient` so method calls can be chained\n * @example\n * ```typescript\n * const signer = new SigningAccount(account, account.addr)\n * const algorand = AlgorandClient.mainNet().setDefaultSigner(signer)\n * ```\n */\n public setDefaultSigner(signer: TransactionSigner | AddressWithTransactionSigner): AlgorandClient {\n this._accountManager.setDefaultSigner(signer)\n return this\n }\n\n /**\n * Tracks the given account (object that encapsulates an address and a signer) for later signing.\n * @param account The account to register, which can be a `AddressWithSigner` or\n * a `algosdk.Account`, `algosdk.LogicSigAccount`, `SigningAccount` or `MultisigAccount`\n * @example\n * ```typescript\n * const accountManager = AlgorandClient.mainNet()\n * .setSignerFromAccount(algosdk.generateAccount())\n * .setSignerFromAccount(new algosdk.LogicSigAccount(program, args))\n * .setSignerFromAccount(new SigningAccount(account, sender))\n * .setSignerFromAccount(new MultisigAccount({version: 1, threshold: 1, addrs: [\"ADDRESS1...\", \"ADDRESS2...\"]}, [account1, account2]))\n * .setSignerFromAccount({addr: \"SENDERADDRESS\", signer: transactionSigner})\n * ```\n * @returns The `AlgorandClient` so method calls can be chained\n */\n public setSignerFromAccount(account: AddressWithTransactionSigner | LogicSigAccount | MultisigAccount) {\n this._accountManager.setSignerFromAccount(account)\n return this\n }\n\n /**\n * Tracks the given signer against the given sender for later signing.\n * @param sender The sender address to use this signer for\n * @param signer The signer to sign transactions with for the given sender\n * @returns The `AlgorandClient` so method calls can be chained\n * @example\n * ```typescript\n * const signer = new SigningAccount(account, account.addr)\n * const algorand = AlgorandClient.mainNet().setSigner(signer.addr, signer.signer)\n * ```\n */\n public setSigner(sender: string | Address, signer: TransactionSigner) {\n this._accountManager.setSigner(sender, signer)\n return this\n }\n\n /**\n * Sets a cache value to use for suggested transaction params.\n * @param suggestedParams The suggested params to use\n * @param until A date until which to cache, or if not specified then the timeout is used\n * @returns The `AlgorandClient` so method calls can be chained\n * @example\n * ```typescript\n * const algorand = AlgorandClient.mainNet().setSuggestedParamsCache(suggestedParams, new Date(+new Date() + 3_600_000))\n * ```\n */\n public setSuggestedParamsCache(suggestedParams: SuggestedParams, until?: Date) {\n this._cachedSuggestedParams = suggestedParams\n this._cachedSuggestedParamsExpiry = until ?? new Date(+new Date() + this._cachedSuggestedParamsTimeout)\n return this\n }\n\n /**\n * Sets the timeout for caching suggested params.\n * @param timeout The timeout in milliseconds\n * @returns The `AlgorandClient` so method calls can be chained\n * @example\n * ```typescript\n * const algorand = AlgorandClient.mainNet().setSuggestedParamsCacheTimeout(10_000)\n * ```\n */\n public setSuggestedParamsCacheTimeout(timeout: number) {\n this._cachedSuggestedParamsTimeout = timeout\n return this\n }\n\n /**\n * Get suggested params for a transaction (either cached or from algod if the cache is stale or empty)\n * @returns The suggested transaction parameters.\n * @example\n * const params = await AlgorandClient.mainNet().getSuggestedParams();\n */\n public async getSuggestedParams(): Promise<SuggestedParams> {\n if (this._cachedSuggestedParams && (!this._cachedSuggestedParamsExpiry || this._cachedSuggestedParamsExpiry > new Date())) {\n return {\n ...this._cachedSuggestedParams,\n }\n }\n\n this._cachedSuggestedParams = await this._clientManager.algod.suggestedParams()\n this._cachedSuggestedParamsExpiry = new Date(new Date().getTime() + this._cachedSuggestedParamsTimeout)\n\n return {\n ...this._cachedSuggestedParams,\n }\n }\n\n /**\n * Get clients, including algosdk clients and app clients.\n * @returns The `ClientManager` instance.\n * @example\n * const clientManager = AlgorandClient.mainNet().client;\n */\n public get client() {\n return this._clientManager\n }\n\n /**\n * Get or create accounts that can sign transactions.\n * @returns The `AccountManager` instance.\n * @example\n * const accountManager = AlgorandClient.mainNet().account;\n */\n public get account() {\n return this._accountManager\n }\n\n /**\n * Methods for interacting with assets.\n * @returns The `AssetManager` instance.\n * @example\n * const assetManager = AlgorandClient.mainNet().asset;\n */\n public get asset() {\n return this._assetManager\n }\n\n /**\n * Methods for interacting with apps.\n * @returns The `AppManager` instance.\n * @example\n * const appManager = AlgorandClient.mainNet().app;\n */\n public get app() {\n return this._appManager\n }\n\n /**\n * Methods for deploying apps and managing app deployment metadata.\n * @returns The `AppDeployer` instance.\n * @example\n * const deployer = AlgorandClient.mainNet().appDeployer;\n */\n public get appDeployer() {\n return this._appDeployer\n }\n\n /**\n * Methods for interacting with the network.\n * Provides utilities for querying blockchain state and waiting for specific conditions.\n * @returns The `NetworkManager` instance.\n * @example\n * ```typescript\n * // Get last round\n * const lastRound = await algorand.network.getLastRound()\n *\n * // Wait for a specific round\n * await algorand.network.waitUntilRound(1000n)\n *\n * // LocalNet-specific: block warp\n * await algorand.network.localNet.blockWarp(100n)\n * ```\n */\n public get network() {\n return this._networkManager\n }\n\n /**\n * Register a function that will be used to transform an error caught when simulating or executing\n * composed transaction groups made from `newGroup`\n */\n public registerErrorTransformer(transformer: ErrorTransformer) {\n this._errorTransformers.add(transformer)\n }\n\n public unregisterErrorTransformer(transformer: ErrorTransformer) {\n this._errorTransformers.delete(transformer)\n }\n\n /** Start a new `TransactionComposer` transaction group\n * @returns A new instance of `TransactionComposer`.\n * @example\n * {@includeCode ./algorand-client.spec.ts#example-newGroup}\n * @see [Full working example](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/algorand-client.spec.ts)\n */\n public newGroup(composerConfig?: TransactionComposerConfig) {\n return new TransactionComposer({\n algod: this.client.algod,\n getSigner: (addr: ReadableAddress) => this.account.getSigner(addr),\n getSuggestedParams: () => this.getSuggestedParams(),\n defaultValidityWindow: this._defaultValidityWindow,\n appManager: this._appManager,\n errorTransformers: [...this._errorTransformers],\n composerConfig: composerConfig,\n })\n }\n\n /**\n * Methods for sending a transaction.\n * @returns The `AlgorandClientTransactionSender` instance.\n * @example\n * const result = await AlgorandClient.mainNet().send.payment({\n * sender: \"SENDERADDRESS\",\n * receiver: \"RECEIVERADDRESS\",\n * amount: algo(1)\n * })\n */\n public get send() {\n return this._transactionSender\n }\n\n /**\n * Methods for creating a transaction.\n * @returns The `AlgorandClientTransactionCreator` instance.\n * @example\n * const payment = await AlgorandClient.mainNet().createTransaction.payment({\n * sender: \"SENDERADDRESS\",\n * receiver: \"RECEIVERADDRESS\",\n * amount: algo(1)\n * })\n */\n public get createTransaction() {\n return this._transactionCreator\n }\n\n // Static methods to create an `AlgorandClient`\n\n /**\n * Creates an `AlgorandClient` pointing at default LocalNet ports and API token.\n * @returns An instance of the `AlgorandClient`.\n * @example\n * {@includeCode ./algorand-client.spec.ts#example-defaultLocalNet}\n * @see [Full working example](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/algorand-client.spec.ts)\n */\n public static defaultLocalNet() {\n return new AlgorandClient({\n algodConfig: ClientManager.getDefaultLocalNetConfig('algod'),\n indexerConfig: ClientManager.getDefaultLocalNetConfig('indexer'),\n kmdConfig: ClientManager.getDefaultLocalNetConfig('kmd'),\n })\n }\n\n /**\n * Creates an `AlgorandClient` pointing at TestNet using AlgoNode.\n * @returns An instance of the `AlgorandClient`.\n * @example\n * const algorand = AlgorandClient.testNet();\n */\n public static testNet() {\n return new AlgorandClient({\n algodConfig: ClientManager.getAlgoNodeConfig('testnet', 'algod'),\n indexerConfig: ClientManager.getAlgoNodeConfig('testnet', 'indexer'),\n kmdConfig: undefined,\n })\n }\n\n /**\n * Creates an `AlgorandClient` pointing at MainNet using AlgoNode.\n * @returns An instance of the `AlgorandClient`.\n * @example\n * const algorand = AlgorandClient.mainNet();\n */\n public static mainNet() {\n return new AlgorandClient({\n algodConfig: ClientManager.getAlgoNodeConfig('mainnet', 'algod'),\n indexerConfig: ClientManager.getAlgoNodeConfig('mainnet', 'indexer'),\n kmdConfig: undefined,\n })\n }\n\n /**\n * Creates an `AlgorandClient` pointing to the given client(s).\n * @param clients The clients to use.\n * @returns An instance of the `AlgorandClient`.\n * @example\n * const algorand = AlgorandClient.fromClients({ algod, indexer, kmd });\n */\n public static fromClients(clients: AlgoSdkClients) {\n return new AlgorandClient(clients)\n }\n\n /**\n * Creates an `AlgorandClient` loading the configuration from environment variables.\n *\n * Retrieve configurations from environment variables when defined or get default LocalNet configuration if they aren't defined.\n *\n * Expects to be called from a Node.js environment.\n *\n * If `process.env.ALGOD_SERVER` is defined it will use that along with optional `process.env.ALGOD_PORT` and `process.env.ALGOD_TOKEN`.\n *\n * If `process.env.INDEXER_SERVER` is defined it will use that along with optional `process.env.INDEXER_PORT` and `process.env.INDEXER_TOKEN`.\n *\n * If either aren't defined it will use the default LocalNet config.\n *\n * It will return a KMD configuration that uses `process.env.KMD_PORT` (or port 4002) if `process.env.ALGOD_SERVER` is defined,\n * otherwise it will use the default LocalNet config unless it detects testnet or mainnet.\n * @returns An instance of the `AlgorandClient`.\n * @example\n * const client = AlgorandClient.fromEnvironment();\n */\n public static fromEnvironment() {\n return new AlgorandClient(ClientManager.getConfigFromEnvironmentOrLocalNet())\n }\n\n /**\n * Creates an `AlgorandClient` from the given config.\n * @param config The config to use.\n * @returns An instance of the `AlgorandClient`.\n * @example\n * const client = AlgorandClient.fromConfig({ algodConfig, indexerConfig, kmdConfig });\n */\n public static fromConfig(config: AlgoConfig) {\n return new AlgorandClient(config)\n }\n}\n"],"mappings":"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"}
@@ -7,6 +7,7 @@ import { AlgorandClientTransactionCreator } from "./algorand-client-transaction-
7
7
  import { AlgorandClientTransactionSender } from "./algorand-client-transaction-sender.mjs";
8
8
  import { AppDeployer } from "./app-deployer.mjs";
9
9
  import { AssetManager } from "./asset-manager.mjs";
10
+ import { NetworkManager } from "./network-manager.mjs";
10
11
 
11
12
  //#region src/algorand-client.ts
12
13
  /**
@@ -18,6 +19,7 @@ var AlgorandClient = class AlgorandClient {
18
19
  _appManager;
19
20
  _appDeployer;
20
21
  _assetManager;
22
+ _networkManager;
21
23
  _transactionSender;
22
24
  _transactionCreator;
23
25
  _cachedSuggestedParams;
@@ -35,6 +37,7 @@ var AlgorandClient = class AlgorandClient {
35
37
  this._accountManager = new AccountManager(this._clientManager, { ed25519Generator: config.ed25519Generator ?? nobleEd25519Generator });
36
38
  this._appManager = new AppManager(this._clientManager.algod);
37
39
  this._assetManager = new AssetManager(this._clientManager.algod, (config) => this.newGroup(config));
40
+ this._networkManager = new NetworkManager(this._clientManager.algod, this);
38
41
  this._transactionSender = new AlgorandClientTransactionSender((config) => this.newGroup(config), this._assetManager, this._appManager);
39
42
  this._transactionCreator = new AlgorandClientTransactionCreator((config) => this.newGroup(config));
40
43
  this._appDeployer = new AppDeployer(this._appManager, this._transactionSender, this._clientManager.indexerIfPresent);
@@ -186,6 +189,25 @@ var AlgorandClient = class AlgorandClient {
186
189
  return this._appDeployer;
187
190
  }
188
191
  /**
192
+ * Methods for interacting with the network.
193
+ * Provides utilities for querying blockchain state and waiting for specific conditions.
194
+ * @returns The `NetworkManager` instance.
195
+ * @example
196
+ * ```typescript
197
+ * // Get last round
198
+ * const lastRound = await algorand.network.getLastRound()
199
+ *
200
+ * // Wait for a specific round
201
+ * await algorand.network.waitUntilRound(1000n)
202
+ *
203
+ * // LocalNet-specific: block warp
204
+ * await algorand.network.localNet.blockWarp(100n)
205
+ * ```
206
+ */
207
+ get network() {
208
+ return this._networkManager;
209
+ }
210
+ /**
189
211
  * Register a function that will be used to transform an error caught when simulating or executing
190
212
  * composed transaction groups made from `newGroup`
191
213
  */
@@ -1 +1 @@
1
- {"version":3,"file":"algorand-client.mjs","names":[],"sources":["../src/algorand-client.ts"],"sourcesContent":["import { SuggestedParams } from '@algorandfoundation/algokit-algod-client'\nimport { Address, ReadableAddress } from '@algorandfoundation/algokit-common'\nimport { AddressWithTransactionSigner, LogicSigAccount, TransactionSigner, MultisigAccount } from '@algorandfoundation/algokit-transact'\nimport { AccountManager, AccountManagerConfig } from './account-manager'\nimport { AlgorandClientTransactionCreator } from './algorand-client-transaction-creator'\nimport { AlgorandClientTransactionSender } from './algorand-client-transaction-sender'\nimport { AppDeployer } from './app-deployer'\nimport { AppManager } from './app-manager'\nimport { AssetManager } from './asset-manager'\nimport { AlgoSdkClients, ClientManager } from './client-manager'\nimport { ErrorTransformer, TransactionComposer, TransactionComposerConfig } from './composer'\nimport { AlgoConfig } from './network-client'\nimport { nobleEd25519Generator } from '@algorandfoundation/algokit-crypto'\n\n\n/**\n * A client that brokers easy access to Algorand functionality.\n */\nexport class AlgorandClient {\n private _clientManager: ClientManager\n private _accountManager: AccountManager\n private _appManager: AppManager\n private _appDeployer: AppDeployer\n private _assetManager: AssetManager\n private _transactionSender: AlgorandClientTransactionSender\n private _transactionCreator: AlgorandClientTransactionCreator\n\n private _cachedSuggestedParams?: SuggestedParams\n private _cachedSuggestedParamsExpiry?: Date\n private _cachedSuggestedParamsTimeout: number = 3_000 // three seconds\n\n private _defaultValidityWindow: bigint | undefined = undefined\n\n /**\n * A set of error transformers to use when an error is caught in simulate or execute\n * `registerErrorTransformer` and `unregisterErrorTransformer` can be used to add and remove\n * error transformers from the set.\n */\n private _errorTransformers: Set<ErrorTransformer> = new Set()\n\n private constructor(config: (AlgoConfig | AlgoSdkClients) & Partial<AccountManagerConfig>) {\n this._clientManager = new ClientManager(config, this)\n this._accountManager = new AccountManager(this._clientManager, { ed25519Generator: config.ed25519Generator ?? nobleEd25519Generator })\n this._appManager = new AppManager(this._clientManager.algod)\n this._assetManager = new AssetManager(this._clientManager.algod, (config) => this.newGroup(config))\n this._transactionSender = new AlgorandClientTransactionSender((config) => this.newGroup(config), this._assetManager, this._appManager)\n this._transactionCreator = new AlgorandClientTransactionCreator((config) => this.newGroup(config))\n this._appDeployer = new AppDeployer(this._appManager, this._transactionSender, this._clientManager.indexerIfPresent)\n }\n\n /**\n * Sets the default validity window for transactions.\n * @param validityWindow The number of rounds between the first and last valid rounds\n * @returns The `AlgorandClient` so method calls can be chained\n * @example\n * ```typescript\n * const algorand = AlgorandClient.mainNet().setDefaultValidityWindow(1000);\n * ```\n */\n public setDefaultValidityWindow(validityWindow: number | bigint) {\n this._defaultValidityWindow = BigInt(validityWindow)\n return this\n }\n\n /**\n * Sets the default signer to use if no other signer is specified.\n * @param signer The signer to use, either a `TransactionSigner` or a `AddressWithSigner`\n * @returns The `AlgorandClient` so method calls can be chained\n * @example\n * ```typescript\n * const signer = new SigningAccount(account, account.addr)\n * const algorand = AlgorandClient.mainNet().setDefaultSigner(signer)\n * ```\n */\n public setDefaultSigner(signer: TransactionSigner | AddressWithTransactionSigner): AlgorandClient {\n this._accountManager.setDefaultSigner(signer)\n return this\n }\n\n /**\n * Tracks the given account (object that encapsulates an address and a signer) for later signing.\n * @param account The account to register, which can be a `AddressWithSigner` or\n * a `algosdk.Account`, `algosdk.LogicSigAccount`, `SigningAccount` or `MultisigAccount`\n * @example\n * ```typescript\n * const accountManager = AlgorandClient.mainNet()\n * .setSignerFromAccount(algosdk.generateAccount())\n * .setSignerFromAccount(new algosdk.LogicSigAccount(program, args))\n * .setSignerFromAccount(new SigningAccount(account, sender))\n * .setSignerFromAccount(new MultisigAccount({version: 1, threshold: 1, addrs: [\"ADDRESS1...\", \"ADDRESS2...\"]}, [account1, account2]))\n * .setSignerFromAccount({addr: \"SENDERADDRESS\", signer: transactionSigner})\n * ```\n * @returns The `AlgorandClient` so method calls can be chained\n */\n public setSignerFromAccount(account: AddressWithTransactionSigner | LogicSigAccount | MultisigAccount) {\n this._accountManager.setSignerFromAccount(account)\n return this\n }\n\n /**\n * Tracks the given signer against the given sender for later signing.\n * @param sender The sender address to use this signer for\n * @param signer The signer to sign transactions with for the given sender\n * @returns The `AlgorandClient` so method calls can be chained\n * @example\n * ```typescript\n * const signer = new SigningAccount(account, account.addr)\n * const algorand = AlgorandClient.mainNet().setSigner(signer.addr, signer.signer)\n * ```\n */\n public setSigner(sender: string | Address, signer: TransactionSigner) {\n this._accountManager.setSigner(sender, signer)\n return this\n }\n\n /**\n * Sets a cache value to use for suggested transaction params.\n * @param suggestedParams The suggested params to use\n * @param until A date until which to cache, or if not specified then the timeout is used\n * @returns The `AlgorandClient` so method calls can be chained\n * @example\n * ```typescript\n * const algorand = AlgorandClient.mainNet().setSuggestedParamsCache(suggestedParams, new Date(+new Date() + 3_600_000))\n * ```\n */\n public setSuggestedParamsCache(suggestedParams: SuggestedParams, until?: Date) {\n this._cachedSuggestedParams = suggestedParams\n this._cachedSuggestedParamsExpiry = until ?? new Date(+new Date() + this._cachedSuggestedParamsTimeout)\n return this\n }\n\n /**\n * Sets the timeout for caching suggested params.\n * @param timeout The timeout in milliseconds\n * @returns The `AlgorandClient` so method calls can be chained\n * @example\n * ```typescript\n * const algorand = AlgorandClient.mainNet().setSuggestedParamsCacheTimeout(10_000)\n * ```\n */\n public setSuggestedParamsCacheTimeout(timeout: number) {\n this._cachedSuggestedParamsTimeout = timeout\n return this\n }\n\n /**\n * Get suggested params for a transaction (either cached or from algod if the cache is stale or empty)\n * @returns The suggested transaction parameters.\n * @example\n * const params = await AlgorandClient.mainNet().getSuggestedParams();\n */\n public async getSuggestedParams(): Promise<SuggestedParams> {\n if (this._cachedSuggestedParams && (!this._cachedSuggestedParamsExpiry || this._cachedSuggestedParamsExpiry > new Date())) {\n return {\n ...this._cachedSuggestedParams,\n }\n }\n\n this._cachedSuggestedParams = await this._clientManager.algod.suggestedParams()\n this._cachedSuggestedParamsExpiry = new Date(new Date().getTime() + this._cachedSuggestedParamsTimeout)\n\n return {\n ...this._cachedSuggestedParams,\n }\n }\n\n /**\n * Get clients, including algosdk clients and app clients.\n * @returns The `ClientManager` instance.\n * @example\n * const clientManager = AlgorandClient.mainNet().client;\n */\n public get client() {\n return this._clientManager\n }\n\n /**\n * Get or create accounts that can sign transactions.\n * @returns The `AccountManager` instance.\n * @example\n * const accountManager = AlgorandClient.mainNet().account;\n */\n public get account() {\n return this._accountManager\n }\n\n /**\n * Methods for interacting with assets.\n * @returns The `AssetManager` instance.\n * @example\n * const assetManager = AlgorandClient.mainNet().asset;\n */\n public get asset() {\n return this._assetManager\n }\n\n /**\n * Methods for interacting with apps.\n * @returns The `AppManager` instance.\n * @example\n * const appManager = AlgorandClient.mainNet().app;\n */\n public get app() {\n return this._appManager\n }\n\n /**\n * Methods for deploying apps and managing app deployment metadata.\n * @returns The `AppDeployer` instance.\n * @example\n * const deployer = AlgorandClient.mainNet().appDeployer;\n */\n public get appDeployer() {\n return this._appDeployer\n }\n\n /**\n * Register a function that will be used to transform an error caught when simulating or executing\n * composed transaction groups made from `newGroup`\n */\n public registerErrorTransformer(transformer: ErrorTransformer) {\n this._errorTransformers.add(transformer)\n }\n\n public unregisterErrorTransformer(transformer: ErrorTransformer) {\n this._errorTransformers.delete(transformer)\n }\n\n /** Start a new `TransactionComposer` transaction group\n * @returns A new instance of `TransactionComposer`.\n * @example\n * {@includeCode ./algorand-client.spec.ts#example-newGroup}\n * @see [Full working example](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/algorand-client.spec.ts)\n */\n public newGroup(composerConfig?: TransactionComposerConfig) {\n return new TransactionComposer({\n algod: this.client.algod,\n getSigner: (addr: ReadableAddress) => this.account.getSigner(addr),\n getSuggestedParams: () => this.getSuggestedParams(),\n defaultValidityWindow: this._defaultValidityWindow,\n appManager: this._appManager,\n errorTransformers: [...this._errorTransformers],\n composerConfig: composerConfig,\n })\n }\n\n /**\n * Methods for sending a transaction.\n * @returns The `AlgorandClientTransactionSender` instance.\n * @example\n * const result = await AlgorandClient.mainNet().send.payment({\n * sender: \"SENDERADDRESS\",\n * receiver: \"RECEIVERADDRESS\",\n * amount: algo(1)\n * })\n */\n public get send() {\n return this._transactionSender\n }\n\n /**\n * Methods for creating a transaction.\n * @returns The `AlgorandClientTransactionCreator` instance.\n * @example\n * const payment = await AlgorandClient.mainNet().createTransaction.payment({\n * sender: \"SENDERADDRESS\",\n * receiver: \"RECEIVERADDRESS\",\n * amount: algo(1)\n * })\n */\n public get createTransaction() {\n return this._transactionCreator\n }\n\n // Static methods to create an `AlgorandClient`\n\n /**\n * Creates an `AlgorandClient` pointing at default LocalNet ports and API token.\n * @returns An instance of the `AlgorandClient`.\n * @example\n * {@includeCode ./algorand-client.spec.ts#example-defaultLocalNet}\n * @see [Full working example](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/algorand-client.spec.ts)\n */\n public static defaultLocalNet() {\n return new AlgorandClient({\n algodConfig: ClientManager.getDefaultLocalNetConfig('algod'),\n indexerConfig: ClientManager.getDefaultLocalNetConfig('indexer'),\n kmdConfig: ClientManager.getDefaultLocalNetConfig('kmd'),\n })\n }\n\n /**\n * Creates an `AlgorandClient` pointing at TestNet using AlgoNode.\n * @returns An instance of the `AlgorandClient`.\n * @example\n * const algorand = AlgorandClient.testNet();\n */\n public static testNet() {\n return new AlgorandClient({\n algodConfig: ClientManager.getAlgoNodeConfig('testnet', 'algod'),\n indexerConfig: ClientManager.getAlgoNodeConfig('testnet', 'indexer'),\n kmdConfig: undefined,\n })\n }\n\n /**\n * Creates an `AlgorandClient` pointing at MainNet using AlgoNode.\n * @returns An instance of the `AlgorandClient`.\n * @example\n * const algorand = AlgorandClient.mainNet();\n */\n public static mainNet() {\n return new AlgorandClient({\n algodConfig: ClientManager.getAlgoNodeConfig('mainnet', 'algod'),\n indexerConfig: ClientManager.getAlgoNodeConfig('mainnet', 'indexer'),\n kmdConfig: undefined,\n })\n }\n\n /**\n * Creates an `AlgorandClient` pointing to the given client(s).\n * @param clients The clients to use.\n * @returns An instance of the `AlgorandClient`.\n * @example\n * const algorand = AlgorandClient.fromClients({ algod, indexer, kmd });\n */\n public static fromClients(clients: AlgoSdkClients) {\n return new AlgorandClient(clients)\n }\n\n /**\n * Creates an `AlgorandClient` loading the configuration from environment variables.\n *\n * Retrieve configurations from environment variables when defined or get default LocalNet configuration if they aren't defined.\n *\n * Expects to be called from a Node.js environment.\n *\n * If `process.env.ALGOD_SERVER` is defined it will use that along with optional `process.env.ALGOD_PORT` and `process.env.ALGOD_TOKEN`.\n *\n * If `process.env.INDEXER_SERVER` is defined it will use that along with optional `process.env.INDEXER_PORT` and `process.env.INDEXER_TOKEN`.\n *\n * If either aren't defined it will use the default LocalNet config.\n *\n * It will return a KMD configuration that uses `process.env.KMD_PORT` (or port 4002) if `process.env.ALGOD_SERVER` is defined,\n * otherwise it will use the default LocalNet config unless it detects testnet or mainnet.\n * @returns An instance of the `AlgorandClient`.\n * @example\n * const client = AlgorandClient.fromEnvironment();\n */\n public static fromEnvironment() {\n return new AlgorandClient(ClientManager.getConfigFromEnvironmentOrLocalNet())\n }\n\n /**\n * Creates an `AlgorandClient` from the given config.\n * @param config The config to use.\n * @returns An instance of the `AlgorandClient`.\n * @example\n * const client = AlgorandClient.fromConfig({ algodConfig, indexerConfig, kmdConfig });\n */\n public static fromConfig(config: AlgoConfig) {\n return new AlgorandClient(config)\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"algorand-client.mjs","names":[],"sources":["../src/algorand-client.ts"],"sourcesContent":["import { SuggestedParams } from '@algorandfoundation/algokit-algod-client'\nimport { Address, ReadableAddress } from '@algorandfoundation/algokit-common'\nimport { nobleEd25519Generator } from '@algorandfoundation/algokit-crypto'\nimport { AddressWithTransactionSigner, LogicSigAccount, MultisigAccount, TransactionSigner } from '@algorandfoundation/algokit-transact'\nimport { AccountManager, AccountManagerConfig } from './account-manager'\nimport { AlgorandClientTransactionCreator } from './algorand-client-transaction-creator'\nimport { AlgorandClientTransactionSender } from './algorand-client-transaction-sender'\nimport { AppDeployer } from './app-deployer'\nimport { AppManager } from './app-manager'\nimport { AssetManager } from './asset-manager'\nimport { AlgoSdkClients, ClientManager } from './client-manager'\nimport { ErrorTransformer, TransactionComposer, TransactionComposerConfig } from './composer'\nimport { AlgoConfig } from './network-client'\nimport { NetworkManager } from './network-manager'\n\n/**\n * A client that brokers easy access to Algorand functionality.\n */\nexport class AlgorandClient {\n private _clientManager: ClientManager\n private _accountManager: AccountManager\n private _appManager: AppManager\n private _appDeployer: AppDeployer\n private _assetManager: AssetManager\n private _networkManager: NetworkManager\n private _transactionSender: AlgorandClientTransactionSender\n private _transactionCreator: AlgorandClientTransactionCreator\n\n private _cachedSuggestedParams?: SuggestedParams\n private _cachedSuggestedParamsExpiry?: Date\n private _cachedSuggestedParamsTimeout: number = 3_000 // three seconds\n\n private _defaultValidityWindow: bigint | undefined = undefined\n\n /**\n * A set of error transformers to use when an error is caught in simulate or execute\n * `registerErrorTransformer` and `unregisterErrorTransformer` can be used to add and remove\n * error transformers from the set.\n */\n private _errorTransformers: Set<ErrorTransformer> = new Set()\n\n private constructor(config: (AlgoConfig | AlgoSdkClients) & Partial<AccountManagerConfig>) {\n this._clientManager = new ClientManager(config, this)\n this._accountManager = new AccountManager(this._clientManager, { ed25519Generator: config.ed25519Generator ?? nobleEd25519Generator })\n this._appManager = new AppManager(this._clientManager.algod)\n this._assetManager = new AssetManager(this._clientManager.algod, (config) => this.newGroup(config))\n this._networkManager = new NetworkManager(this._clientManager.algod, this)\n this._transactionSender = new AlgorandClientTransactionSender((config) => this.newGroup(config), this._assetManager, this._appManager)\n this._transactionCreator = new AlgorandClientTransactionCreator((config) => this.newGroup(config))\n this._appDeployer = new AppDeployer(this._appManager, this._transactionSender, this._clientManager.indexerIfPresent)\n }\n\n /**\n * Sets the default validity window for transactions.\n * @param validityWindow The number of rounds between the first and last valid rounds\n * @returns The `AlgorandClient` so method calls can be chained\n * @example\n * ```typescript\n * const algorand = AlgorandClient.mainNet().setDefaultValidityWindow(1000);\n * ```\n */\n public setDefaultValidityWindow(validityWindow: number | bigint) {\n this._defaultValidityWindow = BigInt(validityWindow)\n return this\n }\n\n /**\n * Sets the default signer to use if no other signer is specified.\n * @param signer The signer to use, either a `TransactionSigner` or a `AddressWithSigner`\n * @returns The `AlgorandClient` so method calls can be chained\n * @example\n * ```typescript\n * const signer = new SigningAccount(account, account.addr)\n * const algorand = AlgorandClient.mainNet().setDefaultSigner(signer)\n * ```\n */\n public setDefaultSigner(signer: TransactionSigner | AddressWithTransactionSigner): AlgorandClient {\n this._accountManager.setDefaultSigner(signer)\n return this\n }\n\n /**\n * Tracks the given account (object that encapsulates an address and a signer) for later signing.\n * @param account The account to register, which can be a `AddressWithSigner` or\n * a `algosdk.Account`, `algosdk.LogicSigAccount`, `SigningAccount` or `MultisigAccount`\n * @example\n * ```typescript\n * const accountManager = AlgorandClient.mainNet()\n * .setSignerFromAccount(algosdk.generateAccount())\n * .setSignerFromAccount(new algosdk.LogicSigAccount(program, args))\n * .setSignerFromAccount(new SigningAccount(account, sender))\n * .setSignerFromAccount(new MultisigAccount({version: 1, threshold: 1, addrs: [\"ADDRESS1...\", \"ADDRESS2...\"]}, [account1, account2]))\n * .setSignerFromAccount({addr: \"SENDERADDRESS\", signer: transactionSigner})\n * ```\n * @returns The `AlgorandClient` so method calls can be chained\n */\n public setSignerFromAccount(account: AddressWithTransactionSigner | LogicSigAccount | MultisigAccount) {\n this._accountManager.setSignerFromAccount(account)\n return this\n }\n\n /**\n * Tracks the given signer against the given sender for later signing.\n * @param sender The sender address to use this signer for\n * @param signer The signer to sign transactions with for the given sender\n * @returns The `AlgorandClient` so method calls can be chained\n * @example\n * ```typescript\n * const signer = new SigningAccount(account, account.addr)\n * const algorand = AlgorandClient.mainNet().setSigner(signer.addr, signer.signer)\n * ```\n */\n public setSigner(sender: string | Address, signer: TransactionSigner) {\n this._accountManager.setSigner(sender, signer)\n return this\n }\n\n /**\n * Sets a cache value to use for suggested transaction params.\n * @param suggestedParams The suggested params to use\n * @param until A date until which to cache, or if not specified then the timeout is used\n * @returns The `AlgorandClient` so method calls can be chained\n * @example\n * ```typescript\n * const algorand = AlgorandClient.mainNet().setSuggestedParamsCache(suggestedParams, new Date(+new Date() + 3_600_000))\n * ```\n */\n public setSuggestedParamsCache(suggestedParams: SuggestedParams, until?: Date) {\n this._cachedSuggestedParams = suggestedParams\n this._cachedSuggestedParamsExpiry = until ?? new Date(+new Date() + this._cachedSuggestedParamsTimeout)\n return this\n }\n\n /**\n * Sets the timeout for caching suggested params.\n * @param timeout The timeout in milliseconds\n * @returns The `AlgorandClient` so method calls can be chained\n * @example\n * ```typescript\n * const algorand = AlgorandClient.mainNet().setSuggestedParamsCacheTimeout(10_000)\n * ```\n */\n public setSuggestedParamsCacheTimeout(timeout: number) {\n this._cachedSuggestedParamsTimeout = timeout\n return this\n }\n\n /**\n * Get suggested params for a transaction (either cached or from algod if the cache is stale or empty)\n * @returns The suggested transaction parameters.\n * @example\n * const params = await AlgorandClient.mainNet().getSuggestedParams();\n */\n public async getSuggestedParams(): Promise<SuggestedParams> {\n if (this._cachedSuggestedParams && (!this._cachedSuggestedParamsExpiry || this._cachedSuggestedParamsExpiry > new Date())) {\n return {\n ...this._cachedSuggestedParams,\n }\n }\n\n this._cachedSuggestedParams = await this._clientManager.algod.suggestedParams()\n this._cachedSuggestedParamsExpiry = new Date(new Date().getTime() + this._cachedSuggestedParamsTimeout)\n\n return {\n ...this._cachedSuggestedParams,\n }\n }\n\n /**\n * Get clients, including algosdk clients and app clients.\n * @returns The `ClientManager` instance.\n * @example\n * const clientManager = AlgorandClient.mainNet().client;\n */\n public get client() {\n return this._clientManager\n }\n\n /**\n * Get or create accounts that can sign transactions.\n * @returns The `AccountManager` instance.\n * @example\n * const accountManager = AlgorandClient.mainNet().account;\n */\n public get account() {\n return this._accountManager\n }\n\n /**\n * Methods for interacting with assets.\n * @returns The `AssetManager` instance.\n * @example\n * const assetManager = AlgorandClient.mainNet().asset;\n */\n public get asset() {\n return this._assetManager\n }\n\n /**\n * Methods for interacting with apps.\n * @returns The `AppManager` instance.\n * @example\n * const appManager = AlgorandClient.mainNet().app;\n */\n public get app() {\n return this._appManager\n }\n\n /**\n * Methods for deploying apps and managing app deployment metadata.\n * @returns The `AppDeployer` instance.\n * @example\n * const deployer = AlgorandClient.mainNet().appDeployer;\n */\n public get appDeployer() {\n return this._appDeployer\n }\n\n /**\n * Methods for interacting with the network.\n * Provides utilities for querying blockchain state and waiting for specific conditions.\n * @returns The `NetworkManager` instance.\n * @example\n * ```typescript\n * // Get last round\n * const lastRound = await algorand.network.getLastRound()\n *\n * // Wait for a specific round\n * await algorand.network.waitUntilRound(1000n)\n *\n * // LocalNet-specific: block warp\n * await algorand.network.localNet.blockWarp(100n)\n * ```\n */\n public get network() {\n return this._networkManager\n }\n\n /**\n * Register a function that will be used to transform an error caught when simulating or executing\n * composed transaction groups made from `newGroup`\n */\n public registerErrorTransformer(transformer: ErrorTransformer) {\n this._errorTransformers.add(transformer)\n }\n\n public unregisterErrorTransformer(transformer: ErrorTransformer) {\n this._errorTransformers.delete(transformer)\n }\n\n /** Start a new `TransactionComposer` transaction group\n * @returns A new instance of `TransactionComposer`.\n * @example\n * {@includeCode ./algorand-client.spec.ts#example-newGroup}\n * @see [Full working example](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/algorand-client.spec.ts)\n */\n public newGroup(composerConfig?: TransactionComposerConfig) {\n return new TransactionComposer({\n algod: this.client.algod,\n getSigner: (addr: ReadableAddress) => this.account.getSigner(addr),\n getSuggestedParams: () => this.getSuggestedParams(),\n defaultValidityWindow: this._defaultValidityWindow,\n appManager: this._appManager,\n errorTransformers: [...this._errorTransformers],\n composerConfig: composerConfig,\n })\n }\n\n /**\n * Methods for sending a transaction.\n * @returns The `AlgorandClientTransactionSender` instance.\n * @example\n * const result = await AlgorandClient.mainNet().send.payment({\n * sender: \"SENDERADDRESS\",\n * receiver: \"RECEIVERADDRESS\",\n * amount: algo(1)\n * })\n */\n public get send() {\n return this._transactionSender\n }\n\n /**\n * Methods for creating a transaction.\n * @returns The `AlgorandClientTransactionCreator` instance.\n * @example\n * const payment = await AlgorandClient.mainNet().createTransaction.payment({\n * sender: \"SENDERADDRESS\",\n * receiver: \"RECEIVERADDRESS\",\n * amount: algo(1)\n * })\n */\n public get createTransaction() {\n return this._transactionCreator\n }\n\n // Static methods to create an `AlgorandClient`\n\n /**\n * Creates an `AlgorandClient` pointing at default LocalNet ports and API token.\n * @returns An instance of the `AlgorandClient`.\n * @example\n * {@includeCode ./algorand-client.spec.ts#example-defaultLocalNet}\n * @see [Full working example](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/algorand-client.spec.ts)\n */\n public static defaultLocalNet() {\n return new AlgorandClient({\n algodConfig: ClientManager.getDefaultLocalNetConfig('algod'),\n indexerConfig: ClientManager.getDefaultLocalNetConfig('indexer'),\n kmdConfig: ClientManager.getDefaultLocalNetConfig('kmd'),\n })\n }\n\n /**\n * Creates an `AlgorandClient` pointing at TestNet using AlgoNode.\n * @returns An instance of the `AlgorandClient`.\n * @example\n * const algorand = AlgorandClient.testNet();\n */\n public static testNet() {\n return new AlgorandClient({\n algodConfig: ClientManager.getAlgoNodeConfig('testnet', 'algod'),\n indexerConfig: ClientManager.getAlgoNodeConfig('testnet', 'indexer'),\n kmdConfig: undefined,\n })\n }\n\n /**\n * Creates an `AlgorandClient` pointing at MainNet using AlgoNode.\n * @returns An instance of the `AlgorandClient`.\n * @example\n * const algorand = AlgorandClient.mainNet();\n */\n public static mainNet() {\n return new AlgorandClient({\n algodConfig: ClientManager.getAlgoNodeConfig('mainnet', 'algod'),\n indexerConfig: ClientManager.getAlgoNodeConfig('mainnet', 'indexer'),\n kmdConfig: undefined,\n })\n }\n\n /**\n * Creates an `AlgorandClient` pointing to the given client(s).\n * @param clients The clients to use.\n * @returns An instance of the `AlgorandClient`.\n * @example\n * const algorand = AlgorandClient.fromClients({ algod, indexer, kmd });\n */\n public static fromClients(clients: AlgoSdkClients) {\n return new AlgorandClient(clients)\n }\n\n /**\n * Creates an `AlgorandClient` loading the configuration from environment variables.\n *\n * Retrieve configurations from environment variables when defined or get default LocalNet configuration if they aren't defined.\n *\n * Expects to be called from a Node.js environment.\n *\n * If `process.env.ALGOD_SERVER` is defined it will use that along with optional `process.env.ALGOD_PORT` and `process.env.ALGOD_TOKEN`.\n *\n * If `process.env.INDEXER_SERVER` is defined it will use that along with optional `process.env.INDEXER_PORT` and `process.env.INDEXER_TOKEN`.\n *\n * If either aren't defined it will use the default LocalNet config.\n *\n * It will return a KMD configuration that uses `process.env.KMD_PORT` (or port 4002) if `process.env.ALGOD_SERVER` is defined,\n * otherwise it will use the default LocalNet config unless it detects testnet or mainnet.\n * @returns An instance of the `AlgorandClient`.\n * @example\n * const client = AlgorandClient.fromEnvironment();\n */\n public static fromEnvironment() {\n return new AlgorandClient(ClientManager.getConfigFromEnvironmentOrLocalNet())\n }\n\n /**\n * Creates an `AlgorandClient` from the given config.\n * @param config The config to use.\n * @returns An instance of the `AlgorandClient`.\n * @example\n * const client = AlgorandClient.fromConfig({ algodConfig, indexerConfig, kmdConfig });\n */\n public static fromConfig(config: AlgoConfig) {\n return new AlgorandClient(config)\n }\n}\n"],"mappings":"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"}
package/app-client.js CHANGED
@@ -1,10 +1,10 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
2
  const require_runtime = require('./_virtual/_rolldown/runtime.js');
3
3
  const require_address = require('./packages/common/src/address.js');
4
- const require_config = require('./config.js');
5
- const require_util = require('./util.js');
6
4
  const require_sourcemap = require('./packages/common/src/sourcemap.js');
7
5
  const require_app_call = require('./packages/transact/src/transactions/app-call.js');
6
+ const require_config = require('./config.js');
7
+ const require_util = require('./util.js');
8
8
  const require_lifecycle_events = require('./lifecycle-events.js');
9
9
  const require_abi_method = require('./packages/abi/src/abi-method.js');
10
10
  const require_arc56_contract = require('./packages/abi/src/arc56-contract.js');
package/app-client.mjs CHANGED
@@ -1,8 +1,8 @@
1
1
  import { getAddress, getApplicationAddress, getOptionalAddress } from "./packages/common/src/address.mjs";
2
- import { Config } from "./config.mjs";
3
- import { asJson, binaryStartsWith } from "./util.mjs";
4
2
  import { ProgramSourceMap } from "./packages/common/src/sourcemap.mjs";
5
3
  import { OnApplicationComplete } from "./packages/transact/src/transactions/app-call.mjs";
4
+ import { Config } from "./config.mjs";
5
+ import { asJson, binaryStartsWith } from "./util.mjs";
6
6
  import { EventType } from "./lifecycle-events.mjs";
7
7
  import { argTypeIsTransaction, getABIDecodedValue, getABIEncodedValue, getABIMethod } from "./packages/abi/src/abi-method.mjs";
8
8
  import { getBoxABIStorageKey, getBoxABIStorageKeys, getBoxABIStorageMap, getGlobalABIStorageKeys, getGlobalABIStorageMaps, getLocalABIStorageKeys, getLocalABIStorageMaps } from "./packages/abi/src/arc56-contract.mjs";
package/app-deployer.js CHANGED
@@ -1,9 +1,9 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
2
  const require_address = require('./packages/common/src/address.js');
3
+ const require_transaction_type = require('./packages/transact/src/transactions/transaction-type.js');
3
4
  const require_config = require('./config.js');
4
5
  const require_app = require('./app.js');
5
6
  const require_util = require('./util.js');
6
- const require_transaction_type = require('./packages/transact/src/transactions/transaction-type.js');
7
7
  const require_composer = require('./composer.js');
8
8
  const require_indexer_lookup = require('./indexer-client/indexer-lookup.js');
9
9
 
package/app-deployer.mjs CHANGED
@@ -1,8 +1,8 @@
1
1
  import { Address, getAddress, getApplicationAddress } from "./packages/common/src/address.mjs";
2
+ import { TransactionType } from "./packages/transact/src/transactions/transaction-type.mjs";
2
3
  import { Config } from "./config.mjs";
3
4
  import { APP_DEPLOY_NOTE_DAPP, OnSchemaBreak, OnUpdate } from "./app.mjs";
4
5
  import { calculateExtraProgramPages } from "./util.mjs";
5
- import { TransactionType } from "./packages/transact/src/transactions/transaction-type.mjs";
6
6
  import { TransactionComposer } from "./composer.mjs";
7
7
  import { lookupAccountCreatedApplicationByAddress, searchTransactions } from "./indexer-client/indexer-lookup.mjs";
8
8
 
package/app-factory.js CHANGED
@@ -1,8 +1,8 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
2
  const require_address = require('./packages/common/src/address.js');
3
- const require_app = require('./app.js');
4
3
  const require_sourcemap = require('./packages/common/src/sourcemap.js');
5
4
  const require_app_call = require('./packages/transact/src/transactions/app-call.js');
5
+ const require_app = require('./app.js');
6
6
  const require_abi_method = require('./packages/abi/src/abi-method.js');
7
7
  const require_app_client = require('./app-client.js');
8
8
 
package/app-factory.mjs CHANGED
@@ -1,7 +1,7 @@
1
1
  import { getAddress, getOptionalAddress } from "./packages/common/src/address.mjs";
2
- import { DELETABLE_TEMPLATE_NAME, UPDATABLE_TEMPLATE_NAME } from "./app.mjs";
3
2
  import { ProgramSourceMap } from "./packages/common/src/sourcemap.mjs";
4
3
  import { OnApplicationComplete } from "./packages/transact/src/transactions/app-call.mjs";
4
+ import { DELETABLE_TEMPLATE_NAME, UPDATABLE_TEMPLATE_NAME } from "./app.mjs";
5
5
  import { argTypeIsTransaction, getABIDecodedValue, getABIMethod } from "./packages/abi/src/abi-method.mjs";
6
6
  import { AppClient } from "./app-client.mjs";
7
7
 
package/app-manager.js CHANGED
@@ -1,7 +1,7 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
2
  const require_address = require('./packages/common/src/address.js');
3
- const require_app = require('./app.js');
4
3
  const require_sourcemap = require('./packages/common/src/sourcemap.js');
4
+ const require_app = require('./app.js');
5
5
 
6
6
  //#region src/app-manager.ts
7
7
  /** Allows management of application information. */
package/app-manager.mjs CHANGED
@@ -1,6 +1,6 @@
1
1
  import { getAddress, getApplicationAddress } from "./packages/common/src/address.mjs";
2
- import { ABI_RETURN_PREFIX, DELETABLE_TEMPLATE_NAME, UPDATABLE_TEMPLATE_NAME } from "./app.mjs";
3
2
  import { ProgramSourceMap } from "./packages/common/src/sourcemap.mjs";
3
+ import { ABI_RETURN_PREFIX, DELETABLE_TEMPLATE_NAME, UPDATABLE_TEMPLATE_NAME } from "./app.mjs";
4
4
 
5
5
  //#region src/app-manager.ts
6
6
  /** Allows management of application information. */
package/composer.js CHANGED
@@ -1,15 +1,15 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
2
  const require_runtime = require('./_virtual/_rolldown/runtime.js');
3
3
  const require_constants = require('./packages/common/src/constants.js');
4
- const require_amount = require('./amount.js');
5
- const require_config = require('./config.js');
6
- const require_util = require('./util.js');
7
- const require_transaction = require('./transaction/transaction.js');
8
4
  const require_app_call = require('./packages/transact/src/transactions/app-call.js');
9
5
  const require_transaction_type = require('./packages/transact/src/transactions/transaction-type.js');
10
- const require_transaction$1 = require('./packages/transact/src/transactions/transaction.js');
6
+ const require_transaction = require('./packages/transact/src/transactions/transaction.js');
11
7
  const require_signed_transaction = require('./packages/transact/src/transactions/signed-transaction.js');
12
8
  const require_signer = require('./packages/transact/src/signer.js');
9
+ const require_amount = require('./amount.js');
10
+ const require_config = require('./config.js');
11
+ const require_util = require('./util.js');
12
+ const require_transaction$1 = require('./transaction/transaction.js');
13
13
  const require_app_manager = require('./app-manager.js');
14
14
  const require_app_call$1 = require('./transactions/app-call.js');
15
15
  const require_asset_transfer = require('./transactions/asset-transfer.js');
@@ -130,7 +130,7 @@ var TransactionComposer = class TransactionComposer {
130
130
  };
131
131
  case "txn": {
132
132
  const { txn: transaction, signer, maxFee } = txn.data;
133
- const clonedTxn = require_transaction$1.decodeTransaction(require_transaction$1.encodeTransactionRaw(transaction));
133
+ const clonedTxn = require_transaction.decodeTransaction(require_transaction.encodeTransactionRaw(transaction));
134
134
  delete clonedTxn.group;
135
135
  return {
136
136
  type: "txn",
@@ -147,7 +147,7 @@ var TransactionComposer = class TransactionComposer {
147
147
  type: "asyncTxn",
148
148
  data: {
149
149
  txn: txnPromise.then((resolvedTxn) => {
150
- const clonedTxn = require_transaction$1.decodeTransaction(require_transaction$1.encodeTransactionRaw(resolvedTxn));
150
+ const clonedTxn = require_transaction.decodeTransaction(require_transaction.encodeTransactionRaw(resolvedTxn));
151
151
  delete clonedTxn.group;
152
152
  return clonedTxn;
153
153
  }),
@@ -207,7 +207,7 @@ var TransactionComposer = class TransactionComposer {
207
207
  */
208
208
  addTransaction(transaction, signer) {
209
209
  if (transaction.group) throw new Error("Cannot add a transaction to the composer because it is already in a group");
210
- require_transaction$1.validateTransaction(transaction);
210
+ require_transaction.validateTransaction(transaction);
211
211
  this.push({
212
212
  data: {
213
213
  txn: transaction,
@@ -1087,7 +1087,7 @@ var TransactionComposer = class TransactionComposer {
1087
1087
  if (!this.transactionsWithSigners) {
1088
1088
  const suggestedParams = await this.getSuggestedParams();
1089
1089
  const builtTransactions = await this._buildTransactions(suggestedParams);
1090
- this.rawBuildTransactions = builtTransactions.transactions.map((txn) => new require_transaction$1.Transaction({ ...txn }));
1090
+ this.rawBuildTransactions = builtTransactions.transactions.map((txn) => new require_transaction.Transaction({ ...txn }));
1091
1091
  const groupAnalysis = (this.composerConfig.coverAppCallInnerTransactionFees || this.composerConfig.populateAppCallResources) && builtTransactions.transactions.some((txn) => txn.type === require_transaction_type.TransactionType.AppCall) ? await this.analyzeGroupRequirements(builtTransactions.transactions, suggestedParams, this.composerConfig) : void 0;
1092
1092
  this.populateTransactionAndGroupResources(builtTransactions.transactions, groupAnalysis);
1093
1093
  this.transactionsWithSigners = builtTransactions.transactions.map((txn, index) => {
@@ -1112,13 +1112,13 @@ var TransactionComposer = class TransactionComposer {
1112
1112
  const transactions = new Array();
1113
1113
  let transactionIndex = 0;
1114
1114
  for (const ctxn of this.txns) if (ctxn.type === "txn") {
1115
- require_transaction$1.validateTransaction(ctxn.data.txn);
1115
+ require_transaction.validateTransaction(ctxn.data.txn);
1116
1116
  transactions.push(ctxn.data.txn);
1117
1117
  if (ctxn.data.signer) signers.set(transactionIndex, ctxn.data.signer);
1118
1118
  transactionIndex++;
1119
1119
  } else if (ctxn.type === "asyncTxn") {
1120
1120
  const transaction = await ctxn.data.txn;
1121
- require_transaction$1.validateTransaction(transaction);
1121
+ require_transaction.validateTransaction(transaction);
1122
1122
  transactions.push(transaction);
1123
1123
  if (ctxn.data.signer) signers.set(transactionIndex, ctxn.data.signer);
1124
1124
  transactionIndex++;
@@ -1164,13 +1164,13 @@ var TransactionComposer = class TransactionComposer {
1164
1164
  break;
1165
1165
  default: throw new Error(`Unsupported transaction type: ${ctxn.type}`);
1166
1166
  }
1167
- if (transaction.fee === void 0) transaction = require_transaction$1.assignFee(transaction, {
1167
+ if (transaction.fee === void 0) transaction = require_transaction.assignFee(transaction, {
1168
1168
  feePerByte: suggestedParams.fee,
1169
1169
  minFee: suggestedParams.minFee,
1170
1170
  extraFee: ctxn.data.extraFee?.microAlgos,
1171
1171
  maxFee: ctxn.data.maxFee?.microAlgos
1172
1172
  });
1173
- require_transaction$1.validateTransaction(transaction);
1173
+ require_transaction.validateTransaction(transaction);
1174
1174
  transactions.push(transaction);
1175
1175
  if (ctxn.data.signer) {
1176
1176
  const signer = "signer" in ctxn.data.signer ? ctxn.data.signer.signer : ctxn.data.signer;
@@ -1260,7 +1260,7 @@ var TransactionComposer = class TransactionComposer {
1260
1260
  if (groupAnalysis.unnamedResourcesAccessed) require_app_call$1.populateGroupResources(transactions, groupAnalysis.unnamedResourcesAccessed);
1261
1261
  }
1262
1262
  if (transactions.length > 1) {
1263
- const groupedTransactions = require_transaction$1.groupTransactions(transactions);
1263
+ const groupedTransactions = require_transaction.groupTransactions(transactions);
1264
1264
  transactions.forEach((t) => t.group = groupedTransactions[0].group);
1265
1265
  return transactions;
1266
1266
  } else return transactions;
@@ -1276,9 +1276,9 @@ var TransactionComposer = class TransactionComposer {
1276
1276
  if (logicalMaxFee !== void 0) params.fee = logicalMaxFee;
1277
1277
  else appCallIndexesWithoutMaxFees.push(groupIndex);
1278
1278
  }
1279
- return new require_transaction$1.Transaction(params);
1279
+ return new require_transaction.Transaction(params);
1280
1280
  });
1281
- if (transactionsToSimulate.length > 1) transactionsToSimulate = require_transaction$1.groupTransactions(transactionsToSimulate);
1281
+ if (transactionsToSimulate.length > 1) transactionsToSimulate = require_transaction.groupTransactions(transactionsToSimulate);
1282
1282
  if (analysisParams.coverAppCallInnerTransactionFees && appCallIndexesWithoutMaxFees.length > 0) throw new Error(`Please provide a maxFee for each app call transaction when coverAppCallInnerTransactionFees is enabled. Required for transaction ${appCallIndexesWithoutMaxFees.join(", ")}`);
1283
1283
  const simulateRequest = {
1284
1284
  txnGroups: [{ txns: transactionsToSimulate.map((txn) => ({
@@ -1305,7 +1305,7 @@ var TransactionComposer = class TransactionComposer {
1305
1305
  const btxn = transactions[groupIndex];
1306
1306
  let requiredFeeDelta;
1307
1307
  if (analysisParams.coverAppCallInnerTransactionFees) {
1308
- const minTxnFee = require_transaction$1.calculateFee(btxn, {
1308
+ const minTxnFee = require_transaction.calculateFee(btxn, {
1309
1309
  feePerByte: suggestedParams.fee,
1310
1310
  minFee: suggestedParams.minFee
1311
1311
  });
@@ -1409,7 +1409,7 @@ var TransactionComposer = class TransactionComposer {
1409
1409
  if (transactionsToSend.length > 1 && group) require_config.Config.getLogger(params?.suppressLog).verbose(`Group transaction (${buffer.Buffer.from(group).toString("base64")}) sent with ${transactionsToSend.length} transactions`);
1410
1410
  else require_config.Config.getLogger(params?.suppressLog).verbose(`Sent transaction ID ${transactionsToSend[0].txId()} ${transactionsToSend[0].type} from ${transactionsToSend[0].sender}`);
1411
1411
  let confirmations = new Array();
1412
- if (params?.maxRoundsToWaitForConfirmation !== 0) confirmations = await Promise.all(transactionIds.map(async (id) => await require_transaction.waitForConfirmation(id, waitRounds, this.algod)));
1412
+ if (params?.maxRoundsToWaitForConfirmation !== 0) confirmations = await Promise.all(transactionIds.map(async (id) => await require_transaction$1.waitForConfirmation(id, waitRounds, this.algod)));
1413
1413
  const abiReturns = this.parseAbiReturnValues(confirmations);
1414
1414
  return {
1415
1415
  groupId: group ? buffer.Buffer.from(group).toString("base64") : void 0,
@@ -1425,7 +1425,7 @@ var TransactionComposer = class TransactionComposer {
1425
1425
  if (typeof originalError === "object") err.name = originalError.name;
1426
1426
  let sentTransactions;
1427
1427
  if (this.transactionsWithSigners) sentTransactions = this.transactionsWithSigners.map((t) => t.txn);
1428
- else if (this.rawBuildTransactions) sentTransactions = this.rawBuildTransactions.length > 1 ? require_transaction$1.groupTransactions(this.rawBuildTransactions) : this.rawBuildTransactions;
1428
+ else if (this.rawBuildTransactions) sentTransactions = this.rawBuildTransactions.length > 1 ? require_transaction.groupTransactions(this.rawBuildTransactions) : this.rawBuildTransactions;
1429
1429
  if (require_config.Config.debug && typeof originalError === "object" && sentTransactions) {
1430
1430
  err.traces = [];
1431
1431
  require_config.Config.getLogger(params?.suppressLog).error("Received error executing Transaction Composer and debug flag enabled; attempting simulation to get more information", err);
@@ -1468,7 +1468,7 @@ var TransactionComposer = class TransactionComposer {
1468
1468
  let transactionsWithSigner;
1469
1469
  if (!this.transactionsWithSigners) {
1470
1470
  const builtTransactions = await this.buildTransactions();
1471
- transactionsWithSigner = (builtTransactions.transactions.length > 1 ? require_transaction$1.groupTransactions(builtTransactions.transactions) : builtTransactions.transactions).map((txn, index) => ({
1471
+ transactionsWithSigner = (builtTransactions.transactions.length > 1 ? require_transaction.groupTransactions(builtTransactions.transactions) : builtTransactions.transactions).map((txn, index) => ({
1472
1472
  txn,
1473
1473
  signer: skipSignatures ? require_signer.makeEmptyTransactionSigner() : builtTransactions.signers.get(index) ?? require_signer.makeEmptyTransactionSigner()
1474
1474
  }));