@algorandfoundation/algokit-utils 9.2.0 → 9.2.1-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (340) hide show
  1. package/_virtual/_rolldown/runtime.js +33 -0
  2. package/_virtual/_rolldown/runtime.mjs +13 -0
  3. package/account/account.d.ts +25 -30
  4. package/account/account.js +151 -146
  5. package/account/account.js.map +1 -1
  6. package/account/account.mjs +149 -144
  7. package/account/account.mjs.map +1 -1
  8. package/account/get-account-config-from-environment.d.ts +7 -2
  9. package/account/get-account-config-from-environment.js +19 -21
  10. package/account/get-account-config-from-environment.js.map +1 -1
  11. package/account/get-account-config-from-environment.mjs +19 -19
  12. package/account/get-account-config-from-environment.mjs.map +1 -1
  13. package/account/get-account.d.ts +14 -12
  14. package/account/get-account.js +56 -59
  15. package/account/get-account.js.map +1 -1
  16. package/account/get-account.mjs +56 -57
  17. package/account/get-account.mjs.map +1 -1
  18. package/account/get-dispenser-account.d.ts +9 -5
  19. package/account/get-dispenser-account.js +20 -18
  20. package/account/get-dispenser-account.js.map +1 -1
  21. package/account/get-dispenser-account.mjs +20 -16
  22. package/account/get-dispenser-account.mjs.map +1 -1
  23. package/account/mnemonic-account.d.ts +7 -3
  24. package/account/mnemonic-account.js +17 -17
  25. package/account/mnemonic-account.js.map +1 -1
  26. package/account/mnemonic-account.mjs +15 -15
  27. package/account/mnemonic-account.mjs.map +1 -1
  28. package/amount.d.ts +40 -35
  29. package/amount.js +33 -34
  30. package/amount.js.map +1 -1
  31. package/amount.mjs +33 -32
  32. package/amount.mjs.map +1 -1
  33. package/app-client.d.ts +10 -6
  34. package/app-client.js +91 -86
  35. package/app-client.js.map +1 -1
  36. package/app-client.mjs +91 -84
  37. package/app-client.mjs.map +1 -1
  38. package/app-deploy.d.ts +26 -24
  39. package/app-deploy.js +235 -253
  40. package/app-deploy.js.map +1 -1
  41. package/app-deploy.mjs +233 -251
  42. package/app-deploy.mjs.map +1 -1
  43. package/app.d.ts +45 -46
  44. package/app.js +253 -271
  45. package/app.js.map +1 -1
  46. package/app.mjs +249 -267
  47. package/app.mjs.map +1 -1
  48. package/asset.d.ts +16 -12
  49. package/asset.js +116 -122
  50. package/asset.js.map +1 -1
  51. package/asset.mjs +116 -120
  52. package/asset.mjs.map +1 -1
  53. package/config.d.ts +7 -2
  54. package/config.js +5 -7
  55. package/config.js.map +1 -1
  56. package/config.mjs +5 -4
  57. package/config.mjs.map +1 -1
  58. package/debugging/debugging.d.ts +5 -1
  59. package/debugging/debugging.js +11 -11
  60. package/debugging/debugging.js.map +1 -1
  61. package/debugging/debugging.mjs +11 -9
  62. package/debugging/debugging.mjs.map +1 -1
  63. package/dispenser-client.d.ts +7 -2
  64. package/dispenser-client.js +23 -24
  65. package/dispenser-client.js.map +1 -1
  66. package/dispenser-client.mjs +23 -22
  67. package/dispenser-client.mjs.map +1 -1
  68. package/index.d.ts +27 -18
  69. package/index.js +140 -143
  70. package/index.mjs +27 -29
  71. package/indexer-lookup.d.ts +18 -11
  72. package/indexer-lookup.js +112 -120
  73. package/indexer-lookup.js.map +1 -1
  74. package/indexer-lookup.mjs +105 -118
  75. package/indexer-lookup.mjs.map +1 -1
  76. package/localnet/get-kmd-wallet-account.d.ts +9 -7
  77. package/localnet/get-kmd-wallet-account.js +28 -26
  78. package/localnet/get-kmd-wallet-account.js.map +1 -1
  79. package/localnet/get-kmd-wallet-account.mjs +28 -24
  80. package/localnet/get-kmd-wallet-account.mjs.map +1 -1
  81. package/localnet/get-localnet-dispenser-account.d.ts +7 -5
  82. package/localnet/get-localnet-dispenser-account.js +17 -15
  83. package/localnet/get-localnet-dispenser-account.js.map +1 -1
  84. package/localnet/get-localnet-dispenser-account.mjs +17 -13
  85. package/localnet/get-localnet-dispenser-account.mjs.map +1 -1
  86. package/localnet/get-or-create-kmd-wallet-account.d.ts +10 -8
  87. package/localnet/get-or-create-kmd-wallet-account.js +28 -26
  88. package/localnet/get-or-create-kmd-wallet-account.js.map +1 -1
  89. package/localnet/get-or-create-kmd-wallet-account.mjs +28 -24
  90. package/localnet/get-or-create-kmd-wallet-account.mjs.map +1 -1
  91. package/localnet/is-localnet.d.ts +7 -3
  92. package/localnet/is-localnet.js +9 -10
  93. package/localnet/is-localnet.js.map +1 -1
  94. package/localnet/is-localnet.mjs +9 -8
  95. package/localnet/is-localnet.mjs.map +1 -1
  96. package/network-client.d.ts +17 -15
  97. package/network-client.js +115 -116
  98. package/network-client.js.map +1 -1
  99. package/network-client.mjs +115 -114
  100. package/network-client.mjs.map +1 -1
  101. package/package.json +12 -3
  102. package/testing/account.d.ts +11 -9
  103. package/testing/account.js +31 -33
  104. package/testing/account.js.map +1 -1
  105. package/testing/account.mjs +29 -31
  106. package/testing/account.mjs.map +1 -1
  107. package/testing/fixtures/algokit-log-capture-fixture.d.ts +7 -2
  108. package/testing/fixtures/algokit-log-capture-fixture.js +36 -41
  109. package/testing/fixtures/algokit-log-capture-fixture.js.map +1 -1
  110. package/testing/fixtures/algokit-log-capture-fixture.mjs +36 -39
  111. package/testing/fixtures/algokit-log-capture-fixture.mjs.map +1 -1
  112. package/testing/fixtures/algorand-fixture.d.ts +9 -4
  113. package/testing/fixtures/algorand-fixture.js +67 -62
  114. package/testing/fixtures/algorand-fixture.js.map +1 -1
  115. package/testing/fixtures/algorand-fixture.mjs +66 -59
  116. package/testing/fixtures/algorand-fixture.mjs.map +1 -1
  117. package/testing/index.d.ts +7 -5
  118. package/testing/index.js +13 -18
  119. package/testing/index.mjs +7 -7
  120. package/testing/indexer.d.ts +5 -1
  121. package/testing/indexer.js +28 -37
  122. package/testing/indexer.js.map +1 -1
  123. package/testing/indexer.mjs +28 -35
  124. package/testing/indexer.mjs.map +1 -1
  125. package/testing/test-logger.d.ts +41 -36
  126. package/testing/test-logger.js +71 -76
  127. package/testing/test-logger.js.map +1 -1
  128. package/testing/test-logger.mjs +71 -74
  129. package/testing/test-logger.mjs.map +1 -1
  130. package/testing/transaction-logger.d.ts +30 -27
  131. package/testing/transaction-logger.js +77 -93
  132. package/testing/transaction-logger.js.map +1 -1
  133. package/testing/transaction-logger.mjs +74 -90
  134. package/testing/transaction-logger.mjs.map +1 -1
  135. package/transaction/legacy-bridge.js +100 -111
  136. package/transaction/legacy-bridge.js.map +1 -1
  137. package/transaction/legacy-bridge.mjs +97 -108
  138. package/transaction/legacy-bridge.mjs.map +1 -1
  139. package/transaction/perform-atomic-transaction-composer-simulate.d.ts +7 -5
  140. package/transaction/perform-atomic-transaction-composer-simulate.js +31 -36
  141. package/transaction/perform-atomic-transaction-composer-simulate.js.map +1 -1
  142. package/transaction/perform-atomic-transaction-composer-simulate.mjs +28 -33
  143. package/transaction/perform-atomic-transaction-composer-simulate.mjs.map +1 -1
  144. package/transaction/transaction.d.ts +34 -35
  145. package/transaction/transaction.js +716 -914
  146. package/transaction/transaction.js.map +1 -1
  147. package/transaction/transaction.mjs +713 -911
  148. package/transaction/transaction.mjs.map +1 -1
  149. package/transfer/transfer-algos.d.ts +9 -5
  150. package/transfer/transfer-algos.js +26 -27
  151. package/transfer/transfer-algos.js.map +1 -1
  152. package/transfer/transfer-algos.mjs +26 -25
  153. package/transfer/transfer-algos.mjs.map +1 -1
  154. package/transfer/transfer.d.ts +11 -8
  155. package/transfer/transfer.js +94 -100
  156. package/transfer/transfer.js.map +1 -1
  157. package/transfer/transfer.mjs +94 -98
  158. package/transfer/transfer.mjs.map +1 -1
  159. package/types/account-manager.d.ts +432 -429
  160. package/types/account-manager.js +591 -602
  161. package/types/account-manager.js.map +1 -1
  162. package/types/account-manager.mjs +587 -599
  163. package/types/account-manager.mjs.map +1 -1
  164. package/types/account.d.ts +192 -202
  165. package/types/account.js +91 -88
  166. package/types/account.js.map +1 -1
  167. package/types/account.mjs +88 -86
  168. package/types/account.mjs.map +1 -1
  169. package/types/algo-http-client-with-retry.d.ts +15 -10
  170. package/types/algo-http-client-with-retry.js +70 -92
  171. package/types/algo-http-client-with-retry.js.map +1 -1
  172. package/types/algo-http-client-with-retry.mjs +69 -90
  173. package/types/algo-http-client-with-retry.mjs.map +1 -1
  174. package/types/algorand-client-transaction-creator.d.ts +778 -771
  175. package/types/algorand-client-transaction-creator.js +733 -732
  176. package/types/algorand-client-transaction-creator.js.map +1 -1
  177. package/types/algorand-client-transaction-creator.mjs +732 -730
  178. package/types/algorand-client-transaction-creator.mjs.map +1 -1
  179. package/types/algorand-client-transaction-sender.d.ts +1090 -1360
  180. package/types/algorand-client-transaction-sender.js +930 -961
  181. package/types/algorand-client-transaction-sender.js.map +1 -1
  182. package/types/algorand-client-transaction-sender.mjs +927 -959
  183. package/types/algorand-client-transaction-sender.mjs.map +1 -1
  184. package/types/algorand-client.d.ts +239 -236
  185. package/types/algorand-client.js +322 -320
  186. package/types/algorand-client.js.map +1 -1
  187. package/types/algorand-client.mjs +321 -318
  188. package/types/algorand-client.mjs.map +1 -1
  189. package/types/amount.d.ts +47 -43
  190. package/types/amount.js +66 -70
  191. package/types/amount.js.map +1 -1
  192. package/types/amount.mjs +63 -68
  193. package/types/amount.mjs.map +1 -1
  194. package/types/app-arc56.d.ts +235 -272
  195. package/types/app-arc56.js +124 -170
  196. package/types/app-arc56.js.map +1 -1
  197. package/types/app-arc56.mjs +121 -168
  198. package/types/app-arc56.mjs.map +1 -1
  199. package/types/app-client.d.ts +1128 -2009
  200. package/types/app-client.js +1633 -1791
  201. package/types/app-client.js.map +1 -1
  202. package/types/app-client.mjs +1624 -1783
  203. package/types/app-client.mjs.map +1 -1
  204. package/types/app-deployer.d.ts +139 -141
  205. package/types/app-deployer.js +344 -384
  206. package/types/app-deployer.js.map +1 -1
  207. package/types/app-deployer.mjs +341 -382
  208. package/types/app-deployer.mjs.map +1 -1
  209. package/types/app-factory.d.ts +762 -932
  210. package/types/app-factory.js +496 -488
  211. package/types/app-factory.js.map +1 -1
  212. package/types/app-factory.mjs +491 -484
  213. package/types/app-factory.mjs.map +1 -1
  214. package/types/app-manager.d.ts +304 -310
  215. package/types/app-manager.js +422 -475
  216. package/types/app-manager.js.map +1 -1
  217. package/types/app-manager.mjs +419 -473
  218. package/types/app-manager.mjs.map +1 -1
  219. package/types/app-spec.d.ts +118 -117
  220. package/types/app-spec.js +125 -135
  221. package/types/app-spec.js.map +1 -1
  222. package/types/app-spec.mjs +121 -132
  223. package/types/app-spec.mjs.map +1 -1
  224. package/types/app.d.ts +229 -241
  225. package/types/app.js +36 -28
  226. package/types/app.js.map +1 -1
  227. package/types/app.mjs +33 -26
  228. package/types/app.mjs.map +1 -1
  229. package/types/asset-manager.d.ts +204 -199
  230. package/types/asset-manager.js +165 -174
  231. package/types/asset-manager.js.map +1 -1
  232. package/types/asset-manager.mjs +164 -172
  233. package/types/asset-manager.mjs.map +1 -1
  234. package/types/asset.d.ts +95 -91
  235. package/types/asset.js +0 -3
  236. package/types/asset.mjs +0 -2
  237. package/types/async-event-emitter.d.ts +18 -13
  238. package/types/async-event-emitter.js +37 -49
  239. package/types/async-event-emitter.js.map +1 -1
  240. package/types/async-event-emitter.mjs +36 -47
  241. package/types/async-event-emitter.mjs.map +1 -1
  242. package/types/client-manager.d.ts +453 -451
  243. package/types/client-manager.js +602 -598
  244. package/types/client-manager.js.map +1 -1
  245. package/types/client-manager.mjs +597 -594
  246. package/types/client-manager.mjs.map +1 -1
  247. package/types/composer.d.ts +1211 -1258
  248. package/types/composer.js +1436 -1498
  249. package/types/composer.js.map +1 -1
  250. package/types/composer.mjs +1430 -1493
  251. package/types/composer.mjs.map +1 -1
  252. package/types/config.d.ts +53 -48
  253. package/types/config.js +78 -77
  254. package/types/config.js.map +1 -1
  255. package/types/config.mjs +77 -75
  256. package/types/config.mjs.map +1 -1
  257. package/types/debugging.d.ts +25 -23
  258. package/types/debugging.js +9 -11
  259. package/types/debugging.js.map +1 -1
  260. package/types/debugging.mjs +8 -9
  261. package/types/debugging.mjs.map +1 -1
  262. package/types/dispenser-client.d.ts +57 -52
  263. package/types/dispenser-client.js +120 -141
  264. package/types/dispenser-client.js.map +1 -1
  265. package/types/dispenser-client.mjs +119 -139
  266. package/types/dispenser-client.mjs.map +1 -1
  267. package/types/expand.d.ts +5 -3
  268. package/types/expand.js +0 -3
  269. package/types/expand.mjs +0 -2
  270. package/types/indexer.d.ts +104 -100
  271. package/types/indexer.js +36 -31
  272. package/types/indexer.js.map +1 -1
  273. package/types/indexer.mjs +32 -30
  274. package/types/indexer.mjs.map +1 -1
  275. package/types/instance-of.d.ts +5 -3
  276. package/types/instance-of.js +0 -3
  277. package/types/instance-of.mjs +0 -2
  278. package/types/kmd-account-manager.d.ts +75 -70
  279. package/types/kmd-account-manager.js +150 -184
  280. package/types/kmd-account-manager.js.map +1 -1
  281. package/types/kmd-account-manager.mjs +147 -182
  282. package/types/kmd-account-manager.mjs.map +1 -1
  283. package/types/lifecycle-events.d.ts +13 -8
  284. package/types/lifecycle-events.js +10 -7
  285. package/types/lifecycle-events.js.map +1 -1
  286. package/types/lifecycle-events.mjs +9 -7
  287. package/types/lifecycle-events.mjs.map +1 -1
  288. package/types/logging.d.ts +15 -11
  289. package/types/logging.js +30 -31
  290. package/types/logging.js.map +1 -1
  291. package/types/logging.mjs +29 -29
  292. package/types/logging.mjs.map +1 -1
  293. package/types/logic-error.d.ts +33 -29
  294. package/types/logic-error.js +50 -49
  295. package/types/logic-error.js.map +1 -1
  296. package/types/logic-error.mjs +49 -47
  297. package/types/logic-error.mjs.map +1 -1
  298. package/types/network-client.d.ts +32 -27
  299. package/types/network-client.js +10 -9
  300. package/types/network-client.js.map +1 -1
  301. package/types/network-client.mjs +9 -7
  302. package/types/network-client.mjs.map +1 -1
  303. package/types/testing.d.ts +131 -132
  304. package/types/testing.js +0 -3
  305. package/types/testing.mjs +0 -2
  306. package/types/transaction.d.ts +110 -110
  307. package/types/transaction.js +0 -3
  308. package/types/transaction.mjs +0 -2
  309. package/types/transfer.d.ts +70 -66
  310. package/types/transfer.js +0 -3
  311. package/types/transfer.mjs +0 -2
  312. package/util.js +73 -118
  313. package/util.js.map +1 -1
  314. package/util.mjs +73 -116
  315. package/util.mjs.map +1 -1
  316. package/account/index.d.ts +0 -5
  317. package/debugging/index.d.ts +0 -1
  318. package/index.js.map +0 -1
  319. package/index.mjs.map +0 -1
  320. package/localnet/index.d.ts +0 -4
  321. package/testing/_asset.d.ts +0 -3
  322. package/testing/fixtures/index.d.ts +0 -2
  323. package/testing/index.js.map +0 -1
  324. package/testing/index.mjs.map +0 -1
  325. package/transaction/index.d.ts +0 -2
  326. package/transaction/legacy-bridge.d.ts +0 -35
  327. package/transfer/index.d.ts +0 -2
  328. package/types/asset.js.map +0 -1
  329. package/types/asset.mjs.map +0 -1
  330. package/types/expand.js.map +0 -1
  331. package/types/expand.mjs.map +0 -1
  332. package/types/instance-of.js.map +0 -1
  333. package/types/instance-of.mjs.map +0 -1
  334. package/types/testing.js.map +0 -1
  335. package/types/testing.mjs.map +0 -1
  336. package/types/transaction.js.map +0 -1
  337. package/types/transaction.mjs.map +0 -1
  338. package/types/transfer.js.map +0 -1
  339. package/types/transfer.mjs.map +0 -1
  340. package/util.d.ts +0 -48
