@algorandfoundation/algokit-utils 10.0.0-alpha.3 → 10.0.0-alpha.32

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 (704) hide show
  1. package/_virtual/rolldown_runtime.js +10 -15
  2. package/abi/index.d.ts +2 -1
  3. package/abi/index.js +3 -0
  4. package/abi/index.mjs +2 -1
  5. package/account-manager.d.ts +448 -0
  6. package/account-manager.js +623 -0
  7. package/account-manager.js.map +1 -0
  8. package/account-manager.mjs +620 -0
  9. package/account-manager.mjs.map +1 -0
  10. package/account.d.ts +156 -0
  11. package/account.js +10 -0
  12. package/account.js.map +1 -0
  13. package/account.mjs +9 -0
  14. package/account.mjs.map +1 -0
  15. package/algod-client/index.d.ts +3 -7
  16. package/algod-client/index.js +2 -5
  17. package/algod-client/index.mjs +2 -2
  18. package/algorand-client-transaction-creator.d.ts +1103 -0
  19. package/algorand-client-transaction-creator.js +735 -0
  20. package/algorand-client-transaction-creator.js.map +1 -0
  21. package/algorand-client-transaction-creator.mjs +734 -0
  22. package/algorand-client-transaction-creator.mjs.map +1 -0
  23. package/algorand-client-transaction-sender.d.ts +1317 -0
  24. package/algorand-client-transaction-sender.js +933 -0
  25. package/algorand-client-transaction-sender.js.map +1 -0
  26. package/algorand-client-transaction-sender.mjs +932 -0
  27. package/algorand-client-transaction-sender.mjs.map +1 -0
  28. package/algorand-client.d.ts +246 -0
  29. package/algorand-client.js +325 -0
  30. package/algorand-client.js.map +1 -0
  31. package/algorand-client.mjs +325 -0
  32. package/algorand-client.mjs.map +1 -0
  33. package/amount.d.ts +46 -3
  34. package/amount.js +92 -13
  35. package/amount.js.map +1 -1
  36. package/amount.mjs +80 -3
  37. package/amount.mjs.map +1 -1
  38. package/app-client.d.ts +2130 -0
  39. package/app-client.js +909 -0
  40. package/app-client.js.map +1 -0
  41. package/app-client.mjs +908 -0
  42. package/app-client.mjs.map +1 -0
  43. package/app-deployer.d.ts +166 -0
  44. package/app-deployer.js +353 -0
  45. package/app-deployer.js.map +1 -0
  46. package/app-deployer.mjs +353 -0
  47. package/app-deployer.mjs.map +1 -0
  48. package/app-factory.d.ts +965 -0
  49. package/app-factory.js +448 -0
  50. package/app-factory.js.map +1 -0
  51. package/app-factory.mjs +448 -0
  52. package/app-factory.mjs.map +1 -0
  53. package/app-manager.d.ts +323 -0
  54. package/app-manager.js +468 -0
  55. package/app-manager.js.map +1 -0
  56. package/app-manager.mjs +468 -0
  57. package/app-manager.mjs.map +1 -0
  58. package/app-spec.d.ts +203 -0
  59. package/app-spec.js +137 -0
  60. package/app-spec.js.map +1 -0
  61. package/app-spec.mjs +137 -0
  62. package/app-spec.mjs.map +1 -0
  63. package/app.d.ts +257 -0
  64. package/app.js +49 -0
  65. package/app.js.map +1 -0
  66. package/app.mjs +42 -0
  67. package/app.mjs.map +1 -0
  68. package/asset-manager.d.ts +212 -0
  69. package/asset-manager.js +166 -0
  70. package/asset-manager.js.map +1 -0
  71. package/asset-manager.mjs +166 -0
  72. package/asset-manager.mjs.map +1 -0
  73. package/async-event-emitter.d.ts +16 -0
  74. package/async-event-emitter.js +38 -0
  75. package/async-event-emitter.js.map +1 -0
  76. package/async-event-emitter.mjs +37 -0
  77. package/async-event-emitter.mjs.map +1 -0
  78. package/client-manager.d.ts +475 -0
  79. package/client-manager.js +616 -0
  80. package/client-manager.js.map +1 -0
  81. package/client-manager.mjs +616 -0
  82. package/client-manager.mjs.map +1 -0
  83. package/composer.d.ts +947 -0
  84. package/composer.js +1584 -0
  85. package/composer.js.map +1 -0
  86. package/composer.mjs +1583 -0
  87. package/composer.mjs.map +1 -0
  88. package/config.d.ts +1 -1
  89. package/config.js +2 -2
  90. package/config.js.map +1 -1
  91. package/config.mjs +1 -1
  92. package/config.mjs.map +1 -1
  93. package/debugging.d.ts +47 -0
  94. package/debugging.js +20 -0
  95. package/debugging.js.map +1 -0
  96. package/debugging.mjs +15 -0
  97. package/debugging.mjs.map +1 -0
  98. package/dispenser-client.d.ts +90 -0
  99. package/dispenser-client.js +127 -0
  100. package/dispenser-client.js.map +1 -0
  101. package/dispenser-client.mjs +127 -0
  102. package/dispenser-client.mjs.map +1 -0
  103. package/expand.d.ts +2 -0
  104. package/expand.js +0 -0
  105. package/expand.mjs +0 -0
  106. package/index.d.ts +6 -6
  107. package/index.js +4 -10
  108. package/index.mjs +5 -6
  109. package/indexer-client/index.d.ts +2 -2
  110. package/indexer-client/index.js +6 -6
  111. package/indexer-client/index.mjs +2 -2
  112. package/{indexer-lookup.d.ts → indexer-client/indexer-lookup.d.ts} +8 -11
  113. package/{indexer-lookup.mjs → indexer-client/indexer-lookup.js} +6 -10
  114. package/indexer-client/indexer-lookup.js.map +1 -0
  115. package/{indexer-lookup.js → indexer-client/indexer-lookup.mjs} +3 -18
  116. package/indexer-client/indexer-lookup.mjs.map +1 -0
  117. package/indexer.d.ts +40 -0
  118. package/indexer.js +38 -0
  119. package/indexer.js.map +1 -0
  120. package/indexer.mjs +35 -0
  121. package/indexer.mjs.map +1 -0
  122. package/instance-of.d.ts +8 -0
  123. package/kmd-account-manager.d.ts +74 -0
  124. package/kmd-account-manager.js +167 -0
  125. package/kmd-account-manager.js.map +1 -0
  126. package/kmd-account-manager.mjs +165 -0
  127. package/kmd-account-manager.mjs.map +1 -0
  128. package/kmd-client/index.d.ts +1 -2
  129. package/kmd-client/index.js +0 -5
  130. package/kmd-client/index.mjs +1 -2
  131. package/lifecycle-events.d.ts +14 -0
  132. package/lifecycle-events.js +11 -0
  133. package/lifecycle-events.js.map +1 -0
  134. package/lifecycle-events.mjs +10 -0
  135. package/lifecycle-events.mjs.map +1 -0
  136. package/logging.d.ts +13 -0
  137. package/logging.js +47 -0
  138. package/logging.js.map +1 -0
  139. package/logging.mjs +42 -0
  140. package/logging.mjs.map +1 -0
  141. package/logic-error.d.ts +39 -0
  142. package/logic-error.js +54 -0
  143. package/logic-error.js.map +1 -0
  144. package/logic-error.mjs +53 -0
  145. package/logic-error.mjs.map +1 -0
  146. package/network-client.d.ts +43 -0
  147. package/network-client.js +14 -0
  148. package/network-client.js.map +1 -0
  149. package/network-client.mjs +13 -0
  150. package/network-client.mjs.map +1 -0
  151. package/package.json +14 -5
  152. package/packages/abi/src/abi-method.d.ts +1 -1
  153. package/packages/abi/src/abi-method.js +1 -1
  154. package/packages/abi/src/abi-method.js.map +1 -1
  155. package/packages/abi/src/abi-method.mjs +1 -1
  156. package/packages/abi/src/abi-method.mjs.map +1 -1
  157. package/packages/abi/src/abi-type.d.ts +1 -3
  158. package/packages/abi/src/abi-type.js +7 -36
  159. package/packages/abi/src/abi-type.js.map +1 -1
  160. package/packages/abi/src/abi-type.mjs +7 -36
  161. package/packages/abi/src/abi-type.mjs.map +1 -1
  162. package/packages/abi/src/arc56-contract.js +1 -0
  163. package/packages/abi/src/arc56-contract.js.map +1 -1
  164. package/packages/abi/src/arc56-contract.mjs +1 -0
  165. package/packages/abi/src/arc56-contract.mjs.map +1 -1
  166. package/packages/abi/src/utils.d.ts +22 -0
  167. package/packages/abi/src/utils.js +57 -0
  168. package/packages/abi/src/utils.js.map +1 -0
  169. package/packages/abi/src/utils.mjs +55 -0
  170. package/packages/abi/src/utils.mjs.map +1 -0
  171. package/packages/algo25/src/index.js +1 -1
  172. package/packages/algo25/src/index.mjs +1 -1
  173. package/packages/algod_client/src/apis/api-service.d.ts +44 -44
  174. package/packages/algod_client/src/apis/api-service.js +155 -155
  175. package/packages/algod_client/src/apis/api-service.js.map +1 -1
  176. package/packages/algod_client/src/apis/api-service.mjs +155 -155
  177. package/packages/algod_client/src/apis/api-service.mjs.map +1 -1
  178. package/packages/algod_client/src/core/api-error.js +3 -1
  179. package/packages/algod_client/src/core/api-error.js.map +1 -1
  180. package/packages/algod_client/src/core/api-error.mjs +3 -1
  181. package/packages/algod_client/src/core/api-error.mjs.map +1 -1
  182. package/packages/algod_client/src/core/model-runtime.js +6 -6
  183. package/packages/algod_client/src/core/model-runtime.js.map +1 -1
  184. package/packages/algod_client/src/core/model-runtime.mjs +8 -8
  185. package/packages/algod_client/src/core/model-runtime.mjs.map +1 -1
  186. package/packages/algod_client/src/models/account-participation.js +4 -4
  187. package/packages/algod_client/src/models/account-participation.js.map +1 -1
  188. package/packages/algod_client/src/models/account-participation.mjs +4 -4
  189. package/packages/algod_client/src/models/account-participation.mjs.map +1 -1
  190. package/packages/algod_client/src/models/application-state-schema.d.ts +2 -2
  191. package/packages/algod_client/src/models/application-state-schema.js +2 -2
  192. package/packages/algod_client/src/models/application-state-schema.js.map +1 -1
  193. package/packages/algod_client/src/models/application-state-schema.mjs +2 -2
  194. package/packages/algod_client/src/models/application-state-schema.mjs.map +1 -1
  195. package/packages/algod_client/src/models/asset-params.js +2 -1
  196. package/packages/algod_client/src/models/asset-params.js.map +1 -1
  197. package/packages/algod_client/src/models/asset-params.mjs +2 -1
  198. package/packages/algod_client/src/models/asset-params.mjs.map +1 -1
  199. package/packages/algod_client/src/models/block-response.js +1 -2
  200. package/packages/algod_client/src/models/block-response.js.map +1 -1
  201. package/packages/algod_client/src/models/block-response.mjs +2 -3
  202. package/packages/algod_client/src/models/block-response.mjs.map +1 -1
  203. package/packages/algod_client/src/models/block.d.ts +60 -40
  204. package/packages/algod_client/src/models/block.js +184 -108
  205. package/packages/algod_client/src/models/block.js.map +1 -1
  206. package/packages/algod_client/src/models/block.mjs +184 -108
  207. package/packages/algod_client/src/models/block.mjs.map +1 -1
  208. package/packages/algod_client/src/models/eval-delta-key-value.js +2 -2
  209. package/packages/algod_client/src/models/eval-delta-key-value.js.map +1 -1
  210. package/packages/algod_client/src/models/eval-delta-key-value.mjs +2 -2
  211. package/packages/algod_client/src/models/eval-delta-key-value.mjs.map +1 -1
  212. package/packages/algod_client/src/models/eval-delta.js +2 -2
  213. package/packages/algod_client/src/models/eval-delta.js.map +1 -1
  214. package/packages/algod_client/src/models/eval-delta.mjs +2 -2
  215. package/packages/algod_client/src/models/eval-delta.mjs.map +1 -1
  216. package/packages/algod_client/src/models/ledger-state-delta.js +1 -1
  217. package/packages/algod_client/src/models/ledger-state-delta.js.map +1 -1
  218. package/packages/algod_client/src/models/ledger-state-delta.mjs +2 -2
  219. package/packages/algod_client/src/models/ledger-state-delta.mjs.map +1 -1
  220. package/packages/algod_client/src/models/simulate-request.js +1 -1
  221. package/packages/algod_client/src/models/simulate-request.mjs +1 -1
  222. package/packages/algod_client/src/models/simulate-response.d.ts +2 -1
  223. package/packages/algod_client/src/models/simulate-response.js +6 -1
  224. package/packages/algod_client/src/models/simulate-response.js.map +1 -1
  225. package/packages/algod_client/src/models/simulate-response.mjs +6 -2
  226. package/packages/algod_client/src/models/simulate-response.mjs.map +1 -1
  227. package/packages/algod_client/src/models/simulate-unnamed-resources-accessed.d.ts +3 -5
  228. package/packages/algod_client/src/models/simulate-unnamed-resources-accessed.js +4 -6
  229. package/packages/algod_client/src/models/simulate-unnamed-resources-accessed.js.map +1 -1
  230. package/packages/algod_client/src/models/simulate-unnamed-resources-accessed.mjs +3 -5
  231. package/packages/algod_client/src/models/simulate-unnamed-resources-accessed.mjs.map +1 -1
  232. package/packages/algod_client/src/models/transaction-parameters-response.js +2 -2
  233. package/packages/algod_client/src/models/transaction-parameters-response.js.map +1 -1
  234. package/packages/algod_client/src/models/transaction-parameters-response.mjs +2 -2
  235. package/packages/algod_client/src/models/transaction-parameters-response.mjs.map +1 -1
  236. package/packages/common/src/address.d.ts +0 -1
  237. package/packages/common/src/address.js +4 -17
  238. package/packages/common/src/address.js.map +1 -1
  239. package/packages/common/src/address.mjs +5 -17
  240. package/packages/common/src/address.mjs.map +1 -1
  241. package/packages/common/src/codecs/composite/map.js +7 -4
  242. package/packages/common/src/codecs/composite/map.js.map +1 -1
  243. package/packages/common/src/codecs/composite/map.mjs +7 -4
  244. package/packages/common/src/codecs/composite/map.mjs.map +1 -1
  245. package/packages/common/src/codecs/composite/record.js +0 -1
  246. package/packages/common/src/codecs/composite/record.js.map +1 -1
  247. package/packages/common/src/codecs/primitives/address.js +0 -1
  248. package/packages/common/src/codecs/primitives/address.js.map +1 -1
  249. package/packages/common/src/codecs/primitives/bytes-base64.js +26 -0
  250. package/packages/common/src/codecs/primitives/bytes-base64.js.map +1 -0
  251. package/packages/common/src/codecs/primitives/bytes-base64.mjs +25 -0
  252. package/packages/common/src/codecs/primitives/bytes-base64.mjs.map +1 -0
  253. package/packages/common/src/codecs/primitives/bytes.js +0 -1
  254. package/packages/common/src/codecs/primitives/bytes.js.map +1 -1
  255. package/packages/common/src/codecs/primitives/fixed-bytes.js +0 -1
  256. package/packages/common/src/codecs/primitives/fixed-bytes.js.map +1 -1
  257. package/packages/common/src/codecs/wire.js +0 -1
  258. package/packages/common/src/codecs/wire.js.map +1 -1
  259. package/packages/common/src/json.mjs +2 -2
  260. package/packages/common/src/json.mjs.map +1 -1
  261. package/packages/common/src/msgpack.js +0 -1
  262. package/packages/common/src/msgpack.js.map +1 -1
  263. package/packages/{sdk/src/logic → common/src}/sourcemap.d.ts +2 -2
  264. package/packages/{sdk/src/logic → common/src}/sourcemap.js +2 -2
  265. package/packages/{sdk/src/logic → common/src}/sourcemap.js.map +1 -1
  266. package/packages/{sdk/src/logic → common/src}/sourcemap.mjs +1 -1
  267. package/packages/{sdk/src/logic → common/src}/sourcemap.mjs.map +1 -1
  268. package/packages/indexer_client/src/apis/api-service.d.ts +1 -1
  269. package/packages/indexer_client/src/apis/api-service.js +12 -12
  270. package/packages/indexer_client/src/apis/api-service.js.map +1 -1
  271. package/packages/indexer_client/src/apis/api-service.mjs +12 -12
  272. package/packages/indexer_client/src/apis/api-service.mjs.map +1 -1
  273. package/packages/indexer_client/src/core/api-error.js +3 -1
  274. package/packages/indexer_client/src/core/api-error.js.map +1 -1
  275. package/packages/indexer_client/src/core/api-error.mjs +3 -1
  276. package/packages/indexer_client/src/core/api-error.mjs.map +1 -1
  277. package/packages/indexer_client/src/core/model-runtime.js +0 -15
  278. package/packages/indexer_client/src/core/model-runtime.js.map +1 -1
  279. package/packages/indexer_client/src/core/model-runtime.mjs +1 -13
  280. package/packages/indexer_client/src/core/model-runtime.mjs.map +1 -1
  281. package/packages/indexer_client/src/models/account-participation.js +4 -4
  282. package/packages/indexer_client/src/models/account-participation.js.map +1 -1
  283. package/packages/indexer_client/src/models/account-participation.mjs +4 -4
  284. package/packages/indexer_client/src/models/account-participation.mjs.map +1 -1
  285. package/packages/indexer_client/src/models/application-state-schema.d.ts +2 -2
  286. package/packages/indexer_client/src/models/application-state-schema.js +2 -2
  287. package/packages/indexer_client/src/models/application-state-schema.js.map +1 -1
  288. package/packages/indexer_client/src/models/application-state-schema.mjs +2 -2
  289. package/packages/indexer_client/src/models/application-state-schema.mjs.map +1 -1
  290. package/packages/indexer_client/src/models/asset-params.js +2 -1
  291. package/packages/indexer_client/src/models/asset-params.js.map +1 -1
  292. package/packages/indexer_client/src/models/asset-params.mjs +2 -1
  293. package/packages/indexer_client/src/models/asset-params.mjs.map +1 -1
  294. package/packages/indexer_client/src/models/block.d.ts +5 -5
  295. package/packages/indexer_client/src/models/block.js +13 -13
  296. package/packages/indexer_client/src/models/block.js.map +1 -1
  297. package/packages/indexer_client/src/models/block.mjs +13 -13
  298. package/packages/indexer_client/src/models/block.mjs.map +1 -1
  299. package/packages/indexer_client/src/models/eval-delta-key-value.d.ts +1 -1
  300. package/packages/indexer_client/src/models/eval-delta-key-value.js +2 -2
  301. package/packages/indexer_client/src/models/eval-delta-key-value.js.map +1 -1
  302. package/packages/indexer_client/src/models/eval-delta-key-value.mjs +2 -2
  303. package/packages/indexer_client/src/models/eval-delta-key-value.mjs.map +1 -1
  304. package/packages/indexer_client/src/models/eval-delta.d.ts +1 -1
  305. package/packages/indexer_client/src/models/eval-delta.js +2 -2
  306. package/packages/indexer_client/src/models/eval-delta.js.map +1 -1
  307. package/packages/indexer_client/src/models/eval-delta.mjs +2 -2
  308. package/packages/indexer_client/src/models/eval-delta.mjs.map +1 -1
  309. package/packages/indexer_client/src/models/hb-proof-fields.js +6 -6
  310. package/packages/indexer_client/src/models/hb-proof-fields.js.map +1 -1
  311. package/packages/indexer_client/src/models/hb-proof-fields.mjs +6 -6
  312. package/packages/indexer_client/src/models/hb-proof-fields.mjs.map +1 -1
  313. package/packages/indexer_client/src/models/participation-updates.d.ts +2 -2
  314. package/packages/indexer_client/src/models/participation-updates.js +2 -2
  315. package/packages/indexer_client/src/models/participation-updates.js.map +1 -1
  316. package/packages/indexer_client/src/models/participation-updates.mjs +2 -2
  317. package/packages/indexer_client/src/models/participation-updates.mjs.map +1 -1
  318. package/packages/indexer_client/src/models/state-proof-verifier.js +2 -2
  319. package/packages/indexer_client/src/models/state-proof-verifier.js.map +1 -1
  320. package/packages/indexer_client/src/models/state-proof-verifier.mjs +2 -2
  321. package/packages/indexer_client/src/models/state-proof-verifier.mjs.map +1 -1
  322. package/packages/indexer_client/src/models/state-schema.d.ts +2 -2
  323. package/packages/indexer_client/src/models/state-schema.js +2 -2
  324. package/packages/indexer_client/src/models/state-schema.js.map +1 -1
  325. package/packages/indexer_client/src/models/state-schema.mjs +2 -2
  326. package/packages/indexer_client/src/models/state-schema.mjs.map +1 -1
  327. package/packages/indexer_client/src/models/teal-key-value.d.ts +1 -1
  328. package/packages/indexer_client/src/models/teal-key-value.js +2 -2
  329. package/packages/indexer_client/src/models/teal-key-value.js.map +1 -1
  330. package/packages/indexer_client/src/models/teal-key-value.mjs +2 -2
  331. package/packages/indexer_client/src/models/teal-key-value.mjs.map +1 -1
  332. package/packages/indexer_client/src/models/transaction-heartbeat.js +2 -1
  333. package/packages/indexer_client/src/models/transaction-heartbeat.js.map +1 -1
  334. package/packages/indexer_client/src/models/transaction-heartbeat.mjs +2 -1
  335. package/packages/indexer_client/src/models/transaction-heartbeat.mjs.map +1 -1
  336. package/packages/indexer_client/src/models/transaction-keyreg.js +4 -4
  337. package/packages/indexer_client/src/models/transaction-keyreg.js.map +1 -1
  338. package/packages/indexer_client/src/models/transaction-keyreg.mjs +4 -4
  339. package/packages/indexer_client/src/models/transaction-keyreg.mjs.map +1 -1
  340. package/packages/indexer_client/src/models/transaction-signature-logicsig.js +2 -1
  341. package/packages/indexer_client/src/models/transaction-signature-logicsig.js.map +1 -1
  342. package/packages/indexer_client/src/models/transaction-signature-logicsig.mjs +2 -1
  343. package/packages/indexer_client/src/models/transaction-signature-logicsig.mjs.map +1 -1
  344. package/packages/indexer_client/src/models/transaction-signature-multisig-subsignature.js +3 -3
  345. package/packages/indexer_client/src/models/transaction-signature-multisig-subsignature.js.map +1 -1
  346. package/packages/indexer_client/src/models/transaction-signature-multisig-subsignature.mjs +3 -3
  347. package/packages/indexer_client/src/models/transaction-signature-multisig-subsignature.mjs.map +1 -1
  348. package/packages/indexer_client/src/models/transaction-state-proof.d.ts +1 -1
  349. package/packages/indexer_client/src/models/transaction-state-proof.js +2 -2
  350. package/packages/indexer_client/src/models/transaction-state-proof.js.map +1 -1
  351. package/packages/indexer_client/src/models/transaction-state-proof.mjs +2 -2
  352. package/packages/indexer_client/src/models/transaction-state-proof.mjs.map +1 -1
  353. package/packages/indexer_client/src/models/transaction.d.ts +2 -2
  354. package/packages/indexer_client/src/models/transaction.js +6 -5
  355. package/packages/indexer_client/src/models/transaction.js.map +1 -1
  356. package/packages/indexer_client/src/models/transaction.mjs +6 -5
  357. package/packages/indexer_client/src/models/transaction.mjs.map +1 -1
  358. package/packages/kmd_client/src/apis/api-service.d.ts +5 -5
  359. package/packages/kmd_client/src/apis/api-service.js +32 -32
  360. package/packages/kmd_client/src/apis/api-service.js.map +1 -1
  361. package/packages/kmd_client/src/apis/api-service.mjs +32 -32
  362. package/packages/kmd_client/src/apis/api-service.mjs.map +1 -1
  363. package/packages/kmd_client/src/core/api-error.js +3 -1
  364. package/packages/kmd_client/src/core/api-error.js.map +1 -1
  365. package/packages/kmd_client/src/core/api-error.mjs +3 -1
  366. package/packages/kmd_client/src/core/api-error.mjs.map +1 -1
  367. package/packages/kmd_client/src/core/model-runtime.js +2 -12
  368. package/packages/kmd_client/src/core/model-runtime.js.map +1 -1
  369. package/packages/kmd_client/src/core/model-runtime.mjs +3 -11
  370. package/packages/kmd_client/src/core/model-runtime.mjs.map +1 -1
  371. package/packages/transact/src/logicsig.d.ts +35 -33
  372. package/packages/transact/src/logicsig.js +74 -76
  373. package/packages/transact/src/logicsig.js.map +1 -1
  374. package/packages/transact/src/logicsig.mjs +77 -78
  375. package/packages/transact/src/logicsig.mjs.map +1 -1
  376. package/packages/transact/src/multisig.d.ts +11 -116
  377. package/packages/transact/src/multisig.js +106 -136
  378. package/packages/transact/src/multisig.js.map +1 -1
  379. package/packages/transact/src/multisig.mjs +108 -118
  380. package/packages/transact/src/multisig.mjs.map +1 -1
  381. package/packages/transact/src/signer.js +9 -2
  382. package/packages/transact/src/signer.js.map +1 -1
  383. package/packages/transact/src/signer.mjs +10 -3
  384. package/packages/transact/src/signer.mjs.map +1 -1
  385. package/packages/transact/src/transactions/app-call.d.ts +10 -15
  386. package/packages/transact/src/transactions/app-call.js.map +1 -1
  387. package/packages/transact/src/transactions/app-call.mjs.map +1 -1
  388. package/packages/transact/src/transactions/asset-config.d.ts +1 -6
  389. package/packages/transact/src/transactions/asset-config.js.map +1 -1
  390. package/packages/transact/src/transactions/asset-config.mjs.map +1 -1
  391. package/packages/transact/src/transactions/asset-freeze.d.ts +1 -6
  392. package/packages/transact/src/transactions/asset-transfer.d.ts +1 -6
  393. package/packages/transact/src/transactions/key-registration.d.ts +1 -8
  394. package/packages/transact/src/transactions/reference-types-meta.d.ts +26 -0
  395. package/packages/transact/src/transactions/reference-types-meta.js +71 -0
  396. package/packages/transact/src/transactions/reference-types-meta.js.map +1 -0
  397. package/packages/transact/src/transactions/reference-types-meta.mjs +69 -0
  398. package/packages/transact/src/transactions/reference-types-meta.mjs.map +1 -0
  399. package/packages/transact/src/transactions/signed-transaction-meta.js +8 -9
  400. package/packages/transact/src/transactions/signed-transaction-meta.js.map +1 -1
  401. package/packages/transact/src/transactions/signed-transaction-meta.mjs +8 -8
  402. package/packages/transact/src/transactions/signed-transaction-meta.mjs.map +1 -1
  403. package/packages/transact/src/transactions/signed-transaction.d.ts +10 -6
  404. package/packages/transact/src/transactions/signed-transaction.js +1 -1
  405. package/packages/transact/src/transactions/signed-transaction.js.map +1 -1
  406. package/packages/transact/src/transactions/signed-transaction.mjs +1 -2
  407. package/packages/transact/src/transactions/signed-transaction.mjs.map +1 -1
  408. package/packages/transact/src/transactions/state-proof.d.ts +1 -1
  409. package/packages/transact/src/transactions/transaction-meta.js +29 -23
  410. package/packages/transact/src/transactions/transaction-meta.js.map +1 -1
  411. package/packages/transact/src/transactions/transaction-meta.mjs +29 -23
  412. package/packages/transact/src/transactions/transaction-meta.mjs.map +1 -1
  413. package/packages/transact/src/transactions/transaction.d.ts +5 -2
  414. package/packages/transact/src/transactions/transaction.js +5 -4
  415. package/packages/transact/src/transactions/transaction.js.map +1 -1
  416. package/packages/transact/src/transactions/transaction.mjs +5 -4
  417. package/packages/transact/src/transactions/transaction.mjs.map +1 -1
  418. package/testing/account.d.ts +2 -2
  419. package/testing/account.js +2 -3
  420. package/testing/account.js.map +1 -1
  421. package/testing/account.mjs +2 -3
  422. package/testing/account.mjs.map +1 -1
  423. package/testing/fixtures/algokit-log-capture-fixture.d.ts +1 -1
  424. package/testing/fixtures/algokit-log-capture-fixture.js.map +1 -1
  425. package/testing/fixtures/algokit-log-capture-fixture.mjs.map +1 -1
  426. package/testing/fixtures/algorand-fixture.d.ts +5 -5
  427. package/testing/fixtures/algorand-fixture.js +2 -2
  428. package/testing/fixtures/algorand-fixture.js.map +1 -1
  429. package/testing/fixtures/algorand-fixture.mjs +2 -2
  430. package/testing/fixtures/algorand-fixture.mjs.map +1 -1
  431. package/testing/index.d.ts +2 -1
  432. package/testing/test-logger.d.ts +1 -1
  433. package/testing/test-logger.js.map +1 -1
  434. package/testing/test-logger.mjs.map +1 -1
  435. package/testing/transaction-logger.js +1 -1
  436. package/testing/transaction-logger.mjs +1 -1
  437. package/testing/types.d.ts +156 -0
  438. package/transact/index.d.ts +11 -10
  439. package/transact/index.js +7 -31
  440. package/transact/index.mjs +7 -10
  441. package/transaction/index.d.ts +4 -0
  442. package/transaction/index.js +9 -0
  443. package/transaction/index.mjs +4 -0
  444. package/transaction/perform-transaction-composer-simulate.d.ts +1 -1
  445. package/transaction/perform-transaction-composer-simulate.js.map +1 -1
  446. package/transaction/perform-transaction-composer-simulate.mjs.map +1 -1
  447. package/transaction/transaction.d.ts +2 -2
  448. package/transaction/transaction.js +2 -2
  449. package/transaction/transaction.js.map +1 -1
  450. package/transaction/transaction.mjs +2 -2
  451. package/transaction/transaction.mjs.map +1 -1
  452. package/transaction/types.d.ts +133 -0
  453. package/transactions/app-call.d.ts +6 -5
  454. package/transactions/app-call.js +17 -17
  455. package/transactions/app-call.js.map +1 -1
  456. package/transactions/app-call.mjs +17 -17
  457. package/transactions/app-call.mjs.map +1 -1
  458. package/transactions/asset-config.d.ts +1 -1
  459. package/transactions/asset-config.js +1 -1
  460. package/transactions/asset-config.js.map +1 -1
  461. package/transactions/asset-config.mjs +1 -1
  462. package/transactions/asset-config.mjs.map +1 -1
  463. package/transactions/common.d.ts +1 -1
  464. package/transactions/common.js.map +1 -1
  465. package/transactions/common.mjs.map +1 -1
  466. package/transactions/key-registration.d.ts +1 -1
  467. package/transactions/key-registration.js.map +1 -1
  468. package/transactions/key-registration.mjs.map +1 -1
  469. package/transactions/method-call.d.ts +2 -2
  470. package/transactions/method-call.js +78 -85
  471. package/transactions/method-call.js.map +1 -1
  472. package/transactions/method-call.mjs +78 -85
  473. package/transactions/method-call.mjs.map +1 -1
  474. package/transactions/payment.d.ts +1 -1
  475. package/transactions/payment.js.map +1 -1
  476. package/transactions/payment.mjs.map +1 -1
  477. package/types/account-manager.d.ts +11 -444
  478. package/types/account-manager.js +5 -606
  479. package/types/account-manager.js.map +1 -1
  480. package/types/account-manager.mjs +5 -604
  481. package/types/account-manager.mjs.map +1 -1
  482. package/types/account.d.ts +8 -150
  483. package/types/account.js +3 -4
  484. package/types/account.js.map +1 -1
  485. package/types/account.mjs +4 -4
  486. package/types/account.mjs.map +1 -1
  487. package/types/algorand-client-transaction-creator.d.ts +5 -1084
  488. package/types/algorand-client-transaction-creator.js +3 -721
  489. package/types/algorand-client-transaction-creator.js.map +1 -1
  490. package/types/algorand-client-transaction-creator.mjs +4 -721
  491. package/types/algorand-client-transaction-creator.mjs.map +1 -1
  492. package/types/algorand-client-transaction-sender.d.ts +5 -1298
  493. package/types/algorand-client-transaction-sender.js +3 -920
  494. package/types/algorand-client-transaction-sender.js.map +1 -1
  495. package/types/algorand-client-transaction-sender.mjs +3 -918
  496. package/types/algorand-client-transaction-sender.mjs.map +1 -1
  497. package/types/algorand-client.d.ts +5 -241
  498. package/types/algorand-client.js +3 -319
  499. package/types/algorand-client.js.map +1 -1
  500. package/types/algorand-client.mjs +3 -319
  501. package/types/algorand-client.mjs.map +1 -1
  502. package/types/amount.d.ts +6 -45
  503. package/types/amount.js +3 -60
  504. package/types/amount.js.map +1 -1
  505. package/types/amount.mjs +3 -60
  506. package/types/amount.mjs.map +1 -1
  507. package/types/app-client.d.ts +75 -2120
  508. package/types/app-client.js +3 -904
  509. package/types/app-client.js.map +1 -1
  510. package/types/app-client.mjs +3 -902
  511. package/types/app-client.mjs.map +1 -1
  512. package/types/app-deployer.d.ts +21 -161
  513. package/types/app-deployer.js +3 -347
  514. package/types/app-deployer.js.map +1 -1
  515. package/types/app-deployer.mjs +3 -347
  516. package/types/app-deployer.mjs.map +1 -1
  517. package/types/app-factory.d.ts +21 -957
  518. package/types/app-factory.js +3 -442
  519. package/types/app-factory.js.map +1 -1
  520. package/types/app-factory.mjs +3 -442
  521. package/types/app-factory.mjs.map +1 -1
  522. package/types/app-manager.d.ts +15 -316
  523. package/types/app-manager.js +3 -456
  524. package/types/app-manager.js.map +1 -1
  525. package/types/app-manager.mjs +3 -456
  526. package/types/app-manager.mjs.map +1 -1
  527. package/types/app-spec.d.ts +39 -198
  528. package/types/app-spec.js +3 -124
  529. package/types/app-spec.js.map +1 -1
  530. package/types/app-spec.mjs +3 -124
  531. package/types/app-spec.mjs.map +1 -1
  532. package/types/app.d.ts +62 -247
  533. package/types/app.js +15 -37
  534. package/types/app.js.map +1 -1
  535. package/types/app.mjs +16 -37
  536. package/types/app.mjs.map +1 -1
  537. package/types/asset-manager.d.ts +9 -207
  538. package/types/asset-manager.js +3 -160
  539. package/types/asset-manager.js.map +1 -1
  540. package/types/asset-manager.mjs +3 -160
  541. package/types/asset-manager.mjs.map +1 -1
  542. package/types/async-event-emitter.d.ts +7 -14
  543. package/types/async-event-emitter.js +3 -32
  544. package/types/async-event-emitter.js.map +1 -1
  545. package/types/async-event-emitter.mjs +4 -32
  546. package/types/async-event-emitter.mjs.map +1 -1
  547. package/types/client-manager.d.ts +27 -470
  548. package/types/client-manager.js +3 -610
  549. package/types/client-manager.js.map +1 -1
  550. package/types/client-manager.mjs +3 -610
  551. package/types/client-manager.mjs.map +1 -1
  552. package/types/composer.d.ts +79 -935
  553. package/types/composer.js +3 -1569
  554. package/types/composer.js.map +1 -1
  555. package/types/composer.mjs +3 -1567
  556. package/types/composer.mjs.map +1 -1
  557. package/types/config.d.ts +7 -52
  558. package/types/config.js +3 -74
  559. package/types/config.js.map +1 -1
  560. package/types/config.mjs +3 -74
  561. package/types/config.mjs.map +1 -1
  562. package/types/debugging.d.ts +12 -33
  563. package/types/debugging.js +11 -10
  564. package/types/debugging.js.map +1 -1
  565. package/types/debugging.mjs +12 -10
  566. package/types/debugging.mjs.map +1 -1
  567. package/types/dispenser-client.d.ts +11 -85
  568. package/types/dispenser-client.js +3 -121
  569. package/types/dispenser-client.js.map +1 -1
  570. package/types/dispenser-client.mjs +3 -121
  571. package/types/dispenser-client.mjs.map +1 -1
  572. package/types/expand.d.ts +4 -5
  573. package/types/indexer.d.ts +16 -36
  574. package/types/indexer.js +7 -30
  575. package/types/indexer.js.map +1 -1
  576. package/types/indexer.mjs +8 -30
  577. package/types/indexer.mjs.map +1 -1
  578. package/types/instance-of.d.ts +4 -4
  579. package/types/kmd-account-manager.d.ts +5 -68
  580. package/types/kmd-account-manager.js +3 -150
  581. package/types/kmd-account-manager.js.map +1 -1
  582. package/types/kmd-account-manager.mjs +3 -148
  583. package/types/kmd-account-manager.mjs.map +1 -1
  584. package/types/lifecycle-events.d.ts +7 -10
  585. package/types/lifecycle-events.js +3 -5
  586. package/types/lifecycle-events.js.map +1 -1
  587. package/types/lifecycle-events.mjs +4 -5
  588. package/types/lifecycle-events.mjs.map +1 -1
  589. package/types/logging.d.ts +14 -9
  590. package/types/logging.js +11 -37
  591. package/types/logging.js.map +1 -1
  592. package/types/logging.mjs +12 -37
  593. package/types/logging.mjs.map +1 -1
  594. package/types/logic-error.d.ts +8 -35
  595. package/types/logic-error.js +3 -48
  596. package/types/logic-error.js.map +1 -1
  597. package/types/logic-error.mjs +4 -48
  598. package/types/logic-error.mjs.map +1 -1
  599. package/types/network-client.d.ts +10 -39
  600. package/types/network-client.js +3 -8
  601. package/types/network-client.js.map +1 -1
  602. package/types/network-client.mjs +4 -8
  603. package/types/network-client.mjs.map +1 -1
  604. package/types/testing.d.ts +13 -151
  605. package/types/transaction.d.ts +33 -128
  606. package/updatable-config.d.ts +57 -0
  607. package/updatable-config.js +80 -0
  608. package/updatable-config.js.map +1 -0
  609. package/updatable-config.mjs +80 -0
  610. package/updatable-config.mjs.map +1 -0
  611. package/util.js +1 -1
  612. package/util.js.map +1 -1
  613. package/util.mjs +1 -1
  614. package/util.mjs.map +1 -1
  615. package/_virtual/rolldown_runtime.mjs +0 -13
  616. package/indexer-lookup.js.map +0 -1
  617. package/indexer-lookup.mjs.map +0 -1
  618. package/packages/algod_client/src/core/model-runtime.d.ts +0 -10
  619. package/packages/algod_client/src/models/application-local-reference.d.ts +0 -20
  620. package/packages/algod_client/src/models/application-local-reference.js +0 -23
  621. package/packages/algod_client/src/models/application-local-reference.js.map +0 -1
  622. package/packages/algod_client/src/models/application-local-reference.mjs +0 -23
  623. package/packages/algod_client/src/models/application-local-reference.mjs.map +0 -1
  624. package/packages/algod_client/src/models/asset-holding-reference.d.ts +0 -20
  625. package/packages/algod_client/src/models/asset-holding-reference.js +0 -23
  626. package/packages/algod_client/src/models/asset-holding-reference.js.map +0 -1
  627. package/packages/algod_client/src/models/asset-holding-reference.mjs +0 -23
  628. package/packages/algod_client/src/models/asset-holding-reference.mjs.map +0 -1
  629. package/packages/algod_client/src/models/box-reference.d.ts +0 -17
  630. package/packages/algod_client/src/models/box-reference.js +0 -23
  631. package/packages/algod_client/src/models/box-reference.js.map +0 -1
  632. package/packages/algod_client/src/models/box-reference.mjs +0 -23
  633. package/packages/algod_client/src/models/box-reference.mjs.map +0 -1
  634. package/packages/indexer_client/src/core/model-runtime.d.ts +0 -10
  635. package/packages/kmd_client/src/core/model-runtime.d.ts +0 -10
  636. package/packages/sdk/src/convert.d.ts +0 -17
  637. package/packages/sdk/src/convert.js +0 -28
  638. package/packages/sdk/src/convert.js.map +0 -1
  639. package/packages/sdk/src/convert.mjs +0 -25
  640. package/packages/sdk/src/convert.mjs.map +0 -1
  641. package/packages/sdk/src/encoding/binarydata.d.ts +0 -34
  642. package/packages/sdk/src/encoding/binarydata.js +0 -65
  643. package/packages/sdk/src/encoding/binarydata.js.map +0 -1
  644. package/packages/sdk/src/encoding/binarydata.mjs +0 -60
  645. package/packages/sdk/src/encoding/binarydata.mjs.map +0 -1
  646. package/packages/sdk/src/encoding/encoding.d.ts +0 -237
  647. package/packages/sdk/src/encoding/encoding.js +0 -302
  648. package/packages/sdk/src/encoding/encoding.js.map +0 -1
  649. package/packages/sdk/src/encoding/encoding.mjs +0 -287
  650. package/packages/sdk/src/encoding/encoding.mjs.map +0 -1
  651. package/packages/sdk/src/encoding/schema/array.js +0 -35
  652. package/packages/sdk/src/encoding/schema/array.js.map +0 -1
  653. package/packages/sdk/src/encoding/schema/array.mjs +0 -35
  654. package/packages/sdk/src/encoding/schema/array.mjs.map +0 -1
  655. package/packages/sdk/src/encoding/schema/bytearray.js +0 -49
  656. package/packages/sdk/src/encoding/schema/bytearray.js.map +0 -1
  657. package/packages/sdk/src/encoding/schema/bytearray.mjs +0 -49
  658. package/packages/sdk/src/encoding/schema/bytearray.mjs.map +0 -1
  659. package/packages/sdk/src/encoding/schema/map.d.ts +0 -58
  660. package/packages/sdk/src/encoding/schema/map.js +0 -110
  661. package/packages/sdk/src/encoding/schema/map.js.map +0 -1
  662. package/packages/sdk/src/encoding/schema/map.mjs +0 -107
  663. package/packages/sdk/src/encoding/schema/map.mjs.map +0 -1
  664. package/packages/sdk/src/encoding/schema/optional.js +0 -46
  665. package/packages/sdk/src/encoding/schema/optional.js.map +0 -1
  666. package/packages/sdk/src/encoding/schema/optional.mjs +0 -46
  667. package/packages/sdk/src/encoding/schema/optional.mjs.map +0 -1
  668. package/packages/sdk/src/encoding/schema/uint64.js +0 -30
  669. package/packages/sdk/src/encoding/schema/uint64.js.map +0 -1
  670. package/packages/sdk/src/encoding/schema/uint64.mjs +0 -30
  671. package/packages/sdk/src/encoding/schema/uint64.mjs.map +0 -1
  672. package/packages/sdk/src/encoding/uint64.d.ts +0 -34
  673. package/packages/sdk/src/encoding/uint64.js +0 -34
  674. package/packages/sdk/src/encoding/uint64.js.map +0 -1
  675. package/packages/sdk/src/encoding/uint64.mjs +0 -33
  676. package/packages/sdk/src/encoding/uint64.mjs.map +0 -1
  677. package/packages/sdk/src/index.d.ts +0 -44
  678. package/packages/sdk/src/index.js +0 -62
  679. package/packages/sdk/src/index.js.map +0 -1
  680. package/packages/sdk/src/index.mjs +0 -58
  681. package/packages/sdk/src/index.mjs.map +0 -1
  682. package/packages/sdk/src/nacl/naclWrappers.js +0 -14
  683. package/packages/sdk/src/nacl/naclWrappers.js.map +0 -1
  684. package/packages/sdk/src/nacl/naclWrappers.mjs +0 -11
  685. package/packages/sdk/src/nacl/naclWrappers.mjs.map +0 -1
  686. package/packages/sdk/src/types/intDecoding.d.ts +0 -28
  687. package/packages/sdk/src/types/intDecoding.js +0 -32
  688. package/packages/sdk/src/types/intDecoding.js.map +0 -1
  689. package/packages/sdk/src/types/intDecoding.mjs +0 -31
  690. package/packages/sdk/src/types/intDecoding.mjs.map +0 -1
  691. package/packages/sdk/src/types/transactions/encoded.d.ts +0 -40
  692. package/packages/sdk/src/types/transactions/encoded.js +0 -64
  693. package/packages/sdk/src/types/transactions/encoded.js.map +0 -1
  694. package/packages/sdk/src/types/transactions/encoded.mjs +0 -59
  695. package/packages/sdk/src/types/transactions/encoded.mjs.map +0 -1
  696. package/packages/sdk/src/utils/utils.d.ts +0 -64
  697. package/packages/sdk/src/utils/utils.js +0 -140
  698. package/packages/sdk/src/utils/utils.js.map +0 -1
  699. package/packages/sdk/src/utils/utils.mjs +0 -128
  700. package/packages/sdk/src/utils/utils.mjs.map +0 -1
  701. package/packages/transact/src/transactions/common.d.ts +0 -37
  702. package/sdk/index.d.ts +0 -10
  703. package/sdk/index.js +0 -59
  704. package/sdk/index.mjs +0 -11
