@algorandfoundation/algokit-utils 1.0.0-beta.2 → 1.0.0-beta.21
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/{dist/account.d.ts → account.d.ts} +29 -31
- package/account.d.ts.map +1 -0
- package/{dist/account.js → account.js} +43 -43
- package/account.js.map +1 -0
- package/amount.d.ts +8 -0
- package/amount.d.ts.map +1 -0
- package/amount.js +24 -0
- package/amount.js.map +1 -0
- package/app.d.ts +51 -0
- package/app.d.ts.map +1 -0
- package/app.js +288 -0
- package/app.js.map +1 -0
- package/application-client.d.ts +10 -0
- package/application-client.d.ts.map +1 -0
- package/application-client.js +15 -0
- package/application-client.js.map +1 -0
- package/deploy-app.d.ts +93 -0
- package/deploy-app.d.ts.map +1 -0
- package/{dist/deploy-app.js → deploy-app.js} +129 -137
- package/deploy-app.js.map +1 -0
- package/index.d.ts +14 -0
- package/index.d.ts.map +1 -0
- package/{dist/index.js → index.js} +6 -4
- package/index.js.map +1 -0
- package/{dist/indexer-lookup.d.ts → indexer-lookup.d.ts} +1 -1
- package/{dist/indexer-lookup.d.ts.map → indexer-lookup.d.ts.map} +1 -1
- package/{dist/localnet.d.ts → localnet.d.ts} +4 -4
- package/localnet.d.ts.map +1 -0
- package/{dist/localnet.js → localnet.js} +10 -10
- package/localnet.js.map +1 -0
- package/{dist/network-client.d.ts → network-client.d.ts} +11 -20
- package/network-client.d.ts.map +1 -0
- package/{dist/network-client.js → network-client.js} +11 -11
- package/{dist/network-client.js.map → network-client.js.map} +1 -1
- package/package.json +4 -92
- package/testing/account.d.ts +14 -0
- package/testing/account.d.ts.map +1 -0
- package/testing/account.js +31 -0
- package/testing/account.js.map +1 -0
- package/testing/fixtures/algokit-log-capture-fixture.d.ts +19 -0
- package/testing/fixtures/algokit-log-capture-fixture.d.ts.map +1 -0
- package/testing/fixtures/algokit-log-capture-fixture.js +43 -0
- package/testing/fixtures/algokit-log-capture-fixture.js.map +1 -0
- package/testing/fixtures/algorand-fixture.d.ts +20 -0
- package/testing/fixtures/algorand-fixture.d.ts.map +1 -0
- package/testing/fixtures/algorand-fixture.js +49 -0
- package/testing/fixtures/algorand-fixture.js.map +1 -0
- package/testing/fixtures/index.d.ts +3 -0
- package/testing/fixtures/index.d.ts.map +1 -0
- package/testing/fixtures/index.js +19 -0
- package/testing/fixtures/index.js.map +1 -0
- package/testing/index.d.ts +6 -0
- package/testing/index.d.ts.map +1 -0
- package/testing/index.js +22 -0
- package/testing/index.js.map +1 -0
- package/testing/indexer.d.ts +12 -0
- package/testing/indexer.d.ts.map +1 -0
- package/testing/indexer.js +39 -0
- package/testing/indexer.js.map +1 -0
- package/testing/test-logger.d.ts +39 -0
- package/testing/test-logger.d.ts.map +1 -0
- package/testing/test-logger.js +69 -0
- package/testing/test-logger.js.map +1 -0
- package/testing/transaction-logger.d.ts +29 -0
- package/testing/transaction-logger.d.ts.map +1 -0
- package/testing/transaction-logger.js +71 -0
- package/testing/transaction-logger.js.map +1 -0
- package/transaction.d.ts +80 -0
- package/transaction.d.ts.map +1 -0
- package/{dist/transaction.js → transaction.js} +88 -106
- package/transaction.js.map +1 -0
- package/transfer.d.ts +21 -0
- package/transfer.d.ts.map +1 -0
- package/transfer.js +65 -0
- package/transfer.js.map +1 -0
- package/types/account.d.ts +52 -0
- package/types/account.d.ts.map +1 -0
- package/types/account.js +86 -0
- package/types/account.js.map +1 -0
- package/types/algo-http-client-with-retry.d.ts.map +1 -0
- package/{dist → types}/algo-http-client-with-retry.js +2 -2
- package/types/algo-http-client-with-retry.js.map +1 -0
- package/{dist/algod-type.d.ts → types/algod.d.ts} +6 -7
- package/types/algod.d.ts.map +1 -0
- package/{dist/algod-type.js → types/algod.js} +1 -1
- package/types/algod.js.map +1 -0
- package/{dist/algo-amount.d.ts → types/amount.d.ts} +3 -1
- package/types/amount.d.ts.map +1 -0
- package/{dist/algo-amount.js → types/amount.js} +7 -1
- package/types/amount.js.map +1 -0
- package/types/app.d.ts +234 -0
- package/types/app.d.ts.map +1 -0
- package/types/app.js +32 -0
- package/types/app.js.map +1 -0
- package/types/application-client.d.ts +155 -0
- package/types/application-client.d.ts.map +1 -0
- package/types/application-client.js +348 -0
- package/types/application-client.js.map +1 -0
- package/types/appspec.d.ts +77 -0
- package/types/appspec.d.ts.map +1 -0
- package/types/appspec.js +15 -0
- package/types/appspec.js.map +1 -0
- package/types/config.d.ts +15 -0
- package/types/config.d.ts.map +1 -0
- package/types/config.js +27 -0
- package/types/config.js.map +1 -0
- package/{dist/indexer-type.d.ts → types/indexer.d.ts} +9 -10
- package/types/indexer.d.ts.map +1 -0
- package/{dist/indexer-type.js → types/indexer.js} +1 -1
- package/types/indexer.js.map +1 -0
- package/{dist/config.d.ts → types/logging.d.ts} +3 -15
- package/types/logging.d.ts.map +1 -0
- package/types/logging.js +27 -0
- package/types/logging.js.map +1 -0
- package/types/logic-error.d.ts +33 -0
- package/types/logic-error.d.ts.map +1 -0
- package/types/logic-error.js +46 -0
- package/types/logic-error.js.map +1 -0
- package/types/network-client.d.ts +11 -0
- package/types/network-client.d.ts.map +1 -0
- package/types/network-client.js +3 -0
- package/types/network-client.js.map +1 -0
- package/types/testing.d.ts +89 -0
- package/types/testing.d.ts.map +1 -0
- package/types/testing.js +3 -0
- package/types/testing.js.map +1 -0
- package/types/transaction.d.ts +67 -0
- package/types/transaction.d.ts.map +1 -0
- package/types/transaction.js +3 -0
- package/types/transaction.js.map +1 -0
- package/types/transfer.d.ts +32 -0
- package/types/transfer.d.ts.map +1 -0
- package/types/transfer.js +3 -0
- package/types/transfer.js.map +1 -0
- package/types/urlTokenBaseHTTPClient.d.ts.map +1 -0
- package/types/urlTokenBaseHTTPClient.js.map +1 -0
- package/LICENSE +0 -21
- package/README.md +0 -31
- package/dist/account.d.ts.map +0 -1
- package/dist/account.js.map +0 -1
- package/dist/algo-amount.d.ts.map +0 -1
- package/dist/algo-amount.js.map +0 -1
- package/dist/algo-http-client-with-retry.d.ts.map +0 -1
- package/dist/algo-http-client-with-retry.js.map +0 -1
- package/dist/algod-type.d.ts.map +0 -1
- package/dist/algod-type.js.map +0 -1
- package/dist/app.d.ts +0 -150
- package/dist/app.d.ts.map +0 -1
- package/dist/app.js +0 -160
- package/dist/app.js.map +0 -1
- package/dist/application-client.d.ts +0 -1
- package/dist/application-client.d.ts.map +0 -1
- package/dist/application-client.js +0 -69
- package/dist/application-client.js.map +0 -1
- package/dist/config.d.ts.map +0 -1
- package/dist/config.js +0 -28
- package/dist/config.js.map +0 -1
- package/dist/deploy-app.d.ts +0 -149
- package/dist/deploy-app.d.ts.map +0 -1
- package/dist/deploy-app.js.map +0 -1
- package/dist/index.d.ts +0 -13
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/indexer-type.d.ts.map +0 -1
- package/dist/indexer-type.js.map +0 -1
- package/dist/localnet.d.ts.map +0 -1
- package/dist/localnet.js.map +0 -1
- package/dist/network-client.d.ts.map +0 -1
- package/dist/package.json +0 -20
- package/dist/transaction.d.ts +0 -147
- package/dist/transaction.d.ts.map +0 -1
- package/dist/transaction.js.map +0 -1
- package/dist/transfer.d.ts +0 -24
- package/dist/transfer.d.ts.map +0 -1
- package/dist/transfer.js +0 -33
- package/dist/transfer.js.map +0 -1
- package/dist/urlTokenBaseHTTPClient.d.ts.map +0 -1
- package/dist/urlTokenBaseHTTPClient.js.map +0 -1
- /package/{dist/indexer-lookup.js → indexer-lookup.js} +0 -0
- /package/{dist/indexer-lookup.js.map → indexer-lookup.js.map} +0 -0
- /package/{dist → types}/algo-http-client-with-retry.d.ts +0 -0
- /package/{dist → types}/urlTokenBaseHTTPClient.d.ts +0 -0
- /package/{dist → types}/urlTokenBaseHTTPClient.js +0 -0
|
@@ -3,76 +3,10 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.getTransactionParams = exports.capTransactionFee = exports.waitForConfirmation = exports.sendGroupOfTransactions = exports.sendTransaction = exports.getSenderAddress = exports.encodeTransactionNote =
|
|
6
|
+
exports.getTransactionParams = exports.capTransactionFee = exports.waitForConfirmation = exports.sendGroupOfTransactions = exports.sendTransaction = exports.getSenderAddress = exports.encodeTransactionNote = void 0;
|
|
7
7
|
const algosdk_1 = __importDefault(require("algosdk"));
|
|
8
8
|
const buffer_1 = require("buffer");
|
|
9
|
-
const
|
|
10
|
-
/** Account wrapper that supports partial or full multisig signing */
|
|
11
|
-
class MultisigAccount {
|
|
12
|
-
get params() {
|
|
13
|
-
return this._params;
|
|
14
|
-
}
|
|
15
|
-
get signingAccounts() {
|
|
16
|
-
return this._signingAccounts;
|
|
17
|
-
}
|
|
18
|
-
get addr() {
|
|
19
|
-
return this._addr;
|
|
20
|
-
}
|
|
21
|
-
constructor(multisigParams, signingAccounts) {
|
|
22
|
-
this._params = multisigParams;
|
|
23
|
-
this._signingAccounts = signingAccounts;
|
|
24
|
-
this._addr = algosdk_1.default.multisigAddress(multisigParams);
|
|
25
|
-
}
|
|
26
|
-
sign(transaction) {
|
|
27
|
-
let signedTxn = 'from' in transaction ? undefined : transaction;
|
|
28
|
-
for (const signer of this._signingAccounts) {
|
|
29
|
-
if (signedTxn) {
|
|
30
|
-
signedTxn = algosdk_1.default.appendSignMultisigTransaction(signedTxn, this._params, signer.sk).blob;
|
|
31
|
-
}
|
|
32
|
-
else {
|
|
33
|
-
signedTxn = algosdk_1.default.signMultisigTransaction(transaction, this._params, signer.sk).blob;
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
37
|
-
return signedTxn;
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
exports.MultisigAccount = MultisigAccount;
|
|
41
|
-
/** Account wrapper that supports a rekeyed account */
|
|
42
|
-
class SigningAccount {
|
|
43
|
-
/**
|
|
44
|
-
* Algorand address of the sender
|
|
45
|
-
*/
|
|
46
|
-
get addr() {
|
|
47
|
-
return this._sender;
|
|
48
|
-
}
|
|
49
|
-
/**
|
|
50
|
-
* Secret key belonging to the signer
|
|
51
|
-
*/
|
|
52
|
-
get sk() {
|
|
53
|
-
return this._account.sk;
|
|
54
|
-
}
|
|
55
|
-
/**
|
|
56
|
-
* Algorand account of the underlying signing account
|
|
57
|
-
*/
|
|
58
|
-
get signer() {
|
|
59
|
-
return this._account;
|
|
60
|
-
}
|
|
61
|
-
/**
|
|
62
|
-
* Algorand account of the sender address and signer private key
|
|
63
|
-
*/
|
|
64
|
-
get sender() {
|
|
65
|
-
return {
|
|
66
|
-
addr: this._sender,
|
|
67
|
-
sk: this._account.sk,
|
|
68
|
-
};
|
|
69
|
-
}
|
|
70
|
-
constructor(account, sender) {
|
|
71
|
-
this._account = account;
|
|
72
|
-
this._sender = sender ?? account.addr;
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
exports.SigningAccount = SigningAccount;
|
|
9
|
+
const _1 = require("./");
|
|
76
10
|
/** Encodes a transaction note into a byte array ready to be included in an Algorand transaction.
|
|
77
11
|
*
|
|
78
12
|
* @param note The transaction note
|
|
@@ -93,7 +27,7 @@ function encodeTransactionNote(note) {
|
|
|
93
27
|
return note;
|
|
94
28
|
}
|
|
95
29
|
else if (typeof note === 'object' && 'dAppName' in note) {
|
|
96
|
-
const arc2Payload = `${note.dAppName}:${note.format}${note.data}`;
|
|
30
|
+
const arc2Payload = `${note.dAppName}:${note.format}${typeof note.data === 'string' ? note.data : JSON.stringify(note.data)}`;
|
|
97
31
|
const encoder = new TextEncoder();
|
|
98
32
|
return encoder.encode(arc2Payload);
|
|
99
33
|
}
|
|
@@ -115,15 +49,21 @@ const getSenderAddress = function (sender) {
|
|
|
115
49
|
exports.getSenderAddress = getSenderAddress;
|
|
116
50
|
/** Signs and sends the given transaction to the chain
|
|
117
51
|
*
|
|
52
|
+
* @param send The details for the transaction to send, including:
|
|
53
|
+
* * `transaction`: The unsigned transaction
|
|
54
|
+
* * `from`: The account to sign the transaction with: either an account with private key loaded or a logic signature account
|
|
55
|
+
* * `config`: The sending configuration for this transaction
|
|
118
56
|
* @param algod An algod client
|
|
119
|
-
* @param transaction The unsigned transaction
|
|
120
|
-
* @param from The account to sign the transaction with: either an account with private key loaded or a logic signature account
|
|
121
|
-
* @param config The sending configuration for this transaction
|
|
122
57
|
*
|
|
123
58
|
* @returns An object with transaction (`transaction`) and (if `skipWaiting` is `false` or unset) confirmation (`confirmation`)
|
|
124
59
|
*/
|
|
125
|
-
const sendTransaction = async function (
|
|
126
|
-
const {
|
|
60
|
+
const sendTransaction = async function (send, algod) {
|
|
61
|
+
const { transaction, from, sendParams } = send;
|
|
62
|
+
const { skipSending, skipWaiting, fee, maxFee, suppressLog, maxRoundsToWaitForConfirmation } = sendParams ?? {};
|
|
63
|
+
if (fee) {
|
|
64
|
+
transaction.fee = fee.microAlgos;
|
|
65
|
+
transaction.flatFee = true;
|
|
66
|
+
}
|
|
127
67
|
if (maxFee !== undefined) {
|
|
128
68
|
capTransactionFee(transaction, maxFee);
|
|
129
69
|
}
|
|
@@ -134,18 +74,24 @@ const sendTransaction = async function (algod, transaction, from, sendParams) {
|
|
|
134
74
|
? transaction.signTxn(from.sk)
|
|
135
75
|
: 'lsig' in from
|
|
136
76
|
? algosdk_1.default.signLogicSigTransactionObject(transaction, from).blob
|
|
137
|
-
: from
|
|
77
|
+
: 'signer' in from
|
|
78
|
+
? (await from.signer([transaction], [0]))[0]
|
|
79
|
+
: from.sign(transaction);
|
|
138
80
|
await algod.sendRawTransaction(signedTransaction).do();
|
|
139
|
-
|
|
140
|
-
config_1.AlgoKitConfig.logger.info(`Sent transaction ID ${transaction.txID()} ${transaction.type} from ${(0, exports.getSenderAddress)(from)}`);
|
|
141
|
-
}
|
|
81
|
+
_1.Config.getLogger(suppressLog).info(`Sent transaction ID ${transaction.txID()} ${transaction.type} from ${(0, exports.getSenderAddress)(from)}`);
|
|
142
82
|
let confirmation = undefined;
|
|
143
83
|
if (!skipWaiting) {
|
|
144
|
-
confirmation = await (0, exports.waitForConfirmation)(
|
|
84
|
+
confirmation = await (0, exports.waitForConfirmation)(transaction.txID(), maxRoundsToWaitForConfirmation ?? 5, algod);
|
|
145
85
|
}
|
|
146
86
|
return { transaction, confirmation };
|
|
147
87
|
};
|
|
148
88
|
exports.sendTransaction = sendTransaction;
|
|
89
|
+
const groupBy = (array, predicate) => array.reduce((acc, value, id, array) => {
|
|
90
|
+
var _a;
|
|
91
|
+
;
|
|
92
|
+
(acc[_a = predicate(value, id, array)] || (acc[_a] = [])).push(value);
|
|
93
|
+
return acc;
|
|
94
|
+
}, {});
|
|
149
95
|
/**
|
|
150
96
|
* Signs and sends a group of [up to 16](https://developer.algorand.org/docs/get-details/atomic_transfers/#create-transactions) transactions to the chain
|
|
151
97
|
*
|
|
@@ -156,36 +102,72 @@ exports.sendTransaction = sendTransaction;
|
|
|
156
102
|
* @returns An object with group transaction ID (`groupTransactionId`) and (if `skipWaiting` is `false` or unset) confirmation (`confirmation`)
|
|
157
103
|
*/
|
|
158
104
|
const sendGroupOfTransactions = async function (groupSend, algod) {
|
|
159
|
-
const { transactions, sendParams } = groupSend;
|
|
160
|
-
const
|
|
105
|
+
const { transactions, signer, sendParams } = groupSend;
|
|
106
|
+
const transactionsWithSigner = await Promise.all(transactions.map(async (t) => {
|
|
107
|
+
if ('signer' in t)
|
|
108
|
+
return t;
|
|
109
|
+
const txn = 'then' in t ? (await t).transaction : t;
|
|
110
|
+
if (!signer) {
|
|
111
|
+
throw new Error(`Attempt to send transaction ${txn.txID()} as part of a group transaction, but no signer was provided.`);
|
|
112
|
+
}
|
|
113
|
+
return {
|
|
114
|
+
transaction: txn,
|
|
115
|
+
signer: signer,
|
|
116
|
+
};
|
|
117
|
+
}));
|
|
118
|
+
const transactionsToSend = transactionsWithSigner.map((t) => {
|
|
161
119
|
return t.transaction;
|
|
162
120
|
});
|
|
163
121
|
const group = algosdk_1.default.assignGroupID(transactionsToSend);
|
|
164
122
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
165
123
|
const groupId = buffer_1.Buffer.from(group[0].group).toString('base64');
|
|
166
|
-
|
|
167
|
-
|
|
124
|
+
_1.Config.getLogger(sendParams?.suppressLog).info(`Sending group of transactions (${groupId})`, { transactionsToSend });
|
|
125
|
+
// Sign transactions either using TransactionSigners, or not
|
|
126
|
+
let signedTransactions;
|
|
127
|
+
if (transactionsWithSigner.find((t) => 'signer' in t.signer)) {
|
|
128
|
+
// Validate all or nothing for transaction signers
|
|
129
|
+
if (transactionsWithSigner.find((t) => !('signer' in t.signer))) {
|
|
130
|
+
throw new Error("When issuing a group transaction the signers should either all be TransactionSignerAccount's or all not. " +
|
|
131
|
+
'Received at least one TransactionSignerAccount, but not all of them so failing the send.');
|
|
132
|
+
}
|
|
133
|
+
// Group transaction signers by signer
|
|
134
|
+
const groupedBySigner = groupBy(transactionsWithSigner.map((t, i) => ({
|
|
135
|
+
signer: t.signer,
|
|
136
|
+
id: i,
|
|
137
|
+
})), (t) => t.signer.addr);
|
|
138
|
+
// Perform the signature, grouped by signer
|
|
139
|
+
const signed = (await Promise.all(Object.values(groupedBySigner).map(async (signature) => {
|
|
140
|
+
const indexes = signature.map((s) => s.id);
|
|
141
|
+
const signed = await signature[0].signer.signer(group, indexes);
|
|
142
|
+
return signed.map((txn, i) => ({
|
|
143
|
+
txn,
|
|
144
|
+
id: indexes[i],
|
|
145
|
+
}));
|
|
146
|
+
}))).flatMap((a) => a);
|
|
147
|
+
// Extract the signed transactions in order
|
|
148
|
+
signedTransactions = signed.sort((s1, s2) => s1.id - s2.id).map((s) => s.txn);
|
|
168
149
|
}
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
150
|
+
else {
|
|
151
|
+
signedTransactions = group.map((groupedTransaction, id) => {
|
|
152
|
+
const signer = transactionsWithSigner[id].signer;
|
|
153
|
+
return 'sk' in signer
|
|
154
|
+
? groupedTransaction.signTxn(signer.sk)
|
|
155
|
+
: 'lsig' in signer
|
|
156
|
+
? algosdk_1.default.signLogicSigTransactionObject(groupedTransaction, signer).blob
|
|
157
|
+
: 'sign' in signer
|
|
158
|
+
? signer.sign(groupedTransaction)
|
|
159
|
+
: // This bit will never happen because above if statement
|
|
160
|
+
new Uint8Array();
|
|
161
|
+
});
|
|
180
162
|
}
|
|
163
|
+
_1.Config.getLogger(sendParams?.suppressLog).debug(`Signer IDs (${groupId})`, transactionsWithSigner.map((t) => (0, exports.getSenderAddress)(t.signer)));
|
|
164
|
+
_1.Config.getLogger(sendParams?.suppressLog).debug(`Transaction IDs (${groupId})`, transactionsToSend.map((t) => t.txID()));
|
|
181
165
|
// https://developer.algorand.org/docs/rest-apis/algod/v2/#post-v2transactions
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
config_1.AlgoKitConfig.logger.info(`Group transaction (${groupId}) sent with ${transactionsToSend.length} transactions`);
|
|
185
|
-
}
|
|
166
|
+
await algod.sendRawTransaction(signedTransactions).do();
|
|
167
|
+
_1.Config.getLogger(sendParams?.suppressLog).info(`Group transaction (${groupId}) sent with ${transactionsToSend.length} transactions`);
|
|
186
168
|
let confirmations = undefined;
|
|
187
169
|
if (!sendParams?.skipWaiting) {
|
|
188
|
-
confirmations = await Promise.all(transactionsToSend.map(async (t) => await (0, exports.waitForConfirmation)(
|
|
170
|
+
confirmations = await Promise.all(transactionsToSend.map(async (t) => await (0, exports.waitForConfirmation)(t.txID(), sendParams?.maxRoundsToWaitForConfirmation ?? 5, algod)));
|
|
189
171
|
}
|
|
190
172
|
return {
|
|
191
173
|
groupId,
|
|
@@ -200,14 +182,14 @@ exports.sendGroupOfTransactions = sendGroupOfTransactions;
|
|
|
200
182
|
*
|
|
201
183
|
* @param algod An algod client
|
|
202
184
|
* @param transactionId The transaction ID to wait for
|
|
203
|
-
* @param
|
|
185
|
+
* @param maxRoundsToWait Maximum number of rounds to wait
|
|
204
186
|
*
|
|
205
187
|
* @return Pending transaction information
|
|
206
188
|
* @throws Throws an error if the transaction is not confirmed or rejected in the next `timeout` rounds
|
|
207
189
|
*/
|
|
208
|
-
const waitForConfirmation = async function (
|
|
209
|
-
if (
|
|
210
|
-
throw new Error(`Invalid timeout, received ${
|
|
190
|
+
const waitForConfirmation = async function (transactionId, maxRoundsToWait, algod) {
|
|
191
|
+
if (maxRoundsToWait < 0) {
|
|
192
|
+
throw new Error(`Invalid timeout, received ${maxRoundsToWait}, expected > 0`);
|
|
211
193
|
}
|
|
212
194
|
// Get current round
|
|
213
195
|
const status = await algod.status().do();
|
|
@@ -217,7 +199,7 @@ const waitForConfirmation = async function (algod, transactionId, timeout) {
|
|
|
217
199
|
// Loop for up to `timeout` rounds looking for a confirmed transaction
|
|
218
200
|
const startRound = status['last-round'] + 1;
|
|
219
201
|
let currentRound = startRound;
|
|
220
|
-
while (currentRound < startRound +
|
|
202
|
+
while (currentRound < startRound + maxRoundsToWait) {
|
|
221
203
|
const pendingInfo = (await algod.pendingTransactionInformation(transactionId).do());
|
|
222
204
|
if (pendingInfo !== undefined) {
|
|
223
205
|
const confirmedRound = pendingInfo['confirmed-round'];
|
|
@@ -235,7 +217,7 @@ const waitForConfirmation = async function (algod, transactionId, timeout) {
|
|
|
235
217
|
await algod.statusAfterBlock(currentRound).do();
|
|
236
218
|
currentRound++;
|
|
237
219
|
}
|
|
238
|
-
throw new Error(`Transaction ${transactionId} not confirmed after ${
|
|
220
|
+
throw new Error(`Transaction ${transactionId} not confirmed after ${maxRoundsToWait} rounds`);
|
|
239
221
|
};
|
|
240
222
|
exports.waitForConfirmation = waitForConfirmation;
|
|
241
223
|
/**
|
|
@@ -254,7 +236,7 @@ function capTransactionFee(transaction, maxAcceptableFee) {
|
|
|
254
236
|
throw new Error(`Cancelled transaction due to high network congestion fees. Algorand suggested fees would cause this transaction to cost ${transaction.fee} µALGOs. Cap for this transaction is ${maxAcceptableFee.microAlgos} µALGOs.`);
|
|
255
237
|
}
|
|
256
238
|
else if (transaction.fee > algosdk_1.default.ALGORAND_MIN_TX_FEE) {
|
|
257
|
-
|
|
239
|
+
_1.Config.logger.warn(`Algorand network congestion fees are in effect. This transaction will incur a fee of ${transaction.fee} µALGOs.`);
|
|
258
240
|
}
|
|
259
241
|
// Now set the flat on the transaction. Otherwise the network may increase the fee above our cap and perform the transaction.
|
|
260
242
|
transaction.flatFee = true;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transaction.js","sourceRoot":"","sources":["../src/transaction.ts"],"names":[],"mappings":"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"}
|
package/transfer.d.ts
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Algodv2 } from 'algosdk';
|
|
2
|
+
import { SendTransactionResult } from './types/transaction';
|
|
3
|
+
import { AlgoTransferParams, EnsureFundedParams } from './types/transfer';
|
|
4
|
+
/**
|
|
5
|
+
* Transfer ALGOs between two accounts.
|
|
6
|
+
* @param transfer The transfer definition
|
|
7
|
+
* @param algod An algod client
|
|
8
|
+
* @returns The transaction object and optionally the confirmation if it was sent to the chain (`skipSending` is `false` or unset)
|
|
9
|
+
*/
|
|
10
|
+
export declare function transferAlgos(transfer: AlgoTransferParams, algod: Algodv2): Promise<SendTransactionResult>;
|
|
11
|
+
/**
|
|
12
|
+
* Funds a given account using a funding source such that it has a certain amount of algos free to spend (accounting for ALGOs locked in minimum balance requirement).
|
|
13
|
+
*
|
|
14
|
+
* @see https://developer.algorand.org/docs/get-details/accounts/#minimum-balance
|
|
15
|
+
*
|
|
16
|
+
* @param funding The funding configuration
|
|
17
|
+
* @param algod An algod client
|
|
18
|
+
* @returns undefined if nothing was needed or the transaction send result
|
|
19
|
+
*/
|
|
20
|
+
export declare function ensureFunded(funding: EnsureFundedParams, algod: Algodv2): Promise<SendTransactionResult | undefined>;
|
|
21
|
+
//# sourceMappingURL=transfer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transfer.d.ts","sourceRoot":"","sources":["../src/transfer.ts"],"names":[],"mappings":"AAAA,OAAgB,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAG1C,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAA;AAC3D,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AAEzE;;;;;GAKG;AACH,wBAAsB,aAAa,CAAC,QAAQ,EAAE,kBAAkB,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAkBhH;AAED;;;;;;;;GAQG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE,kBAAkB,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC,CAgC1H"}
|
package/transfer.js
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.ensureFunded = exports.transferAlgos = void 0;
|
|
7
|
+
const algosdk_1 = __importDefault(require("algosdk"));
|
|
8
|
+
const _1 = require("./");
|
|
9
|
+
const transaction_1 = require("./transaction");
|
|
10
|
+
/**
|
|
11
|
+
* Transfer ALGOs between two accounts.
|
|
12
|
+
* @param transfer The transfer definition
|
|
13
|
+
* @param algod An algod client
|
|
14
|
+
* @returns The transaction object and optionally the confirmation if it was sent to the chain (`skipSending` is `false` or unset)
|
|
15
|
+
*/
|
|
16
|
+
async function transferAlgos(transfer, algod) {
|
|
17
|
+
const { from, to, amount, note, transactionParams, ...sendParams } = transfer;
|
|
18
|
+
const transaction = algosdk_1.default.makePaymentTxnWithSuggestedParamsFromObject({
|
|
19
|
+
from: (0, transaction_1.getSenderAddress)(from),
|
|
20
|
+
to: to,
|
|
21
|
+
amount: amount.microAlgos,
|
|
22
|
+
note: (0, transaction_1.encodeTransactionNote)(note),
|
|
23
|
+
suggestedParams: await (0, transaction_1.getTransactionParams)(transactionParams, algod),
|
|
24
|
+
closeRemainderTo: undefined,
|
|
25
|
+
rekeyTo: undefined,
|
|
26
|
+
});
|
|
27
|
+
if (!sendParams.skipSending) {
|
|
28
|
+
_1.Config.getLogger(sendParams.suppressLog).debug(`Transferring ${amount.microAlgos}µALGOs from ${(0, transaction_1.getSenderAddress)(from)} to ${to}`);
|
|
29
|
+
}
|
|
30
|
+
return (0, transaction_1.sendTransaction)({ transaction, from, sendParams }, algod);
|
|
31
|
+
}
|
|
32
|
+
exports.transferAlgos = transferAlgos;
|
|
33
|
+
/**
|
|
34
|
+
* Funds a given account using a funding source such that it has a certain amount of algos free to spend (accounting for ALGOs locked in minimum balance requirement).
|
|
35
|
+
*
|
|
36
|
+
* @see https://developer.algorand.org/docs/get-details/accounts/#minimum-balance
|
|
37
|
+
*
|
|
38
|
+
* @param funding The funding configuration
|
|
39
|
+
* @param algod An algod client
|
|
40
|
+
* @returns undefined if nothing was needed or the transaction send result
|
|
41
|
+
*/
|
|
42
|
+
async function ensureFunded(funding, algod) {
|
|
43
|
+
const { accountToFund, fundingSource, minSpendingBalance, minFundingIncrement, transactionParams, note, ...sendParams } = funding;
|
|
44
|
+
const addressToFund = typeof accountToFund === 'string' ? accountToFund : (0, transaction_1.getSenderAddress)(accountToFund);
|
|
45
|
+
const accountInfo = await algod.accountInformation(addressToFund).do();
|
|
46
|
+
const balance = Number(accountInfo.amount);
|
|
47
|
+
const minimumBalanceRequirement = (0, _1.microAlgos)(Number(accountInfo['min-balance']));
|
|
48
|
+
const currentSpendingBalance = (0, _1.microAlgos)(balance - +minimumBalanceRequirement);
|
|
49
|
+
if (minSpendingBalance > currentSpendingBalance) {
|
|
50
|
+
const minFundAmount = (0, _1.microAlgos)(+minSpendingBalance - +currentSpendingBalance);
|
|
51
|
+
const fundAmount = (0, _1.microAlgos)(Math.max(+minFundAmount, minFundingIncrement?.microAlgos ?? 0));
|
|
52
|
+
_1.Config.getLogger(sendParams.suppressLog).info(`Funding ${addressToFund} ${fundAmount} from ${(0, transaction_1.getSenderAddress)(fundingSource)} to reach minimum spend amount of ${minSpendingBalance} (balance = ${balance}, min_balance_req = ${minimumBalanceRequirement})`);
|
|
53
|
+
return await transferAlgos({
|
|
54
|
+
from: fundingSource,
|
|
55
|
+
to: addressToFund,
|
|
56
|
+
note: note ?? 'Funding account to meet minimum requirement',
|
|
57
|
+
amount: fundAmount,
|
|
58
|
+
transactionParams,
|
|
59
|
+
...sendParams,
|
|
60
|
+
}, algod);
|
|
61
|
+
}
|
|
62
|
+
return undefined;
|
|
63
|
+
}
|
|
64
|
+
exports.ensureFunded = ensureFunded;
|
|
65
|
+
//# sourceMappingURL=transfer.js.map
|
package/transfer.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transfer.js","sourceRoot":"","sources":["../src/transfer.ts"],"names":[],"mappings":";;;;;;AAAA,sDAA0C;AAC1C,yBAAuC;AACvC,+CAA8G;AAI9G;;;;;GAKG;AACI,KAAK,UAAU,aAAa,CAAC,QAA4B,EAAE,KAAc;IAC9E,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,EAAE,GAAG,UAAU,EAAE,GAAG,QAAQ,CAAA;IAE7E,MAAM,WAAW,GAAG,iBAAO,CAAC,2CAA2C,CAAC;QACtE,IAAI,EAAE,IAAA,8BAAgB,EAAC,IAAI,CAAC;QAC5B,EAAE,EAAE,EAAE;QACN,MAAM,EAAE,MAAM,CAAC,UAAU;QACzB,IAAI,EAAE,IAAA,mCAAqB,EAAC,IAAI,CAAC;QACjC,eAAe,EAAE,MAAM,IAAA,kCAAoB,EAAC,iBAAiB,EAAE,KAAK,CAAC;QACrE,gBAAgB,EAAE,SAAS;QAC3B,OAAO,EAAE,SAAS;KACnB,CAAC,CAAA;IAEF,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE;QAC3B,SAAM,CAAC,SAAS,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,gBAAgB,MAAM,CAAC,UAAU,eAAe,IAAA,8BAAgB,EAAC,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,CAAA;KAClI;IAED,OAAO,IAAA,6BAAe,EAAC,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,KAAK,CAAC,CAAA;AAClE,CAAC;AAlBD,sCAkBC;AAED;;;;;;;;GAQG;AACI,KAAK,UAAU,YAAY,CAAC,OAA2B,EAAE,KAAc;IAC5E,MAAM,EAAE,aAAa,EAAE,aAAa,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,IAAI,EAAE,GAAG,UAAU,EAAE,GAAG,OAAO,CAAA;IAEjI,MAAM,aAAa,GAAG,OAAO,aAAa,KAAK,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,IAAA,8BAAgB,EAAC,aAAa,CAAC,CAAA;IAEzG,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC,EAAE,EAAE,CAAA;IACtE,MAAM,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAA;IAC1C,MAAM,yBAAyB,GAAG,IAAA,aAAU,EAAC,MAAM,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC,CAAA;IAChF,MAAM,sBAAsB,GAAG,IAAA,aAAU,EAAC,OAAO,GAAG,CAAC,yBAAyB,CAAC,CAAA;IAE/E,IAAI,kBAAkB,GAAG,sBAAsB,EAAE;QAC/C,MAAM,aAAa,GAAG,IAAA,aAAU,EAAC,CAAC,kBAAkB,GAAG,CAAC,sBAAsB,CAAC,CAAA;QAC/E,MAAM,UAAU,GAAG,IAAA,aAAU,EAAC,IAAI,CAAC,GAAG,CAAC,CAAC,aAAa,EAAE,mBAAmB,EAAE,UAAU,IAAI,CAAC,CAAC,CAAC,CAAA;QAC7F,SAAM,CAAC,SAAS,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,IAAI,CAC3C,WAAW,aAAa,IAAI,UAAU,SAAS,IAAA,8BAAgB,EAC7D,aAAa,CACd,qCAAqC,kBAAkB,eAAe,OAAO,uBAAuB,yBAAyB,GAAG,CAClI,CAAA;QACD,OAAO,MAAM,aAAa,CACxB;YACE,IAAI,EAAE,aAAa;YACnB,EAAE,EAAE,aAAa;YACjB,IAAI,EAAE,IAAI,IAAI,6CAA6C;YAC3D,MAAM,EAAE,UAAU;YAClB,iBAAiB;YACjB,GAAG,UAAU;SACd,EACD,KAAK,CACN,CAAA;KACF;IAED,OAAO,SAAS,CAAA;AAClB,CAAC;AAhCD,oCAgCC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import algosdk, { Account, MultisigMetadata, Transaction, TransactionSigner } from 'algosdk';
|
|
2
|
+
/**
|
|
3
|
+
* The account name identifier used for fund dispensing in test environments
|
|
4
|
+
*/
|
|
5
|
+
export declare const DISPENSER_ACCOUNT = "DISPENSER";
|
|
6
|
+
/** Account wrapper that supports partial or full multisig signing. */
|
|
7
|
+
export declare class MultisigAccount {
|
|
8
|
+
_params: algosdk.MultisigMetadata;
|
|
9
|
+
_signingAccounts: (algosdk.Account | SigningAccount)[];
|
|
10
|
+
_addr: string;
|
|
11
|
+
/** The parameters for the multisig account */
|
|
12
|
+
get params(): Readonly<algosdk.MultisigMetadata>;
|
|
13
|
+
/** The list of accounts that are present to sign */
|
|
14
|
+
get signingAccounts(): Readonly<(algosdk.Account | SigningAccount)[]>;
|
|
15
|
+
/** The address of the multisig account */
|
|
16
|
+
get addr(): Readonly<string>;
|
|
17
|
+
constructor(multisigParams: MultisigMetadata, signingAccounts: (Account | SigningAccount)[]);
|
|
18
|
+
/**
|
|
19
|
+
* Sign the given transaction
|
|
20
|
+
* @param transaction Either a transaction object or a raw, partially signed transaction
|
|
21
|
+
* @returns The transaction signed by the present signers
|
|
22
|
+
*/
|
|
23
|
+
sign(transaction: Transaction | Uint8Array): Uint8Array;
|
|
24
|
+
}
|
|
25
|
+
/** Account wrapper that supports a rekeyed account */
|
|
26
|
+
export declare class SigningAccount implements Account {
|
|
27
|
+
private _account;
|
|
28
|
+
private _sender;
|
|
29
|
+
/**
|
|
30
|
+
* Algorand address of the sender
|
|
31
|
+
*/
|
|
32
|
+
get addr(): Readonly<string>;
|
|
33
|
+
/**
|
|
34
|
+
* Secret key belonging to the signer
|
|
35
|
+
*/
|
|
36
|
+
get sk(): Readonly<Uint8Array>;
|
|
37
|
+
/**
|
|
38
|
+
* Algorand account of the underlying signing account
|
|
39
|
+
*/
|
|
40
|
+
get signer(): Account;
|
|
41
|
+
/**
|
|
42
|
+
* Algorand account of the sender address and signer private key
|
|
43
|
+
*/
|
|
44
|
+
get sender(): Account;
|
|
45
|
+
constructor(account: Account, sender: string | undefined);
|
|
46
|
+
}
|
|
47
|
+
/** A wrapper around @see {TransactionSigner} that also has the sender address. */
|
|
48
|
+
export interface TransactionSignerAccount {
|
|
49
|
+
addr: Readonly<string>;
|
|
50
|
+
signer: TransactionSigner;
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=account.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"account.d.ts","sourceRoot":"","sources":["../../src/types/account.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,EAAE,EAAE,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAA;AAE5F;;GAEG;AACH,eAAO,MAAM,iBAAiB,cAAc,CAAA;AAE5C,sEAAsE;AACtE,qBAAa,eAAe;IAC1B,OAAO,EAAE,OAAO,CAAC,gBAAgB,CAAA;IACjC,gBAAgB,EAAE,CAAC,OAAO,CAAC,OAAO,GAAG,cAAc,CAAC,EAAE,CAAA;IACtD,KAAK,EAAE,MAAM,CAAA;IAEb,8CAA8C;IAC9C,IAAI,MAAM,IAAI,QAAQ,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAE/C;IAED,oDAAoD;IACpD,IAAI,eAAe,IAAI,QAAQ,CAAC,CAAC,OAAO,CAAC,OAAO,GAAG,cAAc,CAAC,EAAE,CAAC,CAEpE;IAED,0CAA0C;IAC1C,IAAI,IAAI,IAAI,QAAQ,CAAC,MAAM,CAAC,CAE3B;gBAEW,cAAc,EAAE,gBAAgB,EAAE,eAAe,EAAE,CAAC,OAAO,GAAG,cAAc,CAAC,EAAE;IAM3F;;;;OAIG;IACI,IAAI,CAAC,WAAW,EAAE,WAAW,GAAG,UAAU,GAAG,UAAU;CAY/D;AAED,sDAAsD;AACtD,qBAAa,cAAe,YAAW,OAAO;IAC5C,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,OAAO,CAAQ;IAEvB;;OAEG;IACH,IAAI,IAAI,IAAI,QAAQ,CAAC,MAAM,CAAC,CAE3B;IAED;;OAEG;IACH,IAAI,EAAE,IAAI,QAAQ,CAAC,UAAU,CAAC,CAE7B;IAED;;OAEG;IACH,IAAI,MAAM,IAAI,OAAO,CAEpB;IAED;;OAEG;IACH,IAAI,MAAM,IAAI,OAAO,CAKpB;gBAEW,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS;CAIzD;AAED,kFAAkF;AAClF,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAA;IACtB,MAAM,EAAE,iBAAiB,CAAA;CAC1B"}
|
package/types/account.js
ADDED
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.SigningAccount = exports.MultisigAccount = exports.DISPENSER_ACCOUNT = void 0;
|
|
7
|
+
const algosdk_1 = __importDefault(require("algosdk"));
|
|
8
|
+
/**
|
|
9
|
+
* The account name identifier used for fund dispensing in test environments
|
|
10
|
+
*/
|
|
11
|
+
exports.DISPENSER_ACCOUNT = 'DISPENSER';
|
|
12
|
+
/** Account wrapper that supports partial or full multisig signing. */
|
|
13
|
+
class MultisigAccount {
|
|
14
|
+
/** The parameters for the multisig account */
|
|
15
|
+
get params() {
|
|
16
|
+
return this._params;
|
|
17
|
+
}
|
|
18
|
+
/** The list of accounts that are present to sign */
|
|
19
|
+
get signingAccounts() {
|
|
20
|
+
return this._signingAccounts;
|
|
21
|
+
}
|
|
22
|
+
/** The address of the multisig account */
|
|
23
|
+
get addr() {
|
|
24
|
+
return this._addr;
|
|
25
|
+
}
|
|
26
|
+
constructor(multisigParams, signingAccounts) {
|
|
27
|
+
this._params = multisigParams;
|
|
28
|
+
this._signingAccounts = signingAccounts;
|
|
29
|
+
this._addr = algosdk_1.default.multisigAddress(multisigParams);
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Sign the given transaction
|
|
33
|
+
* @param transaction Either a transaction object or a raw, partially signed transaction
|
|
34
|
+
* @returns The transaction signed by the present signers
|
|
35
|
+
*/
|
|
36
|
+
sign(transaction) {
|
|
37
|
+
let signedTxn = 'from' in transaction ? undefined : transaction;
|
|
38
|
+
for (const signer of this._signingAccounts) {
|
|
39
|
+
if (signedTxn) {
|
|
40
|
+
signedTxn = algosdk_1.default.appendSignMultisigTransaction(signedTxn, this._params, signer.sk).blob;
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
signedTxn = algosdk_1.default.signMultisigTransaction(transaction, this._params, signer.sk).blob;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
47
|
+
return signedTxn;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
exports.MultisigAccount = MultisigAccount;
|
|
51
|
+
/** Account wrapper that supports a rekeyed account */
|
|
52
|
+
class SigningAccount {
|
|
53
|
+
/**
|
|
54
|
+
* Algorand address of the sender
|
|
55
|
+
*/
|
|
56
|
+
get addr() {
|
|
57
|
+
return this._sender;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Secret key belonging to the signer
|
|
61
|
+
*/
|
|
62
|
+
get sk() {
|
|
63
|
+
return this._account.sk;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Algorand account of the underlying signing account
|
|
67
|
+
*/
|
|
68
|
+
get signer() {
|
|
69
|
+
return this._account;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Algorand account of the sender address and signer private key
|
|
73
|
+
*/
|
|
74
|
+
get sender() {
|
|
75
|
+
return {
|
|
76
|
+
addr: this._sender,
|
|
77
|
+
sk: this._account.sk,
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
constructor(account, sender) {
|
|
81
|
+
this._account = account;
|
|
82
|
+
this._sender = sender ?? account.addr;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
exports.SigningAccount = SigningAccount;
|
|
86
|
+
//# sourceMappingURL=account.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"account.js","sourceRoot":"","sources":["../../src/types/account.ts"],"names":[],"mappings":";;;;;;AAAA,sDAA4F;AAE5F;;GAEG;AACU,QAAA,iBAAiB,GAAG,WAAW,CAAA;AAE5C,sEAAsE;AACtE,MAAa,eAAe;IAK1B,8CAA8C;IAC9C,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,OAAO,CAAA;IACrB,CAAC;IAED,oDAAoD;IACpD,IAAI,eAAe;QACjB,OAAO,IAAI,CAAC,gBAAgB,CAAA;IAC9B,CAAC;IAED,0CAA0C;IAC1C,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,KAAK,CAAA;IACnB,CAAC;IAED,YAAY,cAAgC,EAAE,eAA6C;QACzF,IAAI,CAAC,OAAO,GAAG,cAAc,CAAA;QAC7B,IAAI,CAAC,gBAAgB,GAAG,eAAe,CAAA;QACvC,IAAI,CAAC,KAAK,GAAG,iBAAO,CAAC,eAAe,CAAC,cAAc,CAAC,CAAA;IACtD,CAAC;IAED;;;;OAIG;IACI,IAAI,CAAC,WAAqC;QAC/C,IAAI,SAAS,GAAG,MAAM,IAAI,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAA;QAC/D,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,gBAAgB,EAAE;YAC1C,IAAI,SAAS,EAAE;gBACb,SAAS,GAAG,iBAAO,CAAC,6BAA6B,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAA;aAC3F;iBAAM;gBACL,SAAS,GAAG,iBAAO,CAAC,uBAAuB,CAAC,WAA0B,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAA;aACtG;SACF;QACD,oEAAoE;QACpE,OAAO,SAAU,CAAA;IACnB,CAAC;CACF;AA3CD,0CA2CC;AAED,sDAAsD;AACtD,MAAa,cAAc;IAIzB;;OAEG;IACH,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,OAAO,CAAA;IACrB,CAAC;IAED;;OAEG;IACH,IAAI,EAAE;QACJ,OAAO,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAA;IACzB,CAAC;IAED;;OAEG;IACH,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,QAAQ,CAAA;IACtB,CAAC;IAED;;OAEG;IACH,IAAI,MAAM;QACR,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,OAAO;YAClB,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE;SACrB,CAAA;IACH,CAAC;IAED,YAAY,OAAgB,EAAE,MAA0B;QACtD,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAA;QACvB,IAAI,CAAC,OAAO,GAAG,MAAM,IAAI,OAAO,CAAC,IAAI,CAAA;IACvC,CAAC;CACF;AAvCD,wCAuCC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"algo-http-client-with-retry.d.ts","sourceRoot":"","sources":["../../src/types/algo-http-client-with-retry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,KAAK,EAAE,MAAM,0CAA0C,CAAA;AAExF,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAA;AAEjE,yEAAyE;AACzE,qBAAa,uBAAwB,SAAQ,sBAAsB;IACjE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAI;IACrC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAQ;IAI9C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAsC;IAChF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAUxC;YAEa,aAAa;IA6BrB,GAAG,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,cAAc,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAI9H,IAAI,CACR,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,UAAU,EAChB,KAAK,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,EACrB,cAAc,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GAC1C,OAAO,CAAC,sBAAsB,CAAC;IAI5B,MAAM,CACV,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,UAAU,EAChB,KAAK,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,EACrB,cAAc,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GAC1C,OAAO,CAAC,sBAAsB,CAAC;CAGnC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.AlgoHttpClientWithRetry = void 0;
|
|
4
|
-
const
|
|
4
|
+
const __1 = require("../");
|
|
5
5
|
const urlTokenBaseHTTPClient_1 = require("./urlTokenBaseHTTPClient");
|
|
6
6
|
/** A HTTP Client that wraps the Algorand SDK HTTP Client with retries */
|
|
7
7
|
class AlgoHttpClientWithRetry extends urlTokenBaseHTTPClient_1.URLTokenBaseHTTPClient {
|
|
@@ -26,7 +26,7 @@ class AlgoHttpClientWithRetry extends urlTokenBaseHTTPClient_1.URLTokenBaseHTTPC
|
|
|
26
26
|
if (delayTimeMs > 0) {
|
|
27
27
|
await new Promise((r) => setTimeout(r, delayTimeMs));
|
|
28
28
|
}
|
|
29
|
-
|
|
29
|
+
__1.Config.logger.warn(`algosdk request failed ${numTries} times. Retrying in ${delayTimeMs}ms: ${err}`);
|
|
30
30
|
}
|
|
31
31
|
} while (!response && ++numTries <= AlgoHttpClientWithRetry.MAX_TRIES);
|
|
32
32
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"algo-http-client-with-retry.js","sourceRoot":"","sources":["../../src/types/algo-http-client-with-retry.ts"],"names":[],"mappings":";;;AACA,2BAA4B;AAC5B,qEAAiE;AAEjE,yEAAyE;AACzE,MAAa,uBAAwB,SAAQ,+CAAsB;IAmBzD,KAAK,CAAC,aAAa,CAAC,IAA2C;QACrE,IAAI,QAA4C,CAAA;QAChD,IAAI,QAAQ,GAAG,CAAC,CAAA;QAChB,GAAG;YACD,IAAI;gBACF,QAAQ,GAAG,MAAM,IAAI,EAAE,CAAA;gBACvB,8DAA8D;aAC/D;YAAC,OAAO,GAAQ,EAAE;gBACjB,IAAI,QAAQ,IAAI,uBAAuB,CAAC,SAAS,EAAE;oBACjD,MAAM,GAAG,CAAA;iBACV;gBACD,iDAAiD;gBACjD,IACE,CAAC,CAAC,uBAAuB,CAAC,iBAAiB,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,uBAAuB,CAAC,kBAAkB,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAClI;oBACA,MAAM,GAAG,CAAA;iBACV;gBACD,gEAAgE;gBAChE,MAAM,WAAW,GAAG,QAAQ,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,CAAC,CAAC,EAAE,uBAAuB,CAAC,cAAc,CAAC,CAAA;gBAC1H,IAAI,WAAW,GAAG,CAAC,EAAE;oBACnB,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAA;iBACrD;gBACD,UAAM,CAAC,MAAM,CAAC,IAAI,CAAC,0BAA0B,QAAQ,uBAAuB,WAAW,OAAO,GAAG,EAAE,CAAC,CAAA;aACrG;SACF,QAAQ,CAAC,QAAQ,IAAI,EAAE,QAAQ,IAAI,uBAAuB,CAAC,SAAS,EAAC;QACtE,oEAAoE;QACpE,OAAO,QAAS,CAAA;IAClB,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,YAAoB,EAAE,KAAqB,EAAE,iBAAyC,EAAE;QAChG,OAAO,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC,CAAA;IACvF,CAAC;IAED,KAAK,CAAC,IAAI,CACR,YAAoB,EACpB,IAAgB,EAChB,KAAqB,EACrB,iBAAyC,EAAE;QAE3C,OAAO,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC,CAAA;IAC9F,CAAC;IAED,KAAK,CAAC,MAAM,CACV,YAAoB,EACpB,IAAgB,EAChB,KAAqB,EACrB,iBAAyC,EAAE;QAE3C,OAAO,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,EAAE,IAAI,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC,CAAA;IAChG,CAAC;;AApEH,0DAqEC;AApEyB,iCAAS,GAAG,CAAC,CAAA;AACb,sCAAc,GAAG,KAAK,CAAA;AAE9C,oFAAoF;AACpF,mHAAmH;AAC3F,0CAAkB,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;AACxD,yCAAiB,GAAG;IAC1C,WAAW;IACX,YAAY;IACZ,YAAY;IACZ,cAAc;IACd,OAAO;IACP,WAAW;IACX,aAAa;IACb,WAAW;IACX,QAAQ,EAAE,+CAA+C;CAC1D,CAAA"}
|
|
@@ -2,7 +2,7 @@ import { EncodedSignedTransaction } from 'algosdk';
|
|
|
2
2
|
/** The response from the pending transaction API @see https://developer.algorand.org/docs/rest-apis/algod/v2/#get-v2transactionspendingtxid */
|
|
3
3
|
export interface PendingTransactionResponse {
|
|
4
4
|
/**
|
|
5
|
-
* The application
|
|
5
|
+
* The application id if the transaction was found and it created an
|
|
6
6
|
* application.
|
|
7
7
|
*/
|
|
8
8
|
'application-index'?: number;
|
|
@@ -11,7 +11,7 @@ export interface PendingTransactionResponse {
|
|
|
11
11
|
*/
|
|
12
12
|
'asset-closing-amount'?: number;
|
|
13
13
|
/**
|
|
14
|
-
* The asset
|
|
14
|
+
* The asset id if the transaction was found and it created an asset.
|
|
15
15
|
*/
|
|
16
16
|
'asset-index'?: number;
|
|
17
17
|
/**
|
|
@@ -61,7 +61,7 @@ export interface PendingTransactionResponse {
|
|
|
61
61
|
txn: EncodedSignedTransaction;
|
|
62
62
|
}
|
|
63
63
|
/** Represents a TEAL value delta @see https://developer.algorand.org/docs/rest-apis/algod/v2/#evaldelta */
|
|
64
|
-
interface EvalDelta {
|
|
64
|
+
export interface EvalDelta {
|
|
65
65
|
action: number;
|
|
66
66
|
bytes: string;
|
|
67
67
|
uint: number;
|
|
@@ -72,7 +72,7 @@ export interface ApplicationResponse {
|
|
|
72
72
|
params: ApplicationParams;
|
|
73
73
|
}
|
|
74
74
|
/** Stores the global information associated with an application @see https://developer.algorand.org/docs/rest-apis/algod/v2/#applicationparams */
|
|
75
|
-
interface ApplicationParams {
|
|
75
|
+
export interface ApplicationParams {
|
|
76
76
|
/** Address of the account that created the app */
|
|
77
77
|
creator: string;
|
|
78
78
|
/** Base64 encoded TEAL approval program */
|
|
@@ -94,7 +94,7 @@ interface ApplicationParams {
|
|
|
94
94
|
/**
|
|
95
95
|
* Represents a TEAL value @see https://developer.algorand.org/docs/rest-apis/algod/v2/#tealvalue
|
|
96
96
|
*/
|
|
97
|
-
type TealValue = {
|
|
97
|
+
export type TealValue = {
|
|
98
98
|
/**
|
|
99
99
|
* (tt) value type. Value `1` refers to **bytes**, value `2` refers to **uint**
|
|
100
100
|
*/
|
|
@@ -120,5 +120,4 @@ export interface ApplicationStateSchema {
|
|
|
120
120
|
/** [nui] num of uints */
|
|
121
121
|
'num-uint': number;
|
|
122
122
|
}
|
|
123
|
-
|
|
124
|
-
//# sourceMappingURL=algod-type.d.ts.map
|
|
123
|
+
//# sourceMappingURL=algod.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"algod.d.ts","sourceRoot":"","sources":["../../src/types/algod.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,SAAS,CAAA;AAElD,+IAA+I;AAC/I,MAAM,WAAW,0BAA0B;IACzC;;;OAGG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B;;OAEG;IACH,sBAAsB,CAAC,EAAE,MAAM,CAAA;IAC/B;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB;;OAEG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B;;;OAGG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,CAAA;IAClD;;OAEG;IACH,YAAY,CAAC,EAAE,0BAA0B,EAAE,CAAA;IAC3C;;;OAGG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,CAAA;IACjD;;OAEG;IACH,IAAI,CAAC,EAAE,UAAU,EAAE,CAAA;IACnB;4GACwG;IACxG,YAAY,EAAE,MAAM,CAAA;IACpB;;OAEG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB;;OAEG;IACH,GAAG,EAAE,wBAAwB,CAAA;CAC9B;AAED,2GAA2G;AAC3G,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;CACb;AAED,0IAA0I;AAC1I,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,iBAAiB,CAAA;CAC1B;AAED,kJAAkJ;AAClJ,MAAM,WAAW,iBAAiB;IAChC,kDAAkD;IAClD,OAAO,EAAE,MAAM,CAAA;IACf,2CAA2C;IAC3C,kBAAkB,EAAE,MAAM,CAAA;IAC1B,8CAA8C;IAC9C,qBAAqB,EAAE,MAAM,CAAA;IAC7B,+DAA+D;IAC/D,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B,kCAAkC;IAClC,cAAc,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,SAAS,CAAA;KAAE,EAAE,CAAA;IACpD,0BAA0B;IAC1B,qBAAqB,CAAC,EAAE,sBAAsB,CAAA;IAC9C,yBAAyB;IACzB,oBAAoB,CAAC,EAAE,sBAAsB,CAAA;CAC9C;AAED;;GAEG;AACH,MAAM,MAAM,SAAS,GACjB;IACE;;OAEG;IACH,IAAI,EAAE,CAAC,CAAA;IACP;;OAEG;IACH,KAAK,EAAE,MAAM,CAAA;CACd,GACD;IACE;;OAEG;IACH,IAAI,EAAE,CAAC,CAAA;IAEP;;OAEG;IACH,IAAI,EAAE,MAAM,GAAG,MAAM,CAAA;CACtB,CAAA;AAEL,2JAA2J;AAC3J,MAAM,WAAW,sBAAsB;IACrC,+BAA+B;IAC/B,gBAAgB,EAAE,MAAM,CAAA;IACxB,yBAAyB;IACzB,UAAU,EAAE,MAAM,CAAA;CACnB"}
|