@algorandfoundation/algokit-utils 6.2.1 → 7.0.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (465) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +22 -26
  3. package/account/account.d.ts +21 -11
  4. package/account/get-account-config-from-environment.d.ts +0 -1
  5. package/account/get-account.d.ts +6 -7
  6. package/account/get-dispenser-account.d.ts +2 -3
  7. package/account/index.d.ts +0 -1
  8. package/account/mnemonic-account.d.ts +1 -2
  9. package/amount.d.ts +41 -9
  10. package/app-client.d.ts +19 -5
  11. package/app-deploy.d.ts +18 -2
  12. package/app.d.ts +39 -3
  13. package/asset.d.ts +10 -1
  14. package/config.d.ts +0 -1
  15. package/debugging/debugging.d.ts +3 -5
  16. package/debugging/index.d.ts +0 -2
  17. package/dispenser-client.d.ts +1 -2
  18. package/index.d.ts +8 -6
  19. package/index.js +61 -48
  20. package/index.js.map +1 -1
  21. package/index.mjs +27 -24
  22. package/index.mjs.map +1 -1
  23. package/indexer-lookup.d.ts +10 -9
  24. package/localnet/get-kmd-wallet-account.d.ts +1 -2
  25. package/localnet/get-localnet-dispenser-account.d.ts +1 -2
  26. package/localnet/get-or-create-kmd-wallet-account.d.ts +2 -3
  27. package/localnet/index.d.ts +0 -1
  28. package/localnet/is-localnet.d.ts +1 -2
  29. package/network-client.d.ts +3 -10
  30. package/package.json +5 -5
  31. package/{account → src/account}/account.js +38 -15
  32. package/src/account/account.js.map +1 -0
  33. package/{account → src/account}/account.mjs +39 -16
  34. package/src/account/account.mjs.map +1 -0
  35. package/src/account/get-account-config-from-environment.js.map +1 -0
  36. package/src/account/get-account-config-from-environment.mjs.map +1 -0
  37. package/{account → src/account}/get-account.js +5 -5
  38. package/src/account/get-account.js.map +1 -0
  39. package/{account → src/account}/get-account.mjs +5 -5
  40. package/src/account/get-account.mjs.map +1 -0
  41. package/{account → src/account}/get-dispenser-account.js +3 -3
  42. package/src/account/get-dispenser-account.js.map +1 -0
  43. package/{account → src/account}/get-dispenser-account.mjs +3 -3
  44. package/src/account/get-dispenser-account.mjs.map +1 -0
  45. package/{account → src/account}/mnemonic-account.js +1 -1
  46. package/src/account/mnemonic-account.js.map +1 -0
  47. package/{account → src/account}/mnemonic-account.mjs +1 -1
  48. package/src/account/mnemonic-account.mjs.map +1 -0
  49. package/src/amount.js +61 -0
  50. package/src/amount.js.map +1 -0
  51. package/src/amount.mjs +54 -0
  52. package/src/amount.mjs.map +1 -0
  53. package/{app-client.js → src/app-client.js} +20 -5
  54. package/src/app-client.js.map +1 -0
  55. package/{app-client.mjs → src/app-client.mjs} +20 -5
  56. package/src/app-client.mjs.map +1 -0
  57. package/src/app-deploy.js +285 -0
  58. package/src/app-deploy.js.map +1 -0
  59. package/src/app-deploy.mjs +276 -0
  60. package/src/app-deploy.mjs.map +1 -0
  61. package/src/app.js +349 -0
  62. package/src/app.js.map +1 -0
  63. package/src/app.mjs +329 -0
  64. package/src/app.mjs.map +1 -0
  65. package/src/asset.js +142 -0
  66. package/src/asset.js.map +1 -0
  67. package/src/asset.mjs +136 -0
  68. package/src/asset.mjs.map +1 -0
  69. package/{config.js → src/config.js} +1 -1
  70. package/src/config.js.map +1 -0
  71. package/{config.mjs → src/config.mjs} +1 -1
  72. package/src/config.mjs.map +1 -0
  73. package/src/debugging/debugging.js +15 -0
  74. package/src/debugging/debugging.js.map +1 -0
  75. package/src/debugging/debugging.mjs +13 -0
  76. package/src/debugging/debugging.mjs.map +1 -0
  77. package/{dispenser-client.js → src/dispenser-client.js} +3 -3
  78. package/src/dispenser-client.js.map +1 -0
  79. package/{dispenser-client.mjs → src/dispenser-client.mjs} +3 -3
  80. package/src/dispenser-client.mjs.map +1 -0
  81. package/{indexer-lookup.js → src/indexer-lookup.js} +14 -10
  82. package/src/indexer-lookup.js.map +1 -0
  83. package/{indexer-lookup.mjs → src/indexer-lookup.mjs} +14 -10
  84. package/src/indexer-lookup.mjs.map +1 -0
  85. package/{localnet → src/localnet}/get-kmd-wallet-account.js +3 -3
  86. package/src/localnet/get-kmd-wallet-account.js.map +1 -0
  87. package/{localnet → src/localnet}/get-kmd-wallet-account.mjs +3 -3
  88. package/src/localnet/get-kmd-wallet-account.mjs.map +1 -0
  89. package/{localnet → src/localnet}/get-localnet-dispenser-account.js +3 -3
  90. package/src/localnet/get-localnet-dispenser-account.js.map +1 -0
  91. package/{localnet → src/localnet}/get-localnet-dispenser-account.mjs +3 -3
  92. package/src/localnet/get-localnet-dispenser-account.mjs.map +1 -0
  93. package/{localnet → src/localnet}/get-or-create-kmd-wallet-account.js +4 -4
  94. package/src/localnet/get-or-create-kmd-wallet-account.js.map +1 -0
  95. package/{localnet → src/localnet}/get-or-create-kmd-wallet-account.mjs +4 -4
  96. package/src/localnet/get-or-create-kmd-wallet-account.mjs.map +1 -0
  97. package/{localnet → src/localnet}/is-localnet.js +2 -2
  98. package/src/localnet/is-localnet.js.map +1 -0
  99. package/{localnet → src/localnet}/is-localnet.mjs +2 -2
  100. package/src/localnet/is-localnet.mjs.map +1 -0
  101. package/{network-client.js → src/network-client.js} +5 -12
  102. package/src/network-client.js.map +1 -0
  103. package/{network-client.mjs → src/network-client.mjs} +5 -12
  104. package/src/network-client.mjs.map +1 -0
  105. package/{testing → src/testing}/account.js +16 -4
  106. package/src/testing/account.js.map +1 -0
  107. package/{testing → src/testing}/account.mjs +17 -5
  108. package/src/testing/account.mjs.map +1 -0
  109. package/src/testing/fixtures/algokit-log-capture-fixture.js.map +1 -0
  110. package/src/testing/fixtures/algokit-log-capture-fixture.mjs.map +1 -0
  111. package/{testing → src/testing}/fixtures/algorand-fixture.js +18 -14
  112. package/src/testing/fixtures/algorand-fixture.js.map +1 -0
  113. package/{testing → src/testing}/fixtures/algorand-fixture.mjs +18 -14
  114. package/src/testing/fixtures/algorand-fixture.mjs.map +1 -0
  115. package/src/testing/indexer.js.map +1 -0
  116. package/src/testing/indexer.mjs.map +1 -0
  117. package/{testing → src/testing}/test-logger.js +7 -3
  118. package/src/testing/test-logger.js.map +1 -0
  119. package/{testing → src/testing}/test-logger.mjs +7 -3
  120. package/src/testing/test-logger.mjs.map +1 -0
  121. package/src/testing/transaction-logger.js.map +1 -0
  122. package/src/testing/transaction-logger.mjs.map +1 -0
  123. package/src/transaction/legacy-bridge.js +129 -0
  124. package/src/transaction/legacy-bridge.js.map +1 -0
  125. package/src/transaction/legacy-bridge.mjs +124 -0
  126. package/src/transaction/legacy-bridge.mjs.map +1 -0
  127. package/{transaction → src/transaction}/perform-atomic-transaction-composer-simulate.js +14 -9
  128. package/src/transaction/perform-atomic-transaction-composer-simulate.js.map +1 -0
  129. package/{transaction → src/transaction}/perform-atomic-transaction-composer-simulate.mjs +15 -10
  130. package/src/transaction/perform-atomic-transaction-composer-simulate.mjs.map +1 -0
  131. package/{transaction → src/transaction}/transaction.js +221 -141
  132. package/src/transaction/transaction.js.map +1 -0
  133. package/{transaction → src/transaction}/transaction.mjs +222 -142
  134. package/src/transaction/transaction.mjs.map +1 -0
  135. package/src/transfer/transfer-algos.js +31 -0
  136. package/src/transfer/transfer-algos.js.map +1 -0
  137. package/src/transfer/transfer-algos.mjs +29 -0
  138. package/src/transfer/transfer-algos.mjs.map +1 -0
  139. package/src/transfer/transfer.js +112 -0
  140. package/src/transfer/transfer.js.map +1 -0
  141. package/src/transfer/transfer.mjs +108 -0
  142. package/src/transfer/transfer.mjs.map +1 -0
  143. package/{util.js → src/util.js} +33 -7
  144. package/src/util.js.map +1 -0
  145. package/{util.mjs → src/util.mjs} +31 -7
  146. package/src/util.mjs.map +1 -0
  147. package/testing/_asset.d.ts +3 -5
  148. package/testing/account.d.ts +4 -4
  149. package/testing/fixtures/algokit-log-capture-fixture.d.ts +0 -1
  150. package/testing/fixtures/algorand-fixture.d.ts +1 -2
  151. package/testing/fixtures/index.d.ts +0 -1
  152. package/testing/index.d.ts +0 -1
  153. package/testing/index.js +6 -6
  154. package/testing/index.mjs +6 -6
  155. package/testing/indexer.d.ts +0 -1
  156. package/testing/test-logger.d.ts +0 -1
  157. package/testing/transaction-logger.d.ts +0 -1
  158. package/transaction/index.d.ts +0 -1
  159. package/transaction/legacy-bridge.d.ts +35 -0
  160. package/transaction/perform-atomic-transaction-composer-simulate.d.ts +4 -2
  161. package/transaction/transaction.d.ts +39 -20
  162. package/transfer/index.d.ts +0 -1
  163. package/transfer/transfer-algos.d.ts +4 -3
  164. package/transfer/transfer.d.ts +8 -2
  165. package/types/account-manager.d.ts +165 -40
  166. package/types/account-manager.js +255 -59
  167. package/types/account-manager.js.map +1 -1
  168. package/types/account-manager.mjs +255 -59
  169. package/types/account-manager.mjs.map +1 -1
  170. package/types/account.d.ts +137 -14
  171. package/types/account.js +2 -2
  172. package/types/account.js.map +1 -1
  173. package/types/account.mjs +3 -3
  174. package/types/account.mjs.map +1 -1
  175. package/types/algo-http-client-with-retry.d.ts +1 -3
  176. package/types/algo-http-client-with-retry.js +34 -4
  177. package/types/algo-http-client-with-retry.js.map +1 -1
  178. package/types/algo-http-client-with-retry.mjs +33 -3
  179. package/types/algo-http-client-with-retry.mjs.map +1 -1
  180. package/types/algorand-client-interface.d.ts +28 -0
  181. package/types/algorand-client-interface.js +3 -0
  182. package/types/algorand-client-interface.js.map +1 -0
  183. package/types/algorand-client-interface.mjs +2 -0
  184. package/types/algorand-client-interface.mjs.map +1 -0
  185. package/types/algorand-client-transaction-creator.d.ts +718 -0
  186. package/types/algorand-client-transaction-creator.js +683 -0
  187. package/types/algorand-client-transaction-creator.js.map +1 -0
  188. package/types/algorand-client-transaction-creator.mjs +681 -0
  189. package/types/algorand-client-transaction-creator.mjs.map +1 -0
  190. package/types/algorand-client-transaction-sender.d.ts +1158 -0
  191. package/types/algorand-client-transaction-sender.js +852 -0
  192. package/types/algorand-client-transaction-sender.js.map +1 -0
  193. package/types/algorand-client-transaction-sender.mjs +850 -0
  194. package/types/algorand-client-transaction-sender.mjs.map +1 -0
  195. package/types/algorand-client.d.ts +48 -91
  196. package/types/algorand-client.js +53 -132
  197. package/types/algorand-client.js.map +1 -1
  198. package/types/algorand-client.mjs +55 -131
  199. package/types/algorand-client.mjs.map +1 -1
  200. package/types/amount.d.ts +23 -12
  201. package/types/amount.js +33 -10
  202. package/types/amount.js.map +1 -1
  203. package/types/amount.mjs +33 -10
  204. package/types/amount.mjs.map +1 -1
  205. package/types/app-arc56.d.ts +359 -0
  206. package/types/app-arc56.js +184 -0
  207. package/types/app-arc56.js.map +1 -0
  208. package/types/app-arc56.mjs +175 -0
  209. package/types/app-arc56.mjs.map +1 -0
  210. package/types/app-client.d.ts +1511 -15
  211. package/types/app-client.js +1029 -43
  212. package/types/app-client.js.map +1 -1
  213. package/types/app-client.mjs +1030 -45
  214. package/types/app-client.mjs.map +1 -1
  215. package/types/app-deployer.d.ts +126 -0
  216. package/types/app-deployer.js +353 -0
  217. package/types/app-deployer.js.map +1 -0
  218. package/types/app-deployer.mjs +351 -0
  219. package/types/app-deployer.mjs.map +1 -0
  220. package/types/app-factory.d.ts +846 -0
  221. package/types/app-factory.js +410 -0
  222. package/types/app-factory.js.map +1 -0
  223. package/types/app-factory.mjs +408 -0
  224. package/types/app-factory.mjs.map +1 -0
  225. package/types/app-manager.d.ts +244 -0
  226. package/types/app-manager.js +423 -0
  227. package/types/app-manager.js.map +1 -0
  228. package/types/app-manager.mjs +421 -0
  229. package/types/app-manager.mjs.map +1 -0
  230. package/types/app-spec.d.ts +2 -1
  231. package/types/app-spec.js +127 -0
  232. package/types/app-spec.js.map +1 -1
  233. package/types/app-spec.mjs +126 -0
  234. package/types/app-spec.mjs.map +1 -1
  235. package/types/app.d.ts +57 -18
  236. package/types/app.js +1 -1
  237. package/types/app.js.map +1 -1
  238. package/types/app.mjs +1 -1
  239. package/types/app.mjs.map +1 -1
  240. package/types/asset-manager.d.ts +205 -0
  241. package/types/asset-manager.js +176 -0
  242. package/types/asset-manager.js.map +1 -0
  243. package/types/asset-manager.mjs +174 -0
  244. package/types/asset-manager.mjs.map +1 -0
  245. package/types/asset.d.ts +4 -5
  246. package/types/async-event-emitter.d.ts +14 -0
  247. package/types/async-event-emitter.js +50 -0
  248. package/types/async-event-emitter.js.map +1 -0
  249. package/types/async-event-emitter.mjs +48 -0
  250. package/types/async-event-emitter.mjs.map +1 -0
  251. package/types/client-manager.d.ts +171 -58
  252. package/types/client-manager.js +198 -43
  253. package/types/client-manager.js.map +1 -1
  254. package/types/client-manager.mjs +199 -44
  255. package/types/client-manager.mjs.map +1 -1
  256. package/types/composer.d.ts +474 -132
  257. package/types/composer.js +461 -167
  258. package/types/composer.js.map +1 -1
  259. package/types/composer.mjs +461 -168
  260. package/types/composer.mjs.map +1 -1
  261. package/types/config.d.ts +3 -6
  262. package/types/config.js +5 -44
  263. package/types/config.js.map +1 -1
  264. package/types/config.mjs +5 -27
  265. package/types/config.mjs.map +1 -1
  266. package/types/debugging.d.ts +29 -101
  267. package/types/debugging.js +16 -109
  268. package/types/debugging.js.map +1 -1
  269. package/types/debugging.mjs +12 -107
  270. package/types/debugging.mjs.map +1 -1
  271. package/types/dispenser-client.d.ts +14 -6
  272. package/types/dispenser-client.js +19 -14
  273. package/types/dispenser-client.js.map +1 -1
  274. package/types/dispenser-client.mjs +19 -14
  275. package/types/dispenser-client.mjs.map +1 -1
  276. package/types/expand.d.ts +7 -0
  277. package/types/expand.js +3 -0
  278. package/types/expand.js.map +1 -0
  279. package/types/expand.mjs +2 -0
  280. package/types/expand.mjs.map +1 -0
  281. package/types/indexer.d.ts +74 -756
  282. package/types/indexer.js.map +1 -1
  283. package/types/indexer.mjs.map +1 -1
  284. package/types/kmd-account-manager.d.ts +5 -6
  285. package/types/kmd-account-manager.js +9 -9
  286. package/types/kmd-account-manager.js.map +1 -1
  287. package/types/kmd-account-manager.mjs +10 -10
  288. package/types/kmd-account-manager.mjs.map +1 -1
  289. package/types/lifecycle-events.d.ts +10 -0
  290. package/types/lifecycle-events.js +8 -0
  291. package/types/lifecycle-events.js.map +1 -0
  292. package/types/lifecycle-events.mjs +8 -0
  293. package/types/lifecycle-events.mjs.map +1 -0
  294. package/types/logging.d.ts +0 -1
  295. package/types/logging.js.map +1 -1
  296. package/types/logging.mjs.map +1 -1
  297. package/types/logic-error.d.ts +2 -4
  298. package/types/logic-error.js +3 -3
  299. package/types/logic-error.js.map +1 -1
  300. package/types/logic-error.mjs +3 -3
  301. package/types/logic-error.mjs.map +1 -1
  302. package/types/network-client.d.ts +21 -3
  303. package/types/network-client.js +10 -0
  304. package/types/network-client.js.map +1 -1
  305. package/types/network-client.mjs +9 -0
  306. package/types/network-client.mjs.map +1 -1
  307. package/types/testing.d.ts +9 -11
  308. package/types/transaction.d.ts +17 -4
  309. package/types/transfer.d.ts +8 -8
  310. package/util.d.ts +15 -2
  311. package/account/account.d.ts.map +0 -1
  312. package/account/account.js.map +0 -1
  313. package/account/account.mjs.map +0 -1
  314. package/account/get-account-config-from-environment.d.ts.map +0 -1
  315. package/account/get-account-config-from-environment.js.map +0 -1
  316. package/account/get-account-config-from-environment.mjs.map +0 -1
  317. package/account/get-account.d.ts.map +0 -1
  318. package/account/get-account.js.map +0 -1
  319. package/account/get-account.mjs.map +0 -1
  320. package/account/get-dispenser-account.d.ts.map +0 -1
  321. package/account/get-dispenser-account.js.map +0 -1
  322. package/account/get-dispenser-account.mjs.map +0 -1
  323. package/account/index.d.ts.map +0 -1
  324. package/account/mnemonic-account.d.ts.map +0 -1
  325. package/account/mnemonic-account.js.map +0 -1
  326. package/account/mnemonic-account.mjs.map +0 -1
  327. package/amount.d.ts.map +0 -1
  328. package/amount.js +0 -34
  329. package/amount.js.map +0 -1
  330. package/amount.mjs +0 -30
  331. package/amount.mjs.map +0 -1
  332. package/app-client.d.ts.map +0 -1
  333. package/app-client.js.map +0 -1
  334. package/app-client.mjs.map +0 -1
  335. package/app-deploy.d.ts.map +0 -1
  336. package/app-deploy.js +0 -468
  337. package/app-deploy.js.map +0 -1
  338. package/app-deploy.mjs +0 -459
  339. package/app-deploy.mjs.map +0 -1
  340. package/app.d.ts.map +0 -1
  341. package/app.js +0 -599
  342. package/app.js.map +0 -1
  343. package/app.mjs +0 -579
  344. package/app.mjs.map +0 -1
  345. package/asset.d.ts.map +0 -1
  346. package/asset.js +0 -272
  347. package/asset.js.map +0 -1
  348. package/asset.mjs +0 -266
  349. package/asset.mjs.map +0 -1
  350. package/config.d.ts.map +0 -1
  351. package/config.js.map +0 -1
  352. package/config.mjs.map +0 -1
  353. package/debugging/debugging.d.ts.map +0 -1
  354. package/debugging/debugging.js +0 -139
  355. package/debugging/debugging.js.map +0 -1
  356. package/debugging/debugging.mjs +0 -118
  357. package/debugging/debugging.mjs.map +0 -1
  358. package/debugging/index.d.ts.map +0 -1
  359. package/debugging/simulate-and-persist-response.d.ts +0 -20
  360. package/debugging/simulate-and-persist-response.d.ts.map +0 -1
  361. package/debugging/simulate-and-persist-response.js +0 -108
  362. package/debugging/simulate-and-persist-response.js.map +0 -1
  363. package/debugging/simulate-and-persist-response.mjs +0 -89
  364. package/debugging/simulate-and-persist-response.mjs.map +0 -1
  365. package/dispenser-client.d.ts.map +0 -1
  366. package/dispenser-client.js.map +0 -1
  367. package/dispenser-client.mjs.map +0 -1
  368. package/index.d.ts.map +0 -1
  369. package/indexer-lookup.d.ts.map +0 -1
  370. package/indexer-lookup.js.map +0 -1
  371. package/indexer-lookup.mjs.map +0 -1
  372. package/localnet/get-kmd-wallet-account.d.ts.map +0 -1
  373. package/localnet/get-kmd-wallet-account.js.map +0 -1
  374. package/localnet/get-kmd-wallet-account.mjs.map +0 -1
  375. package/localnet/get-localnet-dispenser-account.d.ts.map +0 -1
  376. package/localnet/get-localnet-dispenser-account.js.map +0 -1
  377. package/localnet/get-localnet-dispenser-account.mjs.map +0 -1
  378. package/localnet/get-or-create-kmd-wallet-account.d.ts.map +0 -1
  379. package/localnet/get-or-create-kmd-wallet-account.js.map +0 -1
  380. package/localnet/get-or-create-kmd-wallet-account.mjs.map +0 -1
  381. package/localnet/index.d.ts.map +0 -1
  382. package/localnet/is-localnet.d.ts.map +0 -1
  383. package/localnet/is-localnet.js.map +0 -1
  384. package/localnet/is-localnet.mjs.map +0 -1
  385. package/network-client.d.ts.map +0 -1
  386. package/network-client.js.map +0 -1
  387. package/network-client.mjs.map +0 -1
  388. package/testing/_asset.d.ts.map +0 -1
  389. package/testing/account.d.ts.map +0 -1
  390. package/testing/account.js.map +0 -1
  391. package/testing/account.mjs.map +0 -1
  392. package/testing/fixtures/algokit-log-capture-fixture.d.ts.map +0 -1
  393. package/testing/fixtures/algokit-log-capture-fixture.js.map +0 -1
  394. package/testing/fixtures/algokit-log-capture-fixture.mjs.map +0 -1
  395. package/testing/fixtures/algorand-fixture.d.ts.map +0 -1
  396. package/testing/fixtures/algorand-fixture.js.map +0 -1
  397. package/testing/fixtures/algorand-fixture.mjs.map +0 -1
  398. package/testing/fixtures/index.d.ts.map +0 -1
  399. package/testing/index.d.ts.map +0 -1
  400. package/testing/indexer.d.ts.map +0 -1
  401. package/testing/indexer.js.map +0 -1
  402. package/testing/indexer.mjs.map +0 -1
  403. package/testing/test-logger.d.ts.map +0 -1
  404. package/testing/test-logger.js.map +0 -1
  405. package/testing/test-logger.mjs.map +0 -1
  406. package/testing/transaction-logger.d.ts.map +0 -1
  407. package/testing/transaction-logger.js.map +0 -1
  408. package/testing/transaction-logger.mjs.map +0 -1
  409. package/transaction/index.d.ts.map +0 -1
  410. package/transaction/perform-atomic-transaction-composer-simulate.d.ts.map +0 -1
  411. package/transaction/perform-atomic-transaction-composer-simulate.js.map +0 -1
  412. package/transaction/perform-atomic-transaction-composer-simulate.mjs.map +0 -1
  413. package/transaction/transaction.d.ts.map +0 -1
  414. package/transaction/transaction.js.map +0 -1
  415. package/transaction/transaction.mjs.map +0 -1
  416. package/transfer/index.d.ts.map +0 -1
  417. package/transfer/transfer-algos.d.ts.map +0 -1
  418. package/transfer/transfer-algos.js +0 -40
  419. package/transfer/transfer-algos.js.map +0 -1
  420. package/transfer/transfer-algos.mjs +0 -38
  421. package/transfer/transfer-algos.mjs.map +0 -1
  422. package/transfer/transfer.d.ts.map +0 -1
  423. package/transfer/transfer.js +0 -147
  424. package/transfer/transfer.js.map +0 -1
  425. package/transfer/transfer.mjs +0 -143
  426. package/transfer/transfer.mjs.map +0 -1
  427. package/types/account-manager.d.ts.map +0 -1
  428. package/types/account.d.ts.map +0 -1
  429. package/types/algo-http-client-with-retry.d.ts.map +0 -1
  430. package/types/algorand-client.d.ts.map +0 -1
  431. package/types/amount.d.ts.map +0 -1
  432. package/types/app-client.d.ts.map +0 -1
  433. package/types/app-spec.d.ts.map +0 -1
  434. package/types/app.d.ts.map +0 -1
  435. package/types/asset.d.ts.map +0 -1
  436. package/types/client-manager.d.ts.map +0 -1
  437. package/types/composer.d.ts.map +0 -1
  438. package/types/config.d.ts.map +0 -1
  439. package/types/debugging.d.ts.map +0 -1
  440. package/types/dispenser-client.d.ts.map +0 -1
  441. package/types/indexer.d.ts.map +0 -1
  442. package/types/kmd-account-manager.d.ts.map +0 -1
  443. package/types/logging.d.ts.map +0 -1
  444. package/types/logic-error.d.ts.map +0 -1
  445. package/types/network-client.d.ts.map +0 -1
  446. package/types/testing.d.ts.map +0 -1
  447. package/types/transaction.d.ts.map +0 -1
  448. package/types/transfer.d.ts.map +0 -1
  449. package/types/urlTokenBaseHTTPClient.d.ts +0 -41
  450. package/types/urlTokenBaseHTTPClient.d.ts.map +0 -1
  451. package/types/urlTokenBaseHTTPClient.js +0 -153
  452. package/types/urlTokenBaseHTTPClient.js.map +0 -1
  453. package/types/urlTokenBaseHTTPClient.mjs +0 -151
  454. package/types/urlTokenBaseHTTPClient.mjs.map +0 -1
  455. package/util.d.ts.map +0 -1
  456. package/util.js.map +0 -1
  457. package/util.mjs.map +0 -1
  458. /package/{account → src/account}/get-account-config-from-environment.js +0 -0
  459. /package/{account → src/account}/get-account-config-from-environment.mjs +0 -0
  460. /package/{testing → src/testing}/fixtures/algokit-log-capture-fixture.js +0 -0
  461. /package/{testing → src/testing}/fixtures/algokit-log-capture-fixture.mjs +0 -0
  462. /package/{testing → src/testing}/indexer.js +0 -0
  463. /package/{testing → src/testing}/indexer.mjs +0 -0
  464. /package/{testing → src/testing}/transaction-logger.js +0 -0
  465. /package/{testing → src/testing}/transaction-logger.mjs +0 -0
