@algorandfoundation/algokit-utils 7.0.0 → 8.0.0-beta.1

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 (148) hide show
  1. package/README.md +14 -3
  2. package/account/account.d.ts +4 -1
  3. package/account/account.js +4 -3
  4. package/account/account.js.map +1 -1
  5. package/account/account.mjs +5 -4
  6. package/account/account.mjs.map +1 -1
  7. package/account/get-dispenser-account.d.ts +1 -1
  8. package/amount.d.ts +1 -0
  9. package/amount.js +3 -2
  10. package/amount.js.map +1 -1
  11. package/amount.mjs +3 -3
  12. package/amount.mjs.map +1 -1
  13. package/app-client.d.ts +4 -4
  14. package/app-client.js +4 -4
  15. package/app-client.js.map +1 -1
  16. package/app-client.mjs +4 -4
  17. package/app-client.mjs.map +1 -1
  18. package/app-deploy.js +23 -5
  19. package/app-deploy.js.map +1 -1
  20. package/app-deploy.mjs +24 -6
  21. package/app-deploy.mjs.map +1 -1
  22. package/app.js +7 -4
  23. package/app.js.map +1 -1
  24. package/app.mjs +7 -4
  25. package/app.mjs.map +1 -1
  26. package/index.js +1 -1
  27. package/index.mjs +2 -2
  28. package/indexer-lookup.d.ts +10 -8
  29. package/indexer-lookup.js +14 -10
  30. package/indexer-lookup.js.map +1 -1
  31. package/indexer-lookup.mjs +14 -10
  32. package/indexer-lookup.mjs.map +1 -1
  33. package/network-client.d.ts +1 -7
  34. package/network-client.js +2 -9
  35. package/network-client.js.map +1 -1
  36. package/network-client.mjs +2 -9
  37. package/network-client.mjs.map +1 -1
  38. package/package.json +2 -2
  39. package/testing/_asset.d.ts +2 -1
  40. package/testing/account.d.ts +4 -3
  41. package/testing/account.js +8 -2
  42. package/testing/account.js.map +1 -1
  43. package/testing/account.mjs +9 -3
  44. package/testing/account.mjs.map +1 -1
  45. package/testing/fixtures/algorand-fixture.js +5 -6
  46. package/testing/fixtures/algorand-fixture.js.map +1 -1
  47. package/testing/fixtures/algorand-fixture.mjs +5 -6
  48. package/testing/fixtures/algorand-fixture.mjs.map +1 -1
  49. package/testing/test-logger.js +7 -1
  50. package/testing/test-logger.js.map +1 -1
  51. package/testing/test-logger.mjs +7 -1
  52. package/testing/test-logger.mjs.map +1 -1
  53. package/transaction/perform-atomic-transaction-composer-simulate.d.ts +4 -1
  54. package/transaction/perform-atomic-transaction-composer-simulate.js +14 -10
  55. package/transaction/perform-atomic-transaction-composer-simulate.js.map +1 -1
  56. package/transaction/perform-atomic-transaction-composer-simulate.mjs +15 -11
  57. package/transaction/perform-atomic-transaction-composer-simulate.mjs.map +1 -1
  58. package/transaction/transaction.d.ts +1 -17
  59. package/transaction/transaction.js +110 -82
  60. package/transaction/transaction.js.map +1 -1
  61. package/transaction/transaction.mjs +112 -83
  62. package/transaction/transaction.mjs.map +1 -1
  63. package/transfer/transfer.js +3 -1
  64. package/transfer/transfer.js.map +1 -1
  65. package/transfer/transfer.mjs +3 -1
  66. package/transfer/transfer.mjs.map +1 -1
  67. package/types/account-manager.d.ts +20 -20
  68. package/types/account-manager.js +27 -20
  69. package/types/account-manager.js.map +1 -1
  70. package/types/account-manager.mjs +28 -21
  71. package/types/account-manager.mjs.map +1 -1
  72. package/types/account.d.ts +8 -8
  73. package/types/account.js +2 -2
  74. package/types/account.js.map +1 -1
  75. package/types/account.mjs +3 -3
  76. package/types/account.mjs.map +1 -1
  77. package/types/algo-http-client-with-retry.d.ts +1 -2
  78. package/types/algo-http-client-with-retry.js +33 -3
  79. package/types/algo-http-client-with-retry.js.map +1 -1
  80. package/types/algo-http-client-with-retry.mjs +32 -2
  81. package/types/algo-http-client-with-retry.mjs.map +1 -1
  82. package/types/algorand-client-transaction-creator.d.ts +11 -11
  83. package/types/algorand-client-transaction-sender.d.ts +97 -97
  84. package/types/algorand-client-transaction-sender.js.map +1 -1
  85. package/types/algorand-client-transaction-sender.mjs.map +1 -1
  86. package/types/algorand-client.d.ts +3 -3
  87. package/types/algorand-client.js +1 -1
  88. package/types/algorand-client.js.map +1 -1
  89. package/types/algorand-client.mjs +1 -1
  90. package/types/algorand-client.mjs.map +1 -1
  91. package/types/app-client.d.ts +280 -279
  92. package/types/app-client.js +10 -10
  93. package/types/app-client.js.map +1 -1
  94. package/types/app-client.mjs +11 -11
  95. package/types/app-client.mjs.map +1 -1
  96. package/types/app-deployer.d.ts +4 -4
  97. package/types/app-deployer.js +22 -23
  98. package/types/app-deployer.js.map +1 -1
  99. package/types/app-deployer.mjs +23 -24
  100. package/types/app-deployer.mjs.map +1 -1
  101. package/types/app-factory.d.ts +128 -138
  102. package/types/app-factory.js +4 -3
  103. package/types/app-factory.js.map +1 -1
  104. package/types/app-factory.mjs +5 -4
  105. package/types/app-factory.mjs.map +1 -1
  106. package/types/app-manager.d.ts +5 -5
  107. package/types/app-manager.js +11 -15
  108. package/types/app-manager.js.map +1 -1
  109. package/types/app-manager.mjs +12 -16
  110. package/types/app-manager.mjs.map +1 -1
  111. package/types/app.d.ts +4 -4
  112. package/types/app.js.map +1 -1
  113. package/types/app.mjs.map +1 -1
  114. package/types/asset-manager.d.ts +5 -5
  115. package/types/asset-manager.js +8 -11
  116. package/types/asset-manager.js.map +1 -1
  117. package/types/asset-manager.mjs +8 -11
  118. package/types/asset-manager.mjs.map +1 -1
  119. package/types/client-manager.d.ts +2 -9
  120. package/types/client-manager.js +9 -19
  121. package/types/client-manager.js.map +1 -1
  122. package/types/client-manager.mjs +9 -19
  123. package/types/client-manager.mjs.map +1 -1
  124. package/types/composer.d.ts +22 -22
  125. package/types/composer.js +73 -83
  126. package/types/composer.js.map +1 -1
  127. package/types/composer.mjs +74 -84
  128. package/types/composer.mjs.map +1 -1
  129. package/types/dispenser-client.d.ts +2 -1
  130. package/types/dispenser-client.js +5 -1
  131. package/types/dispenser-client.js.map +1 -1
  132. package/types/dispenser-client.mjs +5 -1
  133. package/types/dispenser-client.mjs.map +1 -1
  134. package/types/indexer.d.ts +74 -755
  135. package/types/indexer.js.map +1 -1
  136. package/types/indexer.mjs.map +1 -1
  137. package/types/kmd-account-manager.d.ts +2 -2
  138. package/types/kmd-account-manager.js.map +1 -1
  139. package/types/kmd-account-manager.mjs.map +1 -1
  140. package/types/network-client.d.ts +1 -1
  141. package/types/network-client.js.map +1 -1
  142. package/types/network-client.mjs.map +1 -1
  143. package/types/testing.d.ts +5 -6
  144. package/types/urlTokenBaseHTTPClient.d.ts +0 -40
  145. package/types/urlTokenBaseHTTPClient.js +0 -153
  146. package/types/urlTokenBaseHTTPClient.js.map +0 -1
  147. package/types/urlTokenBaseHTTPClient.mjs +0 -151
  148. package/types/urlTokenBaseHTTPClient.mjs.map +0 -1
package/indexer-lookup.js CHANGED
@@ -1,23 +1,27 @@
1
1
  'use strict';
2
2
 
3
+ var algosdk = require('algosdk');
4
+
3
5
  const DEFAULT_INDEXER_MAX_API_RESOURCES_PER_ACCOUNT = 1000; //MaxAPIResourcesPerAccount: This is the default maximum, though may be provider specific
4
6
  /**
7
+ * @deprecated Use `indexer.lookupTransactionByID(transactionId).do()`.
5
8
  * Looks up a transaction by ID using Indexer.
6
9
  * @param transactionId The ID of the transaction to look up
7
10
  * @param indexer An indexer client
8
11
  * @returns The result of the look-up
9
12
  */
10
13
  async function lookupTransactionById(transactionId, indexer) {
11
- return (await indexer.lookupTransactionByID(transactionId).do());
14
+ return await indexer.lookupTransactionByID(transactionId).do();
12
15
  }
13
16
  /**
17
+ * @deprecated Use `indexer.lookupAccountByID(accountAddress).do()`.
14
18
  * Looks up an account by address using Indexer.
15
19
  * @param accountAddress The address of the account to look up
16
20
  * @param indexer An indexer client
17
21
  * @returns The result of the look-up
18
22
  */
19
23
  async function lookupAccountByAddress(accountAddress, indexer) {
20
- return (await indexer.lookupAccountByID(accountAddress).do());
24
+ return await indexer.lookupAccountByID(accountAddress).do();
21
25
  }
22
26
  /**
23
27
  * Looks up applications that were created by the given address; will automatically paginate through all data.
@@ -83,13 +87,13 @@ async function lookupAssetHoldings(indexer, assetId, options, paginationLimit) {
83
87
  * @returns The search results
84
88
  */
85
89
  async function searchTransactions(indexer, searchCriteria, paginationLimit) {
86
- let currentRound = 0;
90
+ let currentRound = 0n;
87
91
  const transactions = await executePaginatedRequest((response) => {
88
92
  if ('message' in response) {
89
93
  throw { status: 404, ...response };
90
94
  }
91
- if (response['current-round'] > currentRound) {
92
- currentRound = response['current-round'];
95
+ if (response.currentRound > currentRound) {
96
+ currentRound = response.currentRound;
93
97
  }
94
98
  return response.transactions;
95
99
  }, (nextToken) => {
@@ -99,11 +103,11 @@ async function searchTransactions(indexer, searchCriteria, paginationLimit) {
99
103
  }
100
104
  return s;
101
105
  });
102
- return {
103
- 'current-round': currentRound,
104
- 'next-token': '',
106
+ return new algosdk.indexerModels.TransactionsResponse({
107
+ currentRound,
108
+ nextToken: undefined,
105
109
  transactions: transactions,
106
- };
110
+ });
107
111
  }
108
112
  // https://developer.algorand.org/docs/get-details/indexer/#paginated-results
109
113
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -121,7 +125,7 @@ extractItems, buildRequest) {
121
125
  break;
122
126
  }
123
127
  results.push(...items);
124
- nextToken = response['next-token'];
128
+ nextToken = response['nextToken'];
125
129
  if (!nextToken) {
126
130
  break;
127
131
  }
