@algorandfoundation/algokit-utils 6.3.0-beta.1 → 7.0.0-alpha.2

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 (379) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +22 -26
  3. package/account/account.d.ts +12 -10
  4. package/account/account.js +17 -14
  5. package/account/account.js.map +1 -1
  6. package/account/account.mjs +18 -15
  7. package/account/account.mjs.map +1 -1
  8. package/account/get-account-config-from-environment.d.ts +0 -1
  9. package/account/get-account-config-from-environment.js.map +1 -1
  10. package/account/get-account-config-from-environment.mjs.map +1 -1
  11. package/account/get-account.d.ts +2 -3
  12. package/account/get-account.js +1 -1
  13. package/account/get-account.js.map +1 -1
  14. package/account/get-account.mjs +1 -1
  15. package/account/get-account.mjs.map +1 -1
  16. package/account/get-dispenser-account.d.ts +2 -3
  17. package/account/get-dispenser-account.js +1 -1
  18. package/account/get-dispenser-account.js.map +1 -1
  19. package/account/get-dispenser-account.mjs +1 -1
  20. package/account/get-dispenser-account.mjs.map +1 -1
  21. package/account/index.d.ts +0 -1
  22. package/account/mnemonic-account.d.ts +1 -2
  23. package/account/mnemonic-account.js +1 -1
  24. package/account/mnemonic-account.js.map +1 -1
  25. package/account/mnemonic-account.mjs +1 -1
  26. package/account/mnemonic-account.mjs.map +1 -1
  27. package/amount.d.ts +15 -5
  28. package/amount.js +9 -2
  29. package/amount.js.map +1 -1
  30. package/amount.mjs +9 -3
  31. package/amount.mjs.map +1 -1
  32. package/app-client.d.ts +19 -5
  33. package/app-client.js +19 -4
  34. package/app-client.js.map +1 -1
  35. package/app-client.mjs +19 -4
  36. package/app-client.mjs.map +1 -1
  37. package/app-deploy.d.ts +18 -2
  38. package/app-deploy.js +159 -342
  39. package/app-deploy.js.map +1 -1
  40. package/app-deploy.mjs +163 -346
  41. package/app-deploy.mjs.map +1 -1
  42. package/app.d.ts +39 -3
  43. package/app.js +121 -371
  44. package/app.js.map +1 -1
  45. package/app.mjs +122 -372
  46. package/app.mjs.map +1 -1
  47. package/asset.d.ts +5 -6
  48. package/asset.js +5 -8
  49. package/asset.js.map +1 -1
  50. package/asset.mjs +5 -8
  51. package/asset.mjs.map +1 -1
  52. package/config.d.ts +0 -1
  53. package/config.js.map +1 -1
  54. package/config.mjs.map +1 -1
  55. package/debugging/debugging.d.ts +3 -5
  56. package/debugging/debugging.js +4 -128
  57. package/debugging/debugging.js.map +1 -1
  58. package/debugging/debugging.mjs +4 -109
  59. package/debugging/debugging.mjs.map +1 -1
  60. package/debugging/index.d.ts +0 -2
  61. package/dispenser-client.d.ts +0 -1
  62. package/dispenser-client.js.map +1 -1
  63. package/dispenser-client.mjs.map +1 -1
  64. package/index.d.ts +5 -4
  65. package/index.js +36 -26
  66. package/index.js.map +1 -1
  67. package/index.mjs +6 -5
  68. package/index.mjs.map +1 -1
  69. package/indexer-lookup.d.ts +10 -9
  70. package/indexer-lookup.js +14 -10
  71. package/indexer-lookup.js.map +1 -1
  72. package/indexer-lookup.mjs +14 -10
  73. package/indexer-lookup.mjs.map +1 -1
  74. package/localnet/get-kmd-wallet-account.d.ts +1 -2
  75. package/localnet/get-kmd-wallet-account.js +1 -1
  76. package/localnet/get-kmd-wallet-account.js.map +1 -1
  77. package/localnet/get-kmd-wallet-account.mjs +1 -1
  78. package/localnet/get-kmd-wallet-account.mjs.map +1 -1
  79. package/localnet/get-localnet-dispenser-account.d.ts +1 -2
  80. package/localnet/get-localnet-dispenser-account.js +1 -1
  81. package/localnet/get-localnet-dispenser-account.js.map +1 -1
  82. package/localnet/get-localnet-dispenser-account.mjs +1 -1
  83. package/localnet/get-localnet-dispenser-account.mjs.map +1 -1
  84. package/localnet/get-or-create-kmd-wallet-account.d.ts +1 -2
  85. package/localnet/get-or-create-kmd-wallet-account.js +1 -1
  86. package/localnet/get-or-create-kmd-wallet-account.js.map +1 -1
  87. package/localnet/get-or-create-kmd-wallet-account.mjs +1 -1
  88. package/localnet/get-or-create-kmd-wallet-account.mjs.map +1 -1
  89. package/localnet/index.d.ts +0 -1
  90. package/localnet/is-localnet.d.ts +1 -2
  91. package/localnet/is-localnet.js +1 -1
  92. package/localnet/is-localnet.js.map +1 -1
  93. package/localnet/is-localnet.mjs +1 -1
  94. package/localnet/is-localnet.mjs.map +1 -1
  95. package/network-client.d.ts +3 -10
  96. package/network-client.js +4 -11
  97. package/network-client.js.map +1 -1
  98. package/network-client.mjs +4 -11
  99. package/network-client.mjs.map +1 -1
  100. package/package.json +3 -4
  101. package/testing/_asset.d.ts +2 -2
  102. package/testing/account.d.ts +4 -4
  103. package/testing/account.js +8 -2
  104. package/testing/account.js.map +1 -1
  105. package/testing/account.mjs +9 -3
  106. package/testing/account.mjs.map +1 -1
  107. package/testing/fixtures/algokit-log-capture-fixture.d.ts +0 -1
  108. package/testing/fixtures/algokit-log-capture-fixture.js.map +1 -1
  109. package/testing/fixtures/algokit-log-capture-fixture.mjs.map +1 -1
  110. package/testing/fixtures/algorand-fixture.d.ts +0 -1
  111. package/testing/fixtures/algorand-fixture.js +13 -14
  112. package/testing/fixtures/algorand-fixture.js.map +1 -1
  113. package/testing/fixtures/algorand-fixture.mjs +13 -14
  114. package/testing/fixtures/algorand-fixture.mjs.map +1 -1
  115. package/testing/fixtures/index.d.ts +0 -1
  116. package/testing/index.d.ts +0 -1
  117. package/testing/indexer.d.ts +0 -1
  118. package/testing/indexer.js.map +1 -1
  119. package/testing/indexer.mjs.map +1 -1
  120. package/testing/test-logger.d.ts +0 -1
  121. package/testing/test-logger.js +7 -3
  122. package/testing/test-logger.js.map +1 -1
  123. package/testing/test-logger.mjs +7 -3
  124. package/testing/test-logger.mjs.map +1 -1
  125. package/testing/transaction-logger.d.ts +0 -1
  126. package/testing/transaction-logger.js.map +1 -1
  127. package/testing/transaction-logger.mjs.map +1 -1
  128. package/transaction/index.d.ts +0 -1
  129. package/transaction/legacy-bridge.d.ts +31 -6
  130. package/transaction/legacy-bridge.js +101 -7
  131. package/transaction/legacy-bridge.js.map +1 -1
  132. package/transaction/legacy-bridge.mjs +101 -10
  133. package/transaction/legacy-bridge.mjs.map +1 -1
  134. package/transaction/perform-atomic-transaction-composer-simulate.d.ts +4 -2
  135. package/transaction/perform-atomic-transaction-composer-simulate.js +14 -9
  136. package/transaction/perform-atomic-transaction-composer-simulate.js.map +1 -1
  137. package/transaction/perform-atomic-transaction-composer-simulate.mjs +15 -10
  138. package/transaction/perform-atomic-transaction-composer-simulate.mjs.map +1 -1
  139. package/transaction/transaction.d.ts +38 -19
  140. package/transaction/transaction.js +217 -137
  141. package/transaction/transaction.js.map +1 -1
  142. package/transaction/transaction.mjs +218 -138
  143. package/transaction/transaction.mjs.map +1 -1
  144. package/transfer/index.d.ts +0 -1
  145. package/transfer/transfer-algos.d.ts +1 -2
  146. package/transfer/transfer-algos.js +1 -1
  147. package/transfer/transfer-algos.js.map +1 -1
  148. package/transfer/transfer-algos.mjs +1 -1
  149. package/transfer/transfer-algos.mjs.map +1 -1
  150. package/transfer/transfer.d.ts +1 -2
  151. package/transfer/transfer.js +6 -4
  152. package/transfer/transfer.js.map +1 -1
  153. package/transfer/transfer.mjs +6 -4
  154. package/transfer/transfer.mjs.map +1 -1
  155. package/types/account-manager.d.ts +33 -25
  156. package/types/account-manager.js +54 -31
  157. package/types/account-manager.js.map +1 -1
  158. package/types/account-manager.mjs +56 -33
  159. package/types/account-manager.mjs.map +1 -1
  160. package/types/account.d.ts +17 -9
  161. package/types/account.js +2 -2
  162. package/types/account.js.map +1 -1
  163. package/types/account.mjs +3 -3
  164. package/types/account.mjs.map +1 -1
  165. package/types/algo-http-client-with-retry.d.ts +1 -3
  166. package/types/algo-http-client-with-retry.js +33 -3
  167. package/types/algo-http-client-with-retry.js.map +1 -1
  168. package/types/algo-http-client-with-retry.mjs +32 -2
  169. package/types/algo-http-client-with-retry.mjs.map +1 -1
  170. package/types/algorand-client-interface.d.ts +28 -0
  171. package/types/algorand-client-interface.js +3 -0
  172. package/types/algorand-client-interface.js.map +1 -0
  173. package/types/algorand-client-interface.mjs +2 -0
  174. package/types/algorand-client-interface.mjs.map +1 -0
  175. package/types/algorand-client-transaction-creator.d.ts +452 -23
  176. package/types/algorand-client-transaction-creator.js +407 -23
  177. package/types/algorand-client-transaction-creator.js.map +1 -1
  178. package/types/algorand-client-transaction-creator.mjs +407 -23
  179. package/types/algorand-client-transaction-creator.mjs.map +1 -1
  180. package/types/algorand-client-transaction-sender.d.ts +772 -47
  181. package/types/algorand-client-transaction-sender.js +445 -15
  182. package/types/algorand-client-transaction-sender.js.map +1 -1
  183. package/types/algorand-client-transaction-sender.mjs +445 -15
  184. package/types/algorand-client-transaction-sender.mjs.map +1 -1
  185. package/types/algorand-client.d.ts +24 -17
  186. package/types/algorand-client.js +26 -16
  187. package/types/algorand-client.js.map +1 -1
  188. package/types/algorand-client.mjs +28 -15
  189. package/types/algorand-client.mjs.map +1 -1
  190. package/types/amount.d.ts +10 -11
  191. package/types/amount.js +7 -7
  192. package/types/amount.js.map +1 -1
  193. package/types/amount.mjs +7 -7
  194. package/types/amount.mjs.map +1 -1
  195. package/types/app-arc56.d.ts +359 -0
  196. package/types/app-arc56.js +184 -0
  197. package/types/app-arc56.js.map +1 -0
  198. package/types/app-arc56.mjs +175 -0
  199. package/types/app-arc56.mjs.map +1 -0
  200. package/types/app-client.d.ts +1508 -12
  201. package/types/app-client.js +1018 -29
  202. package/types/app-client.js.map +1 -1
  203. package/types/app-client.mjs +1020 -32
  204. package/types/app-client.mjs.map +1 -1
  205. package/types/app-deployer.d.ts +126 -0
  206. package/types/app-deployer.js +353 -0
  207. package/types/app-deployer.js.map +1 -0
  208. package/types/app-deployer.mjs +351 -0
  209. package/types/app-deployer.mjs.map +1 -0
  210. package/types/app-factory.d.ts +846 -0
  211. package/types/app-factory.js +410 -0
  212. package/types/app-factory.js.map +1 -0
  213. package/types/app-factory.mjs +408 -0
  214. package/types/app-factory.mjs.map +1 -0
  215. package/types/app-manager.d.ts +244 -0
  216. package/types/app-manager.js +423 -0
  217. package/types/app-manager.js.map +1 -0
  218. package/types/app-manager.mjs +421 -0
  219. package/types/app-manager.mjs.map +1 -0
  220. package/types/app-spec.d.ts +2 -1
  221. package/types/app-spec.js +127 -0
  222. package/types/app-spec.js.map +1 -1
  223. package/types/app-spec.mjs +126 -0
  224. package/types/app-spec.mjs.map +1 -1
  225. package/types/app.d.ts +57 -18
  226. package/types/app.js +1 -1
  227. package/types/app.js.map +1 -1
  228. package/types/app.mjs +1 -1
  229. package/types/app.mjs.map +1 -1
  230. package/types/asset-manager.d.ts +10 -10
  231. package/types/asset-manager.js +13 -17
  232. package/types/asset-manager.js.map +1 -1
  233. package/types/asset-manager.mjs +13 -17
  234. package/types/asset-manager.mjs.map +1 -1
  235. package/types/asset.d.ts +0 -1
  236. package/types/async-event-emitter.d.ts +14 -0
  237. package/types/async-event-emitter.js +50 -0
  238. package/types/async-event-emitter.js.map +1 -0
  239. package/types/async-event-emitter.mjs +48 -0
  240. package/types/async-event-emitter.mjs.map +1 -0
  241. package/types/client-manager.d.ts +135 -60
  242. package/types/client-manager.js +158 -44
  243. package/types/client-manager.js.map +1 -1
  244. package/types/client-manager.mjs +159 -45
  245. package/types/client-manager.mjs.map +1 -1
  246. package/types/composer.d.ts +271 -87
  247. package/types/composer.js +405 -125
  248. package/types/composer.js.map +1 -1
  249. package/types/composer.mjs +407 -125
  250. package/types/composer.mjs.map +1 -1
  251. package/types/config.d.ts +3 -6
  252. package/types/config.js +5 -44
  253. package/types/config.js.map +1 -1
  254. package/types/config.mjs +5 -27
  255. package/types/config.mjs.map +1 -1
  256. package/types/debugging.d.ts +29 -101
  257. package/types/debugging.js +16 -109
  258. package/types/debugging.js.map +1 -1
  259. package/types/debugging.mjs +12 -107
  260. package/types/debugging.mjs.map +1 -1
  261. package/types/dispenser-client.d.ts +2 -2
  262. package/types/dispenser-client.js +10 -5
  263. package/types/dispenser-client.js.map +1 -1
  264. package/types/dispenser-client.mjs +10 -5
  265. package/types/dispenser-client.mjs.map +1 -1
  266. package/types/expand.d.ts +7 -0
  267. package/types/expand.js +3 -0
  268. package/types/expand.js.map +1 -0
  269. package/types/expand.mjs +2 -0
  270. package/types/expand.mjs.map +1 -0
  271. package/types/indexer.d.ts +74 -756
  272. package/types/indexer.js.map +1 -1
  273. package/types/indexer.mjs.map +1 -1
  274. package/types/kmd-account-manager.d.ts +2 -3
  275. package/types/kmd-account-manager.js +3 -3
  276. package/types/kmd-account-manager.js.map +1 -1
  277. package/types/kmd-account-manager.mjs +4 -4
  278. package/types/kmd-account-manager.mjs.map +1 -1
  279. package/types/lifecycle-events.d.ts +10 -0
  280. package/types/lifecycle-events.js +8 -0
  281. package/types/lifecycle-events.js.map +1 -0
  282. package/types/lifecycle-events.mjs +8 -0
  283. package/types/lifecycle-events.mjs.map +1 -0
  284. package/types/logging.d.ts +0 -1
  285. package/types/logging.js.map +1 -1
  286. package/types/logging.mjs.map +1 -1
  287. package/types/logic-error.d.ts +2 -4
  288. package/types/logic-error.js +3 -3
  289. package/types/logic-error.js.map +1 -1
  290. package/types/logic-error.mjs +3 -3
  291. package/types/logic-error.mjs.map +1 -1
  292. package/types/network-client.d.ts +14 -2
  293. package/types/network-client.js.map +1 -1
  294. package/types/network-client.mjs.map +1 -1
  295. package/types/testing.d.ts +8 -10
  296. package/types/transaction.d.ts +17 -4
  297. package/types/transfer.d.ts +0 -1
  298. package/util.d.ts +2 -2
  299. package/util.js +11 -10
  300. package/util.js.map +1 -1
  301. package/util.mjs +11 -10
  302. package/util.mjs.map +1 -1
  303. package/account/account.d.ts.map +0 -1
  304. package/account/get-account-config-from-environment.d.ts.map +0 -1
  305. package/account/get-account.d.ts.map +0 -1
  306. package/account/get-dispenser-account.d.ts.map +0 -1
  307. package/account/index.d.ts.map +0 -1
  308. package/account/mnemonic-account.d.ts.map +0 -1
  309. package/amount.d.ts.map +0 -1
  310. package/app-client.d.ts.map +0 -1
  311. package/app-deploy.d.ts.map +0 -1
  312. package/app.d.ts.map +0 -1
  313. package/asset.d.ts.map +0 -1
  314. package/config.d.ts.map +0 -1
  315. package/debugging/debugging.d.ts.map +0 -1
  316. package/debugging/index.d.ts.map +0 -1
  317. package/debugging/simulate-and-persist-response.d.ts +0 -20
  318. package/debugging/simulate-and-persist-response.d.ts.map +0 -1
  319. package/debugging/simulate-and-persist-response.js +0 -108
  320. package/debugging/simulate-and-persist-response.js.map +0 -1
  321. package/debugging/simulate-and-persist-response.mjs +0 -89
  322. package/debugging/simulate-and-persist-response.mjs.map +0 -1
  323. package/dispenser-client.d.ts.map +0 -1
  324. package/index.d.ts.map +0 -1
  325. package/indexer-lookup.d.ts.map +0 -1
  326. package/localnet/get-kmd-wallet-account.d.ts.map +0 -1
  327. package/localnet/get-localnet-dispenser-account.d.ts.map +0 -1
  328. package/localnet/get-or-create-kmd-wallet-account.d.ts.map +0 -1
  329. package/localnet/index.d.ts.map +0 -1
  330. package/localnet/is-localnet.d.ts.map +0 -1
  331. package/network-client.d.ts.map +0 -1
  332. package/testing/_asset.d.ts.map +0 -1
  333. package/testing/account.d.ts.map +0 -1
  334. package/testing/fixtures/algokit-log-capture-fixture.d.ts.map +0 -1
  335. package/testing/fixtures/algorand-fixture.d.ts.map +0 -1
  336. package/testing/fixtures/index.d.ts.map +0 -1
  337. package/testing/index.d.ts.map +0 -1
  338. package/testing/indexer.d.ts.map +0 -1
  339. package/testing/test-logger.d.ts.map +0 -1
  340. package/testing/transaction-logger.d.ts.map +0 -1
  341. package/transaction/index.d.ts.map +0 -1
  342. package/transaction/legacy-bridge.d.ts.map +0 -1
  343. package/transaction/perform-atomic-transaction-composer-simulate.d.ts.map +0 -1
  344. package/transaction/transaction.d.ts.map +0 -1
  345. package/transfer/index.d.ts.map +0 -1
  346. package/transfer/transfer-algos.d.ts.map +0 -1
  347. package/transfer/transfer.d.ts.map +0 -1
  348. package/types/account-manager.d.ts.map +0 -1
  349. package/types/account.d.ts.map +0 -1
  350. package/types/algo-http-client-with-retry.d.ts.map +0 -1
  351. package/types/algorand-client-transaction-creator.d.ts.map +0 -1
  352. package/types/algorand-client-transaction-sender.d.ts.map +0 -1
  353. package/types/algorand-client.d.ts.map +0 -1
  354. package/types/amount.d.ts.map +0 -1
  355. package/types/app-client.d.ts.map +0 -1
  356. package/types/app-spec.d.ts.map +0 -1
  357. package/types/app.d.ts.map +0 -1
  358. package/types/asset-manager.d.ts.map +0 -1
  359. package/types/asset.d.ts.map +0 -1
  360. package/types/client-manager.d.ts.map +0 -1
  361. package/types/composer.d.ts.map +0 -1
  362. package/types/config.d.ts.map +0 -1
  363. package/types/debugging.d.ts.map +0 -1
  364. package/types/dispenser-client.d.ts.map +0 -1
  365. package/types/indexer.d.ts.map +0 -1
  366. package/types/kmd-account-manager.d.ts.map +0 -1
  367. package/types/logging.d.ts.map +0 -1
  368. package/types/logic-error.d.ts.map +0 -1
  369. package/types/network-client.d.ts.map +0 -1
  370. package/types/testing.d.ts.map +0 -1
  371. package/types/transaction.d.ts.map +0 -1
  372. package/types/transfer.d.ts.map +0 -1
  373. package/types/urlTokenBaseHTTPClient.d.ts +0 -41
  374. package/types/urlTokenBaseHTTPClient.d.ts.map +0 -1
  375. package/types/urlTokenBaseHTTPClient.js +0 -153
  376. package/types/urlTokenBaseHTTPClient.js.map +0 -1
  377. package/types/urlTokenBaseHTTPClient.mjs +0 -151
  378. package/types/urlTokenBaseHTTPClient.mjs.map +0 -1
  379. package/util.d.ts.map +0 -1
