@algorandfoundation/algokit-utils 6.0.0-beta.3 → 6.0.0-beta.5

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 (62) hide show
  1. package/account/account.d.ts +33 -1
  2. package/account/account.d.ts.map +1 -1
  3. package/account/account.js +63 -0
  4. package/account/account.js.map +1 -1
  5. package/account/account.mjs +62 -1
  6. package/account/account.mjs.map +1 -1
  7. package/index.d.ts +1 -0
  8. package/index.d.ts.map +1 -1
  9. package/index.js +5 -0
  10. package/index.js.map +1 -1
  11. package/index.mjs +3 -2
  12. package/index.mjs.map +1 -1
  13. package/indexer-lookup.d.ts +11 -2
  14. package/indexer-lookup.d.ts.map +1 -1
  15. package/indexer-lookup.js +33 -1
  16. package/indexer-lookup.js.map +1 -1
  17. package/indexer-lookup.mjs +33 -2
  18. package/indexer-lookup.mjs.map +1 -1
  19. package/package.json +1 -1
  20. package/testing/fixtures/algorand-fixture.d.ts.map +1 -1
  21. package/testing/fixtures/algorand-fixture.js +15 -2
  22. package/testing/fixtures/algorand-fixture.js.map +1 -1
  23. package/testing/fixtures/algorand-fixture.mjs +15 -2
  24. package/testing/fixtures/algorand-fixture.mjs.map +1 -1
  25. package/types/account-manager.d.ts +211 -0
  26. package/types/account-manager.d.ts.map +1 -0
  27. package/types/account-manager.js +265 -0
  28. package/types/account-manager.js.map +1 -0
  29. package/types/account-manager.mjs +263 -0
  30. package/types/account-manager.mjs.map +1 -0
  31. package/types/account.d.ts +19 -0
  32. package/types/account.d.ts.map +1 -1
  33. package/types/account.js.map +1 -1
  34. package/types/account.mjs.map +1 -1
  35. package/types/algorand-client.d.ts +183 -0
  36. package/types/algorand-client.d.ts.map +1 -0
  37. package/types/algorand-client.js +296 -0
  38. package/types/algorand-client.js.map +1 -0
  39. package/types/algorand-client.mjs +291 -0
  40. package/types/algorand-client.mjs.map +1 -0
  41. package/types/client-manager.d.ts +99 -0
  42. package/types/client-manager.d.ts.map +1 -0
  43. package/types/client-manager.js +99 -0
  44. package/types/client-manager.js.map +1 -0
  45. package/types/client-manager.mjs +97 -0
  46. package/types/client-manager.mjs.map +1 -0
  47. package/types/composer.d.ts +331 -0
  48. package/types/composer.d.ts.map +1 -0
  49. package/types/composer.js +446 -0
  50. package/types/composer.js.map +1 -0
  51. package/types/composer.mjs +444 -0
  52. package/types/composer.mjs.map +1 -0
  53. package/types/indexer.d.ts +39 -0
  54. package/types/indexer.d.ts.map +1 -1
  55. package/types/indexer.js.map +1 -1
  56. package/types/indexer.mjs.map +1 -1
  57. package/types/network-client.d.ts +2 -2
  58. package/types/network-client.d.ts.map +1 -1
  59. package/types/testing.d.ts +8 -2
  60. package/types/testing.d.ts.map +1 -1
  61. package/types/transaction.d.ts +4 -0
  62. package/types/transaction.d.ts.map +1 -1
