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