@algorandfoundation/algokit-utils 10.0.0-alpha.31 → 10.0.0-alpha.32
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/account-manager.d.ts +448 -0
- package/account-manager.js +623 -0
- package/account-manager.js.map +1 -0
- package/account-manager.mjs +620 -0
- package/account-manager.mjs.map +1 -0
- package/account.d.ts +156 -0
- package/account.js +10 -0
- package/account.js.map +1 -0
- package/account.mjs +9 -0
- package/account.mjs.map +1 -0
- package/algorand-client-transaction-creator.d.ts +1103 -0
- package/algorand-client-transaction-creator.js +735 -0
- package/algorand-client-transaction-creator.js.map +1 -0
- package/algorand-client-transaction-creator.mjs +734 -0
- package/algorand-client-transaction-creator.mjs.map +1 -0
- package/algorand-client-transaction-sender.d.ts +1317 -0
- package/algorand-client-transaction-sender.js +933 -0
- package/algorand-client-transaction-sender.js.map +1 -0
- package/algorand-client-transaction-sender.mjs +932 -0
- package/algorand-client-transaction-sender.mjs.map +1 -0
- package/algorand-client.d.ts +246 -0
- package/algorand-client.js +325 -0
- package/algorand-client.js.map +1 -0
- package/algorand-client.mjs +325 -0
- package/algorand-client.mjs.map +1 -0
- package/amount.d.ts +46 -3
- package/amount.js +92 -13
- package/amount.js.map +1 -1
- package/amount.mjs +80 -3
- package/amount.mjs.map +1 -1
- package/app-client.d.ts +2130 -0
- package/app-client.js +909 -0
- package/app-client.js.map +1 -0
- package/app-client.mjs +908 -0
- package/app-client.mjs.map +1 -0
- package/app-deployer.d.ts +166 -0
- package/app-deployer.js +353 -0
- package/app-deployer.js.map +1 -0
- package/app-deployer.mjs +353 -0
- package/app-deployer.mjs.map +1 -0
- package/app-factory.d.ts +965 -0
- package/app-factory.js +448 -0
- package/app-factory.js.map +1 -0
- package/app-factory.mjs +448 -0
- package/app-factory.mjs.map +1 -0
- package/app-manager.d.ts +323 -0
- package/app-manager.js +468 -0
- package/app-manager.js.map +1 -0
- package/app-manager.mjs +468 -0
- package/app-manager.mjs.map +1 -0
- package/app-spec.d.ts +203 -0
- package/app-spec.js +137 -0
- package/app-spec.js.map +1 -0
- package/app-spec.mjs +137 -0
- package/app-spec.mjs.map +1 -0
- package/app.d.ts +257 -0
- package/app.js +49 -0
- package/app.js.map +1 -0
- package/app.mjs +42 -0
- package/app.mjs.map +1 -0
- package/asset-manager.d.ts +212 -0
- package/asset-manager.js +166 -0
- package/asset-manager.js.map +1 -0
- package/asset-manager.mjs +166 -0
- package/asset-manager.mjs.map +1 -0
- package/async-event-emitter.d.ts +16 -0
- package/async-event-emitter.js +38 -0
- package/async-event-emitter.js.map +1 -0
- package/async-event-emitter.mjs +37 -0
- package/async-event-emitter.mjs.map +1 -0
- package/client-manager.d.ts +475 -0
- package/client-manager.js +616 -0
- package/client-manager.js.map +1 -0
- package/client-manager.mjs +616 -0
- package/client-manager.mjs.map +1 -0
- package/composer.d.ts +947 -0
- package/composer.js +1584 -0
- package/composer.js.map +1 -0
- package/composer.mjs +1583 -0
- package/composer.mjs.map +1 -0
- package/config.d.ts +1 -1
- package/config.js +2 -2
- package/config.js.map +1 -1
- package/config.mjs +1 -1
- package/config.mjs.map +1 -1
- package/debugging.d.ts +47 -0
- package/debugging.js +20 -0
- package/debugging.js.map +1 -0
- package/debugging.mjs +15 -0
- package/debugging.mjs.map +1 -0
- package/dispenser-client.d.ts +90 -0
- package/dispenser-client.js +127 -0
- package/dispenser-client.js.map +1 -0
- package/dispenser-client.mjs +127 -0
- package/dispenser-client.mjs.map +1 -0
- package/expand.d.ts +2 -0
- package/expand.js +0 -0
- package/expand.mjs +0 -0
- package/index.d.ts +6 -5
- package/index.js +4 -3
- package/index.mjs +5 -5
- package/indexer-client/indexer-lookup.d.ts +1 -1
- package/indexer-client/indexer-lookup.js.map +1 -1
- package/indexer-client/indexer-lookup.mjs.map +1 -1
- package/indexer.d.ts +40 -0
- package/indexer.js +38 -0
- package/indexer.js.map +1 -0
- package/indexer.mjs +35 -0
- package/indexer.mjs.map +1 -0
- package/instance-of.d.ts +8 -0
- package/kmd-account-manager.d.ts +74 -0
- package/kmd-account-manager.js +167 -0
- package/kmd-account-manager.js.map +1 -0
- package/kmd-account-manager.mjs +165 -0
- package/kmd-account-manager.mjs.map +1 -0
- package/lifecycle-events.d.ts +14 -0
- package/lifecycle-events.js +11 -0
- package/lifecycle-events.js.map +1 -0
- package/lifecycle-events.mjs +10 -0
- package/lifecycle-events.mjs.map +1 -0
- package/logging.d.ts +13 -0
- package/logging.js +47 -0
- package/logging.js.map +1 -0
- package/logging.mjs +42 -0
- package/logging.mjs.map +1 -0
- package/logic-error.d.ts +39 -0
- package/logic-error.js +54 -0
- package/logic-error.js.map +1 -0
- package/logic-error.mjs +53 -0
- package/logic-error.mjs.map +1 -0
- package/network-client.d.ts +43 -0
- package/network-client.js +14 -0
- package/network-client.js.map +1 -0
- package/network-client.mjs +13 -0
- package/network-client.mjs.map +1 -0
- package/package.json +11 -1
- package/testing/account.d.ts +2 -2
- package/testing/account.js +1 -1
- package/testing/account.js.map +1 -1
- package/testing/account.mjs +1 -1
- package/testing/account.mjs.map +1 -1
- package/testing/fixtures/algokit-log-capture-fixture.d.ts +1 -1
- package/testing/fixtures/algokit-log-capture-fixture.js.map +1 -1
- package/testing/fixtures/algokit-log-capture-fixture.mjs.map +1 -1
- package/testing/fixtures/algorand-fixture.d.ts +2 -2
- package/testing/fixtures/algorand-fixture.js +2 -2
- package/testing/fixtures/algorand-fixture.js.map +1 -1
- package/testing/fixtures/algorand-fixture.mjs +2 -2
- package/testing/fixtures/algorand-fixture.mjs.map +1 -1
- package/testing/index.d.ts +2 -1
- package/testing/test-logger.d.ts +1 -1
- package/testing/test-logger.js.map +1 -1
- package/testing/test-logger.mjs.map +1 -1
- package/testing/types.d.ts +156 -0
- package/transaction/index.d.ts +4 -0
- package/transaction/index.js +9 -0
- package/transaction/index.mjs +4 -0
- package/transaction/perform-transaction-composer-simulate.d.ts +1 -1
- package/transaction/perform-transaction-composer-simulate.js.map +1 -1
- package/transaction/perform-transaction-composer-simulate.mjs.map +1 -1
- package/transaction/transaction.d.ts +2 -2
- package/transaction/transaction.js.map +1 -1
- package/transaction/transaction.mjs.map +1 -1
- package/transaction/types.d.ts +133 -0
- package/transactions/app-call.d.ts +1 -1
- package/transactions/app-call.js +1 -1
- package/transactions/app-call.js.map +1 -1
- package/transactions/app-call.mjs +1 -1
- package/transactions/app-call.mjs.map +1 -1
- package/transactions/common.d.ts +1 -1
- package/transactions/common.js.map +1 -1
- package/transactions/common.mjs.map +1 -1
- package/transactions/method-call.d.ts +1 -1
- package/transactions/method-call.js +1 -1
- package/transactions/method-call.js.map +1 -1
- package/transactions/method-call.mjs +1 -1
- package/transactions/method-call.mjs.map +1 -1
- package/transactions/payment.d.ts +1 -1
- package/transactions/payment.js.map +1 -1
- package/transactions/payment.mjs.map +1 -1
- package/types/account-manager.d.ts +11 -442
- package/types/account-manager.js +5 -616
- package/types/account-manager.js.map +1 -1
- package/types/account-manager.mjs +5 -614
- package/types/account-manager.mjs.map +1 -1
- package/types/account.d.ts +8 -150
- package/types/account.js +3 -4
- package/types/account.js.map +1 -1
- package/types/account.mjs +4 -4
- package/types/account.mjs.map +1 -1
- package/types/algorand-client-transaction-creator.d.ts +5 -1098
- package/types/algorand-client-transaction-creator.js +3 -729
- package/types/algorand-client-transaction-creator.js.map +1 -1
- package/types/algorand-client-transaction-creator.mjs +4 -729
- package/types/algorand-client-transaction-creator.mjs.map +1 -1
- package/types/algorand-client-transaction-sender.d.ts +5 -1312
- package/types/algorand-client-transaction-sender.js +3 -927
- package/types/algorand-client-transaction-sender.js.map +1 -1
- package/types/algorand-client-transaction-sender.mjs +3 -926
- package/types/algorand-client-transaction-sender.mjs.map +1 -1
- package/types/algorand-client.d.ts +5 -241
- package/types/algorand-client.js +3 -319
- package/types/algorand-client.js.map +1 -1
- package/types/algorand-client.mjs +3 -319
- package/types/algorand-client.mjs.map +1 -1
- package/types/amount.d.ts +6 -45
- package/types/amount.js +3 -79
- package/types/amount.js.map +1 -1
- package/types/amount.mjs +4 -79
- package/types/amount.mjs.map +1 -1
- package/types/app-client.d.ts +75 -2125
- package/types/app-client.js +3 -903
- package/types/app-client.js.map +1 -1
- package/types/app-client.mjs +3 -902
- package/types/app-client.mjs.map +1 -1
- package/types/app-deployer.d.ts +21 -161
- package/types/app-deployer.js +3 -347
- package/types/app-deployer.js.map +1 -1
- package/types/app-deployer.mjs +3 -347
- package/types/app-deployer.mjs.map +1 -1
- package/types/app-factory.d.ts +21 -960
- package/types/app-factory.js +3 -442
- package/types/app-factory.js.map +1 -1
- package/types/app-factory.mjs +3 -442
- package/types/app-factory.mjs.map +1 -1
- package/types/app-manager.d.ts +15 -318
- package/types/app-manager.js +3 -462
- package/types/app-manager.js.map +1 -1
- package/types/app-manager.mjs +3 -462
- package/types/app-manager.mjs.map +1 -1
- package/types/app-spec.d.ts +39 -198
- package/types/app-spec.js +3 -131
- package/types/app-spec.js.map +1 -1
- package/types/app-spec.mjs +3 -131
- package/types/app-spec.mjs.map +1 -1
- package/types/app.d.ts +62 -247
- package/types/app.js +15 -37
- package/types/app.js.map +1 -1
- package/types/app.mjs +16 -37
- package/types/app.mjs.map +1 -1
- package/types/asset-manager.d.ts +9 -207
- package/types/asset-manager.js +3 -160
- package/types/asset-manager.js.map +1 -1
- package/types/asset-manager.mjs +3 -160
- package/types/asset-manager.mjs.map +1 -1
- package/types/async-event-emitter.d.ts +7 -11
- package/types/async-event-emitter.js +3 -32
- package/types/async-event-emitter.js.map +1 -1
- package/types/async-event-emitter.mjs +4 -32
- package/types/async-event-emitter.mjs.map +1 -1
- package/types/client-manager.d.ts +27 -470
- package/types/client-manager.js +3 -610
- package/types/client-manager.js.map +1 -1
- package/types/client-manager.mjs +3 -610
- package/types/client-manager.mjs.map +1 -1
- package/types/composer.d.ts +79 -943
- package/types/composer.js +3 -1578
- package/types/composer.js.map +1 -1
- package/types/composer.mjs +3 -1577
- package/types/composer.mjs.map +1 -1
- package/types/config.d.ts +7 -52
- package/types/config.js +3 -74
- package/types/config.js.map +1 -1
- package/types/config.mjs +3 -74
- package/types/config.mjs.map +1 -1
- package/types/debugging.d.ts +12 -37
- package/types/debugging.js +11 -10
- package/types/debugging.js.map +1 -1
- package/types/debugging.mjs +12 -10
- package/types/debugging.mjs.map +1 -1
- package/types/dispenser-client.d.ts +11 -85
- package/types/dispenser-client.js +3 -121
- package/types/dispenser-client.js.map +1 -1
- package/types/dispenser-client.mjs +3 -121
- package/types/dispenser-client.mjs.map +1 -1
- package/types/expand.d.ts +8 -2
- package/types/indexer.d.ts +16 -36
- package/types/indexer.js +7 -30
- package/types/indexer.js.map +1 -1
- package/types/indexer.mjs +8 -30
- package/types/indexer.mjs.map +1 -1
- package/types/instance-of.d.ts +4 -4
- package/types/kmd-account-manager.d.ts +5 -69
- package/types/kmd-account-manager.js +3 -161
- package/types/kmd-account-manager.js.map +1 -1
- package/types/kmd-account-manager.mjs +3 -159
- package/types/kmd-account-manager.mjs.map +1 -1
- package/types/lifecycle-events.d.ts +7 -9
- package/types/lifecycle-events.js +3 -5
- package/types/lifecycle-events.js.map +1 -1
- package/types/lifecycle-events.mjs +4 -5
- package/types/lifecycle-events.mjs.map +1 -1
- package/types/logging.d.ts +14 -9
- package/types/logging.js +11 -37
- package/types/logging.js.map +1 -1
- package/types/logging.mjs +12 -37
- package/types/logging.mjs.map +1 -1
- package/types/logic-error.d.ts +8 -35
- package/types/logic-error.js +3 -48
- package/types/logic-error.js.map +1 -1
- package/types/logic-error.mjs +4 -48
- package/types/logic-error.mjs.map +1 -1
- package/types/network-client.d.ts +10 -39
- package/types/network-client.js +3 -8
- package/types/network-client.js.map +1 -1
- package/types/network-client.mjs +4 -8
- package/types/network-client.mjs.map +1 -1
- package/types/testing.d.ts +13 -151
- package/types/transaction.d.ts +33 -128
- package/updatable-config.d.ts +57 -0
- package/updatable-config.js +80 -0
- package/updatable-config.js.map +1 -0
- package/updatable-config.mjs +80 -0
- package/updatable-config.mjs.map +1 -0
- package/util.js +1 -1
- package/util.js.map +1 -1
- package/util.mjs +1 -1
- package/util.mjs.map +1 -1
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import { asJson } from "./util.mjs";
|
|
2
|
+
|
|
3
|
+
//#region src/dispenser-client.ts
|
|
4
|
+
const DISPENSER_BASE_URL = "https://api.dispenser.algorandfoundation.tools";
|
|
5
|
+
const DEFAULT_DISPENSER_REQUEST_TIMEOUT = 15;
|
|
6
|
+
const DISPENSER_ACCESS_TOKEN_KEY = "ALGOKIT_DISPENSER_ACCESS_TOKEN";
|
|
7
|
+
var DispenserAssetName = /* @__PURE__ */ function(DispenserAssetName$1) {
|
|
8
|
+
DispenserAssetName$1[DispenserAssetName$1["Algo"] = 0] = "Algo";
|
|
9
|
+
return DispenserAssetName$1;
|
|
10
|
+
}(DispenserAssetName || {});
|
|
11
|
+
const dispenserAssets = { [DispenserAssetName.Algo]: {
|
|
12
|
+
assetId: 0,
|
|
13
|
+
decimals: 6,
|
|
14
|
+
description: "Algo"
|
|
15
|
+
} };
|
|
16
|
+
/**
|
|
17
|
+
* `TestNetDispenserApiClient` is a class that provides methods to interact with the [Algorand TestNet Dispenser API](https://github.com/algorandfoundation/algokit/blob/main/docs/testnet_api.md).
|
|
18
|
+
* It allows you to fund an address with Algo, refund a transaction, and get the funding limit for the Algo asset.
|
|
19
|
+
*
|
|
20
|
+
* The class requires an authentication token and a request timeout to be initialized. The authentication token can be provided
|
|
21
|
+
* either directly as a parameter or through an `ALGOKIT_DISPENSER_ACCESS_TOKEN` environment variable. If neither is provided, an error is thrown.
|
|
22
|
+
*
|
|
23
|
+
* The request timeout can be provided as a parameter. If not provided, a default value is used.
|
|
24
|
+
*
|
|
25
|
+
* @property {string} authToken - The authentication token used for API requests.
|
|
26
|
+
* @property {number} requestTimeout - The timeout for API requests, in seconds.
|
|
27
|
+
*
|
|
28
|
+
* @method fund - Sends a funding request to the dispenser API to fund the specified address with the given amount of Algo.
|
|
29
|
+
* @method refund - Sends a refund request to the dispenser API for the specified refundTxnId.
|
|
30
|
+
* @method limit - Sends a request to the dispenser API to get the funding limit for the Algo asset.
|
|
31
|
+
*
|
|
32
|
+
* @example
|
|
33
|
+
* ```typescript
|
|
34
|
+
* const client = new TestNetDispenserApiClient({ authToken: 'your_auth_token', requestTimeout: 30 });
|
|
35
|
+
* const fundResponse = await client.fund('your_address', 100);
|
|
36
|
+
* const limitResponse = await client.getLimit();
|
|
37
|
+
* await client.refund('your_transaction_id');
|
|
38
|
+
* ```
|
|
39
|
+
*
|
|
40
|
+
* @throws {Error} If neither the environment variable 'ALGOKIT_DISPENSER_ACCESS_TOKEN' nor the authToken parameter were provided.
|
|
41
|
+
*/
|
|
42
|
+
var TestNetDispenserApiClient = class {
|
|
43
|
+
_authToken;
|
|
44
|
+
_requestTimeout;
|
|
45
|
+
constructor(params) {
|
|
46
|
+
const authTokenFromEnv = process?.env?.[DISPENSER_ACCESS_TOKEN_KEY];
|
|
47
|
+
if (params?.authToken) this._authToken = params.authToken;
|
|
48
|
+
else if (authTokenFromEnv) this._authToken = authTokenFromEnv;
|
|
49
|
+
else throw new Error(`Can't init AlgoKit TestNet Dispenser API client because neither environment variable ${DISPENSER_ACCESS_TOKEN_KEY} or the authToken were provided.`);
|
|
50
|
+
this._requestTimeout = params?.requestTimeout || DEFAULT_DISPENSER_REQUEST_TIMEOUT;
|
|
51
|
+
}
|
|
52
|
+
get authToken() {
|
|
53
|
+
return this._authToken;
|
|
54
|
+
}
|
|
55
|
+
get requestTimeout() {
|
|
56
|
+
return this._requestTimeout;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Processes a dispenser API request.
|
|
60
|
+
*
|
|
61
|
+
* @param authToken - The authentication token.
|
|
62
|
+
* @param urlSuffix - The URL suffix for the API request.
|
|
63
|
+
* @param body - The request body.
|
|
64
|
+
* @param method - The HTTP method.
|
|
65
|
+
*
|
|
66
|
+
* @returns The API response.
|
|
67
|
+
*/
|
|
68
|
+
async processDispenserRequest(authToken, urlSuffix, body = null, method = "POST") {
|
|
69
|
+
const requestArgs = {
|
|
70
|
+
method,
|
|
71
|
+
headers: { Authorization: `Bearer ${authToken}` },
|
|
72
|
+
signal: AbortSignal.timeout(this.requestTimeout * 1e3)
|
|
73
|
+
};
|
|
74
|
+
if (body) requestArgs.body = asJson(body);
|
|
75
|
+
const response = await fetch(`${DISPENSER_BASE_URL}/${urlSuffix}`, requestArgs);
|
|
76
|
+
if (!response.ok) {
|
|
77
|
+
let error_message = `Error processing dispenser API request: ${response.status}`;
|
|
78
|
+
let error_response = null;
|
|
79
|
+
try {
|
|
80
|
+
error_response = await response.json();
|
|
81
|
+
} catch {}
|
|
82
|
+
if (error_response && error_response.code) error_message = error_response.code;
|
|
83
|
+
else if (response.status === 400) error_message = (await response.json()).message;
|
|
84
|
+
throw new Error(error_message);
|
|
85
|
+
}
|
|
86
|
+
return response;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Sends a funding request to the dispenser API to fund the specified address with the given amount of Algo.
|
|
90
|
+
*
|
|
91
|
+
* @param address - The address to fund.
|
|
92
|
+
* @param amount - The amount of µAlgo to fund.
|
|
93
|
+
*
|
|
94
|
+
* @returns DispenserFundResponse: An object containing the transaction ID and funded amount.
|
|
95
|
+
*/
|
|
96
|
+
async fund(address, amount) {
|
|
97
|
+
const content = await (await this.processDispenserRequest(this.authToken, `fund/${dispenserAssets[DispenserAssetName.Algo].assetId}`, {
|
|
98
|
+
receiver: typeof address === "string" ? address : address.toString(),
|
|
99
|
+
amount: Number(amount),
|
|
100
|
+
assetID: dispenserAssets[DispenserAssetName.Algo].assetId
|
|
101
|
+
}, "POST")).json();
|
|
102
|
+
return {
|
|
103
|
+
txId: content.txID,
|
|
104
|
+
amount: content.amount
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Sends a refund request to the dispenser API for the specified refundTxnId.
|
|
109
|
+
*
|
|
110
|
+
* @param refundTxnId - The transaction ID to refund.
|
|
111
|
+
*/
|
|
112
|
+
async refund(refundTxnId) {
|
|
113
|
+
await this.processDispenserRequest(this.authToken, "refund", { refundTransactionID: refundTxnId }, "POST");
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Sends a request to the dispenser API to get the funding limit for the Algo asset.
|
|
117
|
+
*
|
|
118
|
+
* @returns DispenserLimitResponse: An object containing the funding limit amount.
|
|
119
|
+
*/
|
|
120
|
+
async getLimit() {
|
|
121
|
+
return { amount: (await (await this.processDispenserRequest(this.authToken, `fund/${dispenserAssets[DispenserAssetName.Algo].assetId}/limit`, null, "GET")).json()).amount };
|
|
122
|
+
}
|
|
123
|
+
};
|
|
124
|
+
|
|
125
|
+
//#endregion
|
|
126
|
+
export { TestNetDispenserApiClient };
|
|
127
|
+
//# sourceMappingURL=dispenser-client.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dispenser-client.mjs","names":["requestArgs: RequestInit"],"sources":["../src/dispenser-client.ts"],"sourcesContent":["import { Address } from '@algorandfoundation/algokit-common'\nimport { asJson } from './util'\n\nconst DISPENSER_BASE_URL = 'https://api.dispenser.algorandfoundation.tools'\nconst DEFAULT_DISPENSER_REQUEST_TIMEOUT = 15\nconst DISPENSER_ACCESS_TOKEN_KEY = 'ALGOKIT_DISPENSER_ACCESS_TOKEN'\n\ninterface ErrorResponse {\n code?: string\n}\n\nenum DispenserAssetName {\n Algo = 0,\n}\n\nconst dispenserAssets = {\n [DispenserAssetName.Algo]: {\n assetId: 0,\n decimals: 6,\n description: 'Algo',\n },\n}\n\n/** The TestNet Dispenser API response when funding. */\nexport interface DispenserFundResponse {\n /** The ID of the transaction that was issued to fund the account. */\n txId: string\n /** The number of µAlgo that was funded. */\n amount: number\n}\n\n/** The TestNet Dispenser API response when getting the current limit. */\nexport interface DispenserLimitResponse {\n /** The limit, in µAlgo, that you can currently fund. */\n amount: number\n}\n\n/** The parameters to construct a TestNet Dispenser API client. */\nexport interface TestNetDispenserApiClientParams {\n /** The API auth token */\n authToken: string\n /** The request timeout in seconds */\n requestTimeout?: number\n}\n\n/**\n * `TestNetDispenserApiClient` is a class that provides methods to interact with the [Algorand TestNet Dispenser API](https://github.com/algorandfoundation/algokit/blob/main/docs/testnet_api.md).\n * It allows you to fund an address with Algo, refund a transaction, and get the funding limit for the Algo asset.\n *\n * The class requires an authentication token and a request timeout to be initialized. The authentication token can be provided\n * either directly as a parameter or through an `ALGOKIT_DISPENSER_ACCESS_TOKEN` environment variable. If neither is provided, an error is thrown.\n *\n * The request timeout can be provided as a parameter. If not provided, a default value is used.\n *\n * @property {string} authToken - The authentication token used for API requests.\n * @property {number} requestTimeout - The timeout for API requests, in seconds.\n *\n * @method fund - Sends a funding request to the dispenser API to fund the specified address with the given amount of Algo.\n * @method refund - Sends a refund request to the dispenser API for the specified refundTxnId.\n * @method limit - Sends a request to the dispenser API to get the funding limit for the Algo asset.\n *\n * @example\n * ```typescript\n * const client = new TestNetDispenserApiClient({ authToken: 'your_auth_token', requestTimeout: 30 });\n * const fundResponse = await client.fund('your_address', 100);\n * const limitResponse = await client.getLimit();\n * await client.refund('your_transaction_id');\n * ```\n *\n * @throws {Error} If neither the environment variable 'ALGOKIT_DISPENSER_ACCESS_TOKEN' nor the authToken parameter were provided.\n */\nexport class TestNetDispenserApiClient {\n private _authToken: string\n private _requestTimeout: number\n\n constructor(params?: TestNetDispenserApiClientParams) {\n const authTokenFromEnv = process?.env?.[DISPENSER_ACCESS_TOKEN_KEY]\n\n if (params?.authToken) {\n this._authToken = params.authToken\n } else if (authTokenFromEnv) {\n this._authToken = authTokenFromEnv\n } else {\n throw new Error(\n `Can't init AlgoKit TestNet Dispenser API client because neither environment variable ${DISPENSER_ACCESS_TOKEN_KEY} or the authToken were provided.`,\n )\n }\n\n this._requestTimeout = params?.requestTimeout || DEFAULT_DISPENSER_REQUEST_TIMEOUT\n }\n\n get authToken(): string {\n return this._authToken\n }\n\n get requestTimeout(): number {\n return this._requestTimeout\n }\n\n /**\n * Processes a dispenser API request.\n *\n * @param authToken - The authentication token.\n * @param urlSuffix - The URL suffix for the API request.\n * @param body - The request body.\n * @param method - The HTTP method.\n *\n * @returns The API response.\n */\n private async processDispenserRequest(\n authToken: string,\n urlSuffix: string,\n body: Record<string, string | number> | null = null,\n method = 'POST',\n ): Promise<Response> {\n const headers = { Authorization: `Bearer ${authToken}` }\n\n const requestArgs: RequestInit = {\n method: method,\n headers: headers,\n signal: AbortSignal.timeout(this.requestTimeout * 1000),\n }\n\n if (body) {\n requestArgs.body = asJson(body)\n }\n\n const response = await fetch(`${DISPENSER_BASE_URL}/${urlSuffix}`, requestArgs)\n if (!response.ok) {\n let error_message = `Error processing dispenser API request: ${response.status}`\n let error_response = null\n try {\n error_response = await response.json()\n } catch {\n // suppress exception\n }\n\n if (error_response && (error_response as ErrorResponse).code) {\n error_message = (error_response as ErrorResponse).code!\n } else if (response.status === 400) {\n const errorResponse = (await response.json()) as { message: string }\n error_message = errorResponse.message\n }\n\n throw new Error(error_message)\n }\n return response\n }\n\n /**\n * Sends a funding request to the dispenser API to fund the specified address with the given amount of Algo.\n *\n * @param address - The address to fund.\n * @param amount - The amount of µAlgo to fund.\n *\n * @returns DispenserFundResponse: An object containing the transaction ID and funded amount.\n */\n async fund(address: string | Address, amount: number | bigint): Promise<DispenserFundResponse> {\n const response = await this.processDispenserRequest(\n this.authToken,\n `fund/${dispenserAssets[DispenserAssetName.Algo].assetId}`,\n {\n receiver: typeof address === 'string' ? address : address.toString(),\n amount: Number(amount),\n assetID: dispenserAssets[DispenserAssetName.Algo].assetId,\n },\n 'POST',\n )\n\n const content = (await response.json()) as { txID: string; amount: number }\n return { txId: content.txID, amount: content.amount }\n }\n\n /**\n * Sends a refund request to the dispenser API for the specified refundTxnId.\n *\n * @param refundTxnId - The transaction ID to refund.\n */\n async refund(refundTxnId: string): Promise<void> {\n await this.processDispenserRequest(this.authToken, 'refund', { refundTransactionID: refundTxnId }, 'POST')\n }\n\n /**\n * Sends a request to the dispenser API to get the funding limit for the Algo asset.\n *\n * @returns DispenserLimitResponse: An object containing the funding limit amount.\n */\n async getLimit(): Promise<DispenserLimitResponse> {\n const response = await this.processDispenserRequest(\n this.authToken,\n `fund/${dispenserAssets[DispenserAssetName.Algo].assetId}/limit`,\n null,\n 'GET',\n )\n const content = (await response.json()) as { amount: number }\n\n return { amount: content.amount }\n }\n}\n"],"mappings":";;;AAGA,MAAM,qBAAqB;AAC3B,MAAM,oCAAoC;AAC1C,MAAM,6BAA6B;AAMnC,IAAK,oEAAL;AACE;;EADG;AAIL,MAAM,kBAAkB,GACrB,mBAAmB,OAAO;CACzB,SAAS;CACT,UAAU;CACV,aAAa;CACd,EACF;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkDD,IAAa,4BAAb,MAAuC;CACrC,AAAQ;CACR,AAAQ;CAER,YAAY,QAA0C;EACpD,MAAM,mBAAmB,SAAS,MAAM;AAExC,MAAI,QAAQ,UACV,MAAK,aAAa,OAAO;WAChB,iBACT,MAAK,aAAa;MAElB,OAAM,IAAI,MACR,wFAAwF,2BAA2B,kCACpH;AAGH,OAAK,kBAAkB,QAAQ,kBAAkB;;CAGnD,IAAI,YAAoB;AACtB,SAAO,KAAK;;CAGd,IAAI,iBAAyB;AAC3B,SAAO,KAAK;;;;;;;;;;;;CAad,MAAc,wBACZ,WACA,WACA,OAA+C,MAC/C,SAAS,QACU;EAGnB,MAAMA,cAA2B;GACvB;GACR,SAJc,EAAE,eAAe,UAAU,aAAa;GAKtD,QAAQ,YAAY,QAAQ,KAAK,iBAAiB,IAAK;GACxD;AAED,MAAI,KACF,aAAY,OAAO,OAAO,KAAK;EAGjC,MAAM,WAAW,MAAM,MAAM,GAAG,mBAAmB,GAAG,aAAa,YAAY;AAC/E,MAAI,CAAC,SAAS,IAAI;GAChB,IAAI,gBAAgB,2CAA2C,SAAS;GACxE,IAAI,iBAAiB;AACrB,OAAI;AACF,qBAAiB,MAAM,SAAS,MAAM;WAChC;AAIR,OAAI,kBAAmB,eAAiC,KACtD,iBAAiB,eAAiC;YACzC,SAAS,WAAW,IAE7B,kBADuB,MAAM,SAAS,MAAM,EACd;AAGhC,SAAM,IAAI,MAAM,cAAc;;AAEhC,SAAO;;;;;;;;;;CAWT,MAAM,KAAK,SAA2B,QAAyD;EAY7F,MAAM,UAAW,OAXA,MAAM,KAAK,wBAC1B,KAAK,WACL,QAAQ,gBAAgB,mBAAmB,MAAM,WACjD;GACE,UAAU,OAAO,YAAY,WAAW,UAAU,QAAQ,UAAU;GACpE,QAAQ,OAAO,OAAO;GACtB,SAAS,gBAAgB,mBAAmB,MAAM;GACnD,EACD,OACD,EAE+B,MAAM;AACtC,SAAO;GAAE,MAAM,QAAQ;GAAM,QAAQ,QAAQ;GAAQ;;;;;;;CAQvD,MAAM,OAAO,aAAoC;AAC/C,QAAM,KAAK,wBAAwB,KAAK,WAAW,UAAU,EAAE,qBAAqB,aAAa,EAAE,OAAO;;;;;;;CAQ5G,MAAM,WAA4C;AAShD,SAAO,EAAE,SAFQ,OANA,MAAM,KAAK,wBAC1B,KAAK,WACL,QAAQ,gBAAgB,mBAAmB,MAAM,QAAQ,SACzD,MACA,MACD,EAC+B,MAAM,EAEb,QAAQ"}
|
package/expand.d.ts
ADDED
package/expand.js
ADDED
|
File without changes
|
package/expand.mjs
ADDED
|
File without changes
|
package/index.d.ts
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { ALGORAND_ZERO_ADDRESS_STRING, Address, Addressable, ReadableAddress, decodeAddress, encodeAddress, getAddress, getApplicationAddress, getOptionalAddress } from "./packages/common/src/address.js";
|
|
2
|
-
import { ALGORAND_MIN_TX_FEE, algo, algos, microAlgo, microAlgos, transactionFees } from "./amount.js";
|
|
2
|
+
import { ALGORAND_MIN_TX_FEE, AlgoAmount, algo, algos, microAlgo, microAlgos, transactionFees } from "./amount.js";
|
|
3
3
|
import { performTransactionComposerSimulate } from "./transaction/perform-transaction-composer-simulate.js";
|
|
4
|
+
import { AdditionalTransactionComposerContext, Arc2TransactionNote, ConfirmedTransactionResult, ConfirmedTransactionResults, SendParams, SendSingleTransactionResult, SendTransactionComposerResults, SendTransactionFrom, SendTransactionParams, SendTransactionResult, SendTransactionResults, TransactionComposerToSend, TransactionGroupToSend, TransactionNote, TransactionNoteData, TransactionToSign } from "./transaction/types.js";
|
|
4
5
|
import { TransactionWithSigner, encodeLease, populateAppCallResources, prepareGroupForSending, sendTransactionComposer, waitForConfirmation } from "./transaction/transaction.js";
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
6
|
+
import { AlgorandClient } from "./algorand-client.js";
|
|
7
|
+
import { ALGOKIT_DIR, AVMTracesEventData, DEFAULT_MAX_SEARCH_DEPTH, SOURCES_DIR, TEAL_FILE_EXT, TEAL_SOURCEMAP_EXT, TealSourceDebugEventData, TealSourcesDebugEventData } from "./debugging.js";
|
|
8
|
+
import { EventDataMap, EventType } from "./lifecycle-events.js";
|
|
7
9
|
import { Config } from "./config.js";
|
|
8
|
-
|
|
9
|
-
export { ALGOKIT_DIR, ALGORAND_MIN_TX_FEE, ALGORAND_ZERO_ADDRESS_STRING, AVMTracesEventData, Address, type Addressable, AlgorandClient, Config, DEFAULT_MAX_SEARCH_DEPTH, EventDataMap, EventType, type ReadableAddress, SOURCES_DIR, TEAL_FILE_EXT, TEAL_SOURCEMAP_EXT, TealSourceDebugEventData, TealSourcesDebugEventData, TransactionWithSigner, algo, algos, decodeAddress, encodeAddress, encodeLease, getAddress, getApplicationAddress, getOptionalAddress, microAlgo, microAlgos, performTransactionComposerSimulate, populateAppCallResources, prepareGroupForSending, sendTransactionComposer, transactionFees, waitForConfirmation };
|
|
10
|
+
export { ALGOKIT_DIR, ALGORAND_MIN_TX_FEE, ALGORAND_ZERO_ADDRESS_STRING, AVMTracesEventData, AdditionalTransactionComposerContext, Address, type Addressable, AlgoAmount, AlgorandClient, Arc2TransactionNote, Config, ConfirmedTransactionResult, ConfirmedTransactionResults, DEFAULT_MAX_SEARCH_DEPTH, EventDataMap, EventType, type ReadableAddress, SOURCES_DIR, SendParams, SendSingleTransactionResult, SendTransactionComposerResults, SendTransactionFrom, SendTransactionParams, SendTransactionResult, SendTransactionResults, TEAL_FILE_EXT, TEAL_SOURCEMAP_EXT, TealSourceDebugEventData, TealSourcesDebugEventData, TransactionComposerToSend, TransactionGroupToSend, TransactionNote, TransactionNoteData, TransactionToSign, TransactionWithSigner, algo, algos, decodeAddress, encodeAddress, encodeLease, getAddress, getApplicationAddress, getOptionalAddress, microAlgo, microAlgos, performTransactionComposerSimulate, populateAppCallResources, prepareGroupForSending, sendTransactionComposer, transactionFees, waitForConfirmation };
|
package/index.js
CHANGED
|
@@ -3,14 +3,15 @@ const require_amount = require('./amount.js');
|
|
|
3
3
|
const require_config = require('./config.js');
|
|
4
4
|
const require_perform_transaction_composer_simulate = require('./transaction/perform-transaction-composer-simulate.js');
|
|
5
5
|
const require_transaction = require('./transaction/transaction.js');
|
|
6
|
-
const require_lifecycle_events = require('./
|
|
7
|
-
const require_algorand_client = require('./
|
|
8
|
-
const require_debugging = require('./
|
|
6
|
+
const require_lifecycle_events = require('./lifecycle-events.js');
|
|
7
|
+
const require_algorand_client = require('./algorand-client.js');
|
|
8
|
+
const require_debugging = require('./debugging.js');
|
|
9
9
|
|
|
10
10
|
exports.ALGOKIT_DIR = require_debugging.ALGOKIT_DIR;
|
|
11
11
|
exports.ALGORAND_MIN_TX_FEE = require_amount.ALGORAND_MIN_TX_FEE;
|
|
12
12
|
exports.ALGORAND_ZERO_ADDRESS_STRING = require_address.ALGORAND_ZERO_ADDRESS_STRING;
|
|
13
13
|
exports.Address = require_address.Address;
|
|
14
|
+
exports.AlgoAmount = require_amount.AlgoAmount;
|
|
14
15
|
exports.AlgorandClient = require_algorand_client.AlgorandClient;
|
|
15
16
|
exports.Config = require_config.Config;
|
|
16
17
|
exports.DEFAULT_MAX_SEARCH_DEPTH = require_debugging.DEFAULT_MAX_SEARCH_DEPTH;
|
package/index.mjs
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { ALGORAND_ZERO_ADDRESS_STRING, Address, decodeAddress, encodeAddress, getAddress, getApplicationAddress, getOptionalAddress } from "./packages/common/src/address.mjs";
|
|
2
|
-
import { ALGORAND_MIN_TX_FEE, algo, algos, microAlgo, microAlgos, transactionFees } from "./amount.mjs";
|
|
2
|
+
import { ALGORAND_MIN_TX_FEE, AlgoAmount, algo, algos, microAlgo, microAlgos, transactionFees } from "./amount.mjs";
|
|
3
3
|
import { Config } from "./config.mjs";
|
|
4
4
|
import { performTransactionComposerSimulate } from "./transaction/perform-transaction-composer-simulate.mjs";
|
|
5
5
|
import { encodeLease, populateAppCallResources, prepareGroupForSending, sendTransactionComposer, waitForConfirmation } from "./transaction/transaction.mjs";
|
|
6
|
-
import { EventType } from "./
|
|
7
|
-
import { AlgorandClient } from "./
|
|
8
|
-
import { ALGOKIT_DIR, DEFAULT_MAX_SEARCH_DEPTH, SOURCES_DIR, TEAL_FILE_EXT, TEAL_SOURCEMAP_EXT } from "./
|
|
6
|
+
import { EventType } from "./lifecycle-events.mjs";
|
|
7
|
+
import { AlgorandClient } from "./algorand-client.mjs";
|
|
8
|
+
import { ALGOKIT_DIR, DEFAULT_MAX_SEARCH_DEPTH, SOURCES_DIR, TEAL_FILE_EXT, TEAL_SOURCEMAP_EXT } from "./debugging.mjs";
|
|
9
9
|
|
|
10
|
-
export { ALGOKIT_DIR, ALGORAND_MIN_TX_FEE, ALGORAND_ZERO_ADDRESS_STRING, Address, AlgorandClient, Config, DEFAULT_MAX_SEARCH_DEPTH, EventType, SOURCES_DIR, TEAL_FILE_EXT, TEAL_SOURCEMAP_EXT, algo, algos, decodeAddress, encodeAddress, encodeLease, getAddress, getApplicationAddress, getOptionalAddress, microAlgo, microAlgos, performTransactionComposerSimulate, populateAppCallResources, prepareGroupForSending, sendTransactionComposer, transactionFees, waitForConfirmation };
|
|
10
|
+
export { ALGOKIT_DIR, ALGORAND_MIN_TX_FEE, ALGORAND_ZERO_ADDRESS_STRING, Address, AlgoAmount, AlgorandClient, Config, DEFAULT_MAX_SEARCH_DEPTH, EventType, SOURCES_DIR, TEAL_FILE_EXT, TEAL_SOURCEMAP_EXT, algo, algos, decodeAddress, encodeAddress, encodeLease, getAddress, getApplicationAddress, getOptionalAddress, microAlgo, microAlgos, performTransactionComposerSimulate, populateAppCallResources, prepareGroupForSending, sendTransactionComposer, transactionFees, waitForConfirmation };
|
|
@@ -3,7 +3,7 @@ import { Application } from "../packages/indexer_client/src/models/application.j
|
|
|
3
3
|
import { MiniAssetHolding } from "../packages/indexer_client/src/models/mini-asset-holding.js";
|
|
4
4
|
import { TransactionsResponse } from "../packages/indexer_client/src/models/transactions-response.js";
|
|
5
5
|
import { IndexerClient } from "../packages/indexer_client/src/client.js";
|
|
6
|
-
import { LookupAssetHoldingsOptions } from "../
|
|
6
|
+
import { LookupAssetHoldingsOptions } from "../indexer.js";
|
|
7
7
|
|
|
8
8
|
//#region src/indexer-client/indexer-lookup.d.ts
|
|
9
9
|
type SearchForTransactionsCriteria = Omit<NonNullable<Parameters<IndexerClient['searchForTransactions']>[0]>, 'limit' | 'next'>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"indexer-lookup.js","names":["nextToken: string | undefined"],"sources":["../../src/indexer-client/indexer-lookup.ts"],"sourcesContent":["import { Address } from '@algorandfoundation/algokit-common'\nimport {\n Application,\n ApplicationsResponse,\n AssetBalancesResponse,\n IndexerClient,\n MiniAssetHolding,\n TransactionsResponse,\n} from '@algorandfoundation/algokit-indexer-client'\nimport { LookupAssetHoldingsOptions } from '../
|
|
1
|
+
{"version":3,"file":"indexer-lookup.js","names":["nextToken: string | undefined"],"sources":["../../src/indexer-client/indexer-lookup.ts"],"sourcesContent":["import { Address } from '@algorandfoundation/algokit-common'\nimport {\n Application,\n ApplicationsResponse,\n AssetBalancesResponse,\n IndexerClient,\n MiniAssetHolding,\n TransactionsResponse,\n} from '@algorandfoundation/algokit-indexer-client'\nimport { LookupAssetHoldingsOptions } from '../indexer'\nexport type SearchForTransactionsCriteria = Omit<NonNullable<Parameters<IndexerClient['searchForTransactions']>[0]>, 'limit' | 'next'>\n\nconst DEFAULT_INDEXER_MAX_API_RESOURCES_PER_ACCOUNT = 1000 //MaxAPIResourcesPerAccount: This is the default maximum, though may be provider specific\n\n/**\n * Looks up applications that were created by the given address; will automatically paginate through all data.\n * @param indexer An indexer instance\n * @param address The address of the creator to look up\n * @param getAll Whether or not to include deleted applications. Default true.\n * @param paginationLimit The number of records to return per paginated request, default 1000\n * @returns The list of application results\n */\nexport async function lookupAccountCreatedApplicationByAddress(\n indexer: IndexerClient,\n address: string | Address,\n getAll: boolean = true,\n paginationLimit?: number,\n): Promise<Application[]> {\n return await executePaginatedRequest(\n (response: ApplicationsResponse | { message: string }) => {\n if ('message' in response) {\n throw { status: 404, ...response }\n }\n return response.applications\n },\n (nextToken) => {\n return indexer.lookupAccountCreatedApplications(address, {\n includeAll: getAll,\n limit: paginationLimit ?? DEFAULT_INDEXER_MAX_API_RESOURCES_PER_ACCOUNT,\n ...(nextToken && { next: nextToken }),\n })\n },\n )\n}\n\n/**\n * Looks up asset holdings for the given asset; will automatically paginate through all data.\n * @param indexer An indexer instance\n * @param assetId The ID of the asset to look up holdings for\n * @param options Optional options to control the lookup\n * @param paginationLimit The number of records to return per paginated request, default 1000\n * @returns The list of application results\n */\nexport async function lookupAssetHoldings(\n indexer: IndexerClient,\n assetId: number | bigint,\n options?: LookupAssetHoldingsOptions,\n paginationLimit?: number,\n): Promise<MiniAssetHolding[]> {\n return await executePaginatedRequest(\n (response: AssetBalancesResponse | { message: string }) => {\n if ('message' in response) {\n throw { status: 404, ...response }\n }\n return response.balances\n },\n (nextToken) => {\n return indexer.lookupAssetBalances(assetId, {\n limit: paginationLimit ?? DEFAULT_INDEXER_MAX_API_RESOURCES_PER_ACCOUNT,\n ...(options?.currencyGreaterThan !== undefined && { currencyGreaterThan: options.currencyGreaterThan }),\n ...(options?.currencyLessThan !== undefined && { currencyLessThan: options.currencyLessThan }),\n ...(options?.includeAll !== undefined && { includeAll: options.includeAll }),\n ...(nextToken && { next: nextToken }),\n })\n },\n )\n}\n\n/**\n * Allows transactions to be searched for the given criteria.\n * @param indexer An indexer client\n * @param searchCriteria The criteria to search for\n * @param paginationLimit The number of records to return per paginated request, default 1000\n * @returns The search results\n */\nexport async function searchTransactions(\n indexer: IndexerClient,\n searchCriteria: SearchForTransactionsCriteria,\n paginationLimit?: number,\n): Promise<TransactionsResponse> {\n let currentRound = 0n\n const transactions = await executePaginatedRequest(\n (response: TransactionsResponse | { message: string }) => {\n if ('message' in response) {\n throw { status: 404, ...response }\n }\n if (response.currentRound > currentRound) {\n currentRound = response.currentRound\n }\n return response.transactions\n },\n (nextToken) => {\n return indexer.searchForTransactions({\n ...searchCriteria,\n limit: paginationLimit ?? DEFAULT_INDEXER_MAX_API_RESOURCES_PER_ACCOUNT,\n next: nextToken,\n })\n },\n )\n\n return {\n currentRound,\n nextToken: undefined,\n transactions,\n } satisfies TransactionsResponse\n}\n\n// https://dev.algorand.co/reference/rest-apis/indexer\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport async function executePaginatedRequest<TResult, TRequest extends Promise<any>>(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n extractItems: (response: any) => TResult[],\n buildRequest: (nextToken?: string) => TRequest,\n): Promise<TResult[]> {\n const results = []\n\n let nextToken: string | undefined = undefined\n while (true) {\n const request = buildRequest(nextToken)\n const response = await request\n const items = extractItems(response)\n if (items == null || items.length === 0) {\n break\n }\n results.push(...items)\n nextToken = response['nextToken']\n if (!nextToken) {\n break\n }\n }\n\n return results\n}\n"],"mappings":";;AAYA,MAAM,gDAAgD;;;;;;;;;AAUtD,eAAsB,yCACpB,SACA,SACA,SAAkB,MAClB,iBACwB;AACxB,QAAO,MAAM,yBACV,aAAyD;AACxD,MAAI,aAAa,SACf,OAAM;GAAE,QAAQ;GAAK,GAAG;GAAU;AAEpC,SAAO,SAAS;KAEjB,cAAc;AACb,SAAO,QAAQ,iCAAiC,SAAS;GACvD,YAAY;GACZ,OAAO,mBAAmB;GAC1B,GAAI,aAAa,EAAE,MAAM,WAAW;GACrC,CAAC;GAEL;;;;;;;;;;AAWH,eAAsB,oBACpB,SACA,SACA,SACA,iBAC6B;AAC7B,QAAO,MAAM,yBACV,aAA0D;AACzD,MAAI,aAAa,SACf,OAAM;GAAE,QAAQ;GAAK,GAAG;GAAU;AAEpC,SAAO,SAAS;KAEjB,cAAc;AACb,SAAO,QAAQ,oBAAoB,SAAS;GAC1C,OAAO,mBAAmB;GAC1B,GAAI,SAAS,wBAAwB,UAAa,EAAE,qBAAqB,QAAQ,qBAAqB;GACtG,GAAI,SAAS,qBAAqB,UAAa,EAAE,kBAAkB,QAAQ,kBAAkB;GAC7F,GAAI,SAAS,eAAe,UAAa,EAAE,YAAY,QAAQ,YAAY;GAC3E,GAAI,aAAa,EAAE,MAAM,WAAW;GACrC,CAAC;GAEL;;;;;;;;;AAUH,eAAsB,mBACpB,SACA,gBACA,iBAC+B;CAC/B,IAAI,eAAe;CACnB,MAAM,eAAe,MAAM,yBACxB,aAAyD;AACxD,MAAI,aAAa,SACf,OAAM;GAAE,QAAQ;GAAK,GAAG;GAAU;AAEpC,MAAI,SAAS,eAAe,aAC1B,gBAAe,SAAS;AAE1B,SAAO,SAAS;KAEjB,cAAc;AACb,SAAO,QAAQ,sBAAsB;GACnC,GAAG;GACH,OAAO,mBAAmB;GAC1B,MAAM;GACP,CAAC;GAEL;AAED,QAAO;EACL;EACA,WAAW;EACX;EACD;;AAKH,eAAsB,wBAEpB,cACA,cACoB;CACpB,MAAM,UAAU,EAAE;CAElB,IAAIA,YAAgC;AACpC,QAAO,MAAM;EAEX,MAAM,WAAW,MADD,aAAa,UAAU;EAEvC,MAAM,QAAQ,aAAa,SAAS;AACpC,MAAI,SAAS,QAAQ,MAAM,WAAW,EACpC;AAEF,UAAQ,KAAK,GAAG,MAAM;AACtB,cAAY,SAAS;AACrB,MAAI,CAAC,UACH;;AAIJ,QAAO"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"indexer-lookup.mjs","names":["nextToken: string | undefined"],"sources":["../../src/indexer-client/indexer-lookup.ts"],"sourcesContent":["import { Address } from '@algorandfoundation/algokit-common'\nimport {\n Application,\n ApplicationsResponse,\n AssetBalancesResponse,\n IndexerClient,\n MiniAssetHolding,\n TransactionsResponse,\n} from '@algorandfoundation/algokit-indexer-client'\nimport { LookupAssetHoldingsOptions } from '../
|
|
1
|
+
{"version":3,"file":"indexer-lookup.mjs","names":["nextToken: string | undefined"],"sources":["../../src/indexer-client/indexer-lookup.ts"],"sourcesContent":["import { Address } from '@algorandfoundation/algokit-common'\nimport {\n Application,\n ApplicationsResponse,\n AssetBalancesResponse,\n IndexerClient,\n MiniAssetHolding,\n TransactionsResponse,\n} from '@algorandfoundation/algokit-indexer-client'\nimport { LookupAssetHoldingsOptions } from '../indexer'\nexport type SearchForTransactionsCriteria = Omit<NonNullable<Parameters<IndexerClient['searchForTransactions']>[0]>, 'limit' | 'next'>\n\nconst DEFAULT_INDEXER_MAX_API_RESOURCES_PER_ACCOUNT = 1000 //MaxAPIResourcesPerAccount: This is the default maximum, though may be provider specific\n\n/**\n * Looks up applications that were created by the given address; will automatically paginate through all data.\n * @param indexer An indexer instance\n * @param address The address of the creator to look up\n * @param getAll Whether or not to include deleted applications. Default true.\n * @param paginationLimit The number of records to return per paginated request, default 1000\n * @returns The list of application results\n */\nexport async function lookupAccountCreatedApplicationByAddress(\n indexer: IndexerClient,\n address: string | Address,\n getAll: boolean = true,\n paginationLimit?: number,\n): Promise<Application[]> {\n return await executePaginatedRequest(\n (response: ApplicationsResponse | { message: string }) => {\n if ('message' in response) {\n throw { status: 404, ...response }\n }\n return response.applications\n },\n (nextToken) => {\n return indexer.lookupAccountCreatedApplications(address, {\n includeAll: getAll,\n limit: paginationLimit ?? DEFAULT_INDEXER_MAX_API_RESOURCES_PER_ACCOUNT,\n ...(nextToken && { next: nextToken }),\n })\n },\n )\n}\n\n/**\n * Looks up asset holdings for the given asset; will automatically paginate through all data.\n * @param indexer An indexer instance\n * @param assetId The ID of the asset to look up holdings for\n * @param options Optional options to control the lookup\n * @param paginationLimit The number of records to return per paginated request, default 1000\n * @returns The list of application results\n */\nexport async function lookupAssetHoldings(\n indexer: IndexerClient,\n assetId: number | bigint,\n options?: LookupAssetHoldingsOptions,\n paginationLimit?: number,\n): Promise<MiniAssetHolding[]> {\n return await executePaginatedRequest(\n (response: AssetBalancesResponse | { message: string }) => {\n if ('message' in response) {\n throw { status: 404, ...response }\n }\n return response.balances\n },\n (nextToken) => {\n return indexer.lookupAssetBalances(assetId, {\n limit: paginationLimit ?? DEFAULT_INDEXER_MAX_API_RESOURCES_PER_ACCOUNT,\n ...(options?.currencyGreaterThan !== undefined && { currencyGreaterThan: options.currencyGreaterThan }),\n ...(options?.currencyLessThan !== undefined && { currencyLessThan: options.currencyLessThan }),\n ...(options?.includeAll !== undefined && { includeAll: options.includeAll }),\n ...(nextToken && { next: nextToken }),\n })\n },\n )\n}\n\n/**\n * Allows transactions to be searched for the given criteria.\n * @param indexer An indexer client\n * @param searchCriteria The criteria to search for\n * @param paginationLimit The number of records to return per paginated request, default 1000\n * @returns The search results\n */\nexport async function searchTransactions(\n indexer: IndexerClient,\n searchCriteria: SearchForTransactionsCriteria,\n paginationLimit?: number,\n): Promise<TransactionsResponse> {\n let currentRound = 0n\n const transactions = await executePaginatedRequest(\n (response: TransactionsResponse | { message: string }) => {\n if ('message' in response) {\n throw { status: 404, ...response }\n }\n if (response.currentRound > currentRound) {\n currentRound = response.currentRound\n }\n return response.transactions\n },\n (nextToken) => {\n return indexer.searchForTransactions({\n ...searchCriteria,\n limit: paginationLimit ?? DEFAULT_INDEXER_MAX_API_RESOURCES_PER_ACCOUNT,\n next: nextToken,\n })\n },\n )\n\n return {\n currentRound,\n nextToken: undefined,\n transactions,\n } satisfies TransactionsResponse\n}\n\n// https://dev.algorand.co/reference/rest-apis/indexer\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport async function executePaginatedRequest<TResult, TRequest extends Promise<any>>(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n extractItems: (response: any) => TResult[],\n buildRequest: (nextToken?: string) => TRequest,\n): Promise<TResult[]> {\n const results = []\n\n let nextToken: string | undefined = undefined\n while (true) {\n const request = buildRequest(nextToken)\n const response = await request\n const items = extractItems(response)\n if (items == null || items.length === 0) {\n break\n }\n results.push(...items)\n nextToken = response['nextToken']\n if (!nextToken) {\n break\n }\n }\n\n return results\n}\n"],"mappings":";AAYA,MAAM,gDAAgD;;;;;;;;;AAUtD,eAAsB,yCACpB,SACA,SACA,SAAkB,MAClB,iBACwB;AACxB,QAAO,MAAM,yBACV,aAAyD;AACxD,MAAI,aAAa,SACf,OAAM;GAAE,QAAQ;GAAK,GAAG;GAAU;AAEpC,SAAO,SAAS;KAEjB,cAAc;AACb,SAAO,QAAQ,iCAAiC,SAAS;GACvD,YAAY;GACZ,OAAO,mBAAmB;GAC1B,GAAI,aAAa,EAAE,MAAM,WAAW;GACrC,CAAC;GAEL;;;;;;;;;;AAWH,eAAsB,oBACpB,SACA,SACA,SACA,iBAC6B;AAC7B,QAAO,MAAM,yBACV,aAA0D;AACzD,MAAI,aAAa,SACf,OAAM;GAAE,QAAQ;GAAK,GAAG;GAAU;AAEpC,SAAO,SAAS;KAEjB,cAAc;AACb,SAAO,QAAQ,oBAAoB,SAAS;GAC1C,OAAO,mBAAmB;GAC1B,GAAI,SAAS,wBAAwB,UAAa,EAAE,qBAAqB,QAAQ,qBAAqB;GACtG,GAAI,SAAS,qBAAqB,UAAa,EAAE,kBAAkB,QAAQ,kBAAkB;GAC7F,GAAI,SAAS,eAAe,UAAa,EAAE,YAAY,QAAQ,YAAY;GAC3E,GAAI,aAAa,EAAE,MAAM,WAAW;GACrC,CAAC;GAEL;;;;;;;;;AAUH,eAAsB,mBACpB,SACA,gBACA,iBAC+B;CAC/B,IAAI,eAAe;CACnB,MAAM,eAAe,MAAM,yBACxB,aAAyD;AACxD,MAAI,aAAa,SACf,OAAM;GAAE,QAAQ;GAAK,GAAG;GAAU;AAEpC,MAAI,SAAS,eAAe,aAC1B,gBAAe,SAAS;AAE1B,SAAO,SAAS;KAEjB,cAAc;AACb,SAAO,QAAQ,sBAAsB;GACnC,GAAG;GACH,OAAO,mBAAmB;GAC1B,MAAM;GACP,CAAC;GAEL;AAED,QAAO;EACL;EACA,WAAW;EACX;EACD;;AAKH,eAAsB,wBAEpB,cACA,cACoB;CACpB,MAAM,UAAU,EAAE;CAElB,IAAIA,YAAgC;AACpC,QAAO,MAAM;EAEX,MAAM,WAAW,MADD,aAAa,UAAU;EAEvC,MAAM,QAAQ,aAAa,SAAS;AACpC,MAAI,SAAS,QAAQ,MAAM,WAAW,EACpC;AAEF,UAAQ,KAAK,GAAG,MAAM;AACtB,cAAY,SAAS;AACrB,MAAI,CAAC,UACH;;AAIJ,QAAO"}
|
package/indexer.d.ts
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
//#region src/indexer.d.ts
|
|
2
|
+
/** Options when looking up an asset's account holdings, https://dev.algorand.co/reference/rest-apis/indexer#get-v2assetsasset-idbalances */
|
|
3
|
+
interface LookupAssetHoldingsOptions {
|
|
4
|
+
/** Results should have a decimal units amount less than this value. */
|
|
5
|
+
currencyLessThan?: number | bigint;
|
|
6
|
+
/** Results should have a decimal units amount greater than this value. */
|
|
7
|
+
currencyGreaterThan?: number | bigint;
|
|
8
|
+
/** Include all items including closed accounts and opted-out asset holdings. */
|
|
9
|
+
includeAll?: boolean;
|
|
10
|
+
}
|
|
11
|
+
/** Defines the what additional actions occur with the transaction https://dev.algorand.co/reference/rest-apis/indexer/#oncompletion */
|
|
12
|
+
declare enum ApplicationOnComplete {
|
|
13
|
+
noop = "noop",
|
|
14
|
+
optin = "optin",
|
|
15
|
+
closeout = "closeout",
|
|
16
|
+
clear = "clear",
|
|
17
|
+
update = "update",
|
|
18
|
+
delete = "delete",
|
|
19
|
+
}
|
|
20
|
+
/** Type of signature used by an account */
|
|
21
|
+
declare enum SignatureType {
|
|
22
|
+
/** Normal signature */
|
|
23
|
+
sig = "sig",
|
|
24
|
+
/** Multisig */
|
|
25
|
+
msig = "msig",
|
|
26
|
+
/** Logic signature */
|
|
27
|
+
lsig = "lsig",
|
|
28
|
+
}
|
|
29
|
+
/** Delegation status of the account */
|
|
30
|
+
declare enum AccountStatus {
|
|
31
|
+
/** Indicates that the associated account is delegated */
|
|
32
|
+
Offline = "Offline",
|
|
33
|
+
/** Indicates that the associated account used as part of the delegation pool */
|
|
34
|
+
Online = "Online",
|
|
35
|
+
/** Indicates that the associated account is neither a delegator nor a delegate */
|
|
36
|
+
NotParticipating = "NotParticipating",
|
|
37
|
+
}
|
|
38
|
+
//#endregion
|
|
39
|
+
export { AccountStatus, ApplicationOnComplete, LookupAssetHoldingsOptions, SignatureType };
|
|
40
|
+
//# sourceMappingURL=indexer.d.ts.map
|
package/indexer.js
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
|
|
2
|
+
//#region src/indexer.ts
|
|
3
|
+
/** Defines the what additional actions occur with the transaction https://dev.algorand.co/reference/rest-apis/indexer/#oncompletion */
|
|
4
|
+
let ApplicationOnComplete = /* @__PURE__ */ function(ApplicationOnComplete$1) {
|
|
5
|
+
ApplicationOnComplete$1["noop"] = "noop";
|
|
6
|
+
ApplicationOnComplete$1["optin"] = "optin";
|
|
7
|
+
ApplicationOnComplete$1["closeout"] = "closeout";
|
|
8
|
+
ApplicationOnComplete$1["clear"] = "clear";
|
|
9
|
+
ApplicationOnComplete$1["update"] = "update";
|
|
10
|
+
ApplicationOnComplete$1["delete"] = "delete";
|
|
11
|
+
return ApplicationOnComplete$1;
|
|
12
|
+
}({});
|
|
13
|
+
/** Type of signature used by an account */
|
|
14
|
+
let SignatureType = /* @__PURE__ */ function(SignatureType$1) {
|
|
15
|
+
/** Normal signature */
|
|
16
|
+
SignatureType$1["sig"] = "sig";
|
|
17
|
+
/** Multisig */
|
|
18
|
+
SignatureType$1["msig"] = "msig";
|
|
19
|
+
/** Logic signature */
|
|
20
|
+
SignatureType$1["lsig"] = "lsig";
|
|
21
|
+
return SignatureType$1;
|
|
22
|
+
}({});
|
|
23
|
+
/** Delegation status of the account */
|
|
24
|
+
let AccountStatus = /* @__PURE__ */ function(AccountStatus$1) {
|
|
25
|
+
/** Indicates that the associated account is delegated */
|
|
26
|
+
AccountStatus$1["Offline"] = "Offline";
|
|
27
|
+
/** Indicates that the associated account used as part of the delegation pool */
|
|
28
|
+
AccountStatus$1["Online"] = "Online";
|
|
29
|
+
/** Indicates that the associated account is neither a delegator nor a delegate */
|
|
30
|
+
AccountStatus$1["NotParticipating"] = "NotParticipating";
|
|
31
|
+
return AccountStatus$1;
|
|
32
|
+
}({});
|
|
33
|
+
|
|
34
|
+
//#endregion
|
|
35
|
+
exports.AccountStatus = AccountStatus;
|
|
36
|
+
exports.ApplicationOnComplete = ApplicationOnComplete;
|
|
37
|
+
exports.SignatureType = SignatureType;
|
|
38
|
+
//# sourceMappingURL=indexer.js.map
|
package/indexer.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"indexer.js","names":[],"sources":["../src/indexer.ts"],"sourcesContent":["/** Options when looking up an asset's account holdings, https://dev.algorand.co/reference/rest-apis/indexer#get-v2assetsasset-idbalances */\nexport interface LookupAssetHoldingsOptions {\n /** Results should have a decimal units amount less than this value. */\n currencyLessThan?: number | bigint\n /** Results should have a decimal units amount greater than this value. */\n currencyGreaterThan?: number | bigint\n /** Include all items including closed accounts and opted-out asset holdings. */\n includeAll?: boolean\n}\n\n/** Defines the what additional actions occur with the transaction https://dev.algorand.co/reference/rest-apis/indexer/#oncompletion */\nexport enum ApplicationOnComplete {\n noop = 'noop',\n optin = 'optin',\n closeout = 'closeout',\n clear = 'clear',\n update = 'update',\n delete = 'delete',\n}\n\n/** Type of signature used by an account */\nexport enum SignatureType {\n /** Normal signature */\n sig = 'sig',\n /** Multisig */\n msig = 'msig',\n /** Logic signature */\n lsig = 'lsig',\n}\n\n/** Delegation status of the account */\nexport enum AccountStatus {\n /** Indicates that the associated account is delegated */\n Offline = 'Offline',\n /** Indicates that the associated account used as part of the delegation pool */\n Online = 'Online',\n /** Indicates that the associated account is neither a delegator nor a delegate */\n NotParticipating = 'NotParticipating',\n}\n"],"mappings":";;;AAWA,IAAY,0EAAL;AACL;AACA;AACA;AACA;AACA;AACA;;;;AAIF,IAAY,0DAAL;;AAEL;;AAEA;;AAEA;;;;AAIF,IAAY,0DAAL;;AAEL;;AAEA;;AAEA"}
|
package/indexer.mjs
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
//#region src/indexer.ts
|
|
2
|
+
/** Defines the what additional actions occur with the transaction https://dev.algorand.co/reference/rest-apis/indexer/#oncompletion */
|
|
3
|
+
let ApplicationOnComplete = /* @__PURE__ */ function(ApplicationOnComplete$1) {
|
|
4
|
+
ApplicationOnComplete$1["noop"] = "noop";
|
|
5
|
+
ApplicationOnComplete$1["optin"] = "optin";
|
|
6
|
+
ApplicationOnComplete$1["closeout"] = "closeout";
|
|
7
|
+
ApplicationOnComplete$1["clear"] = "clear";
|
|
8
|
+
ApplicationOnComplete$1["update"] = "update";
|
|
9
|
+
ApplicationOnComplete$1["delete"] = "delete";
|
|
10
|
+
return ApplicationOnComplete$1;
|
|
11
|
+
}({});
|
|
12
|
+
/** Type of signature used by an account */
|
|
13
|
+
let SignatureType = /* @__PURE__ */ function(SignatureType$1) {
|
|
14
|
+
/** Normal signature */
|
|
15
|
+
SignatureType$1["sig"] = "sig";
|
|
16
|
+
/** Multisig */
|
|
17
|
+
SignatureType$1["msig"] = "msig";
|
|
18
|
+
/** Logic signature */
|
|
19
|
+
SignatureType$1["lsig"] = "lsig";
|
|
20
|
+
return SignatureType$1;
|
|
21
|
+
}({});
|
|
22
|
+
/** Delegation status of the account */
|
|
23
|
+
let AccountStatus = /* @__PURE__ */ function(AccountStatus$1) {
|
|
24
|
+
/** Indicates that the associated account is delegated */
|
|
25
|
+
AccountStatus$1["Offline"] = "Offline";
|
|
26
|
+
/** Indicates that the associated account used as part of the delegation pool */
|
|
27
|
+
AccountStatus$1["Online"] = "Online";
|
|
28
|
+
/** Indicates that the associated account is neither a delegator nor a delegate */
|
|
29
|
+
AccountStatus$1["NotParticipating"] = "NotParticipating";
|
|
30
|
+
return AccountStatus$1;
|
|
31
|
+
}({});
|
|
32
|
+
|
|
33
|
+
//#endregion
|
|
34
|
+
export { AccountStatus, ApplicationOnComplete, SignatureType };
|
|
35
|
+
//# sourceMappingURL=indexer.mjs.map
|
package/indexer.mjs.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"indexer.mjs","names":[],"sources":["../src/indexer.ts"],"sourcesContent":["/** Options when looking up an asset's account holdings, https://dev.algorand.co/reference/rest-apis/indexer#get-v2assetsasset-idbalances */\nexport interface LookupAssetHoldingsOptions {\n /** Results should have a decimal units amount less than this value. */\n currencyLessThan?: number | bigint\n /** Results should have a decimal units amount greater than this value. */\n currencyGreaterThan?: number | bigint\n /** Include all items including closed accounts and opted-out asset holdings. */\n includeAll?: boolean\n}\n\n/** Defines the what additional actions occur with the transaction https://dev.algorand.co/reference/rest-apis/indexer/#oncompletion */\nexport enum ApplicationOnComplete {\n noop = 'noop',\n optin = 'optin',\n closeout = 'closeout',\n clear = 'clear',\n update = 'update',\n delete = 'delete',\n}\n\n/** Type of signature used by an account */\nexport enum SignatureType {\n /** Normal signature */\n sig = 'sig',\n /** Multisig */\n msig = 'msig',\n /** Logic signature */\n lsig = 'lsig',\n}\n\n/** Delegation status of the account */\nexport enum AccountStatus {\n /** Indicates that the associated account is delegated */\n Offline = 'Offline',\n /** Indicates that the associated account used as part of the delegation pool */\n Online = 'Online',\n /** Indicates that the associated account is neither a delegator nor a delegate */\n NotParticipating = 'NotParticipating',\n}\n"],"mappings":";;AAWA,IAAY,0EAAL;AACL;AACA;AACA;AACA;AACA;AACA;;;;AAIF,IAAY,0DAAL;;AAEL;;AAEA;;AAEA;;;;AAIF,IAAY,0DAAL;;AAEL;;AAEA;;AAEA"}
|
package/instance-of.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
//#region src/instance-of.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* A type that represents the interface of the class given as the generic parameter
|
|
4
|
+
*/
|
|
5
|
+
type InterfaceOf<ClassType> = { [Member in keyof ClassType]: ClassType[Member] };
|
|
6
|
+
//#endregion
|
|
7
|
+
export { InterfaceOf };
|
|
8
|
+
//# sourceMappingURL=instance-of.d.ts.map
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { Address } from "./packages/common/src/address.js";
|
|
2
|
+
import { AddressWithTransactionSigner } from "./packages/transact/src/signer.js";
|
|
3
|
+
import { Account } from "./packages/algod_client/src/models/account.js";
|
|
4
|
+
import { AlgoAmount } from "./amount.js";
|
|
5
|
+
import { KmdClient } from "./packages/kmd_client/src/client.js";
|
|
6
|
+
import { ClientManager } from "./client-manager.js";
|
|
7
|
+
|
|
8
|
+
//#region src/kmd-account-manager.d.ts
|
|
9
|
+
/** Provides abstractions over a [KMD](https://github.com/algorand/go-algorand/blob/master/daemon/kmd/README.md) instance
|
|
10
|
+
* that makes it easier to get and manage accounts using KMD. */
|
|
11
|
+
declare class KmdAccountManager {
|
|
12
|
+
private _clientManager;
|
|
13
|
+
private _kmd?;
|
|
14
|
+
/**
|
|
15
|
+
* Create a new KMD manager.
|
|
16
|
+
* @param clientManager A ClientManager client to use for algod and kmd clients
|
|
17
|
+
*/
|
|
18
|
+
constructor(clientManager: ClientManager);
|
|
19
|
+
kmd(): Promise<KmdClient>;
|
|
20
|
+
/**
|
|
21
|
+
* Returns an Algorand signing account with private key loaded from the given KMD wallet (identified by name).
|
|
22
|
+
*
|
|
23
|
+
* @param walletName The name of the wallet to retrieve an account from
|
|
24
|
+
* @param predicate An optional filter to use to find the account (otherwise it will return a random account from the wallet)
|
|
25
|
+
* @param sender The optional sender address to use this signer for (aka a rekeyed account)
|
|
26
|
+
* @example Get default funded account in a LocalNet
|
|
27
|
+
*
|
|
28
|
+
* ```typescript
|
|
29
|
+
* const defaultDispenserAccount = await kmdAccountManager.getWalletAccount(
|
|
30
|
+
* 'unencrypted-default-wallet',
|
|
31
|
+
* a => a.status !== 'Offline' && a.amount > 1_000_000_000
|
|
32
|
+
* )
|
|
33
|
+
* ```
|
|
34
|
+
* @returns The signing account (with private key loaded) or undefined if no matching wallet or account was found
|
|
35
|
+
*/
|
|
36
|
+
getWalletAccount(walletName: string, predicate?: (account: Account) => boolean, sender?: string | Address): Promise<AddressWithTransactionSigner | undefined>;
|
|
37
|
+
private findWalletAccount;
|
|
38
|
+
/**
|
|
39
|
+
* Gets an account with private key loaded from a KMD wallet of the given name, or alternatively creates one with funds in it via a KMD wallet of the given name.
|
|
40
|
+
*
|
|
41
|
+
* This is useful to get idempotent accounts from LocalNet without having to specify the private key (which will change when resetting the LocalNet).
|
|
42
|
+
*
|
|
43
|
+
* This significantly speeds up local dev time and improves experience since you can write code that *just works* first go without manual config in a fresh LocalNet.
|
|
44
|
+
*
|
|
45
|
+
* If this is used via `mnemonicAccountFromEnvironment`, then you can even use the same code that runs on production without changes for local development!
|
|
46
|
+
*
|
|
47
|
+
* @param name The name of the wallet to retrieve / create
|
|
48
|
+
* @param fundWith The number of Algo to fund the account with when it gets created, if not specified then 1000 ALGO will be funded from the dispenser account
|
|
49
|
+
*
|
|
50
|
+
* @example
|
|
51
|
+
* ```typescript
|
|
52
|
+
* // Idempotently get (if exists) or create (if it doesn't exist yet) an account by name using KMD
|
|
53
|
+
* // if creating it then fund it with 2 ALGO from the default dispenser account
|
|
54
|
+
* const newAccount = await kmdAccountManager.getOrCreateWalletAccount('account1', (2).algo())
|
|
55
|
+
* // This will return the same account as above since the name matches
|
|
56
|
+
* const existingAccount = await kmdAccountManager.getOrCreateWalletAccount('account1')
|
|
57
|
+
* ```
|
|
58
|
+
*
|
|
59
|
+
* @returns An Algorand account with private key loaded - either one that already existed in the given KMD wallet, or a new one that is funded for you
|
|
60
|
+
*/
|
|
61
|
+
getOrCreateWalletAccount(name: string, fundWith?: AlgoAmount): Promise<AddressWithTransactionSigner>;
|
|
62
|
+
/**
|
|
63
|
+
* Returns an Algorand account with private key loaded for the default LocalNet dispenser account (that can be used to fund other accounts).
|
|
64
|
+
* @example
|
|
65
|
+
* ```typescript
|
|
66
|
+
* const dispenser = await kmdAccountManager.getLocalNetDispenserAccount()
|
|
67
|
+
* ```
|
|
68
|
+
* @returns The default LocalNet dispenser account
|
|
69
|
+
*/
|
|
70
|
+
getLocalNetDispenserAccount(): Promise<AddressWithTransactionSigner>;
|
|
71
|
+
}
|
|
72
|
+
//#endregion
|
|
73
|
+
export { KmdAccountManager };
|
|
74
|
+
//# sourceMappingURL=kmd-account-manager.d.ts.map
|