@algorandfoundation/algokit-utils 10.0.0-alpha.1 → 10.0.0-alpha.11

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 (317) hide show
  1. package/README.md +27 -5
  2. package/_virtual/rolldown_runtime.js +20 -11
  3. package/_virtual/rolldown_runtime.mjs +10 -5
  4. package/algo25/index.d.ts +2 -0
  5. package/algo25/index.js +9 -0
  6. package/algo25/index.mjs +3 -0
  7. package/algod-client/index.d.ts +2 -5
  8. package/package.json +1 -1
  9. package/packages/abi/src/abi-method.d.ts +1 -1
  10. package/packages/abi/src/abi-method.js.map +1 -1
  11. package/packages/abi/src/abi-method.mjs.map +1 -1
  12. package/packages/abi/src/abi-type.d.ts +1 -1
  13. package/packages/abi/src/abi-type.js +4 -2
  14. package/packages/abi/src/abi-type.js.map +1 -1
  15. package/packages/abi/src/abi-type.mjs +4 -2
  16. package/packages/abi/src/abi-type.mjs.map +1 -1
  17. package/packages/abi/src/arc56-contract.js +1 -0
  18. package/packages/abi/src/arc56-contract.js.map +1 -1
  19. package/packages/abi/src/arc56-contract.mjs +1 -0
  20. package/packages/abi/src/arc56-contract.mjs.map +1 -1
  21. package/packages/algo25/src/english.js.map +1 -1
  22. package/packages/algo25/src/english.mjs.map +1 -1
  23. package/packages/algo25/src/index.d.ts +40 -0
  24. package/packages/algo25/src/index.js +44 -0
  25. package/packages/algo25/src/index.js.map +1 -1
  26. package/packages/algo25/src/index.mjs +39 -1
  27. package/packages/algo25/src/index.mjs.map +1 -1
  28. package/packages/algod_client/src/apis/api-service.d.ts +44 -44
  29. package/packages/algod_client/src/apis/api-service.js +153 -153
  30. package/packages/algod_client/src/apis/api-service.js.map +1 -1
  31. package/packages/algod_client/src/apis/api-service.mjs +153 -153
  32. package/packages/algod_client/src/apis/api-service.mjs.map +1 -1
  33. package/packages/algod_client/src/core/api-error.js +3 -1
  34. package/packages/algod_client/src/core/api-error.js.map +1 -1
  35. package/packages/algod_client/src/core/api-error.mjs +3 -1
  36. package/packages/algod_client/src/core/api-error.mjs.map +1 -1
  37. package/packages/algod_client/src/core/model-runtime.js +4 -4
  38. package/packages/algod_client/src/core/model-runtime.js.map +1 -1
  39. package/packages/algod_client/src/core/model-runtime.mjs +6 -6
  40. package/packages/algod_client/src/core/model-runtime.mjs.map +1 -1
  41. package/packages/algod_client/src/models/account-participation.js +4 -4
  42. package/packages/algod_client/src/models/account-participation.js.map +1 -1
  43. package/packages/algod_client/src/models/account-participation.mjs +4 -4
  44. package/packages/algod_client/src/models/account-participation.mjs.map +1 -1
  45. package/packages/algod_client/src/models/application-state-schema.d.ts +2 -2
  46. package/packages/algod_client/src/models/application-state-schema.js +2 -2
  47. package/packages/algod_client/src/models/application-state-schema.js.map +1 -1
  48. package/packages/algod_client/src/models/application-state-schema.mjs +2 -2
  49. package/packages/algod_client/src/models/application-state-schema.mjs.map +1 -1
  50. package/packages/algod_client/src/models/asset-params.js +2 -1
  51. package/packages/algod_client/src/models/asset-params.js.map +1 -1
  52. package/packages/algod_client/src/models/asset-params.mjs +2 -1
  53. package/packages/algod_client/src/models/asset-params.mjs.map +1 -1
  54. package/packages/algod_client/src/models/block-response.js +1 -2
  55. package/packages/algod_client/src/models/block-response.js.map +1 -1
  56. package/packages/algod_client/src/models/block-response.mjs +2 -3
  57. package/packages/algod_client/src/models/block-response.mjs.map +1 -1
  58. package/packages/algod_client/src/models/block.d.ts +49 -29
  59. package/packages/algod_client/src/models/block.js +174 -98
  60. package/packages/algod_client/src/models/block.js.map +1 -1
  61. package/packages/algod_client/src/models/block.mjs +174 -98
  62. package/packages/algod_client/src/models/block.mjs.map +1 -1
  63. package/packages/algod_client/src/models/ledger-state-delta.js +1 -1
  64. package/packages/algod_client/src/models/ledger-state-delta.js.map +1 -1
  65. package/packages/algod_client/src/models/ledger-state-delta.mjs +2 -2
  66. package/packages/algod_client/src/models/ledger-state-delta.mjs.map +1 -1
  67. package/packages/algod_client/src/models/simulate-unnamed-resources-accessed.d.ts +3 -5
  68. package/packages/algod_client/src/models/simulate-unnamed-resources-accessed.js +4 -6
  69. package/packages/algod_client/src/models/simulate-unnamed-resources-accessed.js.map +1 -1
  70. package/packages/algod_client/src/models/simulate-unnamed-resources-accessed.mjs +3 -5
  71. package/packages/algod_client/src/models/simulate-unnamed-resources-accessed.mjs.map +1 -1
  72. package/packages/algod_client/src/models/transaction-parameters-response.js +2 -2
  73. package/packages/algod_client/src/models/transaction-parameters-response.js.map +1 -1
  74. package/packages/algod_client/src/models/transaction-parameters-response.mjs +2 -2
  75. package/packages/algod_client/src/models/transaction-parameters-response.mjs.map +1 -1
  76. package/packages/common/src/address.js +0 -14
  77. package/packages/common/src/address.js.map +1 -1
  78. package/packages/common/src/address.mjs +1 -14
  79. package/packages/common/src/address.mjs.map +1 -1
  80. package/packages/common/src/codecs/composite/map.js +7 -4
  81. package/packages/common/src/codecs/composite/map.js.map +1 -1
  82. package/packages/common/src/codecs/composite/map.mjs +7 -4
  83. package/packages/common/src/codecs/composite/map.mjs.map +1 -1
  84. package/packages/common/src/codecs/composite/record.js +0 -1
  85. package/packages/common/src/codecs/composite/record.js.map +1 -1
  86. package/packages/common/src/codecs/primitives/address.js +0 -1
  87. package/packages/common/src/codecs/primitives/address.js.map +1 -1
  88. package/packages/common/src/codecs/primitives/bytes.js +0 -1
  89. package/packages/common/src/codecs/primitives/bytes.js.map +1 -1
  90. package/packages/common/src/codecs/primitives/fixed-bytes.js +0 -1
  91. package/packages/common/src/codecs/primitives/fixed-bytes.js.map +1 -1
  92. package/packages/common/src/codecs/wire.js +0 -1
  93. package/packages/common/src/codecs/wire.js.map +1 -1
  94. package/packages/common/src/msgpack.js +0 -1
  95. package/packages/common/src/msgpack.js.map +1 -1
  96. package/packages/indexer_client/src/apis/api-service.d.ts +1 -1
  97. package/packages/indexer_client/src/apis/api-service.js +12 -12
  98. package/packages/indexer_client/src/apis/api-service.js.map +1 -1
  99. package/packages/indexer_client/src/apis/api-service.mjs +12 -12
  100. package/packages/indexer_client/src/apis/api-service.mjs.map +1 -1
  101. package/packages/indexer_client/src/core/api-error.js +3 -1
  102. package/packages/indexer_client/src/core/api-error.js.map +1 -1
  103. package/packages/indexer_client/src/core/api-error.mjs +3 -1
  104. package/packages/indexer_client/src/core/api-error.mjs.map +1 -1
  105. package/packages/indexer_client/src/core/model-runtime.js +4 -4
  106. package/packages/indexer_client/src/core/model-runtime.js.map +1 -1
  107. package/packages/indexer_client/src/core/model-runtime.mjs +6 -6
  108. package/packages/indexer_client/src/core/model-runtime.mjs.map +1 -1
  109. package/packages/indexer_client/src/models/account-participation.js +4 -4
  110. package/packages/indexer_client/src/models/account-participation.js.map +1 -1
  111. package/packages/indexer_client/src/models/account-participation.mjs +4 -4
  112. package/packages/indexer_client/src/models/account-participation.mjs.map +1 -1
  113. package/packages/indexer_client/src/models/application-state-schema.d.ts +2 -2
  114. package/packages/indexer_client/src/models/application-state-schema.js +2 -2
  115. package/packages/indexer_client/src/models/application-state-schema.js.map +1 -1
  116. package/packages/indexer_client/src/models/application-state-schema.mjs +2 -2
  117. package/packages/indexer_client/src/models/application-state-schema.mjs.map +1 -1
  118. package/packages/indexer_client/src/models/asset-params.js +2 -1
  119. package/packages/indexer_client/src/models/asset-params.js.map +1 -1
  120. package/packages/indexer_client/src/models/asset-params.mjs +2 -1
  121. package/packages/indexer_client/src/models/asset-params.mjs.map +1 -1
  122. package/packages/indexer_client/src/models/block.js +8 -8
  123. package/packages/indexer_client/src/models/block.js.map +1 -1
  124. package/packages/indexer_client/src/models/block.mjs +8 -8
  125. package/packages/indexer_client/src/models/block.mjs.map +1 -1
  126. package/packages/indexer_client/src/models/eval-delta-key-value.d.ts +1 -1
  127. package/packages/indexer_client/src/models/eval-delta-key-value.js +2 -2
  128. package/packages/indexer_client/src/models/eval-delta-key-value.js.map +1 -1
  129. package/packages/indexer_client/src/models/eval-delta-key-value.mjs +2 -2
  130. package/packages/indexer_client/src/models/eval-delta-key-value.mjs.map +1 -1
  131. package/packages/indexer_client/src/models/eval-delta.d.ts +1 -1
  132. package/packages/indexer_client/src/models/eval-delta.js +2 -2
  133. package/packages/indexer_client/src/models/eval-delta.js.map +1 -1
  134. package/packages/indexer_client/src/models/eval-delta.mjs +2 -2
  135. package/packages/indexer_client/src/models/eval-delta.mjs.map +1 -1
  136. package/packages/indexer_client/src/models/hb-proof-fields.js +6 -6
  137. package/packages/indexer_client/src/models/hb-proof-fields.js.map +1 -1
  138. package/packages/indexer_client/src/models/hb-proof-fields.mjs +6 -6
  139. package/packages/indexer_client/src/models/hb-proof-fields.mjs.map +1 -1
  140. package/packages/indexer_client/src/models/state-proof-verifier.js +2 -2
  141. package/packages/indexer_client/src/models/state-proof-verifier.js.map +1 -1
  142. package/packages/indexer_client/src/models/state-proof-verifier.mjs +2 -2
  143. package/packages/indexer_client/src/models/state-proof-verifier.mjs.map +1 -1
  144. package/packages/indexer_client/src/models/state-schema.d.ts +2 -2
  145. package/packages/indexer_client/src/models/state-schema.js +2 -2
  146. package/packages/indexer_client/src/models/state-schema.js.map +1 -1
  147. package/packages/indexer_client/src/models/state-schema.mjs +2 -2
  148. package/packages/indexer_client/src/models/state-schema.mjs.map +1 -1
  149. package/packages/indexer_client/src/models/teal-key-value.d.ts +1 -1
  150. package/packages/indexer_client/src/models/teal-key-value.js +2 -2
  151. package/packages/indexer_client/src/models/teal-key-value.js.map +1 -1
  152. package/packages/indexer_client/src/models/teal-key-value.mjs +2 -2
  153. package/packages/indexer_client/src/models/teal-key-value.mjs.map +1 -1
  154. package/packages/indexer_client/src/models/transaction-heartbeat.js +2 -1
  155. package/packages/indexer_client/src/models/transaction-heartbeat.js.map +1 -1
  156. package/packages/indexer_client/src/models/transaction-heartbeat.mjs +2 -1
  157. package/packages/indexer_client/src/models/transaction-heartbeat.mjs.map +1 -1
  158. package/packages/indexer_client/src/models/transaction-keyreg.js +4 -4
  159. package/packages/indexer_client/src/models/transaction-keyreg.js.map +1 -1
  160. package/packages/indexer_client/src/models/transaction-keyreg.mjs +4 -4
  161. package/packages/indexer_client/src/models/transaction-keyreg.mjs.map +1 -1
  162. package/packages/indexer_client/src/models/transaction-signature-logicsig.js +2 -1
  163. package/packages/indexer_client/src/models/transaction-signature-logicsig.js.map +1 -1
  164. package/packages/indexer_client/src/models/transaction-signature-logicsig.mjs +2 -1
  165. package/packages/indexer_client/src/models/transaction-signature-logicsig.mjs.map +1 -1
  166. package/packages/indexer_client/src/models/transaction-signature-multisig-subsignature.js +3 -3
  167. package/packages/indexer_client/src/models/transaction-signature-multisig-subsignature.js.map +1 -1
  168. package/packages/indexer_client/src/models/transaction-signature-multisig-subsignature.mjs +3 -3
  169. package/packages/indexer_client/src/models/transaction-signature-multisig-subsignature.mjs.map +1 -1
  170. package/packages/indexer_client/src/models/transaction.d.ts +2 -2
  171. package/packages/indexer_client/src/models/transaction.js +6 -5
  172. package/packages/indexer_client/src/models/transaction.js.map +1 -1
  173. package/packages/indexer_client/src/models/transaction.mjs +6 -5
  174. package/packages/indexer_client/src/models/transaction.mjs.map +1 -1
  175. package/packages/kmd_client/src/apis/api-service.d.ts +5 -5
  176. package/packages/kmd_client/src/apis/api-service.js +32 -32
  177. package/packages/kmd_client/src/apis/api-service.js.map +1 -1
  178. package/packages/kmd_client/src/apis/api-service.mjs +32 -32
  179. package/packages/kmd_client/src/apis/api-service.mjs.map +1 -1
  180. package/packages/kmd_client/src/core/api-error.js +3 -1
  181. package/packages/kmd_client/src/core/api-error.js.map +1 -1
  182. package/packages/kmd_client/src/core/api-error.mjs +3 -1
  183. package/packages/kmd_client/src/core/api-error.mjs.map +1 -1
  184. package/packages/kmd_client/src/core/model-runtime.js +4 -4
  185. package/packages/kmd_client/src/core/model-runtime.js.map +1 -1
  186. package/packages/kmd_client/src/core/model-runtime.mjs +6 -6
  187. package/packages/kmd_client/src/core/model-runtime.mjs.map +1 -1
  188. package/packages/sdk/src/encoding/encoding.js +12 -2
  189. package/packages/sdk/src/encoding/encoding.js.map +1 -1
  190. package/packages/sdk/src/encoding/encoding.mjs +12 -1
  191. package/packages/sdk/src/encoding/encoding.mjs.map +1 -1
  192. package/packages/sdk/src/encoding/schema/map.js +0 -2
  193. package/packages/sdk/src/encoding/schema/map.js.map +1 -1
  194. package/packages/transact/src/logicsig.d.ts +3 -15
  195. package/packages/transact/src/logicsig.js +16 -36
  196. package/packages/transact/src/logicsig.js.map +1 -1
  197. package/packages/transact/src/logicsig.mjs +18 -36
  198. package/packages/transact/src/logicsig.mjs.map +1 -1
  199. package/packages/transact/src/multisig.d.ts +7 -115
  200. package/packages/transact/src/multisig.js +86 -136
  201. package/packages/transact/src/multisig.js.map +1 -1
  202. package/packages/transact/src/multisig.mjs +87 -117
  203. package/packages/transact/src/multisig.mjs.map +1 -1
  204. package/packages/transact/src/transactions/app-call.d.ts +10 -10
  205. package/packages/transact/src/transactions/app-call.js.map +1 -1
  206. package/packages/transact/src/transactions/app-call.mjs.map +1 -1
  207. package/packages/transact/src/transactions/reference-types-meta.d.ts +26 -0
  208. package/packages/transact/src/transactions/reference-types-meta.js +71 -0
  209. package/packages/transact/src/transactions/reference-types-meta.js.map +1 -0
  210. package/packages/transact/src/transactions/reference-types-meta.mjs +69 -0
  211. package/packages/transact/src/transactions/reference-types-meta.mjs.map +1 -0
  212. package/packages/transact/src/transactions/signed-transaction-meta.js +2 -3
  213. package/packages/transact/src/transactions/signed-transaction-meta.js.map +1 -1
  214. package/packages/transact/src/transactions/signed-transaction-meta.mjs +3 -3
  215. package/packages/transact/src/transactions/signed-transaction-meta.mjs.map +1 -1
  216. package/packages/transact/src/transactions/signed-transaction.d.ts +2 -2
  217. package/packages/transact/src/transactions/signed-transaction.js.map +1 -1
  218. package/packages/transact/src/transactions/signed-transaction.mjs.map +1 -1
  219. package/packages/transact/src/transactions/transaction-meta.js +29 -23
  220. package/packages/transact/src/transactions/transaction-meta.js.map +1 -1
  221. package/packages/transact/src/transactions/transaction-meta.mjs +29 -23
  222. package/packages/transact/src/transactions/transaction-meta.mjs.map +1 -1
  223. package/packages/transact/src/transactions/transaction.js +1 -0
  224. package/packages/transact/src/transactions/transaction.js.map +1 -1
  225. package/packages/transact/src/transactions/transaction.mjs +1 -0
  226. package/packages/transact/src/transactions/transaction.mjs.map +1 -1
  227. package/sdk/index.js +1 -1
  228. package/testing/account.js +2 -5
  229. package/testing/account.js.map +1 -1
  230. package/testing/account.mjs +2 -5
  231. package/testing/account.mjs.map +1 -1
  232. package/testing/fixtures/algorand-fixture.d.ts +3 -3
  233. package/testing/fixtures/algorand-fixture.js.map +1 -1
  234. package/testing/fixtures/algorand-fixture.mjs.map +1 -1
  235. package/transact/index.d.ts +5 -4
  236. package/transact/index.js +4 -22
  237. package/transact/index.mjs +4 -3
  238. package/transaction/transaction.js +2 -2
  239. package/transaction/transaction.js.map +1 -1
  240. package/transaction/transaction.mjs +2 -2
  241. package/transaction/transaction.mjs.map +1 -1
  242. package/transactions/app-call.d.ts +4 -3
  243. package/transactions/app-call.js +15 -15
  244. package/transactions/app-call.js.map +1 -1
  245. package/transactions/app-call.mjs +15 -15
  246. package/transactions/app-call.mjs.map +1 -1
  247. package/transactions/asset-config.d.ts +1 -1
  248. package/transactions/asset-config.js +1 -1
  249. package/transactions/asset-config.js.map +1 -1
  250. package/transactions/asset-config.mjs +1 -1
  251. package/transactions/asset-config.mjs.map +1 -1
  252. package/transactions/method-call.js +69 -77
  253. package/transactions/method-call.js.map +1 -1
  254. package/transactions/method-call.mjs +69 -77
  255. package/transactions/method-call.mjs.map +1 -1
  256. package/types/account-manager.d.ts +1 -1
  257. package/types/account-manager.js +3 -3
  258. package/types/account-manager.js.map +1 -1
  259. package/types/account-manager.mjs +3 -3
  260. package/types/account-manager.mjs.map +1 -1
  261. package/types/algorand-client-transaction-creator.d.ts +97 -83
  262. package/types/algorand-client-transaction-creator.js +8 -0
  263. package/types/algorand-client-transaction-creator.js.map +1 -1
  264. package/types/algorand-client-transaction-creator.mjs +8 -0
  265. package/types/algorand-client-transaction-creator.mjs.map +1 -1
  266. package/types/algorand-client-transaction-sender.d.ts +100 -86
  267. package/types/algorand-client-transaction-sender.js +8 -1
  268. package/types/algorand-client-transaction-sender.js.map +1 -1
  269. package/types/algorand-client-transaction-sender.mjs +8 -0
  270. package/types/algorand-client-transaction-sender.mjs.map +1 -1
  271. package/types/app-client.d.ts +265 -260
  272. package/types/app-client.js +0 -1
  273. package/types/app-client.js.map +1 -1
  274. package/types/app-deployer.js +1 -1
  275. package/types/app-deployer.js.map +1 -1
  276. package/types/app-deployer.mjs +1 -1
  277. package/types/app-deployer.mjs.map +1 -1
  278. package/types/app-factory.d.ts +91 -88
  279. package/types/app-manager.d.ts +3 -1
  280. package/types/app-manager.js +16 -10
  281. package/types/app-manager.js.map +1 -1
  282. package/types/app-manager.mjs +16 -10
  283. package/types/app-manager.mjs.map +1 -1
  284. package/types/app-spec.js +12 -5
  285. package/types/app-spec.js.map +1 -1
  286. package/types/app-spec.mjs +12 -5
  287. package/types/app-spec.mjs.map +1 -1
  288. package/types/asset-manager.js +1 -1
  289. package/types/asset-manager.js.map +1 -1
  290. package/types/asset-manager.mjs +1 -1
  291. package/types/asset-manager.mjs.map +1 -1
  292. package/types/composer.d.ts +9 -0
  293. package/types/composer.js +28 -13
  294. package/types/composer.js.map +1 -1
  295. package/types/composer.mjs +28 -12
  296. package/types/composer.mjs.map +1 -1
  297. package/types/kmd-account-manager.d.ts +1 -0
  298. package/types/kmd-account-manager.js +21 -10
  299. package/types/kmd-account-manager.js.map +1 -1
  300. package/types/kmd-account-manager.mjs +22 -11
  301. package/types/kmd-account-manager.mjs.map +1 -1
  302. package/types/testing.d.ts +2 -2
  303. package/packages/algod_client/src/models/application-local-reference.d.ts +0 -20
  304. package/packages/algod_client/src/models/application-local-reference.js +0 -23
  305. package/packages/algod_client/src/models/application-local-reference.js.map +0 -1
  306. package/packages/algod_client/src/models/application-local-reference.mjs +0 -23
  307. package/packages/algod_client/src/models/application-local-reference.mjs.map +0 -1
  308. package/packages/algod_client/src/models/asset-holding-reference.d.ts +0 -20
  309. package/packages/algod_client/src/models/asset-holding-reference.js +0 -23
  310. package/packages/algod_client/src/models/asset-holding-reference.js.map +0 -1
  311. package/packages/algod_client/src/models/asset-holding-reference.mjs +0 -23
  312. package/packages/algod_client/src/models/asset-holding-reference.mjs.map +0 -1
  313. package/packages/algod_client/src/models/box-reference.d.ts +0 -17
  314. package/packages/algod_client/src/models/box-reference.js +0 -23
  315. package/packages/algod_client/src/models/box-reference.js.map +0 -1
  316. package/packages/algod_client/src/models/box-reference.mjs +0 -23
  317. package/packages/algod_client/src/models/box-reference.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"kmd-account-manager.js","names":["ClientManager","nacl","generateAddressWithSigners","getOptionalAddress","TransactionComposer","AlgoAmount"],"sources":["../../src/types/kmd-account-manager.ts"],"sourcesContent":["import { Account } from '@algorandfoundation/algokit-algod-client'\nimport { Address, getOptionalAddress } from '@algorandfoundation/algokit-common'\nimport { KmdClient } from '@algorandfoundation/algokit-kmd-client'\nimport { Config } from '../config'\nimport { AlgoAmount } from './amount'\nimport { ClientManager } from './client-manager'\nimport { TransactionComposer } from './composer'\nimport { AddressWithTransactionSigner, generateAddressWithSigners } from '@algorandfoundation/algokit-transact'\nimport nacl from 'tweetnacl'\n\n/** Provides abstractions over a [KMD](https://github.com/algorand/go-algorand/blob/master/daemon/kmd/README.md) instance\n * that makes it easier to get and manage accounts using KMD. */\nexport class KmdAccountManager {\n private _clientManager: Omit<ClientManager, 'kmd'>\n private _kmd?: KmdClient | null\n\n /**\n * Create a new KMD manager.\n * @param clientManager A ClientManager client to use for algod and kmd clients\n */\n constructor(clientManager: ClientManager) {\n this._clientManager = clientManager\n try {\n this._kmd = clientManager.kmd\n } catch {\n this._kmd = undefined\n }\n }\n\n async kmd(): Promise<KmdClient> {\n if (this._kmd === undefined) {\n if (await this._clientManager.isLocalNet()) {\n const { kmdConfig } = ClientManager.getConfigFromEnvironmentOrLocalNet()\n if (kmdConfig) {\n this._kmd = ClientManager.getKmdClient(kmdConfig)\n return this._kmd\n }\n }\n this._kmd = null\n }\n\n if (!this._kmd) {\n throw new Error('Attempt to use Kmd client in AlgoKit instance with no Kmd configured')\n }\n\n return this._kmd\n }\n\n /**\n * Returns an Algorand signing account with private key loaded from the given KMD wallet (identified by name).\n *\n * @param walletName The name of the wallet to retrieve an account from\n * @param predicate An optional filter to use to find the account (otherwise it will return a random account from the wallet)\n * @param sender The optional sender address to use this signer for (aka a rekeyed account)\n * @example Get default funded account in a LocalNet\n *\n * ```typescript\n * const defaultDispenserAccount = await kmdAccountManager.getWalletAccount(\n * 'unencrypted-default-wallet',\n * a => a.status !== 'Offline' && a.amount > 1_000_000_000\n * )\n * ```\n * @returns The signing account (with private key loaded) or undefined if no matching wallet or account was found\n */\n public async getWalletAccount(\n walletName: string,\n predicate?: (account: Account) => boolean,\n sender?: string | Address,\n ): Promise<AddressWithTransactionSigner | undefined> {\n const kmd = await this.kmd()\n\n const walletsResponse = await kmd.listWallets()\n const wallet = walletsResponse.wallets.filter((w) => w.name === walletName)\n if (wallet.length === 0) {\n return undefined\n }\n\n const walletId = wallet[0].id\n\n const walletHandle = (await kmd.initWalletHandle({ walletId, walletPassword: '' })).walletHandleToken\n const addresses = (await kmd.listKeysInWallet({ walletHandleToken: walletHandle })).addresses\n\n let i = 0\n if (predicate) {\n for (i = 0; i < addresses.length; i++) {\n const address = addresses[i]\n const account = await this._clientManager.algod.accountInformation(address)\n if (predicate(account)) {\n break\n }\n }\n }\n\n if (i >= addresses.length) {\n return undefined\n }\n\n const accountKey = (\n await kmd.exportKey({\n walletHandleToken: walletHandle,\n address: addresses[i],\n })\n ).privateKey\n\n const keys = nacl.sign.keyPair.fromSecretKey(accountKey)\n const rawSigner = async (bytesToSign: Uint8Array): Promise<Uint8Array> => {\n return nacl.sign.detached(bytesToSign, keys.secretKey)\n }\n\n return generateAddressWithSigners({\n ed25519Pubkey: keys.publicKey,\n sendingAddress: getOptionalAddress(sender),\n rawEd25519Signer: rawSigner,\n })\n }\n\n /**\n * Gets an account with private key loaded from a KMD wallet of the given name, or alternatively creates one with funds in it via a KMD wallet of the given name.\n *\n * This is useful to get idempotent accounts from LocalNet without having to specify the private key (which will change when resetting the LocalNet).\n *\n * This significantly speeds up local dev time and improves experience since you can write code that *just works* first go without manual config in a fresh LocalNet.\n *\n * If this is used via `mnemonicAccountFromEnvironment`, then you can even use the same code that runs on production without changes for local development!\n *\n * @param name The name of the wallet to retrieve / create\n * @param fundWith The number of Algo to fund the account with when it gets created, if not specified then 1000 ALGO will be funded from the dispenser account\n *\n * @example\n * ```typescript\n * // Idempotently get (if exists) or create (if it doesn't exist yet) an account by name using KMD\n * // if creating it then fund it with 2 ALGO from the default dispenser account\n * const newAccount = await kmdAccountManager.getOrCreateWalletAccount('account1', (2).algo())\n * // This will return the same account as above since the name matches\n * const existingAccount = await kmdAccountManager.getOrCreateWalletAccount('account1')\n * ```\n *\n * @returns An Algorand account with private key loaded - either one that already existed in the given KMD wallet, or a new one that is funded for you\n */\n public async getOrCreateWalletAccount(name: string, fundWith?: AlgoAmount): Promise<AddressWithTransactionSigner> {\n // Get an existing account from the KMD wallet\n const existing = await this.getWalletAccount(name)\n if (existing) {\n return existing\n }\n\n const kmd = await this.kmd()\n\n // None existed: create the KMD wallet instead\n const walletId = (await kmd.createWallet({ walletName: name, walletPassword: '' })).wallet.id\n const walletHandle = (await kmd.initWalletHandle({ walletId, walletPassword: '' })).walletHandleToken\n await kmd.generateKey({ walletHandleToken: walletHandle })\n\n // Get the account from the new KMD wallet\n const account = (await this.getWalletAccount(name))!\n\n Config.logger.info(\n `LocalNet account '${name}' doesn't yet exist; created account ${account.addr} with keys stored in KMD and funding with ${\n fundWith?.algo ?? 1000\n } ALGO`,\n )\n\n // Fund the account from the dispenser\n const dispenser = await this.getLocalNetDispenserAccount()\n await new TransactionComposer({\n algod: this._clientManager.algod,\n getSigner: () => dispenser.signer,\n getSuggestedParams: () => this._clientManager.algod.suggestedParams(),\n })\n .addPayment({\n amount: fundWith ?? AlgoAmount.Algo(1000),\n receiver: account.addr,\n sender: dispenser.addr,\n })\n .send()\n\n return account\n }\n\n /**\n * Returns an Algorand account with private key loaded for the default LocalNet dispenser account (that can be used to fund other accounts).\n * @example\n * ```typescript\n * const dispenser = await kmdAccountManager.getLocalNetDispenserAccount()\n * ```\n * @returns The default LocalNet dispenser account\n */\n public async getLocalNetDispenserAccount() {\n if (!(await this._clientManager.isLocalNet())) {\n throw new Error(\"Can't get LocalNet dispenser account from non LocalNet network\")\n }\n\n const dispenser = await this.getWalletAccount('unencrypted-default-wallet', (a) => a.status !== 'Offline' && a.amount > 1_000_000_000)\n if (!dispenser) {\n throw new Error(\"Error retrieving LocalNet dispenser account; couldn't find the default account in KMD\")\n }\n\n return dispenser\n }\n}\n"],"mappings":";;;;;;;;;;;;;AAYA,IAAa,oBAAb,MAA+B;CAC7B,AAAQ;CACR,AAAQ;;;;;CAMR,YAAY,eAA8B;AACxC,OAAK,iBAAiB;AACtB,MAAI;AACF,QAAK,OAAO,cAAc;UACpB;AACN,QAAK,OAAO;;;CAIhB,MAAM,MAA0B;AAC9B,MAAI,KAAK,SAAS,QAAW;AAC3B,OAAI,MAAM,KAAK,eAAe,YAAY,EAAE;IAC1C,MAAM,EAAE,cAAcA,qCAAc,oCAAoC;AACxE,QAAI,WAAW;AACb,UAAK,OAAOA,qCAAc,aAAa,UAAU;AACjD,YAAO,KAAK;;;AAGhB,QAAK,OAAO;;AAGd,MAAI,CAAC,KAAK,KACR,OAAM,IAAI,MAAM,uEAAuE;AAGzF,SAAO,KAAK;;;;;;;;;;;;;;;;;;CAmBd,MAAa,iBACX,YACA,WACA,QACmD;EACnD,MAAM,MAAM,MAAM,KAAK,KAAK;EAG5B,MAAM,UADkB,MAAM,IAAI,aAAa,EAChB,QAAQ,QAAQ,MAAM,EAAE,SAAS,WAAW;AAC3E,MAAI,OAAO,WAAW,EACpB;EAKF,MAAM,gBAAgB,MAAM,IAAI,iBAAiB;GAAE,UAFlC,OAAO,GAAG;GAEkC,gBAAgB;GAAI,CAAC,EAAE;EACpF,MAAM,aAAa,MAAM,IAAI,iBAAiB,EAAE,mBAAmB,cAAc,CAAC,EAAE;EAEpF,IAAI,IAAI;AACR,MAAI,UACF,MAAK,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK;GACrC,MAAM,UAAU,UAAU;AAE1B,OAAI,UADY,MAAM,KAAK,eAAe,MAAM,mBAAmB,QAAQ,CACrD,CACpB;;AAKN,MAAI,KAAK,UAAU,OACjB;EAGF,MAAM,cACJ,MAAM,IAAI,UAAU;GAClB,mBAAmB;GACnB,SAAS,UAAU;GACpB,CAAC,EACF;EAEF,MAAM,OAAOC,kBAAK,KAAK,QAAQ,cAAc,WAAW;EACxD,MAAM,YAAY,OAAO,gBAAiD;AACxE,UAAOA,kBAAK,KAAK,SAAS,aAAa,KAAK,UAAU;;AAGxD,SAAOC,0CAA2B;GAChC,eAAe,KAAK;GACpB,gBAAgBC,mCAAmB,OAAO;GAC1C,kBAAkB;GACnB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;CA0BJ,MAAa,yBAAyB,MAAc,UAA8D;EAEhH,MAAM,WAAW,MAAM,KAAK,iBAAiB,KAAK;AAClD,MAAI,SACF,QAAO;EAGT,MAAM,MAAM,MAAM,KAAK,KAAK;EAG5B,MAAM,YAAY,MAAM,IAAI,aAAa;GAAE,YAAY;GAAM,gBAAgB;GAAI,CAAC,EAAE,OAAO;EAC3F,MAAM,gBAAgB,MAAM,IAAI,iBAAiB;GAAE;GAAU,gBAAgB;GAAI,CAAC,EAAE;AACpF,QAAM,IAAI,YAAY,EAAE,mBAAmB,cAAc,CAAC;EAG1D,MAAM,UAAW,MAAM,KAAK,iBAAiB,KAAK;AAElD,wBAAO,OAAO,KACZ,qBAAqB,KAAK,uCAAuC,QAAQ,KAAK,4CAC5E,UAAU,QAAQ,IACnB,OACF;EAGD,MAAM,YAAY,MAAM,KAAK,6BAA6B;AAC1D,QAAM,IAAIC,qCAAoB;GAC5B,OAAO,KAAK,eAAe;GAC3B,iBAAiB,UAAU;GAC3B,0BAA0B,KAAK,eAAe,MAAM,iBAAiB;GACtE,CAAC,CACC,WAAW;GACV,QAAQ,YAAYC,0BAAW,KAAK,IAAK;GACzC,UAAU,QAAQ;GAClB,QAAQ,UAAU;GACnB,CAAC,CACD,MAAM;AAET,SAAO;;;;;;;;;;CAWT,MAAa,8BAA8B;AACzC,MAAI,CAAE,MAAM,KAAK,eAAe,YAAY,CAC1C,OAAM,IAAI,MAAM,iEAAiE;EAGnF,MAAM,YAAY,MAAM,KAAK,iBAAiB,+BAA+B,MAAM,EAAE,WAAW,aAAa,EAAE,SAAS,IAAc;AACtI,MAAI,CAAC,UACH,OAAM,IAAI,MAAM,wFAAwF;AAG1G,SAAO"}