@@ -9,7 +9,7 @@ var types_composer = require('./composer.js');
9
9
  var types_kmdAccountManager = require('./kmd-account-manager.js');
10
10
 
11
11
  var LogicSigAccount = algosdk.LogicSigAccount;
12
- var AccountInformationModel = algosdk.modelsv2.Account;
12
+ const address = (address) => (typeof address === 'string' ? algosdk.Address.fromString(address) : address);
13
13
  /**
14
14
  * Returns a `TransactionSigner` for the given account that can sign a transaction.
15
15
  * This function has memoization, so will return the same transaction signer for a given account.
@@ -39,7 +39,7 @@ class AccountManager {
39
39
  this._kmdAccountManager = new types_kmdAccountManager.KmdAccountManager(clientManager);
40
40
  }
41
41
  _getComposer(getSuggestedParams) {
42
- return new types_composer.default({
42
+ return new types_composer.TransactionComposer({
43
43
  algod: this._clientManager.algod,
44
44
  getSigner: this.getSigner.bind(this),
45
45
  getSuggestedParams: getSuggestedParams ?? (() => this._clientManager.algod.getTransactionParams().do()),
@@ -74,12 +74,18 @@ class AccountManager {
74
74
  * retrieval and returns a `TransactionSignerAccount` along with the original account in an `account` property.
75
75
  */
76
76
  signerAccount(account) {
77
+ const signer = getAccountTransactionSigner(account);
77
78
  const acc = {
78
79
  addr: 'addr' in account ? account.addr : account.address(),
79
- signer: getAccountTransactionSigner(account),
80
+ signer: signer,
80
81
  };
81
- this._accounts[acc.addr] = acc;
82
- return { ...acc, account };
82
+ this._accounts[acc.addr.toString()] = acc;
83
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
84
+ const addressWithAccount = algosdk.Address.fromString(acc.addr.toString());
85
+ addressWithAccount.account = account;
86
+ addressWithAccount.addr = acc.addr.toString();
87
+ addressWithAccount.signer = signer;
88
+ return addressWithAccount;
83
89
  }
