@algorandfoundation/algokit-utils 10.0.0-beta.2 → 10.0.0-beta.4

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 (720) hide show
  1. package/account-manager.d.ts +72 -1
  2. package/account-manager.js +63 -1
  3. package/account-manager.js.map +1 -1
  4. package/account-manager.mjs +63 -1
  5. package/account-manager.mjs.map +1 -1
  6. package/algo25/index.d.ts +1 -1
  7. package/algo25/index.js +1 -1
  8. package/algo25/index.mjs +1 -1
  9. package/algorand-client-transaction-creator.js.map +1 -1
  10. package/algorand-client-transaction-creator.mjs.map +1 -1
  11. package/algorand-client-transaction-sender.js +0 -1
  12. package/algorand-client-transaction-sender.js.map +1 -1
  13. package/algorand-client-transaction-sender.mjs.map +1 -1
  14. package/algorand-client.js +5 -1
  15. package/algorand-client.js.map +1 -1
  16. package/algorand-client.mjs +5 -1
  17. package/algorand-client.mjs.map +1 -1
  18. package/amount.js.map +1 -1
  19. package/amount.mjs.map +1 -1
  20. package/app-client.js +174 -17
  21. package/app-client.js.map +1 -1
  22. package/app-client.mjs +174 -16
  23. package/app-client.mjs.map +1 -1
  24. package/app-deployer.js +8 -8
  25. package/app-deployer.js.map +1 -1
  26. package/app-deployer.mjs +9 -9
  27. package/app-deployer.mjs.map +1 -1
  28. package/app-factory.d.ts +2 -2
  29. package/app-factory.js +49 -9
  30. package/app-factory.js.map +1 -1
  31. package/app-factory.mjs +49 -9
  32. package/app-factory.mjs.map +1 -1
  33. package/app-manager.js.map +1 -1
  34. package/app-manager.mjs.map +1 -1
  35. package/app-spec.js.map +1 -1
  36. package/app-spec.mjs.map +1 -1
  37. package/app.js.map +1 -1
  38. package/app.mjs.map +1 -1
  39. package/asset-manager.js.map +1 -1
  40. package/asset-manager.mjs.map +1 -1
  41. package/async-event-emitter.js.map +1 -1
  42. package/async-event-emitter.mjs.map +1 -1
  43. package/client-manager.js.map +1 -1
  44. package/client-manager.mjs.map +1 -1
  45. package/composer.js +17 -18
  46. package/composer.js.map +1 -1
  47. package/composer.mjs +17 -17
  48. package/composer.mjs.map +1 -1
  49. package/config.js.map +1 -1
  50. package/config.mjs.map +1 -1
  51. package/crypto/index.d.ts +3 -3
  52. package/crypto/index.js +5 -2
  53. package/crypto/index.mjs +3 -3
  54. package/dispenser-client.js +4 -8
  55. package/dispenser-client.js.map +1 -1
  56. package/dispenser-client.mjs +4 -8
  57. package/dispenser-client.mjs.map +1 -1
  58. package/indexer-client/indexer-lookup.js.map +1 -1
  59. package/indexer-client/indexer-lookup.mjs.map +1 -1
  60. package/indexer.js.map +1 -1
  61. package/indexer.mjs.map +1 -1
  62. package/kmd-account-manager.js.map +1 -1
  63. package/kmd-account-manager.mjs.map +1 -1
  64. package/lifecycle-events.js.map +1 -1
  65. package/lifecycle-events.mjs.map +1 -1
  66. package/logging.js.map +1 -1
  67. package/logging.mjs.map +1 -1
  68. package/logic-error.js.map +1 -1
  69. package/logic-error.mjs.map +1 -1
  70. package/network-client.js.map +1 -1
  71. package/network-client.mjs.map +1 -1
  72. package/network-manager.js.map +1 -1
  73. package/network-manager.mjs.map +1 -1
  74. package/package.json +3 -2
  75. package/packages/abi/src/abi-method.js +6 -6
  76. package/packages/abi/src/abi-method.js.map +1 -1
  77. package/packages/abi/src/abi-method.mjs +6 -5
  78. package/packages/abi/src/abi-method.mjs.map +1 -1
  79. package/packages/abi/src/abi-type.js +9 -0
  80. package/packages/abi/src/abi-type.js.map +1 -1
  81. package/packages/abi/src/abi-type.mjs +9 -0
  82. package/packages/abi/src/abi-type.mjs.map +1 -1
  83. package/packages/abi/src/arc56-contract.js.map +1 -1
  84. package/packages/abi/src/arc56-contract.mjs.map +1 -1
  85. package/packages/abi/src/bigint.js.map +1 -1
  86. package/packages/abi/src/bigint.mjs.map +1 -1
  87. package/packages/abi/src/utils.js.map +1 -1
  88. package/packages/abi/src/utils.mjs.map +1 -1
  89. package/packages/algod_client/src/apis/api-service.js +3 -1
  90. package/packages/algod_client/src/apis/api-service.js.map +1 -1
  91. package/packages/algod_client/src/apis/api-service.mjs +3 -1
  92. package/packages/algod_client/src/apis/api-service.mjs.map +1 -1
  93. package/packages/algod_client/src/client.js.map +1 -1
  94. package/packages/algod_client/src/client.mjs.map +1 -1
  95. package/packages/algod_client/src/core/api-error.js.map +1 -1
  96. package/packages/algod_client/src/core/api-error.mjs.map +1 -1
  97. package/packages/algod_client/src/core/base-http-request.js +1 -0
  98. package/packages/algod_client/src/core/base-http-request.js.map +1 -1
  99. package/packages/algod_client/src/core/base-http-request.mjs +1 -0
  100. package/packages/algod_client/src/core/base-http-request.mjs.map +1 -1
  101. package/packages/algod_client/src/core/fetch-http-request.js.map +1 -1
  102. package/packages/algod_client/src/core/fetch-http-request.mjs.map +1 -1
  103. package/packages/algod_client/src/core/model-runtime.js.map +1 -1
  104. package/packages/algod_client/src/core/model-runtime.mjs.map +1 -1
  105. package/packages/algod_client/src/core/request.js.map +1 -1
  106. package/packages/algod_client/src/core/request.mjs.map +1 -1
  107. package/packages/algod_client/src/models/account-application-response.js.map +1 -1
  108. package/packages/algod_client/src/models/account-application-response.mjs.map +1 -1
  109. package/packages/algod_client/src/models/account-asset-response.js.map +1 -1
  110. package/packages/algod_client/src/models/account-asset-response.mjs.map +1 -1
  111. package/packages/algod_client/src/models/account-participation.js.map +1 -1
  112. package/packages/algod_client/src/models/account-participation.mjs.map +1 -1
  113. package/packages/algod_client/src/models/account-state-delta.js.map +1 -1
  114. package/packages/algod_client/src/models/account-state-delta.mjs.map +1 -1
  115. package/packages/algod_client/src/models/account.js.map +1 -1
  116. package/packages/algod_client/src/models/account.mjs.map +1 -1
  117. package/packages/algod_client/src/models/application-initial-states.js.map +1 -1
  118. package/packages/algod_client/src/models/application-initial-states.mjs.map +1 -1
  119. package/packages/algod_client/src/models/application-kv-storage.js.map +1 -1
  120. package/packages/algod_client/src/models/application-kv-storage.mjs.map +1 -1
  121. package/packages/algod_client/src/models/application-local-state.js.map +1 -1
  122. package/packages/algod_client/src/models/application-local-state.mjs.map +1 -1
  123. package/packages/algod_client/src/models/application-params.js.map +1 -1
  124. package/packages/algod_client/src/models/application-params.mjs.map +1 -1
  125. package/packages/algod_client/src/models/application-state-operation.js.map +1 -1
  126. package/packages/algod_client/src/models/application-state-operation.mjs.map +1 -1
  127. package/packages/algod_client/src/models/application-state-schema.js.map +1 -1
  128. package/packages/algod_client/src/models/application-state-schema.mjs.map +1 -1
  129. package/packages/algod_client/src/models/application.js.map +1 -1
  130. package/packages/algod_client/src/models/application.mjs.map +1 -1
  131. package/packages/algod_client/src/models/asset-holding.js.map +1 -1
  132. package/packages/algod_client/src/models/asset-holding.mjs.map +1 -1
  133. package/packages/algod_client/src/models/asset-params.js.map +1 -1
  134. package/packages/algod_client/src/models/asset-params.mjs.map +1 -1
  135. package/packages/algod_client/src/models/asset.js.map +1 -1
  136. package/packages/algod_client/src/models/asset.mjs.map +1 -1
  137. package/packages/algod_client/src/models/avm-key-value.js.map +1 -1
  138. package/packages/algod_client/src/models/avm-key-value.mjs.map +1 -1
  139. package/packages/algod_client/src/models/avm-value.js.map +1 -1
  140. package/packages/algod_client/src/models/avm-value.mjs.map +1 -1
  141. package/packages/algod_client/src/models/block-hash-response.js.map +1 -1
  142. package/packages/algod_client/src/models/block-hash-response.mjs.map +1 -1
  143. package/packages/algod_client/src/models/block-response.js.map +1 -1
  144. package/packages/algod_client/src/models/block-response.mjs.map +1 -1
  145. package/packages/algod_client/src/models/block-txids-response.js.map +1 -1
  146. package/packages/algod_client/src/models/block-txids-response.mjs.map +1 -1
  147. package/packages/algod_client/src/models/block.js.map +1 -1
  148. package/packages/algod_client/src/models/block.mjs.map +1 -1
  149. package/packages/algod_client/src/models/box-descriptor.js.map +1 -1
  150. package/packages/algod_client/src/models/box-descriptor.mjs.map +1 -1
  151. package/packages/algod_client/src/models/box.js.map +1 -1
  152. package/packages/algod_client/src/models/box.mjs.map +1 -1
  153. package/packages/algod_client/src/models/boxes-response.js.map +1 -1
  154. package/packages/algod_client/src/models/boxes-response.mjs.map +1 -1
  155. package/packages/algod_client/src/models/build-version.js.map +1 -1
  156. package/packages/algod_client/src/models/build-version.mjs.map +1 -1
  157. package/packages/algod_client/src/models/compile-response.js.map +1 -1
  158. package/packages/algod_client/src/models/compile-response.mjs.map +1 -1
  159. package/packages/algod_client/src/models/disassemble-response.js.map +1 -1
  160. package/packages/algod_client/src/models/disassemble-response.mjs.map +1 -1
  161. package/packages/algod_client/src/models/eval-delta-key-value.js.map +1 -1
  162. package/packages/algod_client/src/models/eval-delta-key-value.mjs.map +1 -1
  163. package/packages/algod_client/src/models/eval-delta.js.map +1 -1
  164. package/packages/algod_client/src/models/eval-delta.mjs.map +1 -1
  165. package/packages/algod_client/src/models/genesis-allocation.js.map +1 -1
  166. package/packages/algod_client/src/models/genesis-allocation.mjs.map +1 -1
  167. package/packages/algod_client/src/models/genesis.js.map +1 -1
  168. package/packages/algod_client/src/models/genesis.mjs.map +1 -1
  169. package/packages/algod_client/src/models/get-block-time-stamp-offset-response.js.map +1 -1
  170. package/packages/algod_client/src/models/get-block-time-stamp-offset-response.mjs.map +1 -1
  171. package/packages/algod_client/src/models/get-sync-round-response.js.map +1 -1
  172. package/packages/algod_client/src/models/get-sync-round-response.mjs.map +1 -1
  173. package/packages/algod_client/src/models/ledger-state-delta-for-transaction-group.js.map +1 -1
  174. package/packages/algod_client/src/models/ledger-state-delta-for-transaction-group.mjs.map +1 -1
  175. package/packages/algod_client/src/models/ledger-state-delta.js.map +1 -1
  176. package/packages/algod_client/src/models/ledger-state-delta.mjs.map +1 -1
  177. package/packages/algod_client/src/models/light-block-header-proof.js.map +1 -1
  178. package/packages/algod_client/src/models/light-block-header-proof.mjs.map +1 -1
  179. package/packages/algod_client/src/models/node-status-response.js.map +1 -1
  180. package/packages/algod_client/src/models/node-status-response.mjs.map +1 -1
  181. package/packages/algod_client/src/models/pending-transaction-response.js.map +1 -1
  182. package/packages/algod_client/src/models/pending-transaction-response.mjs.map +1 -1
  183. package/packages/algod_client/src/models/pending-transactions-response.js.map +1 -1
  184. package/packages/algod_client/src/models/pending-transactions-response.mjs.map +1 -1
  185. package/packages/algod_client/src/models/post-transactions-response.js.map +1 -1
  186. package/packages/algod_client/src/models/post-transactions-response.mjs.map +1 -1
  187. package/packages/algod_client/src/models/scratch-change.js.map +1 -1
  188. package/packages/algod_client/src/models/scratch-change.mjs.map +1 -1
  189. package/packages/algod_client/src/models/simulate-initial-states.js.map +1 -1
  190. package/packages/algod_client/src/models/simulate-initial-states.mjs.map +1 -1
  191. package/packages/algod_client/src/models/simulate-request-transaction-group.js.map +1 -1
  192. package/packages/algod_client/src/models/simulate-request-transaction-group.mjs.map +1 -1
  193. package/packages/algod_client/src/models/simulate-request.js.map +1 -1
  194. package/packages/algod_client/src/models/simulate-request.mjs.map +1 -1
  195. package/packages/algod_client/src/models/simulate-response.js.map +1 -1
  196. package/packages/algod_client/src/models/simulate-response.mjs.map +1 -1
  197. package/packages/algod_client/src/models/simulate-trace-config.js.map +1 -1
  198. package/packages/algod_client/src/models/simulate-trace-config.mjs.map +1 -1
  199. package/packages/algod_client/src/models/simulate-transaction-group-result.js.map +1 -1
  200. package/packages/algod_client/src/models/simulate-transaction-group-result.mjs.map +1 -1
  201. package/packages/algod_client/src/models/simulate-transaction-result.js.map +1 -1
  202. package/packages/algod_client/src/models/simulate-transaction-result.mjs.map +1 -1
  203. package/packages/algod_client/src/models/simulate-unnamed-resources-accessed.js.map +1 -1
  204. package/packages/algod_client/src/models/simulate-unnamed-resources-accessed.mjs.map +1 -1
  205. package/packages/algod_client/src/models/simulation-eval-overrides.js.map +1 -1
  206. package/packages/algod_client/src/models/simulation-eval-overrides.mjs.map +1 -1
  207. package/packages/algod_client/src/models/simulation-opcode-trace-unit.js.map +1 -1
  208. package/packages/algod_client/src/models/simulation-opcode-trace-unit.mjs.map +1 -1
  209. package/packages/algod_client/src/models/simulation-transaction-exec-trace.js.map +1 -1
  210. package/packages/algod_client/src/models/simulation-transaction-exec-trace.mjs.map +1 -1
  211. package/packages/algod_client/src/models/source-map.js.map +1 -1
  212. package/packages/algod_client/src/models/source-map.mjs.map +1 -1
  213. package/packages/algod_client/src/models/state-delta.js.map +1 -1
  214. package/packages/algod_client/src/models/state-delta.mjs.map +1 -1
  215. package/packages/algod_client/src/models/state-proof-message.js.map +1 -1
  216. package/packages/algod_client/src/models/state-proof-message.mjs.map +1 -1
  217. package/packages/algod_client/src/models/state-proof.js.map +1 -1
  218. package/packages/algod_client/src/models/state-proof.mjs.map +1 -1
  219. package/packages/algod_client/src/models/supply-response.js.map +1 -1
  220. package/packages/algod_client/src/models/supply-response.mjs.map +1 -1
  221. package/packages/algod_client/src/models/teal-key-value-store.js.map +1 -1
  222. package/packages/algod_client/src/models/teal-key-value-store.mjs.map +1 -1
  223. package/packages/algod_client/src/models/teal-key-value.js.map +1 -1
  224. package/packages/algod_client/src/models/teal-key-value.mjs.map +1 -1
  225. package/packages/algod_client/src/models/teal-value.js.map +1 -1
  226. package/packages/algod_client/src/models/teal-value.mjs.map +1 -1
  227. package/packages/algod_client/src/models/transaction-group-ledger-state-deltas-for-round-response.js.map +1 -1
  228. package/packages/algod_client/src/models/transaction-group-ledger-state-deltas-for-round-response.mjs.map +1 -1
  229. package/packages/algod_client/src/models/transaction-parameters-response.js.map +1 -1
  230. package/packages/algod_client/src/models/transaction-parameters-response.mjs.map +1 -1
  231. package/packages/algod_client/src/models/transaction-proof.js.map +1 -1
  232. package/packages/algod_client/src/models/transaction-proof.mjs.map +1 -1
  233. package/packages/algod_client/src/models/version.js.map +1 -1
  234. package/packages/algod_client/src/models/version.mjs.map +1 -1
  235. package/packages/common/src/address.js.map +1 -1
  236. package/packages/common/src/address.mjs.map +1 -1
  237. package/packages/common/src/array.js.map +1 -1
  238. package/packages/common/src/array.mjs.map +1 -1
  239. package/packages/common/src/codecs/codec.js.map +1 -1
  240. package/packages/common/src/codecs/codec.mjs.map +1 -1
  241. package/packages/common/src/codecs/composite/array.js +1 -0
  242. package/packages/common/src/codecs/composite/array.js.map +1 -1
  243. package/packages/common/src/codecs/composite/array.mjs +1 -0
  244. package/packages/common/src/codecs/composite/array.mjs.map +1 -1
  245. package/packages/common/src/codecs/composite/map.js +2 -0
  246. package/packages/common/src/codecs/composite/map.js.map +1 -1
  247. package/packages/common/src/codecs/composite/map.mjs +2 -0
  248. package/packages/common/src/codecs/composite/map.mjs.map +1 -1
  249. package/packages/common/src/codecs/composite/record.js +1 -1
  250. package/packages/common/src/codecs/composite/record.js.map +1 -1
  251. package/packages/common/src/codecs/composite/record.mjs +1 -0
  252. package/packages/common/src/codecs/composite/record.mjs.map +1 -1
  253. package/packages/common/src/codecs/models/array-model.js +1 -0
  254. package/packages/common/src/codecs/models/array-model.js.map +1 -1
  255. package/packages/common/src/codecs/models/array-model.mjs +1 -0
  256. package/packages/common/src/codecs/models/array-model.mjs.map +1 -1
  257. package/packages/common/src/codecs/models/object-model.js +3 -1
  258. package/packages/common/src/codecs/models/object-model.js.map +1 -1
  259. package/packages/common/src/codecs/models/object-model.mjs +3 -1
  260. package/packages/common/src/codecs/models/object-model.mjs.map +1 -1
  261. package/packages/common/src/codecs/models/primitive-model.js +1 -0
  262. package/packages/common/src/codecs/models/primitive-model.js.map +1 -1
  263. package/packages/common/src/codecs/models/primitive-model.mjs +1 -0
  264. package/packages/common/src/codecs/models/primitive-model.mjs.map +1 -1
  265. package/packages/common/src/codecs/primitives/address.js +0 -1
  266. package/packages/common/src/codecs/primitives/address.js.map +1 -1
  267. package/packages/common/src/codecs/primitives/address.mjs.map +1 -1
  268. package/packages/common/src/codecs/primitives/bigint.js.map +1 -1
  269. package/packages/common/src/codecs/primitives/bigint.mjs.map +1 -1
  270. package/packages/common/src/codecs/primitives/boolean.js.map +1 -1
  271. package/packages/common/src/codecs/primitives/boolean.mjs.map +1 -1
  272. package/packages/common/src/codecs/primitives/bytes-base64.js +0 -1
  273. package/packages/common/src/codecs/primitives/bytes-base64.js.map +1 -1
  274. package/packages/common/src/codecs/primitives/bytes-base64.mjs.map +1 -1
  275. package/packages/common/src/codecs/primitives/bytes.js +0 -1
  276. package/packages/common/src/codecs/primitives/bytes.js.map +1 -1
  277. package/packages/common/src/codecs/primitives/bytes.mjs.map +1 -1
  278. package/packages/common/src/codecs/primitives/fixed-bytes.js +1 -1
  279. package/packages/common/src/codecs/primitives/fixed-bytes.js.map +1 -1
  280. package/packages/common/src/codecs/primitives/fixed-bytes.mjs +1 -0
  281. package/packages/common/src/codecs/primitives/fixed-bytes.mjs.map +1 -1
  282. package/packages/common/src/codecs/primitives/number.js.map +1 -1
  283. package/packages/common/src/codecs/primitives/number.mjs.map +1 -1
  284. package/packages/common/src/codecs/primitives/string.js.map +1 -1
  285. package/packages/common/src/codecs/primitives/string.mjs.map +1 -1
  286. package/packages/common/src/codecs/primitives/unknown.js.map +1 -1
  287. package/packages/common/src/codecs/primitives/unknown.mjs.map +1 -1
  288. package/packages/common/src/codecs/wire.js +0 -1
  289. package/packages/common/src/codecs/wire.js.map +1 -1
  290. package/packages/common/src/codecs/wire.mjs.map +1 -1
  291. package/packages/common/src/constants.js.map +1 -1
  292. package/packages/common/src/constants.mjs.map +1 -1
  293. package/packages/common/src/encoding.js +0 -1
  294. package/packages/common/src/encoding.js.map +1 -1
  295. package/packages/common/src/encoding.mjs.map +1 -1
  296. package/packages/common/src/json.js.map +1 -1
  297. package/packages/common/src/json.mjs.map +1 -1
  298. package/packages/common/src/msgpack.js +0 -1
  299. package/packages/common/src/msgpack.js.map +1 -1
  300. package/packages/common/src/msgpack.mjs.map +1 -1
  301. package/packages/common/src/sourcemap.js.map +1 -1
  302. package/packages/common/src/sourcemap.mjs.map +1 -1
  303. package/packages/{algo25/src → crypto/src/algo25}/english.js +1 -1
  304. package/packages/crypto/src/algo25/english.js.map +1 -0
  305. package/packages/{algo25/src → crypto/src/algo25}/english.mjs +1 -1
  306. package/packages/crypto/src/algo25/english.mjs.map +1 -0
  307. package/packages/{algo25/src → crypto/src/algo25}/index.d.ts +1 -1
  308. package/packages/{algo25/src → crypto/src/algo25}/index.js +2 -2
  309. package/packages/crypto/src/algo25/index.js.map +1 -0
  310. package/packages/{algo25/src → crypto/src/algo25}/index.mjs +2 -2
  311. package/packages/crypto/src/algo25/index.mjs.map +1 -0
  312. package/packages/crypto/src/ed25519.d.ts +13 -3
  313. package/packages/crypto/src/ed25519.js.map +1 -1
  314. package/packages/crypto/src/ed25519.mjs.map +1 -1
  315. package/packages/crypto/src/hash.js +0 -1
  316. package/packages/crypto/src/hash.js.map +1 -1
  317. package/packages/crypto/src/hash.mjs.map +1 -1
  318. package/packages/crypto/src/hd.d.ts +17 -4
  319. package/packages/crypto/src/hd.js +13 -1
  320. package/packages/crypto/src/hd.js.map +1 -1
  321. package/packages/crypto/src/hd.mjs +11 -1
  322. package/packages/crypto/src/hd.mjs.map +1 -1
  323. package/packages/crypto/src/index.d.ts +12 -6
  324. package/packages/crypto/src/index.js +27 -18
  325. package/packages/crypto/src/index.js.map +1 -1
  326. package/packages/crypto/src/index.mjs +27 -18
  327. package/packages/crypto/src/index.mjs.map +1 -1
  328. package/packages/indexer_client/src/apis/api-service.js +1 -0
  329. package/packages/indexer_client/src/apis/api-service.js.map +1 -1
  330. package/packages/indexer_client/src/apis/api-service.mjs +1 -0
  331. package/packages/indexer_client/src/apis/api-service.mjs.map +1 -1
  332. package/packages/indexer_client/src/client.js.map +1 -1
  333. package/packages/indexer_client/src/client.mjs.map +1 -1
  334. package/packages/indexer_client/src/core/api-error.js.map +1 -1
  335. package/packages/indexer_client/src/core/api-error.mjs.map +1 -1
  336. package/packages/indexer_client/src/core/base-http-request.js +1 -0
  337. package/packages/indexer_client/src/core/base-http-request.js.map +1 -1
  338. package/packages/indexer_client/src/core/base-http-request.mjs +1 -0
  339. package/packages/indexer_client/src/core/base-http-request.mjs.map +1 -1
  340. package/packages/indexer_client/src/core/fetch-http-request.js.map +1 -1
  341. package/packages/indexer_client/src/core/fetch-http-request.mjs.map +1 -1
  342. package/packages/indexer_client/src/core/model-runtime.js.map +1 -1
  343. package/packages/indexer_client/src/core/model-runtime.mjs.map +1 -1
  344. package/packages/indexer_client/src/core/request.js.map +1 -1
  345. package/packages/indexer_client/src/core/request.mjs.map +1 -1
  346. package/packages/indexer_client/src/models/account-participation.js.map +1 -1
  347. package/packages/indexer_client/src/models/account-participation.mjs.map +1 -1
  348. package/packages/indexer_client/src/models/account-response.js.map +1 -1
  349. package/packages/indexer_client/src/models/account-response.mjs.map +1 -1
  350. package/packages/indexer_client/src/models/account-state-delta.js.map +1 -1
  351. package/packages/indexer_client/src/models/account-state-delta.mjs.map +1 -1
  352. package/packages/indexer_client/src/models/account.js.map +1 -1
  353. package/packages/indexer_client/src/models/account.mjs.map +1 -1
  354. package/packages/indexer_client/src/models/accounts-response.js.map +1 -1
  355. package/packages/indexer_client/src/models/accounts-response.mjs.map +1 -1
  356. package/packages/indexer_client/src/models/application-local-state.js.map +1 -1
  357. package/packages/indexer_client/src/models/application-local-state.mjs.map +1 -1
  358. package/packages/indexer_client/src/models/application-local-states-response.js.map +1 -1
  359. package/packages/indexer_client/src/models/application-local-states-response.mjs.map +1 -1
  360. package/packages/indexer_client/src/models/application-log-data.js.map +1 -1
  361. package/packages/indexer_client/src/models/application-log-data.mjs.map +1 -1
  362. package/packages/indexer_client/src/models/application-logs-response.js.map +1 -1
  363. package/packages/indexer_client/src/models/application-logs-response.mjs.map +1 -1
  364. package/packages/indexer_client/src/models/application-params.js.map +1 -1
  365. package/packages/indexer_client/src/models/application-params.mjs.map +1 -1
  366. package/packages/indexer_client/src/models/application-response.js.map +1 -1
  367. package/packages/indexer_client/src/models/application-response.mjs.map +1 -1
  368. package/packages/indexer_client/src/models/application-state-schema.js.map +1 -1
  369. package/packages/indexer_client/src/models/application-state-schema.mjs.map +1 -1
  370. package/packages/indexer_client/src/models/application.js.map +1 -1
  371. package/packages/indexer_client/src/models/application.mjs.map +1 -1
  372. package/packages/indexer_client/src/models/applications-response.js.map +1 -1
  373. package/packages/indexer_client/src/models/applications-response.mjs.map +1 -1
  374. package/packages/indexer_client/src/models/asset-balances-response.js.map +1 -1
  375. package/packages/indexer_client/src/models/asset-balances-response.mjs.map +1 -1
  376. package/packages/indexer_client/src/models/asset-holding.js.map +1 -1
  377. package/packages/indexer_client/src/models/asset-holding.mjs.map +1 -1
  378. package/packages/indexer_client/src/models/asset-holdings-response.js.map +1 -1
  379. package/packages/indexer_client/src/models/asset-holdings-response.mjs.map +1 -1
  380. package/packages/indexer_client/src/models/asset-params.js.map +1 -1
  381. package/packages/indexer_client/src/models/asset-params.mjs.map +1 -1
  382. package/packages/indexer_client/src/models/asset-response.js.map +1 -1
  383. package/packages/indexer_client/src/models/asset-response.mjs.map +1 -1
  384. package/packages/indexer_client/src/models/asset.js.map +1 -1
  385. package/packages/indexer_client/src/models/asset.mjs.map +1 -1
  386. package/packages/indexer_client/src/models/assets-response.js.map +1 -1
  387. package/packages/indexer_client/src/models/assets-response.mjs.map +1 -1
  388. package/packages/indexer_client/src/models/block-headers-response.js.map +1 -1
  389. package/packages/indexer_client/src/models/block-headers-response.mjs.map +1 -1
  390. package/packages/indexer_client/src/models/block-rewards.js.map +1 -1
  391. package/packages/indexer_client/src/models/block-rewards.mjs.map +1 -1
  392. package/packages/indexer_client/src/models/block-upgrade-state.js.map +1 -1
  393. package/packages/indexer_client/src/models/block-upgrade-state.mjs.map +1 -1
  394. package/packages/indexer_client/src/models/block-upgrade-vote.js.map +1 -1
  395. package/packages/indexer_client/src/models/block-upgrade-vote.mjs.map +1 -1
  396. package/packages/indexer_client/src/models/block.js.map +1 -1
  397. package/packages/indexer_client/src/models/block.mjs.map +1 -1
  398. package/packages/indexer_client/src/models/box-descriptor.js.map +1 -1
  399. package/packages/indexer_client/src/models/box-descriptor.mjs.map +1 -1
  400. package/packages/indexer_client/src/models/box-reference.js.map +1 -1
  401. package/packages/indexer_client/src/models/box-reference.mjs.map +1 -1
  402. package/packages/indexer_client/src/models/box.js.map +1 -1
  403. package/packages/indexer_client/src/models/box.mjs.map +1 -1
  404. package/packages/indexer_client/src/models/boxes-response.js.map +1 -1
  405. package/packages/indexer_client/src/models/boxes-response.mjs.map +1 -1
  406. package/packages/indexer_client/src/models/eval-delta-key-value.js.map +1 -1
  407. package/packages/indexer_client/src/models/eval-delta-key-value.mjs.map +1 -1
  408. package/packages/indexer_client/src/models/eval-delta.js.map +1 -1
  409. package/packages/indexer_client/src/models/eval-delta.mjs.map +1 -1
  410. package/packages/indexer_client/src/models/hash-factory.js.map +1 -1
  411. package/packages/indexer_client/src/models/hash-factory.mjs.map +1 -1
  412. package/packages/indexer_client/src/models/hb-proof-fields.js.map +1 -1
  413. package/packages/indexer_client/src/models/hb-proof-fields.mjs.map +1 -1
  414. package/packages/indexer_client/src/models/health-check.js.map +1 -1
  415. package/packages/indexer_client/src/models/health-check.mjs.map +1 -1
  416. package/packages/indexer_client/src/models/holding-ref.js.map +1 -1
  417. package/packages/indexer_client/src/models/holding-ref.mjs.map +1 -1
  418. package/packages/indexer_client/src/models/indexer-state-proof-message.js.map +1 -1
  419. package/packages/indexer_client/src/models/indexer-state-proof-message.mjs.map +1 -1
  420. package/packages/indexer_client/src/models/locals-ref.js.map +1 -1
  421. package/packages/indexer_client/src/models/locals-ref.mjs.map +1 -1
  422. package/packages/indexer_client/src/models/merkle-array-proof.js.map +1 -1
  423. package/packages/indexer_client/src/models/merkle-array-proof.mjs.map +1 -1
  424. package/packages/indexer_client/src/models/mini-asset-holding.js.map +1 -1
  425. package/packages/indexer_client/src/models/mini-asset-holding.mjs.map +1 -1
  426. package/packages/indexer_client/src/models/on-completion.js.map +1 -1
  427. package/packages/indexer_client/src/models/on-completion.mjs.map +1 -1
  428. package/packages/indexer_client/src/models/participation-updates.js.map +1 -1
  429. package/packages/indexer_client/src/models/participation-updates.mjs.map +1 -1
  430. package/packages/indexer_client/src/models/resource-ref.js.map +1 -1
  431. package/packages/indexer_client/src/models/resource-ref.mjs.map +1 -1
  432. package/packages/indexer_client/src/models/state-delta.js.map +1 -1
  433. package/packages/indexer_client/src/models/state-delta.mjs.map +1 -1
  434. package/packages/indexer_client/src/models/state-proof-fields.js.map +1 -1
  435. package/packages/indexer_client/src/models/state-proof-fields.mjs.map +1 -1
  436. package/packages/indexer_client/src/models/state-proof-participant.js.map +1 -1
  437. package/packages/indexer_client/src/models/state-proof-participant.mjs.map +1 -1
  438. package/packages/indexer_client/src/models/state-proof-reveal.js.map +1 -1
  439. package/packages/indexer_client/src/models/state-proof-reveal.mjs.map +1 -1
  440. package/packages/indexer_client/src/models/state-proof-sig-slot.js.map +1 -1
  441. package/packages/indexer_client/src/models/state-proof-sig-slot.mjs.map +1 -1
  442. package/packages/indexer_client/src/models/state-proof-signature.js.map +1 -1
  443. package/packages/indexer_client/src/models/state-proof-signature.mjs.map +1 -1
  444. package/packages/indexer_client/src/models/state-proof-tracking.js.map +1 -1
  445. package/packages/indexer_client/src/models/state-proof-tracking.mjs.map +1 -1
  446. package/packages/indexer_client/src/models/state-proof-verifier.js.map +1 -1
  447. package/packages/indexer_client/src/models/state-proof-verifier.mjs.map +1 -1
  448. package/packages/indexer_client/src/models/state-schema.js.map +1 -1
  449. package/packages/indexer_client/src/models/state-schema.mjs.map +1 -1
  450. package/packages/indexer_client/src/models/teal-key-value-store.js.map +1 -1
  451. package/packages/indexer_client/src/models/teal-key-value-store.mjs.map +1 -1
  452. package/packages/indexer_client/src/models/teal-key-value.js.map +1 -1
  453. package/packages/indexer_client/src/models/teal-key-value.mjs.map +1 -1
  454. package/packages/indexer_client/src/models/teal-value.js.map +1 -1
  455. package/packages/indexer_client/src/models/teal-value.mjs.map +1 -1
  456. package/packages/indexer_client/src/models/transaction-application.js.map +1 -1
  457. package/packages/indexer_client/src/models/transaction-application.mjs.map +1 -1
  458. package/packages/indexer_client/src/models/transaction-asset-config.js.map +1 -1
  459. package/packages/indexer_client/src/models/transaction-asset-config.mjs.map +1 -1
  460. package/packages/indexer_client/src/models/transaction-asset-freeze.js.map +1 -1
  461. package/packages/indexer_client/src/models/transaction-asset-freeze.mjs.map +1 -1
  462. package/packages/indexer_client/src/models/transaction-asset-transfer.js.map +1 -1
  463. package/packages/indexer_client/src/models/transaction-asset-transfer.mjs.map +1 -1
  464. package/packages/indexer_client/src/models/transaction-heartbeat.js.map +1 -1
  465. package/packages/indexer_client/src/models/transaction-heartbeat.mjs.map +1 -1
  466. package/packages/indexer_client/src/models/transaction-keyreg.js.map +1 -1
  467. package/packages/indexer_client/src/models/transaction-keyreg.mjs.map +1 -1
  468. package/packages/indexer_client/src/models/transaction-payment.js.map +1 -1
  469. package/packages/indexer_client/src/models/transaction-payment.mjs.map +1 -1
  470. package/packages/indexer_client/src/models/transaction-response.js.map +1 -1
  471. package/packages/indexer_client/src/models/transaction-response.mjs.map +1 -1
  472. package/packages/indexer_client/src/models/transaction-signature-logicsig.js.map +1 -1
  473. package/packages/indexer_client/src/models/transaction-signature-logicsig.mjs.map +1 -1
  474. package/packages/indexer_client/src/models/transaction-signature-multisig-subsignature.js.map +1 -1
  475. package/packages/indexer_client/src/models/transaction-signature-multisig-subsignature.mjs.map +1 -1
  476. package/packages/indexer_client/src/models/transaction-signature-multisig.js.map +1 -1
  477. package/packages/indexer_client/src/models/transaction-signature-multisig.mjs.map +1 -1
  478. package/packages/indexer_client/src/models/transaction-signature.js.map +1 -1
  479. package/packages/indexer_client/src/models/transaction-signature.mjs.map +1 -1
  480. package/packages/indexer_client/src/models/transaction-state-proof.js.map +1 -1
  481. package/packages/indexer_client/src/models/transaction-state-proof.mjs.map +1 -1
  482. package/packages/indexer_client/src/models/transaction.js.map +1 -1
  483. package/packages/indexer_client/src/models/transaction.mjs.map +1 -1
  484. package/packages/indexer_client/src/models/transactions-response.js.map +1 -1
  485. package/packages/indexer_client/src/models/transactions-response.mjs.map +1 -1
  486. package/packages/kmd_client/src/apis/api-service.js +4 -2
  487. package/packages/kmd_client/src/apis/api-service.js.map +1 -1
  488. package/packages/kmd_client/src/apis/api-service.mjs +4 -2
  489. package/packages/kmd_client/src/apis/api-service.mjs.map +1 -1
  490. package/packages/kmd_client/src/client.js.map +1 -1
  491. package/packages/kmd_client/src/client.mjs.map +1 -1
  492. package/packages/kmd_client/src/core/api-error.js.map +1 -1
  493. package/packages/kmd_client/src/core/api-error.mjs.map +1 -1
  494. package/packages/kmd_client/src/core/base-http-request.js +1 -0
  495. package/packages/kmd_client/src/core/base-http-request.js.map +1 -1
  496. package/packages/kmd_client/src/core/base-http-request.mjs +1 -0
  497. package/packages/kmd_client/src/core/base-http-request.mjs.map +1 -1
  498. package/packages/kmd_client/src/core/fetch-http-request.js.map +1 -1
  499. package/packages/kmd_client/src/core/fetch-http-request.mjs.map +1 -1
  500. package/packages/kmd_client/src/core/model-runtime.js.map +1 -1
  501. package/packages/kmd_client/src/core/model-runtime.mjs.map +1 -1
  502. package/packages/kmd_client/src/core/request.js.map +1 -1
  503. package/packages/kmd_client/src/core/request.mjs.map +1 -1
  504. package/packages/kmd_client/src/models/create-wallet-request.js.map +1 -1
  505. package/packages/kmd_client/src/models/create-wallet-request.mjs.map +1 -1
  506. package/packages/kmd_client/src/models/create-wallet-response.js.map +1 -1
  507. package/packages/kmd_client/src/models/create-wallet-response.mjs.map +1 -1
  508. package/packages/kmd_client/src/models/delete-key-request.js.map +1 -1
  509. package/packages/kmd_client/src/models/delete-key-request.mjs.map +1 -1
  510. package/packages/kmd_client/src/models/delete-multisig-request.js.map +1 -1
  511. package/packages/kmd_client/src/models/delete-multisig-request.mjs.map +1 -1
  512. package/packages/kmd_client/src/models/export-key-request.js.map +1 -1
  513. package/packages/kmd_client/src/models/export-key-request.mjs.map +1 -1
  514. package/packages/kmd_client/src/models/export-key-response.js.map +1 -1
  515. package/packages/kmd_client/src/models/export-key-response.mjs.map +1 -1
  516. package/packages/kmd_client/src/models/export-master-key-request.js.map +1 -1
  517. package/packages/kmd_client/src/models/export-master-key-request.mjs.map +1 -1
  518. package/packages/kmd_client/src/models/export-master-key-response.js.map +1 -1
  519. package/packages/kmd_client/src/models/export-master-key-response.mjs.map +1 -1
  520. package/packages/kmd_client/src/models/export-multisig-request.js.map +1 -1
  521. package/packages/kmd_client/src/models/export-multisig-request.mjs.map +1 -1
  522. package/packages/kmd_client/src/models/export-multisig-response.js.map +1 -1
  523. package/packages/kmd_client/src/models/export-multisig-response.mjs.map +1 -1
  524. package/packages/kmd_client/src/models/generate-key-request.js.map +1 -1
  525. package/packages/kmd_client/src/models/generate-key-request.mjs.map +1 -1
  526. package/packages/kmd_client/src/models/generate-key-response.js.map +1 -1
  527. package/packages/kmd_client/src/models/generate-key-response.mjs.map +1 -1
  528. package/packages/kmd_client/src/models/import-key-request.js.map +1 -1
  529. package/packages/kmd_client/src/models/import-key-request.mjs.map +1 -1
  530. package/packages/kmd_client/src/models/import-key-response.js.map +1 -1
  531. package/packages/kmd_client/src/models/import-key-response.mjs.map +1 -1
  532. package/packages/kmd_client/src/models/import-multisig-request.js.map +1 -1
  533. package/packages/kmd_client/src/models/import-multisig-request.mjs.map +1 -1
  534. package/packages/kmd_client/src/models/import-multisig-response.js.map +1 -1
  535. package/packages/kmd_client/src/models/import-multisig-response.mjs.map +1 -1
  536. package/packages/kmd_client/src/models/init-wallet-handle-token-request.js.map +1 -1
  537. package/packages/kmd_client/src/models/init-wallet-handle-token-request.mjs.map +1 -1
  538. package/packages/kmd_client/src/models/init-wallet-handle-token-response.js.map +1 -1
  539. package/packages/kmd_client/src/models/init-wallet-handle-token-response.mjs.map +1 -1
  540. package/packages/kmd_client/src/models/list-keys-request.js.map +1 -1
  541. package/packages/kmd_client/src/models/list-keys-request.mjs.map +1 -1
  542. package/packages/kmd_client/src/models/list-keys-response.js.map +1 -1
  543. package/packages/kmd_client/src/models/list-keys-response.mjs.map +1 -1
  544. package/packages/kmd_client/src/models/list-multisig-request.js.map +1 -1
  545. package/packages/kmd_client/src/models/list-multisig-request.mjs.map +1 -1
  546. package/packages/kmd_client/src/models/list-multisig-response.js.map +1 -1
  547. package/packages/kmd_client/src/models/list-multisig-response.mjs.map +1 -1
  548. package/packages/kmd_client/src/models/list-wallets-response.js.map +1 -1
  549. package/packages/kmd_client/src/models/list-wallets-response.mjs.map +1 -1
  550. package/packages/kmd_client/src/models/multisig-sig.js.map +1 -1
  551. package/packages/kmd_client/src/models/multisig-sig.mjs.map +1 -1
  552. package/packages/kmd_client/src/models/multisig-subsig.js.map +1 -1
  553. package/packages/kmd_client/src/models/multisig-subsig.mjs.map +1 -1
  554. package/packages/kmd_client/src/models/release-wallet-handle-token-request.js.map +1 -1
  555. package/packages/kmd_client/src/models/release-wallet-handle-token-request.mjs.map +1 -1
  556. package/packages/kmd_client/src/models/rename-wallet-request.js.map +1 -1
  557. package/packages/kmd_client/src/models/rename-wallet-request.mjs.map +1 -1
  558. package/packages/kmd_client/src/models/rename-wallet-response.js.map +1 -1
  559. package/packages/kmd_client/src/models/rename-wallet-response.mjs.map +1 -1
  560. package/packages/kmd_client/src/models/renew-wallet-handle-token-request.js.map +1 -1
  561. package/packages/kmd_client/src/models/renew-wallet-handle-token-request.mjs.map +1 -1
  562. package/packages/kmd_client/src/models/renew-wallet-handle-token-response.js.map +1 -1
  563. package/packages/kmd_client/src/models/renew-wallet-handle-token-response.mjs.map +1 -1
  564. package/packages/kmd_client/src/models/sign-multisig-response.js.map +1 -1
  565. package/packages/kmd_client/src/models/sign-multisig-response.mjs.map +1 -1
  566. package/packages/kmd_client/src/models/sign-multisig-txn-request.js.map +1 -1
  567. package/packages/kmd_client/src/models/sign-multisig-txn-request.mjs.map +1 -1
  568. package/packages/kmd_client/src/models/sign-program-multisig-request.js.map +1 -1
  569. package/packages/kmd_client/src/models/sign-program-multisig-request.mjs.map +1 -1
  570. package/packages/kmd_client/src/models/sign-program-multisig-response.js.map +1 -1
  571. package/packages/kmd_client/src/models/sign-program-multisig-response.mjs.map +1 -1
  572. package/packages/kmd_client/src/models/sign-program-request.js.map +1 -1
  573. package/packages/kmd_client/src/models/sign-program-request.mjs.map +1 -1
  574. package/packages/kmd_client/src/models/sign-program-response.js.map +1 -1
  575. package/packages/kmd_client/src/models/sign-program-response.mjs.map +1 -1
  576. package/packages/kmd_client/src/models/sign-transaction-response.js.map +1 -1
  577. package/packages/kmd_client/src/models/sign-transaction-response.mjs.map +1 -1
  578. package/packages/kmd_client/src/models/sign-txn-request.js.map +1 -1
  579. package/packages/kmd_client/src/models/sign-txn-request.mjs.map +1 -1
  580. package/packages/kmd_client/src/models/tx-type.js.map +1 -1
  581. package/packages/kmd_client/src/models/tx-type.mjs.map +1 -1
  582. package/packages/kmd_client/src/models/versions-response.js.map +1 -1
  583. package/packages/kmd_client/src/models/versions-response.mjs.map +1 -1
  584. package/packages/kmd_client/src/models/wallet-handle.js.map +1 -1
  585. package/packages/kmd_client/src/models/wallet-handle.mjs.map +1 -1
  586. package/packages/kmd_client/src/models/wallet-info-request.js.map +1 -1
  587. package/packages/kmd_client/src/models/wallet-info-request.mjs.map +1 -1
  588. package/packages/kmd_client/src/models/wallet-info-response.js.map +1 -1
  589. package/packages/kmd_client/src/models/wallet-info-response.mjs.map +1 -1
  590. package/packages/kmd_client/src/models/wallet.js.map +1 -1
  591. package/packages/kmd_client/src/models/wallet.mjs.map +1 -1
  592. package/packages/testing/src/globalSetup.js +0 -1
  593. package/packages/testing/src/globalSetup.js.map +1 -1
  594. package/packages/testing/src/globalSetup.mjs.map +1 -1
  595. package/packages/testing/src/mockServer.js.map +1 -1
  596. package/packages/testing/src/mockServer.mjs.map +1 -1
  597. package/packages/transact/src/logicsig.js +2 -1
  598. package/packages/transact/src/logicsig.js.map +1 -1
  599. package/packages/transact/src/logicsig.mjs +2 -1
  600. package/packages/transact/src/logicsig.mjs.map +1 -1
  601. package/packages/transact/src/multisig.js +0 -2
  602. package/packages/transact/src/multisig.js.map +1 -1
  603. package/packages/transact/src/multisig.mjs +0 -2
  604. package/packages/transact/src/multisig.mjs.map +1 -1
  605. package/packages/transact/src/signer.js.map +1 -1
  606. package/packages/transact/src/signer.mjs.map +1 -1
  607. package/packages/transact/src/transactions/app-call.js +22 -23
  608. package/packages/transact/src/transactions/app-call.js.map +1 -1
  609. package/packages/transact/src/transactions/app-call.mjs +22 -23
  610. package/packages/transact/src/transactions/app-call.mjs.map +1 -1
  611. package/packages/transact/src/transactions/asset-config.js +12 -13
  612. package/packages/transact/src/transactions/asset-config.js.map +1 -1
  613. package/packages/transact/src/transactions/asset-config.mjs +12 -13
  614. package/packages/transact/src/transactions/asset-config.mjs.map +1 -1
  615. package/packages/transact/src/transactions/asset-freeze.js +1 -2
  616. package/packages/transact/src/transactions/asset-freeze.js.map +1 -1
  617. package/packages/transact/src/transactions/asset-freeze.mjs +1 -2
  618. package/packages/transact/src/transactions/asset-freeze.mjs.map +1 -1
  619. package/packages/transact/src/transactions/asset-transfer.js +1 -2
  620. package/packages/transact/src/transactions/asset-transfer.js.map +1 -1
  621. package/packages/transact/src/transactions/asset-transfer.mjs +1 -2
  622. package/packages/transact/src/transactions/asset-transfer.mjs.map +1 -1
  623. package/packages/transact/src/transactions/common.js +5 -14
  624. package/packages/transact/src/transactions/common.js.map +1 -1
  625. package/packages/transact/src/transactions/common.mjs +6 -14
  626. package/packages/transact/src/transactions/common.mjs.map +1 -1
  627. package/packages/transact/src/transactions/key-registration.js +8 -9
  628. package/packages/transact/src/transactions/key-registration.js.map +1 -1
  629. package/packages/transact/src/transactions/key-registration.mjs +8 -9
  630. package/packages/transact/src/transactions/key-registration.mjs.map +1 -1
  631. package/packages/transact/src/transactions/reference-types-meta.js.map +1 -1
  632. package/packages/transact/src/transactions/reference-types-meta.mjs.map +1 -1
  633. package/packages/transact/src/transactions/signed-transaction-meta.js.map +1 -1
  634. package/packages/transact/src/transactions/signed-transaction-meta.mjs.map +1 -1
  635. package/packages/transact/src/transactions/signed-transaction.js.map +1 -1
  636. package/packages/transact/src/transactions/signed-transaction.mjs.map +1 -1
  637. package/packages/transact/src/transactions/transaction-meta.js +27 -26
  638. package/packages/transact/src/transactions/transaction-meta.js.map +1 -1
  639. package/packages/transact/src/transactions/transaction-meta.mjs +27 -26
  640. package/packages/transact/src/transactions/transaction-meta.mjs.map +1 -1
  641. package/packages/transact/src/transactions/transaction-type.js.map +1 -1
  642. package/packages/transact/src/transactions/transaction-type.mjs.map +1 -1
  643. package/packages/transact/src/transactions/transaction.js +2 -2
  644. package/packages/transact/src/transactions/transaction.js.map +1 -1
  645. package/packages/transact/src/transactions/transaction.mjs +2 -2
  646. package/packages/transact/src/transactions/transaction.mjs.map +1 -1
  647. package/testing/account.js.map +1 -1
  648. package/testing/account.mjs.map +1 -1
  649. package/testing/fixtures/algokit-log-capture-fixture.js.map +1 -1
  650. package/testing/fixtures/algokit-log-capture-fixture.mjs.map +1 -1
  651. package/testing/fixtures/algorand-fixture.js.map +1 -1
  652. package/testing/fixtures/algorand-fixture.mjs.map +1 -1
  653. package/testing/indexer.js.map +1 -1
  654. package/testing/indexer.mjs.map +1 -1
  655. package/testing/test-logger.js.map +1 -1
  656. package/testing/test-logger.mjs.map +1 -1
  657. package/testing/transaction-logger.js.map +1 -1
  658. package/testing/transaction-logger.mjs.map +1 -1
  659. package/transaction/perform-transaction-composer-simulate.js.map +1 -1
  660. package/transaction/perform-transaction-composer-simulate.mjs.map +1 -1
  661. package/transaction/transaction.js.map +1 -1
  662. package/transaction/transaction.mjs.map +1 -1
  663. package/transactions/app-call.js +33 -43
  664. package/transactions/app-call.js.map +1 -1
  665. package/transactions/app-call.mjs +33 -43
  666. package/transactions/app-call.mjs.map +1 -1
  667. package/transactions/asset-config.js +5 -5
  668. package/transactions/asset-config.js.map +1 -1
  669. package/transactions/asset-config.mjs +5 -5
  670. package/transactions/asset-config.mjs.map +1 -1
  671. package/transactions/asset-transfer.js +4 -4
  672. package/transactions/asset-transfer.js.map +1 -1
  673. package/transactions/asset-transfer.mjs +4 -4
  674. package/transactions/asset-transfer.mjs.map +1 -1
  675. package/transactions/common.js.map +1 -1
  676. package/transactions/common.mjs.map +1 -1
  677. package/transactions/fee-coverage.js +7 -10
  678. package/transactions/fee-coverage.js.map +1 -1
  679. package/transactions/fee-coverage.mjs +7 -10
  680. package/transactions/fee-coverage.mjs.map +1 -1
  681. package/transactions/key-registration.js +3 -3
  682. package/transactions/key-registration.js.map +1 -1
  683. package/transactions/key-registration.mjs +3 -3
  684. package/transactions/key-registration.mjs.map +1 -1
  685. package/transactions/method-call.js +8 -8
  686. package/transactions/method-call.js.map +1 -1
  687. package/transactions/method-call.mjs +8 -8
  688. package/transactions/method-call.mjs.map +1 -1
  689. package/transactions/payment.js +2 -2
  690. package/transactions/payment.js.map +1 -1
  691. package/transactions/payment.mjs +2 -2
  692. package/transactions/payment.mjs.map +1 -1
  693. package/types/account.js.map +1 -1
  694. package/types/algorand-client-transaction-creator.js.map +1 -1
  695. package/types/algorand-client-transaction-sender.js.map +1 -1
  696. package/types/algorand-client.js.map +1 -1
  697. package/types/amount.js.map +1 -1
  698. package/types/app-client.js.map +1 -1
  699. package/types/app-deployer.js.map +1 -1
  700. package/types/app-factory.js.map +1 -1
  701. package/types/app-manager.js.map +1 -1
  702. package/types/app-spec.js.map +1 -1
  703. package/types/asset-manager.js.map +1 -1
  704. package/types/async-event-emitter.js.map +1 -1
  705. package/types/client-manager.js.map +1 -1
  706. package/types/composer.js.map +1 -1
  707. package/types/config.js.map +1 -1
  708. package/types/dispenser-client.js.map +1 -1
  709. package/types/kmd-account-manager.js.map +1 -1
  710. package/types/lifecycle-events.js.map +1 -1
  711. package/types/logic-error.js.map +1 -1
  712. package/types/network-client.js.map +1 -1
  713. package/updatable-config.js.map +1 -1
  714. package/updatable-config.mjs.map +1 -1
  715. package/util.js.map +1 -1
  716. package/util.mjs.map +1 -1
  717. package/packages/algo25/src/english.js.map +0 -1
  718. package/packages/algo25/src/english.mjs.map +0 -1
  719. package/packages/algo25/src/index.js.map +0 -1
  720. package/packages/algo25/src/index.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"app-deployer.js","names":["TransactionComposer","APP_DEPLOY_NOTE_DAPP","getAddress","getApplicationAddress","calculateExtraProgramPages","OnSchemaBreak","OnUpdate","Address","lookupAccountCreatedApplicationByAddress","searchTransactions","TransactionType"],"sources":["../src/app-deployer.ts"],"sourcesContent":["import { ABIReturn } from '@algorandfoundation/algokit-abi'\nimport { Address, Expand, getAddress, getApplicationAddress, ReadableAddress } from '@algorandfoundation/algokit-common'\nimport { IndexerClient } from '@algorandfoundation/algokit-indexer-client'\nimport { TransactionType } from '@algorandfoundation/algokit-transact'\nimport { AlgorandClientTransactionSender } from './algorand-client-transaction-sender'\nimport {\n APP_DEPLOY_NOTE_DAPP,\n OnSchemaBreak,\n OnUpdate,\n type AppDeployMetadata,\n type SendAppCreateTransactionResult,\n type SendAppUpdateTransactionResult,\n type TealTemplateParams,\n} from './app'\nimport { AppManager } from './app-manager'\nimport {\n AppCreateMethodCall,\n AppCreateParams,\n AppDeleteMethodCall,\n AppDeleteParams,\n AppUpdateMethodCall,\n AppUpdateParams,\n TransactionComposer,\n} from './composer'\nimport { Config } from './config'\nimport { lookupAccountCreatedApplicationByAddress, searchTransactions } from './indexer-client'\nimport { ConfirmedTransactionResult, SendParams } from './transaction/types'\nimport { calculateExtraProgramPages } from './util'\n\n/** Params to specify an update transaction for an app deployment */\nexport type DeployAppUpdateParams = Expand<Omit<AppUpdateParams, 'appId' | 'approvalProgram' | 'clearStateProgram'>>\n/** Params to specify an update method call for an app deployment */\nexport type DeployAppUpdateMethodCall = Expand<Omit<AppUpdateMethodCall, 'appId' | 'approvalProgram' | 'clearStateProgram'>>\n/** Params to specify a transaction for an app deployment */\nexport type DeployAppDeleteParams = Expand<Omit<AppDeleteParams, 'appId'>>\n/** Params to specify a delete method call for an app deployment */\nexport type DeployAppDeleteMethodCall = Expand<Omit<AppDeleteMethodCall, 'appId'>>\n\n/** The parameters to idempotently deploy an app */\nexport type AppDeployParams = Expand<\n SendParams & {\n /** The deployment metadata */\n metadata: AppDeployMetadata\n /** Any deploy-time parameters to replace in the TEAL code before compiling it (used if teal code is passed in as a string) */\n deployTimeParams?: TealTemplateParams\n /** What action to perform if a schema break (storage schema or extra pages change) is detected:\n *\n * * `fail` - Fail the deployment (throw an error, **default**)\n * * `replace` - Delete the old app and create a new one\n * * `append` - Deploy a new app and leave the old one as is\n */\n onSchemaBreak?: 'replace' | 'fail' | 'append' | OnSchemaBreak\n /** What action to perform if a TEAL code update is detected:\n *\n * * `fail` - Fail the deployment (throw an error, **default**)\n * * `update` - Update the app with the new TEAL code\n * * `replace` - Delete the old app and create a new one\n * * `append` - Deploy a new app and leave the old one as is\n */\n onUpdate?: 'update' | 'replace' | 'fail' | 'append' | OnUpdate\n /** Create transaction parameters to use if a create needs to be issued as part of deployment */\n createParams: AppCreateParams | AppCreateMethodCall\n /** Update transaction parameters to use if an update needs to be issued as part of deployment */\n updateParams: DeployAppUpdateParams | DeployAppUpdateMethodCall\n /** Delete transaction parameters to use if a delete needs to be issued as part of deployment */\n deleteParams: DeployAppDeleteParams | DeployAppDeleteMethodCall\n /** Optional cached value of the existing apps for the given creator; use this to avoid an indexer lookup */\n existingDeployments?: AppLookup\n /** Whether or not to ignore the app metadata cache and force a lookup, default: use the cache **/\n ignoreCache?: boolean\n }\n>\n\n/** The metadata that can be collected about a deployed app */\nexport interface AppMetadata extends AppDeployMetadata {\n /** The id of the app */\n appId: bigint\n /** The Algorand address of the account associated with the app */\n appAddress: Address\n /** The round the app was created */\n createdRound: bigint\n /** The last round that the app was updated */\n updatedRound: bigint\n /** The metadata when the app was created */\n createdMetadata: AppDeployMetadata\n /** Whether or not the app is deleted */\n deleted: boolean\n}\n\n/** A lookup of name -> Algorand app for a creator */\nexport interface AppLookup {\n /** The address of the creator associated with this lookup */\n creator: Readonly<Address>\n /** A hash map of app name to app metadata */\n apps: {\n [name: string]: AppMetadata\n }\n}\n\nexport type AppDeployResult =\n | Expand<{ operationPerformed: 'create' } & Omit<AppMetadata, 'appId' | 'appAddress'> & SendAppCreateTransactionResult>\n | Expand<{ operationPerformed: 'update' } & AppMetadata & SendAppUpdateTransactionResult>\n | Expand<\n { operationPerformed: 'replace' } & Omit<AppMetadata, 'appId' | 'appAddress'> &\n SendAppCreateTransactionResult & {\n deleteReturn?: ABIReturn\n deleteResult: ConfirmedTransactionResult\n }\n >\n | Expand<{ operationPerformed: 'nothing' } & AppMetadata>\n\n/** Allows management of deployment and deployment metadata of applications. */\nexport class AppDeployer {\n private _appManager: AppManager\n private _transactionSender: AlgorandClientTransactionSender\n private _indexer?: IndexerClient\n private _appLookups = new Map<string, AppLookup>()\n\n /**\n * Creates an `AppManager`\n * @param appManager An `AppManager` instance\n * @param transactionSender An `AlgorandClientTransactionSender` instance\n * @param indexer An optional indexer instance; supply if you want to indexer to look up app metadata\n * @example\n * ```ts\n * const deployer = new AppDeployer(appManager, transactionSender, indexer)\n * ```\n */\n constructor(appManager: AppManager, transactionSender: AlgorandClientTransactionSender, indexer?: IndexerClient) {\n this._appManager = appManager\n this._transactionSender = transactionSender\n this._indexer = indexer\n }\n\n /**\n * Idempotently deploy (create if not exists, update if changed) an app against the given name for the given creator account, including deploy-time TEAL template placeholder substitutions (if specified).\n *\n * To understand the architecture decisions behind this functionality please see https://github.com/algorandfoundation/algokit-cli/blob/main/docs/architecture-decisions/2023-01-12_smart-contract-deployment.md\n *\n * **Note:** When using the return from this function be sure to check `operationPerformed` to get access to various return properties like `transaction`, `confirmation` and `deleteResult`.\n *\n * **Note:** if there is a breaking state schema change to an existing app (and `onSchemaBreak` is set to `'replace'`) the existing app will be deleted and re-created.\n *\n * **Note:** if there is an update (different TEAL code) to an existing app (and `onUpdate` is set to `'replace'`) the existing app will be deleted and re-created.\n * @param deployment The arguments to control the app deployment\n * @returns The result of the deployment\n * @example\n * ```ts\n * const deployResult = await deployer.deploy({\n * createParams: {\n * sender: 'SENDER_ADDRESS',\n * approvalProgram: 'APPROVAL PROGRAM',\n * clearStateProgram: 'CLEAR PROGRAM',\n * schema: {\n * globalByteSlices: 0,\n * globalInts: 0,\n * localByteSlices: 0,\n * localInts: 0\n * }\n * },\n * updateParams: {\n * sender: 'SENDER_ADDRESS'\n * },\n * deleteParams: {\n * sender: 'SENDER_ADDRESS'\n * },\n * metadata: { name: 'my_app', version: '2.0', updatable: false, deletable: false },\n * onSchemaBreak: 'append',\n * onUpdate: 'append'\n * })\n * ```\n */\n async deploy(deployment: AppDeployParams): Promise<AppDeployResult> {\n const {\n metadata,\n deployTimeParams,\n onSchemaBreak,\n onUpdate,\n createParams,\n updateParams,\n deleteParams,\n existingDeployments,\n ignoreCache,\n ...sendParams\n } = deployment\n\n // Set creation note\n\n createParams.note = updateParams.note = TransactionComposer.arc2Note({\n dAppName: APP_DEPLOY_NOTE_DAPP,\n data: metadata,\n format: 'j',\n })\n\n // Check for required fields\n\n if (existingDeployments && existingDeployments.creator.toString() !== createParams.sender.toString()) {\n throw new Error(\n `Received invalid existingDeployments value for creator ${existingDeployments.creator} when attempting to deploy for creator ${getAddress(createParams.sender)}`,\n )\n }\n if (!existingDeployments && !this._indexer) {\n throw new Error(\n `Didn't receive an indexer client when this AppManager was created, but also didn't receive an existingDeployments cache - one of them must be provided`,\n )\n }\n\n Config.getLogger(sendParams?.suppressLog).info(\n `Idempotently deploying app \"${metadata.name}\" from creator ${getAddress(createParams.sender)} using ${createParams.approvalProgram.length} bytes of ${typeof createParams.approvalProgram === 'string' ? 'teal code' : 'AVM bytecode'} and ${createParams.clearStateProgram.length} bytes of ${typeof createParams.approvalProgram === 'string' ? 'teal code' : 'AVM bytecode'}`,\n )\n\n // Compile code if required\n\n const compiledApproval =\n typeof createParams.approvalProgram === 'string'\n ? await this._appManager.compileTealTemplate(createParams.approvalProgram, deployTimeParams, metadata)\n : undefined\n const approvalProgram = compiledApproval ? compiledApproval.compiledBase64ToBytes : createParams.approvalProgram\n\n const compiledClear =\n typeof createParams.clearStateProgram === 'string'\n ? await this._appManager.compileTealTemplate(createParams.clearStateProgram, deployTimeParams)\n : undefined\n const clearStateProgram = compiledClear ? compiledClear.compiledBase64ToBytes : createParams.clearStateProgram\n\n // Define routines for create, update, and replace\n\n const createApp = async () => {\n const result = await ('method' in createParams\n ? this._transactionSender.appCreateMethodCall({ ...createParams, approvalProgram, clearStateProgram, ...sendParams })\n : this._transactionSender.appCreate({ ...createParams, approvalProgram, clearStateProgram, ...sendParams }))\n const appMetadata: AppMetadata = {\n appId: result.appId,\n appAddress: result.appAddress,\n ...metadata,\n createdMetadata: metadata,\n createdRound: BigInt(result.confirmation.confirmedRound!),\n updatedRound: BigInt(result.confirmation.confirmedRound!),\n deleted: false,\n }\n this.updateAppLookup(createParams.sender, appMetadata)\n return {\n operationPerformed: 'create',\n compiledApproval,\n compiledClear,\n ...result,\n ...appMetadata,\n } satisfies SendAppCreateTransactionResult & AppMetadata & { operationPerformed: 'create' }\n }\n const updateApp = async (existingApp: AppMetadata) => {\n Config.getLogger(sendParams?.suppressLog).info(\n `Updating existing ${metadata.name} app for ${getAddress(createParams.sender)} to version ${metadata.version}.`,\n )\n const result = await ('method' in updateParams\n ? this._transactionSender.appUpdateMethodCall({\n appId: existingApp.appId,\n approvalProgram,\n clearStateProgram,\n ...updateParams,\n ...sendParams,\n })\n : this._transactionSender.appUpdate({\n appId: existingApp.appId,\n approvalProgram,\n clearStateProgram,\n ...updateParams,\n ...sendParams,\n }))\n const appMetadata: AppMetadata = {\n appId: existingApp.appId,\n appAddress: existingApp.appAddress,\n createdMetadata: existingApp.createdMetadata,\n createdRound: existingApp.createdRound,\n updatedRound: BigInt(result.confirmation.confirmedRound!),\n ...metadata,\n deleted: false,\n }\n this.updateAppLookup(createParams.sender, appMetadata)\n return {\n operationPerformed: 'update',\n compiledApproval,\n compiledClear,\n ...result,\n ...appMetadata,\n } satisfies SendAppUpdateTransactionResult & AppMetadata & { operationPerformed: 'update' }\n }\n const replaceApp = async (existingApp: AppMetadata) => {\n Config.getLogger(sendParams?.suppressLog).info(\n `Deploying a new ${metadata.name} app for ${getAddress(createParams.sender)}; deploying app with version ${metadata.version}.`,\n )\n\n Config.getLogger(sendParams?.suppressLog).warn(\n `Deleting existing ${metadata.name} app with id ${existingApp.appId} from ${getAddress(deleteParams.sender)} account.`,\n )\n\n const composer = this._transactionSender.newGroup()\n if ('method' in createParams) {\n composer.addAppCreateMethodCall({ ...createParams, approvalProgram, clearStateProgram })\n } else {\n composer.addAppCreate({ ...createParams, approvalProgram, clearStateProgram })\n }\n const createIndex = await composer.count()\n if ('method' in deleteParams) {\n composer.addAppDeleteMethodCall({ appId: existingApp.appId, ...deleteParams })\n } else {\n composer.addAppDelete({ appId: existingApp.appId, ...deleteParams })\n }\n const result = await composer.send({ ...sendParams })\n const confirmation = result.confirmations.at(createIndex - 1)!\n const transaction = result.transactions.at(createIndex - 1)!\n const deleteTransaction = result.transactions.at(-1)!\n\n Config.getLogger(sendParams?.suppressLog).warn(\n `Sent transactions ${transaction.txId()} to create app with id ${confirmation.appId} and ${deleteTransaction.txId()} to delete app with id ${\n existingApp.appId\n } from ${getAddress(createParams.sender)} account.`,\n )\n\n const appMetadata: AppMetadata = {\n appId: confirmation.appId!,\n appAddress: getApplicationAddress(confirmation.appId!),\n ...metadata,\n createdMetadata: metadata,\n createdRound: BigInt(confirmation.confirmedRound!),\n updatedRound: BigInt(confirmation.confirmedRound!),\n deleted: false,\n }\n this.updateAppLookup(createParams.sender, appMetadata)\n\n return {\n operationPerformed: 'replace',\n ...result,\n compiledApproval,\n compiledClear,\n transaction,\n confirmation,\n return: 'method' in createParams ? result.returns?.[0] : undefined,\n deleteReturn: 'method' in deleteParams ? result.returns?.at(-1) : undefined,\n ...appMetadata,\n deleteResult: { transaction: deleteTransaction, confirmation: result.confirmations.at(-1)! },\n } satisfies { operationPerformed: 'replace' } & AppMetadata &\n SendAppCreateTransactionResult & {\n deleteReturn?: ABIReturn\n deleteResult: ConfirmedTransactionResult\n }\n }\n\n // Lookup existing app metadata\n\n const apps = existingDeployments ?? (await this.getCreatorAppsByName(createParams.sender, ignoreCache))\n\n const existingApp = apps.apps[metadata.name]\n if (!existingApp || existingApp.deleted) {\n Config.getLogger(sendParams?.suppressLog).info(\n `App ${metadata.name} not found in apps created by ${getAddress(createParams.sender)}; deploying app with version ${metadata.version}.`,\n )\n\n return await createApp()\n }\n\n Config.getLogger(sendParams?.suppressLog).info(\n `Existing app ${metadata.name} found by creator ${getAddress(createParams.sender)}, with app id ${existingApp.appId} and version ${existingApp.version}.`,\n )\n\n const existingAppRecord = await this._appManager.getById(existingApp.appId)\n const existingApproval = Buffer.from(existingAppRecord.approvalProgram).toString('base64')\n const existingClear = Buffer.from(existingAppRecord.clearStateProgram).toString('base64')\n const extraPages = existingAppRecord.extraProgramPages ?? 0\n\n const newApprovalBytes = Buffer.from(approvalProgram)\n const newClearBytes = Buffer.from(clearStateProgram)\n const newApproval = newApprovalBytes.toString('base64')\n const newClear = newClearBytes.toString('base64')\n const newExtraPages = calculateExtraProgramPages(newApprovalBytes, newClearBytes)\n\n // Check for changes\n\n const isUpdate = newApproval !== existingApproval || newClear !== existingClear\n const isSchemaBreak =\n existingAppRecord.localInts < (createParams.schema?.localInts ?? 0) ||\n existingAppRecord.globalInts < (createParams.schema?.globalInts ?? 0) ||\n existingAppRecord.localByteSlices < (createParams.schema?.localByteSlices ?? 0) ||\n existingAppRecord.globalByteSlices < (createParams.schema?.globalByteSlices ?? 0) ||\n extraPages < newExtraPages\n\n if (isSchemaBreak) {\n Config.getLogger(sendParams?.suppressLog).warn(`Detected a breaking app schema change in app ${existingApp.appId}:`, {\n from: {\n globalInts: existingAppRecord.globalInts,\n globalByteSlices: existingAppRecord.globalByteSlices,\n localInts: existingAppRecord.localInts,\n localByteSlices: existingAppRecord.localByteSlices,\n extraProgramPages: extraPages,\n },\n to: { ...createParams.schema, extraProgramPages: newExtraPages },\n })\n\n if (onSchemaBreak === undefined || onSchemaBreak === 'fail' || onSchemaBreak === OnSchemaBreak.Fail) {\n throw new Error(\n 'Schema break detected and onSchemaBreak=OnSchemaBreak.Fail, stopping deployment. ' +\n 'If you want to try deleting and recreating the app then ' +\n 're-run with onSchemaBreak=OnSchemaBreak.ReplaceApp',\n )\n }\n\n if (onSchemaBreak === 'append' || onSchemaBreak === OnSchemaBreak.AppendApp) {\n Config.getLogger(sendParams?.suppressLog).info('onSchemaBreak=AppendApp, will attempt to create a new app')\n return await createApp()\n }\n\n if (existingApp.deletable) {\n Config.getLogger(sendParams?.suppressLog).info(\n 'App is deletable and onSchemaBreak=ReplaceApp, will attempt to create new app and delete old app',\n )\n } else {\n Config.getLogger(sendParams?.suppressLog).info(\n 'App is not deletable but onSchemaBreak=ReplaceApp, will attempt to delete app, delete will most likely fail',\n )\n }\n\n return await replaceApp(existingApp)\n }\n\n if (isUpdate) {\n Config.getLogger(sendParams?.suppressLog).info(\n `Detected a TEAL update in app ${existingApp.appId} for creator ${getAddress(createParams.sender)}`,\n )\n\n if (onUpdate === undefined || onUpdate === 'fail' || onUpdate === OnUpdate.Fail) {\n throw new Error('Update detected and onUpdate=Fail, stopping deployment. Try a different onUpdate value to not fail.')\n }\n\n if (onUpdate === 'append' || onUpdate === OnUpdate.AppendApp) {\n Config.getLogger(sendParams?.suppressLog).info('onUpdate=AppendApp, will attempt to create a new app')\n return await createApp()\n }\n\n if (onUpdate === 'update' || onUpdate === OnUpdate.UpdateApp) {\n if (existingApp.updatable) {\n Config.getLogger(sendParams?.suppressLog).info(`App is updatable and onUpdate=UpdateApp, updating app...`)\n } else {\n Config.getLogger(sendParams?.suppressLog).warn(\n `App is not updatable but onUpdate=UpdateApp, will attempt to update app, update will most likely fail`,\n )\n }\n\n return await updateApp(existingApp)\n }\n\n if (onUpdate === 'replace' || onUpdate === OnUpdate.ReplaceApp) {\n if (existingApp.deletable) {\n Config.getLogger(sendParams?.suppressLog).warn(\n 'App is deletable and onUpdate=ReplaceApp, creating new app and deleting old app...',\n )\n } else {\n Config.getLogger(sendParams?.suppressLog).warn(\n 'App is not deletable and onUpdate=ReplaceApp, will attempt to create new app and delete old app, delete will most likely fail',\n )\n }\n\n return await replaceApp(existingApp)\n }\n }\n\n Config.getLogger(sendParams?.suppressLog).debug('No detected changes in app, nothing to do.')\n\n return { ...existingApp, operationPerformed: 'nothing' }\n }\n\n private updateAppLookup(sender: ReadableAddress, appMetadata: AppMetadata) {\n const s = getAddress(sender).toString()\n const lookup = this._appLookups.get(s)\n if (!lookup) {\n this._appLookups.set(s, { creator: Address.fromString(s), apps: { [appMetadata.name]: appMetadata } })\n } else {\n lookup.apps[appMetadata.name] = appMetadata\n }\n }\n\n /**\n * Returns a lookup of name => app metadata (id, address, ...metadata) for all apps created by the given account that have\n * an [ARC-2](https://github.com/algorandfoundation/ARCs/blob/main/ARCs/arc-0002.md) `AppDeployNote` as the transaction\n * note of the app creation transaction.\n *\n * This function caches the result for the given creator account so that subsequent calls will not require an indexer lookup.\n *\n * If the `AppManager` instance wasn't created with an indexer client, this function will throw an error.\n *\n * @param creator The address of the account that is the creator of the apps you want to search for\n * @param ignoreCache Whether or not to ignore the cache and force a lookup, default: use the cache\n * @returns A name-based lookup of the app metadata\n * @example\n * ```ts\n * const result = await deployer.getCreatorAppsByName(creator)\n */\n async getCreatorAppsByName(creator: ReadableAddress, ignoreCache?: boolean): Promise<AppLookup> {\n const appLookup: Record<string, AppMetadata> = {}\n\n const creatorAddress = getAddress(creator)\n const creatorString = creatorAddress.toString()\n if (!ignoreCache && this._appLookups.has(creatorString)) {\n return this._appLookups.get(creatorString)!\n }\n\n if (!this._indexer) {\n throw new Error(`Didn't receive an indexer client when this AppManager was created, but received a call to getCreatorApps`)\n }\n\n // Extract all apps that account created\n const createdApps = (await lookupAccountCreatedApplicationByAddress(this._indexer, creatorString))\n .map((a) => {\n return { id: a.id, createdAtRound: a.createdAtRound!, deleted: a.deleted }\n })\n .sort((a, b) => Number(a.createdAtRound - b.createdAtRound))\n\n // For each app that account created (in parallel)...\n const apps = await Promise.all(\n createdApps.map(async (createdApp) => {\n // Find any app transactions for that app in the round it was created (should always just be a single creation transaction)\n const appTransactions = await searchTransactions(this._indexer!, {\n minRound: createdApp.createdAtRound,\n txType: TransactionType.AppCall,\n applicationId: createdApp.id,\n address: creatorAddress,\n addressRole: 'sender',\n notePrefix: Buffer.from(APP_DEPLOY_NOTE_DAPP).toString('base64'),\n })\n\n // Triple check the transaction is intact by filtering for the one we want:\n // * application-id is 0 when the app is first created\n // * also verify the sender to prevent a potential security risk\n const appCreationTransaction = appTransactions.transactions.filter(\n (t) => t.applicationTransaction?.applicationId === 0n && t.sender.toString() === creatorAddress.toString(),\n )[0]\n\n const latestAppUpdateTransaction = appTransactions.transactions\n .filter((t) => t.sender.toString() === creatorAddress.toString())\n .sort((a, b) =>\n a.confirmedRound === b.confirmedRound\n ? (b.intraRoundOffset! - a.intraRoundOffset!) / 10\n : Number(b.confirmedRound! - a.confirmedRound!),\n )[0]\n\n if (!appCreationTransaction?.note)\n // No note; ignoring\n return null\n\n return { createdApp, appCreationTransaction, latestAppUpdateTransaction }\n }),\n )\n\n apps\n .filter((a) => a !== null)\n .forEach((a) => {\n const { createdApp, appCreationTransaction, latestAppUpdateTransaction } = a!\n\n const parseNote = (note?: string) => {\n if (!note) {\n // No note; ignoring...\n return\n }\n\n if (!note.startsWith(`${APP_DEPLOY_NOTE_DAPP}:j{`))\n // Clearly not APP_DEPLOY JSON; ignoring...\n return\n\n return JSON.parse(note.substring(APP_DEPLOY_NOTE_DAPP.length + 2)) as AppDeployMetadata\n }\n\n try {\n const creationNote = parseNote(\n appCreationTransaction.note ? Buffer.from(appCreationTransaction.note).toString('utf-8') : undefined,\n )\n const updateNote = parseNote(\n latestAppUpdateTransaction.note ? Buffer.from(latestAppUpdateTransaction.note).toString('utf-8') : undefined,\n )\n if (creationNote?.name) {\n appLookup[creationNote.name] = {\n appId: createdApp.id,\n appAddress: getApplicationAddress(createdApp.id),\n createdMetadata: creationNote,\n createdRound: appCreationTransaction.confirmedRound ?? 0n,\n ...(updateNote ?? creationNote),\n updatedRound: latestAppUpdateTransaction?.confirmedRound ?? 0n,\n deleted: createdApp.deleted ?? false,\n }\n }\n } catch (e) {\n Config.logger.warn(\n `Received error trying to retrieve app with ${createdApp.id} for creator ${creatorAddress}; failing silently`,\n e,\n )\n return\n }\n })\n\n const lookup = {\n creator: creatorAddress,\n apps: appLookup,\n }\n\n this._appLookups.set(creatorString, lookup)\n\n return lookup\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"app-deployer.js","names":["TransactionComposer","APP_DEPLOY_NOTE_DAPP","getAddress","getApplicationAddress","calculateExtraProgramPages","Address","lookupAccountCreatedApplicationByAddress","searchTransactions"],"sources":["../src/app-deployer.ts"],"sourcesContent":["import { ABIReturn } from '@algorandfoundation/algokit-abi'\nimport { Address, Expand, getAddress, getApplicationAddress, ReadableAddress } from '@algorandfoundation/algokit-common'\nimport { IndexerClient } from '@algorandfoundation/algokit-indexer-client'\nimport { TransactionType } from '@algorandfoundation/algokit-transact'\nimport { AlgorandClientTransactionSender } from './algorand-client-transaction-sender'\nimport {\n APP_DEPLOY_NOTE_DAPP,\n OnSchemaBreak,\n OnUpdate,\n type AppDeployMetadata,\n type SendAppCreateTransactionResult,\n type SendAppUpdateTransactionResult,\n type TealTemplateParams,\n} from './app'\nimport { AppManager } from './app-manager'\nimport {\n AppCreateMethodCall,\n AppCreateParams,\n AppDeleteMethodCall,\n AppDeleteParams,\n AppUpdateMethodCall,\n AppUpdateParams,\n TransactionComposer,\n} from './composer'\nimport { Config } from './config'\nimport { lookupAccountCreatedApplicationByAddress, searchTransactions } from './indexer-client'\nimport { ConfirmedTransactionResult, SendParams } from './transaction/types'\nimport { calculateExtraProgramPages } from './util'\n\n/** Params to specify an update transaction for an app deployment */\nexport type DeployAppUpdateParams = Expand<Omit<AppUpdateParams, 'appId' | 'approvalProgram' | 'clearStateProgram'>>\n/** Params to specify an update method call for an app deployment */\nexport type DeployAppUpdateMethodCall = Expand<Omit<AppUpdateMethodCall, 'appId' | 'approvalProgram' | 'clearStateProgram'>>\n/** Params to specify a transaction for an app deployment */\nexport type DeployAppDeleteParams = Expand<Omit<AppDeleteParams, 'appId'>>\n/** Params to specify a delete method call for an app deployment */\nexport type DeployAppDeleteMethodCall = Expand<Omit<AppDeleteMethodCall, 'appId'>>\n\n/** The parameters to idempotently deploy an app */\nexport type AppDeployParams = Expand<\n SendParams & {\n /** The deployment metadata */\n metadata: AppDeployMetadata\n /** Any deploy-time parameters to replace in the TEAL code before compiling it (used if teal code is passed in as a string) */\n deployTimeParams?: TealTemplateParams\n /** What action to perform if a schema break (storage schema or extra pages change) is detected:\n *\n * * `fail` - Fail the deployment (throw an error, **default**)\n * * `replace` - Delete the old app and create a new one\n * * `append` - Deploy a new app and leave the old one as is\n */\n onSchemaBreak?: 'replace' | 'fail' | 'append' | OnSchemaBreak\n /** What action to perform if a TEAL code update is detected:\n *\n * * `fail` - Fail the deployment (throw an error, **default**)\n * * `update` - Update the app with the new TEAL code\n * * `replace` - Delete the old app and create a new one\n * * `append` - Deploy a new app and leave the old one as is\n */\n onUpdate?: 'update' | 'replace' | 'fail' | 'append' | OnUpdate\n /** Create transaction parameters to use if a create needs to be issued as part of deployment */\n createParams: AppCreateParams | AppCreateMethodCall\n /** Update transaction parameters to use if an update needs to be issued as part of deployment */\n updateParams: DeployAppUpdateParams | DeployAppUpdateMethodCall\n /** Delete transaction parameters to use if a delete needs to be issued as part of deployment */\n deleteParams: DeployAppDeleteParams | DeployAppDeleteMethodCall\n /** Optional cached value of the existing apps for the given creator; use this to avoid an indexer lookup */\n existingDeployments?: AppLookup\n /** Whether or not to ignore the app metadata cache and force a lookup, default: use the cache **/\n ignoreCache?: boolean\n }\n>\n\n/** The metadata that can be collected about a deployed app */\nexport interface AppMetadata extends AppDeployMetadata {\n /** The id of the app */\n appId: bigint\n /** The Algorand address of the account associated with the app */\n appAddress: Address\n /** The round the app was created */\n createdRound: bigint\n /** The last round that the app was updated */\n updatedRound: bigint\n /** The metadata when the app was created */\n createdMetadata: AppDeployMetadata\n /** Whether or not the app is deleted */\n deleted: boolean\n}\n\n/** A lookup of name -> Algorand app for a creator */\nexport interface AppLookup {\n /** The address of the creator associated with this lookup */\n creator: Readonly<Address>\n /** A hash map of app name to app metadata */\n apps: {\n [name: string]: AppMetadata\n }\n}\n\nexport type AppDeployResult =\n | Expand<{ operationPerformed: 'create' } & Omit<AppMetadata, 'appId' | 'appAddress'> & SendAppCreateTransactionResult>\n | Expand<{ operationPerformed: 'update' } & AppMetadata & SendAppUpdateTransactionResult>\n | Expand<\n { operationPerformed: 'replace' } & Omit<AppMetadata, 'appId' | 'appAddress'> &\n SendAppCreateTransactionResult & {\n deleteReturn?: ABIReturn\n deleteResult: ConfirmedTransactionResult\n }\n >\n | Expand<{ operationPerformed: 'nothing' } & AppMetadata>\n\n/** Allows management of deployment and deployment metadata of applications. */\nexport class AppDeployer {\n private _appManager: AppManager\n private _transactionSender: AlgorandClientTransactionSender\n private _indexer?: IndexerClient\n private _appLookups = new Map<string, AppLookup>()\n\n /**\n * Creates an `AppManager`\n * @param appManager An `AppManager` instance\n * @param transactionSender An `AlgorandClientTransactionSender` instance\n * @param indexer An optional indexer instance; supply if you want to indexer to look up app metadata\n * @example\n * ```ts\n * const deployer = new AppDeployer(appManager, transactionSender, indexer)\n * ```\n */\n constructor(appManager: AppManager, transactionSender: AlgorandClientTransactionSender, indexer?: IndexerClient) {\n this._appManager = appManager\n this._transactionSender = transactionSender\n this._indexer = indexer\n }\n\n /**\n * Idempotently deploy (create if not exists, update if changed) an app against the given name for the given creator account, including deploy-time TEAL template placeholder substitutions (if specified).\n *\n * To understand the architecture decisions behind this functionality please see https://github.com/algorandfoundation/algokit-cli/blob/main/docs/architecture-decisions/2023-01-12_smart-contract-deployment.md\n *\n * **Note:** When using the return from this function be sure to check `operationPerformed` to get access to various return properties like `transaction`, `confirmation` and `deleteResult`.\n *\n * **Note:** if there is a breaking state schema change to an existing app (and `onSchemaBreak` is set to `'replace'`) the existing app will be deleted and re-created.\n *\n * **Note:** if there is an update (different TEAL code) to an existing app (and `onUpdate` is set to `'replace'`) the existing app will be deleted and re-created.\n * @param deployment The arguments to control the app deployment\n * @returns The result of the deployment\n * @example\n * ```ts\n * const deployResult = await deployer.deploy({\n * createParams: {\n * sender: 'SENDER_ADDRESS',\n * approvalProgram: 'APPROVAL PROGRAM',\n * clearStateProgram: 'CLEAR PROGRAM',\n * schema: {\n * globalByteSlices: 0,\n * globalInts: 0,\n * localByteSlices: 0,\n * localInts: 0\n * }\n * },\n * updateParams: {\n * sender: 'SENDER_ADDRESS'\n * },\n * deleteParams: {\n * sender: 'SENDER_ADDRESS'\n * },\n * metadata: { name: 'my_app', version: '2.0', updatable: false, deletable: false },\n * onSchemaBreak: 'append',\n * onUpdate: 'append'\n * })\n * ```\n */\n async deploy(deployment: AppDeployParams): Promise<AppDeployResult> {\n const {\n metadata,\n deployTimeParams,\n onSchemaBreak,\n onUpdate,\n createParams,\n updateParams,\n deleteParams,\n existingDeployments,\n ignoreCache,\n ...sendParams\n } = deployment\n\n // Set creation note\n\n createParams.note = updateParams.note = TransactionComposer.arc2Note({\n dAppName: APP_DEPLOY_NOTE_DAPP,\n data: metadata,\n format: 'j',\n })\n\n // Check for required fields\n\n if (existingDeployments && existingDeployments.creator.toString() !== createParams.sender.toString()) {\n throw new Error(\n `Received invalid existingDeployments value for creator ${existingDeployments.creator} when attempting to deploy for creator ${getAddress(createParams.sender)}`,\n )\n }\n if (!existingDeployments && !this._indexer) {\n throw new Error(\n `Didn't receive an indexer client when this AppManager was created, but also didn't receive an existingDeployments cache - one of them must be provided`,\n )\n }\n\n Config.getLogger(sendParams?.suppressLog).info(\n `Idempotently deploying app \"${metadata.name}\" from creator ${getAddress(createParams.sender)} using ${createParams.approvalProgram.length} bytes of ${typeof createParams.approvalProgram === 'string' ? 'teal code' : 'AVM bytecode'} and ${createParams.clearStateProgram.length} bytes of ${typeof createParams.approvalProgram === 'string' ? 'teal code' : 'AVM bytecode'}`,\n )\n\n // Compile code if required\n\n const compiledApproval =\n typeof createParams.approvalProgram === 'string'\n ? await this._appManager.compileTealTemplate(createParams.approvalProgram, deployTimeParams, metadata)\n : undefined\n const approvalProgram = compiledApproval ? compiledApproval.compiledBase64ToBytes : createParams.approvalProgram\n\n const compiledClear =\n typeof createParams.clearStateProgram === 'string'\n ? await this._appManager.compileTealTemplate(createParams.clearStateProgram, deployTimeParams)\n : undefined\n const clearStateProgram = compiledClear ? compiledClear.compiledBase64ToBytes : createParams.clearStateProgram\n\n // Define routines for create, update, and replace\n\n const createApp = async () => {\n const result = await ('method' in createParams\n ? this._transactionSender.appCreateMethodCall({ ...createParams, approvalProgram, clearStateProgram, ...sendParams })\n : this._transactionSender.appCreate({ ...createParams, approvalProgram, clearStateProgram, ...sendParams }))\n const appMetadata: AppMetadata = {\n appId: result.appId,\n appAddress: result.appAddress,\n ...metadata,\n createdMetadata: metadata,\n createdRound: BigInt(result.confirmation.confirmedRound!),\n updatedRound: BigInt(result.confirmation.confirmedRound!),\n deleted: false,\n }\n this.updateAppLookup(createParams.sender, appMetadata)\n return {\n operationPerformed: 'create',\n compiledApproval,\n compiledClear,\n ...result,\n ...appMetadata,\n } satisfies SendAppCreateTransactionResult & AppMetadata & { operationPerformed: 'create' }\n }\n const updateApp = async (existingApp: AppMetadata) => {\n Config.getLogger(sendParams?.suppressLog).info(\n `Updating existing ${metadata.name} app for ${getAddress(createParams.sender)} to version ${metadata.version}.`,\n )\n const result = await ('method' in updateParams\n ? this._transactionSender.appUpdateMethodCall({\n appId: existingApp.appId,\n approvalProgram,\n clearStateProgram,\n ...updateParams,\n ...sendParams,\n })\n : this._transactionSender.appUpdate({\n appId: existingApp.appId,\n approvalProgram,\n clearStateProgram,\n ...updateParams,\n ...sendParams,\n }))\n const appMetadata: AppMetadata = {\n appId: existingApp.appId,\n appAddress: existingApp.appAddress,\n createdMetadata: existingApp.createdMetadata,\n createdRound: existingApp.createdRound,\n updatedRound: BigInt(result.confirmation.confirmedRound!),\n ...metadata,\n deleted: false,\n }\n this.updateAppLookup(createParams.sender, appMetadata)\n return {\n operationPerformed: 'update',\n compiledApproval,\n compiledClear,\n ...result,\n ...appMetadata,\n } satisfies SendAppUpdateTransactionResult & AppMetadata & { operationPerformed: 'update' }\n }\n const replaceApp = async (existingApp: AppMetadata) => {\n Config.getLogger(sendParams?.suppressLog).info(\n `Deploying a new ${metadata.name} app for ${getAddress(createParams.sender)}; deploying app with version ${metadata.version}.`,\n )\n\n Config.getLogger(sendParams?.suppressLog).warn(\n `Deleting existing ${metadata.name} app with id ${existingApp.appId} from ${getAddress(deleteParams.sender)} account.`,\n )\n\n const composer = this._transactionSender.newGroup()\n if ('method' in createParams) {\n composer.addAppCreateMethodCall({ ...createParams, approvalProgram, clearStateProgram })\n } else {\n composer.addAppCreate({ ...createParams, approvalProgram, clearStateProgram })\n }\n const createIndex = await composer.count()\n if ('method' in deleteParams) {\n composer.addAppDeleteMethodCall({ appId: existingApp.appId, ...deleteParams })\n } else {\n composer.addAppDelete({ appId: existingApp.appId, ...deleteParams })\n }\n const result = await composer.send({ ...sendParams })\n const confirmation = result.confirmations.at(createIndex - 1)!\n const transaction = result.transactions.at(createIndex - 1)!\n const deleteTransaction = result.transactions.at(-1)!\n\n Config.getLogger(sendParams?.suppressLog).warn(\n `Sent transactions ${transaction.txId()} to create app with id ${confirmation.appId} and ${deleteTransaction.txId()} to delete app with id ${\n existingApp.appId\n } from ${getAddress(createParams.sender)} account.`,\n )\n\n const appMetadata: AppMetadata = {\n appId: confirmation.appId!,\n appAddress: getApplicationAddress(confirmation.appId!),\n ...metadata,\n createdMetadata: metadata,\n createdRound: BigInt(confirmation.confirmedRound!),\n updatedRound: BigInt(confirmation.confirmedRound!),\n deleted: false,\n }\n this.updateAppLookup(createParams.sender, appMetadata)\n\n return {\n operationPerformed: 'replace',\n ...result,\n compiledApproval,\n compiledClear,\n transaction,\n confirmation,\n return: 'method' in createParams ? result.returns?.[0] : undefined,\n deleteReturn: 'method' in deleteParams ? result.returns?.at(-1) : undefined,\n ...appMetadata,\n deleteResult: { transaction: deleteTransaction, confirmation: result.confirmations.at(-1)! },\n } satisfies { operationPerformed: 'replace' } & AppMetadata &\n SendAppCreateTransactionResult & {\n deleteReturn?: ABIReturn\n deleteResult: ConfirmedTransactionResult\n }\n }\n\n // Lookup existing app metadata\n\n const apps = existingDeployments ?? (await this.getCreatorAppsByName(createParams.sender, ignoreCache))\n\n const existingApp = apps.apps[metadata.name]\n if (!existingApp || existingApp.deleted) {\n Config.getLogger(sendParams?.suppressLog).info(\n `App ${metadata.name} not found in apps created by ${getAddress(createParams.sender)}; deploying app with version ${metadata.version}.`,\n )\n\n return await createApp()\n }\n\n Config.getLogger(sendParams?.suppressLog).info(\n `Existing app ${metadata.name} found by creator ${getAddress(createParams.sender)}, with app id ${existingApp.appId} and version ${existingApp.version}.`,\n )\n\n const existingAppRecord = await this._appManager.getById(existingApp.appId)\n const existingApproval = Buffer.from(existingAppRecord.approvalProgram).toString('base64')\n const existingClear = Buffer.from(existingAppRecord.clearStateProgram).toString('base64')\n const extraPages = existingAppRecord.extraProgramPages ?? 0\n\n const newApprovalBytes = Buffer.from(approvalProgram)\n const newClearBytes = Buffer.from(clearStateProgram)\n const newApproval = newApprovalBytes.toString('base64')\n const newClear = newClearBytes.toString('base64')\n const newExtraPages = calculateExtraProgramPages(newApprovalBytes, newClearBytes)\n\n // Check for changes\n\n const isUpdate = newApproval !== existingApproval || newClear !== existingClear\n const isSchemaBreak =\n existingAppRecord.localInts < (createParams.schema?.localInts ?? 0) ||\n existingAppRecord.globalInts < (createParams.schema?.globalInts ?? 0) ||\n existingAppRecord.localByteSlices < (createParams.schema?.localByteSlices ?? 0) ||\n existingAppRecord.globalByteSlices < (createParams.schema?.globalByteSlices ?? 0) ||\n extraPages < newExtraPages\n\n if (isSchemaBreak) {\n Config.getLogger(sendParams?.suppressLog).warn(`Detected a breaking app schema change in app ${existingApp.appId}:`, {\n from: {\n globalInts: existingAppRecord.globalInts,\n globalByteSlices: existingAppRecord.globalByteSlices,\n localInts: existingAppRecord.localInts,\n localByteSlices: existingAppRecord.localByteSlices,\n extraProgramPages: extraPages,\n },\n to: { ...createParams.schema, extraProgramPages: newExtraPages },\n })\n\n if (onSchemaBreak === undefined || onSchemaBreak === 'fail' || onSchemaBreak === OnSchemaBreak.Fail) {\n throw new Error(\n 'Schema break detected and onSchemaBreak=OnSchemaBreak.Fail, stopping deployment. ' +\n 'If you want to try deleting and recreating the app then ' +\n 're-run with onSchemaBreak=OnSchemaBreak.ReplaceApp',\n )\n }\n\n if (onSchemaBreak === 'append' || onSchemaBreak === OnSchemaBreak.AppendApp) {\n Config.getLogger(sendParams?.suppressLog).info('onSchemaBreak=AppendApp, will attempt to create a new app')\n return await createApp()\n }\n\n if (existingApp.deletable) {\n Config.getLogger(sendParams?.suppressLog).info(\n 'App is deletable and onSchemaBreak=ReplaceApp, will attempt to create new app and delete old app',\n )\n } else {\n Config.getLogger(sendParams?.suppressLog).info(\n 'App is not deletable but onSchemaBreak=ReplaceApp, will attempt to delete app, delete will most likely fail',\n )\n }\n\n return await replaceApp(existingApp)\n }\n\n if (isUpdate) {\n Config.getLogger(sendParams?.suppressLog).info(\n `Detected a TEAL update in app ${existingApp.appId} for creator ${getAddress(createParams.sender)}`,\n )\n\n if (onUpdate === undefined || onUpdate === 'fail' || onUpdate === OnUpdate.Fail) {\n throw new Error('Update detected and onUpdate=Fail, stopping deployment. Try a different onUpdate value to not fail.')\n }\n\n if (onUpdate === 'append' || onUpdate === OnUpdate.AppendApp) {\n Config.getLogger(sendParams?.suppressLog).info('onUpdate=AppendApp, will attempt to create a new app')\n return await createApp()\n }\n\n if (onUpdate === 'update' || onUpdate === OnUpdate.UpdateApp) {\n if (existingApp.updatable) {\n Config.getLogger(sendParams?.suppressLog).info(`App is updatable and onUpdate=UpdateApp, updating app...`)\n } else {\n Config.getLogger(sendParams?.suppressLog).warn(\n `App is not updatable but onUpdate=UpdateApp, will attempt to update app, update will most likely fail`,\n )\n }\n\n return await updateApp(existingApp)\n }\n\n if (onUpdate === 'replace' || onUpdate === OnUpdate.ReplaceApp) {\n if (existingApp.deletable) {\n Config.getLogger(sendParams?.suppressLog).warn(\n 'App is deletable and onUpdate=ReplaceApp, creating new app and deleting old app...',\n )\n } else {\n Config.getLogger(sendParams?.suppressLog).warn(\n 'App is not deletable and onUpdate=ReplaceApp, will attempt to create new app and delete old app, delete will most likely fail',\n )\n }\n\n return await replaceApp(existingApp)\n }\n }\n\n Config.getLogger(sendParams?.suppressLog).debug('No detected changes in app, nothing to do.')\n\n return { ...existingApp, operationPerformed: 'nothing' }\n }\n\n private updateAppLookup(sender: ReadableAddress, appMetadata: AppMetadata) {\n const s = getAddress(sender).toString()\n const lookup = this._appLookups.get(s)\n if (!lookup) {\n this._appLookups.set(s, { creator: Address.fromString(s), apps: { [appMetadata.name]: appMetadata } })\n } else {\n lookup.apps[appMetadata.name] = appMetadata\n }\n }\n\n /**\n * Returns a lookup of name => app metadata (id, address, ...metadata) for all apps created by the given account that have\n * an [ARC-2](https://github.com/algorandfoundation/ARCs/blob/main/ARCs/arc-0002.md) `AppDeployNote` as the transaction\n * note of the app creation transaction.\n *\n * This function caches the result for the given creator account so that subsequent calls will not require an indexer lookup.\n *\n * If the `AppManager` instance wasn't created with an indexer client, this function will throw an error.\n *\n * @param creator The address of the account that is the creator of the apps you want to search for\n * @param ignoreCache Whether or not to ignore the cache and force a lookup, default: use the cache\n * @returns A name-based lookup of the app metadata\n * @example\n * ```ts\n * const result = await deployer.getCreatorAppsByName(creator)\n */\n async getCreatorAppsByName(creator: ReadableAddress, ignoreCache?: boolean): Promise<AppLookup> {\n const appLookup: Record<string, AppMetadata> = {}\n\n const creatorAddress = getAddress(creator)\n const creatorString = creatorAddress.toString()\n if (!ignoreCache && this._appLookups.has(creatorString)) {\n return this._appLookups.get(creatorString)!\n }\n\n if (!this._indexer) {\n throw new Error(`Didn't receive an indexer client when this AppManager was created, but received a call to getCreatorApps`)\n }\n\n // Extract all apps that account created\n const createdApps = (await lookupAccountCreatedApplicationByAddress(this._indexer, creatorString))\n .map((a) => {\n return { id: a.id, createdAtRound: a.createdAtRound!, deleted: a.deleted }\n })\n .sort((a, b) => Number(a.createdAtRound - b.createdAtRound))\n\n // For each app that account created (in parallel)...\n const apps = await Promise.all(\n createdApps.map(async (createdApp) => {\n // Find any app transactions for that app in the round it was created (should always just be a single creation transaction)\n const appTransactions = await searchTransactions(this._indexer!, {\n minRound: createdApp.createdAtRound,\n txType: TransactionType.AppCall,\n applicationId: createdApp.id,\n address: creatorAddress,\n addressRole: 'sender',\n notePrefix: Buffer.from(APP_DEPLOY_NOTE_DAPP).toString('base64'),\n })\n\n // Triple check the transaction is intact by filtering for the one we want:\n // * application-id is 0 when the app is first created\n // * also verify the sender to prevent a potential security risk\n const appCreationTransaction = appTransactions.transactions.filter(\n (t) => t.applicationTransaction?.applicationId === 0n && t.sender.toString() === creatorAddress.toString(),\n )[0]\n\n const latestAppUpdateTransaction = appTransactions.transactions\n .filter((t) => t.sender.toString() === creatorAddress.toString())\n .sort((a, b) =>\n a.confirmedRound === b.confirmedRound\n ? (b.intraRoundOffset! - a.intraRoundOffset!) / 10\n : Number(b.confirmedRound! - a.confirmedRound!),\n )[0]\n\n if (!appCreationTransaction?.note)\n // No note; ignoring\n return null\n\n return { createdApp, appCreationTransaction, latestAppUpdateTransaction }\n }),\n )\n\n apps\n .filter((a) => a !== null)\n .forEach((a) => {\n const { createdApp, appCreationTransaction, latestAppUpdateTransaction } = a!\n\n const parseNote = (note?: string) => {\n if (!note) {\n // No note; ignoring...\n return\n }\n\n if (!note.startsWith(`${APP_DEPLOY_NOTE_DAPP}:j{`))\n // Clearly not APP_DEPLOY JSON; ignoring...\n return\n\n return JSON.parse(note.substring(APP_DEPLOY_NOTE_DAPP.length + 2)) as AppDeployMetadata\n }\n\n try {\n const creationNote = parseNote(\n appCreationTransaction.note ? Buffer.from(appCreationTransaction.note).toString('utf-8') : undefined,\n )\n const updateNote = parseNote(\n latestAppUpdateTransaction.note ? Buffer.from(latestAppUpdateTransaction.note).toString('utf-8') : undefined,\n )\n if (creationNote?.name) {\n appLookup[creationNote.name] = {\n appId: createdApp.id,\n appAddress: getApplicationAddress(createdApp.id),\n createdMetadata: creationNote,\n createdRound: appCreationTransaction.confirmedRound ?? 0n,\n ...(updateNote ?? creationNote),\n updatedRound: latestAppUpdateTransaction?.confirmedRound ?? 0n,\n deleted: createdApp.deleted ?? false,\n }\n }\n } catch (e) {\n Config.logger.warn(\n `Received error trying to retrieve app with ${createdApp.id} for creator ${creatorAddress}; failing silently`,\n e,\n )\n return\n }\n })\n\n const lookup = {\n creator: creatorAddress,\n apps: appLookup,\n }\n\n this._appLookups.set(creatorString, lookup)\n\n return lookup\n }\n}\n"],"mappings":"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"}
package/app-deployer.mjs CHANGED
@@ -1,7 +1,7 @@
1
1
  import { Address, getAddress, getApplicationAddress } from "./packages/common/src/address.mjs";
2
- import { TransactionType } from "./packages/transact/src/transactions/transaction-type.mjs";
2
+ import "./packages/transact/src/transactions/transaction-type.mjs";
3
3
  import { Config } from "./config.mjs";
4
- import { APP_DEPLOY_NOTE_DAPP, OnSchemaBreak, OnUpdate } from "./app.mjs";
4
+ import { APP_DEPLOY_NOTE_DAPP } from "./app.mjs";
5
5
  import { calculateExtraProgramPages } from "./util.mjs";
6
6
  import { TransactionComposer } from "./composer.mjs";
7
7
  import { lookupAccountCreatedApplicationByAddress, searchTransactions } from "./indexer-client/indexer-lookup.mjs";
@@ -226,8 +226,8 @@ var AppDeployer = class {
226
226
  extraProgramPages: newExtraPages
227
227
  }
228
228
  });
229
- if (onSchemaBreak === void 0 || onSchemaBreak === "fail" || onSchemaBreak === OnSchemaBreak.Fail) throw new Error("Schema break detected and onSchemaBreak=OnSchemaBreak.Fail, stopping deployment. If you want to try deleting and recreating the app then re-run with onSchemaBreak=OnSchemaBreak.ReplaceApp");
230
- if (onSchemaBreak === "append" || onSchemaBreak === OnSchemaBreak.AppendApp) {
229
+ if (onSchemaBreak === void 0 || onSchemaBreak === "fail" || onSchemaBreak === 0) throw new Error("Schema break detected and onSchemaBreak=OnSchemaBreak.Fail, stopping deployment. If you want to try deleting and recreating the app then re-run with onSchemaBreak=OnSchemaBreak.ReplaceApp");
230
+ if (onSchemaBreak === "append" || onSchemaBreak === 2) {
231
231
  Config.getLogger(sendParams?.suppressLog).info("onSchemaBreak=AppendApp, will attempt to create a new app");
232
232
  return await createApp();
233
233
  }
@@ -237,17 +237,17 @@ var AppDeployer = class {
237
237
  }
238
238
  if (isUpdate) {
239
239
  Config.getLogger(sendParams?.suppressLog).info(`Detected a TEAL update in app ${existingApp.appId} for creator ${getAddress(createParams.sender)}`);
240
- if (onUpdate === void 0 || onUpdate === "fail" || onUpdate === OnUpdate.Fail) throw new Error("Update detected and onUpdate=Fail, stopping deployment. Try a different onUpdate value to not fail.");
241
- if (onUpdate === "append" || onUpdate === OnUpdate.AppendApp) {
240
+ if (onUpdate === void 0 || onUpdate === "fail" || onUpdate === 0) throw new Error("Update detected and onUpdate=Fail, stopping deployment. Try a different onUpdate value to not fail.");
241
+ if (onUpdate === "append" || onUpdate === 3) {
242
242
  Config.getLogger(sendParams?.suppressLog).info("onUpdate=AppendApp, will attempt to create a new app");
243
243
  return await createApp();
244
244
  }
245
- if (onUpdate === "update" || onUpdate === OnUpdate.UpdateApp) {
245
+ if (onUpdate === "update" || onUpdate === 1) {
246
246
  if (existingApp.updatable) Config.getLogger(sendParams?.suppressLog).info(`App is updatable and onUpdate=UpdateApp, updating app...`);
247
247
  else Config.getLogger(sendParams?.suppressLog).warn(`App is not updatable but onUpdate=UpdateApp, will attempt to update app, update will most likely fail`);
248
248
  return await updateApp(existingApp);
249
249
  }
250
- if (onUpdate === "replace" || onUpdate === OnUpdate.ReplaceApp) {
250
+ if (onUpdate === "replace" || onUpdate === 2) {
251
251
  if (existingApp.deletable) Config.getLogger(sendParams?.suppressLog).warn("App is deletable and onUpdate=ReplaceApp, creating new app and deleting old app...");
252
252
  else Config.getLogger(sendParams?.suppressLog).warn("App is not deletable and onUpdate=ReplaceApp, will attempt to create new app and delete old app, delete will most likely fail");
253
253
  return await replaceApp(existingApp);
@@ -300,7 +300,7 @@ var AppDeployer = class {
300
300
  (await Promise.all(createdApps.map(async (createdApp) => {
301
301
  const appTransactions = await searchTransactions(this._indexer, {
302
302
  minRound: createdApp.createdAtRound,
303
- txType: TransactionType.AppCall,
303
+ txType: "appl",
304
304
  applicationId: createdApp.id,
305
305
  address: creatorAddress,
306
306
  addressRole: "sender",
@@ -1 +1 @@
1
- {"version":3,"file":"app-deployer.mjs","names":[],"sources":["../src/app-deployer.ts"],"sourcesContent":["import { ABIReturn } from '@algorandfoundation/algokit-abi'\nimport { Address, Expand, getAddress, getApplicationAddress, ReadableAddress } from '@algorandfoundation/algokit-common'\nimport { IndexerClient } from '@algorandfoundation/algokit-indexer-client'\nimport { TransactionType } from '@algorandfoundation/algokit-transact'\nimport { AlgorandClientTransactionSender } from './algorand-client-transaction-sender'\nimport {\n APP_DEPLOY_NOTE_DAPP,\n OnSchemaBreak,\n OnUpdate,\n type AppDeployMetadata,\n type SendAppCreateTransactionResult,\n type SendAppUpdateTransactionResult,\n type TealTemplateParams,\n} from './app'\nimport { AppManager } from './app-manager'\nimport {\n AppCreateMethodCall,\n AppCreateParams,\n AppDeleteMethodCall,\n AppDeleteParams,\n AppUpdateMethodCall,\n AppUpdateParams,\n TransactionComposer,\n} from './composer'\nimport { Config } from './config'\nimport { lookupAccountCreatedApplicationByAddress, searchTransactions } from './indexer-client'\nimport { ConfirmedTransactionResult, SendParams } from './transaction/types'\nimport { calculateExtraProgramPages } from './util'\n\n/** Params to specify an update transaction for an app deployment */\nexport type DeployAppUpdateParams = Expand<Omit<AppUpdateParams, 'appId' | 'approvalProgram' | 'clearStateProgram'>>\n/** Params to specify an update method call for an app deployment */\nexport type DeployAppUpdateMethodCall = Expand<Omit<AppUpdateMethodCall, 'appId' | 'approvalProgram' | 'clearStateProgram'>>\n/** Params to specify a transaction for an app deployment */\nexport type DeployAppDeleteParams = Expand<Omit<AppDeleteParams, 'appId'>>\n/** Params to specify a delete method call for an app deployment */\nexport type DeployAppDeleteMethodCall = Expand<Omit<AppDeleteMethodCall, 'appId'>>\n\n/** The parameters to idempotently deploy an app */\nexport type AppDeployParams = Expand<\n SendParams & {\n /** The deployment metadata */\n metadata: AppDeployMetadata\n /** Any deploy-time parameters to replace in the TEAL code before compiling it (used if teal code is passed in as a string) */\n deployTimeParams?: TealTemplateParams\n /** What action to perform if a schema break (storage schema or extra pages change) is detected:\n *\n * * `fail` - Fail the deployment (throw an error, **default**)\n * * `replace` - Delete the old app and create a new one\n * * `append` - Deploy a new app and leave the old one as is\n */\n onSchemaBreak?: 'replace' | 'fail' | 'append' | OnSchemaBreak\n /** What action to perform if a TEAL code update is detected:\n *\n * * `fail` - Fail the deployment (throw an error, **default**)\n * * `update` - Update the app with the new TEAL code\n * * `replace` - Delete the old app and create a new one\n * * `append` - Deploy a new app and leave the old one as is\n */\n onUpdate?: 'update' | 'replace' | 'fail' | 'append' | OnUpdate\n /** Create transaction parameters to use if a create needs to be issued as part of deployment */\n createParams: AppCreateParams | AppCreateMethodCall\n /** Update transaction parameters to use if an update needs to be issued as part of deployment */\n updateParams: DeployAppUpdateParams | DeployAppUpdateMethodCall\n /** Delete transaction parameters to use if a delete needs to be issued as part of deployment */\n deleteParams: DeployAppDeleteParams | DeployAppDeleteMethodCall\n /** Optional cached value of the existing apps for the given creator; use this to avoid an indexer lookup */\n existingDeployments?: AppLookup\n /** Whether or not to ignore the app metadata cache and force a lookup, default: use the cache **/\n ignoreCache?: boolean\n }\n>\n\n/** The metadata that can be collected about a deployed app */\nexport interface AppMetadata extends AppDeployMetadata {\n /** The id of the app */\n appId: bigint\n /** The Algorand address of the account associated with the app */\n appAddress: Address\n /** The round the app was created */\n createdRound: bigint\n /** The last round that the app was updated */\n updatedRound: bigint\n /** The metadata when the app was created */\n createdMetadata: AppDeployMetadata\n /** Whether or not the app is deleted */\n deleted: boolean\n}\n\n/** A lookup of name -> Algorand app for a creator */\nexport interface AppLookup {\n /** The address of the creator associated with this lookup */\n creator: Readonly<Address>\n /** A hash map of app name to app metadata */\n apps: {\n [name: string]: AppMetadata\n }\n}\n\nexport type AppDeployResult =\n | Expand<{ operationPerformed: 'create' } & Omit<AppMetadata, 'appId' | 'appAddress'> & SendAppCreateTransactionResult>\n | Expand<{ operationPerformed: 'update' } & AppMetadata & SendAppUpdateTransactionResult>\n | Expand<\n { operationPerformed: 'replace' } & Omit<AppMetadata, 'appId' | 'appAddress'> &\n SendAppCreateTransactionResult & {\n deleteReturn?: ABIReturn\n deleteResult: ConfirmedTransactionResult\n }\n >\n | Expand<{ operationPerformed: 'nothing' } & AppMetadata>\n\n/** Allows management of deployment and deployment metadata of applications. */\nexport class AppDeployer {\n private _appManager: AppManager\n private _transactionSender: AlgorandClientTransactionSender\n private _indexer?: IndexerClient\n private _appLookups = new Map<string, AppLookup>()\n\n /**\n * Creates an `AppManager`\n * @param appManager An `AppManager` instance\n * @param transactionSender An `AlgorandClientTransactionSender` instance\n * @param indexer An optional indexer instance; supply if you want to indexer to look up app metadata\n * @example\n * ```ts\n * const deployer = new AppDeployer(appManager, transactionSender, indexer)\n * ```\n */\n constructor(appManager: AppManager, transactionSender: AlgorandClientTransactionSender, indexer?: IndexerClient) {\n this._appManager = appManager\n this._transactionSender = transactionSender\n this._indexer = indexer\n }\n\n /**\n * Idempotently deploy (create if not exists, update if changed) an app against the given name for the given creator account, including deploy-time TEAL template placeholder substitutions (if specified).\n *\n * To understand the architecture decisions behind this functionality please see https://github.com/algorandfoundation/algokit-cli/blob/main/docs/architecture-decisions/2023-01-12_smart-contract-deployment.md\n *\n * **Note:** When using the return from this function be sure to check `operationPerformed` to get access to various return properties like `transaction`, `confirmation` and `deleteResult`.\n *\n * **Note:** if there is a breaking state schema change to an existing app (and `onSchemaBreak` is set to `'replace'`) the existing app will be deleted and re-created.\n *\n * **Note:** if there is an update (different TEAL code) to an existing app (and `onUpdate` is set to `'replace'`) the existing app will be deleted and re-created.\n * @param deployment The arguments to control the app deployment\n * @returns The result of the deployment\n * @example\n * ```ts\n * const deployResult = await deployer.deploy({\n * createParams: {\n * sender: 'SENDER_ADDRESS',\n * approvalProgram: 'APPROVAL PROGRAM',\n * clearStateProgram: 'CLEAR PROGRAM',\n * schema: {\n * globalByteSlices: 0,\n * globalInts: 0,\n * localByteSlices: 0,\n * localInts: 0\n * }\n * },\n * updateParams: {\n * sender: 'SENDER_ADDRESS'\n * },\n * deleteParams: {\n * sender: 'SENDER_ADDRESS'\n * },\n * metadata: { name: 'my_app', version: '2.0', updatable: false, deletable: false },\n * onSchemaBreak: 'append',\n * onUpdate: 'append'\n * })\n * ```\n */\n async deploy(deployment: AppDeployParams): Promise<AppDeployResult> {\n const {\n metadata,\n deployTimeParams,\n onSchemaBreak,\n onUpdate,\n createParams,\n updateParams,\n deleteParams,\n existingDeployments,\n ignoreCache,\n ...sendParams\n } = deployment\n\n // Set creation note\n\n createParams.note = updateParams.note = TransactionComposer.arc2Note({\n dAppName: APP_DEPLOY_NOTE_DAPP,\n data: metadata,\n format: 'j',\n })\n\n // Check for required fields\n\n if (existingDeployments && existingDeployments.creator.toString() !== createParams.sender.toString()) {\n throw new Error(\n `Received invalid existingDeployments value for creator ${existingDeployments.creator} when attempting to deploy for creator ${getAddress(createParams.sender)}`,\n )\n }\n if (!existingDeployments && !this._indexer) {\n throw new Error(\n `Didn't receive an indexer client when this AppManager was created, but also didn't receive an existingDeployments cache - one of them must be provided`,\n )\n }\n\n Config.getLogger(sendParams?.suppressLog).info(\n `Idempotently deploying app \"${metadata.name}\" from creator ${getAddress(createParams.sender)} using ${createParams.approvalProgram.length} bytes of ${typeof createParams.approvalProgram === 'string' ? 'teal code' : 'AVM bytecode'} and ${createParams.clearStateProgram.length} bytes of ${typeof createParams.approvalProgram === 'string' ? 'teal code' : 'AVM bytecode'}`,\n )\n\n // Compile code if required\n\n const compiledApproval =\n typeof createParams.approvalProgram === 'string'\n ? await this._appManager.compileTealTemplate(createParams.approvalProgram, deployTimeParams, metadata)\n : undefined\n const approvalProgram = compiledApproval ? compiledApproval.compiledBase64ToBytes : createParams.approvalProgram\n\n const compiledClear =\n typeof createParams.clearStateProgram === 'string'\n ? await this._appManager.compileTealTemplate(createParams.clearStateProgram, deployTimeParams)\n : undefined\n const clearStateProgram = compiledClear ? compiledClear.compiledBase64ToBytes : createParams.clearStateProgram\n\n // Define routines for create, update, and replace\n\n const createApp = async () => {\n const result = await ('method' in createParams\n ? this._transactionSender.appCreateMethodCall({ ...createParams, approvalProgram, clearStateProgram, ...sendParams })\n : this._transactionSender.appCreate({ ...createParams, approvalProgram, clearStateProgram, ...sendParams }))\n const appMetadata: AppMetadata = {\n appId: result.appId,\n appAddress: result.appAddress,\n ...metadata,\n createdMetadata: metadata,\n createdRound: BigInt(result.confirmation.confirmedRound!),\n updatedRound: BigInt(result.confirmation.confirmedRound!),\n deleted: false,\n }\n this.updateAppLookup(createParams.sender, appMetadata)\n return {\n operationPerformed: 'create',\n compiledApproval,\n compiledClear,\n ...result,\n ...appMetadata,\n } satisfies SendAppCreateTransactionResult & AppMetadata & { operationPerformed: 'create' }\n }\n const updateApp = async (existingApp: AppMetadata) => {\n Config.getLogger(sendParams?.suppressLog).info(\n `Updating existing ${metadata.name} app for ${getAddress(createParams.sender)} to version ${metadata.version}.`,\n )\n const result = await ('method' in updateParams\n ? this._transactionSender.appUpdateMethodCall({\n appId: existingApp.appId,\n approvalProgram,\n clearStateProgram,\n ...updateParams,\n ...sendParams,\n })\n : this._transactionSender.appUpdate({\n appId: existingApp.appId,\n approvalProgram,\n clearStateProgram,\n ...updateParams,\n ...sendParams,\n }))\n const appMetadata: AppMetadata = {\n appId: existingApp.appId,\n appAddress: existingApp.appAddress,\n createdMetadata: existingApp.createdMetadata,\n createdRound: existingApp.createdRound,\n updatedRound: BigInt(result.confirmation.confirmedRound!),\n ...metadata,\n deleted: false,\n }\n this.updateAppLookup(createParams.sender, appMetadata)\n return {\n operationPerformed: 'update',\n compiledApproval,\n compiledClear,\n ...result,\n ...appMetadata,\n } satisfies SendAppUpdateTransactionResult & AppMetadata & { operationPerformed: 'update' }\n }\n const replaceApp = async (existingApp: AppMetadata) => {\n Config.getLogger(sendParams?.suppressLog).info(\n `Deploying a new ${metadata.name} app for ${getAddress(createParams.sender)}; deploying app with version ${metadata.version}.`,\n )\n\n Config.getLogger(sendParams?.suppressLog).warn(\n `Deleting existing ${metadata.name} app with id ${existingApp.appId} from ${getAddress(deleteParams.sender)} account.`,\n )\n\n const composer = this._transactionSender.newGroup()\n if ('method' in createParams) {\n composer.addAppCreateMethodCall({ ...createParams, approvalProgram, clearStateProgram })\n } else {\n composer.addAppCreate({ ...createParams, approvalProgram, clearStateProgram })\n }\n const createIndex = await composer.count()\n if ('method' in deleteParams) {\n composer.addAppDeleteMethodCall({ appId: existingApp.appId, ...deleteParams })\n } else {\n composer.addAppDelete({ appId: existingApp.appId, ...deleteParams })\n }\n const result = await composer.send({ ...sendParams })\n const confirmation = result.confirmations.at(createIndex - 1)!\n const transaction = result.transactions.at(createIndex - 1)!\n const deleteTransaction = result.transactions.at(-1)!\n\n Config.getLogger(sendParams?.suppressLog).warn(\n `Sent transactions ${transaction.txId()} to create app with id ${confirmation.appId} and ${deleteTransaction.txId()} to delete app with id ${\n existingApp.appId\n } from ${getAddress(createParams.sender)} account.`,\n )\n\n const appMetadata: AppMetadata = {\n appId: confirmation.appId!,\n appAddress: getApplicationAddress(confirmation.appId!),\n ...metadata,\n createdMetadata: metadata,\n createdRound: BigInt(confirmation.confirmedRound!),\n updatedRound: BigInt(confirmation.confirmedRound!),\n deleted: false,\n }\n this.updateAppLookup(createParams.sender, appMetadata)\n\n return {\n operationPerformed: 'replace',\n ...result,\n compiledApproval,\n compiledClear,\n transaction,\n confirmation,\n return: 'method' in createParams ? result.returns?.[0] : undefined,\n deleteReturn: 'method' in deleteParams ? result.returns?.at(-1) : undefined,\n ...appMetadata,\n deleteResult: { transaction: deleteTransaction, confirmation: result.confirmations.at(-1)! },\n } satisfies { operationPerformed: 'replace' } & AppMetadata &\n SendAppCreateTransactionResult & {\n deleteReturn?: ABIReturn\n deleteResult: ConfirmedTransactionResult\n }\n }\n\n // Lookup existing app metadata\n\n const apps = existingDeployments ?? (await this.getCreatorAppsByName(createParams.sender, ignoreCache))\n\n const existingApp = apps.apps[metadata.name]\n if (!existingApp || existingApp.deleted) {\n Config.getLogger(sendParams?.suppressLog).info(\n `App ${metadata.name} not found in apps created by ${getAddress(createParams.sender)}; deploying app with version ${metadata.version}.`,\n )\n\n return await createApp()\n }\n\n Config.getLogger(sendParams?.suppressLog).info(\n `Existing app ${metadata.name} found by creator ${getAddress(createParams.sender)}, with app id ${existingApp.appId} and version ${existingApp.version}.`,\n )\n\n const existingAppRecord = await this._appManager.getById(existingApp.appId)\n const existingApproval = Buffer.from(existingAppRecord.approvalProgram).toString('base64')\n const existingClear = Buffer.from(existingAppRecord.clearStateProgram).toString('base64')\n const extraPages = existingAppRecord.extraProgramPages ?? 0\n\n const newApprovalBytes = Buffer.from(approvalProgram)\n const newClearBytes = Buffer.from(clearStateProgram)\n const newApproval = newApprovalBytes.toString('base64')\n const newClear = newClearBytes.toString('base64')\n const newExtraPages = calculateExtraProgramPages(newApprovalBytes, newClearBytes)\n\n // Check for changes\n\n const isUpdate = newApproval !== existingApproval || newClear !== existingClear\n const isSchemaBreak =\n existingAppRecord.localInts < (createParams.schema?.localInts ?? 0) ||\n existingAppRecord.globalInts < (createParams.schema?.globalInts ?? 0) ||\n existingAppRecord.localByteSlices < (createParams.schema?.localByteSlices ?? 0) ||\n existingAppRecord.globalByteSlices < (createParams.schema?.globalByteSlices ?? 0) ||\n extraPages < newExtraPages\n\n if (isSchemaBreak) {\n Config.getLogger(sendParams?.suppressLog).warn(`Detected a breaking app schema change in app ${existingApp.appId}:`, {\n from: {\n globalInts: existingAppRecord.globalInts,\n globalByteSlices: existingAppRecord.globalByteSlices,\n localInts: existingAppRecord.localInts,\n localByteSlices: existingAppRecord.localByteSlices,\n extraProgramPages: extraPages,\n },\n to: { ...createParams.schema, extraProgramPages: newExtraPages },\n })\n\n if (onSchemaBreak === undefined || onSchemaBreak === 'fail' || onSchemaBreak === OnSchemaBreak.Fail) {\n throw new Error(\n 'Schema break detected and onSchemaBreak=OnSchemaBreak.Fail, stopping deployment. ' +\n 'If you want to try deleting and recreating the app then ' +\n 're-run with onSchemaBreak=OnSchemaBreak.ReplaceApp',\n )\n }\n\n if (onSchemaBreak === 'append' || onSchemaBreak === OnSchemaBreak.AppendApp) {\n Config.getLogger(sendParams?.suppressLog).info('onSchemaBreak=AppendApp, will attempt to create a new app')\n return await createApp()\n }\n\n if (existingApp.deletable) {\n Config.getLogger(sendParams?.suppressLog).info(\n 'App is deletable and onSchemaBreak=ReplaceApp, will attempt to create new app and delete old app',\n )\n } else {\n Config.getLogger(sendParams?.suppressLog).info(\n 'App is not deletable but onSchemaBreak=ReplaceApp, will attempt to delete app, delete will most likely fail',\n )\n }\n\n return await replaceApp(existingApp)\n }\n\n if (isUpdate) {\n Config.getLogger(sendParams?.suppressLog).info(\n `Detected a TEAL update in app ${existingApp.appId} for creator ${getAddress(createParams.sender)}`,\n )\n\n if (onUpdate === undefined || onUpdate === 'fail' || onUpdate === OnUpdate.Fail) {\n throw new Error('Update detected and onUpdate=Fail, stopping deployment. Try a different onUpdate value to not fail.')\n }\n\n if (onUpdate === 'append' || onUpdate === OnUpdate.AppendApp) {\n Config.getLogger(sendParams?.suppressLog).info('onUpdate=AppendApp, will attempt to create a new app')\n return await createApp()\n }\n\n if (onUpdate === 'update' || onUpdate === OnUpdate.UpdateApp) {\n if (existingApp.updatable) {\n Config.getLogger(sendParams?.suppressLog).info(`App is updatable and onUpdate=UpdateApp, updating app...`)\n } else {\n Config.getLogger(sendParams?.suppressLog).warn(\n `App is not updatable but onUpdate=UpdateApp, will attempt to update app, update will most likely fail`,\n )\n }\n\n return await updateApp(existingApp)\n }\n\n if (onUpdate === 'replace' || onUpdate === OnUpdate.ReplaceApp) {\n if (existingApp.deletable) {\n Config.getLogger(sendParams?.suppressLog).warn(\n 'App is deletable and onUpdate=ReplaceApp, creating new app and deleting old app...',\n )\n } else {\n Config.getLogger(sendParams?.suppressLog).warn(\n 'App is not deletable and onUpdate=ReplaceApp, will attempt to create new app and delete old app, delete will most likely fail',\n )\n }\n\n return await replaceApp(existingApp)\n }\n }\n\n Config.getLogger(sendParams?.suppressLog).debug('No detected changes in app, nothing to do.')\n\n return { ...existingApp, operationPerformed: 'nothing' }\n }\n\n private updateAppLookup(sender: ReadableAddress, appMetadata: AppMetadata) {\n const s = getAddress(sender).toString()\n const lookup = this._appLookups.get(s)\n if (!lookup) {\n this._appLookups.set(s, { creator: Address.fromString(s), apps: { [appMetadata.name]: appMetadata } })\n } else {\n lookup.apps[appMetadata.name] = appMetadata\n }\n }\n\n /**\n * Returns a lookup of name => app metadata (id, address, ...metadata) for all apps created by the given account that have\n * an [ARC-2](https://github.com/algorandfoundation/ARCs/blob/main/ARCs/arc-0002.md) `AppDeployNote` as the transaction\n * note of the app creation transaction.\n *\n * This function caches the result for the given creator account so that subsequent calls will not require an indexer lookup.\n *\n * If the `AppManager` instance wasn't created with an indexer client, this function will throw an error.\n *\n * @param creator The address of the account that is the creator of the apps you want to search for\n * @param ignoreCache Whether or not to ignore the cache and force a lookup, default: use the cache\n * @returns A name-based lookup of the app metadata\n * @example\n * ```ts\n * const result = await deployer.getCreatorAppsByName(creator)\n */\n async getCreatorAppsByName(creator: ReadableAddress, ignoreCache?: boolean): Promise<AppLookup> {\n const appLookup: Record<string, AppMetadata> = {}\n\n const creatorAddress = getAddress(creator)\n const creatorString = creatorAddress.toString()\n if (!ignoreCache && this._appLookups.has(creatorString)) {\n return this._appLookups.get(creatorString)!\n }\n\n if (!this._indexer) {\n throw new Error(`Didn't receive an indexer client when this AppManager was created, but received a call to getCreatorApps`)\n }\n\n // Extract all apps that account created\n const createdApps = (await lookupAccountCreatedApplicationByAddress(this._indexer, creatorString))\n .map((a) => {\n return { id: a.id, createdAtRound: a.createdAtRound!, deleted: a.deleted }\n })\n .sort((a, b) => Number(a.createdAtRound - b.createdAtRound))\n\n // For each app that account created (in parallel)...\n const apps = await Promise.all(\n createdApps.map(async (createdApp) => {\n // Find any app transactions for that app in the round it was created (should always just be a single creation transaction)\n const appTransactions = await searchTransactions(this._indexer!, {\n minRound: createdApp.createdAtRound,\n txType: TransactionType.AppCall,\n applicationId: createdApp.id,\n address: creatorAddress,\n addressRole: 'sender',\n notePrefix: Buffer.from(APP_DEPLOY_NOTE_DAPP).toString('base64'),\n })\n\n // Triple check the transaction is intact by filtering for the one we want:\n // * application-id is 0 when the app is first created\n // * also verify the sender to prevent a potential security risk\n const appCreationTransaction = appTransactions.transactions.filter(\n (t) => t.applicationTransaction?.applicationId === 0n && t.sender.toString() === creatorAddress.toString(),\n )[0]\n\n const latestAppUpdateTransaction = appTransactions.transactions\n .filter((t) => t.sender.toString() === creatorAddress.toString())\n .sort((a, b) =>\n a.confirmedRound === b.confirmedRound\n ? (b.intraRoundOffset! - a.intraRoundOffset!) / 10\n : Number(b.confirmedRound! - a.confirmedRound!),\n )[0]\n\n if (!appCreationTransaction?.note)\n // No note; ignoring\n return null\n\n return { createdApp, appCreationTransaction, latestAppUpdateTransaction }\n }),\n )\n\n apps\n .filter((a) => a !== null)\n .forEach((a) => {\n const { createdApp, appCreationTransaction, latestAppUpdateTransaction } = a!\n\n const parseNote = (note?: string) => {\n if (!note) {\n // No note; ignoring...\n return\n }\n\n if (!note.startsWith(`${APP_DEPLOY_NOTE_DAPP}:j{`))\n // Clearly not APP_DEPLOY JSON; ignoring...\n return\n\n return JSON.parse(note.substring(APP_DEPLOY_NOTE_DAPP.length + 2)) as AppDeployMetadata\n }\n\n try {\n const creationNote = parseNote(\n appCreationTransaction.note ? Buffer.from(appCreationTransaction.note).toString('utf-8') : undefined,\n )\n const updateNote = parseNote(\n latestAppUpdateTransaction.note ? Buffer.from(latestAppUpdateTransaction.note).toString('utf-8') : undefined,\n )\n if (creationNote?.name) {\n appLookup[creationNote.name] = {\n appId: createdApp.id,\n appAddress: getApplicationAddress(createdApp.id),\n createdMetadata: creationNote,\n createdRound: appCreationTransaction.confirmedRound ?? 0n,\n ...(updateNote ?? creationNote),\n updatedRound: latestAppUpdateTransaction?.confirmedRound ?? 0n,\n deleted: createdApp.deleted ?? false,\n }\n }\n } catch (e) {\n Config.logger.warn(\n `Received error trying to retrieve app with ${createdApp.id} for creator ${creatorAddress}; failing silently`,\n e,\n )\n return\n }\n })\n\n const lookup = {\n creator: creatorAddress,\n apps: appLookup,\n }\n\n this._appLookups.set(creatorString, lookup)\n\n return lookup\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"app-deployer.mjs","names":[],"sources":["../src/app-deployer.ts"],"sourcesContent":["import { ABIReturn } from '@algorandfoundation/algokit-abi'\nimport { Address, Expand, getAddress, getApplicationAddress, ReadableAddress } from '@algorandfoundation/algokit-common'\nimport { IndexerClient } from '@algorandfoundation/algokit-indexer-client'\nimport { TransactionType } from '@algorandfoundation/algokit-transact'\nimport { AlgorandClientTransactionSender } from './algorand-client-transaction-sender'\nimport {\n APP_DEPLOY_NOTE_DAPP,\n OnSchemaBreak,\n OnUpdate,\n type AppDeployMetadata,\n type SendAppCreateTransactionResult,\n type SendAppUpdateTransactionResult,\n type TealTemplateParams,\n} from './app'\nimport { AppManager } from './app-manager'\nimport {\n AppCreateMethodCall,\n AppCreateParams,\n AppDeleteMethodCall,\n AppDeleteParams,\n AppUpdateMethodCall,\n AppUpdateParams,\n TransactionComposer,\n} from './composer'\nimport { Config } from './config'\nimport { lookupAccountCreatedApplicationByAddress, searchTransactions } from './indexer-client'\nimport { ConfirmedTransactionResult, SendParams } from './transaction/types'\nimport { calculateExtraProgramPages } from './util'\n\n/** Params to specify an update transaction for an app deployment */\nexport type DeployAppUpdateParams = Expand<Omit<AppUpdateParams, 'appId' | 'approvalProgram' | 'clearStateProgram'>>\n/** Params to specify an update method call for an app deployment */\nexport type DeployAppUpdateMethodCall = Expand<Omit<AppUpdateMethodCall, 'appId' | 'approvalProgram' | 'clearStateProgram'>>\n/** Params to specify a transaction for an app deployment */\nexport type DeployAppDeleteParams = Expand<Omit<AppDeleteParams, 'appId'>>\n/** Params to specify a delete method call for an app deployment */\nexport type DeployAppDeleteMethodCall = Expand<Omit<AppDeleteMethodCall, 'appId'>>\n\n/** The parameters to idempotently deploy an app */\nexport type AppDeployParams = Expand<\n SendParams & {\n /** The deployment metadata */\n metadata: AppDeployMetadata\n /** Any deploy-time parameters to replace in the TEAL code before compiling it (used if teal code is passed in as a string) */\n deployTimeParams?: TealTemplateParams\n /** What action to perform if a schema break (storage schema or extra pages change) is detected:\n *\n * * `fail` - Fail the deployment (throw an error, **default**)\n * * `replace` - Delete the old app and create a new one\n * * `append` - Deploy a new app and leave the old one as is\n */\n onSchemaBreak?: 'replace' | 'fail' | 'append' | OnSchemaBreak\n /** What action to perform if a TEAL code update is detected:\n *\n * * `fail` - Fail the deployment (throw an error, **default**)\n * * `update` - Update the app with the new TEAL code\n * * `replace` - Delete the old app and create a new one\n * * `append` - Deploy a new app and leave the old one as is\n */\n onUpdate?: 'update' | 'replace' | 'fail' | 'append' | OnUpdate\n /** Create transaction parameters to use if a create needs to be issued as part of deployment */\n createParams: AppCreateParams | AppCreateMethodCall\n /** Update transaction parameters to use if an update needs to be issued as part of deployment */\n updateParams: DeployAppUpdateParams | DeployAppUpdateMethodCall\n /** Delete transaction parameters to use if a delete needs to be issued as part of deployment */\n deleteParams: DeployAppDeleteParams | DeployAppDeleteMethodCall\n /** Optional cached value of the existing apps for the given creator; use this to avoid an indexer lookup */\n existingDeployments?: AppLookup\n /** Whether or not to ignore the app metadata cache and force a lookup, default: use the cache **/\n ignoreCache?: boolean\n }\n>\n\n/** The metadata that can be collected about a deployed app */\nexport interface AppMetadata extends AppDeployMetadata {\n /** The id of the app */\n appId: bigint\n /** The Algorand address of the account associated with the app */\n appAddress: Address\n /** The round the app was created */\n createdRound: bigint\n /** The last round that the app was updated */\n updatedRound: bigint\n /** The metadata when the app was created */\n createdMetadata: AppDeployMetadata\n /** Whether or not the app is deleted */\n deleted: boolean\n}\n\n/** A lookup of name -> Algorand app for a creator */\nexport interface AppLookup {\n /** The address of the creator associated with this lookup */\n creator: Readonly<Address>\n /** A hash map of app name to app metadata */\n apps: {\n [name: string]: AppMetadata\n }\n}\n\nexport type AppDeployResult =\n | Expand<{ operationPerformed: 'create' } & Omit<AppMetadata, 'appId' | 'appAddress'> & SendAppCreateTransactionResult>\n | Expand<{ operationPerformed: 'update' } & AppMetadata & SendAppUpdateTransactionResult>\n | Expand<\n { operationPerformed: 'replace' } & Omit<AppMetadata, 'appId' | 'appAddress'> &\n SendAppCreateTransactionResult & {\n deleteReturn?: ABIReturn\n deleteResult: ConfirmedTransactionResult\n }\n >\n | Expand<{ operationPerformed: 'nothing' } & AppMetadata>\n\n/** Allows management of deployment and deployment metadata of applications. */\nexport class AppDeployer {\n private _appManager: AppManager\n private _transactionSender: AlgorandClientTransactionSender\n private _indexer?: IndexerClient\n private _appLookups = new Map<string, AppLookup>()\n\n /**\n * Creates an `AppManager`\n * @param appManager An `AppManager` instance\n * @param transactionSender An `AlgorandClientTransactionSender` instance\n * @param indexer An optional indexer instance; supply if you want to indexer to look up app metadata\n * @example\n * ```ts\n * const deployer = new AppDeployer(appManager, transactionSender, indexer)\n * ```\n */\n constructor(appManager: AppManager, transactionSender: AlgorandClientTransactionSender, indexer?: IndexerClient) {\n this._appManager = appManager\n this._transactionSender = transactionSender\n this._indexer = indexer\n }\n\n /**\n * Idempotently deploy (create if not exists, update if changed) an app against the given name for the given creator account, including deploy-time TEAL template placeholder substitutions (if specified).\n *\n * To understand the architecture decisions behind this functionality please see https://github.com/algorandfoundation/algokit-cli/blob/main/docs/architecture-decisions/2023-01-12_smart-contract-deployment.md\n *\n * **Note:** When using the return from this function be sure to check `operationPerformed` to get access to various return properties like `transaction`, `confirmation` and `deleteResult`.\n *\n * **Note:** if there is a breaking state schema change to an existing app (and `onSchemaBreak` is set to `'replace'`) the existing app will be deleted and re-created.\n *\n * **Note:** if there is an update (different TEAL code) to an existing app (and `onUpdate` is set to `'replace'`) the existing app will be deleted and re-created.\n * @param deployment The arguments to control the app deployment\n * @returns The result of the deployment\n * @example\n * ```ts\n * const deployResult = await deployer.deploy({\n * createParams: {\n * sender: 'SENDER_ADDRESS',\n * approvalProgram: 'APPROVAL PROGRAM',\n * clearStateProgram: 'CLEAR PROGRAM',\n * schema: {\n * globalByteSlices: 0,\n * globalInts: 0,\n * localByteSlices: 0,\n * localInts: 0\n * }\n * },\n * updateParams: {\n * sender: 'SENDER_ADDRESS'\n * },\n * deleteParams: {\n * sender: 'SENDER_ADDRESS'\n * },\n * metadata: { name: 'my_app', version: '2.0', updatable: false, deletable: false },\n * onSchemaBreak: 'append',\n * onUpdate: 'append'\n * })\n * ```\n */\n async deploy(deployment: AppDeployParams): Promise<AppDeployResult> {\n const {\n metadata,\n deployTimeParams,\n onSchemaBreak,\n onUpdate,\n createParams,\n updateParams,\n deleteParams,\n existingDeployments,\n ignoreCache,\n ...sendParams\n } = deployment\n\n // Set creation note\n\n createParams.note = updateParams.note = TransactionComposer.arc2Note({\n dAppName: APP_DEPLOY_NOTE_DAPP,\n data: metadata,\n format: 'j',\n })\n\n // Check for required fields\n\n if (existingDeployments && existingDeployments.creator.toString() !== createParams.sender.toString()) {\n throw new Error(\n `Received invalid existingDeployments value for creator ${existingDeployments.creator} when attempting to deploy for creator ${getAddress(createParams.sender)}`,\n )\n }\n if (!existingDeployments && !this._indexer) {\n throw new Error(\n `Didn't receive an indexer client when this AppManager was created, but also didn't receive an existingDeployments cache - one of them must be provided`,\n )\n }\n\n Config.getLogger(sendParams?.suppressLog).info(\n `Idempotently deploying app \"${metadata.name}\" from creator ${getAddress(createParams.sender)} using ${createParams.approvalProgram.length} bytes of ${typeof createParams.approvalProgram === 'string' ? 'teal code' : 'AVM bytecode'} and ${createParams.clearStateProgram.length} bytes of ${typeof createParams.approvalProgram === 'string' ? 'teal code' : 'AVM bytecode'}`,\n )\n\n // Compile code if required\n\n const compiledApproval =\n typeof createParams.approvalProgram === 'string'\n ? await this._appManager.compileTealTemplate(createParams.approvalProgram, deployTimeParams, metadata)\n : undefined\n const approvalProgram = compiledApproval ? compiledApproval.compiledBase64ToBytes : createParams.approvalProgram\n\n const compiledClear =\n typeof createParams.clearStateProgram === 'string'\n ? await this._appManager.compileTealTemplate(createParams.clearStateProgram, deployTimeParams)\n : undefined\n const clearStateProgram = compiledClear ? compiledClear.compiledBase64ToBytes : createParams.clearStateProgram\n\n // Define routines for create, update, and replace\n\n const createApp = async () => {\n const result = await ('method' in createParams\n ? this._transactionSender.appCreateMethodCall({ ...createParams, approvalProgram, clearStateProgram, ...sendParams })\n : this._transactionSender.appCreate({ ...createParams, approvalProgram, clearStateProgram, ...sendParams }))\n const appMetadata: AppMetadata = {\n appId: result.appId,\n appAddress: result.appAddress,\n ...metadata,\n createdMetadata: metadata,\n createdRound: BigInt(result.confirmation.confirmedRound!),\n updatedRound: BigInt(result.confirmation.confirmedRound!),\n deleted: false,\n }\n this.updateAppLookup(createParams.sender, appMetadata)\n return {\n operationPerformed: 'create',\n compiledApproval,\n compiledClear,\n ...result,\n ...appMetadata,\n } satisfies SendAppCreateTransactionResult & AppMetadata & { operationPerformed: 'create' }\n }\n const updateApp = async (existingApp: AppMetadata) => {\n Config.getLogger(sendParams?.suppressLog).info(\n `Updating existing ${metadata.name} app for ${getAddress(createParams.sender)} to version ${metadata.version}.`,\n )\n const result = await ('method' in updateParams\n ? this._transactionSender.appUpdateMethodCall({\n appId: existingApp.appId,\n approvalProgram,\n clearStateProgram,\n ...updateParams,\n ...sendParams,\n })\n : this._transactionSender.appUpdate({\n appId: existingApp.appId,\n approvalProgram,\n clearStateProgram,\n ...updateParams,\n ...sendParams,\n }))\n const appMetadata: AppMetadata = {\n appId: existingApp.appId,\n appAddress: existingApp.appAddress,\n createdMetadata: existingApp.createdMetadata,\n createdRound: existingApp.createdRound,\n updatedRound: BigInt(result.confirmation.confirmedRound!),\n ...metadata,\n deleted: false,\n }\n this.updateAppLookup(createParams.sender, appMetadata)\n return {\n operationPerformed: 'update',\n compiledApproval,\n compiledClear,\n ...result,\n ...appMetadata,\n } satisfies SendAppUpdateTransactionResult & AppMetadata & { operationPerformed: 'update' }\n }\n const replaceApp = async (existingApp: AppMetadata) => {\n Config.getLogger(sendParams?.suppressLog).info(\n `Deploying a new ${metadata.name} app for ${getAddress(createParams.sender)}; deploying app with version ${metadata.version}.`,\n )\n\n Config.getLogger(sendParams?.suppressLog).warn(\n `Deleting existing ${metadata.name} app with id ${existingApp.appId} from ${getAddress(deleteParams.sender)} account.`,\n )\n\n const composer = this._transactionSender.newGroup()\n if ('method' in createParams) {\n composer.addAppCreateMethodCall({ ...createParams, approvalProgram, clearStateProgram })\n } else {\n composer.addAppCreate({ ...createParams, approvalProgram, clearStateProgram })\n }\n const createIndex = await composer.count()\n if ('method' in deleteParams) {\n composer.addAppDeleteMethodCall({ appId: existingApp.appId, ...deleteParams })\n } else {\n composer.addAppDelete({ appId: existingApp.appId, ...deleteParams })\n }\n const result = await composer.send({ ...sendParams })\n const confirmation = result.confirmations.at(createIndex - 1)!\n const transaction = result.transactions.at(createIndex - 1)!\n const deleteTransaction = result.transactions.at(-1)!\n\n Config.getLogger(sendParams?.suppressLog).warn(\n `Sent transactions ${transaction.txId()} to create app with id ${confirmation.appId} and ${deleteTransaction.txId()} to delete app with id ${\n existingApp.appId\n } from ${getAddress(createParams.sender)} account.`,\n )\n\n const appMetadata: AppMetadata = {\n appId: confirmation.appId!,\n appAddress: getApplicationAddress(confirmation.appId!),\n ...metadata,\n createdMetadata: metadata,\n createdRound: BigInt(confirmation.confirmedRound!),\n updatedRound: BigInt(confirmation.confirmedRound!),\n deleted: false,\n }\n this.updateAppLookup(createParams.sender, appMetadata)\n\n return {\n operationPerformed: 'replace',\n ...result,\n compiledApproval,\n compiledClear,\n transaction,\n confirmation,\n return: 'method' in createParams ? result.returns?.[0] : undefined,\n deleteReturn: 'method' in deleteParams ? result.returns?.at(-1) : undefined,\n ...appMetadata,\n deleteResult: { transaction: deleteTransaction, confirmation: result.confirmations.at(-1)! },\n } satisfies { operationPerformed: 'replace' } & AppMetadata &\n SendAppCreateTransactionResult & {\n deleteReturn?: ABIReturn\n deleteResult: ConfirmedTransactionResult\n }\n }\n\n // Lookup existing app metadata\n\n const apps = existingDeployments ?? (await this.getCreatorAppsByName(createParams.sender, ignoreCache))\n\n const existingApp = apps.apps[metadata.name]\n if (!existingApp || existingApp.deleted) {\n Config.getLogger(sendParams?.suppressLog).info(\n `App ${metadata.name} not found in apps created by ${getAddress(createParams.sender)}; deploying app with version ${metadata.version}.`,\n )\n\n return await createApp()\n }\n\n Config.getLogger(sendParams?.suppressLog).info(\n `Existing app ${metadata.name} found by creator ${getAddress(createParams.sender)}, with app id ${existingApp.appId} and version ${existingApp.version}.`,\n )\n\n const existingAppRecord = await this._appManager.getById(existingApp.appId)\n const existingApproval = Buffer.from(existingAppRecord.approvalProgram).toString('base64')\n const existingClear = Buffer.from(existingAppRecord.clearStateProgram).toString('base64')\n const extraPages = existingAppRecord.extraProgramPages ?? 0\n\n const newApprovalBytes = Buffer.from(approvalProgram)\n const newClearBytes = Buffer.from(clearStateProgram)\n const newApproval = newApprovalBytes.toString('base64')\n const newClear = newClearBytes.toString('base64')\n const newExtraPages = calculateExtraProgramPages(newApprovalBytes, newClearBytes)\n\n // Check for changes\n\n const isUpdate = newApproval !== existingApproval || newClear !== existingClear\n const isSchemaBreak =\n existingAppRecord.localInts < (createParams.schema?.localInts ?? 0) ||\n existingAppRecord.globalInts < (createParams.schema?.globalInts ?? 0) ||\n existingAppRecord.localByteSlices < (createParams.schema?.localByteSlices ?? 0) ||\n existingAppRecord.globalByteSlices < (createParams.schema?.globalByteSlices ?? 0) ||\n extraPages < newExtraPages\n\n if (isSchemaBreak) {\n Config.getLogger(sendParams?.suppressLog).warn(`Detected a breaking app schema change in app ${existingApp.appId}:`, {\n from: {\n globalInts: existingAppRecord.globalInts,\n globalByteSlices: existingAppRecord.globalByteSlices,\n localInts: existingAppRecord.localInts,\n localByteSlices: existingAppRecord.localByteSlices,\n extraProgramPages: extraPages,\n },\n to: { ...createParams.schema, extraProgramPages: newExtraPages },\n })\n\n if (onSchemaBreak === undefined || onSchemaBreak === 'fail' || onSchemaBreak === OnSchemaBreak.Fail) {\n throw new Error(\n 'Schema break detected and onSchemaBreak=OnSchemaBreak.Fail, stopping deployment. ' +\n 'If you want to try deleting and recreating the app then ' +\n 're-run with onSchemaBreak=OnSchemaBreak.ReplaceApp',\n )\n }\n\n if (onSchemaBreak === 'append' || onSchemaBreak === OnSchemaBreak.AppendApp) {\n Config.getLogger(sendParams?.suppressLog).info('onSchemaBreak=AppendApp, will attempt to create a new app')\n return await createApp()\n }\n\n if (existingApp.deletable) {\n Config.getLogger(sendParams?.suppressLog).info(\n 'App is deletable and onSchemaBreak=ReplaceApp, will attempt to create new app and delete old app',\n )\n } else {\n Config.getLogger(sendParams?.suppressLog).info(\n 'App is not deletable but onSchemaBreak=ReplaceApp, will attempt to delete app, delete will most likely fail',\n )\n }\n\n return await replaceApp(existingApp)\n }\n\n if (isUpdate) {\n Config.getLogger(sendParams?.suppressLog).info(\n `Detected a TEAL update in app ${existingApp.appId} for creator ${getAddress(createParams.sender)}`,\n )\n\n if (onUpdate === undefined || onUpdate === 'fail' || onUpdate === OnUpdate.Fail) {\n throw new Error('Update detected and onUpdate=Fail, stopping deployment. Try a different onUpdate value to not fail.')\n }\n\n if (onUpdate === 'append' || onUpdate === OnUpdate.AppendApp) {\n Config.getLogger(sendParams?.suppressLog).info('onUpdate=AppendApp, will attempt to create a new app')\n return await createApp()\n }\n\n if (onUpdate === 'update' || onUpdate === OnUpdate.UpdateApp) {\n if (existingApp.updatable) {\n Config.getLogger(sendParams?.suppressLog).info(`App is updatable and onUpdate=UpdateApp, updating app...`)\n } else {\n Config.getLogger(sendParams?.suppressLog).warn(\n `App is not updatable but onUpdate=UpdateApp, will attempt to update app, update will most likely fail`,\n )\n }\n\n return await updateApp(existingApp)\n }\n\n if (onUpdate === 'replace' || onUpdate === OnUpdate.ReplaceApp) {\n if (existingApp.deletable) {\n Config.getLogger(sendParams?.suppressLog).warn(\n 'App is deletable and onUpdate=ReplaceApp, creating new app and deleting old app...',\n )\n } else {\n Config.getLogger(sendParams?.suppressLog).warn(\n 'App is not deletable and onUpdate=ReplaceApp, will attempt to create new app and delete old app, delete will most likely fail',\n )\n }\n\n return await replaceApp(existingApp)\n }\n }\n\n Config.getLogger(sendParams?.suppressLog).debug('No detected changes in app, nothing to do.')\n\n return { ...existingApp, operationPerformed: 'nothing' }\n }\n\n private updateAppLookup(sender: ReadableAddress, appMetadata: AppMetadata) {\n const s = getAddress(sender).toString()\n const lookup = this._appLookups.get(s)\n if (!lookup) {\n this._appLookups.set(s, { creator: Address.fromString(s), apps: { [appMetadata.name]: appMetadata } })\n } else {\n lookup.apps[appMetadata.name] = appMetadata\n }\n }\n\n /**\n * Returns a lookup of name => app metadata (id, address, ...metadata) for all apps created by the given account that have\n * an [ARC-2](https://github.com/algorandfoundation/ARCs/blob/main/ARCs/arc-0002.md) `AppDeployNote` as the transaction\n * note of the app creation transaction.\n *\n * This function caches the result for the given creator account so that subsequent calls will not require an indexer lookup.\n *\n * If the `AppManager` instance wasn't created with an indexer client, this function will throw an error.\n *\n * @param creator The address of the account that is the creator of the apps you want to search for\n * @param ignoreCache Whether or not to ignore the cache and force a lookup, default: use the cache\n * @returns A name-based lookup of the app metadata\n * @example\n * ```ts\n * const result = await deployer.getCreatorAppsByName(creator)\n */\n async getCreatorAppsByName(creator: ReadableAddress, ignoreCache?: boolean): Promise<AppLookup> {\n const appLookup: Record<string, AppMetadata> = {}\n\n const creatorAddress = getAddress(creator)\n const creatorString = creatorAddress.toString()\n if (!ignoreCache && this._appLookups.has(creatorString)) {\n return this._appLookups.get(creatorString)!\n }\n\n if (!this._indexer) {\n throw new Error(`Didn't receive an indexer client when this AppManager was created, but received a call to getCreatorApps`)\n }\n\n // Extract all apps that account created\n const createdApps = (await lookupAccountCreatedApplicationByAddress(this._indexer, creatorString))\n .map((a) => {\n return { id: a.id, createdAtRound: a.createdAtRound!, deleted: a.deleted }\n })\n .sort((a, b) => Number(a.createdAtRound - b.createdAtRound))\n\n // For each app that account created (in parallel)...\n const apps = await Promise.all(\n createdApps.map(async (createdApp) => {\n // Find any app transactions for that app in the round it was created (should always just be a single creation transaction)\n const appTransactions = await searchTransactions(this._indexer!, {\n minRound: createdApp.createdAtRound,\n txType: TransactionType.AppCall,\n applicationId: createdApp.id,\n address: creatorAddress,\n addressRole: 'sender',\n notePrefix: Buffer.from(APP_DEPLOY_NOTE_DAPP).toString('base64'),\n })\n\n // Triple check the transaction is intact by filtering for the one we want:\n // * application-id is 0 when the app is first created\n // * also verify the sender to prevent a potential security risk\n const appCreationTransaction = appTransactions.transactions.filter(\n (t) => t.applicationTransaction?.applicationId === 0n && t.sender.toString() === creatorAddress.toString(),\n )[0]\n\n const latestAppUpdateTransaction = appTransactions.transactions\n .filter((t) => t.sender.toString() === creatorAddress.toString())\n .sort((a, b) =>\n a.confirmedRound === b.confirmedRound\n ? (b.intraRoundOffset! - a.intraRoundOffset!) / 10\n : Number(b.confirmedRound! - a.confirmedRound!),\n )[0]\n\n if (!appCreationTransaction?.note)\n // No note; ignoring\n return null\n\n return { createdApp, appCreationTransaction, latestAppUpdateTransaction }\n }),\n )\n\n apps\n .filter((a) => a !== null)\n .forEach((a) => {\n const { createdApp, appCreationTransaction, latestAppUpdateTransaction } = a!\n\n const parseNote = (note?: string) => {\n if (!note) {\n // No note; ignoring...\n return\n }\n\n if (!note.startsWith(`${APP_DEPLOY_NOTE_DAPP}:j{`))\n // Clearly not APP_DEPLOY JSON; ignoring...\n return\n\n return JSON.parse(note.substring(APP_DEPLOY_NOTE_DAPP.length + 2)) as AppDeployMetadata\n }\n\n try {\n const creationNote = parseNote(\n appCreationTransaction.note ? Buffer.from(appCreationTransaction.note).toString('utf-8') : undefined,\n )\n const updateNote = parseNote(\n latestAppUpdateTransaction.note ? Buffer.from(latestAppUpdateTransaction.note).toString('utf-8') : undefined,\n )\n if (creationNote?.name) {\n appLookup[creationNote.name] = {\n appId: createdApp.id,\n appAddress: getApplicationAddress(createdApp.id),\n createdMetadata: creationNote,\n createdRound: appCreationTransaction.confirmedRound ?? 0n,\n ...(updateNote ?? creationNote),\n updatedRound: latestAppUpdateTransaction?.confirmedRound ?? 0n,\n deleted: createdApp.deleted ?? false,\n }\n }\n } catch (e) {\n Config.logger.warn(\n `Received error trying to retrieve app with ${createdApp.id} for creator ${creatorAddress}; failing silently`,\n e,\n )\n return\n }\n })\n\n const lookup = {\n creator: creatorAddress,\n apps: appLookup,\n }\n\n this._appLookups.set(creatorString, lookup)\n\n return lookup\n }\n}\n"],"mappings":"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"}
package/app-factory.d.ts CHANGED
@@ -628,7 +628,6 @@ declare class AppFactory {
628
628
  compiledApproval?: CompiledTeal | undefined;
629
629
  compiledClear?: CompiledTeal | undefined;
630
630
  operationPerformed: "create";
631
- version: string;
632
631
  updatable?: boolean | undefined;
633
632
  deletable?: boolean | undefined;
634
633
  createdRound: bigint;
@@ -636,6 +635,7 @@ declare class AppFactory {
636
635
  createdMetadata: AppDeployMetadata;
637
636
  deleted: boolean;
638
637
  name: string;
638
+ version: string;
639
639
  groupId: string | undefined;
640
640
  txIds: string[];
641
641
  returns?: ABIReturn[] | undefined;
@@ -674,7 +674,6 @@ declare class AppFactory {
674
674
  compiledApproval?: CompiledTeal | undefined;
675
675
  compiledClear?: CompiledTeal | undefined;
676
676
  operationPerformed: "replace";
677
- version: string;
678
677
  updatable?: boolean | undefined;
679
678
  deletable?: boolean | undefined;
680
679
  createdRound: bigint;
@@ -682,6 +681,7 @@ declare class AppFactory {
682
681
  createdMetadata: AppDeployMetadata;
683
682
  deleted: boolean;
684
683
  name: string;
684
+ version: string;
685
685
  groupId: string | undefined;
686
686
  txIds: string[];
687
687
  returns?: ABIReturn[] | undefined;
package/app-factory.js CHANGED
@@ -1,7 +1,7 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_address = require("./packages/common/src/address.js");
3
3
  const require_sourcemap = require("./packages/common/src/sourcemap.js");
4
- const require_app_call = require("./packages/transact/src/transactions/app-call.js");
4
+ require("./packages/transact/src/transactions/app-call.js");
5
5
  require("./app.js");
6
6
  const require_abi_method = require("./packages/abi/src/abi-method.js");
7
7
  const require_app_client = require("./app-client.js");
@@ -79,16 +79,42 @@ var AppFactory = class {
79
79
  }
80
80
  /** Create transactions for the current app */
81
81
  createTransaction = {
82
- bare: { create: async (params) => {
82
+ /** Create bare (raw) transactions for the current app */
83
+ bare: {
84
+ /**
85
+ * Create a create app call transaction using a bare (raw) create call.
86
+ *
87
+ * Performs deploy-time TEAL template placeholder substitutions (if specified).
88
+ * @param params The parameters to create the create call transaction
89
+ * @returns The create call transaction
90
+ */
91
+ create: async (params) => {
83
92
  return this._algorand.createTransaction.appCreate(await this.params.bare.create(params));
84
93
  } },
94
+ /**
95
+ * Create a create app call transaction using an ABI create call.
96
+ *
97
+ * Performs deploy-time TEAL template placeholder substitutions (if specified).
98
+ * @param params The parameters to create the create call transaction
99
+ * @returns The create call transaction
100
+ */
85
101
  create: async (params) => {
86
102
  return this._algorand.createTransaction.appCreateMethodCall(await this.params.create(params));
87
103
  }
88
104
  };
89
105
  /** Send transactions to the current app */
90
106
  send = {
91
- bare: { create: async (params) => {
107
+ /** Send bare (raw) transactions for the current app */
108
+ bare: {
109
+ /**
110
+ * Creates an instance of the app using a bare (raw) create call and returns the result
111
+ * of the creation transaction and an app client to interact with that app instance.
112
+ *
113
+ * Performs deploy-time TEAL template placeholder substitutions (if specified).
114
+ * @param params The parameters to create the app
115
+ * @returns The app client and the result of the creation transaction
116
+ */
117
+ create: async (params) => {
92
118
  const updatable = params?.updatable ?? this._updatable;
93
119
  const deletable = params?.deletable ?? this._deletable;
94
120
  const deployTimeParams = params?.deployTimeParams ?? this._deployTimeParams;
@@ -114,6 +140,14 @@ var AppFactory = class {
114
140
  }
115
141
  };
116
142
  } },
143
+ /**
144
+ * Creates an instance of the app and returns the result of the creation
145
+ * transaction and an app client to interact with that app instance.
146
+ *
147
+ * Performs deploy-time TEAL template placeholder substitutions (if specified).
148
+ * @param params The parameters to create the app
149
+ * @returns The app client and the result of the creation transaction
150
+ */
117
151
  create: async (params) => {
118
152
  const updatable = params?.updatable ?? this._updatable;
119
153
  const deletable = params?.deletable ?? this._deletable;
@@ -315,6 +349,7 @@ var AppFactory = class {
315
349
  }
316
350
  getParamsMethods() {
317
351
  return {
352
+ /** Return params for a create ABI call, including deploy-time TEAL template replacements and compilation if provided */
318
353
  create: async (params) => {
319
354
  const compiled = await this.compile({
320
355
  ...params,
@@ -331,15 +366,18 @@ var AppFactory = class {
331
366
  },
332
367
  approvalProgram: compiled.approvalProgram,
333
368
  clearStateProgram: compiled.clearStateProgram
334
- }, params.onComplete ?? require_app_call.OnApplicationComplete.NoOp);
369
+ }, params.onComplete ?? 0);
335
370
  },
371
+ /** Return params for a deployment update ABI call */
336
372
  deployUpdate: (params) => {
337
- return this.getABIParams(params, require_app_call.OnApplicationComplete.UpdateApplication);
373
+ return this.getABIParams(params, 4);
338
374
  },
375
+ /** Return params for a deployment delete ABI call */
339
376
  deployDelete: (params) => {
340
- return this.getABIParams(params, require_app_call.OnApplicationComplete.DeleteApplication);
377
+ return this.getABIParams(params, 5);
341
378
  },
342
379
  bare: {
380
+ /** Return params for a create bare call, including deploy-time TEAL template replacements and compilation if provided */
343
381
  create: async (params) => {
344
382
  return this.getBareParams({
345
383
  ...params,
@@ -354,13 +392,15 @@ var AppFactory = class {
354
392
  ...params,
355
393
  deployTimeParams: params?.deployTimeParams ?? this._deployTimeParams
356
394
  })
357
- }, params?.onComplete ?? require_app_call.OnApplicationComplete.NoOp);
395
+ }, params?.onComplete ?? 0);
358
396
  },
397
+ /** Return params for a deployment update bare call */
359
398
  deployUpdate: (params) => {
360
- return this.getBareParams(params, require_app_call.OnApplicationComplete.UpdateApplication);
399
+ return this.getBareParams(params, 4);
361
400
  },
401
+ /** Return params for a deployment delete bare call */
362
402
  deployDelete: (params) => {
363
- return this.getBareParams(params, require_app_call.OnApplicationComplete.DeleteApplication);
403
+ return this.getBareParams(params, 5);
364
404
  }
365
405
  }
366
406
  };