@@ -1,1572 +1,8 @@
1
- import { EMPTY_SIGNATURE, MAX_TRANSACTION_GROUP_SIZE } from "../packages/common/src/constants.mjs";
2
- import { OnApplicationComplete } from "../packages/transact/src/transactions/app-call.mjs";
3
- import { TransactionType } from "../packages/transact/src/transactions/transaction-type.mjs";
4
- import { Transaction, assignFee, calculateFee, decodeTransaction, encodeTransactionRaw, groupTransactions } from "../packages/transact/src/transactions/transaction.mjs";
5
- import { decodeSignedTransaction, encodeSignedTransactions } from "../packages/transact/src/transactions/signed-transaction.mjs";
6
- import { makeEmptyTransactionSigner } from "../packages/transact/src/signer.mjs";
7
- import { AlgoAmount } from "./amount.mjs";
8
- import { Config } from "../config.mjs";
9
- import { asJson } from "../util.mjs";
10
- import { waitForConfirmation } from "../transaction/transaction.mjs";
11
- import { AppManager } from "./app-manager.mjs";
12
- import { buildAppCall, buildAppCreate, buildAppUpdate, populateGroupResources, populateTransactionResources } from "../transactions/app-call.mjs";
13
- import { buildAssetOptIn, buildAssetOptOut, buildAssetTransfer } from "../transactions/asset-transfer.mjs";
14
- import { buildAssetConfig, buildAssetCreate, buildAssetDestroy, buildAssetFreeze } from "../transactions/asset-config.mjs";
15
- import { FeeDelta, FeePriority, calculateInnerFeeDelta } from "../transactions/fee-coverage.mjs";
16
- import { buildKeyReg } from "../transactions/key-registration.mjs";
17
- import { buildAppCallMethodCall, buildAppCreateMethodCall, buildAppUpdateMethodCall, extractComposerTransactionsFromAppMethodCallParams, processAppMethodCallArgs } from "../transactions/method-call.mjs";
18
- import { buildPayment } from "../transactions/payment.mjs";
19
- import { EventType } from "./lifecycle-events.mjs";
20
- import { genesisIdIsLocalNet } from "./network-client.mjs";
21
- import { Buffer } from "buffer";
1
+ import { TransactionComposer as TransactionComposer$1 } from "../composer.mjs";
22
2
 