84
90
  /**
85
91
  * Tracks the given account for later signing.
@@ -115,9 +121,23 @@ class AccountManager {
115
121
  * @returns The `AccountManager` instance for method chaining
116
122
  */
117
123
  setSigner(sender, signer) {
118
- this._accounts[sender] = { addr: sender, signer };
124
+ this._accounts[address(sender).toString()] = { addr: address(sender), signer };
119
125
  return this;
120
126
  }
127
+ /**
128
+ * Takes all registered signers from the given `AccountManager` and adds them to this `AccountManager`.
129
+ *
130
+ * This is useful for situations where you have multiple contexts you are building accounts in such as unit tests.
131
+ * @param anotherAccountManager Another account manager with signers registered
132
+ * @param overwriteExisting Whether or not to overwrite any signers that have the same sender address with the ones in the other account manager or not (default: true)
133
+ * @returns The `AccountManager` instance for method chaining
134
+ */
135
+ setSigners(anotherAccountManager, overwriteExisting = true) {
136
+ this._accounts = overwriteExisting
137
+ ? { ...this._accounts, ...anotherAccountManager._accounts }
138
+ : { ...anotherAccountManager._accounts, ...this._accounts };
139
+ return;
140
+ }
121
141
  /**
122
142
  * Returns the `TransactionSigner` for the given sender address, ready to sign a transaction for that sender.
123
143
  *
@@ -132,7 +152,7 @@ class AccountManager {
132
152
  * @returns The `TransactionSigner` or throws an error if not found and no default signer is set
133
153
  */
