@algorandfoundation/algokit-utils 8.1.0-beta.2 → 8.1.0-beta.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/index.js +1 -0
- package/index.js.map +1 -1
- package/index.mjs +1 -1
- package/package.json +1 -1
- package/testing/test-logger.js +1 -1
- package/testing/test-logger.js.map +1 -1
- package/testing/test-logger.mjs +1 -1
- package/testing/test-logger.mjs.map +1 -1
- package/transaction/transaction.d.ts +18 -3
- package/transaction/transaction.js +356 -215
- package/transaction/transaction.js.map +1 -1
- package/transaction/transaction.mjs +356 -216
- package/transaction/transaction.mjs.map +1 -1
- package/types/algorand-client-interface.d.ts +27 -3
- package/types/algorand-client.d.ts +1 -2
- package/types/algorand-client.js.map +1 -1
- package/types/algorand-client.mjs.map +1 -1
- package/types/app-client.d.ts +5 -1
- package/types/app-deployer.js +1 -1
- package/types/app-deployer.js.map +1 -1
- package/types/app-deployer.mjs +1 -1
- package/types/app-deployer.mjs.map +1 -1
- package/types/composer.d.ts +5 -3
- package/types/composer.js +96 -24
- package/types/composer.js.map +1 -1
- package/types/composer.mjs +96 -24
- package/types/composer.mjs.map +1 -1
- package/types/interface-of.d.ts +3 -0
- package/types/interface-of.js +3 -0
- package/types/interface-of.js.map +1 -0
- package/types/interface-of.mjs +2 -0
- package/types/interface-of.mjs.map +1 -0
- package/types/testing.d.ts +2 -2
- package/types/transaction.d.ts +13 -0
package/index.js
CHANGED
|
@@ -136,6 +136,7 @@ exports.getSenderTransactionSigner = transaction.getSenderTransactionSigner;
|
|
|
136
136
|
exports.getTransactionParams = transaction.getTransactionParams;
|
|
137
137
|
exports.getTransactionWithSigner = transaction.getTransactionWithSigner;
|
|
138
138
|
exports.populateAppCallResources = transaction.populateAppCallResources;
|
|
139
|
+
exports.prepareGroupForSending = transaction.prepareGroupForSending;
|
|
139
140
|
exports.sendAtomicTransactionComposer = transaction.sendAtomicTransactionComposer;
|
|
140
141
|
exports.sendGroupOfTransactions = transaction.sendGroupOfTransactions;
|
|
141
142
|
exports.sendTransaction = transaction.sendTransaction;
|
package/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
package/index.mjs
CHANGED
|
@@ -25,5 +25,5 @@ export { ensureFunded, rekeyAccount, transferAsset } from './transfer/transfer.m
|
|
|
25
25
|
export { transferAlgos } from './transfer/transfer-algos.mjs';
|
|
26
26
|
export { persistSourceMaps } from './debugging/debugging.mjs';
|
|
27
27
|
export { performAtomicTransactionComposerSimulate } from './transaction/perform-atomic-transaction-composer-simulate.mjs';
|
|
28
|
-
export { MAX_APP_CALL_ACCOUNT_REFERENCES, MAX_APP_CALL_FOREIGN_REFERENCES, MAX_TRANSACTION_GROUP_SIZE, capTransactionFee, controlFees, encodeLease, encodeTransactionNote, getABIReturnValue, getAtomicTransactionComposerTransactions, getSenderAddress, getSenderTransactionSigner, getTransactionParams, getTransactionWithSigner, populateAppCallResources, sendAtomicTransactionComposer, sendGroupOfTransactions, sendTransaction, signTransaction, waitForConfirmation } from './transaction/transaction.mjs';
|
|
28
|
+
export { MAX_APP_CALL_ACCOUNT_REFERENCES, MAX_APP_CALL_FOREIGN_REFERENCES, MAX_TRANSACTION_GROUP_SIZE, capTransactionFee, controlFees, encodeLease, encodeTransactionNote, getABIReturnValue, getAtomicTransactionComposerTransactions, getSenderAddress, getSenderTransactionSigner, getTransactionParams, getTransactionWithSigner, populateAppCallResources, prepareGroupForSending, sendAtomicTransactionComposer, sendGroupOfTransactions, sendTransaction, signTransaction, waitForConfirmation } from './transaction/transaction.mjs';
|
|
29
29
|
//# sourceMappingURL=index.mjs.map
|
package/package.json
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
"**"
|
|
7
7
|
],
|
|
8
8
|
"name": "@algorandfoundation/algokit-utils",
|
|
9
|
-
"version": "8.1.0-beta.
|
|
9
|
+
"version": "8.1.0-beta.4",
|
|
10
10
|
"private": false,
|
|
11
11
|
"description": "A set of core Algorand utilities written in TypeScript and released via npm that make it easier to build solutions on Algorand.",
|
|
12
12
|
"author": "Algorand Foundation",
|
package/testing/test-logger.js
CHANGED
|
@@ -40,7 +40,7 @@ class TestLogger {
|
|
|
40
40
|
*/
|
|
41
41
|
getLogSnapshot(config) {
|
|
42
42
|
const { transactions: transactionIds, accounts, apps } = config ?? {};
|
|
43
|
-
let snapshot = this.capturedLogs.join('\n');
|
|
43
|
+
let snapshot = this.capturedLogs.filter(config?.filterPredicate ?? (() => true)).join('\n');
|
|
44
44
|
transactionIds?.forEach((txn, id) => (snapshot = snapshot.replace(new RegExp(typeof txn === 'string' ? txn : txn.txID(), 'g'), `TXID_${id + 1}`)));
|
|
45
45
|
accounts?.forEach((sender, id) => (snapshot = snapshot.replace(new RegExp(typeof sender === 'string'
|
|
46
46
|
? sender
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-logger.js","sources":["../../src/testing/test-logger.ts"],"sourcesContent":["import { Logger } from '../types/logging'\nimport { LogSnapshotConfig } from '../types/testing'\nimport { asJson } from '../util'\n\n/** Exposes an AlgoKit logger which captures log messages, while wrapping an original logger.\n * This is useful for automated testing.\n */\nexport class TestLogger implements Logger {\n private originalLogger: Logger | undefined\n private logs: string[]\n\n /**\n * Create a new test logger that wraps the given logger if provided.\n * @param originalLogger The optional original logger to wrap.\n */\n constructor(originalLogger?: Logger) {\n this.originalLogger = originalLogger\n this.logs = []\n }\n\n /** Returns all logs captured thus far. */\n get capturedLogs(): string[] {\n return this.logs\n }\n\n /** Clears all logs captured so far. */\n clear() {\n this.logs = []\n }\n\n /**\n * Returns a captured log snapshot.\n * This helps ensure that the provided configuration items won't appear\n * with random values in the log snapshot, but rather will get substituted with predictable ids.\n *\n * https://jestjs.io/docs/snapshot-testing#2-tests-should-be-deterministic\n *\n * @example Jest Example\n * ```typescript\n * const logger = new TestLogger()\n * ...\n * expect(logger.getLogSnapshot()).toMatchSnapshot()\n * ```\n * @param config The snapshot configuration\n * @returns The snapshotted logs.\n */\n getLogSnapshot(config?: LogSnapshotConfig) {\n const { transactions: transactionIds, accounts, apps } = config ?? {}\n let snapshot = this.capturedLogs.join('\\n')\n transactionIds?.forEach(\n (txn, id) => (snapshot = snapshot.replace(new RegExp(typeof txn === 'string' ? txn : txn.txID(), 'g'), `TXID_${id + 1}`)),\n )\n accounts?.forEach(\n (sender, id) =>\n (snapshot = snapshot.replace(\n new RegExp(\n typeof sender === 'string'\n ? sender\n : 'addr' in sender\n ? sender.addr.toString()\n : 'address' in sender\n ? sender.address().toString()\n : sender.toString(),\n 'g',\n ),\n `ACCOUNT_${id + 1}`,\n )),\n )\n apps?.forEach((app, id) => (snapshot = snapshot.replace(new RegExp(`\\\\b${app.toString()}\\\\b(?! bytes)`, 'g'), `APP_${id + 1}`)))\n return snapshot\n }\n\n error(message: string, ...optionalParams: unknown[]): void {\n this.originalLogger?.error(message, ...optionalParams)\n this.logs.push(`ERROR: ${message}${optionalParams.length ? ` | ${asJson(optionalParams)}` : ''}`)\n }\n warn(message: string, ...optionalParams: unknown[]): void {\n this.originalLogger?.warn(message, ...optionalParams)\n this.logs.push(`WARN: ${message}${optionalParams.length ? ` | ${asJson(optionalParams)}` : ''}`)\n }\n info(message: string, ...optionalParams: unknown[]): void {\n this.originalLogger?.info(message, ...optionalParams)\n this.logs.push(`INFO: ${message}${optionalParams.length ? ` | ${asJson(optionalParams)}` : ''}`)\n }\n verbose(message: string, ...optionalParams: unknown[]): void {\n this.originalLogger?.verbose(message, ...optionalParams)\n this.logs.push(`VERBOSE: ${message}${optionalParams.length ? ` | ${asJson(optionalParams)}` : ''}`)\n }\n debug(message: string, ...optionalParams: unknown[]): void {\n this.originalLogger?.debug(message, ...optionalParams)\n this.logs.push(`DEBUG: ${message}${optionalParams.length ? ` | ${asJson(optionalParams)}` : ''}`)\n }\n}\n"],"names":["asJson"],"mappings":";;;;AAIA;;AAEG;MACU,UAAU,CAAA;AAIrB;;;AAGG;AACH,IAAA,WAAA,CAAY,cAAuB,EAAA;AACjC,QAAA,IAAI,CAAC,cAAc,GAAG,cAAc;AACpC,QAAA,IAAI,CAAC,IAAI,GAAG,EAAE;;;AAIhB,IAAA,IAAI,YAAY,GAAA;QACd,OAAO,IAAI,CAAC,IAAI;;;IAIlB,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,IAAI,GAAG,EAAE;;AAGhB;;;;;;;;;;;;;;;AAeG;AACH,IAAA,cAAc,CAAC,MAA0B,EAAA;AACvC,QAAA,MAAM,EAAE,YAAY,EAAE,cAAc,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,EAAE;QACrE,IAAI,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"test-logger.js","sources":["../../src/testing/test-logger.ts"],"sourcesContent":["import { Logger } from '../types/logging'\nimport { LogSnapshotConfig } from '../types/testing'\nimport { asJson } from '../util'\n\n/** Exposes an AlgoKit logger which captures log messages, while wrapping an original logger.\n * This is useful for automated testing.\n */\nexport class TestLogger implements Logger {\n private originalLogger: Logger | undefined\n private logs: string[]\n\n /**\n * Create a new test logger that wraps the given logger if provided.\n * @param originalLogger The optional original logger to wrap.\n */\n constructor(originalLogger?: Logger) {\n this.originalLogger = originalLogger\n this.logs = []\n }\n\n /** Returns all logs captured thus far. */\n get capturedLogs(): string[] {\n return this.logs\n }\n\n /** Clears all logs captured so far. */\n clear() {\n this.logs = []\n }\n\n /**\n * Returns a captured log snapshot.\n * This helps ensure that the provided configuration items won't appear\n * with random values in the log snapshot, but rather will get substituted with predictable ids.\n *\n * https://jestjs.io/docs/snapshot-testing#2-tests-should-be-deterministic\n *\n * @example Jest Example\n * ```typescript\n * const logger = new TestLogger()\n * ...\n * expect(logger.getLogSnapshot()).toMatchSnapshot()\n * ```\n * @param config The snapshot configuration\n * @returns The snapshotted logs.\n */\n getLogSnapshot(config?: LogSnapshotConfig) {\n const { transactions: transactionIds, accounts, apps } = config ?? {}\n let snapshot = this.capturedLogs.filter(config?.filterPredicate ?? (() => true)).join('\\n')\n transactionIds?.forEach(\n (txn, id) => (snapshot = snapshot.replace(new RegExp(typeof txn === 'string' ? txn : txn.txID(), 'g'), `TXID_${id + 1}`)),\n )\n accounts?.forEach(\n (sender, id) =>\n (snapshot = snapshot.replace(\n new RegExp(\n typeof sender === 'string'\n ? sender\n : 'addr' in sender\n ? sender.addr.toString()\n : 'address' in sender\n ? sender.address().toString()\n : sender.toString(),\n 'g',\n ),\n `ACCOUNT_${id + 1}`,\n )),\n )\n apps?.forEach((app, id) => (snapshot = snapshot.replace(new RegExp(`\\\\b${app.toString()}\\\\b(?! bytes)`, 'g'), `APP_${id + 1}`)))\n return snapshot\n }\n\n error(message: string, ...optionalParams: unknown[]): void {\n this.originalLogger?.error(message, ...optionalParams)\n this.logs.push(`ERROR: ${message}${optionalParams.length ? ` | ${asJson(optionalParams)}` : ''}`)\n }\n warn(message: string, ...optionalParams: unknown[]): void {\n this.originalLogger?.warn(message, ...optionalParams)\n this.logs.push(`WARN: ${message}${optionalParams.length ? ` | ${asJson(optionalParams)}` : ''}`)\n }\n info(message: string, ...optionalParams: unknown[]): void {\n this.originalLogger?.info(message, ...optionalParams)\n this.logs.push(`INFO: ${message}${optionalParams.length ? ` | ${asJson(optionalParams)}` : ''}`)\n }\n verbose(message: string, ...optionalParams: unknown[]): void {\n this.originalLogger?.verbose(message, ...optionalParams)\n this.logs.push(`VERBOSE: ${message}${optionalParams.length ? ` | ${asJson(optionalParams)}` : ''}`)\n }\n debug(message: string, ...optionalParams: unknown[]): void {\n this.originalLogger?.debug(message, ...optionalParams)\n this.logs.push(`DEBUG: ${message}${optionalParams.length ? ` | ${asJson(optionalParams)}` : ''}`)\n }\n}\n"],"names":["asJson"],"mappings":"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"}
|
package/testing/test-logger.mjs
CHANGED
|
@@ -38,7 +38,7 @@ class TestLogger {
|
|
|
38
38
|
*/
|
|
39
39
|
getLogSnapshot(config) {
|
|
40
40
|
const { transactions: transactionIds, accounts, apps } = config ?? {};
|
|
41
|
-
let snapshot = this.capturedLogs.join('\n');
|
|
41
|
+
let snapshot = this.capturedLogs.filter(config?.filterPredicate ?? (() => true)).join('\n');
|
|
42
42
|
transactionIds?.forEach((txn, id) => (snapshot = snapshot.replace(new RegExp(typeof txn === 'string' ? txn : txn.txID(), 'g'), `TXID_${id + 1}`)));
|
|
43
43
|
accounts?.forEach((sender, id) => (snapshot = snapshot.replace(new RegExp(typeof sender === 'string'
|
|
44
44
|
? sender
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-logger.mjs","sources":["../../src/testing/test-logger.ts"],"sourcesContent":["import { Logger } from '../types/logging'\nimport { LogSnapshotConfig } from '../types/testing'\nimport { asJson } from '../util'\n\n/** Exposes an AlgoKit logger which captures log messages, while wrapping an original logger.\n * This is useful for automated testing.\n */\nexport class TestLogger implements Logger {\n private originalLogger: Logger | undefined\n private logs: string[]\n\n /**\n * Create a new test logger that wraps the given logger if provided.\n * @param originalLogger The optional original logger to wrap.\n */\n constructor(originalLogger?: Logger) {\n this.originalLogger = originalLogger\n this.logs = []\n }\n\n /** Returns all logs captured thus far. */\n get capturedLogs(): string[] {\n return this.logs\n }\n\n /** Clears all logs captured so far. */\n clear() {\n this.logs = []\n }\n\n /**\n * Returns a captured log snapshot.\n * This helps ensure that the provided configuration items won't appear\n * with random values in the log snapshot, but rather will get substituted with predictable ids.\n *\n * https://jestjs.io/docs/snapshot-testing#2-tests-should-be-deterministic\n *\n * @example Jest Example\n * ```typescript\n * const logger = new TestLogger()\n * ...\n * expect(logger.getLogSnapshot()).toMatchSnapshot()\n * ```\n * @param config The snapshot configuration\n * @returns The snapshotted logs.\n */\n getLogSnapshot(config?: LogSnapshotConfig) {\n const { transactions: transactionIds, accounts, apps } = config ?? {}\n let snapshot = this.capturedLogs.join('\\n')\n transactionIds?.forEach(\n (txn, id) => (snapshot = snapshot.replace(new RegExp(typeof txn === 'string' ? txn : txn.txID(), 'g'), `TXID_${id + 1}`)),\n )\n accounts?.forEach(\n (sender, id) =>\n (snapshot = snapshot.replace(\n new RegExp(\n typeof sender === 'string'\n ? sender\n : 'addr' in sender\n ? sender.addr.toString()\n : 'address' in sender\n ? sender.address().toString()\n : sender.toString(),\n 'g',\n ),\n `ACCOUNT_${id + 1}`,\n )),\n )\n apps?.forEach((app, id) => (snapshot = snapshot.replace(new RegExp(`\\\\b${app.toString()}\\\\b(?! bytes)`, 'g'), `APP_${id + 1}`)))\n return snapshot\n }\n\n error(message: string, ...optionalParams: unknown[]): void {\n this.originalLogger?.error(message, ...optionalParams)\n this.logs.push(`ERROR: ${message}${optionalParams.length ? ` | ${asJson(optionalParams)}` : ''}`)\n }\n warn(message: string, ...optionalParams: unknown[]): void {\n this.originalLogger?.warn(message, ...optionalParams)\n this.logs.push(`WARN: ${message}${optionalParams.length ? ` | ${asJson(optionalParams)}` : ''}`)\n }\n info(message: string, ...optionalParams: unknown[]): void {\n this.originalLogger?.info(message, ...optionalParams)\n this.logs.push(`INFO: ${message}${optionalParams.length ? ` | ${asJson(optionalParams)}` : ''}`)\n }\n verbose(message: string, ...optionalParams: unknown[]): void {\n this.originalLogger?.verbose(message, ...optionalParams)\n this.logs.push(`VERBOSE: ${message}${optionalParams.length ? ` | ${asJson(optionalParams)}` : ''}`)\n }\n debug(message: string, ...optionalParams: unknown[]): void {\n this.originalLogger?.debug(message, ...optionalParams)\n this.logs.push(`DEBUG: ${message}${optionalParams.length ? ` | ${asJson(optionalParams)}` : ''}`)\n }\n}\n"],"names":[],"mappings":";;AAIA;;AAEG;MACU,UAAU,CAAA;AAIrB;;;AAGG;AACH,IAAA,WAAA,CAAY,cAAuB,EAAA;AACjC,QAAA,IAAI,CAAC,cAAc,GAAG,cAAc;AACpC,QAAA,IAAI,CAAC,IAAI,GAAG,EAAE;;;AAIhB,IAAA,IAAI,YAAY,GAAA;QACd,OAAO,IAAI,CAAC,IAAI;;;IAIlB,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,IAAI,GAAG,EAAE;;AAGhB;;;;;;;;;;;;;;;AAeG;AACH,IAAA,cAAc,CAAC,MAA0B,EAAA;AACvC,QAAA,MAAM,EAAE,YAAY,EAAE,cAAc,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,EAAE;QACrE,IAAI,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"test-logger.mjs","sources":["../../src/testing/test-logger.ts"],"sourcesContent":["import { Logger } from '../types/logging'\nimport { LogSnapshotConfig } from '../types/testing'\nimport { asJson } from '../util'\n\n/** Exposes an AlgoKit logger which captures log messages, while wrapping an original logger.\n * This is useful for automated testing.\n */\nexport class TestLogger implements Logger {\n private originalLogger: Logger | undefined\n private logs: string[]\n\n /**\n * Create a new test logger that wraps the given logger if provided.\n * @param originalLogger The optional original logger to wrap.\n */\n constructor(originalLogger?: Logger) {\n this.originalLogger = originalLogger\n this.logs = []\n }\n\n /** Returns all logs captured thus far. */\n get capturedLogs(): string[] {\n return this.logs\n }\n\n /** Clears all logs captured so far. */\n clear() {\n this.logs = []\n }\n\n /**\n * Returns a captured log snapshot.\n * This helps ensure that the provided configuration items won't appear\n * with random values in the log snapshot, but rather will get substituted with predictable ids.\n *\n * https://jestjs.io/docs/snapshot-testing#2-tests-should-be-deterministic\n *\n * @example Jest Example\n * ```typescript\n * const logger = new TestLogger()\n * ...\n * expect(logger.getLogSnapshot()).toMatchSnapshot()\n * ```\n * @param config The snapshot configuration\n * @returns The snapshotted logs.\n */\n getLogSnapshot(config?: LogSnapshotConfig) {\n const { transactions: transactionIds, accounts, apps } = config ?? {}\n let snapshot = this.capturedLogs.filter(config?.filterPredicate ?? (() => true)).join('\\n')\n transactionIds?.forEach(\n (txn, id) => (snapshot = snapshot.replace(new RegExp(typeof txn === 'string' ? txn : txn.txID(), 'g'), `TXID_${id + 1}`)),\n )\n accounts?.forEach(\n (sender, id) =>\n (snapshot = snapshot.replace(\n new RegExp(\n typeof sender === 'string'\n ? sender\n : 'addr' in sender\n ? sender.addr.toString()\n : 'address' in sender\n ? sender.address().toString()\n : sender.toString(),\n 'g',\n ),\n `ACCOUNT_${id + 1}`,\n )),\n )\n apps?.forEach((app, id) => (snapshot = snapshot.replace(new RegExp(`\\\\b${app.toString()}\\\\b(?! bytes)`, 'g'), `APP_${id + 1}`)))\n return snapshot\n }\n\n error(message: string, ...optionalParams: unknown[]): void {\n this.originalLogger?.error(message, ...optionalParams)\n this.logs.push(`ERROR: ${message}${optionalParams.length ? ` | ${asJson(optionalParams)}` : ''}`)\n }\n warn(message: string, ...optionalParams: unknown[]): void {\n this.originalLogger?.warn(message, ...optionalParams)\n this.logs.push(`WARN: ${message}${optionalParams.length ? ` | ${asJson(optionalParams)}` : ''}`)\n }\n info(message: string, ...optionalParams: unknown[]): void {\n this.originalLogger?.info(message, ...optionalParams)\n this.logs.push(`INFO: ${message}${optionalParams.length ? ` | ${asJson(optionalParams)}` : ''}`)\n }\n verbose(message: string, ...optionalParams: unknown[]): void {\n this.originalLogger?.verbose(message, ...optionalParams)\n this.logs.push(`VERBOSE: ${message}${optionalParams.length ? ` | ${asJson(optionalParams)}` : ''}`)\n }\n debug(message: string, ...optionalParams: unknown[]): void {\n this.originalLogger?.debug(message, ...optionalParams)\n this.logs.push(`DEBUG: ${message}${optionalParams.length ? ` | ${asJson(optionalParams)}` : ''}`)\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import algosdk from 'algosdk';
|
|
2
2
|
import { AlgoAmount } from '../types/amount';
|
|
3
3
|
import { ABIReturn } from '../types/app';
|
|
4
|
-
import { AtomicTransactionComposerToSend, SendAtomicTransactionComposerResults, SendTransactionFrom, SendTransactionParams, SendTransactionResult, TransactionGroupToSend, TransactionNote, TransactionToSign } from '../types/transaction';
|
|
4
|
+
import { AdditionalAtomicTransactionComposerContext, AtomicTransactionComposerToSend, SendAtomicTransactionComposerResults, SendParams, SendTransactionFrom, SendTransactionParams, SendTransactionResult, TransactionGroupToSend, TransactionNote, TransactionToSign } from '../types/transaction';
|
|
5
5
|
import Algodv2 = algosdk.Algodv2;
|
|
6
6
|
import AtomicTransactionComposer = algosdk.AtomicTransactionComposer;
|
|
7
7
|
import modelsv2 = algosdk.modelsv2;
|
|
@@ -100,11 +100,11 @@ export declare const sendTransaction: (send: {
|
|
|
100
100
|
}, algod: Algodv2) => Promise<SendTransactionResult>;
|
|
101
101
|
/**
|
|
102
102
|
* Take an existing Atomic Transaction Composer and return a new one with the required
|
|
103
|
-
*
|
|
103
|
+
* app call resources populated into it
|
|
104
104
|
*
|
|
105
105
|
* @param algod The algod client to use for the simulation
|
|
106
106
|
* @param atc The ATC containing the txn group
|
|
107
|
-
* @returns A new ATC with the resources
|
|
107
|
+
* @returns A new ATC with the resources populated into the transactions
|
|
108
108
|
*
|
|
109
109
|
* @privateRemarks
|
|
110
110
|
*
|
|
@@ -116,6 +116,21 @@ export declare const sendTransaction: (send: {
|
|
|
116
116
|
*
|
|
117
117
|
*/
|
|
118
118
|
export declare function populateAppCallResources(atc: algosdk.AtomicTransactionComposer, algod: algosdk.Algodv2): Promise<algosdk.AtomicTransactionComposer>;
|
|
119
|
+
/**
|
|
120
|
+
* Take an existing Atomic Transaction Composer and return a new one with changes applied to the transactions
|
|
121
|
+
* based on the supplied sendParams to ensure the transaction group is ready for sending.
|
|
122
|
+
*
|
|
123
|
+
* @param algod The algod client to use for the simulation
|
|
124
|
+
* @param atc The ATC containing the txn group
|
|
125
|
+
* @param sendParams The send params for the transaction group
|
|
126
|
+
* @param additionalAtcContext Additional ATC context used to determine how best to change the transactions in the group
|
|
127
|
+
* @returns A new ATC with the changes applied
|
|
128
|
+
*
|
|
129
|
+
* @privateRemarks
|
|
130
|
+
* Parts of this function will eventually be implemented in algod. Namely:
|
|
131
|
+
* - Simulate will return information on how to populate reference arrays, see https://github.com/algorand/go-algorand/pull/6015
|
|
132
|
+
*/
|
|
133
|
+
export declare function prepareGroupForSending(atc: algosdk.AtomicTransactionComposer, algod: algosdk.Algodv2, sendParams: SendParams, additionalAtcContext?: AdditionalAtomicTransactionComposerContext): Promise<algosdk.AtomicTransactionComposer>;
|
|
119
134
|
/**
|
|
120
135
|
* Signs and sends transactions that have been collected by an `AtomicTransactionComposer`.
|
|
121
136
|
* @param atcSend The parameters controlling the send, including `atc` The `AtomicTransactionComposer` and params to control send behaviour
|