@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.
Files changed (318) hide show
  1. package/account-manager.d.ts +448 -0
  2. package/account-manager.js +623 -0
  3. package/account-manager.js.map +1 -0
  4. package/account-manager.mjs +620 -0
  5. package/account-manager.mjs.map +1 -0
  6. package/account.d.ts +156 -0
  7. package/account.js +10 -0
  8. package/account.js.map +1 -0
  9. package/account.mjs +9 -0
  10. package/account.mjs.map +1 -0
  11. package/algorand-client-transaction-creator.d.ts +1103 -0
  12. package/algorand-client-transaction-creator.js +735 -0
  13. package/algorand-client-transaction-creator.js.map +1 -0
  14. package/algorand-client-transaction-creator.mjs +734 -0
  15. package/algorand-client-transaction-creator.mjs.map +1 -0
  16. package/algorand-client-transaction-sender.d.ts +1317 -0
  17. package/algorand-client-transaction-sender.js +933 -0
  18. package/algorand-client-transaction-sender.js.map +1 -0
  19. package/algorand-client-transaction-sender.mjs +932 -0
  20. package/algorand-client-transaction-sender.mjs.map +1 -0
  21. package/algorand-client.d.ts +246 -0
  22. package/algorand-client.js +325 -0
  23. package/algorand-client.js.map +1 -0
  24. package/algorand-client.mjs +325 -0
  25. package/algorand-client.mjs.map +1 -0
  26. package/amount.d.ts +46 -3
  27. package/amount.js +92 -13
  28. package/amount.js.map +1 -1
  29. package/amount.mjs +80 -3
  30. package/amount.mjs.map +1 -1
  31. package/app-client.d.ts +2130 -0
  32. package/app-client.js +909 -0
  33. package/app-client.js.map +1 -0
  34. package/app-client.mjs +908 -0
  35. package/app-client.mjs.map +1 -0
  36. package/app-deployer.d.ts +166 -0
  37. package/app-deployer.js +353 -0
  38. package/app-deployer.js.map +1 -0
  39. package/app-deployer.mjs +353 -0
  40. package/app-deployer.mjs.map +1 -0
  41. package/app-factory.d.ts +965 -0
  42. package/app-factory.js +448 -0
  43. package/app-factory.js.map +1 -0
  44. package/app-factory.mjs +448 -0
  45. package/app-factory.mjs.map +1 -0
  46. package/app-manager.d.ts +323 -0
  47. package/app-manager.js +468 -0
  48. package/app-manager.js.map +1 -0
  49. package/app-manager.mjs +468 -0
  50. package/app-manager.mjs.map +1 -0
  51. package/app-spec.d.ts +203 -0
  52. package/app-spec.js +137 -0
  53. package/app-spec.js.map +1 -0
  54. package/app-spec.mjs +137 -0
  55. package/app-spec.mjs.map +1 -0
  56. package/app.d.ts +257 -0
  57. package/app.js +49 -0
  58. package/app.js.map +1 -0
  59. package/app.mjs +42 -0
  60. package/app.mjs.map +1 -0
  61. package/asset-manager.d.ts +212 -0
  62. package/asset-manager.js +166 -0
  63. package/asset-manager.js.map +1 -0
  64. package/asset-manager.mjs +166 -0
  65. package/asset-manager.mjs.map +1 -0
  66. package/async-event-emitter.d.ts +16 -0
  67. package/async-event-emitter.js +38 -0
  68. package/async-event-emitter.js.map +1 -0
  69. package/async-event-emitter.mjs +37 -0
  70. package/async-event-emitter.mjs.map +1 -0
  71. package/client-manager.d.ts +475 -0
  72. package/client-manager.js +616 -0
  73. package/client-manager.js.map +1 -0
  74. package/client-manager.mjs +616 -0
  75. package/client-manager.mjs.map +1 -0
  76. package/composer.d.ts +947 -0
  77. package/composer.js +1584 -0
  78. package/composer.js.map +1 -0
  79. package/composer.mjs +1583 -0
  80. package/composer.mjs.map +1 -0
  81. package/config.d.ts +1 -1
  82. package/config.js +2 -2
  83. package/config.js.map +1 -1
  84. package/config.mjs +1 -1
  85. package/config.mjs.map +1 -1
  86. package/debugging.d.ts +47 -0
  87. package/debugging.js +20 -0
  88. package/debugging.js.map +1 -0
  89. package/debugging.mjs +15 -0
  90. package/debugging.mjs.map +1 -0
  91. package/dispenser-client.d.ts +90 -0
  92. package/dispenser-client.js +127 -0
  93. package/dispenser-client.js.map +1 -0
  94. package/dispenser-client.mjs +127 -0
  95. package/dispenser-client.mjs.map +1 -0
  96. package/expand.d.ts +2 -0
  97. package/expand.js +0 -0
  98. package/expand.mjs +0 -0
  99. package/index.d.ts +6 -5
  100. package/index.js +4 -3
  101. package/index.mjs +5 -5
  102. package/indexer-client/indexer-lookup.d.ts +1 -1
  103. package/indexer-client/indexer-lookup.js.map +1 -1
  104. package/indexer-client/indexer-lookup.mjs.map +1 -1
  105. package/indexer.d.ts +40 -0
  106. package/indexer.js +38 -0
  107. package/indexer.js.map +1 -0
  108. package/indexer.mjs +35 -0
  109. package/indexer.mjs.map +1 -0
  110. package/instance-of.d.ts +8 -0
  111. package/kmd-account-manager.d.ts +74 -0
  112. package/kmd-account-manager.js +167 -0
  113. package/kmd-account-manager.js.map +1 -0
  114. package/kmd-account-manager.mjs +165 -0
  115. package/kmd-account-manager.mjs.map +1 -0
  116. package/lifecycle-events.d.ts +14 -0
  117. package/lifecycle-events.js +11 -0
  118. package/lifecycle-events.js.map +1 -0
  119. package/lifecycle-events.mjs +10 -0
  120. package/lifecycle-events.mjs.map +1 -0
  121. package/logging.d.ts +13 -0
  122. package/logging.js +47 -0
  123. package/logging.js.map +1 -0
  124. package/logging.mjs +42 -0
  125. package/logging.mjs.map +1 -0
  126. package/logic-error.d.ts +39 -0
  127. package/logic-error.js +54 -0
  128. package/logic-error.js.map +1 -0
  129. package/logic-error.mjs +53 -0
  130. package/logic-error.mjs.map +1 -0
  131. package/network-client.d.ts +43 -0
  132. package/network-client.js +14 -0
  133. package/network-client.js.map +1 -0
  134. package/network-client.mjs +13 -0
  135. package/network-client.mjs.map +1 -0
  136. package/package.json +11 -1
  137. package/testing/account.d.ts +2 -2
  138. package/testing/account.js +1 -1
  139. package/testing/account.js.map +1 -1
  140. package/testing/account.mjs +1 -1
  141. package/testing/account.mjs.map +1 -1
  142. package/testing/fixtures/algokit-log-capture-fixture.d.ts +1 -1
  143. package/testing/fixtures/algokit-log-capture-fixture.js.map +1 -1
  144. package/testing/fixtures/algokit-log-capture-fixture.mjs.map +1 -1
  145. package/testing/fixtures/algorand-fixture.d.ts +2 -2
  146. package/testing/fixtures/algorand-fixture.js +2 -2
  147. package/testing/fixtures/algorand-fixture.js.map +1 -1
  148. package/testing/fixtures/algorand-fixture.mjs +2 -2
  149. package/testing/fixtures/algorand-fixture.mjs.map +1 -1
  150. package/testing/index.d.ts +2 -1
  151. package/testing/test-logger.d.ts +1 -1
  152. package/testing/test-logger.js.map +1 -1
  153. package/testing/test-logger.mjs.map +1 -1
  154. package/testing/types.d.ts +156 -0
  155. package/transaction/index.d.ts +4 -0
  156. package/transaction/index.js +9 -0
  157. package/transaction/index.mjs +4 -0
  158. package/transaction/perform-transaction-composer-simulate.d.ts +1 -1
  159. package/transaction/perform-transaction-composer-simulate.js.map +1 -1
  160. package/transaction/perform-transaction-composer-simulate.mjs.map +1 -1
  161. package/transaction/transaction.d.ts +2 -2
  162. package/transaction/transaction.js.map +1 -1
  163. package/transaction/transaction.mjs.map +1 -1
  164. package/transaction/types.d.ts +133 -0
  165. package/transactions/app-call.d.ts +1 -1
  166. package/transactions/app-call.js +1 -1
  167. package/transactions/app-call.js.map +1 -1
  168. package/transactions/app-call.mjs +1 -1
  169. package/transactions/app-call.mjs.map +1 -1
  170. package/transactions/common.d.ts +1 -1
  171. package/transactions/common.js.map +1 -1
  172. package/transactions/common.mjs.map +1 -1
  173. package/transactions/method-call.d.ts +1 -1
  174. package/transactions/method-call.js +1 -1
  175. package/transactions/method-call.js.map +1 -1
  176. package/transactions/method-call.mjs +1 -1
  177. package/transactions/method-call.mjs.map +1 -1
  178. package/transactions/payment.d.ts +1 -1
  179. package/transactions/payment.js.map +1 -1
  180. package/transactions/payment.mjs.map +1 -1
  181. package/types/account-manager.d.ts +11 -442
  182. package/types/account-manager.js +5 -616
  183. package/types/account-manager.js.map +1 -1
  184. package/types/account-manager.mjs +5 -614
  185. package/types/account-manager.mjs.map +1 -1
  186. package/types/account.d.ts +8 -150
  187. package/types/account.js +3 -4
  188. package/types/account.js.map +1 -1
  189. package/types/account.mjs +4 -4
  190. package/types/account.mjs.map +1 -1
  191. package/types/algorand-client-transaction-creator.d.ts +5 -1098
  192. package/types/algorand-client-transaction-creator.js +3 -729
  193. package/types/algorand-client-transaction-creator.js.map +1 -1
  194. package/types/algorand-client-transaction-creator.mjs +4 -729
  195. package/types/algorand-client-transaction-creator.mjs.map +1 -1
  196. package/types/algorand-client-transaction-sender.d.ts +5 -1312
  197. package/types/algorand-client-transaction-sender.js +3 -927
  198. package/types/algorand-client-transaction-sender.js.map +1 -1
  199. package/types/algorand-client-transaction-sender.mjs +3 -926
  200. package/types/algorand-client-transaction-sender.mjs.map +1 -1
  201. package/types/algorand-client.d.ts +5 -241
  202. package/types/algorand-client.js +3 -319
  203. package/types/algorand-client.js.map +1 -1
  204. package/types/algorand-client.mjs +3 -319
  205. package/types/algorand-client.mjs.map +1 -1
  206. package/types/amount.d.ts +6 -45
  207. package/types/amount.js +3 -79
  208. package/types/amount.js.map +1 -1
  209. package/types/amount.mjs +4 -79
  210. package/types/amount.mjs.map +1 -1
  211. package/types/app-client.d.ts +75 -2125
  212. package/types/app-client.js +3 -903
  213. package/types/app-client.js.map +1 -1
  214. package/types/app-client.mjs +3 -902
  215. package/types/app-client.mjs.map +1 -1
  216. package/types/app-deployer.d.ts +21 -161
  217. package/types/app-deployer.js +3 -347
  218. package/types/app-deployer.js.map +1 -1
  219. package/types/app-deployer.mjs +3 -347
  220. package/types/app-deployer.mjs.map +1 -1
  221. package/types/app-factory.d.ts +21 -960
  222. package/types/app-factory.js +3 -442
  223. package/types/app-factory.js.map +1 -1
  224. package/types/app-factory.mjs +3 -442
  225. package/types/app-factory.mjs.map +1 -1
  226. package/types/app-manager.d.ts +15 -318
  227. package/types/app-manager.js +3 -462
  228. package/types/app-manager.js.map +1 -1
  229. package/types/app-manager.mjs +3 -462
  230. package/types/app-manager.mjs.map +1 -1
  231. package/types/app-spec.d.ts +39 -198
  232. package/types/app-spec.js +3 -131
  233. package/types/app-spec.js.map +1 -1
  234. package/types/app-spec.mjs +3 -131
  235. package/types/app-spec.mjs.map +1 -1
  236. package/types/app.d.ts +62 -247
  237. package/types/app.js +15 -37
  238. package/types/app.js.map +1 -1
  239. package/types/app.mjs +16 -37
  240. package/types/app.mjs.map +1 -1
  241. package/types/asset-manager.d.ts +9 -207
  242. package/types/asset-manager.js +3 -160
  243. package/types/asset-manager.js.map +1 -1
  244. package/types/asset-manager.mjs +3 -160
  245. package/types/asset-manager.mjs.map +1 -1
  246. package/types/async-event-emitter.d.ts +7 -11
  247. package/types/async-event-emitter.js +3 -32
  248. package/types/async-event-emitter.js.map +1 -1
  249. package/types/async-event-emitter.mjs +4 -32
  250. package/types/async-event-emitter.mjs.map +1 -1
  251. package/types/client-manager.d.ts +27 -470
  252. package/types/client-manager.js +3 -610
  253. package/types/client-manager.js.map +1 -1
  254. package/types/client-manager.mjs +3 -610
  255. package/types/client-manager.mjs.map +1 -1
  256. package/types/composer.d.ts +79 -943
  257. package/types/composer.js +3 -1578
  258. package/types/composer.js.map +1 -1
  259. package/types/composer.mjs +3 -1577
  260. package/types/composer.mjs.map +1 -1
  261. package/types/config.d.ts +7 -52
  262. package/types/config.js +3 -74
  263. package/types/config.js.map +1 -1
  264. package/types/config.mjs +3 -74
  265. package/types/config.mjs.map +1 -1
  266. package/types/debugging.d.ts +12 -37
  267. package/types/debugging.js +11 -10
  268. package/types/debugging.js.map +1 -1
  269. package/types/debugging.mjs +12 -10
  270. package/types/debugging.mjs.map +1 -1
  271. package/types/dispenser-client.d.ts +11 -85
  272. package/types/dispenser-client.js +3 -121
  273. package/types/dispenser-client.js.map +1 -1
  274. package/types/dispenser-client.mjs +3 -121
  275. package/types/dispenser-client.mjs.map +1 -1
  276. package/types/expand.d.ts +8 -2
  277. package/types/indexer.d.ts +16 -36
  278. package/types/indexer.js +7 -30
  279. package/types/indexer.js.map +1 -1
  280. package/types/indexer.mjs +8 -30
  281. package/types/indexer.mjs.map +1 -1
  282. package/types/instance-of.d.ts +4 -4
  283. package/types/kmd-account-manager.d.ts +5 -69
  284. package/types/kmd-account-manager.js +3 -161
  285. package/types/kmd-account-manager.js.map +1 -1
  286. package/types/kmd-account-manager.mjs +3 -159
  287. package/types/kmd-account-manager.mjs.map +1 -1
  288. package/types/lifecycle-events.d.ts +7 -9
  289. package/types/lifecycle-events.js +3 -5
  290. package/types/lifecycle-events.js.map +1 -1
  291. package/types/lifecycle-events.mjs +4 -5
  292. package/types/lifecycle-events.mjs.map +1 -1
  293. package/types/logging.d.ts +14 -9
  294. package/types/logging.js +11 -37
  295. package/types/logging.js.map +1 -1
  296. package/types/logging.mjs +12 -37
  297. package/types/logging.mjs.map +1 -1
  298. package/types/logic-error.d.ts +8 -35
  299. package/types/logic-error.js +3 -48
  300. package/types/logic-error.js.map +1 -1
  301. package/types/logic-error.mjs +4 -48
  302. package/types/logic-error.mjs.map +1 -1
  303. package/types/network-client.d.ts +10 -39
  304. package/types/network-client.js +3 -8
  305. package/types/network-client.js.map +1 -1
  306. package/types/network-client.mjs +4 -8
  307. package/types/network-client.mjs.map +1 -1
  308. package/types/testing.d.ts +13 -151
  309. package/types/transaction.d.ts +33 -128
  310. package/updatable-config.d.ts +57 -0
  311. package/updatable-config.js +80 -0
  312. package/updatable-config.js.map +1 -0
  313. package/updatable-config.mjs +80 -0
  314. package/updatable-config.mjs.map +1 -0
  315. package/util.js +1 -1
  316. package/util.js.map +1 -1
  317. package/util.mjs +1 -1
  318. 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
@@ -0,0 +1,2 @@
1
+ import { Expand } from "./packages/common/src/expand.js";
2
+ export { type Expand };
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 { ALGOKIT_DIR, AVMTracesEventData, DEFAULT_MAX_SEARCH_DEPTH, SOURCES_DIR, TEAL_FILE_EXT, TEAL_SOURCEMAP_EXT, TealSourceDebugEventData, TealSourcesDebugEventData } from "./types/debugging.js";
6
- import { EventDataMap, EventType } from "./types/lifecycle-events.js";
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
- import { AlgorandClient } from "./types/algorand-client.js";
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('./types/lifecycle-events.js');
7
- const require_algorand_client = require('./types/algorand-client.js');
8
- const require_debugging = require('./types/debugging.js');
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 "./types/lifecycle-events.mjs";
7
- import { AlgorandClient } from "./types/algorand-client.mjs";
8
- import { ALGOKIT_DIR, DEFAULT_MAX_SEARCH_DEPTH, SOURCES_DIR, TEAL_FILE_EXT, TEAL_SOURCEMAP_EXT } from "./types/debugging.mjs";
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 "../types/indexer.js";
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 '../types/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
+ {"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 '../types/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
+ {"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
@@ -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"}
@@ -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