@@ -1,18 +1,22 @@
1
- import algosdk from 'algosdk';
2
- import { encodeLease, encodeTransactionNote, sendAtomicTransactionComposer } from '../transaction/transaction.mjs';
3
- import { ClientManager } from './client-manager.mjs';
1
+ import algosdk, { Address } from 'algosdk';
2
+ import { Config } from '../src/config.mjs';
3
+ import { encodeLease, sendAtomicTransactionComposer, getABIReturnValue } from '../src/transaction/transaction.mjs';
4
+ import { APP_PAGE_MAX_SIZE } from './app.mjs';
5
+ import { AppManager } from './app-manager.mjs';
6
+ import { EventType } from './lifecycle-events.mjs';
7
+ import { genesisIdIsLocalNet } from './network-client.mjs';
4
8
 
9
+ var AtomicTransactionComposer = algosdk.AtomicTransactionComposer;
5
10
  var isTransactionWithSigner = algosdk.isTransactionWithSigner;
6
- var encodeAddress = algosdk.encodeAddress;
7
- /** AlgoKit Composer helps you compose and execute transactions as a transaction group.
8
- *
9
- * Note: this class is a new Beta feature and may be subject to change.
10
- *
11
- * @beta
12
- */
13
- class AlgokitComposer {
11
+ var modelsv2 = algosdk.modelsv2;
12
+ const address = (address) => {
13
+ return typeof address === 'string' ? Address.fromString(address) : address;
14
+ };
15
+ const MAX_TRANSACTION_GROUP_SIZE = 16;
16
+ /** TransactionComposer helps you compose and execute transactions as a transaction group. */
17
+ class TransactionComposer {
14
18
  /**
15
- * Create an `AlgoKitComposer`.
19
+ * Create a `TransactionComposer`.
16
20
  * @param params The configuration for this composer
17
21
  */
18
22
  constructor(params) {
@@ -23,7 +27,7 @@ class AlgokitComposer {
23
27
  /** Transactions that have not yet been composed */
24
28
  this.txns = [];
25
29
  /** The default transaction validity window */
26
- this.defaultValidityWindow = 10;
30
+ this.defaultValidityWindow = 10n;
27
31
  /** Whether the validity window was explicitly set on construction */
28
32
  this.defaultValidityWindowIsExplicit = false;
29
33
  this.algod = params.algod;
@@ -32,6 +36,21 @@ class AlgokitComposer {
32
36
  this.getSigner = params.getSigner;
33
37
  this.defaultValidityWindow = params.defaultValidityWindow ?? this.defaultValidityWindow;
34
38
  this.defaultValidityWindowIsExplicit = params.defaultValidityWindow !== undefined;
39
+ this.appManager = params.appManager ?? new AppManager(params.algod);
40
+ }
41
+ /**
42
+ * Add a pre-built transaction to the transaction group.
43
+ * @param transaction The pre-built transaction
44
+ * @param signer Optional signer override for the transaction
45
+ * @returns The composer so you can chain method calls
46
+ */
47
+ addTransaction(transaction, signer) {
48
+ this.txns.push({
49
+ txn: transaction,
50
+ signer: signer ?? this.getSigner(transaction.sender),
51
+ type: 'txnWithSigner',
52
+ });
53
+ return this;
35
54
  }
36
55
  /**
37
56
  * Add a payment transaction to the transaction group.
@@ -96,9 +115,53 @@ class AlgokitComposer {
96
115
  this.txns.push({ ...params, type: 'assetOptIn' });
97
116
  return this;
98
117
  }
118
+ /**
119
+ * Add an asset opt-out transaction to the transaction group.
120
+ * @param params The asset opt-out transaction parameters
121
+ * @returns The composer so you can chain method calls
122
+ */
123
+ addAssetOptOut(params) {
124
+ this.txns.push({ ...params, type: 'assetOptOut' });
125
+ return this;
126
+ }
127
+ /**
128
+ * Add an application create transaction to the transaction group.
129
+ *
130
+ * Note: we recommend using app clients to make it easier to make app calls.
131
+ * @param params The application create transaction parameters
132
+ * @returns The composer so you can chain method calls
133
+ */
134
+ addAppCreate(params) {
135
+ this.txns.push({ ...params, type: 'appCall' });
136
+ return this;
137
+ }
138
+ /**
139
+ * Add an application update transaction to the transaction group.
140
+ *
141
+ * Note: we recommend using app clients to make it easier to make app calls.
142
+ * @param params The application update transaction parameters
143
+ * @returns The composer so you can chain method calls
144
+ */
145
+ addAppUpdate(params) {
146
+ this.txns.push({ ...params, type: 'appCall', onComplete: algosdk.OnApplicationComplete.UpdateApplicationOC });
147
+ return this;
148
+ }
149
+ /**
150
+ * Add an application delete transaction to the transaction group.
151
+ *
152
+ * Note: we recommend using app clients to make it easier to make app calls.
153
+ * @param params The application delete transaction parameters
154
+ * @returns The composer so you can chain method calls
155
+ */
156
+ addAppDelete(params) {
157
+ this.txns.push({ ...params, type: 'appCall', onComplete: algosdk.OnApplicationComplete.DeleteApplicationOC });
158
+ return this;
159
+ }
99
160
  /**
100
161
  * Add an application call transaction to the transaction group.
101
162
  *
163
+ * If you want to create or update an app use `addAppCreate` or `addAppUpdate`.
164
+ *
102
165
  * Note: we recommend using app clients to make it easier to make app calls.
103
166
  * @param params The application call transaction parameters
104
167
  * @returns The composer so you can chain method calls
@@ -108,13 +171,46 @@ class AlgokitComposer {
108
171
  return this;
109
172
  }
110
173
  /**
111
- * Add an ABI method application call transaction to the transaction group.
174
+ * Add an ABI method create application call transaction to the transaction group.
175
+ *
176
+ * Note: we recommend using app clients to make it easier to make app calls.
177
+ * @param params The ABI create method application call transaction parameters
178
+ * @returns The composer so you can chain method calls
179
+ */
180
+ addAppCreateMethodCall(params) {
181
+ this.txns.push({ ...params, type: 'methodCall' });
182
+ return this;
183
+ }
184
+ /**
185
+ * Add an ABI method update application call transaction to the transaction group.
186
+ *
187
+ * Note: we recommend using app clients to make it easier to make app calls.
188
+ * @param params The ABI update method application call transaction parameters
189
+ * @returns The composer so you can chain method calls
190
+ */
191
+ addAppUpdateMethodCall(params) {
192
+ this.txns.push({ ...params, type: 'methodCall', onComplete: algosdk.OnApplicationComplete.UpdateApplicationOC });
193
+ return this;
194
+ }
195
+ /**
196
+ * Add an ABI method delete application call transaction to the transaction group.
197
+ *
198
+ * Note: we recommend using app clients to make it easier to make app calls.
199
+ * @param params The ABI delete method application call transaction parameters
200
+ * @returns The composer so you can chain method calls
201
+ */
202
+ addAppDeleteMethodCall(params) {
203
+ this.txns.push({ ...params, type: 'methodCall', onComplete: algosdk.OnApplicationComplete.DeleteApplicationOC });
204
+ return this;
205
+ }
206
+ /**
207
+ * Add a non-create/non-update ABI method application call transaction to the transaction group.
112
208
  *
113
209
  * Note: we recommend using app clients to make it easier to make app calls.
114
210
  * @param params The ABI method application call transaction parameters
115
211
  * @returns The composer so you can chain method calls
116
212
  */
117
- addMethodCall(params) {
213
+ addAppCallMethodCall(params) {
118
214
  this.txns.push({ ...params, type: 'methodCall' });
119
215
  return this;
120
216
  }
@@ -136,150 +232,206 @@ class AlgokitComposer {
136
232
  this.txns.push({ atc, type: 'atc' });
137
233
  return this;
138
234
  }
235
+ /** Build an ATC and return transactions ready to be incorporated into a broader set of transactions this composer is composing */
139
236
  buildAtc(atc) {
140
237
  const group = atc.buildGroup();
141
- const txnWithSigners = group.map((ts) => {
238
+ const txnWithSigners = group.map((ts, idx) => {
239
+ // Remove underlying group ID from the transaction since it will be re-grouped when this TransactionComposer is built
142
240
  ts.txn.group = undefined;
241
+ // If this was a method call stash the ABIMethod for later
242
+ if (atc['methodCalls'].get(idx)) {
243
+ this.txnMethodMap.set(ts.txn.txID(), atc['methodCalls'].get(idx));
244
+ }
143
245
  return ts;
144
246
  });
145
- const method = atc['methodCalls'].get(group.length - 1);
146
- if (method)
147
- this.txnMethodMap.set(txnWithSigners.at(-1).txn.txID(), method);
148
247
  return txnWithSigners;
149
248
  }
150
- commonTxnBuildStep(params, txn, suggestedParams) {
249
+ commonTxnBuildStep(buildTxn, params, txnParams) {
250
+ // We are going to mutate suggested params, let's create a clone first
251
+ txnParams.suggestedParams = { ...txnParams.suggestedParams };
151
252
  if (params.lease)
152
- txn.addLease(encodeLease(params.lease));
253
+ txnParams.lease = encodeLease(params.lease);
153
254
  if (params.rekeyTo)
154
- txn.addRekey(params.rekeyTo);
255
+ txnParams.rekeyTo = address(params.rekeyTo);
256
+ const encoder = new TextEncoder();
155
257
  if (params.note)
156
- txn.note = encodeTransactionNote(params.note);
258
+ txnParams.note = (typeof params.note === 'string' ? encoder.encode(params.note) : params.note);
157
259
  if (params.firstValidRound) {
158
- txn.firstRound = Number(params.firstValidRound);
260
+ txnParams.suggestedParams.firstValid = params.firstValidRound;
159
261
  }
160
262
  if (params.lastValidRound) {
161
- txn.lastRound = Number(params.lastValidRound);
263
+ txnParams.suggestedParams.lastValid = params.lastValidRound;
162
264
  }
163
265
  else {
164
266
  // If the validity window isn't set in this transaction or by default and we are pointing at
165
267
  // LocalNet set a bigger window to avoid dead transactions
166
- const window = params.validityWindow ??
167
- (!this.defaultValidityWindowIsExplicit && ClientManager.genesisIdIsLocalNet(suggestedParams.genesisID)
168
- ? 1000
169
- : this.defaultValidityWindow);
170
- txn.lastRound = txn.firstRound + window;
268
+ const window = params.validityWindow
269
+ ? BigInt(params.validityWindow)
270
+ : !this.defaultValidityWindowIsExplicit && genesisIdIsLocalNet(txnParams.suggestedParams.genesisID ?? 'unknown')
271
+ ? 1000n
272
+ : this.defaultValidityWindow;
273
+ txnParams.suggestedParams.lastValid = BigInt(txnParams.suggestedParams.firstValid) + window;
171
274
  }
172
275
  if (params.staticFee !== undefined && params.extraFee !== undefined) {
173
276
  throw Error('Cannot set both staticFee and extraFee');
174
277
  }
175
278
  if (params.staticFee !== undefined) {
176
- txn.fee = params.staticFee.microAlgos;
279
+ txnParams.suggestedParams.fee = params.staticFee.microAlgo;
280
+ txnParams.suggestedParams.flatFee = true;
177
281
  }
178
- else {
179
- txn.fee = txn.estimateSize() * suggestedParams.fee || algosdk.ALGORAND_MIN_TX_FEE;
180
- if (params.extraFee)
181
- txn.fee += params.extraFee.microAlgos;
182
- }
183
- txn.flatFee = true;
184
- if (params.maxFee !== undefined && txn.fee > params.maxFee.microAlgos) {
185
- throw Error(`Transaction fee ${txn.fee} is greater than maxFee ${params.maxFee}`);
282
+ const txn = buildTxn(txnParams);
283
+ if (params.extraFee)
284
+ txn.fee += params.extraFee.microAlgo;
285
+ if (params.maxFee !== undefined && txn.fee > params.maxFee.microAlgo) {
286
+ throw Error(`Transaction fee ${txn.fee} µALGO is greater than maxFee ${params.maxFee}`);
186
287
  }
187
288
  return txn;
188
289
  }
189
- async buildMethodCall(params, suggestedParams) {
290
+ /**
291
+ * Builds an ABI method call transaction and any other associated transactions represented in the ABI args.
292
+ * @param includeSigner Whether to include the actual signer for the transactions.
293
+ * If you are just building transactions without signers yet then set this to `false`.
294
+ */
295
+ async buildMethodCall(params, suggestedParams, includeSigner) {
190
296
  const methodArgs = [];
297
+ const transactionsForGroup = [];
191
298
  const isAbiValue = (x) => {
192
299
  if (Array.isArray(x))
193
300
  return x.length == 0 || x.every(isAbiValue);
194
- return ['boolean', 'number', 'bigint', 'string', 'Uint8Array'].includes(typeof x);
301
+ return typeof x === 'bigint' || typeof x === 'boolean' || typeof x === 'number' || typeof x === 'string' || x instanceof Uint8Array;
195
302
  };
196
- for (const arg of params.args ?? []) {
303
+ for (let i = (params.args ?? []).length - 1; i >= 0; i--) {
304
+ const arg = params.args[i];
305
+ if (arg === undefined) {
306
+ // An undefined transaction argument signals that the value will be supplied by a method call argument
307
+ if (algosdk.abiTypeIsTransaction(params.method.args[i].type) && transactionsForGroup.length > 0) {
308
+ // Move the last transaction from the group to the method call arguments to appease algosdk
309
+ const placeholderTransaction = transactionsForGroup.splice(-1, 1)[0];
310
+ methodArgs.push(placeholderTransaction);
311
+ continue;
312
+ }
313
+ throw Error(`No value provided for argument ${i + 1} within call to ${params.method.name}`);
314
+ }
197
315
  if (isAbiValue(arg)) {
198
316
  methodArgs.push(arg);
199
317
  continue;
200
318
  }
319
+ // Underlying ATC only supports addresses as strings
320
+ if (arg instanceof Address) {
321
+ methodArgs.push(arg.toString());
322
+ continue;
323
+ }
201
324
  if (isTransactionWithSigner(arg)) {
202
325
  methodArgs.push(arg);
203
326
  continue;
204
327
  }
205
328
  if ('method' in arg) {
206
- const tempTxnWithSigners = await this.buildMethodCall(arg, suggestedParams);
207
- methodArgs.push(...tempTxnWithSigners);
329
+ const tempTxnWithSigners = await this.buildMethodCall(arg, suggestedParams, includeSigner);
330
+ // If there is any transaction args, add to the atc
331
+ // Everything else should be added as method args
332
+ methodArgs.push(...tempTxnWithSigners.slice(-1)); // Add the method call itself as a method arg
333
+ transactionsForGroup.push(...tempTxnWithSigners.slice(0, -1).reverse()); // Add any transaction arguments to the atc
208
334
  continue;
209
335
  }
210
336
  const txn = await arg;
211
337
  methodArgs.push({
212
338
  txn,
213
- signer: params.signer
214
- ? 'signer' in params.signer
215
- ? params.signer.signer
216
- : params.signer
217
- : this.getSigner(encodeAddress(txn.from.publicKey)),
339
+ signer: includeSigner
340
+ ? params.signer
341
+ ? 'signer' in params.signer
342
+ ? params.signer.signer
343
+ : params.signer
344
+ : this.getSigner(txn.sender)
345
+ : TransactionComposer.NULL_SIGNER,
218
346
  });
219
347
  }
220
348
  const methodAtc = new algosdk.AtomicTransactionComposer();
221
- const appID = Number(params.appId || 0);
222
- methodAtc.addMethodCall({
223
- appID,
349
+ transactionsForGroup.reverse().forEach((txn) => methodAtc.addTransaction(txn));
350
+ const appId = Number('appId' in params ? params.appId : 0n);
351
+ const approvalProgram = 'approvalProgram' in params
352
+ ? typeof params.approvalProgram === 'string'
353
+ ? (await this.appManager.compileTeal(params.approvalProgram)).compiledBase64ToBytes
354
+ : params.approvalProgram
355
+ : undefined;
356
+ const clearStateProgram = 'clearStateProgram' in params
357
+ ? typeof params.clearStateProgram === 'string'
358
+ ? (await this.appManager.compileTeal(params.clearStateProgram)).compiledBase64ToBytes
359
+ : params.clearStateProgram
360
+ : undefined;
361
+ const txnParams = {
362
+ appID: appId,
224
363
  sender: params.sender,
225
364
  suggestedParams,
226
- onComplete: params.onComplete,
365
+ onComplete: params.onComplete ?? algosdk.OnApplicationComplete.NoOpOC,
227
366
  appAccounts: params.accountReferences,
228
367
  appForeignApps: params.appReferences?.map((x) => Number(x)),
229
368
  appForeignAssets: params.assetReferences?.map((x) => Number(x)),
230
- approvalProgram: params.approvalProgram,
231
- clearProgram: params.clearProgram,
232
- extraPages: params.extraPages,
233
- numLocalInts: params.schema?.localUints || (appID === 0 ? 0 : undefined),
234
- numLocalByteSlices: params.schema?.localByteSlices || (appID === 0 ? 0 : undefined),
235
- numGlobalInts: params.schema?.globalUints || (appID === 0 ? 0 : undefined),
236
- numGlobalByteSlices: params.schema?.globalByteSlices || (appID === 0 ? 0 : undefined),
369
+ boxes: params.boxReferences?.map(AppManager.getBoxReference),
370
+ approvalProgram,
371
+ clearProgram: clearStateProgram,
372
+ extraPages: appId === 0
373
+ ? 'extraProgramPages' in params && params.extraProgramPages !== undefined
374
+ ? params.extraProgramPages
375
+ : approvalProgram
376
+ ? Math.floor((approvalProgram.length + (clearStateProgram?.length ?? 0)) / APP_PAGE_MAX_SIZE)
377
+ : 0
378
+ : undefined,
379
+ numLocalInts: appId === 0 ? ('schema' in params ? (params.schema?.localInts ?? 0) : 0) : undefined,
380
+ numLocalByteSlices: appId === 0 ? ('schema' in params ? (params.schema?.localByteSlices ?? 0) : 0) : undefined,
381
+ numGlobalInts: appId === 0 ? ('schema' in params ? (params.schema?.globalInts ?? 0) : 0) : undefined,
382
+ numGlobalByteSlices: appId === 0 ? ('schema' in params ? (params.schema?.globalByteSlices ?? 0) : 0) : undefined,
237
383
  method: params.method,
238
- signer: params.signer ? ('signer' in params.signer ? params.signer.signer : params.signer) : this.getSigner(params.sender),
239
- methodArgs: methodArgs,
384
+ signer: includeSigner
385
+ ? params.signer
386
+ ? 'signer' in params.signer
387
+ ? params.signer.signer
388
+ : params.signer
389
+ : this.getSigner(params.sender)
390
+ : TransactionComposer.NULL_SIGNER,
391
+ methodArgs: methodArgs.reverse(),
240
392
  // note, lease, and rekeyTo are set in the common build step
241
393
  note: undefined,
242
394
  lease: undefined,
243
395
  rekeyTo: undefined,
244
- });
245
- // Run the actual method call txn through the common build step to set fees and validity rounds
246
- const group = methodAtc.buildGroup();
247
- const methodIdx = group.length - 1;
248
- group[methodIdx].txn = this.commonTxnBuildStep(params, group[methodIdx].txn, suggestedParams);
396
+ };
397
+ // Build the transaction
398
+ this.commonTxnBuildStep((txnParams) => {
399
+ methodAtc.addMethodCall(txnParams);
400
+ return methodAtc.buildGroup()[methodAtc.count() - 1].txn;
401
+ }, params, txnParams);
402
+ // Process the ATC to get a set of transactions ready for broader grouping
249
403
  return this.buildAtc(methodAtc);
250
404
  }
251
405
  buildPayment(params, suggestedParams) {
252
- const txn = algosdk.makePaymentTxnWithSuggestedParamsFromObject({
253
- from: params.sender,
254
- to: params.receiver,
255
- amount: params.amount.microAlgos,
406
+ return this.commonTxnBuildStep(algosdk.makePaymentTxnWithSuggestedParamsFromObject, params, {
407
+ sender: params.sender,
408
+ receiver: params.receiver,
409
+ amount: params.amount.microAlgo,
256
410
  closeRemainderTo: params.closeRemainderTo,
257
411
  suggestedParams,
258
412
  });
259
- return this.commonTxnBuildStep(params, txn, suggestedParams);
260
413
  }
261
414
  buildAssetCreate(params, suggestedParams) {
262
- const txn = algosdk.makeAssetCreateTxnWithSuggestedParamsFromObject({
263
- from: params.sender,
415
+ return this.commonTxnBuildStep(algosdk.makeAssetCreateTxnWithSuggestedParamsFromObject, params, {
416
+ sender: params.sender,
264
417
  total: params.total,
265
418
  decimals: params.decimals ?? 0,
266
419
  assetName: params.assetName,
267
420
  unitName: params.unitName,
268
421
  assetURL: params.url,
269
422
  defaultFrozen: params.defaultFrozen ?? false,
270
- assetMetadataHash: params.metadataHash,
423
+ assetMetadataHash: typeof params.metadataHash === 'string' ? Buffer.from(params.metadataHash, 'utf-8') : params.metadataHash,
271
424
  manager: params.manager,
272
425
  reserve: params.reserve,
273
426
  freeze: params.freeze,
274
427
  clawback: params.clawback,
275
428
  suggestedParams,
276
429
  });
277
- return this.commonTxnBuildStep(params, txn, suggestedParams);
278
430
  }
279
431
  buildAssetConfig(params, suggestedParams) {
280
- const txn = algosdk.makeAssetConfigTxnWithSuggestedParamsFromObject({
281
- from: params.sender,
282
- assetIndex: Number(params.assetId),
432
+ return this.commonTxnBuildStep(algosdk.makeAssetConfigTxnWithSuggestedParamsFromObject, params, {
433
+ sender: params.sender,
434
+ assetIndex: params.assetId,
283
435
  suggestedParams,
284
436
  manager: params.manager,
285
437
  reserve: params.reserve,
@@ -287,76 +439,120 @@ class AlgokitComposer {
287
439
  clawback: params.clawback,
288
440
  strictEmptyAddressChecking: false,
289
441
  });
290
- return this.commonTxnBuildStep(params, txn, suggestedParams);
291
442
  }
292
443
  buildAssetDestroy(params, suggestedParams) {
293
- const txn = algosdk.makeAssetDestroyTxnWithSuggestedParamsFromObject({
294
- from: params.sender,
295
- assetIndex: Number(params.assetId),
444
+ return this.commonTxnBuildStep(algosdk.makeAssetDestroyTxnWithSuggestedParamsFromObject, params, {
445
+ sender: params.sender,
446
+ assetIndex: params.assetId,
296
447
  suggestedParams,
297
448
  });
298
- return this.commonTxnBuildStep(params, txn, suggestedParams);
299
449
  }
300
450
  buildAssetFreeze(params, suggestedParams) {
301
- const txn = algosdk.makeAssetFreezeTxnWithSuggestedParamsFromObject({
302
- from: params.sender,
303
- assetIndex: Number(params.assetId),
451
+ return this.commonTxnBuildStep(algosdk.makeAssetFreezeTxnWithSuggestedParamsFromObject, params, {
452
+ sender: params.sender,
453
+ assetIndex: params.assetId,
304
454
  freezeTarget: params.account,
305
- freezeState: params.frozen,
455
+ frozen: params.frozen,
306
456
  suggestedParams,
307
457
  });
308
- return this.commonTxnBuildStep(params, txn, suggestedParams);
309
458
  }
310
459
  buildAssetTransfer(params, suggestedParams) {
311
- const txn = algosdk.makeAssetTransferTxnWithSuggestedParamsFromObject({
312
- from: params.sender,
313
- to: params.receiver,
314
- assetIndex: Number(params.assetId),
460
+ return this.commonTxnBuildStep(algosdk.makeAssetTransferTxnWithSuggestedParamsFromObject, params, {
461
+ sender: params.sender,
462
+ receiver: params.receiver,
463
+ assetIndex: params.assetId,
315
464
  amount: params.amount,
316
465
  suggestedParams,
317
466
  closeRemainderTo: params.closeAssetTo,
318
- revocationTarget: params.clawbackTarget,
467
+ assetSender: params.clawbackTarget,
319
468
  });
320
- return this.commonTxnBuildStep(params, txn, suggestedParams);
321
469
  }
322
- buildAppCall(params, suggestedParams) {
470
+ async buildAppCall(params, suggestedParams) {
471
+ const appId = 'appId' in params ? params.appId : 0n;
472
+ const approvalProgram = 'approvalProgram' in params
473
+ ? typeof params.approvalProgram === 'string'
474
+ ? (await this.appManager.compileTeal(params.approvalProgram)).compiledBase64ToBytes
475
+ : params.approvalProgram
476
+ : undefined;
477
+ const clearStateProgram = 'clearStateProgram' in params
478
+ ? typeof params.clearStateProgram === 'string'
479
+ ? (await this.appManager.compileTeal(params.clearStateProgram)).compiledBase64ToBytes
480
+ : params.clearStateProgram
481
+ : undefined;
323
482
  const sdkParams = {
324
- from: params.sender,
483
+ sender: params.sender,
325
484
  suggestedParams,
326
- onComplete: params.onComplete,
327
- approvalProgram: params.approvalProgram,
328
- clearProgram: params.clearProgram,
329
485
  appArgs: params.args,
486
+ onComplete: params.onComplete ?? algosdk.OnApplicationComplete.NoOpOC,
330
487
  accounts: params.accountReferences,
331
488
  foreignApps: params.appReferences?.map((x) => Number(x)),
332
489
  foreignAssets: params.assetReferences?.map((x) => Number(x)),
333
- extraPages: params.extraPages,
334
- numLocalInts: params.schema?.localUints || 0,
335
- numLocalByteSlices: params.schema?.localByteSlices || 0,
336
- numGlobalInts: params.schema?.globalUints || 0,
337
- numGlobalByteSlices: params.schema?.globalByteSlices || 0,
490
+ boxes: params.boxReferences?.map(AppManager.getBoxReference),
491
+ approvalProgram,
492
+ clearProgram: clearStateProgram,
338
493
  };
339
- let txn;
340
- const onComplete = params.onComplete || algosdk.OnApplicationComplete.NoOpOC;
341
- if (!params.appId) {
342
- if (params.approvalProgram === undefined || params.clearProgram === undefined) {
343
- throw new Error('approvalProgram and clearProgram are required for application creation');
494
+ if (appId === 0n) {
495
+ if (sdkParams.approvalProgram === undefined || sdkParams.clearProgram === undefined) {
496
+ throw new Error('approvalProgram and clearStateProgram are required for application creation');
344
497
  }
345
- txn = algosdk.makeApplicationCreateTxnFromObject({
498
+ return this.commonTxnBuildStep(algosdk.makeApplicationCreateTxnFromObject, params, {
346
499
  ...sdkParams,
347
- onComplete,
348
- approvalProgram: params.approvalProgram,
349
- clearProgram: params.clearProgram,
500
+ extraPages: 'extraProgramPages' in params
501
+ ? (params.extraProgramPages ?? Math.floor((approvalProgram.length + clearStateProgram.length) / APP_PAGE_MAX_SIZE))
502
+ : 0,
503
+ numLocalInts: 'schema' in params ? (params.schema?.localInts ?? 0) : 0,
504
+ numLocalByteSlices: 'schema' in params ? (params.schema?.localByteSlices ?? 0) : 0,
505
+ numGlobalInts: 'schema' in params ? (params.schema?.globalInts ?? 0) : 0,
506
+ numGlobalByteSlices: 'schema' in params ? (params.schema?.globalByteSlices ?? 0) : 0,
507
+ approvalProgram: approvalProgram,
508
+ clearProgram: clearStateProgram,
350
509
  });
351
510
  }
352
- txn = algosdk.makeApplicationCallTxnFromObject({ ...sdkParams, onComplete, appIndex: Number(params.appId || 0) });
353
- return this.commonTxnBuildStep(params, txn, suggestedParams);
511
+ else {
512
+ return this.commonTxnBuildStep(algosdk.makeApplicationCallTxnFromObject, params, { ...sdkParams, appIndex: appId });
513
+ }
354
514
  }
355
515
  buildKeyReg(params, suggestedParams) {
356
- const txn = algosdk.makeKeyRegistrationTxnWithSuggestedParams(params.sender, undefined, params.voteKey, params.selectionKey, Number(params.voteFirst), Number(params.voteLast), Number(params.voteKeyDilution), suggestedParams, undefined, false, params.stateProofKey);
357
- return this.commonTxnBuildStep(params, txn, suggestedParams);
516
+ return this.commonTxnBuildStep(algosdk.makeKeyRegistrationTxnWithSuggestedParamsFromObject, params, {
517
+ sender: params.sender,
518
+ voteKey: params.voteKey,
519
+ selectionKey: params.selectionKey,
520
+ voteFirst: params.voteFirst,
521
+ voteLast: params.voteLast,
522
+ voteKeyDilution: params.voteKeyDilution,
523
+ stateProofKey: params.stateProofKey,
524
+ nonParticipation: false,
525
+ suggestedParams,
526
+ });
358
527
  }
528
+ /** Builds all transaction types apart from `txnWithSigner`, `atc` and `methodCall` since those ones can have custom signers that need to be retrieved. */
359
529
  async buildTxn(txn, suggestedParams) {
530
+ switch (txn.type) {
531
+ case 'pay':
532
+ return [this.buildPayment(txn, suggestedParams)];
533
+ case 'assetCreate':
534
+ return [this.buildAssetCreate(txn, suggestedParams)];
535
+ case 'appCall':
536
+ return [await this.buildAppCall(txn, suggestedParams)];
537
+ case 'assetConfig':
538
+ return [this.buildAssetConfig(txn, suggestedParams)];
539
+ case 'assetDestroy':
540
+ return [this.buildAssetDestroy(txn, suggestedParams)];
541
+ case 'assetFreeze':
542
+ return [this.buildAssetFreeze(txn, suggestedParams)];
543
+ case 'assetTransfer':
544
+ return [this.buildAssetTransfer(txn, suggestedParams)];
545
+ case 'assetOptIn':
546
+ return [this.buildAssetTransfer({ ...txn, receiver: txn.sender, amount: 0n }, suggestedParams)];
547
+ case 'assetOptOut':
548
+ return [this.buildAssetTransfer({ ...txn, receiver: txn.sender, amount: 0n, closeAssetTo: txn.creator }, suggestedParams)];
549
+ case 'keyReg':
550
+ return [this.buildKeyReg(txn, suggestedParams)];
551
+ default:
552
+ throw Error(`Unsupported txn type`);
553
+ }
554
+ }
555
+ async buildTxnWithSigner(txn, suggestedParams) {
360
556
  if (txn.type === 'txnWithSigner') {
361
557
  return [txn];
362
558
  }
@@ -364,75 +560,83 @@ class AlgokitComposer {
364
560
  return this.buildAtc(txn.atc);
365
561
  }
366
562
  if (txn.type === 'methodCall') {
367
- return await this.buildMethodCall(txn, suggestedParams);
563
+ return await this.buildMethodCall(txn, suggestedParams, true);
368
564
  }
369
565
  const signer = txn.signer ? ('signer' in txn.signer ? txn.signer.signer : txn.signer) : this.getSigner(txn.sender);
370
- switch (txn.type) {
371
- case 'pay': {
372
- const payment = this.buildPayment(txn, suggestedParams);
373
- return [{ txn: payment, signer }];
374
- }
375
- case 'assetCreate': {
376
- const assetCreate = this.buildAssetCreate(txn, suggestedParams);
377
- return [{ txn: assetCreate, signer }];
378
- }
379
- case 'appCall': {
380
- const appCall = this.buildAppCall(txn, suggestedParams);
381
- return [{ txn: appCall, signer }];
382
- }
383
- case 'assetConfig': {
384
- const assetConfig = this.buildAssetConfig(txn, suggestedParams);
385
- return [{ txn: assetConfig, signer }];
386
- }
387
- case 'assetDestroy': {
388
- const assetDestroy = this.buildAssetDestroy(txn, suggestedParams);
389
- return [{ txn: assetDestroy, signer }];
390
- }
391
- case 'assetFreeze': {
392
- const assetFreeze = this.buildAssetFreeze(txn, suggestedParams);
393
- return [{ txn: assetFreeze, signer }];
394
- }
395
- case 'assetTransfer': {
396
- const assetTransfer = this.buildAssetTransfer(txn, suggestedParams);
397
- return [{ txn: assetTransfer, signer }];
398
- }
399
- case 'assetOptIn': {
400
- const assetTransfer = this.buildAssetTransfer({ ...txn, receiver: txn.sender, amount: 0n }, suggestedParams);
401
- return [{ txn: assetTransfer, signer }];
566
+ return (await this.buildTxn(txn, suggestedParams)).map((txn) => ({ txn, signer }));
567
+ }
568
+ /**
569
+ * Compose all of the transactions without signers and return the transaction objects directly along with any ABI method calls.
570
+ *
571
+ * @returns The array of built transactions and any corresponding method calls
572
+ */
573
+ async buildTransactions() {
574
+ const suggestedParams = await this.getSuggestedParams();
575
+ const transactions = [];
576
+ const methodCalls = new Map();
577
+ const signers = new Map();
578
+ for (const txn of this.txns) {
579
+ if (!['txnWithSigner', 'atc', 'methodCall'].includes(txn.type)) {
580
+ transactions.push(...(await this.buildTxn(txn, suggestedParams)));
402
581
  }
403
- case 'keyReg': {
404
- const keyReg = this.buildKeyReg(txn, suggestedParams);
405
- return [{ txn: keyReg, signer }];
582
+ else {
583
+ const transactionsWithSigner = txn.type === 'txnWithSigner'
584
+ ? [txn]
585
+ : txn.type === 'atc'
586
+ ? this.buildAtc(txn.atc)
587
+ : txn.type === 'methodCall'
588
+ ? await this.buildMethodCall(txn, suggestedParams, false)
589
+ : [];
590
+ transactions.push(...transactionsWithSigner.map((ts) => ts.txn));
591
+ transactionsWithSigner.forEach((ts, idx) => {
592
+ if (ts.signer && ts.signer !== TransactionComposer.NULL_SIGNER) {
593
+ signers.set(idx, ts.signer);
594
+ }
595
+ });
406
596
  }
407
- default:
408
- throw Error(`Unsupported txn type`);
409
597
  }
598
+ for (let i = 0; i < transactions.length; i++) {
599
+ const method = this.txnMethodMap.get(transactions[i].txID());
600
+ if (method)
601
+ methodCalls.set(i, method);
602
+ }
603
+ return { transactions, methodCalls, signers };
604
+ }
605
+ /**
606
+ * Get the number of transactions currently added to this composer.
607
+ */
608
+ async count() {
609
+ return (await this.buildTransactions()).transactions.length;
410
610
  }
411
611
  /**
412
612
  * Compose all of the transactions in a single atomic transaction group and an atomic transaction composer.
413
613
  *
414
614
  * You can then use the transactions standalone, or use the composer to execute or simulate the transactions.
615
+ *
616
+ * Once this method is called, no further transactions will be able to be added.
617
+ * You can safely call this method multiple times to get the same result.
415
618
  * @returns The built atomic transaction composer and the transactions
416
619
  */
417
620
  async build() {
418
621
  if (this.atc.getStatus() === algosdk.AtomicTransactionComposerStatus.BUILDING) {
419
622
  const suggestedParams = await this.getSuggestedParams();
623
+ // Build all of the transactions
420
624
  const txnWithSigners = [];
421
625
  for (const txn of this.txns) {
422
- txnWithSigners.push(...(await this.buildTxn(txn, suggestedParams)));
626
+ txnWithSigners.push(...(await this.buildTxnWithSigner(txn, suggestedParams)));
423
627
  }
424
- txnWithSigners.forEach((ts) => {
425
- this.atc.addTransaction(ts);
426
- });
628
+ // Add all of the transactions to the underlying ATC
427
629
  const methodCalls = new Map();
428
630
  txnWithSigners.forEach((ts, idx) => {
631
+ this.atc.addTransaction(ts);
632
+ // Populate consolidated set of all ABI method calls
429
633
  const method = this.txnMethodMap.get(ts.txn.txID());
430
634
  if (method)
431
635
  methodCalls.set(idx, method);
432
636
  });
433
637
  this.atc['methodCalls'] = methodCalls;
434
638
  }
435
- return { atc: this.atc, transactions: this.atc.buildGroup() };
639
+ return { atc: this.atc, transactions: this.atc.buildGroup(), methodCalls: this.atc['methodCalls'] };
436
640
  }
437
641
  /**
438
642
  * Rebuild the group, discarding any previously built transactions.
@@ -444,24 +648,113 @@ class AlgokitComposer {
444
648
  return await this.build();
445
649
  }
446
650
  /**
447
- * Compose the atomic transaction group and send it to the network
651
+ * Compose the atomic transaction group and send it to the network.
448
652
  * @param params The parameters to control execution with
449
653
  * @returns The execution result
450
654
  */
451
- async execute(params) {
655
+ async send(params) {
452
656
  const group = (await this.build()).transactions;
453
657
  let waitRounds = params?.maxRoundsToWaitForConfirmation;
454
658
  if (waitRounds === undefined) {
455
- const lastRound = group.reduce((max, txn) => Math.max(txn.txn.lastRound, max), 0);
456
- const { firstRound } = await this.getSuggestedParams();
457
- waitRounds = lastRound - firstRound + 1;
659
+ const lastRound = group.reduce((max, txn) => (txn.txn.lastValid > max ? txn.txn.lastValid : BigInt(max)), 0n);
660
+ const { firstValid: firstRound } = await this.getSuggestedParams();
661
+ waitRounds = Number(BigInt(lastRound) - BigInt(firstRound)) + 1;
458
662
  }
459
663
  return await sendAtomicTransactionComposer({
460
664
  atc: this.atc,
461
- sendParams: { suppressLog: params?.suppressLog, maxRoundsToWaitForConfirmation: waitRounds },
665
+ suppressLog: params?.suppressLog,
666
+ maxRoundsToWaitForConfirmation: waitRounds,
667
+ populateAppCallResources: params?.populateAppCallResources,
462
668
  }, this.algod);
463
669
  }
670
+ /**
671
+ * @deprecated Use `send` instead.
672
+ *
673
+ * Compose the atomic transaction group and send it to the network
674
+ *
675
+ * An alias for `composer.send(params)`.
676
+ * @param params The parameters to control execution with
677
+ * @returns The execution result
678
+ */
679
+ async execute(params) {
680
+ return this.send(params);
681
+ }
682
+ /**
683
+ * Compose the atomic transaction group and simulate sending it to the network
684
+ * @returns The simulation result
685
+ */
686
+ async simulate(options) {
687
+ const atc = options?.skipSignatures ? new AtomicTransactionComposer() : this.atc;
688
+ // Build the transactions
689
+ if (options?.skipSignatures) {
690
+ options.allowEmptySignatures = true;
691
+ options.fixSigners = true;
692
+ // Build transactions uses empty signers
693
+ const transactions = await this.buildTransactions();
694
+ for (const txn of transactions.transactions) {
695
+ atc.addTransaction({ txn, signer: TransactionComposer.NULL_SIGNER });
696
+ }
697
+ atc['methodCalls'] = transactions.methodCalls;
698
+ }
699
+ else {
700
+ // Build creates real signatures
701
+ await this.build();
702
+ }
703
+ const { methodResults, simulateResponse } = await atc.simulate(this.algod, new modelsv2.SimulateRequest({
704
+ txnGroups: [],
705
+ ...options,
706
+ ...(Config.debug
707
+ ? {
708
+ allowEmptySignatures: true,
709
+ fixSigners: true,
710
+ allowMoreLogging: true,
711
+ execTraceConfig: new modelsv2.SimulateTraceConfig({
712
+ enable: true,
713
+ scratchChange: true,
714
+ stackChange: true,
715
+ stateChange: true,
716
+ }),
717
+ }
718
+ : undefined),
719
+ }));
720
+ const failedGroup = simulateResponse?.txnGroups[0];
721
+ if (failedGroup?.failureMessage) {
722
+ const errorMessage = `Transaction failed at transaction(s) ${failedGroup.failedAt?.join(', ') || 'unknown'} in the group. ${failedGroup.failureMessage}`;
723
+ const error = new Error(errorMessage);
724
+ if (Config.debug) {
725
+ await Config.events.emitAsync(EventType.TxnGroupSimulated, { simulateResponse });
726
+ }
727
+ error.simulateResponse = simulateResponse;
728
+ throw error;
729
+ }
730
+ if (Config.debug && Config.traceAll) {
731
+ await Config.events.emitAsync(EventType.TxnGroupSimulated, { simulateResponse });
732
+ }
733
+ const transactions = atc.buildGroup().map((t) => t.txn);
734
+ return {
735
+ confirmations: simulateResponse.txnGroups[0].txnResults.map((t) => t.txnResult),
736
+ transactions: transactions,
737
+ txIds: transactions.map((t) => t.txID()),
738
+ groupId: Buffer.from(transactions[0].group ?? new Uint8Array()).toString('base64'),
739
+ simulateResponse,
740
+ returns: methodResults.map(getABIReturnValue),
741
+ };
742
+ }
743
+ /**
744
+ * Create an encoded transaction note that follows the ARC-2 spec.
745
+ *
746
+ * https://github.com/algorandfoundation/ARCs/blob/main/ARCs/arc-0002.md
747
+ * @param note The ARC-2 transaction note data
748
+ * @returns The binary encoded transaction note
749
+ */
750
+ static arc2Note(note) {
751
+ const arc2Payload = `${note.dAppName}:${note.format}${typeof note.data === 'string' ? note.data : JSON.stringify(note.data)}`;
752
+ const encoder = new TextEncoder();
753
+ return encoder.encode(arc2Payload);
754
+ }
464
755
  }
756
+ /** Signer used to represent a lack of signer */
757
+ TransactionComposer.NULL_SIGNER = algosdk.makeEmptyTransactionSigner();
465
758
 
466
- export { AlgokitComposer as default };
759
+ export { MAX_TRANSACTION_GROUP_SIZE, TransactionComposer };
467
760
  //# sourceMappingURL=composer.mjs.map