@algorandfoundation/algokit-utils 7.0.0-beta.9 → 7.0.0

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 (189) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +7 -0
  3. package/account/account.js +6 -4
  4. package/account/account.js.map +1 -1
  5. package/account/account.mjs +6 -4
  6. package/account/account.mjs.map +1 -1
  7. package/account/get-account-config-from-environment.js.map +1 -1
  8. package/account/get-account-config-from-environment.mjs.map +1 -1
  9. package/account/get-account.js.map +1 -1
  10. package/account/get-account.mjs.map +1 -1
  11. package/account/get-dispenser-account.js.map +1 -1
  12. package/account/get-dispenser-account.mjs.map +1 -1
  13. package/account/mnemonic-account.js.map +1 -1
  14. package/account/mnemonic-account.mjs.map +1 -1
  15. package/amount.js.map +1 -1
  16. package/amount.mjs.map +1 -1
  17. package/app-client.js.map +1 -1
  18. package/app-client.mjs.map +1 -1
  19. package/app-deploy.js +2 -10
  20. package/app-deploy.js.map +1 -1
  21. package/app-deploy.mjs +3 -11
  22. package/app-deploy.mjs.map +1 -1
  23. package/app.d.ts +2 -2
  24. package/app.js +2 -2
  25. package/app.js.map +1 -1
  26. package/app.mjs +2 -2
  27. package/app.mjs.map +1 -1
  28. package/asset.js.map +1 -1
  29. package/asset.mjs.map +1 -1
  30. package/debugging/debugging.js.map +1 -1
  31. package/debugging/debugging.mjs.map +1 -1
  32. package/dispenser-client.js.map +1 -1
  33. package/dispenser-client.mjs.map +1 -1
  34. package/index.d.ts +1 -0
  35. package/index.js +6 -0
  36. package/index.js.map +1 -1
  37. package/index.mjs +2 -1
  38. package/index.mjs.map +1 -1
  39. package/indexer-lookup.js.map +1 -1
  40. package/indexer-lookup.mjs.map +1 -1
  41. package/localnet/get-kmd-wallet-account.js.map +1 -1
  42. package/localnet/get-kmd-wallet-account.mjs.map +1 -1
  43. package/localnet/get-localnet-dispenser-account.js.map +1 -1
  44. package/localnet/get-localnet-dispenser-account.mjs.map +1 -1
  45. package/localnet/get-or-create-kmd-wallet-account.js.map +1 -1
  46. package/localnet/get-or-create-kmd-wallet-account.mjs.map +1 -1
  47. package/localnet/is-localnet.js.map +1 -1
  48. package/localnet/is-localnet.mjs.map +1 -1
  49. package/network-client.js.map +1 -1
  50. package/network-client.mjs.map +1 -1
  51. package/package.json +5 -5
  52. package/testing/account.js.map +1 -1
  53. package/testing/account.mjs.map +1 -1
  54. package/testing/fixtures/algokit-log-capture-fixture.js.map +1 -1
  55. package/testing/fixtures/algokit-log-capture-fixture.mjs.map +1 -1
  56. package/testing/fixtures/algorand-fixture.js.map +1 -1
  57. package/testing/fixtures/algorand-fixture.mjs.map +1 -1
  58. package/testing/indexer.js.map +1 -1
  59. package/testing/indexer.mjs.map +1 -1
  60. package/testing/test-logger.js.map +1 -1
  61. package/testing/test-logger.mjs.map +1 -1
  62. package/testing/transaction-logger.js.map +1 -1
  63. package/testing/transaction-logger.mjs.map +1 -1
  64. package/transaction/legacy-bridge.js +2 -2
  65. package/transaction/legacy-bridge.js.map +1 -1
  66. package/transaction/legacy-bridge.mjs +3 -3
  67. package/transaction/legacy-bridge.mjs.map +1 -1
  68. package/transaction/perform-atomic-transaction-composer-simulate.js +1 -0
  69. package/transaction/perform-atomic-transaction-composer-simulate.js.map +1 -1
  70. package/transaction/perform-atomic-transaction-composer-simulate.mjs +1 -0
  71. package/transaction/perform-atomic-transaction-composer-simulate.mjs.map +1 -1
  72. package/transaction/transaction.d.ts +14 -7
  73. package/transaction/transaction.js +57 -31
  74. package/transaction/transaction.js.map +1 -1
  75. package/transaction/transaction.mjs +55 -30
  76. package/transaction/transaction.mjs.map +1 -1
  77. package/transfer/transfer-algos.js.map +1 -1
  78. package/transfer/transfer-algos.mjs.map +1 -1
  79. package/transfer/transfer.js.map +1 -1
  80. package/transfer/transfer.mjs.map +1 -1
  81. package/types/account-manager.d.ts +1 -1
  82. package/types/account-manager.js +10 -8
  83. package/types/account-manager.js.map +1 -1
  84. package/types/account-manager.mjs +11 -9
  85. package/types/account-manager.mjs.map +1 -1
  86. package/types/account.d.ts +9 -0
  87. package/types/account.js.map +1 -1
  88. package/types/account.mjs.map +1 -1
  89. package/types/algo-http-client-with-retry.js.map +1 -1
  90. package/types/algo-http-client-with-retry.mjs.map +1 -1
  91. package/types/algorand-client-interface.d.ts +2 -2
  92. package/types/algorand-client-transaction-creator.d.ts +5 -3
  93. package/types/algorand-client-transaction-creator.js +3 -1
  94. package/types/algorand-client-transaction-creator.js.map +1 -1
  95. package/types/algorand-client-transaction-creator.mjs +3 -1
  96. package/types/algorand-client-transaction-creator.mjs.map +1 -1
  97. package/types/algorand-client-transaction-sender.d.ts +12 -8
  98. package/types/algorand-client-transaction-sender.js +6 -2
  99. package/types/algorand-client-transaction-sender.js.map +1 -1
  100. package/types/algorand-client-transaction-sender.mjs +6 -2
  101. package/types/algorand-client-transaction-sender.mjs.map +1 -1
  102. package/types/algorand-client.d.ts +3 -4
  103. package/types/algorand-client.js +2 -5
  104. package/types/algorand-client.js.map +1 -1
  105. package/types/algorand-client.mjs +4 -4
  106. package/types/algorand-client.mjs.map +1 -1
  107. package/types/amount.js.map +1 -1
  108. package/types/amount.mjs.map +1 -1
  109. package/types/app-arc56.d.ts +31 -20
  110. package/types/app-arc56.js.map +1 -1
  111. package/types/app-arc56.mjs.map +1 -1
  112. package/types/app-client.d.ts +21 -10
  113. package/types/app-client.js +140 -33
  114. package/types/app-client.js.map +1 -1
  115. package/types/app-client.mjs +138 -31
  116. package/types/app-client.mjs.map +1 -1
  117. package/types/app-deployer.js +1 -1
  118. package/types/app-deployer.js.map +1 -1
  119. package/types/app-deployer.mjs +2 -2
  120. package/types/app-deployer.mjs.map +1 -1
  121. package/types/app-factory.d.ts +14 -4
  122. package/types/app-factory.js +0 -2
  123. package/types/app-factory.js.map +1 -1
  124. package/types/app-factory.mjs +0 -2
  125. package/types/app-factory.mjs.map +1 -1
  126. package/types/app-manager.js +105 -23
  127. package/types/app-manager.js.map +1 -1
  128. package/types/app-manager.mjs +105 -23
  129. package/types/app-manager.mjs.map +1 -1
  130. package/types/app-spec.js +8 -2
  131. package/types/app-spec.js.map +1 -1
  132. package/types/app-spec.mjs +8 -2
  133. package/types/app-spec.mjs.map +1 -1
  134. package/types/app.d.ts +8 -7
  135. package/types/app.js.map +1 -1
  136. package/types/app.mjs.map +1 -1
  137. package/types/asset-manager.d.ts +4 -4
  138. package/types/asset-manager.js +2 -2
  139. package/types/asset-manager.js.map +1 -1
  140. package/types/asset-manager.mjs +2 -2
  141. package/types/asset-manager.mjs.map +1 -1
  142. package/types/async-event-emitter.d.ts +1 -10
  143. package/types/async-event-emitter.js +0 -5
  144. package/types/async-event-emitter.js.map +1 -1
  145. package/types/async-event-emitter.mjs +1 -6
  146. package/types/async-event-emitter.mjs.map +1 -1
  147. package/types/client-manager.js +2 -2
  148. package/types/client-manager.js.map +1 -1
  149. package/types/client-manager.mjs +2 -2
  150. package/types/client-manager.mjs.map +1 -1
  151. package/types/composer.d.ts +36 -24
  152. package/types/composer.js +99 -40
  153. package/types/composer.js.map +1 -1
  154. package/types/composer.mjs +100 -39
  155. package/types/composer.mjs.map +1 -1
  156. package/types/config.js.map +1 -1
  157. package/types/config.mjs.map +1 -1
  158. package/types/debugging.d.ts +1 -1
  159. package/types/debugging.js +1 -1
  160. package/types/debugging.js.map +1 -1
  161. package/types/debugging.mjs +1 -1
  162. package/types/debugging.mjs.map +1 -1
  163. package/types/dispenser-client.js.map +1 -1
  164. package/types/dispenser-client.mjs.map +1 -1
  165. package/types/indexer.js.map +1 -1
  166. package/types/indexer.mjs.map +1 -1
  167. package/types/kmd-account-manager.js +1 -1
  168. package/types/kmd-account-manager.js.map +1 -1
  169. package/types/kmd-account-manager.mjs +2 -2
  170. package/types/kmd-account-manager.mjs.map +1 -1
  171. package/types/lifecycle-events.d.ts +10 -0
  172. package/types/lifecycle-events.js +8 -0
  173. package/types/lifecycle-events.js.map +1 -0
  174. package/types/lifecycle-events.mjs +8 -0
  175. package/types/lifecycle-events.mjs.map +1 -0
  176. package/types/logging.js.map +1 -1
  177. package/types/logging.mjs.map +1 -1
  178. package/types/logic-error.d.ts +2 -3
  179. package/types/logic-error.js +3 -3
  180. package/types/logic-error.js.map +1 -1
  181. package/types/logic-error.mjs +3 -3
  182. package/types/logic-error.mjs.map +1 -1
  183. package/types/network-client.js.map +1 -1
  184. package/types/network-client.mjs.map +1 -1
  185. package/types/testing.d.ts +1 -1
  186. package/types/urlTokenBaseHTTPClient.js.map +1 -1
  187. package/types/urlTokenBaseHTTPClient.mjs.map +1 -1
  188. package/util.js.map +1 -1
  189. package/util.mjs.map +1 -1