1
+ {"version":3,"file":"kmd-account-manager.js","names":["ClientManager","matchedAddress: Address | undefined","Address","nacl","generateAddressWithSigners","getOptionalAddress","TransactionComposer","AlgoAmount"],"sources":["../../src/types/kmd-account-manager.ts"],"sourcesContent":["import { Account } from '@algorandfoundation/algokit-algod-client'\nimport { Address, getOptionalAddress } from '@algorandfoundation/algokit-common'\nimport { KmdClient } from '@algorandfoundation/algokit-kmd-client'\nimport { AddressWithTransactionSigner, generateAddressWithSigners } from '@algorandfoundation/algokit-transact'\nimport nacl from 'tweetnacl'\nimport { Config } from '../config'\nimport { AlgoAmount } from './amount'\nimport { ClientManager } from './client-manager'\nimport { TransactionComposer } from './composer'\n\n/** Provides abstractions over a [KMD](https://github.com/algorand/go-algorand/blob/master/daemon/kmd/README.md) instance\n * that makes it easier to get and manage accounts using KMD. */\nexport class KmdAccountManager {\n private _clientManager: Omit<ClientManager, 'kmd'>\n private _kmd?: KmdClient | null\n\n /**\n * Create a new KMD manager.\n * @param clientManager A ClientManager client to use for algod and kmd clients\n */\n constructor(clientManager: ClientManager) {\n this._clientManager = clientManager\n try {\n this._kmd = clientManager.kmd\n } catch {\n this._kmd = undefined\n }\n }\n\n async kmd(): Promise<KmdClient> {\n if (this._kmd === undefined) {\n if (await this._clientManager.isLocalNet()) {\n const { kmdConfig } = ClientManager.getConfigFromEnvironmentOrLocalNet()\n if (kmdConfig) {\n this._kmd = ClientManager.getKmdClient(kmdConfig)\n return this._kmd\n }\n }\n this._kmd = null\n }\n\n if (!this._kmd) {\n throw new Error('Attempt to use Kmd client in AlgoKit instance with no Kmd configured')\n }\n\n return this._kmd\n }\n\n /**\n * Returns an Algorand signing account with private key loaded from the given KMD wallet (identified by name).\n *\n * @param walletName The name of the wallet to retrieve an account from\n * @param predicate An optional filter to use to find the account (otherwise it will return a random account from the wallet)\n * @param sender The optional sender address to use this signer for (aka a rekeyed account)\n * @example Get default funded account in a LocalNet\n *\n * ```typescript\n * const defaultDispenserAccount = await kmdAccountManager.getWalletAccount(\n * 'unencrypted-default-wallet',\n * a => a.status !== 'Offline' && a.amount > 1_000_000_000\n * )\n * ```\n * @returns The signing account (with private key loaded) or undefined if no matching wallet or account was found\n */\n public async getWalletAccount(\n walletName: string,\n predicate?: (account: Account) => boolean,\n sender?: string | Address,\n ): Promise<AddressWithTransactionSigner | undefined> {\n return this.findWalletAccount(walletName, predicate, sender)\n }\n\n private async findWalletAccount(\n walletName: string,\n predicateOrAddress?: ((account: Account) => boolean) | string,\n sender?: string | Address,\n ): Promise<AddressWithTransactionSigner | undefined> {\n const kmd = await this.kmd()\n const walletsResponse = await kmd.listWallets()\n const wallet = walletsResponse.wallets.filter((w) => w.name === walletName)\n if (wallet.length === 0) {\n return undefined\n }\n const walletId = wallet[0].id\n const walletHandle = (await kmd.initWalletHandle({ walletId, walletPassword: '' })).walletHandleToken\n\n let matchedAddress: Address | undefined = undefined\n if (predicateOrAddress && typeof predicateOrAddress === 'string') {\n matchedAddress = Address.fromString(predicateOrAddress)\n } else {\n const addresses = (await kmd.listKeysInWallet({ walletHandleToken: walletHandle })).addresses\n if (addresses.length > 0) {\n if (predicateOrAddress && typeof predicateOrAddress === 'function') {\n for (let i = 0; i < addresses.length; i++) {\n const account = await this._clientManager.algod.accountInformation(addresses[i])\n if (predicateOrAddress(account)) {\n matchedAddress = addresses[i]\n break\n }\n }\n } else {\n matchedAddress = addresses[0]\n }\n }\n }\n\n if (!matchedAddress) {\n return undefined\n }\n\n const accountKey = (await kmd.exportKey({ walletHandleToken: walletHandle, address: matchedAddress })).privateKey\n const keys = nacl.sign.keyPair.fromSecretKey(accountKey)\n const rawSigner = async (bytesToSign: Uint8Array): Promise<Uint8Array> => {\n return nacl.sign.detached(bytesToSign, keys.secretKey)\n }\n\n return generateAddressWithSigners({\n ed25519Pubkey: keys.publicKey,\n sendingAddress: getOptionalAddress(sender),\n rawEd25519Signer: rawSigner,\n })\n }\n\n /**\n * Gets an account with private key loaded from a KMD wallet of the given name, or alternatively creates one with funds in it via a KMD wallet of the given name.\n *\n * This is useful to get idempotent accounts from LocalNet without having to specify the private key (which will change when resetting the LocalNet).\n *\n * This significantly speeds up local dev time and improves experience since you can write code that *just works* first go without manual config in a fresh LocalNet.\n *\n * If this is used via `mnemonicAccountFromEnvironment`, then you can even use the same code that runs on production without changes for local development!\n *\n * @param name The name of the wallet to retrieve / create\n * @param fundWith The number of Algo to fund the account with when it gets created, if not specified then 1000 ALGO will be funded from the dispenser account\n *\n * @example\n * ```typescript\n * // Idempotently get (if exists) or create (if it doesn't exist yet) an account by name using KMD\n * // if creating it then fund it with 2 ALGO from the default dispenser account\n * const newAccount = await kmdAccountManager.getOrCreateWalletAccount('account1', (2).algo())\n * // This will return the same account as above since the name matches\n * const existingAccount = await kmdAccountManager.getOrCreateWalletAccount('account1')\n * ```\n *\n * @returns An Algorand account with private key loaded - either one that already existed in the given KMD wallet, or a new one that is funded for you\n */\n public async getOrCreateWalletAccount(name: string, fundWith?: AlgoAmount): Promise<AddressWithTransactionSigner> {\n // Get an existing account from the KMD wallet\n const existing = await this.getWalletAccount(name)\n if (existing) {\n return existing\n }\n\n const kmd = await this.kmd()\n\n // None existed: create the KMD wallet instead\n const walletId = (await kmd.createWallet({ walletName: name, walletPassword: '' })).wallet.id\n const walletHandle = (await kmd.initWalletHandle({ walletId, walletPassword: '' })).walletHandleToken\n await kmd.generateKey({ walletHandleToken: walletHandle })\n\n // Get the account from the new KMD wallet\n const account = (await this.getWalletAccount(name))!\n\n Config.logger.info(\n `LocalNet account '${name}' doesn't yet exist; created account ${account.addr} with keys stored in KMD and funding with ${\n fundWith?.algo ?? 1000\n } ALGO`,\n )\n\n // Fund the account from the dispenser\n const dispenser = await this.getLocalNetDispenserAccount()\n await new TransactionComposer({\n algod: this._clientManager.algod,\n getSigner: () => dispenser.signer,\n getSuggestedParams: () => this._clientManager.algod.suggestedParams(),\n })\n .addPayment({ amount: fundWith ?? AlgoAmount.Algo(1000), receiver: account.addr, sender: dispenser.addr })\n .send()\n\n return account\n }\n\n /**\n * Returns an Algorand account with private key loaded for the default LocalNet dispenser account (that can be used to fund other accounts).\n * @example\n * ```typescript\n * const dispenser = await kmdAccountManager.getLocalNetDispenserAccount()\n * ```\n * @returns The default LocalNet dispenser account\n */\n public async getLocalNetDispenserAccount() {\n if (!(await this._clientManager.isLocalNet())) {\n throw new Error(\"Can't get LocalNet dispenser account from non LocalNet network\")\n }\n const genesisResponse = await this._clientManager.algod.genesis()\n const dispenserAddresses = genesisResponse.alloc.filter((a) => a.comment === 'Wallet1').map((a) => a.addr)\n if (dispenserAddresses.length > 0) {\n const dispenser = await this.findWalletAccount('unencrypted-default-wallet', dispenserAddresses[0])\n if (dispenser) {\n return dispenser\n }\n }\n\n throw new Error(\"Error retrieving LocalNet dispenser account; couldn't find the default account in KMD\")\n }\n}\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { getOptionalAddress } from "../packages/common/src/address.mjs";
1
+ import { Address, getOptionalAddress } from "../packages/common/src/address.mjs";
2
2
  import { generateAddressWithSigners } from "../packages/transact/src/signer.mjs";
3
3
  import { AlgoAmount } from "./amount.mjs";
4
4
  import { Config } from "../config.mjs";
@@ -55,6 +55,9 @@ var KmdAccountManager = class {
55
55
  * @returns The signing account (with private key loaded) or undefined if no matching wallet or account was found
56
56
  */
57
57
  async getWalletAccount(walletName, predicate, sender) {
58
+ return this.findWalletAccount(walletName, predicate, sender);
59
+ }
60
+ async findWalletAccount(walletName, predicateOrAddress, sender) {
58
61
  const kmd = await this.kmd();
59
62
  const wallet = (await kmd.listWallets()).wallets.filter((w) => w.name === walletName);
60
63
  if (wallet.length === 0) return;
@@ -62,16 +65,21 @@ var KmdAccountManager = class {
62
65
  walletId: wallet[0].id,
63
66
  walletPassword: ""
64
67
  })).walletHandleToken;
65
- const addresses = (await kmd.listKeysInWallet({ walletHandleToken: walletHandle })).addresses;
66
- let i = 0;
67
- if (predicate) for (i = 0; i < addresses.length; i++) {
68
- const address = addresses[i];
69
- if (predicate(await this._clientManager.algod.accountInformation(address))) break;
68
+ let matchedAddress = void 0;
69
+ if (predicateOrAddress && typeof predicateOrAddress === "string") matchedAddress = Address.fromString(predicateOrAddress);
70
+ else {
71
+ const addresses = (await kmd.listKeysInWallet({ walletHandleToken: walletHandle })).addresses;
72
+ if (addresses.length > 0) if (predicateOrAddress && typeof predicateOrAddress === "function") {
73
+ for (let i = 0; i < addresses.length; i++) if (predicateOrAddress(await this._clientManager.algod.accountInformation(addresses[i]))) {
74
+ matchedAddress = addresses[i];
75
+ break;
76
+ }
77
+ } else matchedAddress = addresses[0];
70
78
  }
71
- if (i >= addresses.length) return;
79
+ if (!matchedAddress) return;
72
80
  const accountKey = (await kmd.exportKey({
73
81
  walletHandleToken: walletHandle,
74
- address: addresses[i]
82
+ address: matchedAddress
75
83
  })).privateKey;
76
84
  const keys = nacl.sign.keyPair.fromSecretKey(accountKey);
77
85
  const rawSigner = async (bytesToSign) => {
@@ -143,9 +151,12 @@ var KmdAccountManager = class {
143
151
  */
144
152
  async getLocalNetDispenserAccount() {
145
153
  if (!await this._clientManager.isLocalNet()) throw new Error("Can't get LocalNet dispenser account from non LocalNet network");
146
- const dispenser = await this.getWalletAccount("unencrypted-default-wallet", (a) => a.status !== "Offline" && a.amount > 1e9);
147
- if (!dispenser) throw new Error("Error retrieving LocalNet dispenser account; couldn't find the default account in KMD");
148
- return dispenser;
154
+ const dispenserAddresses = (await this._clientManager.algod.genesis()).alloc.filter((a) => a.comment === "Wallet1").map((a) => a.addr);
155
+ if (dispenserAddresses.length > 0) {
156
+ const dispenser = await this.findWalletAccount("unencrypted-default-wallet", dispenserAddresses[0]);
157
+ if (dispenser) return dispenser;
158
+ }
159
+ throw new Error("Error retrieving LocalNet dispenser account; couldn't find the default account in KMD");
149
160
  }
150
161
  };
151
162
 
@@ -1 +1 @@
1
- {"version":3,"file":"kmd-account-manager.mjs","names":[],"sources":["../../src/types/kmd-account-manager.ts"],"sourcesContent":["import { Account } from '@algorandfoundation/algokit-algod-client'\nimport { Address, getOptionalAddress } from '@algorandfoundation/algokit-common'\nimport { KmdClient } from '@algorandfoundation/algokit-kmd-client'\nimport { Config } from '../config'\nimport { AlgoAmount } from './amount'\nimport { ClientManager } from './client-manager'\nimport { TransactionComposer } from './composer'\nimport { AddressWithTransactionSigner, generateAddressWithSigners } from '@algorandfoundation/algokit-transact'\nimport nacl from 'tweetnacl'\n\n/** Provides abstractions over a [KMD](https://github.com/algorand/go-algorand/blob/master/daemon/kmd/README.md) instance\n * that makes it easier to get and manage accounts using KMD. */\nexport class KmdAccountManager {\n private _clientManager: Omit<ClientManager, 'kmd'>\n private _kmd?: KmdClient | null\n\n /**\n * Create a new KMD manager.\n * @param clientManager A ClientManager client to use for algod and kmd clients\n */\n constructor(clientManager: ClientManager) {\n this._clientManager = clientManager\n try {\n this._kmd = clientManager.kmd\n } catch {\n this._kmd = undefined\n }\n }\n\n async kmd(): Promise<KmdClient> {\n if (this._kmd === undefined) {\n if (await this._clientManager.isLocalNet()) {\n const { kmdConfig } = ClientManager.getConfigFromEnvironmentOrLocalNet()\n if (kmdConfig) {\n this._kmd = ClientManager.getKmdClient(kmdConfig)\n return this._kmd\n }\n }\n this._kmd = null\n }\n\n if (!this._kmd) {\n throw new Error('Attempt to use Kmd client in AlgoKit instance with no Kmd configured')\n }\n\n return this._kmd\n }\n\n /**\n * Returns an Algorand signing account with private key loaded from the given KMD wallet (identified by name).\n *\n * @param walletName The name of the wallet to retrieve an account from\n * @param predicate An optional filter to use to find the account (otherwise it will return a random account from the wallet)\n * @param sender The optional sender address to use this signer for (aka a rekeyed account)\n * @example Get default funded account in a LocalNet\n *\n * ```typescript\n * const defaultDispenserAccount = await kmdAccountManager.getWalletAccount(\n * 'unencrypted-default-wallet',\n * a => a.status !== 'Offline' && a.amount > 1_000_000_000\n * )\n * ```\n * @returns The signing account (with private key loaded) or undefined if no matching wallet or account was found\n */\n public async getWalletAccount(\n walletName: string,\n predicate?: (account: Account) => boolean,\n sender?: string | Address,\n ): Promise<AddressWithTransactionSigner | undefined> {\n const kmd = await this.kmd()\n\n const walletsResponse = await kmd.listWallets()\n const wallet = walletsResponse.wallets.filter((w) => w.name === walletName)\n if (wallet.length === 0) {\n return undefined\n }\n\n const walletId = wallet[0].id\n\n const walletHandle = (await kmd.initWalletHandle({ walletId, walletPassword: '' })).walletHandleToken\n const addresses = (await kmd.listKeysInWallet({ walletHandleToken: walletHandle })).addresses\n\n let i = 0\n if (predicate) {\n for (i = 0; i < addresses.length; i++) {\n const address = addresses[i]\n const account = await this._clientManager.algod.accountInformation(address)\n if (predicate(account)) {\n break\n }\n }\n }\n\n if (i >= addresses.length) {\n return undefined\n }\n\n const accountKey = (\n await kmd.exportKey({\n walletHandleToken: walletHandle,\n address: addresses[i],\n })\n ).privateKey\n\n const keys = nacl.sign.keyPair.fromSecretKey(accountKey)\n const rawSigner = async (bytesToSign: Uint8Array): Promise<Uint8Array> => {\n return nacl.sign.detached(bytesToSign, keys.secretKey)\n }\n\n return generateAddressWithSigners({\n ed25519Pubkey: keys.publicKey,\n sendingAddress: getOptionalAddress(sender),\n rawEd25519Signer: rawSigner,\n })\n }\n\n /**\n * Gets an account with private key loaded from a KMD wallet of the given name, or alternatively creates one with funds in it via a KMD wallet of the given name.\n *\n * This is useful to get idempotent accounts from LocalNet without having to specify the private key (which will change when resetting the LocalNet).\n *\n * This significantly speeds up local dev time and improves experience since you can write code that *just works* first go without manual config in a fresh LocalNet.\n *\n * If this is used via `mnemonicAccountFromEnvironment`, then you can even use the same code that runs on production without changes for local development!\n *\n * @param name The name of the wallet to retrieve / create\n * @param fundWith The number of Algo to fund the account with when it gets created, if not specified then 1000 ALGO will be funded from the dispenser account\n *\n * @example\n * ```typescript\n * // Idempotently get (if exists) or create (if it doesn't exist yet) an account by name using KMD\n * // if creating it then fund it with 2 ALGO from the default dispenser account\n * const newAccount = await kmdAccountManager.getOrCreateWalletAccount('account1', (2).algo())\n * // This will return the same account as above since the name matches\n * const existingAccount = await kmdAccountManager.getOrCreateWalletAccount('account1')\n * ```\n *\n * @returns An Algorand account with private key loaded - either one that already existed in the given KMD wallet, or a new one that is funded for you\n */\n public async getOrCreateWalletAccount(name: string, fundWith?: AlgoAmount): Promise<AddressWithTransactionSigner> {\n // Get an existing account from the KMD wallet\n const existing = await this.getWalletAccount(name)\n if (existing) {\n return existing\n }\n\n const kmd = await this.kmd()\n\n // None existed: create the KMD wallet instead\n const walletId = (await kmd.createWallet({ walletName: name, walletPassword: '' })).wallet.id\n const walletHandle = (await kmd.initWalletHandle({ walletId, walletPassword: '' })).walletHandleToken\n await kmd.generateKey({ walletHandleToken: walletHandle })\n\n // Get the account from the new KMD wallet\n const account = (await this.getWalletAccount(name))!\n\n Config.logger.info(\n `LocalNet account '${name}' doesn't yet exist; created account ${account.addr} with keys stored in KMD and funding with ${\n fundWith?.algo ?? 1000\n } ALGO`,\n )\n\n // Fund the account from the dispenser\n const dispenser = await this.getLocalNetDispenserAccount()\n await new TransactionComposer({\n algod: this._clientManager.algod,\n getSigner: () => dispenser.signer,\n getSuggestedParams: () => this._clientManager.algod.suggestedParams(),\n })\n .addPayment({\n amount: fundWith ?? AlgoAmount.Algo(1000),\n receiver: account.addr,\n sender: dispenser.addr,\n })\n .send()\n\n return account\n }\n\n /**\n * Returns an Algorand account with private key loaded for the default LocalNet dispenser account (that can be used to fund other accounts).\n * @example\n * ```typescript\n * const dispenser = await kmdAccountManager.getLocalNetDispenserAccount()\n * ```\n * @returns The default LocalNet dispenser account\n */\n public async getLocalNetDispenserAccount() {\n if (!(await this._clientManager.isLocalNet())) {\n throw new Error(\"Can't get LocalNet dispenser account from non LocalNet network\")\n }\n\n const dispenser = await this.getWalletAccount('unencrypted-default-wallet', (a) => a.status !== 'Offline' && a.amount > 1_000_000_000)\n if (!dispenser) {\n throw new Error(\"Error retrieving LocalNet dispenser account; couldn't find the default account in KMD\")\n }\n\n return dispenser\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"kmd-account-manager.mjs","names":["matchedAddress: Address | undefined"],"sources":["../../src/types/kmd-account-manager.ts"],"sourcesContent":["import { Account } from '@algorandfoundation/algokit-algod-client'\nimport { Address, getOptionalAddress } from '@algorandfoundation/algokit-common'\nimport { KmdClient } from '@algorandfoundation/algokit-kmd-client'\nimport { AddressWithTransactionSigner, generateAddressWithSigners } from '@algorandfoundation/algokit-transact'\nimport nacl from 'tweetnacl'\nimport { Config } from '../config'\nimport { AlgoAmount } from './amount'\nimport { ClientManager } from './client-manager'\nimport { TransactionComposer } from './composer'\n\n/** Provides abstractions over a [KMD](https://github.com/algorand/go-algorand/blob/master/daemon/kmd/README.md) instance\n * that makes it easier to get and manage accounts using KMD. */\nexport class KmdAccountManager {\n private _clientManager: Omit<ClientManager, 'kmd'>\n private _kmd?: KmdClient | null\n\n /**\n * Create a new KMD manager.\n * @param clientManager A ClientManager client to use for algod and kmd clients\n */\n constructor(clientManager: ClientManager) {\n this._clientManager = clientManager\n try {\n this._kmd = clientManager.kmd\n } catch {\n this._kmd = undefined\n }\n }\n\n async kmd(): Promise<KmdClient> {\n if (this._kmd === undefined) {\n if (await this._clientManager.isLocalNet()) {\n const { kmdConfig } = ClientManager.getConfigFromEnvironmentOrLocalNet()\n if (kmdConfig) {\n this._kmd = ClientManager.getKmdClient(kmdConfig)\n return this._kmd\n }\n }\n this._kmd = null\n }\n\n if (!this._kmd) {\n throw new Error('Attempt to use Kmd client in AlgoKit instance with no Kmd configured')\n }\n\n return this._kmd\n }\n\n /**\n * Returns an Algorand signing account with private key loaded from the given KMD wallet (identified by name).\n *\n * @param walletName The name of the wallet to retrieve an account from\n * @param predicate An optional filter to use to find the account (otherwise it will return a random account from the wallet)\n * @param sender The optional sender address to use this signer for (aka a rekeyed account)\n * @example Get default funded account in a LocalNet\n *\n * ```typescript\n * const defaultDispenserAccount = await kmdAccountManager.getWalletAccount(\n * 'unencrypted-default-wallet',\n * a => a.status !== 'Offline' && a.amount > 1_000_000_000\n * )\n * ```\n * @returns The signing account (with private key loaded) or undefined if no matching wallet or account was found\n */\n public async getWalletAccount(\n walletName: string,\n predicate?: (account: Account) => boolean,\n sender?: string | Address,\n ): Promise<AddressWithTransactionSigner | undefined> {\n return this.findWalletAccount(walletName, predicate, sender)\n }\n\n private async findWalletAccount(\n walletName: string,\n predicateOrAddress?: ((account: Account) => boolean) | string,\n sender?: string | Address,\n ): Promise<AddressWithTransactionSigner | undefined> {\n const kmd = await this.kmd()\n const walletsResponse = await kmd.listWallets()\n const wallet = walletsResponse.wallets.filter((w) => w.name === walletName)\n if (wallet.length === 0) {\n return undefined\n }\n const walletId = wallet[0].id\n const walletHandle = (await kmd.initWalletHandle({ walletId, walletPassword: '' })).walletHandleToken\n\n let matchedAddress: Address | undefined = undefined\n if (predicateOrAddress && typeof predicateOrAddress === 'string') {\n matchedAddress = Address.fromString(predicateOrAddress)\n } else {\n const addresses = (await kmd.listKeysInWallet({ walletHandleToken: walletHandle })).addresses\n if (addresses.length > 0) {\n if (predicateOrAddress && typeof predicateOrAddress === 'function') {\n for (let i = 0; i < addresses.length; i++) {\n const account = await this._clientManager.algod.accountInformation(addresses[i])\n if (predicateOrAddress(account)) {\n matchedAddress = addresses[i]\n break\n }\n }\n } else {\n matchedAddress = addresses[0]\n }\n }\n }\n\n if (!matchedAddress) {\n return undefined\n }\n\n const accountKey = (await kmd.exportKey({ walletHandleToken: walletHandle, address: matchedAddress })).privateKey\n const keys = nacl.sign.keyPair.fromSecretKey(accountKey)\n const rawSigner = async (bytesToSign: Uint8Array): Promise<Uint8Array> => {\n return nacl.sign.detached(bytesToSign, keys.secretKey)\n }\n\n return generateAddressWithSigners({\n ed25519Pubkey: keys.publicKey,\n sendingAddress: getOptionalAddress(sender),\n rawEd25519Signer: rawSigner,\n })\n }\n\n /**\n * Gets an account with private key loaded from a KMD wallet of the given name, or alternatively creates one with funds in it via a KMD wallet of the given name.\n *\n * This is useful to get idempotent accounts from LocalNet without having to specify the private key (which will change when resetting the LocalNet).\n *\n * This significantly speeds up local dev time and improves experience since you can write code that *just works* first go without manual config in a fresh LocalNet.\n *\n * If this is used via `mnemonicAccountFromEnvironment`, then you can even use the same code that runs on production without changes for local development!\n *\n * @param name The name of the wallet to retrieve / create\n * @param fundWith The number of Algo to fund the account with when it gets created, if not specified then 1000 ALGO will be funded from the dispenser account\n *\n * @example\n * ```typescript\n * // Idempotently get (if exists) or create (if it doesn't exist yet) an account by name using KMD\n * // if creating it then fund it with 2 ALGO from the default dispenser account\n * const newAccount = await kmdAccountManager.getOrCreateWalletAccount('account1', (2).algo())\n * // This will return the same account as above since the name matches\n * const existingAccount = await kmdAccountManager.getOrCreateWalletAccount('account1')\n * ```\n *\n * @returns An Algorand account with private key loaded - either one that already existed in the given KMD wallet, or a new one that is funded for you\n */\n public async getOrCreateWalletAccount(name: string, fundWith?: AlgoAmount): Promise<AddressWithTransactionSigner> {\n // Get an existing account from the KMD wallet\n const existing = await this.getWalletAccount(name)\n if (existing) {\n return existing\n }\n\n const kmd = await this.kmd()\n\n // None existed: create the KMD wallet instead\n const walletId = (await kmd.createWallet({ walletName: name, walletPassword: '' })).wallet.id\n const walletHandle = (await kmd.initWalletHandle({ walletId, walletPassword: '' })).walletHandleToken\n await kmd.generateKey({ walletHandleToken: walletHandle })\n\n // Get the account from the new KMD wallet\n const account = (await this.getWalletAccount(name))!\n\n Config.logger.info(\n `LocalNet account '${name}' doesn't yet exist; created account ${account.addr} with keys stored in KMD and funding with ${\n fundWith?.algo ?? 1000\n } ALGO`,\n )\n\n // Fund the account from the dispenser\n const dispenser = await this.getLocalNetDispenserAccount()\n await new TransactionComposer({\n algod: this._clientManager.algod,\n getSigner: () => dispenser.signer,\n getSuggestedParams: () => this._clientManager.algod.suggestedParams(),\n })\n .addPayment({ amount: fundWith ?? AlgoAmount.Algo(1000), receiver: account.addr, sender: dispenser.addr })\n .send()\n\n return account\n }\n\n /**\n * Returns an Algorand account with private key loaded for the default LocalNet dispenser account (that can be used to fund other accounts).\n * @example\n * ```typescript\n * const dispenser = await kmdAccountManager.getLocalNetDispenserAccount()\n * ```\n * @returns The default LocalNet dispenser account\n */\n public async getLocalNetDispenserAccount() {\n if (!(await this._clientManager.isLocalNet())) {\n throw new Error(\"Can't get LocalNet dispenser account from non LocalNet network\")\n }\n const genesisResponse = await this._clientManager.algod.genesis()\n const dispenserAddresses = genesisResponse.alloc.filter((a) => a.comment === 'Wallet1').map((a) => a.addr)\n if (dispenserAddresses.length > 0) {\n const dispenser = await this.findWalletAccount('unencrypted-default-wallet', dispenserAddresses[0])\n if (dispenser) {\n return dispenser\n }\n }\n\n throw new Error(\"Error retrieving LocalNet dispenser account; couldn't find the default account in KMD\")\n }\n}\n"],"mappings":"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"}
@@ -94,7 +94,7 @@ interface AlgorandFixture {
94
94
  * ```typescript
95
95
  * describe('MY MODULE', () => {
96
96
  * const fixture = algorandFixture()
97
- * beforeEach(fixture.newScope, 10_000) // Add a 10s timeout to cater for occasionally slow LocalNet calls
97
+ * beforeEach(fixture.newScope)
98
98
  *
99
99
  * test('MY TEST', async () => {
100
100
  * const { algorand, testAccount } = fixture.context
@@ -108,7 +108,7 @@ interface AlgorandFixture {
108
108
  * ```typescript
109
109
  * describe('MY MODULE', () => {
110
110
  * const fixture = algorandFixture()
111
- * beforeAll(fixture.newScope, 10_000) // Add a 10s timeout to cater for occasionally slow LocalNet calls
111
+ * beforeAll(fixture.newScope)
112
112
  *
113
113
  * test('test1', async () => {
114
114
  * const { algorand, testAccount } = fixture.context
@@ -1,20 +0,0 @@
1
- import { Address } from "../../../common/src/address.js";
2
-
3
- //#region packages/algod_client/src/models/application-local-reference.d.ts
4
-
5
- /**
6
- * References an account's local state for an application.
7
- */
8
- type ApplicationLocalReference = {
9
- /**
10
- * Address of the account with the local state.
11
- */
12
- account: Address;
13
- /**
14
- * Application ID of the local state application.
15
- */
16
- app: bigint;
17
- };
18
- //#endregion
19
- export { ApplicationLocalReference };
20
- //# sourceMappingURL=application-local-reference.d.ts.map
@@ -1,23 +0,0 @@
1
- const require_address = require('../../../common/src/codecs/primitives/address.js');
2
- const require_bigint = require('../../../common/src/codecs/primitives/bigint.js');
3
-
4
- //#region packages/algod_client/src/models/application-local-reference.ts
5
- const ApplicationLocalReferenceMeta = {
6
- name: "ApplicationLocalReference",
7
- kind: "object",
8
- fields: [{
9
- name: "account",
10
- wireKey: "account",
11
- optional: false,
12
- codec: require_address.addressCodec
13
- }, {
14
- name: "app",
15
- wireKey: "app",
16
- optional: false,
17
- codec: require_bigint.bigIntCodec
18
- }]
19
- };
20
-
21
- //#endregion
22
- exports.ApplicationLocalReferenceMeta = ApplicationLocalReferenceMeta;
23
- //# sourceMappingURL=application-local-reference.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"application-local-reference.js","names":["ApplicationLocalReferenceMeta: ObjectModelMetadata<ApplicationLocalReference>","addressCodec","bigIntCodec"],"sources":["../../../../../packages/algod_client/src/models/application-local-reference.ts"],"sourcesContent":["import type { Address, ObjectModelMetadata } from '@algorandfoundation/algokit-common'\nimport { bigIntCodec, addressCodec } from '@algorandfoundation/algokit-common'\n\n/**\n * References an account's local state for an application.\n */\nexport type ApplicationLocalReference = {\n /**\n * Address of the account with the local state.\n */\n account: Address\n\n /**\n * Application ID of the local state application.\n */\n app: bigint\n}\n\nexport const ApplicationLocalReferenceMeta: ObjectModelMetadata<ApplicationLocalReference> = {\n name: 'ApplicationLocalReference',\n kind: 'object',\n fields: [\n {\n name: 'account',\n wireKey: 'account',\n optional: false,\n codec: addressCodec,\n },\n {\n name: 'app',\n wireKey: 'app',\n optional: false,\n codec: bigIntCodec,\n },\n ],\n}\n"],"mappings":";;;;AAkBA,MAAaA,gCAAgF;CAC3F,MAAM;CACN,MAAM;CACN,QAAQ,CACN;EACE,MAAM;EACN,SAAS;EACT,UAAU;EACV,OAAOC;EACR,EACD;EACE,MAAM;EACN,SAAS;EACT,UAAU;EACV,OAAOC;EACR,CACF;CACF"}
@@ -1,23 +0,0 @@
1
- import { addressCodec } from "../../../common/src/codecs/primitives/address.mjs";
2
- import { bigIntCodec } from "../../../common/src/codecs/primitives/bigint.mjs";
3
-
4
- //#region packages/algod_client/src/models/application-local-reference.ts
5
- const ApplicationLocalReferenceMeta = {
6
- name: "ApplicationLocalReference",
7
- kind: "object",
8
- fields: [{
9
- name: "account",
10
- wireKey: "account",
11
- optional: false,
12
- codec: addressCodec
13
- }, {
14
- name: "app",
15
- wireKey: "app",
16
- optional: false,
17
- codec: bigIntCodec
18
- }]
19
- };
20
-
21
- //#endregion
22
- export { ApplicationLocalReferenceMeta };
23
- //# sourceMappingURL=application-local-reference.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"application-local-reference.mjs","names":["ApplicationLocalReferenceMeta: ObjectModelMetadata<ApplicationLocalReference>"],"sources":["../../../../../packages/algod_client/src/models/application-local-reference.ts"],"sourcesContent":["import type { Address, ObjectModelMetadata } from '@algorandfoundation/algokit-common'\nimport { bigIntCodec, addressCodec } from '@algorandfoundation/algokit-common'\n\n/**\n * References an account's local state for an application.\n */\nexport type ApplicationLocalReference = {\n /**\n * Address of the account with the local state.\n */\n account: Address\n\n /**\n * Application ID of the local state application.\n */\n app: bigint\n}\n\nexport const ApplicationLocalReferenceMeta: ObjectModelMetadata<ApplicationLocalReference> = {\n name: 'ApplicationLocalReference',\n kind: 'object',\n fields: [\n {\n name: 'account',\n wireKey: 'account',\n optional: false,\n codec: addressCodec,\n },\n {\n name: 'app',\n wireKey: 'app',\n optional: false,\n codec: bigIntCodec,\n },\n ],\n}\n"],"mappings":";;;;AAkBA,MAAaA,gCAAgF;CAC3F,MAAM;CACN,MAAM;CACN,QAAQ,CACN;EACE,MAAM;EACN,SAAS;EACT,UAAU;EACV,OAAO;EACR,EACD;EACE,MAAM;EACN,SAAS;EACT,UAAU;EACV,OAAO;EACR,CACF;CACF"}
@@ -1,20 +0,0 @@
1
- import { Address } from "../../../common/src/address.js";
2
-
3
- //#region packages/algod_client/src/models/asset-holding-reference.d.ts
4
-
5
- /**
6
- * References an asset held by an account.
7
- */
8
- type AssetHoldingReference = {
9
- /**
10
- * Address of the account holding the asset.
11
- */
12
- account: Address;
13
- /**
14
- * Asset ID of the holding.
15
- */
16
- asset: bigint;
17
- };
18
- //#endregion
19
- export { AssetHoldingReference };
20
- //# sourceMappingURL=asset-holding-reference.d.ts.map
@@ -1,23 +0,0 @@
1
- const require_address = require('../../../common/src/codecs/primitives/address.js');
2
- const require_bigint = require('../../../common/src/codecs/primitives/bigint.js');
3
-
4
- //#region packages/algod_client/src/models/asset-holding-reference.ts
5
- const AssetHoldingReferenceMeta = {
6
- name: "AssetHoldingReference",
7
- kind: "object",
8
- fields: [{
9
- name: "account",
10
- wireKey: "account",
11
- optional: false,
12
- codec: require_address.addressCodec
13
- }, {
14
- name: "asset",
15
- wireKey: "asset",
16
- optional: false,
17
- codec: require_bigint.bigIntCodec
18
- }]
19
- };
20
-
21
- //#endregion
22
- exports.AssetHoldingReferenceMeta = AssetHoldingReferenceMeta;
23
- //# sourceMappingURL=asset-holding-reference.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"asset-holding-reference.js","names":["AssetHoldingReferenceMeta: ObjectModelMetadata<AssetHoldingReference>","addressCodec","bigIntCodec"],"sources":["../../../../../packages/algod_client/src/models/asset-holding-reference.ts"],"sourcesContent":["import type { Address, ObjectModelMetadata } from '@algorandfoundation/algokit-common'\nimport { bigIntCodec, addressCodec } from '@algorandfoundation/algokit-common'\n\n/**\n * References an asset held by an account.\n */\nexport type AssetHoldingReference = {\n /**\n * Address of the account holding the asset.\n */\n account: Address\n\n /**\n * Asset ID of the holding.\n */\n asset: bigint\n}\n\nexport const AssetHoldingReferenceMeta: ObjectModelMetadata<AssetHoldingReference> = {\n name: 'AssetHoldingReference',\n kind: 'object',\n fields: [\n {\n name: 'account',\n wireKey: 'account',\n optional: false,\n codec: addressCodec,\n },\n {\n name: 'asset',\n wireKey: 'asset',\n optional: false,\n codec: bigIntCodec,\n },\n ],\n}\n"],"mappings":";;;;AAkBA,MAAaA,4BAAwE;CACnF,MAAM;CACN,MAAM;CACN,QAAQ,CACN;EACE,MAAM;EACN,SAAS;EACT,UAAU;EACV,OAAOC;EACR,EACD;EACE,MAAM;EACN,SAAS;EACT,UAAU;EACV,OAAOC;EACR,CACF;CACF"}
@@ -1,23 +0,0 @@
1
- import { addressCodec } from "../../../common/src/codecs/primitives/address.mjs";
2
- import { bigIntCodec } from "../../../common/src/codecs/primitives/bigint.mjs";
3
-
4
- //#region packages/algod_client/src/models/asset-holding-reference.ts
5
- const AssetHoldingReferenceMeta = {
6
- name: "AssetHoldingReference",
7
- kind: "object",
8
- fields: [{
9
- name: "account",
10
- wireKey: "account",
11
- optional: false,
12
- codec: addressCodec
13
- }, {
14
- name: "asset",
15
- wireKey: "asset",
16
- optional: false,
17
- codec: bigIntCodec
18
- }]
19
- };
20
-
21
- //#endregion
22
- export { AssetHoldingReferenceMeta };
23
- //# sourceMappingURL=asset-holding-reference.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"asset-holding-reference.mjs","names":["AssetHoldingReferenceMeta: ObjectModelMetadata<AssetHoldingReference>"],"sources":["../../../../../packages/algod_client/src/models/asset-holding-reference.ts"],"sourcesContent":["import type { Address, ObjectModelMetadata } from '@algorandfoundation/algokit-common'\nimport { bigIntCodec, addressCodec } from '@algorandfoundation/algokit-common'\n\n/**\n * References an asset held by an account.\n */\nexport type AssetHoldingReference = {\n /**\n * Address of the account holding the asset.\n */\n account: Address\n\n /**\n * Asset ID of the holding.\n */\n asset: bigint\n}\n\nexport const AssetHoldingReferenceMeta: ObjectModelMetadata<AssetHoldingReference> = {\n name: 'AssetHoldingReference',\n kind: 'object',\n fields: [\n {\n name: 'account',\n wireKey: 'account',\n optional: false,\n codec: addressCodec,\n },\n {\n name: 'asset',\n wireKey: 'asset',\n optional: false,\n codec: bigIntCodec,\n },\n ],\n}\n"],"mappings":";;;;AAkBA,MAAaA,4BAAwE;CACnF,MAAM;CACN,MAAM;CACN,QAAQ,CACN;EACE,MAAM;EACN,SAAS;EACT,UAAU;EACV,OAAO;EACR,EACD;EACE,MAAM;EACN,SAAS;EACT,UAAU;EACV,OAAO;EACR,CACF;CACF"}
@@ -1,17 +0,0 @@
1
- //#region packages/algod_client/src/models/box-reference.d.ts
2
- /**
3
- * References a box of an application.
4
- */
5
- type BoxReference = {
6
- /**
7
- * Application ID which this box belongs to
8
- */
9
- app: bigint;
10
- /**
11
- * Base64 encoded box name
12
- */
13
- name: Uint8Array;
14
- };
15
- //#endregion
16
- export { BoxReference };
17
- //# sourceMappingURL=box-reference.d.ts.map
@@ -1,23 +0,0 @@
1
- const require_bigint = require('../../../common/src/codecs/primitives/bigint.js');
2
- const require_bytes = require('../../../common/src/codecs/primitives/bytes.js');
3
-
4
- //#region packages/algod_client/src/models/box-reference.ts
5
- const BoxReferenceMeta = {
6
- name: "BoxReference",
7
- kind: "object",
8
- fields: [{
9
- name: "app",
10
- wireKey: "app",
11
- optional: false,
12
- codec: require_bigint.bigIntCodec
13
- }, {
14
- name: "name",
15
- wireKey: "name",
16
- optional: false,
17
- codec: require_bytes.bytesCodec
18
- }]
19
- };
20
-
21
- //#endregion
22
- exports.BoxReferenceMeta = BoxReferenceMeta;
23
- //# sourceMappingURL=box-reference.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"box-reference.js","names":["BoxReferenceMeta: ObjectModelMetadata<BoxReference>","bigIntCodec","bytesCodec"],"sources":["../../../../../packages/algod_client/src/models/box-reference.ts"],"sourcesContent":["import type { ObjectModelMetadata } from '@algorandfoundation/algokit-common'\nimport { bigIntCodec, bytesCodec } from '@algorandfoundation/algokit-common'\n\n/**\n * References a box of an application.\n */\nexport type BoxReference = {\n /**\n * Application ID which this box belongs to\n */\n app: bigint\n\n /**\n * Base64 encoded box name\n */\n name: Uint8Array\n}\n\nexport const BoxReferenceMeta: ObjectModelMetadata<BoxReference> = {\n name: 'BoxReference',\n kind: 'object',\n fields: [\n {\n name: 'app',\n wireKey: 'app',\n optional: false,\n codec: bigIntCodec,\n },\n {\n name: 'name',\n wireKey: 'name',\n optional: false,\n codec: bytesCodec,\n },\n ],\n}\n"],"mappings":";;;;AAkBA,MAAaA,mBAAsD;CACjE,MAAM;CACN,MAAM;CACN,QAAQ,CACN;EACE,MAAM;EACN,SAAS;EACT,UAAU;EACV,OAAOC;EACR,EACD;EACE,MAAM;EACN,SAAS;EACT,UAAU;EACV,OAAOC;EACR,CACF;CACF"}
@@ -1,23 +0,0 @@
1
- import { bigIntCodec } from "../../../common/src/codecs/primitives/bigint.mjs";
2
- import { bytesCodec } from "../../../common/src/codecs/primitives/bytes.mjs";
3
-
4
- //#region packages/algod_client/src/models/box-reference.ts
5
- const BoxReferenceMeta = {
6
- name: "BoxReference",
7
- kind: "object",
8
- fields: [{
9
- name: "app",
10
- wireKey: "app",
11
- optional: false,
12
- codec: bigIntCodec
13
- }, {
14
- name: "name",
15
- wireKey: "name",
16
- optional: false,
17
- codec: bytesCodec
18
- }]
19
- };
20
-
21
- //#endregion
22
- export { BoxReferenceMeta };
23
- //# sourceMappingURL=box-reference.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"box-reference.mjs","names":["BoxReferenceMeta: ObjectModelMetadata<BoxReference>"],"sources":["../../../../../packages/algod_client/src/models/box-reference.ts"],"sourcesContent":["import type { ObjectModelMetadata } from '@algorandfoundation/algokit-common'\nimport { bigIntCodec, bytesCodec } from '@algorandfoundation/algokit-common'\n\n/**\n * References a box of an application.\n */\nexport type BoxReference = {\n /**\n * Application ID which this box belongs to\n */\n app: bigint\n\n /**\n * Base64 encoded box name\n */\n name: Uint8Array\n}\n\nexport const BoxReferenceMeta: ObjectModelMetadata<BoxReference> = {\n name: 'BoxReference',\n kind: 'object',\n fields: [\n {\n name: 'app',\n wireKey: 'app',\n optional: false,\n codec: bigIntCodec,\n },\n {\n name: 'name',\n wireKey: 'name',\n optional: false,\n codec: bytesCodec,\n },\n ],\n}\n"],"mappings":";;;;AAkBA,MAAaA,mBAAsD;CACjE,MAAM;CACN,MAAM;CACN,QAAQ,CACN;EACE,MAAM;EACN,SAAS;EACT,UAAU;EACV,OAAO;EACR,EACD;EACE,MAAM;EACN,SAAS;EACT,UAAU;EACV,OAAO;EACR,CACF;CACF"}