@@ -0,0 +1,446 @@
1
+ 'use strict';
2
+
3
+ var algosdk = require('algosdk');
4
+ var transaction = require('../transaction/transaction.js');
5
+
6
+ var isTransactionWithSigner = algosdk.isTransactionWithSigner;
7
+ var encodeAddress = algosdk.encodeAddress;
8
+ /** AlgoKit Composer helps you compose and execute transactions as a transaction group.
9
+ *
10
+ * Note: this class is a new Beta feature and may be subject to change.
11
+ *
12
+ * @beta
13
+ */
14
+ class AlgokitComposer {
15
+ /**
16
+ * Create an `AlgoKitComposer`.
17
+ * @param params The configuration for this composer
18
+ */
19
+ constructor(params) {
20
+ /** The ATC used to compose the group */
21
+ this.atc = new algosdk.AtomicTransactionComposer();
22
+ /** Map of txid to ABI method */
23
+ this.txnMethodMap = new Map();
24
+ /** Transactions that have not yet been composed */
25
+ this.txns = [];
26
+ /** The default transaction validity window */
27
+ this.defaultValidityWindow = 10;
28
+ this.algod = params.algod;
29
+ const defaultGetSuggestedParams = () => params.algod.getTransactionParams().do();
30
+ this.getSuggestedParams = params.getSuggestedParams ?? defaultGetSuggestedParams;
31
+ this.getSigner = params.getSigner;
32
+ this.defaultValidityWindow = params.defaultValidityWindow ?? this.defaultValidityWindow;
33
+ }
34
+ /**
35
+ * Add a payment transaction to the transaction group.
36
+ * @param params The payment transaction parameters
37
+ * @returns The composer so you can chain method calls
38
+ */
39
+ addPayment(params) {
40
+ this.txns.push({ ...params, type: 'pay' });
41
+ return this;
42
+ }
43
+ /**
44
+ * Add an asset create transaction to the transaction group.
45
+ * @param params The asset create transaction parameters
46
+ * @returns The composer so you can chain method calls
47
+ */
48
+ addAssetCreate(params) {
49
+ this.txns.push({ ...params, type: 'assetCreate' });
50
+ return this;
51
+ }
52
+ /**
53
+ * Add an asset config transaction to the transaction group.
54
+ * @param params The asset config transaction parameters
55
+ * @returns The composer so you can chain method calls
56
+ */
57
+ addAssetConfig(params) {
58
+ this.txns.push({ ...params, type: 'assetConfig' });
59
+ return this;
60
+ }
61
+ /**
62
+ * Add an asset freeze transaction to the transaction group.
63
+ * @param params The asset freeze transaction parameters
64
+ * @returns The composer so you can chain method calls
65
+ */
66
+ addAssetFreeze(params) {
67
+ this.txns.push({ ...params, type: 'assetFreeze' });
68
+ return this;
69
+ }
70
+ /**
71
+ * Add an asset destroy transaction to the transaction group.
72
+ * @param params The asset destroy transaction parameters
73
+ * @returns The composer so you can chain method calls
74
+ */
75
+ addAssetDestroy(params) {
76
+ this.txns.push({ ...params, type: 'assetDestroy' });
77
+ return this;
78
+ }
79
+ /**
80
+ * Add an asset transfer transaction to the transaction group.
81
+ * @param params The asset transfer transaction parameters
82
+ * @returns The composer so you can chain method calls
83
+ */
84
+ addAssetTransfer(params) {
85
+ this.txns.push({ ...params, type: 'assetTransfer' });
86
+ return this;
87
+ }
88
+ /**
89
+ * Add an asset opt-in transaction to the transaction group.
90
+ * @param params The asset opt-in transaction parameters
91
+ * @returns The composer so you can chain method calls
92
+ */
93
+ addAssetOptIn(params) {
94
+ this.txns.push({ ...params, type: 'assetOptIn' });
95
+ return this;
96
+ }
97
+ /**
98
+ * Add an application call transaction to the transaction group.
99
+ *
100
+ * Note: we recommend using app clients to make it easier to make app calls.
101
+ * @param params The application call transaction parameters
102
+ * @returns The composer so you can chain method calls
103
+ */
104
+ addAppCall(params) {
105
+ this.txns.push({ ...params, type: 'appCall' });
106
+ return this;
107
+ }
108
+ /**
109
+ * Add an ABI method application call transaction to the transaction group.
110
+ *
111
+ * Note: we recommend using app clients to make it easier to make app calls.
112
+ * @param params The ABI method application call transaction parameters
113
+ * @returns The composer so you can chain method calls
114
+ */
115
+ addMethodCall(params) {
116
+ this.txns.push({ ...params, type: 'methodCall' });
117
+ return this;
118
+ }
119
+ /**
120
+ * Add an online key registration transaction to the transaction group.
121
+ * @param params The online key registration transaction parameters
122
+ * @returns The composer so you can chain method calls
123
+ */
124
+ addOnlineKeyRegistration(params) {
125
+ this.txns.push({ ...params, type: 'keyReg' });
126
+ return this;
127
+ }
128
+ /**
129
+ * Add the transactions within an `AtomicTransactionComposer` to the transaction group.
130
+ * @param atc The `AtomicTransactionComposer` to build transactions from and add to the group
131
+ * @returns The composer so you can chain method calls
132
+ */
133
+ addAtc(atc) {
134
+ this.txns.push({ atc, type: 'atc' });
135
+ return this;
136
+ }
137
+ buildAtc(atc) {
138
+ const group = atc.buildGroup();
139
+ const txnWithSigners = group.map((ts) => {
140
+ ts.txn.group = undefined;
141
+ return ts;
142
+ });
143
+ const method = atc['methodCalls'].get(group.length - 1);
144
+ if (method)
145
+ this.txnMethodMap.set(txnWithSigners.at(-1).txn.txID(), method);
146
+ return txnWithSigners;
147
+ }
148
+ commonTxnBuildStep(params, txn, suggestedParams) {
149
+ if (params.lease)
150
+ txn.addLease(transaction.encodeLease(params.lease));
151
+ if (params.rekeyTo)
152
+ txn.addRekey(params.rekeyTo);
153
+ if (params.note)
154
+ txn.note = transaction.encodeTransactionNote(params.note);
155
+ if (params.firstValidRound) {
156
+ txn.firstRound = Number(params.firstValidRound);
157
+ }
158
+ if (params.lastValidRound) {
159
+ txn.lastRound = Number(params.lastValidRound);
160
+ }
161
+ else {
162
+ txn.lastRound = txn.firstRound + (params.validityWindow ?? this.defaultValidityWindow);
163
+ }
164
+ if (params.staticFee !== undefined && params.extraFee !== undefined) {
165
+ throw Error('Cannot set both staticFee and extraFee');
166
+ }
167
+ if (params.staticFee !== undefined) {
168
+ txn.fee = params.staticFee.microAlgos;
169
+ }
170
+ else {
171
+ txn.fee = txn.estimateSize() * suggestedParams.fee || algosdk.ALGORAND_MIN_TX_FEE;
172
+ if (params.extraFee)
173
+ txn.fee += params.extraFee.microAlgos;
174
+ }
175
+ txn.flatFee = true;
176
+ if (params.maxFee !== undefined && txn.fee > params.maxFee.microAlgos) {
177
+ throw Error(`Transaction fee ${txn.fee} is greater than maxFee ${params.maxFee}`);
178
+ }
179
+ return txn;
180
+ }
181
+ async buildMethodCall(params, suggestedParams) {
182
+ const methodArgs = [];
183
+ const isAbiValue = (x) => {
184
+ if (Array.isArray(x))
185
+ return x.length == 0 || x.every(isAbiValue);
186
+ return ['boolean', 'number', 'bigint', 'string', 'Uint8Array'].includes(typeof x);
187
+ };
188
+ for (const arg of params.args ?? []) {
189
+ if (isAbiValue(arg)) {
190
+ methodArgs.push(arg);
191
+ continue;
192
+ }
193
+ if (isTransactionWithSigner(arg)) {
194
+ methodArgs.push(arg);
195
+ continue;
196
+ }
197
+ if ('method' in arg) {
198
+ const tempTxnWithSigners = await this.buildMethodCall(arg, suggestedParams);
199
+ methodArgs.push(...tempTxnWithSigners);
200
+ continue;
201
+ }
202
+ const txn = await arg;
203
+ methodArgs.push({
204
+ txn,
205
+ signer: params.signer
206
+ ? 'signer' in params.signer
207
+ ? params.signer.signer
208
+ : params.signer
209
+ : this.getSigner(encodeAddress(txn.from.publicKey)),
210
+ });
211
+ }
212
+ const methodAtc = new algosdk.AtomicTransactionComposer();
213
+ methodAtc.addMethodCall({
214
+ ...params,
215
+ appID: Number(params.appId || 0),
216
+ suggestedParams,
217
+ signer: params.signer ? ('signer' in params.signer ? params.signer.signer : params.signer) : this.getSigner(params.sender),
218
+ methodArgs: methodArgs,
219
+ // note, lease, and rekeyTo are set in the common build step
220
+ note: undefined,
221
+ lease: undefined,
222
+ rekeyTo: undefined,
223
+ });
224
+ // Run the actual method call txn through the common build step to set fees and validity rounds
225
+ const group = methodAtc.buildGroup();
226
+ const methodIdx = group.length - 1;
227
+ group[methodIdx].txn = this.commonTxnBuildStep(params, group[methodIdx].txn, suggestedParams);
228
+ return this.buildAtc(methodAtc);
229
+ }
230
+ buildPayment(params, suggestedParams) {
231
+ const txn = algosdk.makePaymentTxnWithSuggestedParamsFromObject({
232
+ from: params.sender,
233
+ to: params.receiver,
234
+ amount: params.amount.microAlgos,
235
+ closeRemainderTo: params.closeRemainderTo,
236
+ suggestedParams,
237
+ });
238
+ return this.commonTxnBuildStep(params, txn, suggestedParams);
239
+ }
240
+ buildAssetCreate(params, suggestedParams) {
241
+ const txn = algosdk.makeAssetCreateTxnWithSuggestedParamsFromObject({
242
+ from: params.sender,
243
+ total: params.total,
244
+ decimals: params.decimals ?? 0,
245
+ assetName: params.assetName,
246
+ unitName: params.unitName,
247
+ assetURL: params.url,
248
+ defaultFrozen: params.defaultFrozen ?? false,
249
+ assetMetadataHash: params.metadataHash,
250
+ manager: params.manager,
251
+ reserve: params.reserve,
252
+ freeze: params.freeze,
253
+ clawback: params.clawback,
254
+ suggestedParams,
255
+ });
256
+ return this.commonTxnBuildStep(params, txn, suggestedParams);
257
+ }
258
+ buildAssetConfig(params, suggestedParams) {
259
+ const txn = algosdk.makeAssetConfigTxnWithSuggestedParamsFromObject({
260
+ from: params.sender,
261
+ assetIndex: Number(params.assetId),
262
+ suggestedParams,
263
+ manager: params.manager,
264
+ reserve: params.reserve,
265
+ freeze: params.freeze,
266
+ clawback: params.clawback,
267
+ strictEmptyAddressChecking: false,
268
+ });
269
+ return this.commonTxnBuildStep(params, txn, suggestedParams);
270
+ }
271
+ buildAssetDestroy(params, suggestedParams) {
272
+ const txn = algosdk.makeAssetDestroyTxnWithSuggestedParamsFromObject({
273
+ from: params.sender,
274
+ assetIndex: Number(params.assetId),
275
+ suggestedParams,
276
+ });
277
+ return this.commonTxnBuildStep(params, txn, suggestedParams);
278
+ }
279
+ buildAssetFreeze(params, suggestedParams) {
280
+ const txn = algosdk.makeAssetFreezeTxnWithSuggestedParamsFromObject({
281
+ from: params.sender,
282
+ assetIndex: Number(params.assetId),
283
+ freezeTarget: params.account,
284
+ freezeState: params.frozen,
285
+ suggestedParams,
286
+ });
287
+ return this.commonTxnBuildStep(params, txn, suggestedParams);
288
+ }
289
+ buildAssetTransfer(params, suggestedParams) {
290
+ const txn = algosdk.makeAssetTransferTxnWithSuggestedParamsFromObject({
291
+ from: params.sender,
292
+ to: params.receiver,
293
+ assetIndex: Number(params.assetId),
294
+ amount: params.amount,
295
+ suggestedParams,
296
+ closeRemainderTo: params.closeAssetTo,
297
+ revocationTarget: params.clawbackTarget,
298
+ });
299
+ return this.commonTxnBuildStep(params, txn, suggestedParams);
300
+ }
301
+ buildAppCall(params, suggestedParams) {
302
+ const sdkParams = {
303
+ from: params.sender,
304
+ suggestedParams,
305
+ onComplete: params.onComplete,
306
+ approvalProgram: params.approvalProgram,
307
+ clearProgram: params.clearProgram,
308
+ appArgs: params.args,
309
+ accounts: params.accountReferences,
310
+ foreignApps: params.appReferences?.map((x) => Number(x)),
311
+ foreignAssets: params.assetReferences?.map((x) => Number(x)),
312
+ extraPages: params.extraPages,
313
+ numLocalInts: params.schema?.localUints || 0,
314
+ numLocalByteSlices: params.schema?.localByteSlices || 0,
315
+ numGlobalInts: params.schema?.globalUints || 0,
316
+ numGlobalByteSlices: params.schema?.globalByteSlices || 0,
317
+ };
318
+ let txn;
319
+ const onComplete = params.onComplete || algosdk.OnApplicationComplete.NoOpOC;
320
+ if (!params.appId) {
321
+ if (params.approvalProgram === undefined || params.clearProgram === undefined) {
322
+ throw new Error('approvalProgram and clearProgram are required for application creation');
323
+ }
324
+ txn = algosdk.makeApplicationCreateTxnFromObject({
325
+ ...sdkParams,
326
+ onComplete,
327
+ approvalProgram: params.approvalProgram,
328
+ clearProgram: params.clearProgram,
329
+ });
330
+ }
331
+ txn = algosdk.makeApplicationCallTxnFromObject({ ...sdkParams, onComplete, appIndex: Number(params.appId || 0) });
332
+ return this.commonTxnBuildStep(params, txn, suggestedParams);
333
+ }
334
+ buildKeyReg(params, suggestedParams) {
335
+ 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);
336
+ return this.commonTxnBuildStep(params, txn, suggestedParams);
337
+ }
338
+ async buildTxn(txn, suggestedParams) {
339
+ if (txn.type === 'txnWithSigner') {
340
+ return [txn];
341
+ }
342
+ if (txn.type === 'atc') {
343
+ return this.buildAtc(txn.atc);
344
+ }
345
+ if (txn.type === 'methodCall') {
346
+ return await this.buildMethodCall(txn, suggestedParams);
347
+ }
348
+ const signer = txn.signer ? ('signer' in txn.signer ? txn.signer.signer : txn.signer) : this.getSigner(txn.sender);
349
+ switch (txn.type) {
350
+ case 'pay': {
351
+ const payment = this.buildPayment(txn, suggestedParams);
352
+ return [{ txn: payment, signer }];
353
+ }
354
+ case 'assetCreate': {
355
+ const assetCreate = this.buildAssetCreate(txn, suggestedParams);
356
+ return [{ txn: assetCreate, signer }];
357
+ }
358
+ case 'appCall': {
359
+ const appCall = this.buildAppCall(txn, suggestedParams);
360
+ return [{ txn: appCall, signer }];
361
+ }
362
+ case 'assetConfig': {
363
+ const assetConfig = this.buildAssetConfig(txn, suggestedParams);
364
+ return [{ txn: assetConfig, signer }];
365
+ }
366
+ case 'assetDestroy': {
367
+ const assetDestroy = this.buildAssetDestroy(txn, suggestedParams);
368
+ return [{ txn: assetDestroy, signer }];
369
+ }
370
+ case 'assetFreeze': {
371
+ const assetFreeze = this.buildAssetFreeze(txn, suggestedParams);
372
+ return [{ txn: assetFreeze, signer }];
373
+ }
374
+ case 'assetTransfer': {
375
+ const assetTransfer = this.buildAssetTransfer(txn, suggestedParams);
376
+ return [{ txn: assetTransfer, signer }];
377
+ }
378
+ case 'assetOptIn': {
379
+ const assetTransfer = this.buildAssetTransfer({ ...txn, receiver: txn.sender, amount: 0n }, suggestedParams);
380
+ return [{ txn: assetTransfer, signer }];
381
+ }
382
+ case 'keyReg': {
383
+ const keyReg = this.buildKeyReg(txn, suggestedParams);
384
+ return [{ txn: keyReg, signer }];
385
+ }
386
+ default:
387
+ throw Error(`Unsupported txn type`);
388
+ }
389
+ }
390
+ /**
391
+ * Compose all of the transactions in a single atomic transaction group and an atomic transaction composer.
392
+ *
393
+ * You can then use the transactions standalone, or use the composer to execute or simulate the transactions.
394
+ * @returns The built atomic transaction composer and the transactions
395
+ */
396
+ async build() {
397
+ if (this.atc.getStatus() === algosdk.AtomicTransactionComposerStatus.BUILDING) {
398
+ const suggestedParams = await this.getSuggestedParams();
399
+ const txnWithSigners = [];
400
+ for (const txn of this.txns) {
401
+ txnWithSigners.push(...(await this.buildTxn(txn, suggestedParams)));
402
+ }
403
+ txnWithSigners.forEach((ts) => {
404
+ this.atc.addTransaction(ts);
405
+ });
406
+ const methodCalls = new Map();
407
+ txnWithSigners.forEach((ts, idx) => {
408
+ const method = this.txnMethodMap.get(ts.txn.txID());
409
+ if (method)
410
+ methodCalls.set(idx, method);
411
+ });
412
+ this.atc['methodCalls'] = methodCalls;
413
+ }
414
+ return { atc: this.atc, transactions: this.atc.buildGroup() };
415
+ }
416
+ /**
417
+ * Rebuild the group, discarding any previously built transactions.
418
+ * This will potentially cause new signers and suggested params to be used if the callbacks return a new value compared to the first build.
419
+ * @returns The newly built atomic transaction composer and the transactions
420
+ */
421
+ async rebuild() {
422
+ this.atc = new algosdk.AtomicTransactionComposer();
423
+ return await this.build();
424
+ }
425
+ /**
426
+ * Compose the atomic transaction group and send it to the network
427
+ * @param params The parameters to control execution with
428
+ * @returns The execution result
429
+ */
430
+ async execute(params) {
431
+ const group = (await this.build()).transactions;
432
+ let waitRounds = params?.maxRoundsToWaitForConfirmation;
433
+ if (waitRounds === undefined) {
434
+ const lastRound = group.reduce((max, txn) => Math.max(txn.txn.lastRound, max), 0);
435
+ const { firstRound } = await this.getSuggestedParams();
436
+ waitRounds = lastRound - firstRound + 1;
437
+ }
438
+ return await transaction.sendAtomicTransactionComposer({
439
+ atc: this.atc,
440
+ sendParams: { suppressLog: params?.suppressLog, maxRoundsToWaitForConfirmation: waitRounds },
441
+ }, this.algod);
442
+ }
443
+ }
444
+
445
+ module.exports = AlgokitComposer;
446
+ //# sourceMappingURL=composer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"composer.js","sources":["../../src/types/composer.ts"],"sourcesContent":[null],"names":["encodeLease","encodeTransactionNote","sendAtomicTransactionComposer"],"mappings":"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"}