@@ -1 +1 @@
1
- {"version":3,"file":"indexer-lookup.js","sources":["../src/indexer-lookup.ts"],"sourcesContent":["import algosdk from 'algosdk'\nimport type SearchForTransactions from 'algosdk/dist/types/client/v2/indexer/searchForTransactions'\nimport {\n AccountLookupResult,\n ApplicationCreatedLookupResult,\n ApplicationResult,\n AssetBalancesLookupResult,\n LookupAssetHoldingsOptions,\n MiniAssetHolding,\n TransactionLookupResult,\n TransactionSearchResults,\n} from './types/indexer'\nimport Indexer = algosdk.Indexer\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 a transaction by ID using Indexer.\n * @param transactionId The ID of the transaction to look up\n * @param indexer An indexer client\n * @returns The result of the look-up\n */\nexport async function lookupTransactionById(transactionId: string, indexer: Indexer): Promise<TransactionLookupResult> {\n return (await indexer.lookupTransactionByID(transactionId).do()) as TransactionLookupResult\n}\n\n/**\n * Looks up an account by address using Indexer.\n * @param accountAddress The address of the account to look up\n * @param indexer An indexer client\n * @returns The result of the look-up\n */\nexport async function lookupAccountByAddress(accountAddress: string, indexer: Indexer): Promise<AccountLookupResult> {\n return (await indexer.lookupAccountByID(accountAddress).do()) as AccountLookupResult\n}\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\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: Indexer,\n address: string,\n getAll: boolean | undefined = undefined,\n paginationLimit?: number,\n): Promise<ApplicationResult[]> {\n return await executePaginatedRequest(\n (response: ApplicationCreatedLookupResult | { message: string }) => {\n if ('message' in response) {\n throw { status: 404, ...response }\n }\n return response.applications\n },\n (nextToken) => {\n let s = indexer\n .lookupAccountCreatedApplications(address)\n .includeAll(getAll)\n .limit(paginationLimit ?? DEFAULT_INDEXER_MAX_API_RESOURCES_PER_ACCOUNT)\n if (nextToken) {\n s = s.nextToken(nextToken)\n }\n return s\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: Indexer,\n assetId: number | bigint,\n options?: LookupAssetHoldingsOptions,\n paginationLimit?: number,\n): Promise<MiniAssetHolding[]> {\n return await executePaginatedRequest(\n (response: AssetBalancesLookupResult | { message: string }) => {\n if ('message' in response) {\n throw { status: 404, ...response }\n }\n return response.balances\n },\n (nextToken) => {\n let s = indexer.lookupAssetBalances(Number(assetId)).limit(paginationLimit ?? DEFAULT_INDEXER_MAX_API_RESOURCES_PER_ACCOUNT)\n if (options?.currencyGreaterThan !== undefined) {\n s = s.currencyGreaterThan(options.currencyGreaterThan)\n }\n if (options?.currencyLessThan !== undefined) {\n s = s.currencyLessThan(options.currencyLessThan)\n }\n if (options?.includeAll !== undefined) {\n s = s.includeAll(options.includeAll)\n }\n if (nextToken) {\n s = s.nextToken(nextToken)\n }\n return s\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: Indexer,\n searchCriteria: (s: SearchForTransactions) => SearchForTransactions,\n paginationLimit?: number,\n): Promise<TransactionSearchResults> {\n let currentRound = 0\n const transactions = await executePaginatedRequest(\n (response: TransactionSearchResults | { message: string }) => {\n if ('message' in response) {\n throw { status: 404, ...response }\n }\n if (response['current-round'] > currentRound) {\n currentRound = response['current-round']\n }\n return response.transactions\n },\n (nextToken) => {\n let s = searchCriteria(indexer.searchForTransactions()).limit(paginationLimit ?? DEFAULT_INDEXER_MAX_API_RESOURCES_PER_ACCOUNT)\n if (nextToken) {\n s = s.nextToken(nextToken)\n }\n return s\n },\n )\n\n return {\n 'current-round': currentRound,\n 'next-token': '',\n transactions: transactions,\n }\n}\n\n// https://developer.algorand.org/docs/get-details/indexer/#paginated-results\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport async function executePaginatedRequest<TResult, TRequest extends { do: () => 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 // eslint-disable-next-line no-constant-condition\n while (true) {\n const request = buildRequest(nextToken)\n const response = await request.do()\n const items = extractItems(response)\n if (items == null || items.length === 0) {\n break\n }\n results.push(...items)\n nextToken = response['next-token']\n if (!nextToken) {\n break\n }\n }\n\n return results\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"indexer-lookup.js","sources":["../src/indexer-lookup.ts"],"sourcesContent":["import algosdk, { Address } from 'algosdk'\nimport { LookupAssetHoldingsOptions } from './types/indexer'\nimport Indexer = algosdk.Indexer\nexport type SearchForTransactions = ReturnType<Indexer['searchForTransactions']>\n\nconst DEFAULT_INDEXER_MAX_API_RESOURCES_PER_ACCOUNT = 1000 //MaxAPIResourcesPerAccount: This is the default maximum, though may be provider specific\n\n/**\n * @deprecated Use `indexer.lookupTransactionByID(transactionId).do()`.\n * Looks up a transaction by ID using Indexer.\n * @param transactionId The ID of the transaction to look up\n * @param indexer An indexer client\n * @returns The result of the look-up\n */\nexport async function lookupTransactionById(transactionId: string, indexer: Indexer) {\n return await indexer.lookupTransactionByID(transactionId).do()\n}\n\n/**\n * @deprecated Use `indexer.lookupAccountByID(accountAddress).do()`.\n * Looks up an account by address using Indexer.\n * @param accountAddress The address of the account to look up\n * @param indexer An indexer client\n * @returns The result of the look-up\n */\nexport async function lookupAccountByAddress(accountAddress: string | Address, indexer: Indexer) {\n return await indexer.lookupAccountByID(accountAddress).do()\n}\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\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: Indexer,\n address: string | Address,\n getAll: boolean | undefined = undefined,\n paginationLimit?: number,\n): Promise<algosdk.indexerModels.Application[]> {\n return await executePaginatedRequest(\n (response: algosdk.indexerModels.ApplicationsResponse | { message: string }) => {\n if ('message' in response) {\n throw { status: 404, ...response }\n }\n return response.applications\n },\n (nextToken) => {\n let s = indexer\n .lookupAccountCreatedApplications(address)\n .includeAll(getAll)\n .limit(paginationLimit ?? DEFAULT_INDEXER_MAX_API_RESOURCES_PER_ACCOUNT)\n if (nextToken) {\n s = s.nextToken(nextToken)\n }\n return s\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: Indexer,\n assetId: number | bigint,\n options?: LookupAssetHoldingsOptions,\n paginationLimit?: number,\n): Promise<algosdk.indexerModels.MiniAssetHolding[]> {\n return await executePaginatedRequest(\n (response: algosdk.indexerModels.AssetBalancesResponse | { message: string }) => {\n if ('message' in response) {\n throw { status: 404, ...response }\n }\n return response.balances\n },\n (nextToken) => {\n let s = indexer.lookupAssetBalances(Number(assetId)).limit(paginationLimit ?? DEFAULT_INDEXER_MAX_API_RESOURCES_PER_ACCOUNT)\n if (options?.currencyGreaterThan !== undefined) {\n s = s.currencyGreaterThan(options.currencyGreaterThan)\n }\n if (options?.currencyLessThan !== undefined) {\n s = s.currencyLessThan(options.currencyLessThan)\n }\n if (options?.includeAll !== undefined) {\n s = s.includeAll(options.includeAll)\n }\n if (nextToken) {\n s = s.nextToken(nextToken)\n }\n return s\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: Indexer,\n searchCriteria: (s: SearchForTransactions) => SearchForTransactions,\n paginationLimit?: number,\n): Promise<algosdk.indexerModels.TransactionsResponse> {\n let currentRound = 0n\n const transactions = await executePaginatedRequest(\n (response: algosdk.indexerModels.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 let s = searchCriteria(indexer.searchForTransactions()).limit(paginationLimit ?? DEFAULT_INDEXER_MAX_API_RESOURCES_PER_ACCOUNT)\n if (nextToken) {\n s = s.nextToken(nextToken)\n }\n return s\n },\n )\n\n return new algosdk.indexerModels.TransactionsResponse({\n currentRound,\n nextToken: undefined,\n transactions: transactions,\n })\n}\n\n// https://developer.algorand.org/docs/get-details/indexer/#paginated-results\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport async function executePaginatedRequest<TResult, TRequest extends { do: () => 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 // eslint-disable-next-line no-constant-condition\n while (true) {\n const request = buildRequest(nextToken)\n const response = await request.do()\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"],"names":[],"mappings":"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"}
@@ -1,21 +1,25 @@
1
+ import algosdk from 'algosdk';
2
+
1
3
  const DEFAULT_INDEXER_MAX_API_RESOURCES_PER_ACCOUNT = 1000; //MaxAPIResourcesPerAccount: This is the default maximum, though may be provider specific
2
4
  /**
5
+ * @deprecated Use `indexer.lookupTransactionByID(transactionId).do()`.
3
6
  * Looks up a transaction by ID using Indexer.
4
7
  * @param transactionId The ID of the transaction to look up
5
8
  * @param indexer An indexer client
6
9
  * @returns The result of the look-up
7
10
  */
8
11
  async function lookupTransactionById(transactionId, indexer) {
9
- return (await indexer.lookupTransactionByID(transactionId).do());
12
+ return await indexer.lookupTransactionByID(transactionId).do();
10
13
  }
11
14
  /**
15
+ * @deprecated Use `indexer.lookupAccountByID(accountAddress).do()`.
12
16
  * Looks up an account by address using Indexer.
13
17
  * @param accountAddress The address of the account to look up
14
18
  * @param indexer An indexer client
15
19
  * @returns The result of the look-up
16
20
  */
17
21
  async function lookupAccountByAddress(accountAddress, indexer) {
18
- return (await indexer.lookupAccountByID(accountAddress).do());
22
+ return await indexer.lookupAccountByID(accountAddress).do();
19
23
  }
20
24
  /**
21
25
  * Looks up applications that were created by the given address; will automatically paginate through all data.
@@ -81,13 +85,13 @@ async function lookupAssetHoldings(indexer, assetId, options, paginationLimit) {
81
85
  * @returns The search results
82
86
  */
83
87
  async function searchTransactions(indexer, searchCriteria, paginationLimit) {
84
- let currentRound = 0;
88
+ let currentRound = 0n;
85
89
  const transactions = await executePaginatedRequest((response) => {
86
90
  if ('message' in response) {
87
91
  throw { status: 404, ...response };
88
92
  }
89
- if (response['current-round'] > currentRound) {
90
- currentRound = response['current-round'];
93
+ if (response.currentRound > currentRound) {
94
+ currentRound = response.currentRound;
91
95
  }
92
96
  return response.transactions;
93
97
  }, (nextToken) => {
@@ -97,11 +101,11 @@ async function searchTransactions(indexer, searchCriteria, paginationLimit) {
97
101
  }
98
102
  return s;
99
103
  });
100
- return {
101
- 'current-round': currentRound,
102
- 'next-token': '',
104
+ return new algosdk.indexerModels.TransactionsResponse({
105
+ currentRound,
106
+ nextToken: undefined,
103
107
  transactions: transactions,
104
- };
108
+ });
105
109
  }
106
110
  // https://developer.algorand.org/docs/get-details/indexer/#paginated-results
107
111
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -119,7 +123,7 @@ extractItems, buildRequest) {
119
123
  break;
120
124
  }
121
125
  results.push(...items);
122
- nextToken = response['next-token'];
126
+ nextToken = response['nextToken'];
123
127
  if (!nextToken) {
124
128
  break;
125
129
  }
@@ -1 +1 @@
1
- {"version":3,"file":"indexer-lookup.mjs","sources":["../src/indexer-lookup.ts"],"sourcesContent":["import algosdk from 'algosdk'\nimport type SearchForTransactions from 'algosdk/dist/types/client/v2/indexer/searchForTransactions'\nimport {\n AccountLookupResult,\n ApplicationCreatedLookupResult,\n ApplicationResult,\n AssetBalancesLookupResult,\n LookupAssetHoldingsOptions,\n MiniAssetHolding,\n TransactionLookupResult,\n TransactionSearchResults,\n} from './types/indexer'\nimport Indexer = algosdk.Indexer\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 a transaction by ID using Indexer.\n * @param transactionId The ID of the transaction to look up\n * @param indexer An indexer client\n * @returns The result of the look-up\n */\nexport async function lookupTransactionById(transactionId: string, indexer: Indexer): Promise<TransactionLookupResult> {\n return (await indexer.lookupTransactionByID(transactionId).do()) as TransactionLookupResult\n}\n\n/**\n * Looks up an account by address using Indexer.\n * @param accountAddress The address of the account to look up\n * @param indexer An indexer client\n * @returns The result of the look-up\n */\nexport async function lookupAccountByAddress(accountAddress: string, indexer: Indexer): Promise<AccountLookupResult> {\n return (await indexer.lookupAccountByID(accountAddress).do()) as AccountLookupResult\n}\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\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: Indexer,\n address: string,\n getAll: boolean | undefined = undefined,\n paginationLimit?: number,\n): Promise<ApplicationResult[]> {\n return await executePaginatedRequest(\n (response: ApplicationCreatedLookupResult | { message: string }) => {\n if ('message' in response) {\n throw { status: 404, ...response }\n }\n return response.applications\n },\n (nextToken) => {\n let s = indexer\n .lookupAccountCreatedApplications(address)\n .includeAll(getAll)\n .limit(paginationLimit ?? DEFAULT_INDEXER_MAX_API_RESOURCES_PER_ACCOUNT)\n if (nextToken) {\n s = s.nextToken(nextToken)\n }\n return s\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: Indexer,\n assetId: number | bigint,\n options?: LookupAssetHoldingsOptions,\n paginationLimit?: number,\n): Promise<MiniAssetHolding[]> {\n return await executePaginatedRequest(\n (response: AssetBalancesLookupResult | { message: string }) => {\n if ('message' in response) {\n throw { status: 404, ...response }\n }\n return response.balances\n },\n (nextToken) => {\n let s = indexer.lookupAssetBalances(Number(assetId)).limit(paginationLimit ?? DEFAULT_INDEXER_MAX_API_RESOURCES_PER_ACCOUNT)\n if (options?.currencyGreaterThan !== undefined) {\n s = s.currencyGreaterThan(options.currencyGreaterThan)\n }\n if (options?.currencyLessThan !== undefined) {\n s = s.currencyLessThan(options.currencyLessThan)\n }\n if (options?.includeAll !== undefined) {\n s = s.includeAll(options.includeAll)\n }\n if (nextToken) {\n s = s.nextToken(nextToken)\n }\n return s\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: Indexer,\n searchCriteria: (s: SearchForTransactions) => SearchForTransactions,\n paginationLimit?: number,\n): Promise<TransactionSearchResults> {\n let currentRound = 0\n const transactions = await executePaginatedRequest(\n (response: TransactionSearchResults | { message: string }) => {\n if ('message' in response) {\n throw { status: 404, ...response }\n }\n if (response['current-round'] > currentRound) {\n currentRound = response['current-round']\n }\n return response.transactions\n },\n (nextToken) => {\n let s = searchCriteria(indexer.searchForTransactions()).limit(paginationLimit ?? DEFAULT_INDEXER_MAX_API_RESOURCES_PER_ACCOUNT)\n if (nextToken) {\n s = s.nextToken(nextToken)\n }\n return s\n },\n )\n\n return {\n 'current-round': currentRound,\n 'next-token': '',\n transactions: transactions,\n }\n}\n\n// https://developer.algorand.org/docs/get-details/indexer/#paginated-results\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport async function executePaginatedRequest<TResult, TRequest extends { do: () => 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 // eslint-disable-next-line no-constant-condition\n while (true) {\n const request = buildRequest(nextToken)\n const response = await request.do()\n const items = extractItems(response)\n if (items == null || items.length === 0) {\n break\n }\n results.push(...items)\n nextToken = response['next-token']\n if (!nextToken) {\n break\n }\n }\n\n return results\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"indexer-lookup.mjs","sources":["../src/indexer-lookup.ts"],"sourcesContent":["import algosdk, { Address } from 'algosdk'\nimport { LookupAssetHoldingsOptions } from './types/indexer'\nimport Indexer = algosdk.Indexer\nexport type SearchForTransactions = ReturnType<Indexer['searchForTransactions']>\n\nconst DEFAULT_INDEXER_MAX_API_RESOURCES_PER_ACCOUNT = 1000 //MaxAPIResourcesPerAccount: This is the default maximum, though may be provider specific\n\n/**\n * @deprecated Use `indexer.lookupTransactionByID(transactionId).do()`.\n * Looks up a transaction by ID using Indexer.\n * @param transactionId The ID of the transaction to look up\n * @param indexer An indexer client\n * @returns The result of the look-up\n */\nexport async function lookupTransactionById(transactionId: string, indexer: Indexer) {\n return await indexer.lookupTransactionByID(transactionId).do()\n}\n\n/**\n * @deprecated Use `indexer.lookupAccountByID(accountAddress).do()`.\n * Looks up an account by address using Indexer.\n * @param accountAddress The address of the account to look up\n * @param indexer An indexer client\n * @returns The result of the look-up\n */\nexport async function lookupAccountByAddress(accountAddress: string | Address, indexer: Indexer) {\n return await indexer.lookupAccountByID(accountAddress).do()\n}\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\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: Indexer,\n address: string | Address,\n getAll: boolean | undefined = undefined,\n paginationLimit?: number,\n): Promise<algosdk.indexerModels.Application[]> {\n return await executePaginatedRequest(\n (response: algosdk.indexerModels.ApplicationsResponse | { message: string }) => {\n if ('message' in response) {\n throw { status: 404, ...response }\n }\n return response.applications\n },\n (nextToken) => {\n let s = indexer\n .lookupAccountCreatedApplications(address)\n .includeAll(getAll)\n .limit(paginationLimit ?? DEFAULT_INDEXER_MAX_API_RESOURCES_PER_ACCOUNT)\n if (nextToken) {\n s = s.nextToken(nextToken)\n }\n return s\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: Indexer,\n assetId: number | bigint,\n options?: LookupAssetHoldingsOptions,\n paginationLimit?: number,\n): Promise<algosdk.indexerModels.MiniAssetHolding[]> {\n return await executePaginatedRequest(\n (response: algosdk.indexerModels.AssetBalancesResponse | { message: string }) => {\n if ('message' in response) {\n throw { status: 404, ...response }\n }\n return response.balances\n },\n (nextToken) => {\n let s = indexer.lookupAssetBalances(Number(assetId)).limit(paginationLimit ?? DEFAULT_INDEXER_MAX_API_RESOURCES_PER_ACCOUNT)\n if (options?.currencyGreaterThan !== undefined) {\n s = s.currencyGreaterThan(options.currencyGreaterThan)\n }\n if (options?.currencyLessThan !== undefined) {\n s = s.currencyLessThan(options.currencyLessThan)\n }\n if (options?.includeAll !== undefined) {\n s = s.includeAll(options.includeAll)\n }\n if (nextToken) {\n s = s.nextToken(nextToken)\n }\n return s\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: Indexer,\n searchCriteria: (s: SearchForTransactions) => SearchForTransactions,\n paginationLimit?: number,\n): Promise<algosdk.indexerModels.TransactionsResponse> {\n let currentRound = 0n\n const transactions = await executePaginatedRequest(\n (response: algosdk.indexerModels.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 let s = searchCriteria(indexer.searchForTransactions()).limit(paginationLimit ?? DEFAULT_INDEXER_MAX_API_RESOURCES_PER_ACCOUNT)\n if (nextToken) {\n s = s.nextToken(nextToken)\n }\n return s\n },\n )\n\n return new algosdk.indexerModels.TransactionsResponse({\n currentRound,\n nextToken: undefined,\n transactions: transactions,\n })\n}\n\n// https://developer.algorand.org/docs/get-details/indexer/#paginated-results\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport async function executePaginatedRequest<TResult, TRequest extends { do: () => 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 // eslint-disable-next-line no-constant-condition\n while (true) {\n const request = buildRequest(nextToken)\n const response = await request.do()\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"],"names":[],"mappings":"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"}
@@ -3,7 +3,6 @@ import { AlgoClientConfig, AlgoConfig } from './types/network-client';
3
3
  import Algodv2 = algosdk.Algodv2;
4
4
  import Indexer = algosdk.Indexer;
5
5
  import Kmd = algosdk.Kmd;
6
- import IntDecoding = algosdk.IntDecoding;
7
6
  /**
8
7
  * @deprecated Use `ClientManager.getConfigFromEnvironmentOrLocalNet()` instead.
9
8
  *
@@ -76,7 +75,6 @@ export declare function getAlgoClient(config?: AlgoClientConfig): Algodv2;
76
75
  * Returns an indexer SDK client that automatically retries transient failures on idempotent calls
77
76
  *
78
77
  * @param config The config if you want to override the default (getting config from process.env)
79
- * @param overrideIntDecoding Override the default int decoding for responses, uses MIXED by default to avoid lost precision for big integers
80
78
  * @example Default (load from environment variables)
81
79
  *
82
80
  * ```typescript
@@ -99,12 +97,8 @@ export declare function getAlgoClient(config?: AlgoClientConfig): Algodv2;
99
97
  * const indexer = getAlgoIndexerClient({server: 'http://localhost', port: '8980', token: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'})
100
98
  * await indexer.makeHealthCheck().do()
101
99
  * ```
102
- * @example Override int decoding for responses
103
- * ```typescript
104
- * const indexer = getAlgoIndexerClient(config, IntDecoding.BIGINT)
105
- * ```
106
100
  */
107
- export declare function getAlgoIndexerClient(config?: AlgoClientConfig, overrideIntDecoding?: IntDecoding): Indexer;
101
+ export declare function getAlgoIndexerClient(config?: AlgoClientConfig): Indexer;
108
102
  /**
109
103
  * @deprecated Use `ClientManager.getKmdClient(config)` or `ClientManager.getKmdClientFromEnvironment()` instead.
110
104
  *
package/network-client.js CHANGED
@@ -86,7 +86,6 @@ function getAlgoClient(config) {
86
86
  * Returns an indexer SDK client that automatically retries transient failures on idempotent calls
87
87
  *
88
88
  * @param config The config if you want to override the default (getting config from process.env)
89
- * @param overrideIntDecoding Override the default int decoding for responses, uses MIXED by default to avoid lost precision for big integers
90
89
  * @example Default (load from environment variables)
91
90
  *
92
91
  * ```typescript
@@ -109,15 +108,9 @@ function getAlgoClient(config) {
109
108
  * const indexer = getAlgoIndexerClient({server: 'http://localhost', port: '8980', token: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'})
110
109
  * await indexer.makeHealthCheck().do()
111
110
  * ```
112
- * @example Override int decoding for responses
113
- * ```typescript
114
- * const indexer = getAlgoIndexerClient(config, IntDecoding.BIGINT)
115
- * ```
116
111
  */
117
- function getAlgoIndexerClient(config, overrideIntDecoding) {
118
- return config
119
- ? types_clientManager.ClientManager.getIndexerClient(config, overrideIntDecoding)
120
- : types_clientManager.ClientManager.getIndexerClientFromEnvironment(overrideIntDecoding);
112
+ function getAlgoIndexerClient(config) {
113
+ return config ? types_clientManager.ClientManager.getIndexerClient(config) : types_clientManager.ClientManager.getIndexerClientFromEnvironment();
121
114
  }
122
115
  /**
123
116
  * @deprecated Use `ClientManager.getKmdClient(config)` or `ClientManager.getKmdClientFromEnvironment()` instead.
@@ -1 +1 @@
1
- {"version":3,"file":"network-client.js","sources":["../src/network-client.ts"],"sourcesContent":["import algosdk from 'algosdk'\nimport { ClientManager } from './types/client-manager'\nimport { AlgoClientConfig, AlgoConfig } from './types/network-client'\nimport Algodv2 = algosdk.Algodv2\nimport Indexer = algosdk.Indexer\nimport Kmd = algosdk.Kmd\nimport IntDecoding = algosdk.IntDecoding\n\n/**\n * @deprecated Use `ClientManager.getConfigFromEnvironmentOrLocalNet()` instead.\n *\n * Retrieve configurations from environment variables when defined or get defaults (expects to be called from a Node.js environment not algod-side)\n */\nexport function getConfigFromEnvOrDefaults(): AlgoConfig {\n return ClientManager.getConfigFromEnvironmentOrLocalNet()\n}\n\n/**\n * @deprecated Use `ClientManager.getAlgodConfigFromEnvironment()` instead.\n *\n * Retrieve the algod configuration from environment variables (expects to be called from a Node.js environment not algod-side)\n */\nexport function getAlgodConfigFromEnvironment(): AlgoClientConfig {\n return ClientManager.getAlgodConfigFromEnvironment()\n}\n\n/**\n * @deprecated Use `ClientManager.getIndexerConfigFromEnvironment()` instead.\n *\n * Retrieve the indexer configuration from environment variables (expects to be called from a Node.js environment not algod-side)\n */\nexport function getIndexerConfigFromEnvironment(): AlgoClientConfig {\n return ClientManager.getIndexerConfigFromEnvironment()\n}\n\n/**\n * @deprecated Use `ClientManager.getAlgoNodeConfig(network, config)` instead.\n *\n * Returns the Algorand configuration to point to the AlgoNode service\n *\n * @param network Which network to connect to - TestNet or MainNet\n * @param config Which algod config to return - Algod or Indexer\n */\nexport function getAlgoNodeConfig(network: 'testnet' | 'mainnet', config: 'algod' | 'indexer'): AlgoClientConfig {\n return ClientManager.getAlgoNodeConfig(network, config)\n}\n\n/**\n * @deprecated Use `ClientManager.getDefaultLocalNetConfig(configOrPort)` instead.\n *\n * Returns the Algorand configuration to point to the default LocalNet\n *\n * @param configOrPort Which algod config to return - algod, kmd, or indexer OR a port number\n */\nexport function getDefaultLocalNetConfig(configOrPort: 'algod' | 'indexer' | 'kmd' | number): AlgoClientConfig {\n return ClientManager.getDefaultLocalNetConfig(configOrPort)\n}\n\n/**\n * @deprecated Use `ClientManager.getAlgodClient(config)` or `ClientManager.getAlgodClientFromEnvironment()` instead.\n *\n * Returns an algod SDK client that automatically retries transient failures on idempotent calls\n *\n * @param config The config if you want to override the default (getting config from process.env)\n * @example Default (load from environment variables)\n *\n * ```typescript\n * // Uses process.env.ALGOD_SERVER, process.env.ALGOD_PORT and process.env.ALGOD_TOKEN\n * // Automatically detects if you are using PureStake to switch in the right header name for ALGOD_TOKEN\n * const algod = getAlgoClient()\n * await algod.healthCheck().do()\n * ```\n * @example AlgoNode (testnet)\n * ```typescript\n * const algod = getAlgoClient(getAlgoNodeConfig('testnet', 'algod'))\n * await algod.healthCheck().do()\n * ```\n * @example AlgoNode (mainnet)\n * ```typescript\n * const algod = getAlgoClient(getAlgoNodeConfig('mainnet', 'algod'))\n * await algod.healthCheck().do()\n * ```\n * @example Custom (e.g. default LocalNet, although we recommend loading this into a .env and using the Default option instead)\n * ```typescript\n * const algod = getAlgoClient({server: 'http://localhost', port: '4001', token: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'})\n * await algod.healthCheck().do()\n * ```\n */\nexport function getAlgoClient(config?: AlgoClientConfig): Algodv2 {\n return config ? ClientManager.getAlgodClient(config) : ClientManager.getAlgodClientFromEnvironment()\n}\n\n/**\n * @deprecated Use `ClientManager.getIndexerClient(config, overrideIntDecoding)` or `ClientManager.getIndexerClientFromEnvironment(overrideIntDecoding)` instead.\n *\n * Returns an indexer SDK client that automatically retries transient failures on idempotent calls\n *\n * @param config The config if you want to override the default (getting config from process.env)\n * @param overrideIntDecoding Override the default int decoding for responses, uses MIXED by default to avoid lost precision for big integers\n * @example Default (load from environment variables)\n *\n * ```typescript\n * // Uses process.env.INDEXER_SERVER, process.env.INDEXER_PORT and process.env.INDEXER_TOKEN\n * const indexer = getAlgoIndexerClient()\n * await indexer.makeHealthCheck().do()\n * ```\n * @example AlgoNode (testnet)\n * ```typescript\n * const indexer = getAlgoIndexerClient(getAlgoNodeConfig('testnet', 'indexer'))\n * await indexer.makeHealthCheck().do()\n * ```\n * @example AlgoNode (mainnet)\n * ```typescript\n * const indexer = getAlgoIndexerClient(getAlgoNodeConfig('mainnet', 'indexer'))\n * await indexer.makeHealthCheck().do()\n * ```\n * @example Custom (e.g. default LocalNet, although we recommend loading this into a .env and using the Default option instead)\n * ```typescript\n * const indexer = getAlgoIndexerClient({server: 'http://localhost', port: '8980', token: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'})\n * await indexer.makeHealthCheck().do()\n * ```\n * @example Override int decoding for responses\n * ```typescript\n * const indexer = getAlgoIndexerClient(config, IntDecoding.BIGINT)\n * ```\n */\nexport function getAlgoIndexerClient(config?: AlgoClientConfig, overrideIntDecoding?: IntDecoding): Indexer {\n return config\n ? ClientManager.getIndexerClient(config, overrideIntDecoding)\n : ClientManager.getIndexerClientFromEnvironment(overrideIntDecoding)\n}\n\n/**\n * @deprecated Use `ClientManager.getKmdClient(config)` or `ClientManager.getKmdClientFromEnvironment()` instead.\n *\n * Returns a KMD SDK client that automatically retries transient failures on idempotent calls.\n *\n * KMD client allows you to export private keys, which is useful to get the default account in a LocalNet network.\n *\n * @param config The config if you want to override the default (getting config from process.env)\n * @example Default (load from environment variables)\n *\n * ```typescript\n * // Uses process.env.ALGOD_SERVER, process.env.KMD_PORT (or if not specified: port 4002) and process.env.ALGOD_TOKEN\n * const kmd = getAlgoKmdClient()\n * ```\n * @example Custom (e.g. default LocalNet, although we recommend loading this into a .env and using the Default option instead)\n * ```typescript\n * const kmd = getAlgoKmdClient({server: 'http://localhost', port: '4002', token: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'})\n * ```\n */\nexport function getAlgoKmdClient(config?: AlgoClientConfig): Kmd {\n return config ? ClientManager.getKmdClient(config) : ClientManager.getKmdClientFromEnvironment()\n}\n\n/** @deprecated Use `await algorand.client.isTestNet()` or `await new ClientManager({ algod }).isTestNet()` instead. */\nexport async function isTestNet(algod: Algodv2): Promise<boolean> {\n return await new ClientManager({ algod }).isTestNet()\n}\n\n/** @deprecated Use `await algorand.client.isMainNet()` or `await new ClientManager({ algod }).isMainNet()` instead. */\nexport async function isMainNet(algod: Algodv2): Promise<boolean> {\n return await new ClientManager({ algod }).isMainNet()\n}\n"],"names":["ClientManager"],"mappings":";;;;AAQA;;;;AAIG;SACa,0BAA0B,GAAA;AACxC,IAAA,OAAOA,iCAAa,CAAC,kCAAkC,EAAE;AAC3D;AAEA;;;;AAIG;SACa,6BAA6B,GAAA;AAC3C,IAAA,OAAOA,iCAAa,CAAC,6BAA6B,EAAE;AACtD;AAEA;;;;AAIG;SACa,+BAA+B,GAAA;AAC7C,IAAA,OAAOA,iCAAa,CAAC,+BAA+B,EAAE;AACxD;AAEA;;;;;;;AAOG;AACa,SAAA,iBAAiB,CAAC,OAA8B,EAAE,MAA2B,EAAA;IAC3F,OAAOA,iCAAa,CAAC,iBAAiB,CAAC,OAAO,EAAE,MAAM,CAAC;AACzD;AAEA;;;;;;AAMG;AACG,SAAU,wBAAwB,CAAC,YAAkD,EAAA;AACzF,IAAA,OAAOA,iCAAa,CAAC,wBAAwB,CAAC,YAAY,CAAC;AAC7D;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6BG;AACG,SAAU,aAAa,CAAC,MAAyB,EAAA;AACrD,IAAA,OAAO,MAAM,GAAGA,iCAAa,CAAC,cAAc,CAAC,MAAM,CAAC,GAAGA,iCAAa,CAAC,6BAA6B,EAAE;AACtG;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiCG;AACa,SAAA,oBAAoB,CAAC,MAAyB,EAAE,mBAAiC,EAAA;AAC/F,IAAA,OAAO;UACHA,iCAAa,CAAC,gBAAgB,CAAC,MAAM,EAAE,mBAAmB;AAC5D,UAAEA,iCAAa,CAAC,+BAA+B,CAAC,mBAAmB,CAAC;AACxE;AAEA;;;;;;;;;;;;;;;;;;AAkBG;AACG,SAAU,gBAAgB,CAAC,MAAyB,EAAA;AACxD,IAAA,OAAO,MAAM,GAAGA,iCAAa,CAAC,YAAY,CAAC,MAAM,CAAC,GAAGA,iCAAa,CAAC,2BAA2B,EAAE;AAClG;AAEA;AACO,eAAe,SAAS,CAAC,KAAc,EAAA;IAC5C,OAAO,MAAM,IAAIA,iCAAa,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,SAAS,EAAE;AACvD;AAEA;AACO,eAAe,SAAS,CAAC,KAAc,EAAA;IAC5C,OAAO,MAAM,IAAIA,iCAAa,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,SAAS,EAAE;AACvD;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"network-client.js","sources":["../src/network-client.ts"],"sourcesContent":["import algosdk from 'algosdk'\nimport { ClientManager } from './types/client-manager'\nimport { AlgoClientConfig, AlgoConfig } from './types/network-client'\nimport Algodv2 = algosdk.Algodv2\nimport Indexer = algosdk.Indexer\nimport Kmd = algosdk.Kmd\n\n/**\n * @deprecated Use `ClientManager.getConfigFromEnvironmentOrLocalNet()` instead.\n *\n * Retrieve configurations from environment variables when defined or get defaults (expects to be called from a Node.js environment not algod-side)\n */\nexport function getConfigFromEnvOrDefaults(): AlgoConfig {\n return ClientManager.getConfigFromEnvironmentOrLocalNet()\n}\n\n/**\n * @deprecated Use `ClientManager.getAlgodConfigFromEnvironment()` instead.\n *\n * Retrieve the algod configuration from environment variables (expects to be called from a Node.js environment not algod-side)\n */\nexport function getAlgodConfigFromEnvironment(): AlgoClientConfig {\n return ClientManager.getAlgodConfigFromEnvironment()\n}\n\n/**\n * @deprecated Use `ClientManager.getIndexerConfigFromEnvironment()` instead.\n *\n * Retrieve the indexer configuration from environment variables (expects to be called from a Node.js environment not algod-side)\n */\nexport function getIndexerConfigFromEnvironment(): AlgoClientConfig {\n return ClientManager.getIndexerConfigFromEnvironment()\n}\n\n/**\n * @deprecated Use `ClientManager.getAlgoNodeConfig(network, config)` instead.\n *\n * Returns the Algorand configuration to point to the AlgoNode service\n *\n * @param network Which network to connect to - TestNet or MainNet\n * @param config Which algod config to return - Algod or Indexer\n */\nexport function getAlgoNodeConfig(network: 'testnet' | 'mainnet', config: 'algod' | 'indexer'): AlgoClientConfig {\n return ClientManager.getAlgoNodeConfig(network, config)\n}\n\n/**\n * @deprecated Use `ClientManager.getDefaultLocalNetConfig(configOrPort)` instead.\n *\n * Returns the Algorand configuration to point to the default LocalNet\n *\n * @param configOrPort Which algod config to return - algod, kmd, or indexer OR a port number\n */\nexport function getDefaultLocalNetConfig(configOrPort: 'algod' | 'indexer' | 'kmd' | number): AlgoClientConfig {\n return ClientManager.getDefaultLocalNetConfig(configOrPort)\n}\n\n/**\n * @deprecated Use `ClientManager.getAlgodClient(config)` or `ClientManager.getAlgodClientFromEnvironment()` instead.\n *\n * Returns an algod SDK client that automatically retries transient failures on idempotent calls\n *\n * @param config The config if you want to override the default (getting config from process.env)\n * @example Default (load from environment variables)\n *\n * ```typescript\n * // Uses process.env.ALGOD_SERVER, process.env.ALGOD_PORT and process.env.ALGOD_TOKEN\n * // Automatically detects if you are using PureStake to switch in the right header name for ALGOD_TOKEN\n * const algod = getAlgoClient()\n * await algod.healthCheck().do()\n * ```\n * @example AlgoNode (testnet)\n * ```typescript\n * const algod = getAlgoClient(getAlgoNodeConfig('testnet', 'algod'))\n * await algod.healthCheck().do()\n * ```\n * @example AlgoNode (mainnet)\n * ```typescript\n * const algod = getAlgoClient(getAlgoNodeConfig('mainnet', 'algod'))\n * await algod.healthCheck().do()\n * ```\n * @example Custom (e.g. default LocalNet, although we recommend loading this into a .env and using the Default option instead)\n * ```typescript\n * const algod = getAlgoClient({server: 'http://localhost', port: '4001', token: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'})\n * await algod.healthCheck().do()\n * ```\n */\nexport function getAlgoClient(config?: AlgoClientConfig): Algodv2 {\n return config ? ClientManager.getAlgodClient(config) : ClientManager.getAlgodClientFromEnvironment()\n}\n\n/**\n * @deprecated Use `ClientManager.getIndexerClient(config, overrideIntDecoding)` or `ClientManager.getIndexerClientFromEnvironment(overrideIntDecoding)` instead.\n *\n * Returns an indexer SDK client that automatically retries transient failures on idempotent calls\n *\n * @param config The config if you want to override the default (getting config from process.env)\n * @example Default (load from environment variables)\n *\n * ```typescript\n * // Uses process.env.INDEXER_SERVER, process.env.INDEXER_PORT and process.env.INDEXER_TOKEN\n * const indexer = getAlgoIndexerClient()\n * await indexer.makeHealthCheck().do()\n * ```\n * @example AlgoNode (testnet)\n * ```typescript\n * const indexer = getAlgoIndexerClient(getAlgoNodeConfig('testnet', 'indexer'))\n * await indexer.makeHealthCheck().do()\n * ```\n * @example AlgoNode (mainnet)\n * ```typescript\n * const indexer = getAlgoIndexerClient(getAlgoNodeConfig('mainnet', 'indexer'))\n * await indexer.makeHealthCheck().do()\n * ```\n * @example Custom (e.g. default LocalNet, although we recommend loading this into a .env and using the Default option instead)\n * ```typescript\n * const indexer = getAlgoIndexerClient({server: 'http://localhost', port: '8980', token: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'})\n * await indexer.makeHealthCheck().do()\n * ```\n */\nexport function getAlgoIndexerClient(config?: AlgoClientConfig): Indexer {\n return config ? ClientManager.getIndexerClient(config) : ClientManager.getIndexerClientFromEnvironment()\n}\n\n/**\n * @deprecated Use `ClientManager.getKmdClient(config)` or `ClientManager.getKmdClientFromEnvironment()` instead.\n *\n * Returns a KMD SDK client that automatically retries transient failures on idempotent calls.\n *\n * KMD client allows you to export private keys, which is useful to get the default account in a LocalNet network.\n *\n * @param config The config if you want to override the default (getting config from process.env)\n * @example Default (load from environment variables)\n *\n * ```typescript\n * // Uses process.env.ALGOD_SERVER, process.env.KMD_PORT (or if not specified: port 4002) and process.env.ALGOD_TOKEN\n * const kmd = getAlgoKmdClient()\n * ```\n * @example Custom (e.g. default LocalNet, although we recommend loading this into a .env and using the Default option instead)\n * ```typescript\n * const kmd = getAlgoKmdClient({server: 'http://localhost', port: '4002', token: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'})\n * ```\n */\nexport function getAlgoKmdClient(config?: AlgoClientConfig): Kmd {\n return config ? ClientManager.getKmdClient(config) : ClientManager.getKmdClientFromEnvironment()\n}\n\n/** @deprecated Use `await algorand.client.isTestNet()` or `await new ClientManager({ algod }).isTestNet()` instead. */\nexport async function isTestNet(algod: Algodv2): Promise<boolean> {\n return await new ClientManager({ algod }).isTestNet()\n}\n\n/** @deprecated Use `await algorand.client.isMainNet()` or `await new ClientManager({ algod }).isMainNet()` instead. */\nexport async function isMainNet(algod: Algodv2): Promise<boolean> {\n return await new ClientManager({ algod }).isMainNet()\n}\n"],"names":["ClientManager"],"mappings":";;;;AAOA;;;;AAIG;SACa,0BAA0B,GAAA;AACxC,IAAA,OAAOA,iCAAa,CAAC,kCAAkC,EAAE;AAC3D;AAEA;;;;AAIG;SACa,6BAA6B,GAAA;AAC3C,IAAA,OAAOA,iCAAa,CAAC,6BAA6B,EAAE;AACtD;AAEA;;;;AAIG;SACa,+BAA+B,GAAA;AAC7C,IAAA,OAAOA,iCAAa,CAAC,+BAA+B,EAAE;AACxD;AAEA;;;;;;;AAOG;AACa,SAAA,iBAAiB,CAAC,OAA8B,EAAE,MAA2B,EAAA;IAC3F,OAAOA,iCAAa,CAAC,iBAAiB,CAAC,OAAO,EAAE,MAAM,CAAC;AACzD;AAEA;;;;;;AAMG;AACG,SAAU,wBAAwB,CAAC,YAAkD,EAAA;AACzF,IAAA,OAAOA,iCAAa,CAAC,wBAAwB,CAAC,YAAY,CAAC;AAC7D;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6BG;AACG,SAAU,aAAa,CAAC,MAAyB,EAAA;AACrD,IAAA,OAAO,MAAM,GAAGA,iCAAa,CAAC,cAAc,CAAC,MAAM,CAAC,GAAGA,iCAAa,CAAC,6BAA6B,EAAE;AACtG;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4BG;AACG,SAAU,oBAAoB,CAAC,MAAyB,EAAA;AAC5D,IAAA,OAAO,MAAM,GAAGA,iCAAa,CAAC,gBAAgB,CAAC,MAAM,CAAC,GAAGA,iCAAa,CAAC,+BAA+B,EAAE;AAC1G;AAEA;;;;;;;;;;;;;;;;;;AAkBG;AACG,SAAU,gBAAgB,CAAC,MAAyB,EAAA;AACxD,IAAA,OAAO,MAAM,GAAGA,iCAAa,CAAC,YAAY,CAAC,MAAM,CAAC,GAAGA,iCAAa,CAAC,2BAA2B,EAAE;AAClG;AAEA;AACO,eAAe,SAAS,CAAC,KAAc,EAAA;IAC5C,OAAO,MAAM,IAAIA,iCAAa,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,SAAS,EAAE;AACvD;AAEA;AACO,eAAe,SAAS,CAAC,KAAc,EAAA;IAC5C,OAAO,MAAM,IAAIA,iCAAa,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,SAAS,EAAE;AACvD;;;;;;;;;;;;;"}
@@ -84,7 +84,6 @@ function getAlgoClient(config) {
84
84
  * Returns an indexer SDK client that automatically retries transient failures on idempotent calls
85
85
  *
86
86
  * @param config The config if you want to override the default (getting config from process.env)
87
- * @param overrideIntDecoding Override the default int decoding for responses, uses MIXED by default to avoid lost precision for big integers
88
87
  * @example Default (load from environment variables)
89
88
  *
90
89
  * ```typescript
@@ -107,15 +106,9 @@ function getAlgoClient(config) {
107
106
  * const indexer = getAlgoIndexerClient({server: 'http://localhost', port: '8980', token: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'})
108
107
  * await indexer.makeHealthCheck().do()
109
108
  * ```
110
- * @example Override int decoding for responses
111
- * ```typescript
112
- * const indexer = getAlgoIndexerClient(config, IntDecoding.BIGINT)
113
- * ```
114
109
  */
115
- function getAlgoIndexerClient(config, overrideIntDecoding) {
116
- return config
117
- ? ClientManager.getIndexerClient(config, overrideIntDecoding)
118
- : ClientManager.getIndexerClientFromEnvironment(overrideIntDecoding);
110
+ function getAlgoIndexerClient(config) {
111
+ return config ? ClientManager.getIndexerClient(config) : ClientManager.getIndexerClientFromEnvironment();
119
112
  }
120
113
  /**
121
114
  * @deprecated Use `ClientManager.getKmdClient(config)` or `ClientManager.getKmdClientFromEnvironment()` instead.
@@ -1 +1 @@
1
- {"version":3,"file":"network-client.mjs","sources":["../src/network-client.ts"],"sourcesContent":["import algosdk from 'algosdk'\nimport { ClientManager } from './types/client-manager'\nimport { AlgoClientConfig, AlgoConfig } from './types/network-client'\nimport Algodv2 = algosdk.Algodv2\nimport Indexer = algosdk.Indexer\nimport Kmd = algosdk.Kmd\nimport IntDecoding = algosdk.IntDecoding\n\n/**\n * @deprecated Use `ClientManager.getConfigFromEnvironmentOrLocalNet()` instead.\n *\n * Retrieve configurations from environment variables when defined or get defaults (expects to be called from a Node.js environment not algod-side)\n */\nexport function getConfigFromEnvOrDefaults(): AlgoConfig {\n return ClientManager.getConfigFromEnvironmentOrLocalNet()\n}\n\n/**\n * @deprecated Use `ClientManager.getAlgodConfigFromEnvironment()` instead.\n *\n * Retrieve the algod configuration from environment variables (expects to be called from a Node.js environment not algod-side)\n */\nexport function getAlgodConfigFromEnvironment(): AlgoClientConfig {\n return ClientManager.getAlgodConfigFromEnvironment()\n}\n\n/**\n * @deprecated Use `ClientManager.getIndexerConfigFromEnvironment()` instead.\n *\n * Retrieve the indexer configuration from environment variables (expects to be called from a Node.js environment not algod-side)\n */\nexport function getIndexerConfigFromEnvironment(): AlgoClientConfig {\n return ClientManager.getIndexerConfigFromEnvironment()\n}\n\n/**\n * @deprecated Use `ClientManager.getAlgoNodeConfig(network, config)` instead.\n *\n * Returns the Algorand configuration to point to the AlgoNode service\n *\n * @param network Which network to connect to - TestNet or MainNet\n * @param config Which algod config to return - Algod or Indexer\n */\nexport function getAlgoNodeConfig(network: 'testnet' | 'mainnet', config: 'algod' | 'indexer'): AlgoClientConfig {\n return ClientManager.getAlgoNodeConfig(network, config)\n}\n\n/**\n * @deprecated Use `ClientManager.getDefaultLocalNetConfig(configOrPort)` instead.\n *\n * Returns the Algorand configuration to point to the default LocalNet\n *\n * @param configOrPort Which algod config to return - algod, kmd, or indexer OR a port number\n */\nexport function getDefaultLocalNetConfig(configOrPort: 'algod' | 'indexer' | 'kmd' | number): AlgoClientConfig {\n return ClientManager.getDefaultLocalNetConfig(configOrPort)\n}\n\n/**\n * @deprecated Use `ClientManager.getAlgodClient(config)` or `ClientManager.getAlgodClientFromEnvironment()` instead.\n *\n * Returns an algod SDK client that automatically retries transient failures on idempotent calls\n *\n * @param config The config if you want to override the default (getting config from process.env)\n * @example Default (load from environment variables)\n *\n * ```typescript\n * // Uses process.env.ALGOD_SERVER, process.env.ALGOD_PORT and process.env.ALGOD_TOKEN\n * // Automatically detects if you are using PureStake to switch in the right header name for ALGOD_TOKEN\n * const algod = getAlgoClient()\n * await algod.healthCheck().do()\n * ```\n * @example AlgoNode (testnet)\n * ```typescript\n * const algod = getAlgoClient(getAlgoNodeConfig('testnet', 'algod'))\n * await algod.healthCheck().do()\n * ```\n * @example AlgoNode (mainnet)\n * ```typescript\n * const algod = getAlgoClient(getAlgoNodeConfig('mainnet', 'algod'))\n * await algod.healthCheck().do()\n * ```\n * @example Custom (e.g. default LocalNet, although we recommend loading this into a .env and using the Default option instead)\n * ```typescript\n * const algod = getAlgoClient({server: 'http://localhost', port: '4001', token: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'})\n * await algod.healthCheck().do()\n * ```\n */\nexport function getAlgoClient(config?: AlgoClientConfig): Algodv2 {\n return config ? ClientManager.getAlgodClient(config) : ClientManager.getAlgodClientFromEnvironment()\n}\n\n/**\n * @deprecated Use `ClientManager.getIndexerClient(config, overrideIntDecoding)` or `ClientManager.getIndexerClientFromEnvironment(overrideIntDecoding)` instead.\n *\n * Returns an indexer SDK client that automatically retries transient failures on idempotent calls\n *\n * @param config The config if you want to override the default (getting config from process.env)\n * @param overrideIntDecoding Override the default int decoding for responses, uses MIXED by default to avoid lost precision for big integers\n * @example Default (load from environment variables)\n *\n * ```typescript\n * // Uses process.env.INDEXER_SERVER, process.env.INDEXER_PORT and process.env.INDEXER_TOKEN\n * const indexer = getAlgoIndexerClient()\n * await indexer.makeHealthCheck().do()\n * ```\n * @example AlgoNode (testnet)\n * ```typescript\n * const indexer = getAlgoIndexerClient(getAlgoNodeConfig('testnet', 'indexer'))\n * await indexer.makeHealthCheck().do()\n * ```\n * @example AlgoNode (mainnet)\n * ```typescript\n * const indexer = getAlgoIndexerClient(getAlgoNodeConfig('mainnet', 'indexer'))\n * await indexer.makeHealthCheck().do()\n * ```\n * @example Custom (e.g. default LocalNet, although we recommend loading this into a .env and using the Default option instead)\n * ```typescript\n * const indexer = getAlgoIndexerClient({server: 'http://localhost', port: '8980', token: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'})\n * await indexer.makeHealthCheck().do()\n * ```\n * @example Override int decoding for responses\n * ```typescript\n * const indexer = getAlgoIndexerClient(config, IntDecoding.BIGINT)\n * ```\n */\nexport function getAlgoIndexerClient(config?: AlgoClientConfig, overrideIntDecoding?: IntDecoding): Indexer {\n return config\n ? ClientManager.getIndexerClient(config, overrideIntDecoding)\n : ClientManager.getIndexerClientFromEnvironment(overrideIntDecoding)\n}\n\n/**\n * @deprecated Use `ClientManager.getKmdClient(config)` or `ClientManager.getKmdClientFromEnvironment()` instead.\n *\n * Returns a KMD SDK client that automatically retries transient failures on idempotent calls.\n *\n * KMD client allows you to export private keys, which is useful to get the default account in a LocalNet network.\n *\n * @param config The config if you want to override the default (getting config from process.env)\n * @example Default (load from environment variables)\n *\n * ```typescript\n * // Uses process.env.ALGOD_SERVER, process.env.KMD_PORT (or if not specified: port 4002) and process.env.ALGOD_TOKEN\n * const kmd = getAlgoKmdClient()\n * ```\n * @example Custom (e.g. default LocalNet, although we recommend loading this into a .env and using the Default option instead)\n * ```typescript\n * const kmd = getAlgoKmdClient({server: 'http://localhost', port: '4002', token: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'})\n * ```\n */\nexport function getAlgoKmdClient(config?: AlgoClientConfig): Kmd {\n return config ? ClientManager.getKmdClient(config) : ClientManager.getKmdClientFromEnvironment()\n}\n\n/** @deprecated Use `await algorand.client.isTestNet()` or `await new ClientManager({ algod }).isTestNet()` instead. */\nexport async function isTestNet(algod: Algodv2): Promise<boolean> {\n return await new ClientManager({ algod }).isTestNet()\n}\n\n/** @deprecated Use `await algorand.client.isMainNet()` or `await new ClientManager({ algod }).isMainNet()` instead. */\nexport async function isMainNet(algod: Algodv2): Promise<boolean> {\n return await new ClientManager({ algod }).isMainNet()\n}\n"],"names":[],"mappings":";;AAQA;;;;AAIG;SACa,0BAA0B,GAAA;AACxC,IAAA,OAAO,aAAa,CAAC,kCAAkC,EAAE;AAC3D;AAEA;;;;AAIG;SACa,6BAA6B,GAAA;AAC3C,IAAA,OAAO,aAAa,CAAC,6BAA6B,EAAE;AACtD;AAEA;;;;AAIG;SACa,+BAA+B,GAAA;AAC7C,IAAA,OAAO,aAAa,CAAC,+BAA+B,EAAE;AACxD;AAEA;;;;;;;AAOG;AACa,SAAA,iBAAiB,CAAC,OAA8B,EAAE,MAA2B,EAAA;IAC3F,OAAO,aAAa,CAAC,iBAAiB,CAAC,OAAO,EAAE,MAAM,CAAC;AACzD;AAEA;;;;;;AAMG;AACG,SAAU,wBAAwB,CAAC,YAAkD,EAAA;AACzF,IAAA,OAAO,aAAa,CAAC,wBAAwB,CAAC,YAAY,CAAC;AAC7D;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6BG;AACG,SAAU,aAAa,CAAC,MAAyB,EAAA;AACrD,IAAA,OAAO,MAAM,GAAG,aAAa,CAAC,cAAc,CAAC,MAAM,CAAC,GAAG,aAAa,CAAC,6BAA6B,EAAE;AACtG;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiCG;AACa,SAAA,oBAAoB,CAAC,MAAyB,EAAE,mBAAiC,EAAA;AAC/F,IAAA,OAAO;UACH,aAAa,CAAC,gBAAgB,CAAC,MAAM,EAAE,mBAAmB;AAC5D,UAAE,aAAa,CAAC,+BAA+B,CAAC,mBAAmB,CAAC;AACxE;AAEA;;;;;;;;;;;;;;;;;;AAkBG;AACG,SAAU,gBAAgB,CAAC,MAAyB,EAAA;AACxD,IAAA,OAAO,MAAM,GAAG,aAAa,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,aAAa,CAAC,2BAA2B,EAAE;AAClG;AAEA;AACO,eAAe,SAAS,CAAC,KAAc,EAAA;IAC5C,OAAO,MAAM,IAAI,aAAa,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,SAAS,EAAE;AACvD;AAEA;AACO,eAAe,SAAS,CAAC,KAAc,EAAA;IAC5C,OAAO,MAAM,IAAI,aAAa,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,SAAS,EAAE;AACvD;;;;"}
1
+ {"version":3,"file":"network-client.mjs","sources":["../src/network-client.ts"],"sourcesContent":["import algosdk from 'algosdk'\nimport { ClientManager } from './types/client-manager'\nimport { AlgoClientConfig, AlgoConfig } from './types/network-client'\nimport Algodv2 = algosdk.Algodv2\nimport Indexer = algosdk.Indexer\nimport Kmd = algosdk.Kmd\n\n/**\n * @deprecated Use `ClientManager.getConfigFromEnvironmentOrLocalNet()` instead.\n *\n * Retrieve configurations from environment variables when defined or get defaults (expects to be called from a Node.js environment not algod-side)\n */\nexport function getConfigFromEnvOrDefaults(): AlgoConfig {\n return ClientManager.getConfigFromEnvironmentOrLocalNet()\n}\n\n/**\n * @deprecated Use `ClientManager.getAlgodConfigFromEnvironment()` instead.\n *\n * Retrieve the algod configuration from environment variables (expects to be called from a Node.js environment not algod-side)\n */\nexport function getAlgodConfigFromEnvironment(): AlgoClientConfig {\n return ClientManager.getAlgodConfigFromEnvironment()\n}\n\n/**\n * @deprecated Use `ClientManager.getIndexerConfigFromEnvironment()` instead.\n *\n * Retrieve the indexer configuration from environment variables (expects to be called from a Node.js environment not algod-side)\n */\nexport function getIndexerConfigFromEnvironment(): AlgoClientConfig {\n return ClientManager.getIndexerConfigFromEnvironment()\n}\n\n/**\n * @deprecated Use `ClientManager.getAlgoNodeConfig(network, config)` instead.\n *\n * Returns the Algorand configuration to point to the AlgoNode service\n *\n * @param network Which network to connect to - TestNet or MainNet\n * @param config Which algod config to return - Algod or Indexer\n */\nexport function getAlgoNodeConfig(network: 'testnet' | 'mainnet', config: 'algod' | 'indexer'): AlgoClientConfig {\n return ClientManager.getAlgoNodeConfig(network, config)\n}\n\n/**\n * @deprecated Use `ClientManager.getDefaultLocalNetConfig(configOrPort)` instead.\n *\n * Returns the Algorand configuration to point to the default LocalNet\n *\n * @param configOrPort Which algod config to return - algod, kmd, or indexer OR a port number\n */\nexport function getDefaultLocalNetConfig(configOrPort: 'algod' | 'indexer' | 'kmd' | number): AlgoClientConfig {\n return ClientManager.getDefaultLocalNetConfig(configOrPort)\n}\n\n/**\n * @deprecated Use `ClientManager.getAlgodClient(config)` or `ClientManager.getAlgodClientFromEnvironment()` instead.\n *\n * Returns an algod SDK client that automatically retries transient failures on idempotent calls\n *\n * @param config The config if you want to override the default (getting config from process.env)\n * @example Default (load from environment variables)\n *\n * ```typescript\n * // Uses process.env.ALGOD_SERVER, process.env.ALGOD_PORT and process.env.ALGOD_TOKEN\n * // Automatically detects if you are using PureStake to switch in the right header name for ALGOD_TOKEN\n * const algod = getAlgoClient()\n * await algod.healthCheck().do()\n * ```\n * @example AlgoNode (testnet)\n * ```typescript\n * const algod = getAlgoClient(getAlgoNodeConfig('testnet', 'algod'))\n * await algod.healthCheck().do()\n * ```\n * @example AlgoNode (mainnet)\n * ```typescript\n * const algod = getAlgoClient(getAlgoNodeConfig('mainnet', 'algod'))\n * await algod.healthCheck().do()\n * ```\n * @example Custom (e.g. default LocalNet, although we recommend loading this into a .env and using the Default option instead)\n * ```typescript\n * const algod = getAlgoClient({server: 'http://localhost', port: '4001', token: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'})\n * await algod.healthCheck().do()\n * ```\n */\nexport function getAlgoClient(config?: AlgoClientConfig): Algodv2 {\n return config ? ClientManager.getAlgodClient(config) : ClientManager.getAlgodClientFromEnvironment()\n}\n\n/**\n * @deprecated Use `ClientManager.getIndexerClient(config, overrideIntDecoding)` or `ClientManager.getIndexerClientFromEnvironment(overrideIntDecoding)` instead.\n *\n * Returns an indexer SDK client that automatically retries transient failures on idempotent calls\n *\n * @param config The config if you want to override the default (getting config from process.env)\n * @example Default (load from environment variables)\n *\n * ```typescript\n * // Uses process.env.INDEXER_SERVER, process.env.INDEXER_PORT and process.env.INDEXER_TOKEN\n * const indexer = getAlgoIndexerClient()\n * await indexer.makeHealthCheck().do()\n * ```\n * @example AlgoNode (testnet)\n * ```typescript\n * const indexer = getAlgoIndexerClient(getAlgoNodeConfig('testnet', 'indexer'))\n * await indexer.makeHealthCheck().do()\n * ```\n * @example AlgoNode (mainnet)\n * ```typescript\n * const indexer = getAlgoIndexerClient(getAlgoNodeConfig('mainnet', 'indexer'))\n * await indexer.makeHealthCheck().do()\n * ```\n * @example Custom (e.g. default LocalNet, although we recommend loading this into a .env and using the Default option instead)\n * ```typescript\n * const indexer = getAlgoIndexerClient({server: 'http://localhost', port: '8980', token: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'})\n * await indexer.makeHealthCheck().do()\n * ```\n */\nexport function getAlgoIndexerClient(config?: AlgoClientConfig): Indexer {\n return config ? ClientManager.getIndexerClient(config) : ClientManager.getIndexerClientFromEnvironment()\n}\n\n/**\n * @deprecated Use `ClientManager.getKmdClient(config)` or `ClientManager.getKmdClientFromEnvironment()` instead.\n *\n * Returns a KMD SDK client that automatically retries transient failures on idempotent calls.\n *\n * KMD client allows you to export private keys, which is useful to get the default account in a LocalNet network.\n *\n * @param config The config if you want to override the default (getting config from process.env)\n * @example Default (load from environment variables)\n *\n * ```typescript\n * // Uses process.env.ALGOD_SERVER, process.env.KMD_PORT (or if not specified: port 4002) and process.env.ALGOD_TOKEN\n * const kmd = getAlgoKmdClient()\n * ```\n * @example Custom (e.g. default LocalNet, although we recommend loading this into a .env and using the Default option instead)\n * ```typescript\n * const kmd = getAlgoKmdClient({server: 'http://localhost', port: '4002', token: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'})\n * ```\n */\nexport function getAlgoKmdClient(config?: AlgoClientConfig): Kmd {\n return config ? ClientManager.getKmdClient(config) : ClientManager.getKmdClientFromEnvironment()\n}\n\n/** @deprecated Use `await algorand.client.isTestNet()` or `await new ClientManager({ algod }).isTestNet()` instead. */\nexport async function isTestNet(algod: Algodv2): Promise<boolean> {\n return await new ClientManager({ algod }).isTestNet()\n}\n\n/** @deprecated Use `await algorand.client.isMainNet()` or `await new ClientManager({ algod }).isMainNet()` instead. */\nexport async function isMainNet(algod: Algodv2): Promise<boolean> {\n return await new ClientManager({ algod }).isMainNet()\n}\n"],"names":[],"mappings":";;AAOA;;;;AAIG;SACa,0BAA0B,GAAA;AACxC,IAAA,OAAO,aAAa,CAAC,kCAAkC,EAAE;AAC3D;AAEA;;;;AAIG;SACa,6BAA6B,GAAA;AAC3C,IAAA,OAAO,aAAa,CAAC,6BAA6B,EAAE;AACtD;AAEA;;;;AAIG;SACa,+BAA+B,GAAA;AAC7C,IAAA,OAAO,aAAa,CAAC,+BAA+B,EAAE;AACxD;AAEA;;;;;;;AAOG;AACa,SAAA,iBAAiB,CAAC,OAA8B,EAAE,MAA2B,EAAA;IAC3F,OAAO,aAAa,CAAC,iBAAiB,CAAC,OAAO,EAAE,MAAM,CAAC;AACzD;AAEA;;;;;;AAMG;AACG,SAAU,wBAAwB,CAAC,YAAkD,EAAA;AACzF,IAAA,OAAO,aAAa,CAAC,wBAAwB,CAAC,YAAY,CAAC;AAC7D;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6BG;AACG,SAAU,aAAa,CAAC,MAAyB,EAAA;AACrD,IAAA,OAAO,MAAM,GAAG,aAAa,CAAC,cAAc,CAAC,MAAM,CAAC,GAAG,aAAa,CAAC,6BAA6B,EAAE;AACtG;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4BG;AACG,SAAU,oBAAoB,CAAC,MAAyB,EAAA;AAC5D,IAAA,OAAO,MAAM,GAAG,aAAa,CAAC,gBAAgB,CAAC,MAAM,CAAC,GAAG,aAAa,CAAC,+BAA+B,EAAE;AAC1G;AAEA;;;;;;;;;;;;;;;;;;AAkBG;AACG,SAAU,gBAAgB,CAAC,MAAyB,EAAA;AACxD,IAAA,OAAO,MAAM,GAAG,aAAa,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,aAAa,CAAC,2BAA2B,EAAE;AAClG;AAEA;AACO,eAAe,SAAS,CAAC,KAAc,EAAA;IAC5C,OAAO,MAAM,IAAI,aAAa,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,SAAS,EAAE;AACvD;AAEA;AACO,eAAe,SAAS,CAAC,KAAc,EAAA;IAC5C,OAAO,MAAM,IAAI,aAAa,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,SAAS,EAAE;AACvD;;;;"}
package/package.json CHANGED
@@ -6,7 +6,7 @@
6
6
  "**"
7
7
  ],
8
8
  "name": "@algorandfoundation/algokit-utils",
9
- "version": "7.0.0",
9
+ "version": "8.0.0-beta.1",
10
10
  "private": false,
11
11
  "description": "A set of core Algorand utilities written in TypeScript and released via npm that make it easier to build solutions on Algorand.",
12
12
  "author": "Algorand Foundation",
@@ -45,6 +45,6 @@
45
45
  "buffer": "^6.0.3"
46
46
  },
47
47
  "peerDependencies": {
48
- "algosdk": ">=2.9.0 <3.0"
48
+ "algosdk": "^3.0.0"
49
49
  }
50
50
  }
@@ -1,2 +1,3 @@
1
+ import { Address } from 'algosdk';
1
2
  import { AlgorandClient } from '../types/algorand-client';
2
- export declare function generateTestAsset(algorand: AlgorandClient, sender: string, total?: number): Promise<bigint>;
3
+ export declare function generateTestAsset(algorand: AlgorandClient, sender: Address | string, total?: number): Promise<bigint>;
@@ -1,5 +1,6 @@
1
- import algosdk from 'algosdk';
1
+ import algosdk, { Address } from 'algosdk';
2
2
  import { AlgorandClient } from '../';
3
+ import { TransactionSignerAccount } from '../types/account';
3
4
  import { GetTestAccountParams } from '../types/testing';
4
5
  import Account = algosdk.Account;
5
6
  import Algodv2 = algosdk.Algodv2;
@@ -16,7 +17,7 @@ import Kmd = algosdk.Kmd;
16
17
  * @param kmd A KMD client, if not specified then a default KMD client will be loaded from environment variables and if not found fallback to the default LocalNet KMD client
17
18
  * @returns The account, with private key loaded
18
19
  */
19
- export declare function getTestAccount(params: GetTestAccountParams, algod: Algodv2, kmd?: Kmd): Promise<Account>;
20
+ export declare function getTestAccount(params: GetTestAccountParams, algod: Algodv2, kmd?: Kmd): Promise<Address & Account & TransactionSignerAccount>;
20
21
  /**
21
22
  * Creates an ephemeral Algorand account for the purposes of testing.
22
23
  * Returns a newly created random test account that is funded from the dispenser
@@ -26,4 +27,4 @@ export declare function getTestAccount(params: GetTestAccountParams, algod: Algo
26
27
  * @param algorand An AlgorandClient client
27
28
  * @returns The account, with private key loaded
28
29
  */
29
- export declare function getTestAccount(params: GetTestAccountParams, algorand: AlgorandClient): Promise<Account>;
30
+ export declare function getTestAccount(params: GetTestAccountParams, algorand: AlgorandClient): Promise<Address & Account & TransactionSignerAccount>;
@@ -15,7 +15,7 @@ async function getTestAccount({ suppressLog, initialFunds, accountGetter }, algo
15
15
  config.Config.getLogger(suppressLog).info(`New test account created with address '${account.addr}' and mnemonic '${algosdk.secretKeyToMnemonic(account.sk)}'.`);
16
16
  const dispenser = await algorand.account.dispenserFromEnvironment();
17
17
  await algorand.send.payment({
18
- sender: dispenser.addr,
18
+ sender: dispenser,
19
19
  receiver: account.addr,
20
20
  amount: initialFunds,
21
21
  note: 'Funding test account',
@@ -23,7 +23,13 @@ async function getTestAccount({ suppressLog, initialFunds, accountGetter }, algo
23
23
  });
24
24
  const accountInfo = await algorand.account.getInformation(account.addr);
25
25
  config.Config.getLogger(suppressLog).info('Test account funded; account balance: %d µALGO', accountInfo.balance.microAlgo);
26
- return account;
26
+ algorand.setSignerFromAccount(account);
27
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
28
+ const address = algosdk.Address.fromString(account.addr.toString());
29
+ address.addr = account.addr;
30
+ address.sk = account.sk;
31
+ address.signer = algorand.account.getSigner(address);
32
+ return address;
27
33
  }
28
34
 
29
35
  exports.getTestAccount = getTestAccount;
@@ -1 +1 @@
1
- {"version":3,"file":"account.js","sources":["../../src/testing/account.ts"],"sourcesContent":["import algosdk from 'algosdk'\nimport { AlgorandClient, Config } from '../'\nimport { GetTestAccountParams } from '../types/testing'\nimport Account = algosdk.Account\nimport Algodv2 = algosdk.Algodv2\nimport Kmd = algosdk.Kmd\n\n/**\n * @deprecated Use `getTestAccount(params, algorandClient)` instead. The `algorandClient` object can be created using `AlgorandClient.fromClients({ algod, kmd })`.\n *\n * Creates an ephemeral Algorand account for the purposes of testing.\n * Returns a newly created random test account that is funded from the dispenser\n * DO NOT USE THIS TO CREATE A MAINNET ACCOUNT!\n * Note: By default this will log the mnemonic of the account.\n * @param params The config for the test account to generate\n * @param algod An algod client\n * @param kmd A KMD client, if not specified then a default KMD client will be loaded from environment variables and if not found fallback to the default LocalNet KMD client\n * @returns The account, with private key loaded\n */\nexport async function getTestAccount(params: GetTestAccountParams, algod: Algodv2, kmd?: Kmd): Promise<Account>\n/**\n * Creates an ephemeral Algorand account for the purposes of testing.\n * Returns a newly created random test account that is funded from the dispenser\n * DO NOT USE THIS TO CREATE A MAINNET ACCOUNT!\n * Note: By default this will log the mnemonic of the account.\n * @param params The config for the test account to generate\n * @param algorand An AlgorandClient client\n * @returns The account, with private key loaded\n */\nexport async function getTestAccount(params: GetTestAccountParams, algorand: AlgorandClient): Promise<Account>\nexport async function getTestAccount(\n { suppressLog, initialFunds, accountGetter }: GetTestAccountParams,\n algodOrAlgorandClient: Algodv2 | AlgorandClient,\n kmd?: Kmd,\n): Promise<Account> {\n const algorand =\n algodOrAlgorandClient instanceof AlgorandClient\n ? algodOrAlgorandClient\n : AlgorandClient.fromClients({\n algod: algodOrAlgorandClient,\n kmd,\n })\n\n const account = accountGetter ? await accountGetter(algorand) : algosdk.generateAccount()\n\n Config.getLogger(suppressLog).info(\n `New test account created with address '${account.addr}' and mnemonic '${algosdk.secretKeyToMnemonic(account.sk)}'.`,\n )\n\n const dispenser = await algorand.account.dispenserFromEnvironment()\n\n await algorand.send.payment({\n sender: dispenser.addr,\n receiver: account.addr,\n amount: initialFunds,\n note: 'Funding test account',\n suppressLog,\n })\n\n const accountInfo = await algorand.account.getInformation(account.addr)\n\n Config.getLogger(suppressLog).info('Test account funded; account balance: %d µALGO', accountInfo.balance.microAlgo)\n\n return account\n}\n"],"names":["AlgorandClient","Config"],"mappings":";;;;;;AA8BO,eAAe,cAAc,CAClC,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,EAAwB,EAClE,qBAA+C,EAC/C,GAAS,EAAA;AAET,IAAA,MAAM,QAAQ,GACZ,qBAAqB,YAAYA;AAC/B,UAAE;AACF,UAAEA,mCAAc,CAAC,WAAW,CAAC;AACzB,YAAA,KAAK,EAAE,qBAAqB;YAC5B,GAAG;AACJ,SAAA,CAAC;AAER,IAAA,MAAM,OAAO,GAAG,aAAa,GAAG,MAAM,aAAa,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,eAAe,EAAE;IAEzFC,aAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,IAAI,CAChC,CAAA,uCAAA,EAA0C,OAAO,CAAC,IAAI,CAAmB,gBAAA,EAAA,OAAO,CAAC,mBAAmB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAI,EAAA,CAAA,CACrH;IAED,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,wBAAwB,EAAE;AAEnE,IAAA,MAAM,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;QAC1B,MAAM,EAAE,SAAS,CAAC,IAAI;QACtB,QAAQ,EAAE,OAAO,CAAC,IAAI;AACtB,QAAA,MAAM,EAAE,YAAY;AACpB,QAAA,IAAI,EAAE,sBAAsB;QAC5B,WAAW;AACZ,KAAA,CAAC;AAEF,IAAA,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC;AAEvE,IAAAA,aAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,gDAAgD,EAAE,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC;AAEnH,IAAA,OAAO,OAAO;AAChB;;;;"}
1
+ {"version":3,"file":"account.js","sources":["../../src/testing/account.ts"],"sourcesContent":["import algosdk, { Address } from 'algosdk'\nimport { AlgorandClient, Config } from '../'\nimport { TransactionSignerAccount } from '../types/account'\nimport { GetTestAccountParams } from '../types/testing'\nimport Account = algosdk.Account\nimport Algodv2 = algosdk.Algodv2\nimport Kmd = algosdk.Kmd\n\n/**\n * @deprecated Use `getTestAccount(params, algorandClient)` instead. The `algorandClient` object can be created using `AlgorandClient.fromClients({ algod, kmd })`.\n *\n * Creates an ephemeral Algorand account for the purposes of testing.\n * Returns a newly created random test account that is funded from the dispenser\n * DO NOT USE THIS TO CREATE A MAINNET ACCOUNT!\n * Note: By default this will log the mnemonic of the account.\n * @param params The config for the test account to generate\n * @param algod An algod client\n * @param kmd A KMD client, if not specified then a default KMD client will be loaded from environment variables and if not found fallback to the default LocalNet KMD client\n * @returns The account, with private key loaded\n */\nexport async function getTestAccount(\n params: GetTestAccountParams,\n algod: Algodv2,\n kmd?: Kmd,\n): Promise<Address & Account & TransactionSignerAccount>\n/**\n * Creates an ephemeral Algorand account for the purposes of testing.\n * Returns a newly created random test account that is funded from the dispenser\n * DO NOT USE THIS TO CREATE A MAINNET ACCOUNT!\n * Note: By default this will log the mnemonic of the account.\n * @param params The config for the test account to generate\n * @param algorand An AlgorandClient client\n * @returns The account, with private key loaded\n */\nexport async function getTestAccount(\n params: GetTestAccountParams,\n algorand: AlgorandClient,\n): Promise<Address & Account & TransactionSignerAccount>\nexport async function getTestAccount(\n { suppressLog, initialFunds, accountGetter }: GetTestAccountParams,\n algodOrAlgorandClient: Algodv2 | AlgorandClient,\n kmd?: Kmd,\n): Promise<Address & Account & TransactionSignerAccount> {\n const algorand =\n algodOrAlgorandClient instanceof AlgorandClient\n ? algodOrAlgorandClient\n : AlgorandClient.fromClients({\n algod: algodOrAlgorandClient,\n kmd,\n })\n\n const account = accountGetter ? await accountGetter(algorand) : algosdk.generateAccount()\n\n Config.getLogger(suppressLog).info(\n `New test account created with address '${account.addr}' and mnemonic '${algosdk.secretKeyToMnemonic(account.sk)}'.`,\n )\n\n const dispenser = await algorand.account.dispenserFromEnvironment()\n\n await algorand.send.payment({\n sender: dispenser,\n receiver: account.addr,\n amount: initialFunds,\n note: 'Funding test account',\n suppressLog,\n })\n\n const accountInfo = await algorand.account.getInformation(account.addr)\n\n Config.getLogger(suppressLog).info('Test account funded; account balance: %d µALGO', accountInfo.balance.microAlgo)\n\n algorand.setSignerFromAccount(account)\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const address = Address.fromString(account.addr.toString()) as any\n address.addr = account.addr\n address.sk = account.sk\n address.signer = algorand.account.getSigner(address)\n\n return address\n}\n"],"names":["AlgorandClient","Config","Address"],"mappings":";;;;;;AAsCO,eAAe,cAAc,CAClC,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,EAAwB,EAClE,qBAA+C,EAC/C,GAAS,EAAA;AAET,IAAA,MAAM,QAAQ,GACZ,qBAAqB,YAAYA;AAC/B,UAAE;AACF,UAAEA,mCAAc,CAAC,WAAW,CAAC;AACzB,YAAA,KAAK,EAAE,qBAAqB;YAC5B,GAAG;AACJ,SAAA,CAAC;AAER,IAAA,MAAM,OAAO,GAAG,aAAa,GAAG,MAAM,aAAa,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,eAAe,EAAE;IAEzFC,aAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,IAAI,CAChC,CAAA,uCAAA,EAA0C,OAAO,CAAC,IAAI,CAAmB,gBAAA,EAAA,OAAO,CAAC,mBAAmB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAI,EAAA,CAAA,CACrH;IAED,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,wBAAwB,EAAE;AAEnE,IAAA,MAAM,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;AAC1B,QAAA,MAAM,EAAE,SAAS;QACjB,QAAQ,EAAE,OAAO,CAAC,IAAI;AACtB,QAAA,MAAM,EAAE,YAAY;AACpB,QAAA,IAAI,EAAE,sBAAsB;QAC5B,WAAW;AACZ,KAAA,CAAC;AAEF,IAAA,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC;AAEvE,IAAAA,aAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,gDAAgD,EAAE,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC;AAEnH,IAAA,QAAQ,CAAC,oBAAoB,CAAC,OAAO,CAAC;;AAGtC,IAAA,MAAM,OAAO,GAAGC,eAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAQ;AAClE,IAAA,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI;AAC3B,IAAA,OAAO,CAAC,EAAE,GAAG,OAAO,CAAC,EAAE;IACvB,OAAO,CAAC,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC;AAEpD,IAAA,OAAO,OAAO;AAChB;;;;"}
@@ -1,4 +1,4 @@
1
- import algosdk from 'algosdk';
1
+ import algosdk, { Address } from 'algosdk';
2
2
  import { AlgorandClient } from '../types/algorand-client.mjs';
3
3
  import { Config } from '../config.mjs';
4
4
 
@@ -13,7 +13,7 @@ async function getTestAccount({ suppressLog, initialFunds, accountGetter }, algo
13
13
  Config.getLogger(suppressLog).info(`New test account created with address '${account.addr}' and mnemonic '${algosdk.secretKeyToMnemonic(account.sk)}'.`);
14
14
  const dispenser = await algorand.account.dispenserFromEnvironment();
15
15
  await algorand.send.payment({
16
- sender: dispenser.addr,
16
+ sender: dispenser,
17
17
  receiver: account.addr,
18
18
  amount: initialFunds,
19
19
  note: 'Funding test account',
@@ -21,7 +21,13 @@ async function getTestAccount({ suppressLog, initialFunds, accountGetter }, algo
21
21
  });
22
22
  const accountInfo = await algorand.account.getInformation(account.addr);
23
23
  Config.getLogger(suppressLog).info('Test account funded; account balance: %d µALGO', accountInfo.balance.microAlgo);
24
- return account;
24
+ algorand.setSignerFromAccount(account);
25
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
26
+ const address = Address.fromString(account.addr.toString());
27
+ address.addr = account.addr;
28
+ address.sk = account.sk;
29
+ address.signer = algorand.account.getSigner(address);
30
+ return address;
25
31
  }
26
32
 
27
33
  export { getTestAccount };
@@ -1 +1 @@
1
- {"version":3,"file":"account.mjs","sources":["../../src/testing/account.ts"],"sourcesContent":["import algosdk from 'algosdk'\nimport { AlgorandClient, Config } from '../'\nimport { GetTestAccountParams } from '../types/testing'\nimport Account = algosdk.Account\nimport Algodv2 = algosdk.Algodv2\nimport Kmd = algosdk.Kmd\n\n/**\n * @deprecated Use `getTestAccount(params, algorandClient)` instead. The `algorandClient` object can be created using `AlgorandClient.fromClients({ algod, kmd })`.\n *\n * Creates an ephemeral Algorand account for the purposes of testing.\n * Returns a newly created random test account that is funded from the dispenser\n * DO NOT USE THIS TO CREATE A MAINNET ACCOUNT!\n * Note: By default this will log the mnemonic of the account.\n * @param params The config for the test account to generate\n * @param algod An algod client\n * @param kmd A KMD client, if not specified then a default KMD client will be loaded from environment variables and if not found fallback to the default LocalNet KMD client\n * @returns The account, with private key loaded\n */\nexport async function getTestAccount(params: GetTestAccountParams, algod: Algodv2, kmd?: Kmd): Promise<Account>\n/**\n * Creates an ephemeral Algorand account for the purposes of testing.\n * Returns a newly created random test account that is funded from the dispenser\n * DO NOT USE THIS TO CREATE A MAINNET ACCOUNT!\n * Note: By default this will log the mnemonic of the account.\n * @param params The config for the test account to generate\n * @param algorand An AlgorandClient client\n * @returns The account, with private key loaded\n */\nexport async function getTestAccount(params: GetTestAccountParams, algorand: AlgorandClient): Promise<Account>\nexport async function getTestAccount(\n { suppressLog, initialFunds, accountGetter }: GetTestAccountParams,\n algodOrAlgorandClient: Algodv2 | AlgorandClient,\n kmd?: Kmd,\n): Promise<Account> {\n const algorand =\n algodOrAlgorandClient instanceof AlgorandClient\n ? algodOrAlgorandClient\n : AlgorandClient.fromClients({\n algod: algodOrAlgorandClient,\n kmd,\n })\n\n const account = accountGetter ? await accountGetter(algorand) : algosdk.generateAccount()\n\n Config.getLogger(suppressLog).info(\n `New test account created with address '${account.addr}' and mnemonic '${algosdk.secretKeyToMnemonic(account.sk)}'.`,\n )\n\n const dispenser = await algorand.account.dispenserFromEnvironment()\n\n await algorand.send.payment({\n sender: dispenser.addr,\n receiver: account.addr,\n amount: initialFunds,\n note: 'Funding test account',\n suppressLog,\n })\n\n const accountInfo = await algorand.account.getInformation(account.addr)\n\n Config.getLogger(suppressLog).info('Test account funded; account balance: %d µALGO', accountInfo.balance.microAlgo)\n\n return account\n}\n"],"names":[],"mappings":";;;;AA8BO,eAAe,cAAc,CAClC,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,EAAwB,EAClE,qBAA+C,EAC/C,GAAS,EAAA;AAET,IAAA,MAAM,QAAQ,GACZ,qBAAqB,YAAY;AAC/B,UAAE;AACF,UAAE,cAAc,CAAC,WAAW,CAAC;AACzB,YAAA,KAAK,EAAE,qBAAqB;YAC5B,GAAG;AACJ,SAAA,CAAC;AAER,IAAA,MAAM,OAAO,GAAG,aAAa,GAAG,MAAM,aAAa,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,eAAe,EAAE;IAEzF,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,IAAI,CAChC,CAAA,uCAAA,EAA0C,OAAO,CAAC,IAAI,CAAmB,gBAAA,EAAA,OAAO,CAAC,mBAAmB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAI,EAAA,CAAA,CACrH;IAED,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,wBAAwB,EAAE;AAEnE,IAAA,MAAM,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;QAC1B,MAAM,EAAE,SAAS,CAAC,IAAI;QACtB,QAAQ,EAAE,OAAO,CAAC,IAAI;AACtB,QAAA,MAAM,EAAE,YAAY;AACpB,QAAA,IAAI,EAAE,sBAAsB;QAC5B,WAAW;AACZ,KAAA,CAAC;AAEF,IAAA,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC;AAEvE,IAAA,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,gDAAgD,EAAE,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC;AAEnH,IAAA,OAAO,OAAO;AAChB;;;;"}
1
+ {"version":3,"file":"account.mjs","sources":["../../src/testing/account.ts"],"sourcesContent":["import algosdk, { Address } from 'algosdk'\nimport { AlgorandClient, Config } from '../'\nimport { TransactionSignerAccount } from '../types/account'\nimport { GetTestAccountParams } from '../types/testing'\nimport Account = algosdk.Account\nimport Algodv2 = algosdk.Algodv2\nimport Kmd = algosdk.Kmd\n\n/**\n * @deprecated Use `getTestAccount(params, algorandClient)` instead. The `algorandClient` object can be created using `AlgorandClient.fromClients({ algod, kmd })`.\n *\n * Creates an ephemeral Algorand account for the purposes of testing.\n * Returns a newly created random test account that is funded from the dispenser\n * DO NOT USE THIS TO CREATE A MAINNET ACCOUNT!\n * Note: By default this will log the mnemonic of the account.\n * @param params The config for the test account to generate\n * @param algod An algod client\n * @param kmd A KMD client, if not specified then a default KMD client will be loaded from environment variables and if not found fallback to the default LocalNet KMD client\n * @returns The account, with private key loaded\n */\nexport async function getTestAccount(\n params: GetTestAccountParams,\n algod: Algodv2,\n kmd?: Kmd,\n): Promise<Address & Account & TransactionSignerAccount>\n/**\n * Creates an ephemeral Algorand account for the purposes of testing.\n * Returns a newly created random test account that is funded from the dispenser\n * DO NOT USE THIS TO CREATE A MAINNET ACCOUNT!\n * Note: By default this will log the mnemonic of the account.\n * @param params The config for the test account to generate\n * @param algorand An AlgorandClient client\n * @returns The account, with private key loaded\n */\nexport async function getTestAccount(\n params: GetTestAccountParams,\n algorand: AlgorandClient,\n): Promise<Address & Account & TransactionSignerAccount>\nexport async function getTestAccount(\n { suppressLog, initialFunds, accountGetter }: GetTestAccountParams,\n algodOrAlgorandClient: Algodv2 | AlgorandClient,\n kmd?: Kmd,\n): Promise<Address & Account & TransactionSignerAccount> {\n const algorand =\n algodOrAlgorandClient instanceof AlgorandClient\n ? algodOrAlgorandClient\n : AlgorandClient.fromClients({\n algod: algodOrAlgorandClient,\n kmd,\n })\n\n const account = accountGetter ? await accountGetter(algorand) : algosdk.generateAccount()\n\n Config.getLogger(suppressLog).info(\n `New test account created with address '${account.addr}' and mnemonic '${algosdk.secretKeyToMnemonic(account.sk)}'.`,\n )\n\n const dispenser = await algorand.account.dispenserFromEnvironment()\n\n await algorand.send.payment({\n sender: dispenser,\n receiver: account.addr,\n amount: initialFunds,\n note: 'Funding test account',\n suppressLog,\n })\n\n const accountInfo = await algorand.account.getInformation(account.addr)\n\n Config.getLogger(suppressLog).info('Test account funded; account balance: %d µALGO', accountInfo.balance.microAlgo)\n\n algorand.setSignerFromAccount(account)\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const address = Address.fromString(account.addr.toString()) as any\n address.addr = account.addr\n address.sk = account.sk\n address.signer = algorand.account.getSigner(address)\n\n return address\n}\n"],"names":[],"mappings":";;;;AAsCO,eAAe,cAAc,CAClC,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,EAAwB,EAClE,qBAA+C,EAC/C,GAAS,EAAA;AAET,IAAA,MAAM,QAAQ,GACZ,qBAAqB,YAAY;AAC/B,UAAE;AACF,UAAE,cAAc,CAAC,WAAW,CAAC;AACzB,YAAA,KAAK,EAAE,qBAAqB;YAC5B,GAAG;AACJ,SAAA,CAAC;AAER,IAAA,MAAM,OAAO,GAAG,aAAa,GAAG,MAAM,aAAa,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,eAAe,EAAE;IAEzF,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,IAAI,CAChC,CAAA,uCAAA,EAA0C,OAAO,CAAC,IAAI,CAAmB,gBAAA,EAAA,OAAO,CAAC,mBAAmB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAI,EAAA,CAAA,CACrH;IAED,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,wBAAwB,EAAE;AAEnE,IAAA,MAAM,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;AAC1B,QAAA,MAAM,EAAE,SAAS;QACjB,QAAQ,EAAE,OAAO,CAAC,IAAI;AACtB,QAAA,MAAM,EAAE,YAAY;AACpB,QAAA,IAAI,EAAE,sBAAsB;QAC5B,WAAW;AACZ,KAAA,CAAC;AAEF,IAAA,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC;AAEvE,IAAA,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,gDAAgD,EAAE,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC;AAEnH,IAAA,QAAQ,CAAC,oBAAoB,CAAC,OAAO,CAAC;;AAGtC,IAAA,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAQ;AAClE,IAAA,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI;AAC3B,IAAA,OAAO,CAAC,EAAE,GAAG,OAAO,CAAC,EAAE;IACvB,OAAO,CAAC,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC;AAEpD,IAAA,OAAO,OAAO;AAChB;;;;"}
@@ -6,7 +6,6 @@ var account = require('../account.js');
6
6
  var indexer = require('../indexer.js');
7
7
  var transactionLogger = require('../transaction-logger.js');
8
8
  var amount = require('../../amount.js');
9
- var indexerLookup = require('../../indexer-lookup.js');
10
9
  var config = require('../../config.js');
11
10
 
12
11
  function algorandFixture(fixtureConfig, config$1) {
@@ -24,14 +23,14 @@ function algorandFixture(fixtureConfig, config$1) {
24
23
  const transactionLogger$1 = new transactionLogger.TransactionLogger();
25
24
  const transactionLoggerAlgod = transactionLogger$1.capture(algod);
26
25
  algorand = types_algorandClient.AlgorandClient.fromClients({ algod: transactionLoggerAlgod, indexer: indexer$1, kmd });
27
- const acc = await account.getTestAccount({ initialFunds: fixtureConfig?.testAccountFunding ?? amount.algos(10), suppressLog: true }, algorand);
28
- algorand.setSignerFromAccount(acc).setSuggestedParamsCacheTimeout(0);
26
+ const testAccount = await account.getTestAccount({ initialFunds: fixtureConfig?.testAccountFunding ?? amount.algos(10), suppressLog: true }, algorand);
27
+ algorand.setSignerFromAccount(testAccount).setSuggestedParamsCacheTimeout(0);
29
28
  // If running against LocalNet we are likely in dev mode and we need to set a much higher validity window
30
29
  // otherwise we are more likely to get invalid transactions.
31
30
  if (await algorand.client.isLocalNet()) {
32
31
  algorand.setDefaultValidityWindow(1000);
33
32
  }
34
- const testAccount = { ...acc, signer: algorand.account.getSigner(acc.addr) };
33
+ algorand.account.setSignerFromAccount(testAccount);
35
34
  context = {
36
35
  algorand,
37
36
  algod: transactionLoggerAlgod,
@@ -41,11 +40,11 @@ function algorandFixture(fixtureConfig, config$1) {
41
40
  generateAccount: async (params) => {
42
41
  const account$1 = await account.getTestAccount(params, algorand);
43
42
  algorand.setSignerFromAccount(account$1);
44
- return { ...account$1, signer: algorand.account.getSigner(account$1.addr) };
43
+ return account$1;
45
44
  },
46
45
  transactionLogger: transactionLogger$1,
47
46
  waitForIndexer: () => transactionLogger$1.waitForIndexer(indexer$1),
48
- waitForIndexerTransaction: (transactionId) => indexer.runWhenIndexerCaughtUp(() => indexerLookup.lookupTransactionById(transactionId, indexer$1)),
47
+ waitForIndexerTransaction: (transactionId) => indexer.runWhenIndexerCaughtUp(() => indexer$1.lookupTransactionByID(transactionId).do()),
49
48
  };
50
49
  };
51
50
  return {