@@ -1,488 +1,495 @@
1
- import algosdk, { Address } from 'algosdk';
2
- import { UPDATABLE_TEMPLATE_NAME, DELETABLE_TEMPLATE_NAME } from './app.mjs';
3
- import { getArc56Method, getArc56ReturnValue, getABITupleFromABIStruct, getABIDecodedValue } from './app-arc56.mjs';
4
- import { AppClient } from './app-client.mjs';
5
-
1
+ import "./app.mjs";
2
+ import { getABIDecodedValue, getABITupleFromABIStruct, getArc56Method, getArc56ReturnValue } from "./app-arc56.mjs";
3
+ import { AppClient } from "./app-client.mjs";
4
+ import algosdk, { Address } from "algosdk";
5
+ //#region src/types/app-factory.ts
6
6
  var SourceMap = algosdk.ProgramSourceMap;
7
7
  var OnApplicationComplete = algosdk.OnApplicationComplete;
8
8
  /**
9
- * ARC-56/ARC-32 app factory that, for a given app spec, allows you to create
10
- * and deploy one or more app instances and to create one or more app clients
11
- * to interact with those (or other) app instances.
12
- */
13
- class AppFactory {
14
- /**
15
- * Create a new app factory.
16
- * @param params The parameters to create the app factory
17
- * @returns The `AppFactory` instance
18
- * @example
19
- * ```typescript
20
- * const appFactory = new AppFactory({
21
- * appSpec: appSpec,
22
- * algorand: AlgorandClient.mainNet(),
23
- * })
24
- */
25
- constructor(params) {
26
- /** Create transactions for the current app */
27
- this.createTransaction = {
28
- /** Create bare (raw) transactions for the current app */
29
- bare: {
30
- /**
31
- * Create a create app call transaction using a bare (raw) create call.
32
- *
33
- * Performs deploy-time TEAL template placeholder substitutions (if specified).
34
- * @param params The parameters to create the create call transaction
35
- * @returns The create call transaction
36
- */
37
- create: async (params) => {
38
- return this._algorand.createTransaction.appCreate(await this.params.bare.create(params));
39
- },
40
- },
41
- /**
42
- * Create a create app call transaction using an ABI create call.
43
- *
44
- * Performs deploy-time TEAL template placeholder substitutions (if specified).
45
- * @param params The parameters to create the create call transaction
46
- * @returns The create call transaction
47
- */
48
- create: async (params) => {
49
- return this._algorand.createTransaction.appCreateMethodCall(await this.params.create(params));
50
- },
51
- };
52
- /** Send transactions to the current app */
53
- this.send = {
54
- /** Send bare (raw) transactions for the current app */
55
- bare: {
56
- /**
57
- * Creates an instance of the app using a bare (raw) create call and returns the result
58
- * of the creation transaction and an app client to interact with that app instance.
59
- *
60
- * Performs deploy-time TEAL template placeholder substitutions (if specified).
61
- * @param params The parameters to create the app
62
- * @returns The app client and the result of the creation transaction
63
- */
64
- create: async (params) => {
65
- const updatable = params?.updatable ?? this._updatable;
66
- const deletable = params?.deletable ?? this._deletable;
67
- const deployTimeParams = params?.deployTimeParams ?? this._deployTimeParams;
68
- const compiled = await this.compile({ deployTimeParams, updatable, deletable });
69
- const result = await this.handleCallErrors(async () => ({
70
- ...(await this._algorand.send.appCreate(await this.params.bare.create({ ...params, updatable, deletable, deployTimeParams }))),
71
- return: undefined,
72
- }));
73
- return {
74
- appClient: this.getAppClientById({
75
- appId: result.appId,
76
- }),
77
- result: {
78
- ...result,
79
- ...compiled,
80
- },
81
- };
82
- },
83
- },
84
- /**
85
- * Creates an instance of the app and returns the result of the creation
86
- * transaction and an app client to interact with that app instance.
87
- *
88
- * Performs deploy-time TEAL template placeholder substitutions (if specified).
89
- * @param params The parameters to create the app
90
- * @returns The app client and the result of the creation transaction
91
- */
92
- create: async (params) => {
93
- const updatable = params?.updatable ?? this._updatable;
94
- const deletable = params?.deletable ?? this._deletable;
95
- const deployTimeParams = params?.deployTimeParams ?? this._deployTimeParams;
96
- const compiled = await this.compile({ deployTimeParams, updatable, deletable });
97
- const result = await this.handleCallErrors(async () => this.parseMethodCallReturn(this._algorand.send.appCreateMethodCall(await this.params.create({ ...params, updatable, deletable, deployTimeParams })), getArc56Method(params.method, this._appSpec)));
98
- return {
99
- appClient: this.getAppClientById({
100
- appId: result.appId,
101
- }),
102
- result: {
103
- ...result,
104
- ...compiled,
105
- },
106
- };
107
- },
108
- };
109
- this._appSpec = AppClient.normaliseAppSpec(params.appSpec);
110
- this._appName = params.appName ?? this._appSpec.name;
111
- this._algorand = params.algorand;
112
- this._version = params.version ?? '1.0';
113
- this._defaultSender = typeof params.defaultSender === 'string' ? Address.fromString(params.defaultSender) : params.defaultSender;
114
- this._defaultSigner = params.defaultSigner;
115
- this._deployTimeParams = params.deployTimeParams;
116
- this._updatable = params.updatable;
117
- this._deletable = params.deletable;
118
- this._paramsMethods = this.getParamsMethods();
119
- }
120
- /** The name of the app (from the ARC-32 / ARC-56 app spec or override). */
121
- get appName() {
122
- return this._appName;
123
- }
124
- /** The ARC-56 app spec being used */
125
- get appSpec() {
126
- return this._appSpec;
127
- }
128
- /** Return the algorand client this factory is using. */
129
- get algorand() {
130
- return this._algorand;
131
- }
132
- /** Get parameters to create transactions (create and deploy related calls) for the current app.
133
- *
134
- * A good mental model for this is that these parameters represent a deferred transaction creation.
135
- * @example Create a transaction in the future using Algorand Client
136
- * ```typescript
137
- * const createAppParams = appFactory.params.create({method: 'create_method', args: [123, 'hello']})
138
- * // ...
139
- * await algorand.send.AppCreateMethodCall(createAppParams)
140
- * ```
141
- * @example Define a nested transaction as an ABI argument
142
- * ```typescript
143
- * const createAppParams = appFactory.params.create({method: 'create_method', args: [123, 'hello']})
144
- * await appClient.send.call({method: 'my_method', args: [createAppParams]})
145
- * ```
146
- */
147
- get params() {
148
- return this._paramsMethods;
149
- }
150
- /**
151
- * 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).
152
- *
153
- * **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`.
154
- *
155
- * **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.
156
- *
157
- * **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.
158
- * @param params The arguments to control the app deployment
159
- * @returns The app client and the result of the deployment
160
- * @example
161
- * ```ts
162
- * const { appClient, result } = await factory.deploy({
163
- * createParams: {
164
- * sender: 'SENDER_ADDRESS',
165
- * approvalProgram: 'APPROVAL PROGRAM',
166
- * clearStateProgram: 'CLEAR PROGRAM',
167
- * schema: {
168
- * globalByteSlices: 0,
169
- * globalInts: 0,
170
- * localByteSlices: 0,
171
- * localInts: 0
172
- * }
173
- * },
174
- * updateParams: {
175
- * sender: 'SENDER_ADDRESS'
176
- * },
177
- * deleteParams: {
178
- * sender: 'SENDER_ADDRESS'
179
- * },
180
- * metadata: { name: 'my_app', version: '2.0', updatable: false, deletable: false },
181
- * onSchemaBreak: 'append',
182
- * onUpdate: 'append'
183
- * })
184
- * ```
185
- */
186
- async deploy(params) {
187
- const updatable = params.updatable ?? this._updatable ?? this.getDeployTimeControl('updatable');
188
- const deletable = params.deletable ?? this._deletable ?? this.getDeployTimeControl('deletable');
189
- const deployTimeParams = params.deployTimeParams ?? this._deployTimeParams;
190
- // Compile using a appID 0 AppClient so we can register the error handler and use the programs
191
- // to identify the app within the error handler (because we can't use app ID 0)
192
- const tempAppClient = this.getAppClientById({ appId: 0n });
193
- const compiled = await tempAppClient.compile({ deployTimeParams, updatable, deletable });
194
- const deployResult = await this._algorand.appDeployer.deploy({
195
- ...params,
196
- createParams: await (params.createParams && 'method' in params.createParams
197
- ? this.params.create({ ...params.createParams, updatable, deletable, deployTimeParams })
198
- : this.params.bare.create({ ...params.createParams, updatable, deletable, deployTimeParams })),
199
- updateParams: params.updateParams && 'method' in params.updateParams
200
- ? this.params.deployUpdate(params.updateParams)
201
- : this.params.bare.deployUpdate(params.updateParams),
202
- deleteParams: params.deleteParams && 'method' in params.deleteParams
203
- ? this.params.deployDelete(params.deleteParams)
204
- : this.params.bare.deployDelete(params.deleteParams),
205
- metadata: {
206
- name: params.appName ?? this._appName,
207
- version: this._version,
208
- updatable,
209
- deletable,
210
- },
211
- });
212
- const appClient = this.getAppClientById({
213
- appId: deployResult.appId,
214
- appName: params.appName,
215
- });
216
- const result = {
217
- ...deployResult,
218
- ...compiled,
219
- };
220
- return {
221
- appClient,
222
- result: {
223
- ...result,
224
- return: 'return' in result
225
- ? result.operationPerformed === 'update'
226
- ? params.updateParams && 'method' in params.updateParams
227
- ? getArc56ReturnValue(result.return, getArc56Method(params.updateParams.method, this._appSpec), this._appSpec.structs)
228
- : undefined
229
- : params.createParams && 'method' in params.createParams
230
- ? getArc56ReturnValue(result.return, getArc56Method(params.createParams.method, this._appSpec), this._appSpec.structs)
231
- : undefined
232
- : undefined,
233
- deleteReturn: 'deleteReturn' in result && params.deleteParams && 'method' in params.deleteParams
234
- ? getArc56ReturnValue(result.deleteReturn, getArc56Method(params.deleteParams.method, this._appSpec), this._appSpec.structs)
235
- : undefined,
236
- },
237
- };
238
- }
239
- /**
240
- * Returns a new `AppClient` client for an app instance of the given ID.
241
- *
242
- * Automatically populates appName, defaultSender and source maps from the factory
243
- * if not specified in the params.
244
- * @param params The parameters to create the app client
245
- * @returns The `AppClient` instance
246
- * @example
247
- * ```typescript
248
- * const appClient = factory.getAppClientById({ appId: 12345n })
249
- * ```
250
- */
251
- getAppClientById(params) {
252
- return new AppClient({
253
- ...params,
254
- algorand: this._algorand,
255
- appSpec: this._appSpec,
256
- appName: params.appName ?? this._appName,
257
- defaultSender: params.defaultSender ?? this._defaultSender,
258
- defaultSigner: params.defaultSigner ?? this._defaultSigner,
259
- approvalSourceMap: params.approvalSourceMap ?? this._approvalSourceMap,
260
- clearSourceMap: params.clearSourceMap ?? this._clearSourceMap,
261
- });
262
- }
263
- /**
264
- * Returns a new `AppClient` client, resolving the app by creator address and name
265
- * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note).
266
- *
267
- * Automatically populates appName, defaultSender and source maps from the factory
268
- * if not specified in the params.
269
- * @param params The parameters to create the app client
270
- * @returns The `AppClient` instance
271
- * @example
272
- * ```typescript
273
- * const appClient = factory.getAppClientByCreatorAndName({ creatorAddress: 'CREATOR_ADDRESS', appName: 'my_app' })
274
- * ```
275
- */
276
- getAppClientByCreatorAndName(params) {
277
- return AppClient.fromCreatorAndName({
278
- ...params,
279
- algorand: this._algorand,
280
- appSpec: this._appSpec,
281
- appName: params.appName ?? this._appName,
282
- defaultSender: params.defaultSender ?? this._defaultSender,
283
- approvalSourceMap: params.approvalSourceMap ?? this._approvalSourceMap,
284
- clearSourceMap: params.clearSourceMap ?? this._clearSourceMap,
285
- });
286
- }
287
- /**
288
- * Takes an error that may include a logic error from a call to the current app and re-exposes the
289
- * error to include source code information via the source map and ARC-56 spec.
290
- * @param e The error to parse
291
- * @param isClearStateProgram Whether or not the code was running the clear state program (defaults to approval program)
292
- * @returns The new error, or if there was no logic error or source map then the wrapped error with source details
293
- */
294
- exposeLogicError(e, isClearStateProgram) {
295
- return AppClient.exposeLogicError(e, this._appSpec, {
296
- isClearStateProgram,
297
- approvalSourceMap: this._approvalSourceMap,
298
- clearSourceMap: this._clearSourceMap,
299
- });
300
- }
301
- /**
302
- * Export the current source maps for the app.
303
- * @returns The source maps
304
- */
305
- exportSourceMaps() {
306
- if (!this._approvalSourceMap || !this._clearSourceMap) {
307
- throw new Error("Unable to export source maps; they haven't been loaded into this client - you need to call create, update, or deploy first");
308
- }
309
- return {
310
- approvalSourceMap: this._approvalSourceMap,
311
- clearSourceMap: this._clearSourceMap,
312
- };
313
- }
314
- /**
315
- * Import source maps for the app.
316
- * @param sourceMaps The source maps to import
317
- */
318
- importSourceMaps(sourceMaps) {
319
- this._approvalSourceMap = new SourceMap(sourceMaps.approvalSourceMap);
320
- this._clearSourceMap = new SourceMap(sourceMaps.clearSourceMap);
321
- }
322
- getDeployTimeControl(control) {
323
- const approval = this._appSpec.source?.approval ? Buffer.from(this._appSpec.source.approval, 'base64').toString('utf-8') : undefined;
324
- // variable not present, so unknown control value
325
- if (!approval || !approval.includes(control === 'updatable' ? UPDATABLE_TEMPLATE_NAME : DELETABLE_TEMPLATE_NAME))
326
- return undefined;
327
- // A call is present and configured
328
- return (this._appSpec.bareActions.call.includes(control === 'updatable' ? 'UpdateApplication' : 'DeleteApplication') ||
329
- Object.values(this._appSpec.methods).some((c) => c.actions.call.includes(control === 'updatable' ? 'UpdateApplication' : 'DeleteApplication')));
330
- }
331
- getParamsMethods() {
332
- return {
333
- /** Return params for a create ABI call, including deploy-time TEAL template replacements and compilation if provided */
334
- create: async (params) => {
335
- const compiled = await this.compile({ ...params, deployTimeParams: params.deployTimeParams ?? this._deployTimeParams });
336
- return this.getABIParams({
337
- ...params,
338
- deployTimeParams: params.deployTimeParams ?? this._deployTimeParams,
339
- schema: params.schema ?? {
340
- globalByteSlices: this._appSpec.state.schema.global.bytes,
341
- globalInts: this._appSpec.state.schema.global.ints,
342
- localByteSlices: this._appSpec.state.schema.local.bytes,
343
- localInts: this._appSpec.state.schema.local.ints,
344
- },
345
- approvalProgram: compiled.approvalProgram,
346
- clearStateProgram: compiled.clearStateProgram,
347
- }, params.onComplete ?? OnApplicationComplete.NoOpOC);
348
- },
349
- /** Return params for a deployment update ABI call */
350
- deployUpdate: (params) => {
351
- return this.getABIParams(params, OnApplicationComplete.UpdateApplicationOC);
352
- },
353
- /** Return params for a deployment delete ABI call */
354
- deployDelete: (params) => {
355
- return this.getABIParams(params, OnApplicationComplete.DeleteApplicationOC);
356
- },
357
- bare: {
358
- /** Return params for a create bare call, including deploy-time TEAL template replacements and compilation if provided */
359
- create: async (params) => {
360
- return this.getBareParams({
361
- ...params,
362
- deployTimeParams: params?.deployTimeParams ?? this._deployTimeParams,
363
- schema: params?.schema ?? {
364
- globalByteSlices: this._appSpec.state.schema.global.bytes,
365
- globalInts: this._appSpec.state.schema.global.ints,
366
- localByteSlices: this._appSpec.state.schema.local.bytes,
367
- localInts: this._appSpec.state.schema.local.ints,
368
- },
369
- ...(await this.compile({ ...params, deployTimeParams: params?.deployTimeParams ?? this._deployTimeParams })),
370
- }, params?.onComplete ?? OnApplicationComplete.NoOpOC);
371
- },
372
- /** Return params for a deployment update bare call */
373
- deployUpdate: (params) => {
374
- return this.getBareParams(params, OnApplicationComplete.UpdateApplicationOC);
375
- },
376
- /** Return params for a deployment delete bare call */
377
- deployDelete: (params) => {
378
- return this.getBareParams(params, OnApplicationComplete.DeleteApplicationOC);
379
- },
380
- },
381
- };
382
- }
383
- /** Make the given call and catch any errors, augmenting with debugging information before re-throwing. */
384
- async handleCallErrors(call) {
385
- try {
386
- return await call();
387
- }
388
- catch (e) {
389
- throw this.exposeLogicError(e);
390
- }
391
- }
392
- /**
393
- * Compiles the approval and clear state programs (if TEAL templates provided),
394
- * performing any provided deploy-time parameter replacement and stores
395
- * the source maps.
396
- *
397
- * If no TEAL templates provided it will use any byte code provided in the app spec.
398
- *
399
- * Will store any generated source maps for later use in debugging.
400
- * @param compilation Optional compilation parameters to use for the compilation
401
- * @returns The compilation result
402
- * @example
403
- * ```typescript
404
- * const result = await factory.compile()
405
- * ```
406
- */
407
- async compile(compilation) {
408
- const result = await AppClient.compile(this._appSpec, this._algorand.app, compilation);
409
- if (result.compiledApproval) {
410
- this._approvalSourceMap = result.compiledApproval.sourceMap;
411
- }
412
- if (result.compiledClear) {
413
- this._clearSourceMap = result.compiledClear.sourceMap;
414
- }
415
- return result;
416
- }
417
- getBareParams(params, onComplete) {
418
- return {
419
- ...params,
420
- sender: this.getSender(params?.sender),
421
- signer: this.getSigner(params?.sender, params?.signer),
422
- onComplete,
423
- };
424
- }
425
- getABIParams(params, onComplete) {
426
- return {
427
- ...params,
428
- sender: this.getSender(params.sender),
429
- signer: this.getSigner(params.sender, params.signer),
430
- method: getArc56Method(params.method, this._appSpec),
431
- args: this.getCreateABIArgsWithDefaultValues(params.method, params.args),
432
- onComplete,
433
- };
434
- }
435
- getCreateABIArgsWithDefaultValues(methodNameOrSignature, args) {
436
- const m = getArc56Method(methodNameOrSignature, this._appSpec);
437
- return args?.map((a, i) => {
438
- const arg = m.args[i];
439
- if (a !== undefined) {
440
- // If a struct then convert to tuple for the underlying call
441
- return arg.struct && typeof a === 'object' && !Array.isArray(a)
442
- ? getABITupleFromABIStruct(a, this._appSpec.structs[arg.struct], this._appSpec.structs)
443
- : a;
444
- }
445
- const defaultValue = arg.defaultValue;
446
- if (defaultValue) {
447
- switch (defaultValue.source) {
448
- case 'literal':
449
- return getABIDecodedValue(Buffer.from(defaultValue.data, 'base64'), m.method.args[i].type, this._appSpec.structs);
450
- default:
451
- throw new Error(`Can't provide default value for ${defaultValue.source} for a contract creation call`);
452
- }
453
- }
454
- throw new Error(`No value provided for required argument ${arg.name ?? `arg${i + 1}`} in call to method ${m.name}`);
455
- });
456
- }
457
- /** Returns the sender for a call, using the `defaultSender`
458
- * if none provided and throws an error if neither provided */
459
- getSender(sender) {
460
- if (!sender && !this._defaultSender) {
461
- throw new Error(`No sender provided and no default sender present in app factory for call to app ${this._appName}`);
462
- }
463
- return typeof sender === 'string' ? Address.fromString(sender) : (sender ?? this._defaultSender);
464
- }
465
- /** Returns the signer for a call, using the provided signer or the `defaultSigner`
466
- * if no signer was provided and the sender resolves to the default sender, the call will use default signer
467
- * or `undefined` otherwise (so the signer is resolved from `AlgorandClient`) */
468
- getSigner(sender, signer) {
469
- return signer ?? (!sender || sender === this._defaultSender ? this._defaultSigner : undefined);
470
- }
471
- /**
472
- * Checks for decode errors on the SendAppTransactionResult and maps the return value to the specified type
473
- * on the ARC-56 method.
474
- *
475
- * If the return type is a struct then the struct will be returned.
476
- *
477
- * @param result The SendAppTransactionResult to be mapped
478
- * @param method The method that was called
479
- * @returns The smart contract response with an updated return value
480
- */
481
- async parseMethodCallReturn(result, method) {
482
- const resultValue = await result;
483
- return { ...resultValue, return: getArc56ReturnValue(resultValue.return, method, this._appSpec.structs) };
484
- }
485
- }
486
-
9
+ * ARC-56/ARC-32 app factory that, for a given app spec, allows you to create
10
+ * and deploy one or more app instances and to create one or more app clients
11
+ * to interact with those (or other) app instances.
12
+ */
13
+ var AppFactory = class {
14
+ _appSpec;
15
+ _appName;
16
+ _algorand;
17
+ _version;
18
+ _defaultSender;
19
+ _defaultSigner;
20
+ _deployTimeParams;
21
+ _updatable;
22
+ _deletable;
23
+ _approvalSourceMap;
24
+ _clearSourceMap;
25
+ _paramsMethods;
26
+ /**
27
+ * Create a new app factory.
28
+ * @param params The parameters to create the app factory
29
+ * @returns The `AppFactory` instance
30
+ * @example
31
+ * ```typescript
32
+ * const appFactory = new AppFactory({
33
+ * appSpec: appSpec,
34
+ * algorand: AlgorandClient.mainNet(),
35
+ * })
36
+ */
37
+ constructor(params) {
38
+ this._appSpec = AppClient.normaliseAppSpec(params.appSpec);
39
+ this._appName = params.appName ?? this._appSpec.name;
40
+ this._algorand = params.algorand;
41
+ this._version = params.version ?? "1.0";
42
+ this._defaultSender = typeof params.defaultSender === "string" ? Address.fromString(params.defaultSender) : params.defaultSender;
43
+ this._defaultSigner = params.defaultSigner;
44
+ this._deployTimeParams = params.deployTimeParams;
45
+ this._updatable = params.updatable;
46
+ this._deletable = params.deletable;
47
+ this._paramsMethods = this.getParamsMethods();
48
+ }
49
+ /** The name of the app (from the ARC-32 / ARC-56 app spec or override). */
50
+ get appName() {
51
+ return this._appName;
52
+ }
53
+ /** The ARC-56 app spec being used */
54
+ get appSpec() {
55
+ return this._appSpec;
56
+ }
57
+ /** Return the algorand client this factory is using. */
58
+ get algorand() {
59
+ return this._algorand;
60
+ }
61
+ /** Get parameters to create transactions (create and deploy related calls) for the current app.
62
+ *
63
+ * A good mental model for this is that these parameters represent a deferred transaction creation.
64
+ * @example Create a transaction in the future using Algorand Client
65
+ * ```typescript
66
+ * const createAppParams = appFactory.params.create({method: 'create_method', args: [123, 'hello']})
67
+ * // ...
68
+ * await algorand.send.AppCreateMethodCall(createAppParams)
69
+ * ```
70
+ * @example Define a nested transaction as an ABI argument
71
+ * ```typescript
72
+ * const createAppParams = appFactory.params.create({method: 'create_method', args: [123, 'hello']})
73
+ * await appClient.send.call({method: 'my_method', args: [createAppParams]})
74
+ * ```
75
+ */
76
+ get params() {
77
+ return this._paramsMethods;
78
+ }
79
+ /** Create transactions for the current app */
80
+ createTransaction = {
81
+ /** Create bare (raw) transactions for the current app */
82
+ bare: {
83
+ /**
84
+ * Create a create app call transaction using a bare (raw) create call.
85
+ *
86
+ * Performs deploy-time TEAL template placeholder substitutions (if specified).
87
+ * @param params The parameters to create the create call transaction
88
+ * @returns The create call transaction
89
+ */
90
+ create: async (params) => {
91
+ return this._algorand.createTransaction.appCreate(await this.params.bare.create(params));
92
+ } },
93
+ /**
94
+ * Create a create app call transaction using an ABI create call.
95
+ *
96
+ * Performs deploy-time TEAL template placeholder substitutions (if specified).
97
+ * @param params The parameters to create the create call transaction
98
+ * @returns The create call transaction
99
+ */
100
+ create: async (params) => {
101
+ return this._algorand.createTransaction.appCreateMethodCall(await this.params.create(params));
102
+ }
103
+ };
104
+ /** Send transactions to the current app */
105
+ send = {
106
+ /** Send bare (raw) transactions for the current app */
107
+ bare: {
108
+ /**
109
+ * Creates an instance of the app using a bare (raw) create call and returns the result
110
+ * of the creation transaction and an app client to interact with that app instance.
111
+ *
112
+ * Performs deploy-time TEAL template placeholder substitutions (if specified).
113
+ * @param params The parameters to create the app
114
+ * @returns The app client and the result of the creation transaction
115
+ */
116
+ create: async (params) => {
117
+ const updatable = params?.updatable ?? this._updatable;
118
+ const deletable = params?.deletable ?? this._deletable;
119
+ const deployTimeParams = params?.deployTimeParams ?? this._deployTimeParams;
120
+ const compiled = await this.compile({
121
+ deployTimeParams,
122
+ updatable,
123
+ deletable
124
+ });
125
+ const result = await this.handleCallErrors(async () => ({
126
+ ...await this._algorand.send.appCreate(await this.params.bare.create({
127
+ ...params,
128
+ updatable,
129
+ deletable,
130
+ deployTimeParams
131
+ })),
132
+ return: void 0
133
+ }));
134
+ return {
135
+ appClient: this.getAppClientById({ appId: result.appId }),
136
+ result: {
137
+ ...result,
138
+ ...compiled
139
+ }
140
+ };
141
+ } },
142
+ /**
143
+ * Creates an instance of the app and returns the result of the creation
144
+ * transaction and an app client to interact with that app instance.
145
+ *
146
+ * Performs deploy-time TEAL template placeholder substitutions (if specified).
147
+ * @param params The parameters to create the app
148
+ * @returns The app client and the result of the creation transaction
149
+ */
150
+ create: async (params) => {
151
+ const updatable = params?.updatable ?? this._updatable;
152
+ const deletable = params?.deletable ?? this._deletable;
153
+ const deployTimeParams = params?.deployTimeParams ?? this._deployTimeParams;
154
+ const compiled = await this.compile({
155
+ deployTimeParams,
156
+ updatable,
157
+ deletable
158
+ });
159
+ const result = await this.handleCallErrors(async () => this.parseMethodCallReturn(this._algorand.send.appCreateMethodCall(await this.params.create({
160
+ ...params,
161
+ updatable,
162
+ deletable,
163
+ deployTimeParams
164
+ })), getArc56Method(params.method, this._appSpec)));
165
+ return {
166
+ appClient: this.getAppClientById({ appId: result.appId }),
167
+ result: {
168
+ ...result,
169
+ ...compiled
170
+ }
171
+ };
172
+ }
173
+ };
174
+ /**
175
+ * 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).
176
+ *
177
+ * **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`.
178
+ *
179
+ * **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.
180
+ *
181
+ * **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.
182
+ * @param params The arguments to control the app deployment
183
+ * @returns The app client and the result of the deployment
184
+ * @example
185
+ * ```ts
186
+ * const { appClient, result } = await factory.deploy({
187
+ * createParams: {
188
+ * sender: 'SENDER_ADDRESS',
189
+ * approvalProgram: 'APPROVAL PROGRAM',
190
+ * clearStateProgram: 'CLEAR PROGRAM',
191
+ * schema: {
192
+ * globalByteSlices: 0,
193
+ * globalInts: 0,
194
+ * localByteSlices: 0,
195
+ * localInts: 0
196
+ * }
197
+ * },
198
+ * updateParams: {
199
+ * sender: 'SENDER_ADDRESS'
200
+ * },
201
+ * deleteParams: {
202
+ * sender: 'SENDER_ADDRESS'
203
+ * },
204
+ * metadata: { name: 'my_app', version: '2.0', updatable: false, deletable: false },
205
+ * onSchemaBreak: 'append',
206
+ * onUpdate: 'append'
207
+ * })
208
+ * ```
209
+ */
210
+ async deploy(params) {
211
+ const updatable = params.updatable ?? this._updatable ?? this.getDeployTimeControl("updatable");
212
+ const deletable = params.deletable ?? this._deletable ?? this.getDeployTimeControl("deletable");
213
+ const deployTimeParams = params.deployTimeParams ?? this._deployTimeParams;
214
+ const compiled = await this.getAppClientById({ appId: 0n }).compile({
215
+ deployTimeParams,
216
+ updatable,
217
+ deletable
218
+ });
219
+ const deployResult = await this._algorand.appDeployer.deploy({
220
+ ...params,
221
+ createParams: await (params.createParams && "method" in params.createParams ? this.params.create({
222
+ ...params.createParams,
223
+ updatable,
224
+ deletable,
225
+ deployTimeParams
226
+ }) : this.params.bare.create({
227
+ ...params.createParams,
228
+ updatable,
229
+ deletable,
230
+ deployTimeParams
231
+ })),
232
+ updateParams: params.updateParams && "method" in params.updateParams ? this.params.deployUpdate(params.updateParams) : this.params.bare.deployUpdate(params.updateParams),
233
+ deleteParams: params.deleteParams && "method" in params.deleteParams ? this.params.deployDelete(params.deleteParams) : this.params.bare.deployDelete(params.deleteParams),
234
+ metadata: {
235
+ name: params.appName ?? this._appName,
236
+ version: this._version,
237
+ updatable,
238
+ deletable
239
+ }
240
+ });
241
+ const appClient = this.getAppClientById({
242
+ appId: deployResult.appId,
243
+ appName: params.appName
244
+ });
245
+ const result = {
246
+ ...deployResult,
247
+ ...compiled
248
+ };
249
+ return {
250
+ appClient,
251
+ result: {
252
+ ...result,
253
+ return: "return" in result ? result.operationPerformed === "update" ? params.updateParams && "method" in params.updateParams ? getArc56ReturnValue(result.return, getArc56Method(params.updateParams.method, this._appSpec), this._appSpec.structs) : void 0 : params.createParams && "method" in params.createParams ? getArc56ReturnValue(result.return, getArc56Method(params.createParams.method, this._appSpec), this._appSpec.structs) : void 0 : void 0,
254
+ deleteReturn: "deleteReturn" in result && params.deleteParams && "method" in params.deleteParams ? getArc56ReturnValue(result.deleteReturn, getArc56Method(params.deleteParams.method, this._appSpec), this._appSpec.structs) : void 0
255
+ }
256
+ };
257
+ }
258
+ /**
259
+ * Returns a new `AppClient` client for an app instance of the given ID.
260
+ *
261
+ * Automatically populates appName, defaultSender and source maps from the factory
262
+ * if not specified in the params.
263
+ * @param params The parameters to create the app client
264
+ * @returns The `AppClient` instance
265
+ * @example
266
+ * ```typescript
267
+ * const appClient = factory.getAppClientById({ appId: 12345n })
268
+ * ```
269
+ */
270
+ getAppClientById(params) {
271
+ return new AppClient({
272
+ ...params,
273
+ algorand: this._algorand,
274
+ appSpec: this._appSpec,
275
+ appName: params.appName ?? this._appName,
276
+ defaultSender: params.defaultSender ?? this._defaultSender,
277
+ defaultSigner: params.defaultSigner ?? this._defaultSigner,
278
+ approvalSourceMap: params.approvalSourceMap ?? this._approvalSourceMap,
279
+ clearSourceMap: params.clearSourceMap ?? this._clearSourceMap
280
+ });
281
+ }
282
+ /**
283
+ * Returns a new `AppClient` client, resolving the app by creator address and name
284
+ * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note).
285
+ *
286
+ * Automatically populates appName, defaultSender and source maps from the factory
287
+ * if not specified in the params.
288
+ * @param params The parameters to create the app client
289
+ * @returns The `AppClient` instance
290
+ * @example
291
+ * ```typescript
292
+ * const appClient = factory.getAppClientByCreatorAndName({ creatorAddress: 'CREATOR_ADDRESS', appName: 'my_app' })
293
+ * ```
294
+ */
295
+ getAppClientByCreatorAndName(params) {
296
+ return AppClient.fromCreatorAndName({
297
+ ...params,
298
+ algorand: this._algorand,
299
+ appSpec: this._appSpec,
300
+ appName: params.appName ?? this._appName,
301
+ defaultSender: params.defaultSender ?? this._defaultSender,
302
+ approvalSourceMap: params.approvalSourceMap ?? this._approvalSourceMap,
303
+ clearSourceMap: params.clearSourceMap ?? this._clearSourceMap
304
+ });
305
+ }
306
+ /**
307
+ * Takes an error that may include a logic error from a call to the current app and re-exposes the
308
+ * error to include source code information via the source map and ARC-56 spec.
309
+ * @param e The error to parse
310
+ * @param isClearStateProgram Whether or not the code was running the clear state program (defaults to approval program)
311
+ * @returns The new error, or if there was no logic error or source map then the wrapped error with source details
312
+ */
313
+ exposeLogicError(e, isClearStateProgram) {
314
+ return AppClient.exposeLogicError(e, this._appSpec, {
315
+ isClearStateProgram,
316
+ approvalSourceMap: this._approvalSourceMap,
317
+ clearSourceMap: this._clearSourceMap
318
+ });
319
+ }
320
+ /**
321
+ * Export the current source maps for the app.
322
+ * @returns The source maps
323
+ */
324
+ exportSourceMaps() {
325
+ if (!this._approvalSourceMap || !this._clearSourceMap) throw new Error("Unable to export source maps; they haven't been loaded into this client - you need to call create, update, or deploy first");
326
+ return {
327
+ approvalSourceMap: this._approvalSourceMap,
328
+ clearSourceMap: this._clearSourceMap
329
+ };
330
+ }
331
+ /**
332
+ * Import source maps for the app.
333
+ * @param sourceMaps The source maps to import
334
+ */
335
+ importSourceMaps(sourceMaps) {
336
+ this._approvalSourceMap = new SourceMap(sourceMaps.approvalSourceMap);
337
+ this._clearSourceMap = new SourceMap(sourceMaps.clearSourceMap);
338
+ }
339
+ getDeployTimeControl(control) {
340
+ const approval = this._appSpec.source?.approval ? Buffer.from(this._appSpec.source.approval, "base64").toString("utf-8") : void 0;
341
+ if (!approval || !approval.includes(control === "updatable" ? "TMPL_UPDATABLE" : "TMPL_DELETABLE")) return void 0;
342
+ return this._appSpec.bareActions.call.includes(control === "updatable" ? "UpdateApplication" : "DeleteApplication") || Object.values(this._appSpec.methods).some((c) => c.actions.call.includes(control === "updatable" ? "UpdateApplication" : "DeleteApplication"));
343
+ }
344
+ getParamsMethods() {
345
+ return {
346
+ /** Return params for a create ABI call, including deploy-time TEAL template replacements and compilation if provided */
347
+ create: async (params) => {
348
+ const compiled = await this.compile({
349
+ ...params,
350
+ deployTimeParams: params.deployTimeParams ?? this._deployTimeParams
351
+ });
352
+ return this.getABIParams({
353
+ ...params,
354
+ deployTimeParams: params.deployTimeParams ?? this._deployTimeParams,
355
+ schema: params.schema ?? {
356
+ globalByteSlices: this._appSpec.state.schema.global.bytes,
357
+ globalInts: this._appSpec.state.schema.global.ints,
358
+ localByteSlices: this._appSpec.state.schema.local.bytes,
359
+ localInts: this._appSpec.state.schema.local.ints
360
+ },
361
+ approvalProgram: compiled.approvalProgram,
362
+ clearStateProgram: compiled.clearStateProgram
363
+ }, params.onComplete ?? OnApplicationComplete.NoOpOC);
364
+ },
365
+ /** Return params for a deployment update ABI call */
366
+ deployUpdate: (params) => {
367
+ return this.getABIParams(params, OnApplicationComplete.UpdateApplicationOC);
368
+ },
369
+ /** Return params for a deployment delete ABI call */
370
+ deployDelete: (params) => {
371
+ return this.getABIParams(params, OnApplicationComplete.DeleteApplicationOC);
372
+ },
373
+ bare: {
374
+ /** Return params for a create bare call, including deploy-time TEAL template replacements and compilation if provided */
375
+ create: async (params) => {
376
+ return this.getBareParams({
377
+ ...params,
378
+ deployTimeParams: params?.deployTimeParams ?? this._deployTimeParams,
379
+ schema: params?.schema ?? {
380
+ globalByteSlices: this._appSpec.state.schema.global.bytes,
381
+ globalInts: this._appSpec.state.schema.global.ints,
382
+ localByteSlices: this._appSpec.state.schema.local.bytes,
383
+ localInts: this._appSpec.state.schema.local.ints
384
+ },
385
+ ...await this.compile({
386
+ ...params,
387
+ deployTimeParams: params?.deployTimeParams ?? this._deployTimeParams
388
+ })
389
+ }, params?.onComplete ?? OnApplicationComplete.NoOpOC);
390
+ },
391
+ /** Return params for a deployment update bare call */
392
+ deployUpdate: (params) => {
393
+ return this.getBareParams(params, OnApplicationComplete.UpdateApplicationOC);
394
+ },
395
+ /** Return params for a deployment delete bare call */
396
+ deployDelete: (params) => {
397
+ return this.getBareParams(params, OnApplicationComplete.DeleteApplicationOC);
398
+ }
399
+ }
400
+ };
401
+ }
402
+ /** Make the given call and catch any errors, augmenting with debugging information before re-throwing. */
403
+ async handleCallErrors(call) {
404
+ try {
405
+ return await call();
406
+ } catch (e) {
407
+ throw this.exposeLogicError(e);
408
+ }
409
+ }
410
+ /**
411
+ * Compiles the approval and clear state programs (if TEAL templates provided),
412
+ * performing any provided deploy-time parameter replacement and stores
413
+ * the source maps.
414
+ *
415
+ * If no TEAL templates provided it will use any byte code provided in the app spec.
416
+ *
417
+ * Will store any generated source maps for later use in debugging.
418
+ * @param compilation Optional compilation parameters to use for the compilation
419
+ * @returns The compilation result
420
+ * @example
421
+ * ```typescript
422
+ * const result = await factory.compile()
423
+ * ```
424
+ */
425
+ async compile(compilation) {
426
+ const result = await AppClient.compile(this._appSpec, this._algorand.app, compilation);
427
+ if (result.compiledApproval) this._approvalSourceMap = result.compiledApproval.sourceMap;
428
+ if (result.compiledClear) this._clearSourceMap = result.compiledClear.sourceMap;
429
+ return result;
430
+ }
431
+ getBareParams(params, onComplete) {
432
+ return {
433
+ ...params,
434
+ sender: this.getSender(params?.sender),
435
+ signer: this.getSigner(params?.sender, params?.signer),
436
+ onComplete
437
+ };
438
+ }
439
+ getABIParams(params, onComplete) {
440
+ return {
441
+ ...params,
442
+ sender: this.getSender(params.sender),
443
+ signer: this.getSigner(params.sender, params.signer),
444
+ method: getArc56Method(params.method, this._appSpec),
445
+ args: this.getCreateABIArgsWithDefaultValues(params.method, params.args),
446
+ onComplete
447
+ };
448
+ }
449
+ getCreateABIArgsWithDefaultValues(methodNameOrSignature, args) {
450
+ const m = getArc56Method(methodNameOrSignature, this._appSpec);
451
+ return args?.map((a, i) => {
452
+ const arg = m.args[i];
453
+ if (a !== void 0) return arg.struct && typeof a === "object" && !Array.isArray(a) ? getABITupleFromABIStruct(a, this._appSpec.structs[arg.struct], this._appSpec.structs) : a;
454
+ const defaultValue = arg.defaultValue;
455
+ if (defaultValue) switch (defaultValue.source) {
456
+ case "literal": return getABIDecodedValue(Buffer.from(defaultValue.data, "base64"), m.method.args[i].type, this._appSpec.structs);
457
+ default: throw new Error(`Can't provide default value for ${defaultValue.source} for a contract creation call`);
458
+ }
459
+ throw new Error(`No value provided for required argument ${arg.name ?? `arg${i + 1}`} in call to method ${m.name}`);
460
+ });
461
+ }
462
+ /** Returns the sender for a call, using the `defaultSender`
463
+ * if none provided and throws an error if neither provided */
464
+ getSender(sender) {
465
+ if (!sender && !this._defaultSender) throw new Error(`No sender provided and no default sender present in app factory for call to app ${this._appName}`);
466
+ return typeof sender === "string" ? Address.fromString(sender) : sender ?? this._defaultSender;
467
+ }
468
+ /** Returns the signer for a call, using the provided signer or the `defaultSigner`
469
+ * if no signer was provided and the sender resolves to the default sender, the call will use default signer
470
+ * or `undefined` otherwise (so the signer is resolved from `AlgorandClient`) */
471
+ getSigner(sender, signer) {
472
+ return signer ?? (!sender || sender === this._defaultSender ? this._defaultSigner : void 0);
473
+ }
474
+ /**
475
+ * Checks for decode errors on the SendAppTransactionResult and maps the return value to the specified type
476
+ * on the ARC-56 method.
477
+ *
478
+ * If the return type is a struct then the struct will be returned.
479
+ *
480
+ * @param result The SendAppTransactionResult to be mapped
481
+ * @param method The method that was called
482
+ * @returns The smart contract response with an updated return value
483
+ */
484
+ async parseMethodCallReturn(result, method) {
485
+ const resultValue = await result;
486
+ return {
487
+ ...resultValue,
488
+ return: getArc56ReturnValue(resultValue.return, method, this._appSpec.structs)
489
+ };
490
+ }
491
+ };
492
+ //#endregion
487
493
  export { AppFactory };
488
- //# sourceMappingURL=app-factory.mjs.map
494
+
495
+ //# sourceMappingURL=app-factory.mjs.map