134
154
  getSigner(sender) {
135
- const signer = this._accounts[sender]?.signer ?? this._defaultSigner;
155
+ const signer = this._accounts[address(sender).toString()]?.signer ?? this._defaultSigner;
136
156
  if (!signer)
137
157
  throw new Error(`No signer found for address ${sender}`);
138
158
  return signer;
@@ -144,7 +164,7 @@ class AccountManager {
144
164
  * @param sender The sender address
145
165
  * @example
146
166
  * ```typescript
147
- * const sender = accountManager.random().addr
167
+ * const sender = accountManager.random()
148
168
  * // ...
149
169
  * // Returns the `TransactionSignerAccount` for `sender` that has previously been registered
150
170
  * const account = accountManager.getAccount(sender)
@@ -152,7 +172,7 @@ class AccountManager {
152
172
  * @returns The `TransactionSignerAccount` or throws an error if not found
153
173
  */
154
174
  getAccount(sender) {
155
- const account = this._accounts[sender];
175
+ const account = this._accounts[address(sender).toString()];
156
176
  if (!account)
157
177
  throw new Error(`No signer found for address ${sender}`);
158
178
  return account;
@@ -171,24 +191,27 @@ class AccountManager {
171
191
  * @returns The account information
172
192
  */
173
193
  async getInformation(sender) {
174
- const account = AccountInformationModel.from_obj_for_encoding(await this._clientManager.algod.accountInformation(typeof sender === 'string' ? sender : sender.addr).do());
194
+ const { round, lastHeartbeat = undefined, lastProposed = undefined, address, ...account } = await this._clientManager.algod.accountInformation(sender).do();
175
195
  return {
176
196
  ...account,
177
- // None of these can practically overflow 2^53
197
+ // None of the Number types can practically overflow 2^53
198
+ address: algosdk.Address.fromString(address),
178
199
  balance: types_amount.AlgoAmount.MicroAlgo(Number(account.amount)),
179
200
  amountWithoutPendingRewards: types_amount.AlgoAmount.MicroAlgo(Number(account.amountWithoutPendingRewards)),
180
201
  minBalance: types_amount.AlgoAmount.MicroAlgo(Number(account.minBalance)),
181
202
  pendingRewards: types_amount.AlgoAmount.MicroAlgo(Number(account.pendingRewards)),
182
203
  rewards: types_amount.AlgoAmount.MicroAlgo(Number(account.rewards)),
183
- validAsOfRound: BigInt(account.round),
204
+ validAsOfRound: BigInt(round),
184
205
  totalAppsOptedIn: Number(account.totalAppsOptedIn),
185
206
  totalAssetsOptedIn: Number(account.totalAssetsOptedIn),
186
207
  totalCreatedApps: Number(account.totalCreatedApps),
187
208
  totalCreatedAssets: Number(account.totalCreatedAssets),
188
- appsTotalExtraPages: account.appsTotalExtraPages ? Number(account.appsTotalExtraPages) : undefined,
189
- rewardBase: account.rewardBase ? Number(account.rewardBase) : undefined,
190
- totalBoxBytes: account.totalBoxBytes ? Number(account.totalBoxBytes) : undefined,
191
- totalBoxes: account.totalBoxes ? Number(account.totalBoxes) : undefined,
209
+ appsTotalExtraPages: account.appsTotalExtraPages !== undefined ? Number(account.appsTotalExtraPages) : undefined,
210
+ rewardBase: account.rewardBase !== undefined ? Number(account.rewardBase) : undefined,
211
+ totalBoxBytes: account.totalBoxBytes !== undefined ? Number(account.totalBoxBytes) : undefined,
212
+ totalBoxes: account.totalBoxes !== undefined ? Number(account.totalBoxes) : undefined,
213
+ lastHeartbeatRound: lastHeartbeat !== undefined ? BigInt(lastHeartbeat) : undefined,
214
+ lastProposedRound: lastProposed !== undefined ? BigInt(lastProposed) : undefined,
192
215
  };
193
216
  }
194
217
  /**
@@ -221,7 +244,7 @@ class AccountManager {
221
244
  * @returns The account
222
245
  */
223
246
  rekeyed(sender, account) {
224
- return this.signerAccount({ addr: sender, signer: account.signer });
247
+ return this.signerAccount({ addr: address(sender), signer: account.signer });
225
248
  }
226
249
  /**
227
250
  * Tracks and returns an Algorand account with private key loaded by convention from environment variables based on the given name identifier.
@@ -409,15 +432,15 @@ class AccountManager {
409
432
  const result = await this._getComposer()
410
433
  .addPayment({
411
434
  ...options,
412
- sender: typeof account === 'string' ? account : account.addr,
413
- receiver: typeof account === 'string' ? account : account.addr,
435
+ sender: address(account),
436
+ receiver: address(account),
414
437
  amount: types_amount.AlgoAmount.MicroAlgo(0),
415
- rekeyTo: typeof rekeyTo === 'string' ? rekeyTo : rekeyTo.addr,
438
+ rekeyTo: address(typeof rekeyTo === 'object' && 'addr' in rekeyTo ? rekeyTo.addr : rekeyTo),
416
439
  })
417
- .execute(options);
440
+ .send(options);
418
441
  // If the rekey is a signing account set it as the signer for this account
419
- if (typeof rekeyTo !== 'string') {
420
- this.rekeyed(typeof account === 'string' ? account : account.addr, rekeyTo);
442
+ if (typeof rekeyTo === 'object' && 'addr' in rekeyTo) {
443
+ this.rekeyed(account, rekeyTo);
421
444
  }
422
445
  config.Config.getLogger(options?.suppressLog).info(`Rekeyed ${account} to ${rekeyTo} via transaction ${result.txIds.at(-1)}`);
423
446
  return { ...result, transaction: result.transactions.at(-1), confirmation: result.confirmations.at(-1) };
@@ -425,7 +448,7 @@ class AccountManager {
425
448
  async _getEnsureFundedAmount(sender, minSpendingBalance, minFundingIncrement) {
426
449
  const accountInfo = await this.getInformation(sender);
427
450
  const currentSpendingBalance = accountInfo.balance.microAlgo - accountInfo.minBalance.microAlgo;
428
- const amountFunded = util.calculateFundAmount(minSpendingBalance.microAlgo, currentSpendingBalance, minFundingIncrement?.microAlgo ?? 0);
451
+ const amountFunded = util.calculateFundAmount(minSpendingBalance.microAlgo, currentSpendingBalance, minFundingIncrement?.microAlgo ?? 0n);
429
452
  return amountFunded === null ? undefined : types_amount.AlgoAmount.MicroAlgo(amountFunded);
430
453
  }
431
454
  /**
@@ -453,18 +476,18 @@ class AccountManager {
453
476
  * - `undefined` if no funds were needed.
454
477
  */
455
478
  async ensureFunded(accountToFund, dispenserAccount, minSpendingBalance, options) {
456
- const addressToFund = typeof accountToFund === 'string' ? accountToFund : accountToFund.addr;
479
+ const addressToFund = address(accountToFund);
457
480
  const amountFunded = await this._getEnsureFundedAmount(addressToFund, minSpendingBalance, options?.minFundingIncrement);
458
481
  if (!amountFunded)
459
482
  return undefined;
460
483
  const result = await this._getComposer()
461
484
  .addPayment({
462
485
  ...options,
463
- sender: typeof dispenserAccount === 'string' ? dispenserAccount : dispenserAccount.addr,
486
+ sender: address(dispenserAccount),
464
487
  receiver: addressToFund,
465
488
  amount: amountFunded,
466
489
  })
467
- .execute(options);
490
+ .send(options);
468
491
  return {
469
492
  ...result,
470
493
  transaction: result.transactions[0],
@@ -504,7 +527,7 @@ class AccountManager {
504
527
  * - `undefined` if no funds were needed.
505
528
  */
506
529
  async ensureFundedFromEnvironment(accountToFund, minSpendingBalance, options) {
507
- const addressToFund = typeof accountToFund === 'string' ? accountToFund : accountToFund.addr;
530
+ const addressToFund = address(accountToFund);
508
531
  const dispenserAccount = await this.dispenserFromEnvironment();
509
532
  const amountFunded = await this._getEnsureFundedAmount(addressToFund, minSpendingBalance, options?.minFundingIncrement);
510
533
  if (!amountFunded)
@@ -512,11 +535,11 @@ class AccountManager {
512
535
  const result = await this._getComposer()
513
536
  .addPayment({
514
537
  ...options,
515
- sender: dispenserAccount.addr,
538
+ sender: dispenserAccount,
516
539
  receiver: addressToFund,
517
540
  amount: amountFunded,
518
541
  })
519
- .execute(options);
542
+ .send(options);
520
543
  return {
521
544
  ...result,
522
545
  transaction: result.transactions[0],
@@ -553,7 +576,7 @@ class AccountManager {
553
576
  if (!(await this._clientManager.isTestNet())) {
554
577
  throw new Error('Attempt to fund using TestNet dispenser API on non TestNet network.');
555
578
  }
556
- const addressToFund = typeof accountToFund === 'string' ? accountToFund : accountToFund.addr;
579
+ const addressToFund = address(accountToFund);
557
580
  const amountFunded = await this._getEnsureFundedAmount(addressToFund, minSpendingBalance, options?.minFundingIncrement);
558
581
  if (!amountFunded)
559
582
  return undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"account-manager.js","sources":["../../src/types/account-manager.ts"],"sourcesContent":[null],"names":["memoize","KmdAccountManager","AlgoKitComposer","AlgoAmount","SigningAccount","MultisigAccount","DISPENSER_ACCOUNT","Config","calculateFundAmount"],"mappings":";;;;;;;;;;AAUA,IAAO,eAAe,GAAG,OAAO,CAAC,eAAe,CAAA;AAGhD,IAAO,uBAAuB,GAAG,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAA;AAUzD;;;;;AAKG;AACU,MAAA,2BAA2B,GAAGA,YAAO,CAAC,UACjD,OAAgG,EAAA;IAEhG,OAAO,QAAQ,IAAI,OAAO;UACtB,OAAO,CAAC,MAAM;UACd,MAAM,IAAI,OAAO;AACjB,cAAE,OAAO,CAAC,oCAAoC,CAAC,OAAO,CAAC;AACvD,cAAE,OAAO,CAAC,iCAAiC,CAAC,OAAO,CAAC,CAAA;AAC1D,CAAC,EAAC;AAEF;MACa,cAAc,CAAA;AAMzB;;;;;;;AAOG;AACH,IAAA,WAAA,CAAY,aAA4B,EAAA;QAXhC,IAAS,CAAA,SAAA,GAAoD,EAAE,CAAA;AAYrE,QAAA,IAAI,CAAC,cAAc,GAAG,aAAa,CAAA;QACnC,IAAI,CAAC,kBAAkB,GAAG,IAAIC,yCAAiB,CAAC,aAAa,CAAC,CAAA;KAC/D;AAEO,IAAA,YAAY,CAAC,kBAA2D,EAAA;QAC9E,OAAO,IAAIC,sBAAe,CAAC;AACzB,YAAA,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC,KAAK;YAChC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;AACpC,YAAA,kBAAkB,EAAE,kBAAkB,KAAK,MAAM,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,oBAAoB,EAAE,CAAC,EAAE,EAAE,CAAC;AACxG,SAAA,CAAC,CAAA;KACH;;AAGD,IAAA,IAAW,GAAG,GAAA;QACZ,OAAO,IAAI,CAAC,kBAAkB,CAAA;KAC/B;AAED;;;;;;;;;;;;;;;AAeG;AACI,IAAA,gBAAgB,CAAC,MAA4D,EAAA;AAClF,QAAA,IAAI,CAAC,cAAc,GAAG,QAAQ,IAAI,MAAM,GAAG,MAAM,CAAC,MAAM,GAAG,MAAM,CAAA;AACjE,QAAA,OAAO,IAAI,CAAA;KACZ;AAED;;;AAGG;AACK,IAAA,aAAa,CACnB,OAAU,EAAA;AAEV,QAAA,MAAM,GAAG,GAAG;AACV,YAAA,IAAI,EAAE,MAAM,IAAI,OAAO,GAAG,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,OAAO,EAAE;AAC1D,YAAA,MAAM,EAAE,2BAA2B,CAAC,OAAO,CAAC;SAC7C,CAAA;QACD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,CAAA;AAC9B,QAAA,OAAO,EAAE,GAAG,GAAG,EAAE,OAAO,EAAE,CAAA;KAC3B;AAED;;;;;;;;;;;;;;;;;AAiBG;AACI,IAAA,oBAAoB,CAAC,OAAgG,EAAA;AAC1H,QAAA,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAA;AAC3B,QAAA,OAAO,IAAI,CAAA;KACZ;AAED;;;;;;;;;;AAUG;IACI,SAAS,CAAC,MAAc,EAAE,MAAiC,EAAA;AAChE,QAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAA;AACjD,QAAA,OAAO,IAAI,CAAA;KACZ;AAED;;;;;;;;;;;;AAYG;AACI,IAAA,SAAS,CAAC,MAAc,EAAA;AAC7B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM,IAAI,IAAI,CAAC,cAAc,CAAA;AACpE,QAAA,IAAI,CAAC,MAAM;AAAE,YAAA,MAAM,IAAI,KAAK,CAAC,+BAA+B,MAAM,CAAA,CAAE,CAAC,CAAA;AACrE,QAAA,OAAO,MAAM,CAAA;KACd;AAED;;;;;;;;;;;;;AAaG;AACI,IAAA,UAAU,CAAC,MAAc,EAAA;QAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;AACtC,QAAA,IAAI,CAAC,OAAO;AAAE,YAAA,MAAM,IAAI,KAAK,CAAC,+BAA+B,MAAM,CAAA,CAAE,CAAC,CAAA;AACtE,QAAA,OAAO,OAAO,CAAA;KACf;AAED;;;;;;;;;;;;AAYG;IACI,MAAM,cAAc,CAAC,MAAyC,EAAA;AACnE,QAAA,MAAM,OAAO,GAAG,uBAAuB,CAAC,qBAAqB,CAC3D,MAAM,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,kBAAkB,CAAC,OAAO,MAAM,KAAK,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,CAC3G,CAAA;QAED,OAAO;AACL,YAAA,GAAG,OAAO;;YAEV,OAAO,EAAEC,uBAAU,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACrD,2BAA2B,EAAEA,uBAAU,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,2BAA2B,CAAC,CAAC;YAC9F,UAAU,EAAEA,uBAAU,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YAC5D,cAAc,EAAEA,uBAAU,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;YACpE,OAAO,EAAEA,uBAAU,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AACtD,YAAA,cAAc,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;AACrC,YAAA,gBAAgB,EAAE,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC;AAClD,YAAA,kBAAkB,EAAE,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC;AACtD,YAAA,gBAAgB,EAAE,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC;AAClD,YAAA,kBAAkB,EAAE,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC;AACtD,YAAA,mBAAmB,EAAE,OAAO,CAAC,mBAAmB,GAAG,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,GAAG,SAAS;AAClG,YAAA,UAAU,EAAE,OAAO,CAAC,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,SAAS;AACvE,YAAA,aAAa,EAAE,OAAO,CAAC,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,SAAS;AAChF,YAAA,UAAU,EAAE,OAAO,CAAC,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,SAAS;SACxE,CAAA;KACF;AAED;;;;;;;;;;;;AAYG;IACI,YAAY,CAAC,cAAsB,EAAE,MAAe,EAAA;QACzD,MAAM,OAAO,GAAG,OAAO,CAAC,mBAAmB,CAAC,cAAc,CAAC,CAAA;AAC3D,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,IAAIC,4BAAc,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAA;KAC/D;AAED;;;;;;;;;;;AAWG;IACI,OAAO,CAAC,MAAc,EAAE,OAAiC,EAAA;AAC9D,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;KACpE;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;AA0BG;AACI,IAAA,MAAM,eAAe,CAAC,IAAY,EAAE,QAAqB,EAAA;QAC9D,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE;AAC5B,YAAA,MAAM,IAAI,KAAK,CAAC,4FAA4F,CAAC,CAAA;SAC9G;AAED,QAAA,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,CAAG,EAAA,IAAI,CAAC,WAAW,EAAE,CAAA,SAAA,CAAW,CAAC,CAAA;AACrE,QAAA,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAG,EAAA,IAAI,CAAC,WAAW,EAAE,CAAA,OAAA,CAAS,CAAC,CAAA;QAE1D,IAAI,eAAe,EAAE;YACnB,MAAM,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,eAAe,CAAC,CAAA;AAC3D,YAAA,OAAO,IAAI,CAAC,aAAa,CAAC,IAAIA,4BAAc,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;SAC9D;QAED,IAAI,MAAM,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,EAAE;AAC1C,YAAA,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,wBAAwB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;YACtF,OAAO,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;SAC3C;AAED,QAAA,MAAM,IAAI,KAAK,CAAC,CAAA,6BAAA,EAAgC,IAAI,CAAC,WAAW,EAAE,CAAsC,mCAAA,EAAA,IAAI,CAAE,CAAA,CAAC,CAAA;KAChH;AAED;;;;;;;;;;;;;;AAcG;IACI,MAAM,OAAO,CAClB,IAAY;;AAEZ,IAAA,SAAqD,EACrD,MAAe,EAAA;AAEf,QAAA,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,CAAC,CAAA;AACvF,QAAA,IAAI,CAAC,OAAO;AAAE,YAAA,MAAM,IAAI,KAAK,CAAC,CAA8B,2BAAA,EAAA,IAAI,GAAG,SAAS,GAAG,iBAAiB,GAAG,EAAE,CAAA,CAAE,CAAC,CAAA;QACxG,OAAO,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;KAC3C;AAED;;;;;;;;;;;AAWG;IACI,QAAQ,CAAC,cAAwC,EAAE,eAAqD,EAAA;AAC7G,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,IAAIC,6BAAe,CAAC,cAAc,EAAE,eAAe,CAAC,CAAC,CAAA;KAChF;AAED;;;;;;;;;;AAUG;IACI,QAAQ,CAAC,OAAmB,EAAE,IAAwB,EAAA;AAC3D,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,eAAe,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAA;KAC9D;AAED;;;;;;;;AAQG;IACI,MAAM,GAAA;QACX,OAAO,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC,CAAA;KACrD;AAED;;;;;;;;;;;;;;;AAeG;AACI,IAAA,MAAM,wBAAwB,GAAA;QACnC,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE;AAC5B,YAAA,MAAM,IAAI,KAAK,CAAC,8FAA8F,CAAC,CAAA;SAChH;QAED,OAAO,OAAO,CAAC,GAAG,CAAC,CAAA,EAAGC,+BAAiB,CAAC,WAAW,EAAE,CAAA,SAAA,CAAW,CAAC;AAC/D,cAAE,MAAM,IAAI,CAAC,eAAe,CAACA,+BAAiB,CAAC;AAC/C,cAAE,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAA;KACnC;AAED;;;;;;;;AAQG;AACI,IAAA,MAAM,iBAAiB,GAAA;QAC5B,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,2BAA2B,EAAE,CAAA;QAC7E,OAAO,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;KAC7C;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqCG;AACH,IAAA,MAAM,YAAY,CAChB,OAA0C,EAC1C,OAA0C,EAC1C,OAAiE,EAAA;AAEjE,QAAA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE;AACrC,aAAA,UAAU,CAAC;AACV,YAAA,GAAG,OAAO;AACV,YAAA,MAAM,EAAE,OAAO,OAAO,KAAK,QAAQ,GAAG,OAAO,GAAG,OAAO,CAAC,IAAI;AAC5D,YAAA,QAAQ,EAAE,OAAO,OAAO,KAAK,QAAQ,GAAG,OAAO,GAAG,OAAO,CAAC,IAAI;AAC9D,YAAA,MAAM,EAAEH,uBAAU,CAAC,SAAS,CAAC,CAAC,CAAC;AAC/B,YAAA,OAAO,EAAE,OAAO,OAAO,KAAK,QAAQ,GAAG,OAAO,GAAG,OAAO,CAAC,IAAI;SAC9D,CAAC;aACD,OAAO,CAAC,OAAO,CAAC,CAAA;;AAGnB,QAAA,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;YAC/B,IAAI,CAAC,OAAO,CAAC,OAAO,OAAO,KAAK,QAAQ,GAAG,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;SAC5E;QAEDI,aAAM,CAAC,SAAS,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,IAAI,CAAC,CAAA,QAAA,EAAW,OAAO,CAAA,IAAA,EAAO,OAAO,CAAoB,iBAAA,EAAA,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAE,CAAA,CAAC,CAAA;AAEtH,QAAA,OAAO,EAAE,GAAG,MAAM,EAAE,WAAW,EAAE,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,EAAE,YAAY,EAAE,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,EAAE,CAAA;KAC3G;AAEO,IAAA,MAAM,sBAAsB,CAAC,MAAc,EAAE,kBAA8B,EAAE,mBAAgC,EAAA;QACnH,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAA;AACrD,QAAA,MAAM,sBAAsB,GAAG,WAAW,CAAC,OAAO,CAAC,SAAS,GAAG,WAAW,CAAC,UAAU,CAAC,SAAS,CAAA;AAE/F,QAAA,MAAM,YAAY,GAAGC,wBAAmB,CAAC,kBAAkB,CAAC,SAAS,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,SAAS,IAAI,CAAC,CAAC,CAAA;AAEnI,QAAA,OAAO,YAAY,KAAK,IAAI,GAAG,SAAS,GAAGL,uBAAU,CAAC,SAAS,CAAC,YAAY,CAAC,CAAA;KAC9E;AAED;;;;;;;;;;;;;;;;;;;;;;;AAuBG;IACH,MAAM,YAAY,CAChB,aAAgD,EAChD,gBAAmD,EACnD,kBAA8B,EAC9B,OAGyC,EAAA;AAEzC,QAAA,MAAM,aAAa,GAAG,OAAO,aAAa,KAAK,QAAQ,GAAG,aAAa,GAAG,aAAa,CAAC,IAAI,CAAA;AAE5F,QAAA,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,aAAa,EAAE,kBAAkB,EAAE,OAAO,EAAE,mBAAmB,CAAC,CAAA;AACvH,QAAA,IAAI,CAAC,YAAY;AAAE,YAAA,OAAO,SAAS,CAAA;AAEnC,QAAA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE;AACrC,aAAA,UAAU,CAAC;AACV,YAAA,GAAG,OAAO;AACV,YAAA,MAAM,EAAE,OAAO,gBAAgB,KAAK,QAAQ,GAAG,gBAAgB,GAAG,gBAAgB,CAAC,IAAI;AACvF,YAAA,QAAQ,EAAE,aAAa;AACvB,YAAA,MAAM,EAAE,YAAY;SACrB,CAAC;aACD,OAAO,CAAC,OAAO,CAAC,CAAA;QAEnB,OAAO;AACL,YAAA,GAAG,MAAM;AACT,YAAA,WAAW,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;AACnC,YAAA,YAAY,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC;AACrC,YAAA,aAAa,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AAC9B,YAAA,YAAY,EAAE,YAAY;SAC3B,CAAA;KACF;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6BG;AACH,IAAA,MAAM,2BAA2B,CAC/B,aAAgD,EAChD,kBAA8B,EAC9B,OAGyC,EAAA;AAEzC,QAAA,MAAM,aAAa,GAAG,OAAO,aAAa,KAAK,QAAQ,GAAG,aAAa,GAAG,aAAa,CAAC,IAAI,CAAA;AAC5F,QAAA,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,wBAAwB,EAAE,CAAA;AAE9D,QAAA,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,aAAa,EAAE,kBAAkB,EAAE,OAAO,EAAE,mBAAmB,CAAC,CAAA;AACvH,QAAA,IAAI,CAAC,YAAY;AAAE,YAAA,OAAO,SAAS,CAAA;AAEnC,QAAA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE;AACrC,aAAA,UAAU,CAAC;AACV,YAAA,GAAG,OAAO;YACV,MAAM,EAAE,gBAAgB,CAAC,IAAI;AAC7B,YAAA,QAAQ,EAAE,aAAa;AACvB,YAAA,MAAM,EAAE,YAAY;SACrB,CAAC;aACD,OAAO,CAAC,OAAO,CAAC,CAAA;QAEnB,OAAO;AACL,YAAA,GAAG,MAAM;AACT,YAAA,WAAW,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;AACnC,YAAA,YAAY,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC;AACrC,YAAA,aAAa,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AAC9B,YAAA,YAAY,EAAE,YAAY;SAC3B,CAAA;KACF;AAED;;;;;;;;;;;;;;;;;;;;;;;AAuBG;IACH,MAAM,mCAAmC,CACvC,aAAgD,EAChD,eAA0C,EAC1C,kBAA8B,EAC9B,OAEC,EAAA;QAED,IAAI,EAAE,MAAM,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,CAAC,EAAE;AAC5C,YAAA,MAAM,IAAI,KAAK,CAAC,qEAAqE,CAAC,CAAA;SACvF;AAED,QAAA,MAAM,aAAa,GAAG,OAAO,aAAa,KAAK,QAAQ,GAAG,aAAa,GAAG,aAAa,CAAC,IAAI,CAAA;AAE5F,QAAA,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,aAAa,EAAE,kBAAkB,EAAE,OAAO,EAAE,mBAAmB,CAAC,CAAA;AACvH,QAAA,IAAI,CAAC,YAAY;AAAE,YAAA,OAAO,SAAS,CAAA;AAEnC,QAAA,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,aAAa,EAAE,YAAY,CAAC,SAAS,CAAC,CAAA;QAChF,OAAO;YACL,YAAY,EAAEA,uBAAU,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC;YACjD,aAAa,EAAE,MAAM,CAAC,IAAI;SAC3B,CAAA;KACF;AACF;;;;;"}
1
+ {"version":3,"file":"account-manager.js","sources":["../../src/types/account-manager.ts"],"sourcesContent":["import algosdk, { Address } from 'algosdk'\nimport { Config } from '../config'\nimport { calculateFundAmount, memoize } from '../util'\nimport { AccountInformation, DISPENSER_ACCOUNT, MultisigAccount, SigningAccount, TransactionSignerAccount } from './account'\nimport { AlgoAmount } from './amount'\nimport { ClientManager } from './client-manager'\nimport { CommonTransactionParams, TransactionComposer } from './composer'\nimport { TestNetDispenserApiClient } from './dispenser-client'\nimport { KmdAccountManager } from './kmd-account-manager'\nimport { SendParams, SendSingleTransactionResult } from './transaction'\nimport LogicSigAccount = algosdk.LogicSigAccount\nimport Account = algosdk.Account\nimport TransactionSigner = algosdk.TransactionSigner\n\nconst address = (address: string | Address) => (typeof address === 'string' ? Address.fromString(address) : address)\n\n/** Result from performing an ensureFunded call. */\nexport interface EnsureFundedResult {\n /** The transaction ID of the transaction that funded the account. */\n transactionId: string\n /** The amount that was sent to the account. */\n amountFunded: AlgoAmount\n}\n\n/**\n * Returns a `TransactionSigner` for the given account that can sign a transaction.\n * This function has memoization, so will return the same transaction signer for a given account.\n * @param account An account that can sign a transaction\n * @returns A transaction signer\n */\nexport const getAccountTransactionSigner = memoize(function (\n account: TransactionSignerAccount | Account | SigningAccount | LogicSigAccount | MultisigAccount,\n): TransactionSigner {\n return 'signer' in account\n ? account.signer\n : 'lsig' in account\n ? algosdk.makeLogicSigAccountTransactionSigner(account)\n : algosdk.makeBasicAccountTransactionSigner(account)\n})\n\n/** Creates and keeps track of signing accounts that can sign transactions for a sending address. */\nexport class AccountManager {\n private _clientManager: ClientManager\n private _kmdAccountManager: KmdAccountManager\n private _accounts: { [address: string]: TransactionSignerAccount } = {}\n private _defaultSigner?: algosdk.TransactionSigner\n\n /**\n * Create a new account manager.\n * @param clientManager The ClientManager client to use for algod and kmd clients\n * @example Create a new account manager\n * ```typescript\n * const accountManager = new AccountManager(clientManager)\n * ```\n */\n constructor(clientManager: ClientManager) {\n this._clientManager = clientManager\n this._kmdAccountManager = new KmdAccountManager(clientManager)\n }\n\n private _getComposer(getSuggestedParams?: () => Promise<algosdk.SuggestedParams>) {\n return new TransactionComposer({\n algod: this._clientManager.algod,\n getSigner: this.getSigner.bind(this),\n getSuggestedParams: getSuggestedParams ?? (() => this._clientManager.algod.getTransactionParams().do()),\n })\n }\n\n /** KMD account manager that allows you to easily get and create accounts using KMD. */\n public get kmd() {\n return this._kmdAccountManager\n }\n\n /**\n * Sets the default signer to use if no other signer is specified.\n *\n * If this isn't set an a transaction needs signing for a given sender\n * then an error will be thrown from `getSigner` / `getAccount`.\n * @param signer The signer to use, either a `TransactionSigner` or a `TransactionSignerAccount`\n * @example\n * ```typescript\n * const signer = accountManager.random() // Can be anything that returns a `algosdk.TransactionSigner` or `TransactionSignerAccount`\n * accountManager.setDefaultSigner(signer)\n *\n * // When signing a transaction, if there is no signer registered for the sender then the default signer will be used\n * const signer = accountManager.getSigner(\"{SENDERADDRESS}\")\n * ```\n * @returns The `AccountManager` so method calls can be chained\n */\n public setDefaultSigner(signer: algosdk.TransactionSigner | TransactionSignerAccount): AccountManager {\n this._defaultSigner = 'signer' in signer ? signer.signer : signer\n return this\n }\n\n /**\n * Records the given account (that can sign) against the address of the provided account for later\n * retrieval and returns a `TransactionSignerAccount` along with the original account in an `account` property.\n */\n private signerAccount<T extends TransactionSignerAccount | Account | SigningAccount | LogicSigAccount | MultisigAccount>(\n account: T,\n ): Address &\n TransactionSignerAccount & {\n /* The underlying account that specified this address. */ account: T\n } {\n const signer = getAccountTransactionSigner(account)\n const acc: TransactionSignerAccount = {\n addr: 'addr' in account ? account.addr : account.address(),\n signer: signer,\n }\n this._accounts[acc.addr.toString()] = acc\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const addressWithAccount = Address.fromString(acc.addr.toString()) as any\n addressWithAccount.account = account\n addressWithAccount.addr = acc.addr.toString()\n addressWithAccount.signer = signer\n return addressWithAccount as Address & TransactionSignerAccount & { account: T }\n }\n\n /**\n * Tracks the given account for later signing.\n *\n * Note: If you are generating accounts via the various methods on `AccountManager`\n * (like `random`, `fromMnemonic`, `logicsig`, etc.) then they automatically get tracked.\n * @param account The account to register, which can be a `TransactionSignerAccount` or\n * a `algosdk.Account`, `algosdk.LogicSigAccount`, `SigningAccount` or `MultisigAccount`\n * @example\n * ```typescript\n * const accountManager = new AccountManager(clientManager)\n * .setSignerFromAccount(algosdk.generateAccount())\n * .setSignerFromAccount(new algosdk.LogicSigAccount(program, args))\n * .setSignerFromAccount(new SigningAccount(mnemonic, sender))\n * .setSignerFromAccount(new MultisigAccount({version: 1, threshold: 1, addrs: [\"ADDRESS1...\", \"ADDRESS2...\"]}, [account1, account2]))\n * .setSignerFromAccount({addr: \"SENDERADDRESS\", signer: transactionSigner})\n * ```\n * @returns The `AccountManager` instance for method chaining\n */\n public setSignerFromAccount(account: TransactionSignerAccount | Account | LogicSigAccount | SigningAccount | MultisigAccount) {\n this.signerAccount(account)\n return this\n }\n\n /**\n * Tracks the given `algosdk.TransactionSigner` against the given sender address for later signing.\n * @param sender The sender address to use this signer for\n * @param signer The `algosdk.TransactionSigner` to sign transactions with for the given sender\n * @example\n * ```typescript\n * const accountManager = new AccountManager(clientManager)\n * .setSigner(\"SENDERADDRESS\", transactionSigner)\n * ```\n * @returns The `AccountManager` instance for method chaining\n */\n public setSigner(sender: string | Address, signer: algosdk.TransactionSigner) {\n this._accounts[address(sender).toString()] = { addr: address(sender), signer }\n return this\n }\n\n /**\n * Takes all registered signers from the given `AccountManager` and adds them to this `AccountManager`.\n *\n * This is useful for situations where you have multiple contexts you are building accounts in such as unit tests.\n * @param anotherAccountManager Another account manager with signers registered\n * @param overwriteExisting Whether or not to overwrite any signers that have the same sender address with the ones in the other account manager or not (default: true)\n * @returns The `AccountManager` instance for method chaining\n */\n public setSigners(anotherAccountManager: AccountManager, overwriteExisting = true) {\n this._accounts = overwriteExisting\n ? { ...this._accounts, ...anotherAccountManager._accounts }\n : { ...anotherAccountManager._accounts, ...this._accounts }\n return\n }\n\n /**\n * Returns the `TransactionSigner` for the given sender address, ready to sign a transaction for that sender.\n *\n * If no signer has been registered for that address then the default signer is used if registered and\n * if not then an error is thrown.\n *\n * @param sender The sender address\n * @example\n * ```typescript\n * const signer = accountManager.getSigner(\"SENDERADDRESS\")\n * ```\n * @returns The `TransactionSigner` or throws an error if not found and no default signer is set\n */\n public getSigner(sender: string | Address): algosdk.TransactionSigner {\n const signer = this._accounts[address(sender).toString()]?.signer ?? this._defaultSigner\n if (!signer) throw new Error(`No signer found for address ${sender}`)\n return signer\n }\n\n /**\n * Returns the `TransactionSignerAccount` for the given sender address.\n *\n * If no signer has been registered for that address then an error is thrown.\n * @param sender The sender address\n * @example\n * ```typescript\n * const sender = accountManager.random()\n * // ...\n * // Returns the `TransactionSignerAccount` for `sender` that has previously been registered\n * const account = accountManager.getAccount(sender)\n * ```\n * @returns The `TransactionSignerAccount` or throws an error if not found\n */\n public getAccount(sender: string | Address): TransactionSignerAccount {\n const account = this._accounts[address(sender).toString()]\n if (!account) throw new Error(`No signer found for address ${sender}`)\n return account\n }\n\n /**\n * Returns the given sender account's current status, balance and spendable amounts.\n *\n * [Response data schema details](https://developer.algorand.org/docs/rest-apis/algod/#get-v2accountsaddress)\n * @example\n * ```typescript\n * const address = \"XBYLS2E6YI6XXL5BWCAMOA4GTWHXWENZMX5UHXMRNWWUQ7BXCY5WC5TEPA\";\n * const accountInfo = await accountManager.getInformation(address);\n * ```\n *\n * @param sender The account / address to look up\n * @returns The account information\n */\n public async getInformation(sender: string | Address): Promise<AccountInformation> {\n const {\n round,\n lastHeartbeat = undefined,\n lastProposed = undefined,\n address,\n ...account\n } = await this._clientManager.algod.accountInformation(sender).do()\n\n return {\n ...account,\n // None of the Number types can practically overflow 2^53\n address: Address.fromString(address),\n balance: AlgoAmount.MicroAlgo(Number(account.amount)),\n amountWithoutPendingRewards: AlgoAmount.MicroAlgo(Number(account.amountWithoutPendingRewards)),\n minBalance: AlgoAmount.MicroAlgo(Number(account.minBalance)),\n pendingRewards: AlgoAmount.MicroAlgo(Number(account.pendingRewards)),\n rewards: AlgoAmount.MicroAlgo(Number(account.rewards)),\n validAsOfRound: BigInt(round),\n totalAppsOptedIn: Number(account.totalAppsOptedIn),\n totalAssetsOptedIn: Number(account.totalAssetsOptedIn),\n totalCreatedApps: Number(account.totalCreatedApps),\n totalCreatedAssets: Number(account.totalCreatedAssets),\n appsTotalExtraPages: account.appsTotalExtraPages !== undefined ? Number(account.appsTotalExtraPages) : undefined,\n rewardBase: account.rewardBase !== undefined ? Number(account.rewardBase) : undefined,\n totalBoxBytes: account.totalBoxBytes !== undefined ? Number(account.totalBoxBytes) : undefined,\n totalBoxes: account.totalBoxes !== undefined ? Number(account.totalBoxes) : undefined,\n lastHeartbeatRound: lastHeartbeat !== undefined ? BigInt(lastHeartbeat) : undefined,\n lastProposedRound: lastProposed !== undefined ? BigInt(lastProposed) : undefined,\n }\n }\n\n /**\n * Tracks and returns an Algorand account with secret key loaded (i.e. that can sign transactions) by taking the mnemonic secret.\n *\n * @example\n * ```typescript\n * const account = accountManager.fromMnemonic(\"mnemonic secret ...\")\n * const rekeyedAccount = accountManager.fromMnemonic(\"mnemonic secret ...\", \"SENDERADDRESS...\")\n * ```\n * @param mnemonicSecret The mnemonic secret representing the private key of an account; **Note: Be careful how the mnemonic is handled**,\n * never commit it into source control and ideally load it from the environment (ideally via a secret storage service) rather than the file system.\n * @param sender The optional sender address to use this signer for (aka a rekeyed account)\n * @returns The account\n */\n public fromMnemonic(mnemonicSecret: string, sender?: string | Address) {\n const account = algosdk.mnemonicToSecretKey(mnemonicSecret)\n return this.signerAccount(new SigningAccount(account, sender))\n }\n\n /**\n * Tracks and returns an Algorand account that is a rekeyed version of the given account to a new sender.\n *\n * @example\n * ```typescript\n * const account = account.fromMnemonic(\"mnemonic secret ...\")\n * const rekeyedAccount = accountManager.rekeyed(account, \"SENDERADDRESS...\")\n * ```\n * @param account The account to use as the signer for this new rekeyed account\n * @param sender The sender address to use as the new sender\n * @returns The account\n */\n public rekeyed(sender: string | Address, account: TransactionSignerAccount) {\n return this.signerAccount({ addr: address(sender), signer: account.signer })\n }\n\n /**\n * Tracks and returns an Algorand account with private key loaded by convention from environment variables based on the given name identifier.\n *\n * Note: This function expects to run in a Node.js environment.\n *\n * ## Convention:\n * * **Non-LocalNet:** will load process.env['\\{NAME\\}_MNEMONIC'] as a mnemonic secret; **Note: Be careful how the mnemonic is handled**,\n * never commit it into source control and ideally load it via a secret storage service rather than the file system.\n * If process.env['\\{NAME\\}_SENDER'] is defined then it will use that for the sender address (i.e. to support rekeyed accounts)\n * * **LocalNet:** will load the account from a KMD wallet called \\{NAME\\} and if that wallet doesn't exist it will create it and fund the account for you\n *\n * This allows you to write code that will work seamlessly in production and local development (LocalNet) without manual config locally (including when you reset the LocalNet).\n *\n * @example Default\n *\n * If you have a mnemonic secret loaded into `process.env.MY_ACCOUNT_MNEMONIC` then you can call the following to get that private key loaded into an account object:\n * ```typescript\n * const account = await accountManager.fromEnvironment('MY_ACCOUNT')\n * ```\n *\n * If that code runs against LocalNet then a wallet called `MY_ACCOUNT` will automatically be created with an account that is automatically funded with 1000 (default) ALGO from the default LocalNet dispenser.\n * If not running against LocalNet then it will use proces.env.MY_ACCOUNT_MNEMONIC as the private key and (if present) process.env.MY_ACCOUNT_SENDER as the sender address.\n *\n * @param name The name identifier of the account\n * @param fundWith The optional amount to fund the account with when it gets created (when targeting LocalNet), if not specified then 1000 ALGO will be funded from the dispenser account\n * @returns The account\n */\n public async fromEnvironment(name: string, fundWith?: AlgoAmount) {\n if (!process || !process.env) {\n throw new Error('Attempt to get account with private key from a non Node.js context; this is not supported!')\n }\n\n const accountMnemonic = process.env[`${name.toUpperCase()}_MNEMONIC`]\n const sender = process.env[`${name.toUpperCase()}_SENDER`]\n\n if (accountMnemonic) {\n const signer = algosdk.mnemonicToSecretKey(accountMnemonic)\n return this.signerAccount(new SigningAccount(signer, sender))\n }\n\n if (await this._clientManager.isLocalNet()) {\n const account = await this._kmdAccountManager.getOrCreateWalletAccount(name, fundWith)\n return this.signerAccount(account.account)\n }\n\n throw new Error(`Missing environment variable ${name.toUpperCase()}_MNEMONIC when looking for account ${name}`)\n }\n\n /**\n * Tracks and returns an Algorand account with private key loaded from the given KMD wallet (identified by name).\n *\n * @param name The name of the wallet to retrieve an account from\n * @param predicate An optional filter to use to find the account (otherwise it will return a random account from the wallet)\n * @param sender The optional sender address to use this signer for (aka a rekeyed account)\n * @example Get default funded account in a LocalNet\n *\n * ```typescript\n * const defaultDispenserAccount = await account.fromKmd('unencrypted-default-wallet',\n * a => a.status !== 'Offline' && a.amount > 1_000_000_000\n * )\n * ```\n * @returns The account\n */\n public async fromKmd(\n name: string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n predicate?: (account: Record<string, any>) => boolean,\n sender?: string | Address,\n ) {\n const account = await this._kmdAccountManager.getWalletAccount(name, predicate, sender)\n if (!account) throw new Error(`Unable to find KMD account ${name}${predicate ? ' with predicate' : ''}`)\n return this.signerAccount(account.account)\n }\n\n /**\n * Tracks and returns an account that supports partial or full multisig signing.\n *\n * @example\n * ```typescript\n * const account = accountManager.multisig({version: 1, threshold: 1, addrs: [\"ADDRESS1...\", \"ADDRESS2...\"]},\n * [(await accountManager.fromEnvironment('ACCOUNT1')).account])\n * ```\n * @param multisigParams The parameters that define the multisig account\n * @param signingAccounts The signers that are currently present\n * @returns A multisig account wrapper\n */\n public multisig(multisigParams: algosdk.MultisigMetadata, signingAccounts: (algosdk.Account | SigningAccount)[]) {\n return this.signerAccount(new MultisigAccount(multisigParams, signingAccounts))\n }\n\n /**\n * Tracks and returns an account that represents a logic signature.\n *\n * @example\n * ```typescript\n * const account = account.logicsig(program, [new Uint8Array(3, ...)])\n * ```\n * @param program The bytes that make up the compiled logic signature\n * @param args The (binary) arguments to pass into the logic signature\n * @returns A logic signature account wrapper\n */\n public logicsig(program: Uint8Array, args?: Array<Uint8Array>) {\n return this.signerAccount(new LogicSigAccount(program, args))\n }\n\n /**\n * Tracks and returns a new, random Algorand account with secret key loaded.\n *\n * @example\n * ```typescript\n * const account = account.random()\n * ```\n * @returns The account\n */\n public random() {\n return this.signerAccount(algosdk.generateAccount())\n }\n\n /**\n * Returns an account (with private key loaded) that can act as a dispenser from\n * environment variables, or against default LocalNet if no environment variables present.\n *\n * Note: requires a Node.js environment to execute.\n *\n * If present, it will load the account mnemonic stored in process.env.DISPENSER_MNEMONIC and optionally\n * process.env.DISPENSER_SENDER if it's a rekeyed account.\n *\n * @example\n * ```typescript\n * const account = await account.dispenserFromEnvironment()\n * ```\n *\n * @returns The account\n */\n public async dispenserFromEnvironment() {\n if (!process || !process.env) {\n throw new Error('Attempt to get dispenser from environment from a non Node.js context; this is not supported!')\n }\n\n return process.env[`${DISPENSER_ACCOUNT.toUpperCase()}_MNEMONIC`]\n ? await this.fromEnvironment(DISPENSER_ACCOUNT)\n : await this.localNetDispenser()\n }\n\n /**\n * Returns an Algorand account with private key loaded for the default LocalNet dispenser account (that can be used to fund other accounts).\n *\n * @example\n * ```typescript\n * const account = await account.localNetDispenser()\n * ```\n * @returns The account\n */\n public async localNetDispenser() {\n const dispenser = await this._kmdAccountManager.getLocalNetDispenserAccount()\n return this.signerAccount(dispenser.account)\n }\n\n /**\n * Rekey an account to a new address.\n *\n * **Note:** Please be careful with this function and be sure to read the [official rekey guidance](https://developer.algorand.org/docs/get-details/accounts/rekey/).\n *\n * @param account The account to rekey\n * @param rekeyTo The account address or signing account of the account that will be used to authorise transactions for the rekeyed account going forward.\n * If a signing account is provided that will now be tracked as the signer for `account` in this `AccountManager`\n * @param options Any parameters to control the transaction or execution of the transaction\n *\n * @example Basic example (with string addresses)\n * ```typescript\n * await algorand.account.rekeyAccount({account: \"ACCOUNTADDRESS\", rekeyTo: \"NEWADDRESS\"})\n * ```\n * @example Basic example (with signer accounts)\n * ```typescript\n * await algorand.account.rekeyAccount({account: account1, rekeyTo: newSignerAccount})\n * ```\n * @example Advanced example\n * ```typescript\n * await algorand.account.rekeyAccount({\n * account: \"ACCOUNTADDRESS\",\n * rekeyTo: \"NEWADDRESS\",\n * lease: 'lease',\n * note: 'note',\n * firstValidRound: 1000n,\n * validityWindow: 10,\n * extraFee: (1000).microAlgo(),\n * staticFee: (1000).microAlgo(),\n * // Max fee doesn't make sense with extraFee AND staticFee\n * // already specified, but here for completeness\n * maxFee: (3000).microAlgo(),\n * maxRoundsToWaitForConfirmation: 5,\n * suppressLog: true,\n * })\n * ```\n * @returns The result of the transaction and the transaction that was sent\n */\n async rekeyAccount(\n account: string | Address,\n rekeyTo: string | Address | TransactionSignerAccount,\n options?: Omit<CommonTransactionParams, 'sender'> & SendParams,\n ): Promise<SendSingleTransactionResult> {\n const result = await this._getComposer()\n .addPayment({\n ...options,\n sender: address(account),\n receiver: address(account),\n amount: AlgoAmount.MicroAlgo(0),\n rekeyTo: address(typeof rekeyTo === 'object' && 'addr' in rekeyTo ? rekeyTo.addr : rekeyTo),\n })\n .send(options)\n\n // If the rekey is a signing account set it as the signer for this account\n if (typeof rekeyTo === 'object' && 'addr' in rekeyTo) {\n this.rekeyed(account, rekeyTo)\n }\n\n Config.getLogger(options?.suppressLog).info(`Rekeyed ${account} to ${rekeyTo} via transaction ${result.txIds.at(-1)}`)\n\n return { ...result, transaction: result.transactions.at(-1)!, confirmation: result.confirmations.at(-1)! }\n }\n\n private async _getEnsureFundedAmount(sender: Address, minSpendingBalance: AlgoAmount, minFundingIncrement?: AlgoAmount) {\n const accountInfo = await this.getInformation(sender)\n const currentSpendingBalance = accountInfo.balance.microAlgo - accountInfo.minBalance.microAlgo\n\n const amountFunded = calculateFundAmount(minSpendingBalance.microAlgo, currentSpendingBalance, minFundingIncrement?.microAlgo ?? 0n)\n\n return amountFunded === null ? undefined : AlgoAmount.MicroAlgo(amountFunded)\n }\n\n /**\n * Funds a given account using a dispenser account as a funding source such that\n * the given account has a certain amount of Algo free to spend (accounting for\n * Algo locked in minimum balance requirement).\n *\n * https://developer.algorand.org/docs/get-details/accounts/#minimum-balance\n *\n * @param accountToFund The account to fund\n * @param dispenserAccount The account to use as a dispenser funding source\n * @param minSpendingBalance The minimum balance of Algo that the account should have available to spend (i.e. on top of minimum balance requirement)\n * @param options Optional parameters to control the funding increment, transaction or execution of the transaction\n * @example Example using AlgorandClient\n * ```typescript\n * // Basic example\n * await algorand.account.ensureFunded(\"ACCOUNTADDRESS\", \"DISPENSERADDRESS\", algokit.algo(1))\n * // With configuration\n * await algorand.account.ensureFunded(\"ACCOUNTADDRESS\", \"DISPENSERADDRESS\", algokit.algo(1),\n * { minFundingIncrement: algokit.algo(2), fee: (1000).microAlgo(), suppressLog: true }\n * )\n * ```\n * @returns\n * - The result of executing the dispensing transaction and the `amountFunded` if funds were needed.\n * - `undefined` if no funds were needed.\n */\n async ensureFunded(\n accountToFund: string | Address,\n dispenserAccount: string | Address,\n minSpendingBalance: AlgoAmount,\n options?: {\n minFundingIncrement?: AlgoAmount\n } & SendParams &\n Omit<CommonTransactionParams, 'sender'>,\n ): Promise<(SendSingleTransactionResult & EnsureFundedResult) | undefined> {\n const addressToFund = address(accountToFund)\n\n const amountFunded = await this._getEnsureFundedAmount(addressToFund, minSpendingBalance, options?.minFundingIncrement)\n if (!amountFunded) return undefined\n\n const result = await this._getComposer()\n .addPayment({\n ...options,\n sender: address(dispenserAccount),\n receiver: addressToFund,\n amount: amountFunded,\n })\n .send(options)\n\n return {\n ...result,\n transaction: result.transactions[0],\n confirmation: result.confirmations[0],\n transactionId: result.txIds[0],\n amountFunded: amountFunded,\n }\n }\n\n /**\n * Funds a given account using a dispenser account retrieved from the environment,\n * per the `dispenserFromEnvironment` method, as a funding source such that\n * the given account has a certain amount of Algo free to spend (accounting for\n * Algo locked in minimum balance requirement).\n *\n * **Note:** requires a Node.js environment to execute.\n *\n * The dispenser account is retrieved from the account mnemonic stored in\n * process.env.DISPENSER_MNEMONIC and optionally process.env.DISPENSER_SENDER\n * if it's a rekeyed account, or against default LocalNet if no environment variables present.\n *\n * https://developer.algorand.org/docs/get-details/accounts/#minimum-balance\n *\n * @param accountToFund The account to fund\n * @param minSpendingBalance The minimum balance of Algo that the account should have available to spend (i.e. on top of minimum balance requirement)\n * @param options Optional parameters to control the funding increment, transaction or execution of the transaction\n * @example Example using AlgorandClient\n * ```typescript\n * // Basic example\n * await algorand.account.ensureFundedFromEnvironment(\"ACCOUNTADDRESS\", algokit.algo(1))\n * // With configuration\n * await algorand.account.ensureFundedFromEnvironment(\"ACCOUNTADDRESS\", algokit.algo(1),\n * { minFundingIncrement: algokit.algo(2), fee: (1000).microAlgo(), suppressLog: true }\n * )\n * ```\n * @returns\n * - The result of executing the dispensing transaction and the `amountFunded` if funds were needed.\n * - `undefined` if no funds were needed.\n */\n async ensureFundedFromEnvironment(\n accountToFund: string | Address,\n minSpendingBalance: AlgoAmount,\n options?: {\n minFundingIncrement?: AlgoAmount\n } & SendParams &\n Omit<CommonTransactionParams, 'sender'>,\n ): Promise<(SendSingleTransactionResult & EnsureFundedResult) | undefined> {\n const addressToFund = address(accountToFund)\n const dispenserAccount = await this.dispenserFromEnvironment()\n\n const amountFunded = await this._getEnsureFundedAmount(addressToFund, minSpendingBalance, options?.minFundingIncrement)\n if (!amountFunded) return undefined\n\n const result = await this._getComposer()\n .addPayment({\n ...options,\n sender: dispenserAccount,\n receiver: addressToFund,\n amount: amountFunded,\n })\n .send(options)\n\n return {\n ...result,\n transaction: result.transactions[0],\n confirmation: result.confirmations[0],\n transactionId: result.txIds[0],\n amountFunded: amountFunded,\n }\n }\n\n /**\n * Funds a given account using the TestNet Dispenser API as a funding source such that\n * the account has a certain amount of Algo free to spend (accounting for Algo locked\n * in minimum balance requirement).\n *\n * https://developer.algorand.org/docs/get-details/accounts/#minimum-balance\n *\n * @param accountToFund The account to fund\n * @param dispenserClient The TestNet dispenser funding client\n * @param minSpendingBalance The minimum balance of Algo that the account should have available to spend (i.e. on top of minimum balance requirement)\n * @param options Optional parameters to control the funding increment, transaction or execution of the transaction\n * @example Example using AlgorandClient\n * ```typescript\n * // Basic example\n * await algorand.account.ensureFundedUsingDispenserAPI(\"ACCOUNTADDRESS\", algorand.client.getTestNetDispenserFromEnvironment(), algokit.algo(1))\n * // With configuration\n * await algorand.account.ensureFundedUsingDispenserAPI(\"ACCOUNTADDRESS\", algorand.client.getTestNetDispenserFromEnvironment(), algokit.algo(1),\n * { minFundingIncrement: algokit.algo(2) }\n * )\n * ```\n * @returns\n * - The result of executing the dispensing transaction and the `amountFunded` if funds were needed.\n * - `undefined` if no funds were needed.\n */\n async ensureFundedFromTestNetDispenserApi(\n accountToFund: string | Address,\n dispenserClient: TestNetDispenserApiClient,\n minSpendingBalance: AlgoAmount,\n options?: {\n minFundingIncrement?: AlgoAmount\n },\n ): Promise<EnsureFundedResult | undefined> {\n if (!(await this._clientManager.isTestNet())) {\n throw new Error('Attempt to fund using TestNet dispenser API on non TestNet network.')\n }\n\n const addressToFund = address(accountToFund)\n\n const amountFunded = await this._getEnsureFundedAmount(addressToFund, minSpendingBalance, options?.minFundingIncrement)\n if (!amountFunded) return undefined\n\n const result = await dispenserClient.fund(addressToFund, amountFunded.microAlgo)\n return {\n amountFunded: AlgoAmount.MicroAlgo(result.amount),\n transactionId: result.txId,\n }\n }\n}\n"],"names":["Address","memoize","KmdAccountManager","TransactionComposer","AlgoAmount","SigningAccount","MultisigAccount","DISPENSER_ACCOUNT","Config","calculateFundAmount"],"mappings":"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"}
@@ -1,13 +1,13 @@
1
- import algosdk from 'algosdk';
1
+ import algosdk, { Address } from 'algosdk';
2
2
  import { Config } from '../config.mjs';
3
3
  import { memoize, calculateFundAmount } from '../util.mjs';
4
4
  import { SigningAccount, MultisigAccount, DISPENSER_ACCOUNT } from './account.mjs';
5
5
  import { AlgoAmount } from './amount.mjs';
6
- import AlgoKitComposer from './composer.mjs';
6
+ import { TransactionComposer } from './composer.mjs';
7
7
  import { KmdAccountManager } from './kmd-account-manager.mjs';
8
8
 
9
9
  var LogicSigAccount = algosdk.LogicSigAccount;
10
- var AccountInformationModel = algosdk.modelsv2.Account;
10
+ const address = (address) => (typeof address === 'string' ? Address.fromString(address) : address);
11
11
  /**
12
12
  * Returns a `TransactionSigner` for the given account that can sign a transaction.
13
13
  * This function has memoization, so will return the same transaction signer for a given account.
@@ -37,7 +37,7 @@ class AccountManager {
37
37
  this._kmdAccountManager = new KmdAccountManager(clientManager);
38
38
  }
39
39
  _getComposer(getSuggestedParams) {
40
- return new AlgoKitComposer({
40
+ return new TransactionComposer({
41
41
  algod: this._clientManager.algod,
42
42
  getSigner: this.getSigner.bind(this),
43
43
  getSuggestedParams: getSuggestedParams ?? (() => this._clientManager.algod.getTransactionParams().do()),
@@ -72,12 +72,18 @@ class AccountManager {
72
72
  * retrieval and returns a `TransactionSignerAccount` along with the original account in an `account` property.
73
73
  */
74
74
  signerAccount(account) {
75
+ const signer = getAccountTransactionSigner(account);
75
76
  const acc = {
76
77
  addr: 'addr' in account ? account.addr : account.address(),
77
- signer: getAccountTransactionSigner(account),
78
+ signer: signer,
78
79
  };
79
- this._accounts[acc.addr] = acc;
80
- return { ...acc, account };
80
+ this._accounts[acc.addr.toString()] = acc;
81
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
82
+ const addressWithAccount = Address.fromString(acc.addr.toString());
83
+ addressWithAccount.account = account;
84
+ addressWithAccount.addr = acc.addr.toString();
85
+ addressWithAccount.signer = signer;
86
+ return addressWithAccount;
81
87
  }
82
88
  /**
83
89
  * Tracks the given account for later signing.
@@ -113,9 +119,23 @@ class AccountManager {
113
119
  * @returns The `AccountManager` instance for method chaining
114
120
  */
115
121
  setSigner(sender, signer) {
116
- this._accounts[sender] = { addr: sender, signer };
122
+ this._accounts[address(sender).toString()] = { addr: address(sender), signer };
117
123
  return this;
118
124
  }
125
+ /**
126
+ * Takes all registered signers from the given `AccountManager` and adds them to this `AccountManager`.
127
+ *
128
+ * This is useful for situations where you have multiple contexts you are building accounts in such as unit tests.
129
+ * @param anotherAccountManager Another account manager with signers registered
130
+ * @param overwriteExisting Whether or not to overwrite any signers that have the same sender address with the ones in the other account manager or not (default: true)
131
+ * @returns The `AccountManager` instance for method chaining
132
+ */
133
+ setSigners(anotherAccountManager, overwriteExisting = true) {
134
+ this._accounts = overwriteExisting
135
+ ? { ...this._accounts, ...anotherAccountManager._accounts }
136
+ : { ...anotherAccountManager._accounts, ...this._accounts };
137
+ return;
138
+ }
119
139
  /**
120
140
  * Returns the `TransactionSigner` for the given sender address, ready to sign a transaction for that sender.
121
141
  *
@@ -130,7 +150,7 @@ class AccountManager {
130
150
  * @returns The `TransactionSigner` or throws an error if not found and no default signer is set
131
151
  */
132
152
  getSigner(sender) {
133
- const signer = this._accounts[sender]?.signer ?? this._defaultSigner;
153
+ const signer = this._accounts[address(sender).toString()]?.signer ?? this._defaultSigner;
134
154
  if (!signer)
135
155
  throw new Error(`No signer found for address ${sender}`);
136
156
  return signer;
@@ -142,7 +162,7 @@ class AccountManager {
142
162
  * @param sender The sender address
143
163
  * @example
144
164
  * ```typescript
145
- * const sender = accountManager.random().addr
165
+ * const sender = accountManager.random()
146
166
  * // ...
147
167
  * // Returns the `TransactionSignerAccount` for `sender` that has previously been registered
148
168
  * const account = accountManager.getAccount(sender)
@@ -150,7 +170,7 @@ class AccountManager {
150
170
  * @returns The `TransactionSignerAccount` or throws an error if not found
151
171
  */
152
172
  getAccount(sender) {
153
- const account = this._accounts[sender];
173
+ const account = this._accounts[address(sender).toString()];
154
174
  if (!account)
155
175
  throw new Error(`No signer found for address ${sender}`);
156
176
  return account;
@@ -169,24 +189,27 @@ class AccountManager {
169
189
  * @returns The account information
170
190
  */
171
191
  async getInformation(sender) {
172
- const account = AccountInformationModel.from_obj_for_encoding(await this._clientManager.algod.accountInformation(typeof sender === 'string' ? sender : sender.addr).do());
192
+ const { round, lastHeartbeat = undefined, lastProposed = undefined, address, ...account } = await this._clientManager.algod.accountInformation(sender).do();
173
193
  return {
174
194
  ...account,
175
- // None of these can practically overflow 2^53
195
+ // None of the Number types can practically overflow 2^53
196
+ address: Address.fromString(address),
176
197
  balance: AlgoAmount.MicroAlgo(Number(account.amount)),
177
198
  amountWithoutPendingRewards: AlgoAmount.MicroAlgo(Number(account.amountWithoutPendingRewards)),
178
199
  minBalance: AlgoAmount.MicroAlgo(Number(account.minBalance)),
179
200
  pendingRewards: AlgoAmount.MicroAlgo(Number(account.pendingRewards)),
180
201
  rewards: AlgoAmount.MicroAlgo(Number(account.rewards)),
181
- validAsOfRound: BigInt(account.round),
202
+ validAsOfRound: BigInt(round),
182
203
  totalAppsOptedIn: Number(account.totalAppsOptedIn),
183
204
  totalAssetsOptedIn: Number(account.totalAssetsOptedIn),
184
205
  totalCreatedApps: Number(account.totalCreatedApps),
185
206
  totalCreatedAssets: Number(account.totalCreatedAssets),
186
- appsTotalExtraPages: account.appsTotalExtraPages ? Number(account.appsTotalExtraPages) : undefined,
187
- rewardBase: account.rewardBase ? Number(account.rewardBase) : undefined,
188
- totalBoxBytes: account.totalBoxBytes ? Number(account.totalBoxBytes) : undefined,
189
- totalBoxes: account.totalBoxes ? Number(account.totalBoxes) : undefined,
207
+ appsTotalExtraPages: account.appsTotalExtraPages !== undefined ? Number(account.appsTotalExtraPages) : undefined,
208
+ rewardBase: account.rewardBase !== undefined ? Number(account.rewardBase) : undefined,
209
+ totalBoxBytes: account.totalBoxBytes !== undefined ? Number(account.totalBoxBytes) : undefined,
210
+ totalBoxes: account.totalBoxes !== undefined ? Number(account.totalBoxes) : undefined,
211
+ lastHeartbeatRound: lastHeartbeat !== undefined ? BigInt(lastHeartbeat) : undefined,
212
+ lastProposedRound: lastProposed !== undefined ? BigInt(lastProposed) : undefined,
190
213
  };
191
214
  }
192
215
  /**
@@ -219,7 +242,7 @@ class AccountManager {
219
242
  * @returns The account
220
243
  */
221
244
  rekeyed(sender, account) {
222
- return this.signerAccount({ addr: sender, signer: account.signer });
245
+ return this.signerAccount({ addr: address(sender), signer: account.signer });
223
246
  }
224
247
  /**
225
248
  * Tracks and returns an Algorand account with private key loaded by convention from environment variables based on the given name identifier.
@@ -407,15 +430,15 @@ class AccountManager {
407
430
  const result = await this._getComposer()
408
431
  .addPayment({
409
432
  ...options,
410
- sender: typeof account === 'string' ? account : account.addr,
411
- receiver: typeof account === 'string' ? account : account.addr,
433
+ sender: address(account),
434
+ receiver: address(account),
412
435
  amount: AlgoAmount.MicroAlgo(0),
413
- rekeyTo: typeof rekeyTo === 'string' ? rekeyTo : rekeyTo.addr,
436
+ rekeyTo: address(typeof rekeyTo === 'object' && 'addr' in rekeyTo ? rekeyTo.addr : rekeyTo),
414
437
  })
415
- .execute(options);
438
+ .send(options);
416
439
  // If the rekey is a signing account set it as the signer for this account
417
- if (typeof rekeyTo !== 'string') {
418
- this.rekeyed(typeof account === 'string' ? account : account.addr, rekeyTo);
440
+ if (typeof rekeyTo === 'object' && 'addr' in rekeyTo) {
441
+ this.rekeyed(account, rekeyTo);
419
442
  }
420
443
  Config.getLogger(options?.suppressLog).info(`Rekeyed ${account} to ${rekeyTo} via transaction ${result.txIds.at(-1)}`);
421
444
  return { ...result, transaction: result.transactions.at(-1), confirmation: result.confirmations.at(-1) };
@@ -423,7 +446,7 @@ class AccountManager {
423
446
  async _getEnsureFundedAmount(sender, minSpendingBalance, minFundingIncrement) {
424
447
  const accountInfo = await this.getInformation(sender);
425
448
  const currentSpendingBalance = accountInfo.balance.microAlgo - accountInfo.minBalance.microAlgo;
426
- const amountFunded = calculateFundAmount(minSpendingBalance.microAlgo, currentSpendingBalance, minFundingIncrement?.microAlgo ?? 0);
449
+ const amountFunded = calculateFundAmount(minSpendingBalance.microAlgo, currentSpendingBalance, minFundingIncrement?.microAlgo ?? 0n);
427
450
  return amountFunded === null ? undefined : AlgoAmount.MicroAlgo(amountFunded);
428
451
  }
429
452
  /**
@@ -451,18 +474,18 @@ class AccountManager {
451
474
  * - `undefined` if no funds were needed.
452
475
  */
453
476
  async ensureFunded(accountToFund, dispenserAccount, minSpendingBalance, options) {
454
- const addressToFund = typeof accountToFund === 'string' ? accountToFund : accountToFund.addr;
477
+ const addressToFund = address(accountToFund);
455
478
  const amountFunded = await this._getEnsureFundedAmount(addressToFund, minSpendingBalance, options?.minFundingIncrement);
456
479
  if (!amountFunded)
457
480
  return undefined;
458
481
  const result = await this._getComposer()
459
482
  .addPayment({
460
483
  ...options,
461
- sender: typeof dispenserAccount === 'string' ? dispenserAccount : dispenserAccount.addr,
484
+ sender: address(dispenserAccount),
462
485
  receiver: addressToFund,
463
486
  amount: amountFunded,
464
487
  })
465
- .execute(options);
488
+ .send(options);
466
489
  return {
467
490
  ...result,
468
491
  transaction: result.transactions[0],
@@ -502,7 +525,7 @@ class AccountManager {
502
525
  * - `undefined` if no funds were needed.
503
526
  */
504
527
  async ensureFundedFromEnvironment(accountToFund, minSpendingBalance, options) {
505
- const addressToFund = typeof accountToFund === 'string' ? accountToFund : accountToFund.addr;
528
+ const addressToFund = address(accountToFund);
506
529
  const dispenserAccount = await this.dispenserFromEnvironment();
507
530
  const amountFunded = await this._getEnsureFundedAmount(addressToFund, minSpendingBalance, options?.minFundingIncrement);
508
531
  if (!amountFunded)
@@ -510,11 +533,11 @@ class AccountManager {
510
533
  const result = await this._getComposer()
511
534
  .addPayment({
512
535
  ...options,
513
- sender: dispenserAccount.addr,
536
+ sender: dispenserAccount,
514
537
  receiver: addressToFund,
515
538
  amount: amountFunded,
516
539
  })
517
- .execute(options);
540
+ .send(options);
518
541
  return {
519
542
  ...result,
520
543
  transaction: result.transactions[0],
@@ -551,7 +574,7 @@ class AccountManager {
551
574
  if (!(await this._clientManager.isTestNet())) {
552
575
  throw new Error('Attempt to fund using TestNet dispenser API on non TestNet network.');
553
576
  }
554
- const addressToFund = typeof accountToFund === 'string' ? accountToFund : accountToFund.addr;
577
+ const addressToFund = address(accountToFund);
555
578
  const amountFunded = await this._getEnsureFundedAmount(addressToFund, minSpendingBalance, options?.minFundingIncrement);
556
579
  if (!amountFunded)
557
580
  return undefined;