@@ -287,6 +287,11 @@ export type OnlineKeyRegistrationParams = CommonTransactionParams & {
287
287
  /** The 64 byte state proof public key commitment */
288
288
  stateProofKey?: Uint8Array;
289
289
  };
290
+ /** Parameters to define an offline key registration transaction. */
291
+ export type OfflineKeyRegistrationParams = CommonTransactionParams & {
292
+ /** Prevent this account from ever participating again. The account will also no longer earn rewards */
293
+ preventAccountFromEverParticipatingAgain?: boolean;
294
+ };
290
295
  /** Common parameters for defining an application call transaction. */
291
296
  export type CommonAppCallParams = CommonTransactionParams & {
292
297
  /** ID of the application; 0 if the application is being created. */
@@ -371,8 +376,9 @@ export type AppMethodCall<T> = Expand<Omit<T, 'args'>> & {
371
376
  * * A transaction (where the signer will be automatically assigned)
372
377
  * * An unawaited transaction (e.g. from algorand.createTransaction.{transactionType}())
373
378
  * * Another method call (via method call params object)
379
+ * * undefined (this represents a placeholder transaction argument that is fulfilled by another method call argument)
374
380
  */
375
- args?: (algosdk.ABIValue | TransactionWithSigner | Transaction | Promise<Transaction> | AppMethodCall<AppCreateParams> | AppMethodCall<AppUpdateParams> | AppMethodCall<AppMethodCallParams>)[];
381
+ args?: (algosdk.ABIValue | TransactionWithSigner | Transaction | Promise<Transaction> | AppMethodCall<AppCreateParams> | AppMethodCall<AppUpdateParams> | AppMethodCall<AppMethodCallParams> | undefined)[];
376
382
  };
377
383
  export type Txn = (PaymentParams & {
378
384
  type: 'pay';
@@ -392,7 +398,7 @@ export type Txn = (PaymentParams & {
392
398
  type: 'assetOptOut';
393
399
  }) | ((AppCallParams | AppCreateParams | AppUpdateParams) & {
394
400
  type: 'appCall';
395
- }) | (OnlineKeyRegistrationParams & {
401
+ }) | ((OnlineKeyRegistrationParams | OfflineKeyRegistrationParams) & {
396
402
  type: 'keyReg';
397
403
  }) | (algosdk.TransactionWithSigner & {
398
404
  type: 'txnWithSigner';
@@ -402,8 +408,8 @@ export type Txn = (PaymentParams & {
402
408
  } | ((AppCallMethodCall | AppCreateMethodCall | AppUpdateMethodCall) & {
403
409
  type: 'methodCall';
404
410
  });
405
- /** Parameters to create an `AlgoKitComposer`. */
406
- export type AlgoKitComposerParams = {
411
+ /** Parameters to create an `TransactionComposer`. */
412
+ export type TransactionComposerParams = {
407
413
  /** The algod client to use to get suggestedParams and send the transaction group */
408
414
  algod: algosdk.Algodv2;
409
415
  /** The function used to get the TransactionSigner for a given address */
@@ -420,7 +426,7 @@ export type AlgoKitComposerParams = {
420
426
  */
421
427
  appManager?: AppManager;
422
428
  };
423
- /** Set of transactions built by `AlgoKitComposer`. */
429
+ /** Set of transactions built by `TransactionComposer`. */
424
430
  export interface BuiltTransactions {
425
431
  /** The built transactions */
426
432
  transactions: algosdk.Transaction[];
@@ -429,8 +435,8 @@ export interface BuiltTransactions {
429
435
  /** Any `TransactionSigner` objects associated with any of the transactions in a map keyed by transaction index. */
430
436
  signers: Map<number, algosdk.TransactionSigner>;
431
437
  }
432
- /** AlgoKit Composer helps you compose and execute transactions as a transaction group. */
433
- export default class AlgoKitComposer {
438
+ /** TransactionComposer helps you compose and execute transactions as a transaction group. */
439
+ export declare class TransactionComposer {
434
440
  /** Signer used to represent a lack of signer */
435
441
  private static NULL_SIGNER;
436
442
  /** The ATC used to compose the group */
@@ -451,65 +457,65 @@ export default class AlgoKitComposer {
451
457
  private defaultValidityWindowIsExplicit;
452
458
  private appManager;
453
459
  /**
454
- * Create an `AlgoKitComposer`.
460
+ * Create a `TransactionComposer`.
455
461
  * @param params The configuration for this composer
456
462
  */
457
- constructor(params: AlgoKitComposerParams);
463
+ constructor(params: TransactionComposerParams);
458
464
  /**
459
465
  * Add a pre-built transaction to the transaction group.
460
466
  * @param transaction The pre-built transaction
461
467
  * @param signer Optional signer override for the transaction
462
468
  * @returns The composer so you can chain method calls
463
469
  */
464
- addTransaction(transaction: Transaction, signer?: TransactionSigner): AlgoKitComposer;
470
+ addTransaction(transaction: Transaction, signer?: TransactionSigner): TransactionComposer;
465
471
  /**
466
472
  * Add a payment transaction to the transaction group.
467
473
  * @param params The payment transaction parameters
468
474
  * @returns The composer so you can chain method calls
469
475
  */
470
- addPayment(params: PaymentParams): AlgoKitComposer;
476
+ addPayment(params: PaymentParams): TransactionComposer;
471
477
  /**
472
478
  * Add an asset create transaction to the transaction group.
473
479
  * @param params The asset create transaction parameters
474
480
  * @returns The composer so you can chain method calls
475
481
  */
476
- addAssetCreate(params: AssetCreateParams): AlgoKitComposer;
482
+ addAssetCreate(params: AssetCreateParams): TransactionComposer;
477
483
  /**
478
484
  * Add an asset config transaction to the transaction group.
479
485
  * @param params The asset config transaction parameters
480
486
  * @returns The composer so you can chain method calls
481
487
  */
482
- addAssetConfig(params: AssetConfigParams): AlgoKitComposer;
488
+ addAssetConfig(params: AssetConfigParams): TransactionComposer;
483
489
  /**
484
490
  * Add an asset freeze transaction to the transaction group.
485
491
  * @param params The asset freeze transaction parameters
486
492
  * @returns The composer so you can chain method calls
487
493
  */
488
- addAssetFreeze(params: AssetFreezeParams): AlgoKitComposer;
494
+ addAssetFreeze(params: AssetFreezeParams): TransactionComposer;
489
495
  /**
490
496
  * Add an asset destroy transaction to the transaction group.
491
497
  * @param params The asset destroy transaction parameters
492
498
  * @returns The composer so you can chain method calls
493
499
  */
494
- addAssetDestroy(params: AssetDestroyParams): AlgoKitComposer;
500
+ addAssetDestroy(params: AssetDestroyParams): TransactionComposer;
495
501
  /**
496
502
  * Add an asset transfer transaction to the transaction group.
497
503
  * @param params The asset transfer transaction parameters
498
504
  * @returns The composer so you can chain method calls
499
505
  */
500
- addAssetTransfer(params: AssetTransferParams): AlgoKitComposer;
506
+ addAssetTransfer(params: AssetTransferParams): TransactionComposer;
501
507
  /**
502
508
  * Add an asset opt-in transaction to the transaction group.
503
509
  * @param params The asset opt-in transaction parameters
504
510
  * @returns The composer so you can chain method calls
505
511
  */
506
- addAssetOptIn(params: AssetOptInParams): AlgoKitComposer;
512
+ addAssetOptIn(params: AssetOptInParams): TransactionComposer;
507
513
  /**
508
514
  * Add an asset opt-out transaction to the transaction group.
509
515
  * @param params The asset opt-out transaction parameters
510
516
  * @returns The composer so you can chain method calls
511
517
  */
512
- addAssetOptOut(params: AssetOptOutParams): AlgoKitComposer;
518
+ addAssetOptOut(params: AssetOptOutParams): TransactionComposer;
513
519
  /**
514
520
  * Add an application create transaction to the transaction group.
515
521
  *
@@ -517,7 +523,7 @@ export default class AlgoKitComposer {
517
523
  * @param params The application create transaction parameters
518
524
  * @returns The composer so you can chain method calls
519
525
  */
520
- addAppCreate(params: AppCreateParams): AlgoKitComposer;
526
+ addAppCreate(params: AppCreateParams): TransactionComposer;
521
527
  /**
522
528
  * Add an application update transaction to the transaction group.
523
529
  *
@@ -525,7 +531,7 @@ export default class AlgoKitComposer {
525
531
  * @param params The application update transaction parameters
526
532
  * @returns The composer so you can chain method calls
527
533
  */
528
- addAppUpdate(params: AppUpdateParams): AlgoKitComposer;
534
+ addAppUpdate(params: AppUpdateParams): TransactionComposer;
529
535
  /**
530
536
  * Add an application delete transaction to the transaction group.
531
537
  *
@@ -533,7 +539,7 @@ export default class AlgoKitComposer {
533
539
  * @param params The application delete transaction parameters
534
540
  * @returns The composer so you can chain method calls
535
541
  */
536
- addAppDelete(params: AppDeleteParams): AlgoKitComposer;
542
+ addAppDelete(params: AppDeleteParams): TransactionComposer;
537
543
  /**
538
544
  * Add an application call transaction to the transaction group.
539
545
  *
@@ -543,7 +549,7 @@ export default class AlgoKitComposer {
543
549
  * @param params The application call transaction parameters
544
550
  * @returns The composer so you can chain method calls
545
551
  */
546
- addAppCall(params: AppCallParams): AlgoKitComposer;
552
+ addAppCall(params: AppCallParams): TransactionComposer;
547
553
  /**
548
554
  * Add an ABI method create application call transaction to the transaction group.
549
555
  *
@@ -581,13 +587,19 @@ export default class AlgoKitComposer {
581
587
  * @param params The online key registration transaction parameters
582
588
  * @returns The composer so you can chain method calls
583
589
  */
584
- addOnlineKeyRegistration(params: OnlineKeyRegistrationParams): AlgoKitComposer;
590
+ addOnlineKeyRegistration(params: OnlineKeyRegistrationParams): TransactionComposer;
591
+ /**
592
+ * Add an offline key registration transaction to the transaction group.
593
+ * @param params The offline key registration transaction parameters
594
+ * @returns The composer so you can chain method calls
595
+ */
596
+ addOfflineKeyRegistration(params: OfflineKeyRegistrationParams): TransactionComposer;
585
597
  /**
586
598
  * Add the transactions within an `AtomicTransactionComposer` to the transaction group.
587
599
  * @param atc The `AtomicTransactionComposer` to build transactions from and add to the group
588
600
  * @returns The composer so you can chain method calls
589
601
  */
590
- addAtc(atc: algosdk.AtomicTransactionComposer): AlgoKitComposer;
602
+ addAtc(atc: algosdk.AtomicTransactionComposer): TransactionComposer;
591
603
  /** Build an ATC and return transactions ready to be incorporated into a broader set of transactions this composer is composing */
592
604
  private buildAtc;
593
605
  private commonTxnBuildStep;
package/types/composer.js CHANGED
@@ -1,14 +1,11 @@
1
1
  'use strict';
2
2
 
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
3
  var algosdk = require('algosdk');
6
4
  var config = require('../config.js');
7
- var performAtomicTransactionComposerSimulate = require('../transaction/perform-atomic-transaction-composer-simulate.js');
8
5
  var transaction = require('../transaction/transaction.js');
9
6
  var types_app = require('./app.js');
10
7
  var types_appManager = require('./app-manager.js');
11
- var types_asyncEventEmitter = require('./async-event-emitter.js');
8
+ var types_lifecycleEvents = require('./lifecycle-events.js');
12
9
  var types_networkClient = require('./network-client.js');
13
10
 
14
11
  var AtomicTransactionComposer = algosdk.AtomicTransactionComposer;
@@ -16,10 +13,10 @@ var isTransactionWithSigner = algosdk.isTransactionWithSigner;
16
13
  var encodeAddress = algosdk.encodeAddress;
17
14
  var modelsv2 = algosdk.modelsv2;
18
15
  const MAX_TRANSACTION_GROUP_SIZE = 16;
19
- /** AlgoKit Composer helps you compose and execute transactions as a transaction group. */
20
- class AlgoKitComposer {
16
+ /** TransactionComposer helps you compose and execute transactions as a transaction group. */
17
+ class TransactionComposer {
21
18
  /**
22
- * Create an `AlgoKitComposer`.
19
+ * Create a `TransactionComposer`.
23
20
  * @param params The configuration for this composer
24
21
  */
25
22
  constructor(params) {
@@ -226,6 +223,15 @@ class AlgoKitComposer {
226
223
  this.txns.push({ ...params, type: 'keyReg' });
227
224
  return this;
228
225
  }
226
+ /**
227
+ * Add an offline key registration transaction to the transaction group.
228
+ * @param params The offline key registration transaction parameters
229
+ * @returns The composer so you can chain method calls
230
+ */
231
+ addOfflineKeyRegistration(params) {
232
+ this.txns.push({ ...params, type: 'keyReg' });
233
+ return this;
234
+ }
229
235
  /**
230
236
  * Add the transactions within an `AtomicTransactionComposer` to the transaction group.
231
237
  * @param atc The `AtomicTransactionComposer` to build transactions from and add to the group
@@ -239,7 +245,7 @@ class AlgoKitComposer {
239
245
  buildAtc(atc, processTransaction) {
240
246
  const group = atc.buildGroup();
241
247
  const txnWithSigners = group.map((ts, idx) => {
242
- // Remove underlying group ID from the transaction since it will be re-grouped when this AlgoKitComposer is built
248
+ // Remove underlying group ID from the transaction since it will be re-grouped when this TransactionComposer is built
243
249
  ts.txn.group = undefined;
244
250
  // Process transaction if a function is provided
245
251
  ts.txn = processTransaction?.(ts.txn, idx) ?? ts.txn;
@@ -296,14 +302,22 @@ class AlgoKitComposer {
296
302
  */
297
303
  async buildMethodCall(params, suggestedParams, includeSigner) {
298
304
  const methodArgs = [];
305
+ const transactionsForGroup = [];
299
306
  const isAbiValue = (x) => {
300
307
  if (Array.isArray(x))
301
308
  return x.length == 0 || x.every(isAbiValue);
302
309
  return typeof x === 'bigint' || typeof x === 'boolean' || typeof x === 'number' || typeof x === 'string' || x instanceof Uint8Array;
303
310
  };
304
- for (let i = 0; i < (params.args ?? []).length; i++) {
311
+ for (let i = (params.args ?? []).length - 1; i >= 0; i--) {
305
312
  const arg = params.args[i];
306
313
  if (arg === undefined) {
314
+ // An undefined transaction argument signals that the value will be supplied by a method call argument
315
+ if (algosdk.abiTypeIsTransaction(params.method.args[i].type) && transactionsForGroup.length > 0) {
316
+ // Move the last transaction from the group to the method call arguments to appease algosdk
317
+ const placeholderTransaction = transactionsForGroup.splice(-1, 1)[0];
318
+ methodArgs.push(placeholderTransaction);
319
+ continue;
320
+ }
307
321
  throw Error(`No value provided for argument ${i + 1} within call to ${params.method.name}`);
308
322
  }
309
323
  if (isAbiValue(arg)) {
@@ -316,7 +330,10 @@ class AlgoKitComposer {
316
330
  }
317
331
  if ('method' in arg) {
318
332
  const tempTxnWithSigners = await this.buildMethodCall(arg, suggestedParams, includeSigner);
319
- methodArgs.push(...tempTxnWithSigners);
333
+ // If there is any transaction args, add to the atc
334
+ // Everything else should be added as method args
335
+ methodArgs.push(...tempTxnWithSigners.slice(-1)); // Add the method call itself as a method arg
336
+ transactionsForGroup.push(...tempTxnWithSigners.slice(0, -1).reverse()); // Add any transaction arguments to the atc
320
337
  continue;
321
338
  }
322
339
  const txn = await arg;
@@ -328,10 +345,11 @@ class AlgoKitComposer {
328
345
  ? params.signer.signer
329
346
  : params.signer
330
347
  : this.getSigner(encodeAddress(txn.from.publicKey))
331
- : AlgoKitComposer.NULL_SIGNER,
348
+ : TransactionComposer.NULL_SIGNER,
332
349
  });
333
350
  }
334
351
  const methodAtc = new algosdk.AtomicTransactionComposer();
352
+ transactionsForGroup.reverse().forEach((txn) => methodAtc.addTransaction(txn));
335
353
  const appId = Number('appId' in params ? params.appId : 0n);
336
354
  const approvalProgram = 'approvalProgram' in params
337
355
  ? typeof params.approvalProgram === 'string'
@@ -361,10 +379,10 @@ class AlgoKitComposer {
361
379
  ? Math.floor((approvalProgram.length + (clearStateProgram?.length ?? 0)) / types_app.APP_PAGE_MAX_SIZE)
362
380
  : 0
363
381
  : undefined,
364
- numLocalInts: appId === 0 ? ('schema' in params ? params.schema?.localInts ?? 0 : 0) : undefined,
365
- numLocalByteSlices: appId === 0 ? ('schema' in params ? params.schema?.localByteSlices ?? 0 : 0) : undefined,
366
- numGlobalInts: appId === 0 ? ('schema' in params ? params.schema?.globalInts ?? 0 : 0) : undefined,
367
- numGlobalByteSlices: appId === 0 ? ('schema' in params ? params.schema?.globalByteSlices ?? 0 : 0) : undefined,
382
+ numLocalInts: appId === 0 ? ('schema' in params ? (params.schema?.localInts ?? 0) : 0) : undefined,
383
+ numLocalByteSlices: appId === 0 ? ('schema' in params ? (params.schema?.localByteSlices ?? 0) : 0) : undefined,
384
+ numGlobalInts: appId === 0 ? ('schema' in params ? (params.schema?.globalInts ?? 0) : 0) : undefined,
385
+ numGlobalByteSlices: appId === 0 ? ('schema' in params ? (params.schema?.globalByteSlices ?? 0) : 0) : undefined,
368
386
  method: params.method,
369
387
  signer: includeSigner
370
388
  ? params.signer
@@ -372,8 +390,8 @@ class AlgoKitComposer {
372
390
  ? params.signer.signer
373
391
  : params.signer
374
392
  : this.getSigner(params.sender)
375
- : AlgoKitComposer.NULL_SIGNER,
376
- methodArgs: methodArgs,
393
+ : TransactionComposer.NULL_SIGNER,
394
+ methodArgs: methodArgs.reverse(),
377
395
  // note, lease, and rekeyTo are set in the common build step
378
396
  note: undefined,
379
397
  lease: undefined,
@@ -486,12 +504,12 @@ class AlgoKitComposer {
486
504
  txn = algosdk.makeApplicationCreateTxnFromObject({
487
505
  ...sdkParams,
488
506
  extraPages: 'extraProgramPages' in params
489
- ? params.extraProgramPages ?? Math.floor((approvalProgram.length + clearStateProgram.length) / types_app.APP_PAGE_MAX_SIZE)
507
+ ? (params.extraProgramPages ?? Math.floor((approvalProgram.length + clearStateProgram.length) / types_app.APP_PAGE_MAX_SIZE))
490
508
  : 0,
491
- numLocalInts: 'schema' in params ? params.schema?.localInts ?? 0 : 0,
492
- numLocalByteSlices: 'schema' in params ? params.schema?.localByteSlices ?? 0 : 0,
493
- numGlobalInts: 'schema' in params ? params.schema?.globalInts ?? 0 : 0,
494
- numGlobalByteSlices: 'schema' in params ? params.schema?.globalByteSlices ?? 0 : 0,
509
+ numLocalInts: 'schema' in params ? (params.schema?.localInts ?? 0) : 0,
510
+ numLocalByteSlices: 'schema' in params ? (params.schema?.localByteSlices ?? 0) : 0,
511
+ numGlobalInts: 'schema' in params ? (params.schema?.globalInts ?? 0) : 0,
512
+ numGlobalByteSlices: 'schema' in params ? (params.schema?.globalByteSlices ?? 0) : 0,
495
513
  approvalProgram: approvalProgram,
496
514
  clearProgram: clearStateProgram,
497
515
  });
@@ -502,7 +520,32 @@ class AlgoKitComposer {
502
520
  return this.commonTxnBuildStep(params, txn, suggestedParams);
503
521
  }
504
522
  buildKeyReg(params, suggestedParams) {
505
- const txn = algosdk.makeKeyRegistrationTxnWithSuggestedParams(params.sender, undefined, params.voteKey, params.selectionKey, Number(params.voteFirst), Number(params.voteLast), Number(params.voteKeyDilution), suggestedParams, undefined, false, params.stateProofKey);
523
+ let txn;
524
+ if ('voteKey' in params) {
525
+ // algosdk throws when voteFirst is 0, so we need to set it to 1, then switch back to 0 after creating the transaction
526
+ const voteFirst = params.voteFirst === 0n ? 1n : params.voteFirst;
527
+ txn = algosdk.makeKeyRegistrationTxnWithSuggestedParamsFromObject({
528
+ from: params.sender,
529
+ voteKey: params.voteKey,
530
+ selectionKey: params.selectionKey,
531
+ voteFirst: Number(voteFirst),
532
+ voteLast: Number(params.voteLast),
533
+ voteKeyDilution: Number(params.voteKeyDilution),
534
+ suggestedParams,
535
+ nonParticipation: false,
536
+ stateProofKey: params.stateProofKey,
537
+ });
538
+ if (params.voteFirst === 0n) {
539
+ txn.voteFirst = 0;
540
+ }
541
+ }
542
+ else {
543
+ txn = algosdk.makeKeyRegistrationTxnWithSuggestedParamsFromObject({
544
+ from: params.sender,
545
+ suggestedParams,
546
+ nonParticipation: params.preventAccountFromEverParticipatingAgain,
547
+ });
548
+ }
506
549
  return this.commonTxnBuildStep(params, txn, suggestedParams);
507
550
  }
508
551
  /** Builds all transaction types apart from `txnWithSigner`, `atc` and `methodCall` since those ones can have custom signers that need to be retrieved. */
@@ -569,7 +612,7 @@ class AlgoKitComposer {
569
612
  : [];
570
613
  transactions.push(...transactionsWithSigner.map((ts) => ts.txn));
571
614
  transactionsWithSigner.forEach((ts, idx) => {
572
- if (ts.signer && ts.signer !== AlgoKitComposer.NULL_SIGNER) {
615
+ if (ts.signer && ts.signer !== TransactionComposer.NULL_SIGNER) {
573
616
  signers.set(idx, ts.signer);
574
617
  }
575
618
  });
@@ -668,10 +711,11 @@ class AlgoKitComposer {
668
711
  // Build the transactions
669
712
  if (options?.skipSignatures) {
670
713
  options.allowEmptySignatures = true;
714
+ options.fixSigners = true;
671
715
  // Build transactions uses empty signers
672
716
  const transactions = await this.buildTransactions();
673
717
  for (const txn of transactions.transactions) {
674
- atc.addTransaction({ txn, signer: AlgoKitComposer.NULL_SIGNER });
718
+ atc.addTransaction({ txn, signer: TransactionComposer.NULL_SIGNER });
675
719
  }
676
720
  atc['methodCalls'] = transactions.methodCalls;
677
721
  }
@@ -679,21 +723,36 @@ class AlgoKitComposer {
679
723
  // Build creates real signatures
680
724
  await this.build();
681
725
  }
682
- if (config.Config.debug && !config.Config.traceAll) {
683
- // Dump the traces to a file for use with AlgoKit AVM debugger
684
- // Checks for false on traceAll because it should have been already
685
- // executed above
686
- const simulateResponse = await performAtomicTransactionComposerSimulate.performAtomicTransactionComposerSimulate(atc, this.algod);
687
- await config.Config.events.emitAsync(types_asyncEventEmitter.EventType.TxnGroupSimulated, {
688
- simulateResponse,
689
- });
690
- }
691
- const { methodResults, simulateResponse } = await atc.simulate(this.algod, new modelsv2.SimulateRequest({ txnGroups: [], ...options }));
692
- if (simulateResponse && simulateResponse.txnGroups[0].failedAt) {
693
- const error = new Error(`Transaction failed at transaction(s) ${simulateResponse.txnGroups[0].failedAt.join(', ')} in the group. ${simulateResponse.txnGroups.find((x) => x.failureMessage)?.failureMessage}`);
726
+ const { methodResults, simulateResponse } = await atc.simulate(this.algod, new modelsv2.SimulateRequest({
727
+ txnGroups: [],
728
+ ...options,
729
+ ...(config.Config.debug
730
+ ? {
731
+ allowEmptySignatures: true,
732
+ fixSigners: true,
733
+ allowMoreLogging: true,
734
+ execTraceConfig: new modelsv2.SimulateTraceConfig({
735
+ enable: true,
736
+ scratchChange: true,
737
+ stackChange: true,
738
+ stateChange: true,
739
+ }),
740
+ }
741
+ : undefined),
742
+ }));
743
+ const failedGroup = simulateResponse?.txnGroups[0];
744
+ if (failedGroup?.failureMessage) {
745
+ const errorMessage = `Transaction failed at transaction(s) ${failedGroup.failedAt?.join(', ') || 'unknown'} in the group. ${failedGroup.failureMessage}`;
746
+ const error = new Error(errorMessage);
747
+ if (config.Config.debug) {
748
+ await config.Config.events.emitAsync(types_lifecycleEvents.EventType.TxnGroupSimulated, { simulateResponse });
749
+ }
694
750
  error.simulateResponse = simulateResponse;
695
751
  throw error;
696
752
  }
753
+ if (config.Config.debug && config.Config.traceAll) {
754
+ await config.Config.events.emitAsync(types_lifecycleEvents.EventType.TxnGroupSimulated, { simulateResponse });
755
+ }
697
756
  const transactions = atc.buildGroup().map((t) => t.txn);
698
757
  return {
699
758
  confirmations: simulateResponse.txnGroups[0].txnResults.map((t) => t.txnResult),
@@ -701,7 +760,7 @@ class AlgoKitComposer {
701
760
  txIds: transactions.map((t) => t.txID()),
702
761
  groupId: Buffer.from(transactions[0].group ?? new Uint8Array()).toString('base64'),
703
762
  simulateResponse,
704
- returns: methodResults.map((m) => m),
763
+ returns: methodResults.map(transaction.getABIReturnValue),
705
764
  };
706
765
  }
707
766
  /**
@@ -718,8 +777,8 @@ class AlgoKitComposer {
718
777
  }
719
778
  }
720
779
  /** Signer used to represent a lack of signer */
721
- AlgoKitComposer.NULL_SIGNER = algosdk.makeEmptyTransactionSigner();
780
+ TransactionComposer.NULL_SIGNER = algosdk.makeEmptyTransactionSigner();
722
781
 
723
782
  exports.MAX_TRANSACTION_GROUP_SIZE = MAX_TRANSACTION_GROUP_SIZE;
724
- exports.default = AlgoKitComposer;
783
+ exports.TransactionComposer = TransactionComposer;
725
784
  //# sourceMappingURL=composer.js.map