23
3
  //#region src/types/composer.ts
24
- var InvalidErrorTransformerValue = class extends Error {
25
- constructor(originalError, value) {
26
- super(`An error transformer returned a non-error value: ${value}. The original error before any transformation: ${originalError}`);
27
- }
28
- };
29
- var ErrorTransformerError = class extends Error {
30
- constructor(originalError, cause) {
31
- super(`An error transformer threw an error: ${cause}. The original error before any transformation: ${originalError} `, { cause });
32
- }
33
- };
34
- /** TransactionComposer helps you compose and execute transactions as a transaction group. */
35
- var TransactionComposer = class TransactionComposer {
36
- /** Transactions that have not yet been composed */
37
- txns = [];
38
- /** The algod client used by the composer. */
39
- algod;
40
- /** An async function that will return suggested params for the transaction. */
41
- getSuggestedParams;
42
- /** A function that takes in an address and return a signer function for that address. */
43
- getSigner;
44
- /** The default transaction validity window */
45
- defaultValidityWindow = 10n;
46
- /** Whether the validity window was explicitly set on construction */
47
- defaultValidityWindowIsExplicit = false;
48
- appManager;
49
- errorTransformers;
50
- composerConfig;
51
- transactionsWithSigners;
52
- signedTransactions;
53
- rawBuildTransactions;
54
- async transformError(originalError) {
55
- if (!(originalError instanceof Error)) return originalError;
56
- let transformedError = originalError;
57
- for (const transformer of this.errorTransformers) try {
58
- transformedError = await transformer(transformedError);
59
- if (!(transformedError instanceof Error)) return new InvalidErrorTransformerValue(originalError, transformedError);
60
- } catch (errorFromTransformer) {
61
- return new ErrorTransformerError(originalError, errorFromTransformer);
62
- }
63
- return transformedError;
64
- }
65
- validateReferenceParams(params) {
66
- if (params.accessReferences && params.accessReferences.length > 0 && (params.appReferences && params.appReferences.length > 0 || params.assetReferences && params.assetReferences.length > 0 || params.boxReferences && params.boxReferences.length > 0)) throw new Error("Cannot specify both `accessReferences` and reference arrays (`appReferences`, `assetReferences`, `boxReferences`).");
67
- }
68
- /**
69
- * Create a `TransactionComposer`.
70
- * @param params The configuration for this composer
71
- * @returns The `TransactionComposer` instance
72
- */
73
- constructor(params) {
74
- this.algod = params.algod;
75
- const defaultGetSuggestedParams = () => params.algod.suggestedParams();
76
- this.getSuggestedParams = params.getSuggestedParams ?? defaultGetSuggestedParams;
77
- this.getSigner = params.getSigner;
78
- this.defaultValidityWindow = params.defaultValidityWindow ?? this.defaultValidityWindow;
79
- this.defaultValidityWindowIsExplicit = params.defaultValidityWindow !== void 0;
80
- this.appManager = params.appManager ?? new AppManager(params.algod);
81
- this.errorTransformers = params.errorTransformers ?? [];
82
- this.composerConfig = params.composerConfig ?? {
83
- coverAppCallInnerTransactionFees: false,
84
- populateAppCallResources: true
85
- };
86
- }
87
- cloneTransaction(txn) {
88
- switch (txn.type) {
89
- case "pay": return {
90
- type: "pay",
91
- data: { ...txn.data }
92
- };
93
- case "assetCreate": return {
94
- type: "assetCreate",
95
- data: { ...txn.data }
96
- };
97
- case "assetConfig": return {
98
- type: "assetConfig",
99
- data: { ...txn.data }
100
- };
101
- case "assetFreeze": return {
102
- type: "assetFreeze",
103
- data: { ...txn.data }
104
- };
105
- case "assetDestroy": return {
106
- type: "assetDestroy",
107
- data: { ...txn.data }
108
- };
109
- case "assetTransfer": return {
110
- type: "assetTransfer",
111
- data: { ...txn.data }
112
- };
113
- case "assetOptIn": return {
114
- type: "assetOptIn",
115
- data: { ...txn.data }
116
- };
117
- case "assetOptOut": return {
118
- type: "assetOptOut",
119
- data: { ...txn.data }
120
- };
121
- case "appCall": return {
122
- type: "appCall",
123
- data: { ...txn.data }
124
- };
125
- case "keyReg": return {
126
- type: "keyReg",
127
- data: { ...txn.data }
128
- };
129
- case "txn": {
130
- const { txn: transaction, signer, maxFee } = txn.data;
131
- const clonedTxn = decodeTransaction(encodeTransactionRaw(transaction));
132
- delete clonedTxn.group;
133
- return {
134
- type: "txn",
135
- data: {
136
- txn: clonedTxn,
137
- signer,
138
- maxFee
139
- }
140
- };
141
- }
142
- case "asyncTxn": {
143
- const { txn: txnPromise, signer, maxFee } = txn.data;
144
- return {
145
- type: "asyncTxn",
146
- data: {
147
- txn: txnPromise.then((resolvedTxn) => {
148
- const clonedTxn = decodeTransaction(encodeTransactionRaw(resolvedTxn));
149
- delete clonedTxn.group;
150
- return clonedTxn;
151
- }),
152
- signer,
153
- maxFee
154
- }
155
- };
156
- }
157
- case "methodCall": return {
158
- type: "methodCall",
159
- data: { ...txn.data }
160
- };
161
- }
162
- }
163
- push(...txns) {
164
- if (this.transactionsWithSigners) throw new Error("Cannot add new transactions after building");
165
- if (this.txns.length + txns.length > MAX_TRANSACTION_GROUP_SIZE) throw new Error(`Adding ${txns.length} transaction(s) would exceed the maximum group size. Current: ${this.txns.length}, Maximum: ${MAX_TRANSACTION_GROUP_SIZE}`);
166
- this.txns.push(...txns);
167
- }
168
- clone(composerConfig) {
169
- const newComposer = new TransactionComposer({
170
- algod: this.algod,
171
- getSuggestedParams: this.getSuggestedParams,
172
- getSigner: this.getSigner,
173
- defaultValidityWindow: this.defaultValidityWindow,
174
- appManager: this.appManager,
175
- errorTransformers: this.errorTransformers,
176
- composerConfig: {
177
- ...this.composerConfig,
178
- ...composerConfig
179
- }
180
- });
181
- this.txns.forEach((txn) => {
182
- newComposer.txns.push(this.cloneTransaction(txn));
183
- });
184
- newComposer.defaultValidityWindowIsExplicit = this.defaultValidityWindowIsExplicit;
185
- return newComposer;
186
- }
187
- /**
188
- * Register a function that will be used to transform an error caught when simulating or executing
189
- *
190
- * @returns The composer so you can chain method calls
191
- */
192
- registerErrorTransformer(transformer) {
193
- this.errorTransformers.push(transformer);
194
- return this;
195
- }
196
- /**
197
- * Add a pre-built transaction to the transaction group.
198
- * @param transaction The pre-built transaction
199
- * @param signer Optional signer override for the transaction
200
- * @returns The composer so you can chain method calls
201
- * @example
202
- * ```typescript
203
- * composer.addTransaction(txn)
204
- * ```
205
- */
206
- addTransaction(transaction, signer) {
207
- if (transaction.group) throw new Error("Cannot add a transaction to the composer because it is already in a group");
208
- this.push({
209
- data: {
210
- txn: transaction,
211
- signer: signer ?? this.getSigner(transaction.sender)
212
- },
213
- type: "txn"
214
- });
215
- return this;
216
- }
217
- /**
218
- * Add another transaction composer to the current transaction composer.
219
- * The transaction params of the input transaction composer will be added.
220
- * If the input transaction composer is updated, it won't affect the current transaction composer.
221
- * @param composer The transaction composer to add
222
- * @returns The composer so you can chain method calls
223
- * @example
224
- * ```typescript
225
- * const innerComposer = algorand.newGroup()
226
- * .addPayment({ sender: 'SENDER', receiver: 'RECEIVER', amount: (1).algo() })
227
- * .addPayment({ sender: 'SENDER', receiver: 'RECEIVER', amount: (2).algo() })
228
- *
229
- * composer.addTransactionComposer(innerComposer)
230
- * ```
231
- */
232
- addTransactionComposer(composer) {
233
- const clonedTxns = composer.txns.map((txn) => this.cloneTransaction(txn));
234
- this.push(...clonedTxns);
235
- return this;
236
- }
237
- /**
238
- * Add a payment transaction to the transaction group.
239
- * @param params The payment transaction parameters
240
- * @returns The composer so you can chain method calls
241
- * @example Basic example
242
- * ```typescript
243
- * composer.addPayment({
244
- * sender: 'SENDERADDRESS',
245
- * receiver: 'RECEIVERADDRESS',
246
- * amount: (4).algo(),
247
- * })
248
- * ```
249
- * @example Advanced example
250
- * ```typescript
251
- * composer.addPayment({
252
- * amount: (4).algo(),
253
- * receiver: 'RECEIVERADDRESS',
254
- * sender: 'SENDERADDRESS',
255
- * closeRemainderTo: 'CLOSEREMAINDERTOADDRESS',
256
- * lease: 'lease',
257
- * note: 'note',
258
- * // Use this with caution, it's generally better to use algorand.account.rekeyAccount
259
- * rekeyTo: 'REKEYTOADDRESS',
260
- * // You wouldn't normally set this field
261
- * firstValidRound: 1000n,
262
- * validityWindow: 10,
263
- * extraFee: (1000).microAlgo(),
264
- * staticFee: (1000).microAlgo(),
265
- * // Max fee doesn't make sense with extraFee AND staticFee
266
- * // already specified, but here for completeness
267
- * maxFee: (3000).microAlgo(),
268
- * })
269
- */
270
- addPayment(params) {
271
- this.push({
272
- data: params,
273
- type: "pay"
274
- });
275
- return this;
276
- }
277
- /**
278
- * Add an asset create transaction to the transaction group.
279
- * @param params The asset create transaction parameters
280
- * @returns The composer so you can chain method calls
281
- * @example Basic example
282
- * ```typescript
283
- * composer.addAssetCreate({ sender: "CREATORADDRESS", total: 100n})
284
- * ```
285
- * @example Advanced example
286
- * ```typescript
287
- * composer.addAssetCreate({
288
- * sender: 'CREATORADDRESS',
289
- * total: 100n,
290
- * decimals: 2,
291
- * assetName: 'asset',
292
- * unitName: 'unit',
293
- * url: 'url',
294
- * metadataHash: 'metadataHash',
295
- * defaultFrozen: false,
296
- * manager: 'MANAGERADDRESS',
297
- * reserve: 'RESERVEADDRESS',
298
- * freeze: 'FREEZEADDRESS',
299
- * clawback: 'CLAWBACKADDRESS',
300
- * lease: 'lease',
301
- * note: 'note',
302
- * // You wouldn't normally set this field
303
- * firstValidRound: 1000n,
304
- * validityWindow: 10,
305
- * extraFee: (1000).microAlgo(),
306
- * staticFee: (1000).microAlgo(),
307
- * // Max fee doesn't make sense with extraFee AND staticFee
308
- * // already specified, but here for completeness
309
- * maxFee: (3000).microAlgo(),
310
- * })
311
- */
312
- addAssetCreate(params) {
313
- this.push({
314
- data: params,
315
- type: "assetCreate"
316
- });
317
- return this;
318
- }
319
- /**
320
- * Add an asset config transaction to the transaction group.
321
- * @param params The asset config transaction parameters
322
- * @returns The composer so you can chain method calls
323
- * @example Basic example
324
- * ```typescript
325
- * composer.addAssetConfig({ sender: "MANAGERADDRESS", assetId: 123456n, manager: "MANAGERADDRESS" })
326
- * ```
327
- * @example Advanced example
328
- * ```typescript
329
- * composer.addAssetConfig({
330
- * sender: 'MANAGERADDRESS',
331
- * assetId: 123456n,
332
- * manager: 'MANAGERADDRESS',
333
- * reserve: 'RESERVEADDRESS',
334
- * freeze: 'FREEZEADDRESS',
335
- * clawback: 'CLAWBACKADDRESS',
336
- * lease: 'lease',
337
- * note: 'note',
338
- * // You wouldn't normally set this field
339
- * firstValidRound: 1000n,
340
- * validityWindow: 10,
341
- * extraFee: (1000).microAlgo(),
342
- * staticFee: (1000).microAlgo(),
343
- * // Max fee doesn't make sense with extraFee AND staticFee
344
- * // already specified, but here for completeness
345
- * maxFee: (3000).microAlgo(),
346
- * })
347
- */
348
- addAssetConfig(params) {
349
- this.push({
350
- data: params,
351
- type: "assetConfig"
352
- });
353
- return this;
354
- }
355
- /**
356
- * Add an asset freeze transaction to the transaction group.
357
- * @param params The asset freeze transaction parameters
358
- * @returns The composer so you can chain method calls
359
- * @example Basic example
360
- * ```typescript
361
- * composer.addAssetFreeze({ sender: "MANAGERADDRESS", assetId: 123456n, account: "ACCOUNTADDRESS", frozen: true })
362
- * ```
363
- * @example Advanced example
364
- * ```typescript
365
- * composer.addAssetFreeze({
366
- * sender: 'MANAGERADDRESS',
367
- * assetId: 123456n,
368
- * account: 'ACCOUNTADDRESS',
369
- * frozen: true,
370
- * lease: 'lease',
371
- * note: 'note',
372
- * // You wouldn't normally set this field
373
- * firstValidRound: 1000n,
374
- * validityWindow: 10,
375
- * extraFee: (1000).microAlgo(),
376
- * staticFee: (1000).microAlgo(),
377
- * // Max fee doesn't make sense with extraFee AND staticFee
378
- * // already specified, but here for completeness
379
- * maxFee: (3000).microAlgo(),
380
- * })
381
- * ```
382
- */
383
- addAssetFreeze(params) {
384
- this.push({
385
- data: params,
386
- type: "assetFreeze"
387
- });
388
- return this;
389
- }
390
- /**
391
- * Add an asset destroy transaction to the transaction group.
392
- * @param params The asset destroy transaction parameters
393
- * @returns The composer so you can chain method calls
394
- * @example Basic example
395
- * ```typescript
396
- * composer.addAssetDestroy({ sender: "MANAGERADDRESS", assetId: 123456n })
397
- * ```
398
- * @example Advanced example
399
- * ```typescript
400
- * composer.addAssetDestroy({
401
- * sender: 'MANAGERADDRESS',
402
- * assetId: 123456n,
403
- * lease: 'lease',
404
- * note: 'note',
405
- * // You wouldn't normally set this field
406
- * firstValidRound: 1000n,
407
- * validityWindow: 10,
408
- * extraFee: (1000).microAlgo(),
409
- * staticFee: (1000).microAlgo(),
410
- * // Max fee doesn't make sense with extraFee AND staticFee
411
- * // already specified, but here for completeness
412
- * maxFee: (3000).microAlgo(),
413
- * })
414
- * ```
415
- */
416
- addAssetDestroy(params) {
417
- this.push({
418
- data: params,
419
- type: "assetDestroy"
420
- });
421
- return this;
422
- }
423
- /**
424
- * Add an asset transfer transaction to the transaction group.
425
- * @param params The asset transfer transaction parameters
426
- * @returns The composer so you can chain method calls
427
- * @example Basic example
428
- * ```typescript
429
- * composer.addAssetTransfer({ sender: "HOLDERADDRESS", assetId: 123456n, amount: 1n, receiver: "RECEIVERADDRESS" })
430
- * ```
431
- * @example Advanced example (with clawback)
432
- * ```typescript
433
- * composer.addAssetTransfer({
434
- * sender: 'CLAWBACKADDRESS',
435
- * assetId: 123456n,
436
- * amount: 1n,
437
- * receiver: 'RECEIVERADDRESS',
438
- * clawbackTarget: 'HOLDERADDRESS',
439
- * // This field needs to be used with caution
440
- * closeAssetTo: 'ADDRESSTOCLOSETO'
441
- * lease: 'lease',
442
- * note: 'note',
443
- * // You wouldn't normally set this field
444
- * firstValidRound: 1000n,
445
- * validityWindow: 10,
446
- * extraFee: (1000).microAlgo(),
447
- * staticFee: (1000).microAlgo(),
448
- * // Max fee doesn't make sense with extraFee AND staticFee
449
- * // already specified, but here for completeness
450
- * maxFee: (3000).microAlgo(),
451
- * })
452
- * ```
453
- */
454
- addAssetTransfer(params) {
455
- this.push({
456
- data: params,
457
- type: "assetTransfer"
458
- });
459
- return this;
460
- }
461
- /**
462
- * Add an asset opt-in transaction to the transaction group.
463
- * @param params The asset opt-in transaction parameters
464
- * @returns The composer so you can chain method calls
465
- * @example Basic example
466
- * ```typescript
467
- * composer.addAssetOptIn({ sender: "SENDERADDRESS", assetId: 123456n })
468
- * ```
469
- * @example Advanced example
470
- * ```typescript
471
- * composer.addAssetOptIn({
472
- * sender: 'SENDERADDRESS',
473
- * assetId: 123456n,
474
- * lease: 'lease',
475
- * note: 'note',
476
- * // You wouldn't normally set this field
477
- * firstValidRound: 1000n,
478
- * validityWindow: 10,
479
- * extraFee: (1000).microAlgo(),
480
- * staticFee: (1000).microAlgo(),
481
- * // Max fee doesn't make sense with extraFee AND staticFee
482
- * // already specified, but here for completeness
483
- * maxFee: (3000).microAlgo(),
484
- * })
485
- * ```
486
- */
487
- addAssetOptIn(params) {
488
- this.push({
489
- data: params,
490
- type: "assetOptIn"
491
- });
492
- return this;
493
- }
494
- /**
495
- * Add an asset opt-out transaction to the transaction group.
496
- * @param params The asset opt-out transaction parameters
497
- * @returns The composer so you can chain method calls
498
- * @example Basic example (without creator, will be retrieved from algod)
499
- * ```typescript
500
- * composer.addAssetOptOut({ sender: "SENDERADDRESS", assetId: 123456n, ensureZeroBalance: true })
501
- * ```
502
- * @example Basic example (with creator)
503
- * ```typescript
504
- * composer.addAssetOptOut({ sender: "SENDERADDRESS", creator: "CREATORADDRESS", assetId: 123456n, ensureZeroBalance: true })
505
- * ```
506
- * @example Advanced example
507
- * ```typescript
508
- * composer.addAssetOptOut({
509
- * sender: 'SENDERADDRESS',
510
- * assetId: 123456n,
511
- * creator: 'CREATORADDRESS',
512
- * ensureZeroBalance: true,
513
- * lease: 'lease',
514
- * note: 'note',
515
- * // You wouldn't normally set this field
516
- * firstValidRound: 1000n,
517
- * validityWindow: 10,
518
- * extraFee: (1000).microAlgo(),
519
- * staticFee: (1000).microAlgo(),
520
- * // Max fee doesn't make sense with extraFee AND staticFee
521
- * // already specified, but here for completeness
522
- * maxFee: (3000).microAlgo(),
523
- * })
524
- * ```
525
- */
526
- addAssetOptOut(params) {
527
- this.push({
528
- data: params,
529
- type: "assetOptOut"
530
- });
531
- return this;
532
- }
533
- /**
534
- * Add an application create transaction to the transaction group.
535
- *
536
- * Note: we recommend using app clients to make it easier to make app calls.
537
- * @param params The application create transaction parameters
538
- * @returns The composer so you can chain method calls
539
- * @example Basic example
540
- * ```typescript
541
- * composer.addAppCreate({ sender: 'CREATORADDRESS', approvalProgram: 'TEALCODE', clearStateProgram: 'TEALCODE' })
542
- * ```
543
- * @example Advanced example
544
- * ```typescript
545
- * composer.addAppCreate({
546
- * sender: 'CREATORADDRESS',
547
- * approvalProgram: "TEALCODE",
548
- * clearStateProgram: "TEALCODE",
549
- * schema: {
550
- * globalInts: 1,
551
- * globalByteSlices: 2,
552
- * localInts: 3,
553
- * localByteSlices: 4
554
- * },
555
- * extraProgramPages: 1,
556
- * onComplete: OnApplicationComplete.OptIn,
557
- * args: [new Uint8Array(1, 2, 3, 4)]
558
- * accountReferences: ["ACCOUNT_1"]
559
- * appReferences: [123n, 1234n]
560
- * assetReferences: [12345n]
561
- * boxReferences: ["box1", {appId: 1234n, name: "box2"}]
562
- * accessReferences: [{ appId: 1234n }]
563
- * lease: 'lease',
564
- * note: 'note',
565
- * // You wouldn't normally set this field
566
- * firstValidRound: 1000n,
567
- * validityWindow: 10,
568
- * extraFee: (1000).microAlgo(),
569
- * staticFee: (1000).microAlgo(),
570
- * // Max fee doesn't make sense with extraFee AND staticFee
571
- * // already specified, but here for completeness
572
- * maxFee: (3000).microAlgo(),
573
- * // Signer only needed if you want to provide one,
574
- * // generally you'd register it with AlgorandClient
575
- * // against the sender and not need to pass it in
576
- * signer: transactionSigner,
577
- * maxRoundsToWaitForConfirmation: 5,
578
- * suppressLog: true,
579
- *})
580
- * ```
581
- */
582
- addAppCreate(params) {
583
- this.validateReferenceParams(params);
584
- this.push({
585
- data: params,
586
- type: "appCall"
587
- });
588
- return this;
589
- }
590
- /**
591
- * Add an application update transaction to the transaction group.
592
- *
593
- * Note: we recommend using app clients to make it easier to make app calls.
594
- * @param params The application update transaction parameters
595
- * @returns The composer so you can chain method calls
596
- * @example Basic example
597
- * ```typescript
598
- * composer.addAppUpdate({ sender: 'CREATORADDRESS', approvalProgram: 'TEALCODE', clearStateProgram: 'TEALCODE' })
599
- * ```
600
- * @example Advanced example
601
- * ```typescript
602
- * composer.addAppUpdate({
603
- * sender: 'CREATORADDRESS',
604
- * approvalProgram: "TEALCODE",
605
- * clearStateProgram: "TEALCODE",
606
- * onComplete: OnApplicationComplete.UpdateApplication,
607
- * args: [new Uint8Array(1, 2, 3, 4)]
608
- * accountReferences: ["ACCOUNT_1"]
609
- * appReferences: [123n, 1234n]
610
- * assetReferences: [12345n]
611
- * boxReferences: ["box1", {appId: 1234n, name: "box2"}]
612
- * accessReferences: [{ appId: 1234n }]
613
- * lease: 'lease',
614
- * note: 'note',
615
- * // You wouldn't normally set this field
616
- * firstValidRound: 1000n,
617
- * validityWindow: 10,
618
- * extraFee: (1000).microAlgo(),
619
- * staticFee: (1000).microAlgo(),
620
- * // Max fee doesn't make sense with extraFee AND staticFee
621
- * // already specified, but here for completeness
622
- * maxFee: (3000).microAlgo(),
623
- *})
624
- * ```
625
- */
626
- addAppUpdate(params) {
627
- this.validateReferenceParams(params);
628
- this.push({
629
- data: {
630
- ...params,
631
- onComplete: OnApplicationComplete.UpdateApplication
632
- },
633
- type: "appCall"
634
- });
635
- return this;
636
- }
637
- /**
638
- * Add an application delete transaction to the transaction group.
639
- *
640
- * Note: we recommend using app clients to make it easier to make app calls.
641
- * @param params The application delete transaction parameters
642
- * @returns The composer so you can chain method calls
643
- * @example Basic example
644
- * ```typescript
645
- * composer.addAppDelete({ sender: 'CREATORADDRESS' })
646
- * ```
647
- * @example Advanced example
648
- * ```typescript
649
- * composer.addAppDelete({
650
- * sender: 'CREATORADDRESS',
651
- * onComplete: OnApplicationComplete.DeleteApplication,
652
- * args: [new Uint8Array(1, 2, 3, 4)]
653
- * accountReferences: ["ACCOUNT_1"]
654
- * appReferences: [123n, 1234n]
655
- * assetReferences: [12345n]
656
- * boxReferences: ["box1", {appId: 1234n, name: "box2"}]
657
- * accessReferences: [{ appId: 1234n }]
658
- * lease: 'lease',
659
- * note: 'note',
660
- * // You wouldn't normally set this field
661
- * firstValidRound: 1000n,
662
- * validityWindow: 10,
663
- * extraFee: (1000).microAlgo(),
664
- * staticFee: (1000).microAlgo(),
665
- * // Max fee doesn't make sense with extraFee AND staticFee
666
- * // already specified, but here for completeness
667
- * maxFee: (3000).microAlgo(),
668
- *})
669
- * ```
670
- */
671
- addAppDelete(params) {
672
- this.validateReferenceParams(params);
673
- this.push({
674
- data: {
675
- ...params,
676
- onComplete: OnApplicationComplete.DeleteApplication
677
- },
678
- type: "appCall"
679
- });
680
- return this;
681
- }
682
- /**
683
- * Add an application call transaction to the transaction group.
684
- *
685
- * If you want to create or update an app use `addAppCreate` or `addAppUpdate`.
686
- *
687
- * Note: we recommend using app clients to make it easier to make app calls.
688
- * @param params The application call transaction parameters
689
- * @returns The composer so you can chain method calls
690
- * @example Basic example
691
- * ```typescript
692
- * composer.addAppCall({ sender: 'CREATORADDRESS' })
693
- * ```
694
- * @example Advanced example
695
- * ```typescript
696
- * composer.addAppCall({
697
- * sender: 'CREATORADDRESS',
698
- * onComplete: OnApplicationComplete.OptIn,
699
- * args: [new Uint8Array(1, 2, 3, 4)]
700
- * accountReferences: ["ACCOUNT_1"]
701
- * appReferences: [123n, 1234n]
702
- * assetReferences: [12345n]
703
- * boxReferences: ["box1", {appId: 1234n, name: "box2"}]
704
- * accessReferences: [{ appId: 1234n }]
705
- * lease: 'lease',
706
- * note: 'note',
707
- * // You wouldn't normally set this field
708
- * firstValidRound: 1000n,
709
- * validityWindow: 10,
710
- * extraFee: (1000).microAlgo(),
711
- * staticFee: (1000).microAlgo(),
712
- * // Max fee doesn't make sense with extraFee AND staticFee
713
- * // already specified, but here for completeness
714
- * maxFee: (3000).microAlgo(),
715
- *})
716
- * ```
717
- */
718
- addAppCall(params) {
719
- this.validateReferenceParams(params);
720
- this.push({
721
- data: params,
722
- type: "appCall"
723
- });
724
- return this;
725
- }
726
- /**
727
- * Add an ABI method create application call transaction to the transaction group.
728
- *
729
- * Note: we recommend using app clients to make it easier to make app calls.
730
- * @param params The ABI create method application call transaction parameters
731
- * @returns The composer so you can chain method calls
732
- * @example Basic example
733
- * ```typescript
734
- * const method = new ABIMethod({
735
- * name: 'method',
736
- * args: [{ name: 'arg1', type: 'string' }],
737
- * returns: { type: 'string' },
738
- * })
739
- * composer.addAppCreateMethodCall({ sender: 'CREATORADDRESS', approvalProgram: 'TEALCODE', clearStateProgram: 'TEALCODE', method: method, args: ["arg1_value"] })
740
- * ```
741
- * @example Advanced example
742
- * ```typescript
743
- * const method = new ABIMethod({
744
- * name: 'method',
745
- * args: [{ name: 'arg1', type: 'string' }],
746
- * returns: { type: 'string' },
747
- * })
748
- * composer.addAppCreateMethodCall({
749
- * sender: 'CREATORADDRESS',
750
- * method: method,
751
- * args: ["arg1_value"],
752
- * approvalProgram: "TEALCODE",
753
- * clearStateProgram: "TEALCODE",
754
- * schema: {
755
- * globalInts: 1,
756
- * globalByteSlices: 2,
757
- * localInts: 3,
758
- * localByteSlices: 4
759
- * },
760
- * extraProgramPages: 1,
761
- * onComplete: OnApplicationComplete.OptIn,
762
- * args: [new Uint8Array(1, 2, 3, 4)]
763
- * accountReferences: ["ACCOUNT_1"]
764
- * appReferences: [123n, 1234n]
765
- * assetReferences: [12345n]
766
- * boxReferences: ["box1", {appId: 1234n, name: "box2"}]
767
- * accessReferences: [{ appId: 1234n }]
768
- * lease: 'lease',
769
- * note: 'note',
770
- * // You wouldn't normally set this field
771
- * firstValidRound: 1000n,
772
- * validityWindow: 10,
773
- * extraFee: (1000).microAlgo(),
774
- * staticFee: (1000).microAlgo(),
775
- * // Max fee doesn't make sense with extraFee AND staticFee
776
- * // already specified, but here for completeness
777
- * maxFee: (3000).microAlgo(),
778
- *})
779
- * ```
780
- */
781
- addAppCreateMethodCall(params) {
782
- this.validateReferenceParams(params);
783
- const txnArgs = extractComposerTransactionsFromAppMethodCallParams(params);
784
- this.push(...txnArgs, {
785
- data: {
786
- ...params,
787
- args: processAppMethodCallArgs(params.args)
788
- },
789
- type: "methodCall"
790
- });
791
- return this;
792
- }
793
- /**
794
- * Add an ABI method update application call transaction to the transaction group.
795
- *
796
- * Note: we recommend using app clients to make it easier to make app calls.
797
- * @param params The ABI update method application call transaction parameters
798
- * @returns The composer so you can chain method calls
799
- * @example Basic example
800
- * ```typescript
801
- * const method = new ABIMethod({
802
- * name: 'method',
803
- * args: [{ name: 'arg1', type: 'string' }],
804
- * returns: { type: 'string' },
805
- * })
806
- * composer.addAppUpdateMethodCall({ sender: 'CREATORADDRESS', approvalProgram: 'TEALCODE', clearStateProgram: 'TEALCODE', method: method, args: ["arg1_value"] })
807
- * ```
808
- * @example Advanced example
809
- * ```typescript
810
- * const method = new ABIMethod({
811
- * name: 'method',
812
- * args: [{ name: 'arg1', type: 'string' }],
813
- * returns: { type: 'string' },
814
- * })
815
- * composer.addAppUpdateMethodCall({
816
- * sender: 'CREATORADDRESS',
817
- * method: method,
818
- * args: ["arg1_value"],
819
- * approvalProgram: "TEALCODE",
820
- * clearStateProgram: "TEALCODE",
821
- * onComplete: OnApplicationComplete.UpdateApplication,
822
- * args: [new Uint8Array(1, 2, 3, 4)]
823
- * accountReferences: ["ACCOUNT_1"]
824
- * appReferences: [123n, 1234n]
825
- * assetReferences: [12345n]
826
- * boxReferences: ["box1", {appId: 1234n, name: "box2"}]
827
- * accessReferences: [{ appId: 1234n }]
828
- * lease: 'lease',
829
- * note: 'note',
830
- * // You wouldn't normally set this field
831
- * firstValidRound: 1000n,
832
- * validityWindow: 10,
833
- * extraFee: (1000).microAlgo(),
834
- * staticFee: (1000).microAlgo(),
835
- * // Max fee doesn't make sense with extraFee AND staticFee
836
- * // already specified, but here for completeness
837
- * maxFee: (3000).microAlgo(),
838
- *})
839
- * ```
840
- */
841
- addAppUpdateMethodCall(params) {
842
- this.validateReferenceParams(params);
843
- const txnArgs = extractComposerTransactionsFromAppMethodCallParams(params);
844
- this.push(...txnArgs, {
845
- data: {
846
- ...params,
847
- args: processAppMethodCallArgs(params.args),
848
- onComplete: OnApplicationComplete.UpdateApplication
849
- },
850
- type: "methodCall"
851
- });
852
- return this;
853
- }
854
- /**
855
- * Add an ABI method delete application call transaction to the transaction group.
856
- *
857
- * Note: we recommend using app clients to make it easier to make app calls.
858
- * @param params The ABI delete method application call transaction parameters
859
- * @returns The composer so you can chain method calls
860
- * @example Basic example
861
- * ```typescript
862
- * const method = new ABIMethod({
863
- * name: 'method',
864
- * args: [{ name: 'arg1', type: 'string' }],
865
- * returns: { type: 'string' },
866
- * })
867
- * composer.addAppDeleteMethodCall({ sender: 'CREATORADDRESS', method: method, args: ["arg1_value"] })
868
- * ```
869
- * @example Advanced example
870
- * ```typescript
871
- * const method = new ABIMethod({
872
- * name: 'method',
873
- * args: [{ name: 'arg1', type: 'string' }],
874
- * returns: { type: 'string' },
875
- * })
876
- * composer.addAppDeleteMethodCall({
877
- * sender: 'CREATORADDRESS',
878
- * method: method,
879
- * args: ["arg1_value"],
880
- * onComplete: OnApplicationComplete.DeleteApplication,
881
- * args: [new Uint8Array(1, 2, 3, 4)]
882
- * accountReferences: ["ACCOUNT_1"]
883
- * appReferences: [123n, 1234n]
884
- * assetReferences: [12345n]
885
- * boxReferences: ["box1", {appId: 1234n, name: "box2"}]
886
- * accessReferences: [{ appId: 1234n }]
887
- * lease: 'lease',
888
- * note: 'note',
889
- * // You wouldn't normally set this field
890
- * firstValidRound: 1000n,
891
- * validityWindow: 10,
892
- * extraFee: (1000).microAlgo(),
893
- * staticFee: (1000).microAlgo(),
894
- * // Max fee doesn't make sense with extraFee AND staticFee
895
- * // already specified, but here for completeness
896
- * maxFee: (3000).microAlgo(),
897
- *})
898
- * ```
899
- */
900
- addAppDeleteMethodCall(params) {
901
- this.validateReferenceParams(params);
902
- const txnArgs = extractComposerTransactionsFromAppMethodCallParams(params);
903
- this.push(...txnArgs, {
904
- data: {
905
- ...params,
906
- args: processAppMethodCallArgs(params.args),
907
- onComplete: OnApplicationComplete.DeleteApplication
908
- },
909
- type: "methodCall"
910
- });
911
- return this;
912
- }
913
- /**
914
- * Add a non-create/non-update ABI method application call transaction to the transaction group.
915
- *
916
- * Note: we recommend using app clients to make it easier to make app calls.
917
- * @param params The ABI method application call transaction parameters
918
- * @returns The composer so you can chain method calls
919
- * @example Basic example
920
- * ```typescript
921
- * const method = new ABIMethod({
922
- * name: 'method',
923
- * args: [{ name: 'arg1', type: 'string' }],
924
- * returns: { type: 'string' },
925
- * })
926
- * composer.addAppCallMethodCall({ sender: 'CREATORADDRESS', method: method, args: ["arg1_value"] })
927
- * ```
928
- * @example Advanced example
929
- * ```typescript
930
- * const method = new ABIMethod({
931
- * name: 'method',
932
- * args: [{ name: 'arg1', type: 'string' }],
933
- * returns: { type: 'string' },
934
- * })
935
- * composer.addAppCallMethodCall({
936
- * sender: 'CREATORADDRESS',
937
- * method: method,
938
- * args: ["arg1_value"],
939
- * onComplete: OnApplicationComplete.OptIn,
940
- * args: [new Uint8Array(1, 2, 3, 4)]
941
- * accountReferences: ["ACCOUNT_1"]
942
- * appReferences: [123n, 1234n]
943
- * assetReferences: [12345n]
944
- * boxReferences: ["box1", {appId: 1234n, name: "box2"}]
945
- * accessReferences: [{ appId: 1234n }]
946
- * lease: 'lease',
947
- * note: 'note',
948
- * // You wouldn't normally set this field
949
- * firstValidRound: 1000n,
950
- * validityWindow: 10,
951
- * extraFee: (1000).microAlgo(),
952
- * staticFee: (1000).microAlgo(),
953
- * // Max fee doesn't make sense with extraFee AND staticFee
954
- * // already specified, but here for completeness
955
- * maxFee: (3000).microAlgo(),
956
- *})
957
- * ```
958
- */
959
- addAppCallMethodCall(params) {
960
- this.validateReferenceParams(params);
961
- const txnArgs = extractComposerTransactionsFromAppMethodCallParams(params);
962
- this.push(...txnArgs, {
963
- data: {
964
- ...params,
965
- args: processAppMethodCallArgs(params.args)
966
- },
967
- type: "methodCall"
968
- });
969
- return this;
970
- }
971
- /**
972
- * Add an online key registration transaction to the transaction group.
973
- * @param params The online key registration transaction parameters
974
- * @returns The composer so you can chain method calls
975
- * @example Basic example
976
- * ```typescript
977
- * composer.addOnlineKeyRegistration({
978
- * sender: 'SENDERADDRESS',
979
- * voteKey: Uint8Array.from(Buffer.from("voteKeyBase64", 'base64')),
980
- * selectionKey: Uint8Array.from(Buffer.from("selectionKeyBase64", 'base64')),
981
- * stateProofKey: Uint8Array.from(Buffer.from("stateProofKeyBase64", 'base64')),
982
- * voteFirst: 1n,
983
- * voteLast: 1000n,
984
- * voteKeyDilution: 1n,
985
- * })
986
- * ```
987
- * @example Advanced example
988
- * ```typescript
989
- * composer.addOnlineKeyRegistration({
990
- * sender: 'SENDERADDRESS',
991
- * voteKey: Uint8Array.from(Buffer.from("voteKeyBase64", 'base64')),
992
- * selectionKey: Uint8Array.from(Buffer.from("selectionKeyBase64", 'base64')),
993
- * stateProofKey: Uint8Array.from(Buffer.from("stateProofKeyBase64", 'base64')),
994
- * voteFirst: 1n,
995
- * voteLast: 1000n,
996
- * voteKeyDilution: 1n,
997
- * lease: 'lease',
998
- * note: 'note',
999
- * // Use this with caution, it's generally better to use algorand.account.rekeyAccount
1000
- * rekeyTo: 'REKEYTOADDRESS',
1001
- * // You wouldn't normally set this field
1002
- * firstValidRound: 1000n,
1003
- * validityWindow: 10,
1004
- * extraFee: (1000).microAlgo(),
1005
- * staticFee: (1000).microAlgo(),
1006
- * // Max fee doesn't make sense with extraFee AND staticFee
1007
- * // already specified, but here for completeness
1008
- * maxFee: (3000).microAlgo(),
1009
- * })
1010
- * ```
1011
- */
1012
- addOnlineKeyRegistration(params) {
1013
- this.push({
1014
- data: params,
1015
- type: "keyReg"
1016
- });
1017
- return this;
1018
- }
1019
- /**
1020
- * Add an offline key registration transaction to the transaction group.
1021
- * @param params The offline key registration transaction parameters
1022
- * @returns The composer so you can chain method calls
1023
- * @example Basic example
1024
- * ```typescript
1025
- * composer.addOfflineKeyRegistration({
1026
- * sender: 'SENDERADDRESS',
1027
- * })
1028
- * ```
1029
- * @example Advanced example
1030
- * ```typescript
1031
- * composer.addOfflineKeyRegistration({
1032
- * sender: 'SENDERADDRESS',
1033
- * lease: 'lease',
1034
- * note: 'note',
1035
- * // Use this with caution, it's generally better to use algorand.account.rekeyAccount
1036
- * rekeyTo: 'REKEYTOADDRESS',
1037
- * // You wouldn't normally set this field
1038
- * firstValidRound: 1000n,
1039
- * validityWindow: 10,
1040
- * extraFee: (1000).microAlgo(),
1041
- * staticFee: (1000).microAlgo(),
1042
- * // Max fee doesn't make sense with extraFee AND staticFee
1043
- * // already specified, but here for completeness
1044
- * maxFee: (3000).microAlgo(),
1045
- * })
1046
- * ```
1047
- */
1048
- addOfflineKeyRegistration(params) {
1049
- this.push({
1050
- data: params,
1051
- type: "keyReg"
1052
- });
1053
- return this;
1054
- }
1055
- /**
1056
- * Get the number of transactions currently added to this composer.
1057
- * @returns The number of transactions currently added to this composer
1058
- */
1059
- count() {
1060
- return this.txns.length;
1061
- }
1062
- /**
1063
- * Build the transaction composer.
1064
- *
1065
- * This method performs resource population and inner transaction fee coverage if these options are set in the composer.
1066
- *
1067
- * Once this method is called, no further transactions will be able to be added.
1068
- * You can safely call this method multiple times to get the same result.
1069
- * @returns The built transaction composer, the transactions and any corresponding method calls
1070
- * @example
1071
- * ```typescript
1072
- * const { transactions, methodCalls } = await composer.build()
1073
- * ```
1074
- */
1075
- async build() {
1076
- if (!this.transactionsWithSigners) {
1077
- const suggestedParams = await this.getSuggestedParams();
1078
- const builtTransactions = await this._buildTransactions(suggestedParams);
1079
- this.rawBuildTransactions = builtTransactions.transactions;
1080
- const groupAnalysis = (this.composerConfig.coverAppCallInnerTransactionFees || this.composerConfig.populateAppCallResources) && builtTransactions.transactions.some((txn) => txn.type === TransactionType.AppCall) ? await this.analyzeGroupRequirements(builtTransactions.transactions, suggestedParams, this.composerConfig) : void 0;
1081
- this.populateTransactionAndGroupResources(builtTransactions.transactions, groupAnalysis);
1082
- this.transactionsWithSigners = builtTransactions.transactions.map((txn, index) => {
1083
- return {
1084
- txn,
1085
- signer: builtTransactions.signers.get(index) ?? this.getSigner(txn.sender)
1086
- };
1087
- });
1088
- }
1089
- const methodCalls = /* @__PURE__ */ new Map();
1090
- this.txns.forEach((txn, index) => {
1091
- if (txn.type === "methodCall") methodCalls.set(index, txn.data.method);
1092
- });
1093
- return {
1094
- transactions: this.transactionsWithSigners,
1095
- methodCalls
1096
- };
1097
- }
1098
- async _buildTransactions(suggestedParams) {
1099
- const defaultValidityWindow = !this.defaultValidityWindowIsExplicit && genesisIdIsLocalNet(suggestedParams.genesisId ?? "unknown") ? 1000n : this.defaultValidityWindow;
1100
- const signers = /* @__PURE__ */ new Map();
1101
- const transactions = new Array();
1102
- let transactionIndex = 0;
1103
- for (const ctxn of this.txns) if (ctxn.type === "txn") {
1104
- transactions.push(ctxn.data.txn);
1105
- if (ctxn.data.signer) signers.set(transactionIndex, ctxn.data.signer);
1106
- transactionIndex++;
1107
- } else if (ctxn.type === "asyncTxn") {
1108
- transactions.push(await ctxn.data.txn);
1109
- if (ctxn.data.signer) signers.set(transactionIndex, ctxn.data.signer);
1110
- transactionIndex++;
1111
- } else {
1112
- let transaction;
1113
- switch (ctxn.type) {
1114
- case "pay":
1115
- transaction = buildPayment(ctxn.data, suggestedParams, defaultValidityWindow);
1116
- break;
1117
- case "assetCreate":
1118
- transaction = buildAssetCreate(ctxn.data, suggestedParams, defaultValidityWindow);
1119
- break;
1120
- case "assetConfig":
1121
- transaction = buildAssetConfig(ctxn.data, suggestedParams, defaultValidityWindow);
1122
- break;
1123
- case "assetFreeze":
1124
- transaction = buildAssetFreeze(ctxn.data, suggestedParams, defaultValidityWindow);
1125
- break;
1126
- case "assetDestroy":
1127
- transaction = buildAssetDestroy(ctxn.data, suggestedParams, defaultValidityWindow);
1128
- break;
1129
- case "assetTransfer":
1130
- transaction = buildAssetTransfer(ctxn.data, suggestedParams, defaultValidityWindow);
1131
- break;
1132
- case "assetOptIn":
1133
- transaction = buildAssetOptIn(ctxn.data, suggestedParams, defaultValidityWindow);
1134
- break;
1135
- case "assetOptOut":
1136
- transaction = buildAssetOptOut(ctxn.data, suggestedParams, defaultValidityWindow);
1137
- break;
1138
- case "appCall":
1139
- if (!("appId" in ctxn.data)) transaction = await buildAppCreate(ctxn.data, this.appManager, suggestedParams, defaultValidityWindow);
1140
- else if ("approvalProgram" in ctxn.data && "clearStateProgram" in ctxn.data) transaction = await buildAppUpdate(ctxn.data, this.appManager, suggestedParams, defaultValidityWindow);
1141
- else transaction = buildAppCall(ctxn.data, suggestedParams, defaultValidityWindow);
1142
- break;
1143
- case "keyReg":
1144
- transaction = buildKeyReg(ctxn.data, suggestedParams, defaultValidityWindow);
1145
- break;
1146
- case "methodCall":
1147
- if (!("appId" in ctxn.data)) transaction = await buildAppCreateMethodCall(ctxn.data, this.appManager, suggestedParams, defaultValidityWindow);
1148
- else if ("approvalProgram" in ctxn.data && "clearStateProgram" in ctxn.data) transaction = await buildAppUpdateMethodCall(ctxn.data, this.appManager, suggestedParams, defaultValidityWindow);
1149
- else transaction = await buildAppCallMethodCall(ctxn.data, suggestedParams, defaultValidityWindow);
1150
- break;
1151
- default: throw new Error(`Unsupported transaction type: ${ctxn.type}`);
1152
- }
1153
- if (transaction.fee === void 0) transaction = assignFee(transaction, {
1154
- feePerByte: suggestedParams.fee,
1155
- minFee: suggestedParams.minFee,
1156
- extraFee: ctxn.data.extraFee?.microAlgos,
1157
- maxFee: ctxn.data.maxFee?.microAlgos
1158
- });
1159
- transactions.push(transaction);
1160
- if (ctxn.data.signer) {
1161
- const signer = "signer" in ctxn.data.signer ? ctxn.data.signer.signer : ctxn.data.signer;
1162
- signers.set(transactionIndex, signer);
1163
- }
1164
- transactionIndex++;
1165
- }
1166
- if (transactions.length > MAX_TRANSACTION_GROUP_SIZE) throw new Error(`Transaction group size ${transactions.length} exceeds the maximum limit of ${MAX_TRANSACTION_GROUP_SIZE}`);
1167
- const methodCalls = /* @__PURE__ */ new Map();
1168
- this.txns.forEach((txn, index) => {
1169
- if (txn.type === "methodCall") methodCalls.set(index, txn.data.method);
1170
- });
1171
- return {
1172
- transactions,
1173
- methodCalls,
1174
- signers
1175
- };
1176
- }
1177
- /**
1178
- * Builds all transactions in the composer and returns them along with method calls and signers.
1179
- *
1180
- * Note: This method only builds the transactions as-is without resource population or automatic grouping.
1181
- * Use this when you need the raw transactions.
1182
- * @returns An object containing the array of built transactions, method calls, and signers
1183
- * @example
1184
- * ```typescript
1185
- * const { transactions, methodCalls, signers } = await composer.buildTransactions()
1186
- * ```
1187
- */
1188
- async buildTransactions() {
1189
- const suggestedParams = await this.getSuggestedParams();
1190
- const buildResult = await this._buildTransactions(suggestedParams);
1191
- return {
1192
- ...buildResult,
1193
- transactions: buildResult.transactions
1194
- };
1195
- }
1196
- populateTransactionAndGroupResources(transactions, groupAnalysis) {
1197
- if (groupAnalysis) {
1198
- let surplusGroupFees = 0n;
1199
- const transactionAnalysis = [];
1200
- groupAnalysis.transactions.forEach((txnAnalysis, groupIndex) => {
1201
- if (txnAnalysis.requiredFeeDelta && FeeDelta.isSurplus(txnAnalysis.requiredFeeDelta)) surplusGroupFees += FeeDelta.amount(txnAnalysis.requiredFeeDelta);
1202
- const ctxn = this.txns[groupIndex];
1203
- const txn = transactions[groupIndex];
1204
- const logicalMaxFee = getLogicalMaxFee(ctxn);
1205
- const isImmutableFee = logicalMaxFee !== void 0 && logicalMaxFee === (txn.fee || 0n);
1206
- let priority = FeePriority.Covered;
1207
- if (txnAnalysis.requiredFeeDelta && FeeDelta.isDeficit(txnAnalysis.requiredFeeDelta)) {
1208
- const deficitAmount = FeeDelta.amount(txnAnalysis.requiredFeeDelta);
1209
- if (isImmutableFee || txn.type !== TransactionType.AppCall) priority = FeePriority.ImmutableDeficit(deficitAmount);
1210
- else priority = FeePriority.ModifiableDeficit(deficitAmount);
1211
- }
1212
- transactionAnalysis.push({
1213
- groupIndex,
1214
- requiredFeeDelta: txnAnalysis.requiredFeeDelta,
1215
- priority,
1216
- unnamedResourcesAccessed: txnAnalysis.unnamedResourcesAccessed
1217
- });
1218
- });
1219
- transactionAnalysis.sort((a, b) => b.priority.compare(a.priority));
1220
- const indexesWithAccessReferences = [];
1221
- for (const { groupIndex, requiredFeeDelta, unnamedResourcesAccessed } of transactionAnalysis) {
1222
- if (requiredFeeDelta && FeeDelta.isDeficit(requiredFeeDelta)) {
1223
- const deficitAmount = FeeDelta.amount(requiredFeeDelta);
1224
- let additionalFeeDelta;
1225
- if (surplusGroupFees === 0n) additionalFeeDelta = requiredFeeDelta;
1226
- else if (surplusGroupFees >= deficitAmount) surplusGroupFees -= deficitAmount;
1227
- else {
1228
- additionalFeeDelta = FeeDelta.fromBigInt(deficitAmount - surplusGroupFees);
1229
- surplusGroupFees = 0n;
1230
- }
1231
- if (additionalFeeDelta && FeeDelta.isDeficit(additionalFeeDelta)) {
1232
- const additionalDeficitAmount = FeeDelta.amount(additionalFeeDelta);
1233
- if (transactions[groupIndex].type === TransactionType.AppCall) {
1234
- const transactionFee = (transactions[groupIndex].fee || 0n) + additionalDeficitAmount;
1235
- const logicalMaxFee = getLogicalMaxFee(this.txns[groupIndex]);
1236
- if (!logicalMaxFee || transactionFee > logicalMaxFee) throw new Error(`Calculated transaction fee ${transactionFee} µALGO is greater than max of ${logicalMaxFee ?? 0n} for transaction ${groupIndex}`);
1237
- transactions[groupIndex].fee = transactionFee;
1238
- } else throw new Error(`An additional fee of ${additionalDeficitAmount} µALGO is required for non app call transaction ${groupIndex}`);
1239
- }
1240
- }
1241
- if (unnamedResourcesAccessed && transactions[groupIndex].type === TransactionType.AppCall) if (!(transactions[groupIndex].appCall?.accessReferences && transactions[groupIndex].appCall?.accessReferences?.length)) populateTransactionResources(transactions[groupIndex], unnamedResourcesAccessed, groupIndex);
1242
- else indexesWithAccessReferences.push(groupIndex);
1243
- }
1244
- if (indexesWithAccessReferences.length > 0) Config.logger.warn(`Resource population will be skipped for transaction indexes ${indexesWithAccessReferences.join(", ")} as they use access references.`);
1245
- if (groupAnalysis.unnamedResourcesAccessed) populateGroupResources(transactions, groupAnalysis.unnamedResourcesAccessed);
1246
- }
1247
- if (transactions.length > 1) {
1248
- const groupedTransactions = groupTransactions(transactions);
1249
- transactions.forEach((t) => t.group = groupedTransactions[0].group);
1250
- return transactions;
1251
- } else return transactions;
1252
- }
1253
- async analyzeGroupRequirements(transactions, suggestedParams, analysisParams) {
1254
- const appCallIndexesWithoutMaxFees = [];
1255
- let transactionsToSimulate = transactions.map((txn, groupIndex) => {
1256
- const ctxn = this.txns[groupIndex];
1257
- const params = { ...txn };
1258
- delete params.group;
1259
- if (analysisParams.coverAppCallInnerTransactionFees && txn.type === TransactionType.AppCall) {
1260
- const logicalMaxFee = getLogicalMaxFee(ctxn);
1261
- if (logicalMaxFee !== void 0) params.fee = logicalMaxFee;
1262
- else appCallIndexesWithoutMaxFees.push(groupIndex);
1263
- }
1264
- return new Transaction(params);
1265
- });
1266
- if (transactionsToSimulate.length > 1) transactionsToSimulate = groupTransactions(transactionsToSimulate);
1267
- if (analysisParams.coverAppCallInnerTransactionFees && appCallIndexesWithoutMaxFees.length > 0) throw new Error(`Please provide a maxFee for each app call transaction when coverAppCallInnerTransactionFees is enabled. Required for transaction ${appCallIndexesWithoutMaxFees.join(", ")}`);
1268
- const simulateRequest = {
1269
- txnGroups: [{ txns: transactionsToSimulate.map((txn) => ({
1270
- txn,
1271
- sig: EMPTY_SIGNATURE
1272
- })) }],
1273
- allowUnnamedResources: true,
1274
- allowEmptySignatures: true,
1275
- fixSigners: true,
1276
- allowMoreLogging: true,
1277
- execTraceConfig: {
1278
- enable: true,
1279
- scratchChange: true,
1280
- stackChange: true,
1281
- stateChange: true
1282
- }
1283
- };
1284
- const groupResponse = (await this.algod.simulateTransactions(simulateRequest)).txnGroups[0];
1285
- if (groupResponse.failureMessage) {
1286
- if (analysisParams.coverAppCallInnerTransactionFees && groupResponse.failureMessage.includes("fee too small")) throw new Error("Fees were too small to resolve execution info via simulate. You may need to increase an app call transaction maxFee.");
1287
- throw new Error(`Error resolving execution info via simulate in transaction ${groupResponse.failedAt?.join(", ")}: ${groupResponse.failureMessage}`);
1288
- }
1289
- const txnAnalysisResults = groupResponse.txnResults.map((simulateTxnResult, groupIndex) => {
1290
- const btxn = transactions[groupIndex];
1291
- let requiredFeeDelta;
1292
- if (analysisParams.coverAppCallInnerTransactionFees) {
1293
- const minTxnFee = calculateFee(btxn, {
1294
- feePerByte: suggestedParams.fee,
1295
- minFee: suggestedParams.minFee
1296
- });
1297
- const txnFeeDelta = FeeDelta.fromBigInt(minTxnFee - (btxn.fee ?? 0n));
1298
- if (btxn.type === TransactionType.AppCall) {
1299
- const innerTxnsFeeDelta = calculateInnerFeeDelta(simulateTxnResult.txnResult.innerTxns, suggestedParams.minFee);
1300
- requiredFeeDelta = FeeDelta.fromBigInt((innerTxnsFeeDelta ? FeeDelta.toBigInt(innerTxnsFeeDelta) : 0n) + (txnFeeDelta ? FeeDelta.toBigInt(txnFeeDelta) : 0n));
1301
- } else requiredFeeDelta = txnFeeDelta;
1302
- }
1303
- return {
1304
- requiredFeeDelta,
1305
- unnamedResourcesAccessed: analysisParams.populateAppCallResources ? simulateTxnResult.unnamedResourcesAccessed : void 0
1306
- };
1307
- });
1308
- const sortedResources = groupResponse.unnamedResourcesAccessed;
1309
- const compare = (a, b) => a < b ? -1 : a > b ? 1 : 0;
1310
- if (sortedResources) {
1311
- sortedResources.accounts?.sort((a, b) => compare(a.toString(), b.toString()));
1312
- sortedResources.assets?.sort(compare);
1313
- sortedResources.apps?.sort(compare);
1314
- sortedResources.boxes?.sort((a, b) => {
1315
- return compare(`${a.app}-${a.name}`, `${b.app}-${b.name}`);
1316
- });
1317
- sortedResources.appLocals?.sort((a, b) => {
1318
- return compare(`${a.app}-${a.account}`, `${b.app}-${b.account}`);
1319
- });
1320
- sortedResources.assetHoldings?.sort((a, b) => {
1321
- return compare(`${a.asset}-${a.account}`, `${b.asset}-${b.account}`);
1322
- });
1323
- }
1324
- return {
1325
- transactions: txnAnalysisResults,
1326
- unnamedResourcesAccessed: analysisParams.populateAppCallResources ? sortedResources : void 0
1327
- };
1328
- }
1329
- /**
1330
- * Rebuild the group, discarding any previously built transactions.
1331
- * This will potentially cause new signers and suggested params to be used if the callbacks return a new value compared to the first build.
1332
- * @returns The newly built transaction composer and the transactions
1333
- * @example
1334
- * ```typescript
1335
- * const { atc, transactions, methodCalls } = await composer.rebuild()
1336
- * ```
1337
- */
1338
- async rebuild() {
1339
- this.reset();
1340
- return await this.build();
1341
- }
1342
- reset() {
1343
- this.signedTransactions = void 0;
1344
- this.transactionsWithSigners = void 0;
1345
- }
1346
- /**
1347
- * Compose the transaction group and send it to the network.
1348
- * @param params The parameters to control execution with
1349
- * @returns The execution result
1350
- * @example
1351
- * ```typescript
1352
- * const result = await composer.send()
1353
- * ```
1354
- */
1355
- async send(params) {
1356
- if (this.composerConfig.coverAppCallInnerTransactionFees !== (params?.coverAppCallInnerTransactionFees ?? false) || this.composerConfig.populateAppCallResources !== (params?.populateAppCallResources ?? true)) {
1357
- this.composerConfig = {
1358
- coverAppCallInnerTransactionFees: params?.coverAppCallInnerTransactionFees ?? false,
1359
- populateAppCallResources: params?.populateAppCallResources ?? true
1360
- };
1361
- this.reset();
1362
- }
1363
- try {
1364
- await this.gatherSignatures();
1365
- if (!this.transactionsWithSigners || this.transactionsWithSigners.length === 0 || !this.signedTransactions || this.signedTransactions.length === 0) throw new Error("No transactions available");
1366
- const transactionsToSend = this.transactionsWithSigners.map((stxn) => stxn.txn);
1367
- const transactionIds = transactionsToSend.map((txn) => txn.txId());
1368
- if (transactionsToSend.length > 1) {
1369
- const groupId = transactionsToSend[0].group ? Buffer.from(transactionsToSend[0].group).toString("base64") : "";
1370
- Config.getLogger(params?.suppressLog).verbose(`Sending group of ${transactionsToSend.length} transactions (${groupId})`, { transactionsToSend });
1371
- Config.getLogger(params?.suppressLog).debug(`Transaction IDs (${groupId})`, transactionIds);
1372
- }
1373
- if (Config.debug && Config.traceAll) await this.simulate({
1374
- allowEmptySignatures: true,
1375
- fixSigners: true,
1376
- allowMoreLogging: true,
1377
- execTraceConfig: {
1378
- enable: true,
1379
- scratchChange: true,
1380
- stackChange: true,
1381
- stateChange: true
1382
- },
1383
- resultOnFailure: true
1384
- });
1385
- const group = this.signedTransactions[0].txn.group;
1386
- let waitRounds = params?.maxRoundsToWaitForConfirmation;
1387
- if (waitRounds === void 0) {
1388
- const firstRound = (await this.getSuggestedParams()).firstValid;
1389
- const lastRound = this.signedTransactions.reduce((max, txn) => txn.txn.lastValid > max ? txn.txn.lastValid : max, 0n);
1390
- waitRounds = Number(lastRound - firstRound) + 1;
1391
- }
1392
- const encodedTxns = encodeSignedTransactions(this.signedTransactions);
1393
- await this.algod.sendRawTransaction(encodedTxns);
1394
- if (transactionsToSend.length > 1 && group) Config.getLogger(params?.suppressLog).verbose(`Group transaction (${Buffer.from(group).toString("base64")}) sent with ${transactionsToSend.length} transactions`);
1395
- else Config.getLogger(params?.suppressLog).verbose(`Sent transaction ID ${transactionsToSend[0].txId()} ${transactionsToSend[0].type} from ${transactionsToSend[0].sender}`);
1396
- let confirmations = new Array();
1397
- if (params?.maxRoundsToWaitForConfirmation !== 0) confirmations = await Promise.all(transactionIds.map(async (id) => await waitForConfirmation(id, waitRounds, this.algod)));
1398
- const abiReturns = this.parseAbiReturnValues(confirmations);
1399
- return {
1400
- groupId: group ? Buffer.from(group).toString("base64") : void 0,
1401
- transactions: transactionsToSend,
1402
- txIds: transactionIds,
1403
- returns: abiReturns,
1404
- confirmations
1405
- };
1406
- } catch (originalError) {
1407
- const errorMessage = originalError.body?.message ?? originalError.message ?? "Received error executing Transaction Composer";
1408
- const err = new Error(errorMessage);
1409
- err.cause = originalError;
1410
- if (typeof originalError === "object") err.name = originalError.name;
1411
- let sentTransactions;
1412
- if (this.transactionsWithSigners) sentTransactions = this.transactionsWithSigners.map((t) => t.txn);
1413
- else if (this.rawBuildTransactions) sentTransactions = this.rawBuildTransactions.length > 1 ? groupTransactions(this.rawBuildTransactions) : this.rawBuildTransactions;
1414
- if (Config.debug && typeof originalError === "object" && sentTransactions) {
1415
- err.traces = [];
1416
- Config.getLogger(params?.suppressLog).error("Received error executing Transaction Composer and debug flag enabled; attempting simulation to get more information", err);
1417
- const transactionsWithEmptySigners = sentTransactions.map((txn) => ({
1418
- txn,
1419
- signer: makeEmptyTransactionSigner()
1420
- }));
1421
- const signedTransactions = await this.signTransactions(transactionsWithEmptySigners);
1422
- const simulateResponse = await this.algod.simulateTransactions({
1423
- txnGroups: [{ txns: signedTransactions }],
1424
- allowEmptySignatures: true,
1425
- fixSigners: true,
1426
- allowMoreLogging: true,
1427
- execTraceConfig: {
1428
- enable: true,
1429
- scratchChange: true,
1430
- stackChange: true,
1431
- stateChange: true
1432
- }
1433
- });
1434
- if (Config.debug && !Config.traceAll) await Config.events.emitAsync(EventType.TxnGroupSimulated, { simulateResponse });
1435
- if (simulateResponse && simulateResponse.txnGroups[0].failedAt) for (const txn of simulateResponse.txnGroups[0].txnResults) err.traces.push({
1436
- trace: txn.execTrace,
1437
- appBudget: txn.appBudgetConsumed,
1438
- logicSigBudget: txn.logicSigBudgetConsumed,
1439
- logs: txn.txnResult.logs,
1440
- message: simulateResponse.txnGroups[0].failureMessage
1441
- });
1442
- } else Config.getLogger(params?.suppressLog).error("Received error executing Transaction Composer, for more information enable the debug flag", err);
1443
- err.sentTransactions = sentTransactions ?? [];
1444
- throw await this.transformError(err);
1445
- }
1446
- }
1447
- async simulate(options) {
1448
- const { skipSignatures = false, resultOnFailure = false,...rawOptions } = options ?? {};
1449
- if (skipSignatures) {
1450
- rawOptions.allowEmptySignatures = true;
1451
- rawOptions.fixSigners = true;
1452
- }
1453
- let transactionsWithSigner;
1454
- if (!this.transactionsWithSigners) {
1455
- const builtTransactions = await this.buildTransactions();
1456
- transactionsWithSigner = (builtTransactions.transactions.length > 0 ? groupTransactions(builtTransactions.transactions) : builtTransactions.transactions).map((txn, index) => ({
1457
- txn,
1458
- signer: skipSignatures ? makeEmptyTransactionSigner() : builtTransactions.signers.get(index) ?? makeEmptyTransactionSigner()
1459
- }));
1460
- } else transactionsWithSigner = this.transactionsWithSigners.map((e) => ({
1461
- txn: e.txn,
1462
- signer: skipSignatures ? makeEmptyTransactionSigner() : e.signer
1463
- }));
1464
- const transactions = transactionsWithSigner.map((e) => e.txn);
1465
- const simulateRequest = {
1466
- txnGroups: [{ txns: await this.signTransactions(transactionsWithSigner) }],
1467
- ...rawOptions,
1468
- ...Config.debug ? {
1469
- allowEmptySignatures: true,
1470
- fixSigners: true,
1471
- allowMoreLogging: true,
1472
- execTraceConfig: {
1473
- enable: true,
1474
- scratchChange: true,
1475
- stackChange: true,
1476
- stateChange: true
1477
- }
1478
- } : void 0
1479
- };
1480
- const simulateResponse = await this.algod.simulateTransactions(simulateRequest);
1481
- const simulateResult = simulateResponse.txnGroups[0];
1482
- if (simulateResult?.failureMessage && !resultOnFailure) {
1483
- const errorMessage = `Transaction failed at transaction(s) ${simulateResult.failedAt?.join(", ") || "unknown"} in the group. ${simulateResult.failureMessage}`;
1484
- const error = new Error(errorMessage);
1485
- if (Config.debug) await Config.events.emitAsync(EventType.TxnGroupSimulated, { simulateTransaction: simulateResponse });
1486
- throw await this.transformError(error);
1487
- }
1488
- if (Config.debug && Config.traceAll) await Config.events.emitAsync(EventType.TxnGroupSimulated, { simulateTransaction: simulateResponse });
1489
- const abiReturns = this.parseAbiReturnValues(simulateResult.txnResults.map((t) => t.txnResult));
1490
- return {
1491
- confirmations: simulateResult.txnResults.map((t) => t.txnResult),
1492
- transactions,
1493
- txIds: transactions.map((t) => t.txId()),
1494
- groupId: Buffer.from(transactions[0].group ?? new Uint8Array()).toString("base64"),
1495
- simulateResponse,
1496
- returns: abiReturns
1497
- };
1498
- }
1499
- /**
1500
- * Create an encoded transaction note that follows the ARC-2 spec.
1501
- *
1502
- * https://github.com/algorandfoundation/ARCs/blob/main/ARCs/arc-0002.md
1503
- * @param note The ARC-2 transaction note data
1504
- * @returns The binary encoded transaction note
1505
- */
1506
- static arc2Note(note) {
1507
- const arc2Payload = `${note.dAppName}:${note.format}${typeof note.data === "string" ? note.data : asJson(note.data)}`;
1508
- return new TextEncoder().encode(arc2Payload);
1509
- }
1510
- async gatherSignatures() {
1511
- if (this.signedTransactions) return this.signedTransactions;
1512
- await this.build();
1513
- if (!this.transactionsWithSigners || this.transactionsWithSigners.length === 0) throw new Error("No transactions available to sign");
1514
- this.signedTransactions = await this.signTransactions(this.transactionsWithSigners);
1515
- return this.signedTransactions;
1516
- }
1517
- async signTransactions(transactionsWithSigners) {
1518
- if (transactionsWithSigners.length === 0) throw new Error("No transactions available to sign");
1519
- const transactions = transactionsWithSigners.map((txnWithSigner) => txnWithSigner.txn);
1520
- const signerGroups = /* @__PURE__ */ new Map();
1521
- transactionsWithSigners.forEach(({ signer }, index) => {
1522
- const indexes = signerGroups.get(signer) ?? [];
1523
- indexes.push(index);
1524
- signerGroups.set(signer, indexes);
1525
- });
1526
- const signerEntries = Array.from(signerGroups);
1527
- const signedGroups = await Promise.all(signerEntries.map(([signer, indexes]) => signer(transactions, indexes)));
1528
- const signedTransactions = new Array(transactionsWithSigners.length);
1529
- signerEntries.forEach(([, indexes], signerIndex) => {
1530
- const stxs = signedGroups[signerIndex];
1531
- indexes.forEach((txIndex, stxIndex) => {
1532
- signedTransactions[txIndex] = decodeSignedTransaction(stxs[stxIndex]);
1533
- });
1534
- });
1535
- const unsignedIndexes = signedTransactions.map((stxn, index) => stxn === void 0 ? index : null).filter((index) => index !== null);
1536
- if (unsignedIndexes.length > 0) throw new Error(`Transactions at indexes [${unsignedIndexes.join(", ")}] were not signed`);
1537
- return signedTransactions;
1538
- }
1539
- parseAbiReturnValues(confirmations) {
1540
- const abiReturns = new Array();
1541
- for (let i = 0; i < confirmations.length; i++) {
1542
- const confirmation = confirmations[i];
1543
- const txn = this.txns[i];
1544
- if (txn?.type !== "methodCall") continue;
1545
- const method = txn.data.method;
1546
- if (method.returns.type !== "void") {
1547
- const abiReturn = AppManager.getABIReturn(confirmation, method);
1548
- if (abiReturn !== void 0) abiReturns.push(abiReturn);
1549
- }
1550
- }
1551
- return abiReturns;
1552
- }
1553
- setMaxFees(maxFees) {
1554
- maxFees.forEach((_, index) => {
1555
- if (index > this.txns.length - 1) throw new Error(`Index ${index} is out of range. The composer only contains ${this.txns.length} transactions`);
1556
- });
1557
- maxFees.forEach((maxFee, index) => {
1558
- this.txns[index].data.maxFee = new AlgoAmount({ microAlgos: maxFee.microAlgos });
1559
- });
1560
- }
1561
- };
1562
- /** Get the logical maximum fee based on staticFee and maxFee */
1563
- function getLogicalMaxFee(ctxn) {
1564
- if (ctxn.type === "txn" || ctxn.type === "asyncTxn") return;
1565
- const maxFee = ctxn.data.maxFee;
1566
- const staticFee = ctxn.data.staticFee;
1567
- if (maxFee !== void 0 && (staticFee === void 0 || maxFee.microAlgos > staticFee.microAlgos)) return maxFee.microAlgos;
1568
- return staticFee?.microAlgos;
1569
- }
4
+ /** @deprecated Import from `@algorandfoundation/algokit-utils/composer` instead */
5
+ const TransactionComposer = TransactionComposer$1;
1570
6
 
1571
7
  //#endregion
1572
8
  export { TransactionComposer };