@aeternity/aepp-sdk 12.0.0 → 12.1.0

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 (283) hide show
  1. package/dist/aepp-sdk.browser-script.js +1 -1
  2. package/dist/aepp-sdk.browser-script.js.LICENSE.txt +0 -15
  3. package/dist/aepp-sdk.browser-script.js.map +1 -1
  4. package/dist/aepp-sdk.browser.js +2 -1
  5. package/dist/aepp-sdk.browser.js.LICENSE.txt +1 -0
  6. package/dist/aepp-sdk.browser.js.map +1 -1
  7. package/dist/aepp-sdk.js +20764 -1
  8. package/dist/aepp-sdk.js.map +1 -1
  9. package/es/AeSdk.d.ts +7 -7
  10. package/es/AeSdk.mjs.map +1 -1
  11. package/es/AeSdkAepp.d.ts +4 -3
  12. package/es/AeSdkAepp.mjs +2 -1
  13. package/es/AeSdkAepp.mjs.map +1 -1
  14. package/es/AeSdkBase.d.ts +22 -21
  15. package/es/AeSdkBase.mjs +25 -21
  16. package/es/AeSdkBase.mjs.map +1 -1
  17. package/es/AeSdkWallet.d.ts +4 -3
  18. package/es/AeSdkWallet.mjs +5 -1
  19. package/es/AeSdkWallet.mjs.map +1 -1
  20. package/es/Node.d.ts +7 -10
  21. package/es/Node.mjs +63 -57
  22. package/es/Node.mjs.map +1 -1
  23. package/es/account/Base.d.ts +7 -4
  24. package/es/account/Base.mjs +3 -3
  25. package/es/account/Base.mjs.map +1 -1
  26. package/es/account/Memory.d.ts +5 -4
  27. package/es/account/Memory.mjs +24 -2
  28. package/es/account/Memory.mjs.map +1 -1
  29. package/es/account/Rpc.d.ts +6 -6
  30. package/es/account/Rpc.mjs +3 -2
  31. package/es/account/Rpc.mjs.map +1 -1
  32. package/es/aens.d.ts +27 -14
  33. package/es/aens.mjs +27 -21
  34. package/es/aens.mjs.map +1 -1
  35. package/es/aepp-wallet-communication/connection/Browser.d.ts +2 -1
  36. package/es/aepp-wallet-communication/connection/Browser.mjs +5 -2
  37. package/es/aepp-wallet-communication/connection/Browser.mjs.map +1 -1
  38. package/es/aepp-wallet-communication/connection/BrowserRuntime.d.ts +1 -0
  39. package/es/aepp-wallet-communication/connection/BrowserRuntime.mjs +1 -0
  40. package/es/aepp-wallet-communication/connection/BrowserRuntime.mjs.map +1 -1
  41. package/es/aepp-wallet-communication/connection/BrowserWindowMessage.d.ts +1 -0
  42. package/es/aepp-wallet-communication/connection/BrowserWindowMessage.mjs +5 -1
  43. package/es/aepp-wallet-communication/connection/BrowserWindowMessage.mjs.map +1 -1
  44. package/es/aepp-wallet-communication/connection-proxy.d.ts +1 -0
  45. package/es/aepp-wallet-communication/connection-proxy.mjs +1 -0
  46. package/es/aepp-wallet-communication/connection-proxy.mjs.map +1 -1
  47. package/es/aepp-wallet-communication/rpc/RpcClient.d.ts +1 -0
  48. package/es/aepp-wallet-communication/rpc/RpcClient.mjs +5 -5
  49. package/es/aepp-wallet-communication/rpc/RpcClient.mjs.map +1 -1
  50. package/es/aepp-wallet-communication/rpc/types.d.ts +8 -8
  51. package/es/aepp-wallet-communication/rpc/types.mjs.map +1 -1
  52. package/es/aepp-wallet-communication/schema.d.ts +17 -2
  53. package/es/aepp-wallet-communication/schema.mjs +54 -17
  54. package/es/aepp-wallet-communication/schema.mjs.map +1 -1
  55. package/es/aepp-wallet-communication/wallet-detector.d.ts +2 -1
  56. package/es/aepp-wallet-communication/wallet-detector.mjs +2 -3
  57. package/es/aepp-wallet-communication/wallet-detector.mjs.map +1 -1
  58. package/es/apis/node/models/index.d.ts +6 -2
  59. package/es/apis/node/models/index.mjs.map +1 -1
  60. package/es/apis/node/models/mappers.mjs +4 -2
  61. package/es/apis/node/models/mappers.mjs.map +1 -1
  62. package/es/chain.d.ts +92 -64
  63. package/es/chain.mjs +190 -154
  64. package/es/chain.mjs.map +1 -1
  65. package/es/channel/handlers.d.ts +3 -3
  66. package/es/channel/handlers.mjs +42 -44
  67. package/es/channel/handlers.mjs.map +1 -1
  68. package/es/channel/index.d.ts +43 -52
  69. package/es/channel/index.mjs +46 -49
  70. package/es/channel/index.mjs.map +1 -1
  71. package/es/channel/internal.d.ts +16 -15
  72. package/es/channel/internal.mjs +67 -62
  73. package/es/channel/internal.mjs.map +1 -1
  74. package/es/contract/Compiler.d.ts +1 -0
  75. package/es/contract/Compiler.mjs +5 -4
  76. package/es/contract/Compiler.mjs.map +1 -1
  77. package/es/contract/aci.d.ts +17 -15
  78. package/es/contract/aci.mjs +58 -45
  79. package/es/contract/aci.mjs.map +1 -1
  80. package/es/contract/ga.d.ts +16 -15
  81. package/es/contract/ga.mjs +12 -7
  82. package/es/contract/ga.mjs.map +1 -1
  83. package/es/contract/methods.d.ts +9 -6
  84. package/es/contract/methods.mjs +9 -6
  85. package/es/contract/methods.mjs.map +1 -1
  86. package/es/deprecated/index.d.ts +143 -0
  87. package/es/deprecated/index.mjs +162 -0
  88. package/es/deprecated/index.mjs.map +1 -0
  89. package/es/deprecated/methods.d.ts +18 -0
  90. package/es/deprecated/methods.mjs +26 -0
  91. package/es/deprecated/methods.mjs.map +1 -0
  92. package/es/index.d.ts +4 -1
  93. package/es/index.mjs +4 -1
  94. package/es/index.mjs.map +1 -1
  95. package/es/oracle.d.ts +69 -62
  96. package/es/oracle.mjs +121 -103
  97. package/es/oracle.mjs.map +1 -1
  98. package/es/spend.d.ts +16 -15
  99. package/es/spend.mjs +19 -30
  100. package/es/spend.mjs.map +1 -1
  101. package/es/tx/builder/address.d.ts +25 -0
  102. package/es/tx/builder/address.mjs +45 -0
  103. package/es/tx/builder/address.mjs.map +1 -0
  104. package/es/tx/builder/constants.d.ts +55 -26
  105. package/es/tx/builder/constants.mjs +60 -38
  106. package/es/tx/builder/constants.mjs.map +1 -1
  107. package/es/tx/builder/field-types/coin-amount.d.ts +13 -0
  108. package/es/tx/builder/field-types/coin-amount.mjs +26 -0
  109. package/es/tx/builder/field-types/coin-amount.mjs.map +1 -0
  110. package/es/tx/builder/field-types/deposit.d.ts +15 -0
  111. package/es/tx/builder/field-types/deposit.mjs +19 -0
  112. package/es/tx/builder/field-types/deposit.mjs.map +1 -0
  113. package/es/tx/builder/field-types/fee.d.ts +25 -0
  114. package/es/tx/{min-fee.mjs → builder/field-types/fee.mjs} +62 -60
  115. package/es/tx/builder/field-types/fee.mjs.map +1 -0
  116. package/es/tx/builder/field-types/field.d.ts +6 -0
  117. package/es/tx/builder/field-types/field.mjs +15 -0
  118. package/es/tx/builder/field-types/field.mjs.map +1 -0
  119. package/es/tx/builder/field-types/gas-limit.d.ts +12 -0
  120. package/es/tx/builder/field-types/gas-limit.mjs +33 -0
  121. package/es/tx/builder/field-types/gas-limit.mjs.map +1 -0
  122. package/es/tx/builder/field-types/gas-price.d.ts +8 -0
  123. package/es/tx/builder/field-types/gas-price.mjs +18 -0
  124. package/es/tx/builder/field-types/gas-price.mjs.map +1 -0
  125. package/es/tx/builder/field-types/index.d.ts +70 -0
  126. package/es/tx/builder/field-types/index.mjs +25 -0
  127. package/es/tx/builder/field-types/index.mjs.map +1 -0
  128. package/es/tx/builder/field-types/name-fee.d.ts +20 -0
  129. package/es/tx/builder/field-types/name-fee.mjs +24 -0
  130. package/es/tx/builder/field-types/name-fee.mjs.map +1 -0
  131. package/es/tx/builder/field-types/name-id.d.ts +14 -0
  132. package/es/tx/builder/field-types/name-id.mjs +19 -0
  133. package/es/tx/builder/field-types/name-id.mjs.map +1 -0
  134. package/es/tx/builder/field-types/name.d.ts +13 -0
  135. package/es/tx/builder/field-types/name.mjs +18 -0
  136. package/es/tx/builder/field-types/name.mjs.map +1 -0
  137. package/es/tx/builder/field-types/short-u-int.d.ts +6 -0
  138. package/es/tx/builder/field-types/short-u-int.mjs +12 -0
  139. package/es/tx/builder/field-types/short-u-int.mjs.map +1 -0
  140. package/es/tx/builder/field-types/u-int.d.ts +8 -0
  141. package/es/tx/builder/field-types/u-int.mjs +14 -0
  142. package/es/tx/builder/field-types/u-int.mjs.map +1 -0
  143. package/es/tx/builder/helpers.d.ts +27 -33
  144. package/es/tx/builder/helpers.mjs +41 -47
  145. package/es/tx/builder/helpers.mjs.map +1 -1
  146. package/es/tx/builder/index.d.ts +25 -12
  147. package/es/tx/builder/index.mjs +74 -83
  148. package/es/tx/builder/index.mjs.map +1 -1
  149. package/es/tx/builder/schema.d.ts +995 -144
  150. package/es/tx/builder/schema.mjs +121 -170
  151. package/es/tx/builder/schema.mjs.map +1 -1
  152. package/es/tx/index.d.ts +28 -27
  153. package/es/tx/index.mjs +97 -117
  154. package/es/tx/index.mjs.map +1 -1
  155. package/es/tx/validator.d.ts +4 -3
  156. package/es/tx/validator.mjs +79 -92
  157. package/es/tx/validator.mjs.map +1 -1
  158. package/es/typings/@aeternity__argon2-browser/index.d.mjs.map +1 -1
  159. package/es/typings/@aeternity__uuid/index.d.mjs.map +1 -1
  160. package/es/typings/bip32-path/index.d.mjs.map +1 -1
  161. package/es/typings/blakejs/index.d.mjs.map +1 -1
  162. package/es/typings/sha-js/index.d.mjs +2 -0
  163. package/es/typings/sha-js/index.d.mjs.map +1 -0
  164. package/es/typings/tweetnacl-auth/index.d.mjs.map +1 -1
  165. package/es/utils/amount-formatter.d.ts +9 -9
  166. package/es/utils/amount-formatter.mjs +17 -17
  167. package/es/utils/amount-formatter.mjs.map +1 -1
  168. package/es/utils/autorest.mjs +7 -7
  169. package/es/utils/autorest.mjs.map +1 -1
  170. package/es/utils/bignumber.mjs +2 -1
  171. package/es/utils/bignumber.mjs.map +1 -1
  172. package/es/utils/bytes.mjs +1 -1
  173. package/es/utils/bytes.mjs.map +1 -1
  174. package/es/utils/crypto.d.ts +8 -23
  175. package/es/utils/crypto.mjs +15 -41
  176. package/es/utils/crypto.mjs.map +1 -1
  177. package/es/utils/encoder-types.d.ts +61 -0
  178. package/es/utils/encoder-types.mjs +36 -0
  179. package/es/utils/encoder-types.mjs.map +1 -0
  180. package/es/utils/encoder.d.ts +6 -7
  181. package/es/utils/encoder.mjs +42 -26
  182. package/es/utils/encoder.mjs.map +1 -1
  183. package/es/utils/errors.d.ts +1 -11
  184. package/es/utils/errors.mjs +4 -20
  185. package/es/utils/errors.mjs.map +1 -1
  186. package/es/utils/hd-wallet.d.ts +18 -2
  187. package/es/utils/hd-wallet.mjs +64 -34
  188. package/es/utils/hd-wallet.mjs.map +1 -1
  189. package/es/utils/json-big.mjs +2 -2
  190. package/es/utils/json-big.mjs.map +1 -1
  191. package/es/utils/keystore.mjs +4 -2
  192. package/es/utils/keystore.mjs.map +1 -1
  193. package/es/utils/mptree.d.ts +2 -2
  194. package/es/utils/mptree.mjs +11 -6
  195. package/es/utils/mptree.mjs.map +1 -1
  196. package/es/utils/other.d.ts +8 -2
  197. package/es/utils/other.mjs +15 -3
  198. package/es/utils/other.mjs.map +1 -1
  199. package/es/utils/semver-satisfies.d.ts +1 -1
  200. package/es/utils/semver-satisfies.mjs +2 -2
  201. package/es/utils/semver-satisfies.mjs.map +1 -1
  202. package/es/utils/string.mjs.map +1 -1
  203. package/package.json +35 -33
  204. package/src/AeSdk.ts +30 -27
  205. package/src/AeSdkAepp.ts +93 -84
  206. package/src/AeSdkBase.ts +148 -130
  207. package/src/AeSdkWallet.ts +172 -156
  208. package/src/Node.ts +108 -102
  209. package/src/account/Base.ts +42 -32
  210. package/src/account/Memory.ts +45 -30
  211. package/src/account/Rpc.ts +32 -30
  212. package/src/aens.ts +124 -108
  213. package/src/aepp-wallet-communication/connection/Browser.ts +18 -15
  214. package/src/aepp-wallet-communication/connection/BrowserRuntime.ts +22 -21
  215. package/src/aepp-wallet-communication/connection/BrowserWindowMessage.ts +63 -52
  216. package/src/aepp-wallet-communication/connection-proxy.ts +8 -7
  217. package/src/aepp-wallet-communication/rpc/RpcClient.ts +67 -61
  218. package/src/aepp-wallet-communication/rpc/types.ts +32 -32
  219. package/src/aepp-wallet-communication/schema.ts +117 -74
  220. package/src/aepp-wallet-communication/wallet-detector.ts +29 -28
  221. package/src/apis/node/code-model-v4.yaml +54 -20
  222. package/src/apis/node/models/index.ts +6 -2
  223. package/src/apis/node/models/mappers.ts +4 -2
  224. package/src/chain.ts +286 -228
  225. package/src/channel/handlers.ts +424 -372
  226. package/src/channel/index.ts +285 -251
  227. package/src/channel/internal.ts +248 -232
  228. package/src/contract/Compiler.ts +22 -21
  229. package/src/contract/aci.ts +267 -258
  230. package/src/contract/ga.ts +93 -72
  231. package/src/contract/methods.ts +32 -27
  232. package/src/deprecated/index.ts +170 -0
  233. package/src/deprecated/methods.ts +25 -0
  234. package/src/index.ts +37 -32
  235. package/src/oracle.ts +211 -189
  236. package/src/spend.ts +82 -70
  237. package/src/tx/builder/address.ts +50 -0
  238. package/src/tx/builder/constants.ts +82 -52
  239. package/src/tx/builder/field-types/coin-amount.ts +27 -0
  240. package/src/tx/builder/field-types/deposit.ts +21 -0
  241. package/src/tx/builder/field-types/fee.ts +143 -0
  242. package/src/tx/builder/field-types/field.ts +9 -0
  243. package/src/tx/builder/field-types/gas-limit.ts +41 -0
  244. package/src/tx/builder/field-types/gas-price.ts +16 -0
  245. package/src/tx/builder/field-types/index.ts +45 -0
  246. package/src/tx/builder/field-types/name-fee.ts +32 -0
  247. package/src/tx/builder/field-types/name-id.ts +20 -0
  248. package/src/tx/builder/field-types/name.ts +18 -0
  249. package/src/tx/builder/field-types/short-u-int.ts +11 -0
  250. package/src/tx/builder/field-types/u-int.ts +16 -0
  251. package/src/tx/builder/helpers.ts +112 -117
  252. package/src/tx/builder/index.ts +203 -197
  253. package/src/tx/builder/schema.ts +421 -465
  254. package/src/tx/index.ts +128 -135
  255. package/src/tx/validator.ts +165 -161
  256. package/src/typings/@aeternity__argon2-browser/index.d.ts +1 -1
  257. package/src/typings/@aeternity__uuid/index.d.ts +3 -1
  258. package/src/typings/bip32-path/index.d.ts +6 -6
  259. package/src/typings/blakejs/index.d.ts +4 -32
  260. package/src/typings/sha-js/index.d.ts +5 -0
  261. package/src/typings/tweetnacl-auth/index.d.ts +2 -2
  262. package/src/utils/amount-formatter.ts +41 -41
  263. package/src/utils/autorest.ts +57 -54
  264. package/src/utils/bignumber.ts +7 -6
  265. package/src/utils/bytes.ts +19 -19
  266. package/src/utils/crypto.ts +82 -94
  267. package/src/utils/encoder-types.ts +63 -0
  268. package/src/utils/encoder.ts +104 -56
  269. package/src/utils/errors.ts +246 -264
  270. package/src/utils/hd-wallet.ts +114 -82
  271. package/src/utils/json-big.ts +16 -15
  272. package/src/utils/keystore.ts +65 -62
  273. package/src/utils/mptree.ts +59 -56
  274. package/src/utils/other.ts +26 -18
  275. package/src/utils/semver-satisfies.ts +15 -11
  276. package/src/utils/string.ts +10 -10
  277. package/es/tx/builder/field-types.d.ts +0 -62
  278. package/es/tx/builder/field-types.mjs +0 -126
  279. package/es/tx/builder/field-types.mjs.map +0 -1
  280. package/es/tx/min-fee.d.ts +0 -20
  281. package/es/tx/min-fee.mjs.map +0 -1
  282. package/src/tx/builder/field-types.ts +0 -111
  283. package/src/tx/min-fee.ts +0 -136
package/es/oracle.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"oracle.mjs","names":["send","mapObject","pause","oracleQueryId","decode","encode","unpackTx","ORACLE_TTL","QUERY_FEE","QUERY_TTL","RESPONSE_TTL","TX_TYPE","RequestTimedOutError","_getPollInterval","_buildTx","getOracleObject","oracleId","options","onNode","getOracleByPubkey","queries","getOracleQueriesByPubkey","oracleQueries","pollQueries","pollForQueries","postQuery","postQueryToOracle","respondToQuery","extendOracle","extendOracleTtl","getQuery","getQueryObject","name","handler","args","lastArg","length","constructor","Object","assign","push","onQuery","interval","knownQueryIds","Set","checkNewQueries","filter","id","has","forEach","add","stopped","catch","console","error","queryId","record","getOracleQueryByPubkeyAndQueryId","decodedQuery","query","toString","decodedResponse","response","respond","opt","pollForResponse","pollForQueryResponse","attempts","i","responseBuffer","registerOracle","queryFormat","responseFormat","accountId","onAccount","address","oracleRegisterTx","oracleRegister","queryFee","oracleTtlValue","value","oracleTtlType","type","senderId","oracleQueryTx","oracleQuery","queryTtlType","queryTtlValue","responseTtlType","responseTtlValue","nonce","tx","oracleExtendTx","oracleExtend","callerId","oracleRespondTx","oracleResponse"],"sources":["../src/oracle.ts"],"sourcesContent":["/*\n * ISC License (ISC)\n * Copyright (c) 2022 aeternity developers\n *\n * Permission to use, copy, modify, and/or distribute this software for any\n * purpose with or without fee is hereby granted, provided that the above\n * copyright notice and this permission notice appear in all copies.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\n * AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\n * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\n * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\n * PERFORMANCE OF THIS SOFTWARE.\n */\n\n/**\n * Oracle methods - routines to interact with the æternity oracle system\n *\n * The high-level description of the oracle system is\n * https://github.com/aeternity/protocol/blob/master/ORACLE.md in the protocol\n * repository.\n */\n\nimport { send, SendOptions } from './spend'\nimport { mapObject, pause } from './utils/other'\nimport { oracleQueryId, decode, encode } from './tx/builder/helpers'\nimport { unpackTx } from './tx/builder'\nimport {\n ORACLE_TTL,\n ORACLE_TTL_TYPES,\n QUERY_FEE,\n QUERY_TTL,\n RESPONSE_TTL,\n TX_TYPE\n} from './tx/builder/schema'\nimport { RequestTimedOutError } from './utils/errors'\nimport { EncodedData } from './utils/encoder'\nimport { _getPollInterval } from './chain'\nimport { _buildTx, BuildTxOptions } from './tx'\nimport Node from './Node'\nimport BigNumber from 'bignumber.js'\nimport AccountBase from './account/Base'\n\ntype OracleQueries = Awaited<ReturnType<Node['getOracleQueriesByPubkey']>>['oracleQueries']\n\n/**\n * Constructor for Oracle Object (helper object for using Oracle)\n * @param oracleId - Oracle public key\n * @param options - Options\n * @returns Oracle object\n */\nexport async function getOracleObject (\n oracleId: EncodedData<'ok'>, options: { onNode: Node, onAccount: AccountBase }\n): Promise<GetOracleObjectReturnType> {\n return {\n ...await options.onNode.getOracleByPubkey(oracleId),\n queries: (await options.onNode.getOracleQueriesByPubkey(oracleId)).oracleQueries,\n ...mapObject<Function, Function>(\n {\n pollQueries: pollForQueries,\n postQuery: postQueryToOracle,\n respondToQuery,\n extendOracle: extendOracleTtl,\n getQuery: getQueryObject\n },\n ([name, handler]) => [\n name,\n function (...args: any) {\n const lastArg = args[args.length - 1]\n if (lastArg != null && typeof lastArg === 'object' && lastArg.constructor === Object) {\n Object.assign(lastArg, { ...options, ...lastArg })\n } else args.push(options)\n return handler(oracleId, ...args)\n }\n ])\n } as any\n}\n\ninterface GetOracleObjectReturnType extends Awaited<ReturnType<Node['getOracleByPubkey']>> {\n id: EncodedData<'ok'>\n queries: OracleQueries\n // TODO: replace getOracleObject with a class\n pollQueries: (cb: Parameters<typeof pollForQueries>[1]) => ReturnType<typeof pollForQueries>\n postQuery: Function\n respondToQuery: Function\n extendOracle: Function\n getQuery: Function\n}\n\n/**\n * Poll for oracle queries\n * @param oracleId - Oracle public key\n * @param onQuery - OnQuery callback\n * @param options - Options object\n * @param options.interval - Poll interval(default: 5000)\n * @param options.onNode - Node to use\n * @returns Callback to stop polling function\n */\nexport function pollForQueries (\n oracleId: EncodedData<'ok'>,\n onQuery: (queries: OracleQueries) => void,\n { interval, onNode, ...options }: { interval?: number, onNode: Node }\n & Parameters<typeof _getPollInterval>[1]\n): () => void {\n interval ??= _getPollInterval('microblock', options)\n const knownQueryIds = new Set()\n const checkNewQueries = async (): Promise<void> => {\n const queries = ((await onNode.getOracleQueriesByPubkey(oracleId)).oracleQueries ?? [])\n .filter(({ id }) => !knownQueryIds.has(id))\n queries.forEach(({ id }) => knownQueryIds.add(id))\n if (queries.length > 0) onQuery(queries)\n }\n\n let stopped = false;\n\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n (async () => {\n while (!stopped) { // eslint-disable-line no-unmodified-loop-condition\n // TODO: allow to handle this error somehow\n await checkNewQueries().catch(console.error)\n await pause(interval)\n }\n })()\n return () => { stopped = true }\n}\n\n/**\n * Constructor for OracleQuery Object (helper object for using OracleQuery)\n * @param oracleId - Oracle public key\n * @param queryId - Oracle Query id\n * @param options - Options\n * @returns OracleQuery object\n */\nexport async function getQueryObject (\n oracleId: EncodedData<'ok'>,\n queryId: EncodedData<'oq'>,\n options: RespondToQueryOptions & Parameters<typeof pollForQueryResponse>[2]\n): Promise<GetQueryObjectReturnType> {\n const record = await options.onNode.getOracleQueryByPubkeyAndQueryId(oracleId, queryId)\n return {\n ...record,\n decodedQuery: decode(record.query as EncodedData<'oq'>).toString(),\n decodedResponse: decode(record.response as EncodedData<'or'>).toString(),\n respond: async (response, opt) =>\n await respondToQuery(oracleId, queryId, response, { ...options, ...opt }),\n pollForResponse: async (opt) =>\n await pollForQueryResponse(oracleId, queryId, { ...options, ...opt })\n }\n}\n\ninterface GetQueryObjectReturnType extends Awaited<ReturnType<Node['getOracleQueryByPubkeyAndQueryId']>> {\n decodedQuery: string\n decodedResponse: string\n respond: (response: string, options?: Parameters<typeof respondToQuery>[3]) =>\n ReturnType<typeof respondToQuery>\n pollForResponse: (options?: Parameters<typeof pollForQueryResponse>[2]) =>\n ReturnType<typeof pollForQueryResponse>\n}\n\n/**\n * Poll for oracle query response\n * @param oracleId - Oracle public key\n * @param queryId - Oracle Query id\n * @param options - Options object\n * @param options.attempts - Poll attempts\n * @param options.interval - Poll interval\n * @param options.onNode - Node to use\n * @returns OracleQuery object\n */\nexport async function pollForQueryResponse (\n oracleId: EncodedData<'ok'>,\n queryId: EncodedData<'oq'>,\n { attempts = 20, interval, onNode, ...options }:\n { attempts?: number, interval?: number, onNode: Node } & Parameters<typeof _getPollInterval>[1]\n): Promise<string> {\n interval ??= _getPollInterval('microblock', options)\n for (let i = 0; i < attempts; i++) {\n if (i > 0) await pause(interval)\n const { response } = await onNode.getOracleQueryByPubkeyAndQueryId(oracleId, queryId)\n const responseBuffer = decode(response as EncodedData<'or'>)\n if (responseBuffer.length > 0) return responseBuffer.toString()\n }\n throw new RequestTimedOutError((attempts - 1) * interval)\n}\n\n/**\n * Register oracle\n * @param queryFormat - Format of query\n * @param responseFormat - Format of query response\n * @param options - Options\n * @param options.queryFee - Oracle query Fee\n * @param options - Options object\n * @param options.abiVersion - Always 0 (do not use virtual machine)\n * @param options.fee - Transaction fee\n * @param options.ttl - Transaction time to leave\n * @returns Oracle object\n */\nexport async function registerOracle (\n queryFormat: string, responseFormat: string, options: RegisterOracleOptions\n): Promise<Awaited<ReturnType<typeof send>> & Awaited<ReturnType<typeof getOracleObject>>> {\n const accountId = await options.onAccount.address(options)\n const oracleRegisterTx = await _buildTx(TX_TYPE.oracleRegister, {\n queryFee: QUERY_FEE,\n oracleTtlValue: ORACLE_TTL.value,\n oracleTtlType: ORACLE_TTL.type,\n ...options,\n accountId,\n queryFormat,\n responseFormat\n })\n return {\n ...await send(oracleRegisterTx, options),\n ...await getOracleObject(encode(decode(accountId), 'ok'), options)\n }\n}\n\ntype RegisterOracleOptionsType = SendOptions & Parameters<typeof getOracleObject>[1]\n& BuildTxOptions<TX_TYPE.oracleRegister, 'accountId' | 'queryFormat' | 'responseFormat' | 'queryFee' | 'oracleTtlType' | 'oracleTtlValue'>\n& {\n queryFee?: number | string | BigNumber\n oracleTtlType?: ORACLE_TTL_TYPES\n oracleTtlValue?: number\n}\ninterface RegisterOracleOptions extends RegisterOracleOptionsType {}\n\n/**\n * Post query to oracle\n * @param oracleId - Oracle public key\n * @param query - Oracle query object\n * @param options - Options object\n * @param options.queryTtl - queryTtl Oracle query time to leave\n * @param options.responseTtl - queryFee Oracle query response time to leave\n * @param options.queryFee - queryFee Oracle query fee\n * @param options.fee - fee Transaction fee\n * @param options.ttl - Transaction time to leave\n * @returns Query object\n */\nexport async function postQueryToOracle (oracleId: EncodedData<'ok'>,\n query: string, options: PostQueryToOracleOptions\n): Promise<Awaited<ReturnType<typeof send>> & Awaited<ReturnType<typeof getQueryObject>>> {\n options.queryFee ??= (await options.onNode.getOracleByPubkey(oracleId)).queryFee.toString()\n const senderId = await options.onAccount.address(options)\n\n const oracleQueryTx = await _buildTx(TX_TYPE.oracleQuery, {\n queryTtlType: QUERY_TTL.type,\n queryTtlValue: QUERY_TTL.value,\n responseTtlType: RESPONSE_TTL.type,\n responseTtlValue: RESPONSE_TTL.value,\n ...options,\n oracleId,\n senderId,\n query\n })\n const nonce = unpackTx(oracleQueryTx, TX_TYPE.oracleQuery).tx.nonce\n const queryId = oracleQueryId(senderId, nonce, oracleId)\n return {\n ...await send(oracleQueryTx, options),\n ...await getQueryObject(oracleId, queryId, options)\n }\n}\n\ntype PostQueryToOracleOptionsType = Parameters<typeof send>[1]\n& Parameters<typeof getQueryObject>[2]\n& BuildTxOptions<TX_TYPE.oracleQuery, 'oracleId' | 'senderId' | 'query' | 'queryTtlType' | 'queryTtlValue' | 'responseTtlType' | 'responseTtlValue'>\n& {\n queryTtlType?: ORACLE_TTL_TYPES\n queryTtlValue?: number\n responseTtlType?: ORACLE_TTL_TYPES\n responseTtlValue?: number\n}\ninterface PostQueryToOracleOptions extends PostQueryToOracleOptionsType {}\n\n/**\n * Extend oracle ttl\n * @param oracleId - Oracle public key\n * @param options - Options object\n * @param options.fee - fee Transaction fee\n * @param options.ttl - Transaction time to leave\n * @param options.oracleTtlType - Oracle time to leave for extend\n * @param options.oracleTtlValue - Oracle time to leave for extend\n * @returns Oracle object\n */\nexport async function extendOracleTtl (\n oracleId: EncodedData<'ok'>,\n options: ExtendOracleTtlOptions\n): Promise<Awaited<ReturnType<typeof send>> & Awaited<ReturnType<typeof getOracleObject>>> {\n const oracleExtendTx = await _buildTx(TX_TYPE.oracleExtend, {\n oracleTtlType: ORACLE_TTL.type,\n oracleTtlValue: ORACLE_TTL.value,\n ...options,\n callerId: await options.onAccount.address(options),\n oracleId\n })\n return {\n ...await send(oracleExtendTx, options),\n ...await getOracleObject(oracleId, options)\n }\n}\n\ntype ExtendOracleTtlOptionsType = SendOptions & Parameters<typeof getOracleObject>[1]\n& BuildTxOptions<TX_TYPE.oracleExtend, 'oracleTtlType' | 'oracleTtlValue' | 'callerId' | 'oracleId'>\n& { oracleTtlType?: ORACLE_TTL_TYPES, oracleTtlValue?: number }\ninterface ExtendOracleTtlOptions extends ExtendOracleTtlOptionsType {}\n\n/**\n * Extend oracle ttl\n * @param oracleId - Oracle public key\n * @param queryId - Oracle query id\n * @param response - Oracle query response\n * @param options - Options object\n * @param options.responseTtl - responseTtl Query response time to leave\n * @param options.fee - Transaction fee\n * @param options.ttl - Transaction time to leave\n * @returns Oracle object\n */\nexport async function respondToQuery (\n oracleId: EncodedData<'ok'>,\n queryId: EncodedData<'oq'>,\n response: string,\n options: RespondToQueryOptions\n): Promise<Awaited<ReturnType<typeof send>> & Awaited<ReturnType<typeof getOracleObject>>> {\n const oracleRespondTx = await _buildTx(TX_TYPE.oracleResponse, {\n responseTtlType: RESPONSE_TTL.type,\n responseTtlValue: RESPONSE_TTL.value,\n ...options,\n callerId: await options.onAccount.address(options),\n oracleId,\n queryId,\n response\n })\n return {\n ...await send(oracleRespondTx, options),\n ...await getOracleObject(oracleId, options)\n }\n}\n\ntype RespondToQueryOptionsType = SendOptions & Parameters<typeof getOracleObject>[1]\n& BuildTxOptions<TX_TYPE.oracleResponse, 'callerId' | 'oracleId' | 'queryId' | 'response' | 'responseTtlType' | 'responseTtlValue'>\n& { responseTtlType?: ORACLE_TTL_TYPES, responseTtlValue?: number }\ninterface RespondToQueryOptions extends RespondToQueryOptionsType {}\n"],"mappings":"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"}
1
+ {"version":3,"file":"oracle.mjs","names":["send","mapObject","pause","oracleQueryId","unpackTx","ORACLE_TTL","QUERY_FEE","QUERY_TTL","RESPONSE_TTL","Tag","RequestTimedOutError","decode","encode","Encoding","_getPollInterval","_buildTx","pollForQueries","oracleId","onQuery","interval","onNode","options","knownQueryIds","Set","checkNewQueries","queries","getOracleQueriesByPubkey","oracleQueries","filter","id","has","forEach","add","length","stopped","catch","console","error","pollForQueryResponse","queryId","height","ttl","response","getOracleQueryByPubkeyAndQueryId","responseBuffer","toString","getHeight","getQueryObject","record","decodedQuery","query","decodedResponse","respond","opt","respondToQuery","pollForResponse","postQueryToOracle","queryFee","getOracleByPubkey","senderId","onAccount","address","oracleQueryTx","OracleQueryTx","queryTtlType","type","queryTtlValue","value","responseTtlType","responseTtlValue","nonce","tx","extendOracleTtl","oracleExtendTx","OracleExtendTx","oracleTtlType","oracleTtlValue","callerId","getOracleObject","oracleRespondTx","OracleResponseTx","pollQueries","postQuery","extendOracle","getQuery","name","handler","args","lastArg","constructor","Object","assign","push","registerOracle","queryFormat","responseFormat","accountId","oracleRegisterTx","OracleRegisterTx","OracleAddress"],"sources":["../src/oracle.ts"],"sourcesContent":["/*\n * ISC License (ISC)\n * Copyright (c) 2022 aeternity developers\n *\n * Permission to use, copy, modify, and/or distribute this software for any\n * purpose with or without fee is hereby granted, provided that the above\n * copyright notice and this permission notice appear in all copies.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\n * AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\n * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\n * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\n * PERFORMANCE OF THIS SOFTWARE.\n */\n\n/**\n * Oracle methods - routines to interact with the æternity oracle system\n *\n * The high-level description of the oracle system is\n * https://github.com/aeternity/protocol/blob/master/ORACLE.md in the protocol\n * repository.\n */\n\nimport BigNumber from 'bignumber.js';\nimport { send, SendOptions } from './spend';\nimport { mapObject, pause } from './utils/other';\nimport { oracleQueryId } from './tx/builder/helpers';\nimport { unpackTx } from './tx/builder';\nimport {\n ORACLE_TTL,\n ORACLE_TTL_TYPES,\n QUERY_FEE,\n QUERY_TTL,\n RESPONSE_TTL,\n} from './tx/builder/schema';\nimport { Tag } from './tx/builder/constants';\nimport { RequestTimedOutError } from './utils/errors';\nimport {\n decode, encode, Encoded, Encoding,\n} from './utils/encoder';\nimport { _getPollInterval } from './chain';\nimport { _buildTx, BuildTxOptions } from './tx';\nimport Node from './Node';\nimport AccountBase from './account/Base';\n\ntype OracleQueries = Awaited<ReturnType<Node['getOracleQueriesByPubkey']>>['oracleQueries'];\n\n/**\n * Poll for oracle queries\n * @category oracle\n * @param oracleId - Oracle public key\n * @param onQuery - OnQuery callback\n * @param options - Options object\n * @param options.interval - Poll interval(default: 5000)\n * @param options.onNode - Node to use\n * @returns Callback to stop polling function\n */\nexport function pollForQueries(\n oracleId: Encoded.OracleAddress,\n onQuery: (queries: OracleQueries) => void,\n { interval, onNode, ...options }: { interval?: number; onNode: Node }\n & Parameters<typeof _getPollInterval>[1],\n): () => void {\n interval ??= _getPollInterval('microblock', options);\n const knownQueryIds = new Set();\n const checkNewQueries = async (): Promise<void> => {\n const queries = ((await onNode.getOracleQueriesByPubkey(oracleId)).oracleQueries ?? [])\n .filter(({ id }) => !knownQueryIds.has(id));\n queries.forEach(({ id }) => knownQueryIds.add(id));\n if (queries.length > 0) onQuery(queries);\n };\n\n let stopped = false;\n\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n (async () => {\n while (!stopped) { // eslint-disable-line no-unmodified-loop-condition\n // TODO: allow to handle this error somehow\n await checkNewQueries().catch(console.error);\n await pause(interval);\n }\n })();\n return () => { stopped = true; };\n}\n\n/**\n * Poll for oracle query response\n * @category oracle\n * @param oracleId - Oracle public key\n * @param queryId - Oracle Query id\n * @param options - Options object\n * @param options.interval - Poll interval\n * @param options.onNode - Node to use\n * @returns OracleQuery object\n */\nexport async function pollForQueryResponse(\n oracleId: Encoded.OracleAddress,\n queryId: Encoded.OracleQueryId,\n { interval, onNode, ...options }:\n { interval?: number; onNode: Node } & Parameters<typeof _getPollInterval>[1],\n): Promise<string> {\n interval ??= _getPollInterval('microblock', options);\n let height;\n let ttl;\n let response;\n do {\n if (height != null) await pause(interval);\n ({ response, ttl } = await onNode.getOracleQueryByPubkeyAndQueryId(oracleId, queryId));\n const responseBuffer = decode(response as Encoded.OracleResponse);\n if (responseBuffer.length > 0) return responseBuffer.toString();\n height = await this.getHeight();\n } while (ttl >= height);\n throw new RequestTimedOutError(height);\n}\n\n/**\n * Constructor for OracleQuery Object (helper object for using OracleQuery)\n * @category oracle\n * @param oracleId - Oracle public key\n * @param queryId - Oracle Query id\n * @param options - Options\n * @returns OracleQuery object\n */\nexport async function getQueryObject(\n oracleId: Encoded.OracleAddress,\n queryId: Encoded.OracleQueryId,\n options: RespondToQueryOptions & Parameters<typeof pollForQueryResponse>[2],\n): Promise<GetQueryObjectReturnType> {\n const record = await options.onNode.getOracleQueryByPubkeyAndQueryId(oracleId, queryId);\n return {\n ...record,\n decodedQuery: decode(record.query as Encoded.OracleQueryId).toString(),\n decodedResponse: decode(record.response as Encoded.OracleResponse).toString(),\n respond: async (response, opt) => (\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n respondToQuery(oracleId, queryId, response, { ...options, ...opt })\n ),\n pollForResponse: async (opt) => pollForQueryResponse(oracleId, queryId, { ...options, ...opt }),\n };\n}\n\ninterface GetQueryObjectReturnType extends Awaited<ReturnType<Node['getOracleQueryByPubkeyAndQueryId']>> {\n decodedQuery: string;\n decodedResponse: string;\n respond: (response: string, options?: Parameters<typeof respondToQuery>[3]) =>\n ReturnType<typeof respondToQuery>;\n pollForResponse: (options?: Parameters<typeof pollForQueryResponse>[2]) =>\n ReturnType<typeof pollForQueryResponse>;\n}\n\n/**\n * Post query to oracle\n * @category oracle\n * @param oracleId - Oracle public key\n * @param query - Oracle query object\n * @param options - Options object\n * @param options.queryTtl - queryTtl Oracle query time to leave\n * @param options.responseTtl - queryFee Oracle query response time to leave\n * @param options.queryFee - queryFee Oracle query fee\n * @param options.fee - fee Transaction fee\n * @param options.ttl - Transaction time to leave\n * @returns Query object\n */\nexport async function postQueryToOracle(\n oracleId: Encoded.OracleAddress,\n query: string,\n options: PostQueryToOracleOptions,\n): Promise<Awaited<ReturnType<typeof send>> & Awaited<ReturnType<typeof getQueryObject>>> {\n options.queryFee ??= (await options.onNode.getOracleByPubkey(oracleId)).queryFee.toString();\n const senderId = await options.onAccount.address(options);\n\n const oracleQueryTx = await _buildTx(Tag.OracleQueryTx, {\n queryTtlType: QUERY_TTL.type,\n queryTtlValue: QUERY_TTL.value,\n responseTtlType: RESPONSE_TTL.type,\n responseTtlValue: RESPONSE_TTL.value,\n ...options,\n oracleId,\n senderId,\n query,\n });\n const { nonce } = unpackTx(oracleQueryTx, Tag.OracleQueryTx).tx;\n const queryId = oracleQueryId(senderId, nonce, oracleId);\n return {\n ...await send(oracleQueryTx, options),\n ...await getQueryObject(oracleId, queryId, options),\n };\n}\n\ntype PostQueryToOracleOptionsType = Parameters<typeof send>[1]\n& Parameters<typeof getQueryObject>[2]\n& BuildTxOptions<Tag.OracleQueryTx, 'oracleId' | 'senderId' | 'query' | 'queryTtlType' | 'queryTtlValue' | 'responseTtlType' | 'responseTtlValue'>\n& {\n queryTtlType?: ORACLE_TTL_TYPES;\n queryTtlValue?: number;\n responseTtlType?: ORACLE_TTL_TYPES;\n responseTtlValue?: number;\n};\ninterface PostQueryToOracleOptions extends PostQueryToOracleOptionsType {}\n\n/**\n * Extend oracle ttl\n * @category oracle\n * @param oracleId - Oracle public key\n * @param options - Options object\n * @param options.fee - fee Transaction fee\n * @param options.ttl - Transaction time to leave\n * @param options.oracleTtlType - Oracle time to leave for extend\n * @param options.oracleTtlValue - Oracle time to leave for extend\n * @returns Oracle object\n */\nexport async function extendOracleTtl(\n oracleId: Encoded.OracleAddress,\n options: ExtendOracleTtlOptions,\n): Promise<Awaited<ReturnType<typeof send>> & Awaited<ReturnType<typeof getOracleObject>>> {\n const oracleExtendTx = await _buildTx(Tag.OracleExtendTx, {\n oracleTtlType: ORACLE_TTL.type,\n oracleTtlValue: ORACLE_TTL.value,\n ...options,\n callerId: await options.onAccount.address(options),\n oracleId,\n });\n return {\n ...await send(oracleExtendTx, options),\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n ...await getOracleObject(oracleId, options),\n };\n}\n\ntype ExtendOracleTtlOptionsType = SendOptions & Parameters<typeof getOracleObject>[1]\n& BuildTxOptions<Tag.OracleExtendTx, 'oracleTtlType' | 'oracleTtlValue' | 'callerId' | 'oracleId'>\n& { oracleTtlType?: ORACLE_TTL_TYPES; oracleTtlValue?: number };\ninterface ExtendOracleTtlOptions extends ExtendOracleTtlOptionsType {}\n\n/**\n * Extend oracle ttl\n * @category oracle\n * @param oracleId - Oracle public key\n * @param queryId - Oracle query id\n * @param response - Oracle query response\n * @param options - Options object\n * @param options.responseTtl - responseTtl Query response time to leave\n * @param options.fee - Transaction fee\n * @param options.ttl - Transaction time to leave\n * @returns Oracle object\n */\nexport async function respondToQuery(\n oracleId: Encoded.OracleAddress,\n queryId: Encoded.OracleQueryId,\n response: string,\n options: RespondToQueryOptions,\n): Promise<Awaited<ReturnType<typeof send>> & Awaited<ReturnType<typeof getOracleObject>>> {\n const oracleRespondTx = await _buildTx(Tag.OracleResponseTx, {\n responseTtlType: RESPONSE_TTL.type,\n responseTtlValue: RESPONSE_TTL.value,\n ...options,\n callerId: await options.onAccount.address(options),\n oracleId,\n queryId,\n response,\n });\n return {\n ...await send(oracleRespondTx, options),\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n ...await getOracleObject(oracleId, options),\n };\n}\n\ntype RespondToQueryOptionsType = SendOptions & Parameters<typeof getOracleObject>[1]\n& BuildTxOptions<Tag.OracleResponseTx, 'callerId' | 'oracleId' | 'queryId' | 'response' | 'responseTtlType' | 'responseTtlValue'>\n& { responseTtlType?: ORACLE_TTL_TYPES; responseTtlValue?: number };\ninterface RespondToQueryOptions extends RespondToQueryOptionsType {}\n\n/**\n * Constructor for Oracle Object (helper object for using Oracle)\n * @category oracle\n * @param oracleId - Oracle public key\n * @param options - Options\n * @returns Oracle object\n */\nexport async function getOracleObject(\n oracleId: Encoded.OracleAddress,\n options: { onNode: Node; onAccount: AccountBase },\n): Promise<GetOracleObjectReturnType> {\n return {\n ...await options.onNode.getOracleByPubkey(oracleId),\n queries: (await options.onNode.getOracleQueriesByPubkey(oracleId)).oracleQueries,\n ...mapObject<Function, Function>(\n {\n pollQueries: pollForQueries,\n postQuery: postQueryToOracle,\n respondToQuery,\n extendOracle: extendOracleTtl,\n getQuery: getQueryObject,\n },\n ([name, handler]) => [\n name,\n (...args: any) => {\n const lastArg = args[args.length - 1];\n if (lastArg != null && typeof lastArg === 'object' && lastArg.constructor === Object) {\n Object.assign(lastArg, { ...options, ...lastArg });\n } else args.push(options);\n return handler(oracleId, ...args);\n },\n ],\n ),\n } as any;\n}\n\ninterface GetOracleObjectReturnType extends Awaited<ReturnType<Node['getOracleByPubkey']>> {\n id: Encoded.OracleAddress;\n queries: OracleQueries;\n // TODO: replace getOracleObject with a class\n pollQueries: (cb: Parameters<typeof pollForQueries>[1]) => ReturnType<typeof pollForQueries>;\n postQuery: Function;\n respondToQuery: Function;\n extendOracle: Function;\n getQuery: Function;\n}\n\n/**\n * Register oracle\n * @category oracle\n * @param queryFormat - Format of query\n * @param responseFormat - Format of query response\n * @param options - Options\n * @param options.queryFee - Oracle query Fee\n * @param options - Options object\n * @param options.abiVersion - Always 0 (do not use virtual machine)\n * @param options.fee - Transaction fee\n * @param options.ttl - Transaction time to leave\n * @returns Oracle object\n */\nexport async function registerOracle(\n queryFormat: string,\n responseFormat: string,\n options: RegisterOracleOptions,\n): Promise<Awaited<ReturnType<typeof send>> & Awaited<ReturnType<typeof getOracleObject>>> {\n const accountId = await options.onAccount.address(options);\n const oracleRegisterTx = await _buildTx(Tag.OracleRegisterTx, {\n queryFee: QUERY_FEE,\n oracleTtlValue: ORACLE_TTL.value,\n oracleTtlType: ORACLE_TTL.type,\n ...options,\n accountId,\n queryFormat,\n responseFormat,\n });\n return {\n ...await send(oracleRegisterTx, options),\n ...await getOracleObject(encode(decode(accountId), Encoding.OracleAddress), options),\n };\n}\n\ntype RegisterOracleOptionsType = SendOptions & Parameters<typeof getOracleObject>[1]\n& BuildTxOptions<Tag.OracleRegisterTx, 'accountId' | 'queryFormat' | 'responseFormat' | 'queryFee' | 'oracleTtlType' | 'oracleTtlValue'>\n& {\n queryFee?: number | string | BigNumber;\n oracleTtlType?: ORACLE_TTL_TYPES;\n oracleTtlValue?: number;\n};\ninterface RegisterOracleOptions extends RegisterOracleOptionsType {}\n"],"mappings":"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"}
package/es/spend.d.ts CHANGED
@@ -1,61 +1,62 @@
1
1
  import { sendTransaction, resolveName } from './chain';
2
2
  import { BuildTxOptions } from './tx';
3
- import { EncodedData } from './utils/encoder';
4
- import { createMetaTx } from './contract/ga';
5
- import { TX_TYPE, AensName } from './tx/builder/schema';
3
+ import { Encoded } from './utils/encoder';
4
+ import { Tag, AensName } from './tx/builder/constants';
6
5
  import AccountBase from './account/Base';
7
6
  /**
8
7
  * Sign and post a transaction to the chain
8
+ * @category chain
9
9
  * @param tx - Transaction
10
10
  * @param options - Options
11
11
  * @param options.verify - Verify transaction before broadcast, throw error if not
12
12
  * valid
13
13
  * @returns Transaction
14
14
  */
15
- export declare function send(tx: EncodedData<'tx'>, options: SendOptions): Promise<SendReturnType>;
16
- declare type SendOptionsType = Parameters<AccountBase['signTransaction']>[1] & Parameters<typeof sendTransaction>[1] & Partial<Omit<Parameters<typeof signUsingGA>[1], 'onAccount' | 'onCompiler'>> & Pick<Parameters<typeof signUsingGA>[1], 'onAccount' | 'onCompiler'>;
15
+ export declare function send(tx: Encoded.Transaction, options: SendOptions): Promise<SendReturnType>;
16
+ declare type SendOptionsType = Parameters<AccountBase['signTransaction']>[1] & Parameters<typeof sendTransaction>[1] & {
17
+ onAccount: AccountBase;
18
+ };
17
19
  export interface SendOptions extends SendOptionsType {
18
20
  }
19
21
  interface SendReturnType extends Awaited<ReturnType<typeof sendTransaction>> {
20
22
  }
21
- export declare function signUsingGA(tx: EncodedData<'tx'>, { authData, authFun, ...options }: {
22
- authData: Parameters<typeof createMetaTx>[1];
23
- authFun: Parameters<typeof createMetaTx>[2];
24
- } & Parameters<typeof createMetaTx>[3]): Promise<EncodedData<'tx'>>;
25
23
  /**
26
24
  * Send coins to another account
25
+ * @category chain
27
26
  * @param amount - Amount to spend
28
27
  * @param recipientIdOrName - Address or name of recipient account
29
28
  * @param options - Options
30
29
  * @returns Transaction
31
30
  */
32
- export declare function spend(amount: number | string, recipientIdOrName: EncodedData<'ak'> | AensName, options: SpendOptions): ReturnType<typeof send>;
33
- declare type SpendOptionsType = BuildTxOptions<TX_TYPE.spend, 'senderId' | 'recipientId' | 'amount'> & Parameters<typeof resolveName>[2] & {
31
+ export declare function spend(amount: number | string, recipientIdOrName: Encoded.AccountAddress | AensName, options: SpendOptions): ReturnType<typeof send>;
32
+ declare type SpendOptionsType = BuildTxOptions<Tag.SpendTx, 'senderId' | 'recipientId' | 'amount'> & Parameters<typeof resolveName>[2] & {
34
33
  onAccount: AccountBase;
35
34
  } & SendOptions;
36
35
  interface SpendOptions extends SpendOptionsType {
37
36
  }
38
37
  /**
39
38
  * Send a fraction of coin balance to another account
39
+ * @category chain
40
40
  * @param fraction - Fraction of balance to spend (between 0 and 1)
41
41
  * @param recipientIdOrName - Address or name of recipient account
42
42
  * @param options - Options
43
43
  * @returns Transaction
44
44
  */
45
- export declare function transferFunds(fraction: number | string, recipientIdOrName: AensName | EncodedData<'ak'>, options: TransferFundsOptions): ReturnType<typeof send>;
46
- declare type TransferFundsOptionsType = BuildTxOptions<TX_TYPE.spend, 'senderId' | 'recipientId' | 'amount'> & Parameters<typeof resolveName>[2] & {
45
+ export declare function transferFunds(fraction: number | string, recipientIdOrName: AensName | Encoded.AccountAddress, options: TransferFundsOptions): ReturnType<typeof send>;
46
+ declare type TransferFundsOptionsType = BuildTxOptions<Tag.SpendTx, 'senderId' | 'recipientId' | 'amount'> & Parameters<typeof resolveName>[2] & {
47
47
  onAccount: AccountBase;
48
48
  } & SendOptions;
49
49
  interface TransferFundsOptions extends TransferFundsOptionsType {
50
50
  }
51
51
  /**
52
52
  * Submit transaction of another account paying for it (fee and gas)
53
+ * @category chain
53
54
  * @param transaction - tx_<base64>-encoded transaction
54
55
  * @param options - Options
55
56
  * @returns Object Transaction
56
57
  */
57
- export declare function payForTransaction(transaction: EncodedData<'tx'>, options: PayForTransactionOptions): ReturnType<typeof send>;
58
- interface PayForTransactionOptions extends BuildTxOptions<TX_TYPE.payingFor, 'payerId' | 'tx'>, SendOptions {
58
+ export declare function payForTransaction(transaction: Encoded.Transaction, options: PayForTransactionOptions): ReturnType<typeof send>;
59
+ interface PayForTransactionOptions extends BuildTxOptions<Tag.PayingForTx, 'payerId' | 'tx'>, SendOptions {
59
60
  onAccount: AccountBase;
60
61
  }
61
62
  export {};
package/es/spend.mjs CHANGED
@@ -14,16 +14,16 @@
14
14
  * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
15
15
  * PERFORMANCE OF THIS SOFTWARE.
16
16
  */
17
+ import BigNumber from 'bignumber.js';
17
18
  import { sendTransaction, getAccount, getBalance, resolveName } from "./chain.mjs";
18
19
  import { _buildTx } from "./tx/index.mjs";
19
20
  import { buildTxHash, unpackTx } from "./tx/builder/index.mjs";
20
- import BigNumber from 'bignumber.js';
21
21
  import { ArgumentError } from "./utils/errors.mjs";
22
- import { createMetaTx } from "./contract/ga.mjs";
23
- import { TX_TYPE } from "./tx/builder/schema.mjs";
22
+ import { Tag } from "./tx/builder/constants.mjs";
24
23
 
25
24
  /**
26
25
  * Sign and post a transaction to the chain
26
+ * @category chain
27
27
  * @param tx - Transaction
28
28
  * @param options - Options
29
29
  * @param options.verify - Verify transaction before broadcast, throw error if not
@@ -31,41 +31,28 @@ import { TX_TYPE } from "./tx/builder/schema.mjs";
31
31
  * @returns Transaction
32
32
  */
33
33
  export async function send(tx, options) {
34
- const {
35
- contractId,
36
- authFun = undefined
37
- } = options.innerTx === true ? {
38
- contractId: null
39
- } : await getAccount(await options.onAccount.address(options), options);
40
- const signed = contractId != null // TODO: not required arguments become required depending on account type, can ga be extracted?
41
- ? await signUsingGA(tx, {
42
- authData: {},
43
- ...options,
44
- authFun: authFun
45
- }) : await options.onAccount.signTransaction(tx, options);
34
+ // TODO: detect authFun in AccountGa
35
+ const authFun = options.innerTx === true ? undefined : (await getAccount(await options.onAccount.address(options), options)).authFun;
36
+ const signed = await options.onAccount.signTransaction(tx, { ...options,
37
+ authFun,
38
+ networkId: (await options.onNode.getStatus()).networkId
39
+ });
46
40
  return options.innerTx === true ? {
47
41
  hash: buildTxHash(signed),
48
42
  rawTx: signed
49
- } : await sendTransaction(signed, options);
50
- }
51
- export async function signUsingGA(tx, _ref) {
52
- let {
53
- authData,
54
- authFun,
55
- ...options
56
- } = _ref;
57
- return await createMetaTx(tx, authData, authFun, options);
43
+ } : sendTransaction(signed, options);
58
44
  }
45
+
59
46
  /**
60
47
  * Send coins to another account
48
+ * @category chain
61
49
  * @param amount - Amount to spend
62
50
  * @param recipientIdOrName - Address or name of recipient account
63
51
  * @param options - Options
64
52
  * @returns Transaction
65
53
  */
66
-
67
54
  export async function spend(amount, recipientIdOrName, options) {
68
- return await send(await _buildTx(TX_TYPE.spend, { ...options,
55
+ return send(await _buildTx(Tag.SpendTx, { ...options,
69
56
  senderId: await options.onAccount.address(options),
70
57
  recipientId: await resolveName(recipientIdOrName, 'account_pubkey', options),
71
58
  amount
@@ -75,6 +62,7 @@ export async function spend(amount, recipientIdOrName, options) {
75
62
 
76
63
  /**
77
64
  * Send a fraction of coin balance to another account
65
+ * @category chain
78
66
  * @param fraction - Fraction of balance to spend (between 0 and 1)
79
67
  * @param recipientIdOrName - Address or name of recipient account
80
68
  * @param options - Options
@@ -93,14 +81,14 @@ export async function transferFunds(fraction, recipientIdOrName, options) {
93
81
  tx: {
94
82
  fee
95
83
  }
96
- } = unpackTx(await _buildTx(TX_TYPE.spend, { ...options,
84
+ } = unpackTx(await _buildTx(Tag.SpendTx, { ...options,
97
85
  senderId,
98
86
  recipientId,
99
87
  amount: desiredAmount
100
- }), TX_TYPE.spend); // Reducing of the amount may reduce transaction fee, so this is not completely accurate
88
+ }), Tag.SpendTx); // Reducing of the amount may reduce transaction fee, so this is not completely accurate
101
89
 
102
90
  const amount = desiredAmount.plus(fee).gt(balance) ? balance.minus(fee) : desiredAmount;
103
- return await send(await _buildTx(TX_TYPE.spend, { ...options,
91
+ return send(await _buildTx(Tag.SpendTx, { ...options,
104
92
  senderId,
105
93
  recipientId,
106
94
  amount
@@ -109,12 +97,13 @@ export async function transferFunds(fraction, recipientIdOrName, options) {
109
97
 
110
98
  /**
111
99
  * Submit transaction of another account paying for it (fee and gas)
100
+ * @category chain
112
101
  * @param transaction - tx_<base64>-encoded transaction
113
102
  * @param options - Options
114
103
  * @returns Object Transaction
115
104
  */
116
105
  export async function payForTransaction(transaction, options) {
117
- return await send(await _buildTx(TX_TYPE.payingFor, { ...options,
106
+ return send(await _buildTx(Tag.PayingForTx, { ...options,
118
107
  payerId: await options.onAccount.address(options),
119
108
  tx: transaction
120
109
  }), options);
package/es/spend.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"spend.mjs","names":["sendTransaction","getAccount","getBalance","resolveName","_buildTx","buildTxHash","unpackTx","BigNumber","ArgumentError","createMetaTx","TX_TYPE","send","tx","options","contractId","authFun","undefined","innerTx","onAccount","address","signed","signUsingGA","authData","signTransaction","hash","rawTx","spend","amount","recipientIdOrName","senderId","recipientId","transferFunds","fraction","balance","bind","desiredAmount","times","integerValue","ROUND_HALF_UP","fee","plus","gt","minus","payForTransaction","transaction","payingFor","payerId"],"sources":["../src/spend.ts"],"sourcesContent":["/*\n * ISC License (ISC)\n * Copyright (c) 2022 aeternity developers\n *\n * Permission to use, copy, modify, and/or distribute this software for any\n * purpose with or without fee is hereby granted, provided that the above\n * copyright notice and this permission notice appear in all copies.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\n * AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\n * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\n * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\n * PERFORMANCE OF THIS SOFTWARE.\n */\nimport { sendTransaction, getAccount, getBalance, resolveName } from './chain'\nimport { _buildTx, BuildTxOptions } from './tx'\nimport { buildTxHash, unpackTx } from './tx/builder'\nimport BigNumber from 'bignumber.js'\nimport { ArgumentError } from './utils/errors'\nimport { EncodedData } from './utils/encoder'\nimport { createMetaTx } from './contract/ga'\nimport { TX_TYPE, AensName } from './tx/builder/schema'\nimport AccountBase from './account/Base'\n\n/**\n * Sign and post a transaction to the chain\n * @param tx - Transaction\n * @param options - Options\n * @param options.verify - Verify transaction before broadcast, throw error if not\n * valid\n * @returns Transaction\n */\nexport async function send (tx: EncodedData<'tx'>, options: SendOptions): Promise<SendReturnType> {\n const { contractId, authFun = undefined } = options.innerTx === true\n ? { contractId: null }\n : await getAccount(await options.onAccount.address(options), options)\n\n const signed = contractId != null\n // TODO: not required arguments become required depending on account type, can ga be extracted?\n ? await signUsingGA(tx, { authData: {}, ...options, authFun: authFun as string })\n : await options.onAccount.signTransaction(tx, options)\n\n return options.innerTx === true\n ? { hash: buildTxHash(signed), rawTx: signed }\n : await sendTransaction(signed, options)\n}\n\ntype SendOptionsType = Parameters<AccountBase['signTransaction']>[1] & Parameters<typeof sendTransaction>[1]\n& Partial<Omit<Parameters<typeof signUsingGA>[1], 'onAccount' | 'onCompiler'>>\n& Pick<Parameters<typeof signUsingGA>[1], 'onAccount' | 'onCompiler'>\nexport interface SendOptions extends SendOptionsType {}\ninterface SendReturnType extends Awaited<ReturnType<typeof sendTransaction>> {}\n\nexport async function signUsingGA (\n tx: EncodedData<'tx'>,\n { authData, authFun, ...options }: {\n authData: Parameters<typeof createMetaTx>[1]\n authFun: Parameters<typeof createMetaTx>[2]\n } & Parameters<typeof createMetaTx>[3]\n): Promise<EncodedData<'tx'>> {\n return await createMetaTx(tx, authData, authFun, options)\n}\n\n/**\n * Send coins to another account\n * @param amount - Amount to spend\n * @param recipientIdOrName - Address or name of recipient account\n * @param options - Options\n * @returns Transaction\n */\nexport async function spend (\n amount: number | string,\n recipientIdOrName: EncodedData<'ak'> | AensName,\n options: SpendOptions\n): ReturnType<typeof send> {\n return await send(\n await _buildTx(TX_TYPE.spend, {\n ...options,\n senderId: await options.onAccount.address(options),\n recipientId: await resolveName(recipientIdOrName, 'account_pubkey', options),\n amount\n }),\n options\n )\n}\n\ntype SpendOptionsType = BuildTxOptions<TX_TYPE.spend, 'senderId' | 'recipientId' | 'amount'>\n& Parameters<typeof resolveName>[2] & { onAccount: AccountBase } & SendOptions\ninterface SpendOptions extends SpendOptionsType {}\n\n// TODO: Rename to spendFraction\n/**\n * Send a fraction of coin balance to another account\n * @param fraction - Fraction of balance to spend (between 0 and 1)\n * @param recipientIdOrName - Address or name of recipient account\n * @param options - Options\n * @returns Transaction\n */\nexport async function transferFunds (\n fraction: number | string,\n recipientIdOrName: AensName | EncodedData<'ak'>,\n options: TransferFundsOptions\n): ReturnType<typeof send> {\n if (fraction < 0 || fraction > 1) {\n throw new ArgumentError('fraction', 'a number between 0 and 1', fraction)\n }\n const recipientId = await resolveName<'ak'>(recipientIdOrName, 'account_pubkey', options)\n const senderId = await options.onAccount.address(options)\n const balance = new BigNumber(\n await getBalance.bind(options.onAccount)(senderId, options)\n )\n const desiredAmount = balance.times(fraction).integerValue(BigNumber.ROUND_HALF_UP)\n const { tx: { fee } } = unpackTx(\n await _buildTx(TX_TYPE.spend, { ...options, senderId, recipientId, amount: desiredAmount }),\n TX_TYPE.spend\n )\n // Reducing of the amount may reduce transaction fee, so this is not completely accurate\n const amount = desiredAmount.plus(fee).gt(balance) ? balance.minus(fee) : desiredAmount\n return await send(\n await _buildTx(TX_TYPE.spend, { ...options, senderId, recipientId, amount }),\n options\n )\n}\n\ntype TransferFundsOptionsType = BuildTxOptions<TX_TYPE.spend, 'senderId' | 'recipientId' | 'amount'>\n& Parameters<typeof resolveName>[2] & { onAccount: AccountBase } & SendOptions\ninterface TransferFundsOptions extends TransferFundsOptionsType {}\n\n/**\n * Submit transaction of another account paying for it (fee and gas)\n * @param transaction - tx_<base64>-encoded transaction\n * @param options - Options\n * @returns Object Transaction\n */\nexport async function payForTransaction (\n transaction: EncodedData<'tx'>, options: PayForTransactionOptions\n): ReturnType<typeof send> {\n return await send(\n await _buildTx(\n TX_TYPE.payingFor,\n { ...options, payerId: await options.onAccount.address(options), tx: transaction }\n ),\n options\n )\n}\n\ninterface PayForTransactionOptions extends\n BuildTxOptions<TX_TYPE.payingFor, 'payerId' | 'tx'>, SendOptions {\n onAccount: AccountBase\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"spend.mjs","names":["BigNumber","sendTransaction","getAccount","getBalance","resolveName","_buildTx","buildTxHash","unpackTx","ArgumentError","Tag","send","tx","options","authFun","innerTx","undefined","onAccount","address","signed","signTransaction","networkId","onNode","getStatus","hash","rawTx","spend","amount","recipientIdOrName","SpendTx","senderId","recipientId","transferFunds","fraction","balance","bind","desiredAmount","times","integerValue","ROUND_HALF_UP","fee","plus","gt","minus","payForTransaction","transaction","PayingForTx","payerId"],"sources":["../src/spend.ts"],"sourcesContent":["/*\n * ISC License (ISC)\n * Copyright (c) 2022 aeternity developers\n *\n * Permission to use, copy, modify, and/or distribute this software for any\n * purpose with or without fee is hereby granted, provided that the above\n * copyright notice and this permission notice appear in all copies.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\n * AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\n * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\n * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\n * PERFORMANCE OF THIS SOFTWARE.\n */\nimport BigNumber from 'bignumber.js';\nimport {\n sendTransaction, getAccount, getBalance, resolveName,\n} from './chain';\nimport { _buildTx, BuildTxOptions } from './tx';\nimport { buildTxHash, unpackTx } from './tx/builder';\nimport { ArgumentError } from './utils/errors';\nimport { Encoded, Encoding } from './utils/encoder';\nimport { Tag, AensName } from './tx/builder/constants';\nimport AccountBase from './account/Base';\n\n/**\n * Sign and post a transaction to the chain\n * @category chain\n * @param tx - Transaction\n * @param options - Options\n * @param options.verify - Verify transaction before broadcast, throw error if not\n * valid\n * @returns Transaction\n */\nexport async function send(\n tx: Encoded.Transaction,\n options: SendOptions,\n): Promise<SendReturnType> {\n // TODO: detect authFun in AccountGa\n const authFun = options.innerTx === true\n ? undefined\n : (await getAccount(await options.onAccount.address(options), options)).authFun;\n\n const signed = await options.onAccount.signTransaction(tx, {\n ...options,\n authFun,\n networkId: (await options.onNode.getStatus()).networkId,\n });\n\n return options.innerTx === true\n ? { hash: buildTxHash(signed), rawTx: signed }\n : sendTransaction(signed, options);\n}\n\ntype SendOptionsType = Parameters<AccountBase['signTransaction']>[1]\n& Parameters<typeof sendTransaction>[1] & { onAccount: AccountBase };\nexport interface SendOptions extends SendOptionsType {}\ninterface SendReturnType extends Awaited<ReturnType<typeof sendTransaction>> {}\n\n/**\n * Send coins to another account\n * @category chain\n * @param amount - Amount to spend\n * @param recipientIdOrName - Address or name of recipient account\n * @param options - Options\n * @returns Transaction\n */\nexport async function spend(\n amount: number | string,\n recipientIdOrName: Encoded.AccountAddress | AensName,\n options: SpendOptions,\n): ReturnType<typeof send> {\n return send(\n await _buildTx(Tag.SpendTx, {\n ...options,\n senderId: await options.onAccount.address(options),\n recipientId: await resolveName<Encoding.AccountAddress>(\n recipientIdOrName,\n 'account_pubkey',\n options,\n ),\n amount,\n }),\n options,\n );\n}\n\ntype SpendOptionsType = BuildTxOptions<Tag.SpendTx, 'senderId' | 'recipientId' | 'amount'>\n& Parameters<typeof resolveName>[2] & { onAccount: AccountBase } & SendOptions;\ninterface SpendOptions extends SpendOptionsType {}\n\n// TODO: Rename to spendFraction\n/**\n * Send a fraction of coin balance to another account\n * @category chain\n * @param fraction - Fraction of balance to spend (between 0 and 1)\n * @param recipientIdOrName - Address or name of recipient account\n * @param options - Options\n * @returns Transaction\n */\nexport async function transferFunds(\n fraction: number | string,\n recipientIdOrName: AensName | Encoded.AccountAddress,\n options: TransferFundsOptions,\n): ReturnType<typeof send> {\n if (fraction < 0 || fraction > 1) {\n throw new ArgumentError('fraction', 'a number between 0 and 1', fraction);\n }\n const recipientId = await resolveName<Encoding.AccountAddress>(\n recipientIdOrName,\n 'account_pubkey',\n options,\n );\n const senderId = await options.onAccount.address(options);\n const balance = new BigNumber(\n await getBalance.bind(options.onAccount)(senderId, options),\n );\n const desiredAmount = balance.times(fraction).integerValue(BigNumber.ROUND_HALF_UP);\n const { tx: { fee } } = unpackTx(\n await _buildTx(Tag.SpendTx, {\n ...options, senderId, recipientId, amount: desiredAmount,\n }),\n Tag.SpendTx,\n );\n // Reducing of the amount may reduce transaction fee, so this is not completely accurate\n const amount = desiredAmount.plus(fee).gt(balance) ? balance.minus(fee) : desiredAmount;\n return send(\n await _buildTx(Tag.SpendTx, {\n ...options, senderId, recipientId, amount,\n }),\n options,\n );\n}\n\ntype TransferFundsOptionsType = BuildTxOptions<Tag.SpendTx, 'senderId' | 'recipientId' | 'amount'>\n& Parameters<typeof resolveName>[2] & { onAccount: AccountBase } & SendOptions;\ninterface TransferFundsOptions extends TransferFundsOptionsType {}\n\n/**\n * Submit transaction of another account paying for it (fee and gas)\n * @category chain\n * @param transaction - tx_<base64>-encoded transaction\n * @param options - Options\n * @returns Object Transaction\n */\nexport async function payForTransaction(\n transaction: Encoded.Transaction,\n options: PayForTransactionOptions,\n): ReturnType<typeof send> {\n return send(\n await _buildTx(\n Tag.PayingForTx,\n { ...options, payerId: await options.onAccount.address(options), tx: transaction },\n ),\n options,\n );\n}\n\ninterface PayForTransactionOptions extends\n BuildTxOptions<Tag.PayingForTx, 'payerId' | 'tx'>, SendOptions {\n onAccount: AccountBase;\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAOA,SAAP,MAAsB,cAAtB;SAEEC,e,EAAiBC,U,EAAYC,U,EAAYC,W;SAElCC,Q;SACAC,W,EAAaC,Q;SACbC,a;SAEAC,G;;AAGT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,eAAeC,IAAf,CACLC,EADK,EAELC,OAFK,EAGoB;EACzB;EACA,MAAMC,OAAO,GAAGD,OAAO,CAACE,OAAR,KAAoB,IAApB,GACZC,SADY,GAEZ,CAAC,MAAMb,UAAU,CAAC,MAAMU,OAAO,CAACI,SAAR,CAAkBC,OAAlB,CAA0BL,OAA1B,CAAP,EAA2CA,OAA3C,CAAjB,EAAsEC,OAF1E;EAIA,MAAMK,MAAM,GAAG,MAAMN,OAAO,CAACI,SAAR,CAAkBG,eAAlB,CAAkCR,EAAlC,EAAsC,EACzD,GAAGC,OADsD;IAEzDC,OAFyD;IAGzDO,SAAS,EAAE,CAAC,MAAMR,OAAO,CAACS,MAAR,CAAeC,SAAf,EAAP,EAAmCF;EAHW,CAAtC,CAArB;EAMA,OAAOR,OAAO,CAACE,OAAR,KAAoB,IAApB,GACH;IAAES,IAAI,EAAEjB,WAAW,CAACY,MAAD,CAAnB;IAA6BM,KAAK,EAAEN;EAApC,CADG,GAEHjB,eAAe,CAACiB,MAAD,EAASN,OAAT,CAFnB;AAGD;;AAOD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,eAAea,KAAf,CACLC,MADK,EAELC,iBAFK,EAGLf,OAHK,EAIoB;EACzB,OAAOF,IAAI,CACT,MAAML,QAAQ,CAACI,GAAG,CAACmB,OAAL,EAAc,EAC1B,GAAGhB,OADuB;IAE1BiB,QAAQ,EAAE,MAAMjB,OAAO,CAACI,SAAR,CAAkBC,OAAlB,CAA0BL,OAA1B,CAFU;IAG1BkB,WAAW,EAAE,MAAM1B,WAAW,CAC5BuB,iBAD4B,EAE5B,gBAF4B,EAG5Bf,OAH4B,CAHJ;IAQ1Bc;EAR0B,CAAd,CADL,EAWTd,OAXS,CAAX;AAaD;AAMD;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,eAAemB,aAAf,CACLC,QADK,EAELL,iBAFK,EAGLf,OAHK,EAIoB;EACzB,IAAIoB,QAAQ,GAAG,CAAX,IAAgBA,QAAQ,GAAG,CAA/B,EAAkC;IAChC,MAAM,IAAIxB,aAAJ,CAAkB,UAAlB,EAA8B,0BAA9B,EAA0DwB,QAA1D,CAAN;EACD;;EACD,MAAMF,WAAW,GAAG,MAAM1B,WAAW,CACnCuB,iBADmC,EAEnC,gBAFmC,EAGnCf,OAHmC,CAArC;EAKA,MAAMiB,QAAQ,GAAG,MAAMjB,OAAO,CAACI,SAAR,CAAkBC,OAAlB,CAA0BL,OAA1B,CAAvB;EACA,MAAMqB,OAAO,GAAG,IAAIjC,SAAJ,CACd,MAAMG,UAAU,CAAC+B,IAAX,CAAgBtB,OAAO,CAACI,SAAxB,EAAmCa,QAAnC,EAA6CjB,OAA7C,CADQ,CAAhB;EAGA,MAAMuB,aAAa,GAAGF,OAAO,CAACG,KAAR,CAAcJ,QAAd,EAAwBK,YAAxB,CAAqCrC,SAAS,CAACsC,aAA/C,CAAtB;EACA,MAAM;IAAE3B,EAAE,EAAE;MAAE4B;IAAF;EAAN,IAAkBhC,QAAQ,CAC9B,MAAMF,QAAQ,CAACI,GAAG,CAACmB,OAAL,EAAc,EAC1B,GAAGhB,OADuB;IACdiB,QADc;IACJC,WADI;IACSJ,MAAM,EAAES;EADjB,CAAd,CADgB,EAI9B1B,GAAG,CAACmB,OAJ0B,CAAhC,CAdyB,CAoBzB;;EACA,MAAMF,MAAM,GAAGS,aAAa,CAACK,IAAd,CAAmBD,GAAnB,EAAwBE,EAAxB,CAA2BR,OAA3B,IAAsCA,OAAO,CAACS,KAAR,CAAcH,GAAd,CAAtC,GAA2DJ,aAA1E;EACA,OAAOzB,IAAI,CACT,MAAML,QAAQ,CAACI,GAAG,CAACmB,OAAL,EAAc,EAC1B,GAAGhB,OADuB;IACdiB,QADc;IACJC,WADI;IACSJ;EADT,CAAd,CADL,EAITd,OAJS,CAAX;AAMD;;AAMD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,eAAe+B,iBAAf,CACLC,WADK,EAELhC,OAFK,EAGoB;EACzB,OAAOF,IAAI,CACT,MAAML,QAAQ,CACZI,GAAG,CAACoC,WADQ,EAEZ,EAAE,GAAGjC,OAAL;IAAckC,OAAO,EAAE,MAAMlC,OAAO,CAACI,SAAR,CAAkBC,OAAlB,CAA0BL,OAA1B,CAA7B;IAAiED,EAAE,EAAEiC;EAArE,CAFY,CADL,EAKThC,OALS,CAAX;AAOD"}
@@ -0,0 +1,25 @@
1
+ /// <reference types="node" />
2
+ import { Encoded } from '../../utils/encoder';
3
+ /**
4
+ * Map of prefix to ID tag constant
5
+ * @see {@link https://github.com/aeternity/protocol/blob/master/serializations.md#the-id-type}
6
+ * @see {@link https://github.com/aeternity/aeserialization/blob/eb68fe331bd476910394966b7f5ede7a74d37e35/src/aeser_id.erl#L97-L102}
7
+ * @see {@link https://github.com/aeternity/aeserialization/blob/eb68fe331bd476910394966b7f5ede7a74d37e35/src/aeser_api_encoder.erl#L163-L168}
8
+ */
9
+ declare const idTagToEncoding: readonly [Encoded.Encoding.AccountAddress, Encoded.Encoding.Name, Encoded.Encoding.Commitment, Encoded.Encoding.OracleAddress, Encoded.Encoding.ContractAddress, Encoded.Encoding.Channel];
10
+ declare type AddressEncodings = typeof idTagToEncoding[number];
11
+ /**
12
+ * Utility function to create and _id type
13
+ * @category transaction builder
14
+ * @param hashId - Encoded hash
15
+ * @returns Buffer Buffer with ID tag and decoded HASh
16
+ */
17
+ export declare function writeId(hashId: Encoded.Generic<AddressEncodings>): Buffer;
18
+ /**
19
+ * Utility function to read and _id type
20
+ * @category transaction builder
21
+ * @param buf - Data
22
+ * @returns Encoided hash string with prefix
23
+ */
24
+ export declare function readId(buf: Buffer): Encoded.Generic<AddressEncodings>;
25
+ export {};
@@ -0,0 +1,45 @@
1
+ import _buffer from "buffer";
2
+ const {
3
+ Buffer: _Buffer
4
+ } = _buffer;
5
+ import { ArgumentError, PrefixNotFoundError, TagNotFoundError } from "../../utils/errors.mjs";
6
+ import { toBytes } from "../../utils/bytes.mjs";
7
+ import { decode, encode, Encoding } from "../../utils/encoder.mjs";
8
+ import { isItemOfArray } from "../../utils/other.mjs";
9
+ /**
10
+ * Map of prefix to ID tag constant
11
+ * @see {@link https://github.com/aeternity/protocol/blob/master/serializations.md#the-id-type}
12
+ * @see {@link https://github.com/aeternity/aeserialization/blob/eb68fe331bd476910394966b7f5ede7a74d37e35/src/aeser_id.erl#L97-L102}
13
+ * @see {@link https://github.com/aeternity/aeserialization/blob/eb68fe331bd476910394966b7f5ede7a74d37e35/src/aeser_api_encoder.erl#L163-L168}
14
+ */
15
+
16
+ const idTagToEncoding = [Encoding.AccountAddress, Encoding.Name, Encoding.Commitment, Encoding.OracleAddress, Encoding.ContractAddress, Encoding.Channel];
17
+
18
+ /**
19
+ * Utility function to create and _id type
20
+ * @category transaction builder
21
+ * @param hashId - Encoded hash
22
+ * @returns Buffer Buffer with ID tag and decoded HASh
23
+ */
24
+ export function writeId(hashId) {
25
+ if (typeof hashId !== 'string') throw new ArgumentError('hashId', 'a string', hashId);
26
+ const encoding = hashId.slice(0, 2);
27
+ if (!isItemOfArray(encoding, idTagToEncoding)) throw new TagNotFoundError(encoding);
28
+ const idTag = idTagToEncoding.indexOf(encoding) + 1;
29
+ return _Buffer.from([...toBytes(idTag), ...decode(hashId)]);
30
+ }
31
+ /**
32
+ * Utility function to read and _id type
33
+ * @category transaction builder
34
+ * @param buf - Data
35
+ * @returns Encoided hash string with prefix
36
+ */
37
+
38
+ export function readId(buf) {
39
+ const idTag = _Buffer.from(buf).readUIntBE(0, 1);
40
+
41
+ const encoding = idTagToEncoding[idTag - 1];
42
+ if (encoding == null) throw new PrefixNotFoundError(idTag);
43
+ return encode(buf.slice(1, buf.length), encoding);
44
+ }
45
+ //# sourceMappingURL=address.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"address.mjs","names":["ArgumentError","PrefixNotFoundError","TagNotFoundError","toBytes","decode","encode","Encoding","isItemOfArray","idTagToEncoding","AccountAddress","Name","Commitment","OracleAddress","ContractAddress","Channel","writeId","hashId","encoding","slice","idTag","indexOf","from","readId","buf","readUIntBE","length"],"sources":["../../../src/tx/builder/address.ts"],"sourcesContent":["import { ArgumentError, PrefixNotFoundError, TagNotFoundError } from '../../utils/errors';\nimport { toBytes } from '../../utils/bytes';\nimport {\n decode, encode, Encoded, Encoding,\n} from '../../utils/encoder';\nimport { isItemOfArray } from '../../utils/other';\n\n/**\n * Map of prefix to ID tag constant\n * @see {@link https://github.com/aeternity/protocol/blob/master/serializations.md#the-id-type}\n * @see {@link https://github.com/aeternity/aeserialization/blob/eb68fe331bd476910394966b7f5ede7a74d37e35/src/aeser_id.erl#L97-L102}\n * @see {@link https://github.com/aeternity/aeserialization/blob/eb68fe331bd476910394966b7f5ede7a74d37e35/src/aeser_api_encoder.erl#L163-L168}\n */\nconst idTagToEncoding = [\n Encoding.AccountAddress,\n Encoding.Name,\n Encoding.Commitment,\n Encoding.OracleAddress,\n Encoding.ContractAddress,\n Encoding.Channel,\n] as const;\n\ntype AddressEncodings = typeof idTagToEncoding[number];\n\n/**\n * Utility function to create and _id type\n * @category transaction builder\n * @param hashId - Encoded hash\n * @returns Buffer Buffer with ID tag and decoded HASh\n */\nexport function writeId(hashId: Encoded.Generic<AddressEncodings>): Buffer {\n if (typeof hashId !== 'string') throw new ArgumentError('hashId', 'a string', hashId);\n const encoding = hashId.slice(0, 2);\n if (!isItemOfArray(encoding, idTagToEncoding)) throw new TagNotFoundError(encoding);\n const idTag = idTagToEncoding.indexOf(encoding) + 1;\n return Buffer.from([...toBytes(idTag), ...decode(hashId)]);\n}\n\n/**\n * Utility function to read and _id type\n * @category transaction builder\n * @param buf - Data\n * @returns Encoided hash string with prefix\n */\nexport function readId(buf: Buffer): Encoded.Generic<AddressEncodings> {\n const idTag = Buffer.from(buf).readUIntBE(0, 1);\n const encoding = idTagToEncoding[idTag - 1];\n if (encoding == null) throw new PrefixNotFoundError(idTag);\n return encode(buf.slice(1, buf.length), encoding);\n}\n"],"mappings":";;;;SAASA,a,EAAeC,mB,EAAqBC,gB;SACpCC,O;SAEPC,M,EAAQC,M,EAAiBC,Q;SAElBC,a;AAET;AACA;AACA;AACA;AACA;AACA;;AACA,MAAMC,eAAe,GAAG,CACtBF,QAAQ,CAACG,cADa,EAEtBH,QAAQ,CAACI,IAFa,EAGtBJ,QAAQ,CAACK,UAHa,EAItBL,QAAQ,CAACM,aAJa,EAKtBN,QAAQ,CAACO,eALa,EAMtBP,QAAQ,CAACQ,OANa,CAAxB;;AAWA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,OAAT,CAAiBC,MAAjB,EAAoE;EACzE,IAAI,OAAOA,MAAP,KAAkB,QAAtB,EAAgC,MAAM,IAAIhB,aAAJ,CAAkB,QAAlB,EAA4B,UAA5B,EAAwCgB,MAAxC,CAAN;EAChC,MAAMC,QAAQ,GAAGD,MAAM,CAACE,KAAP,CAAa,CAAb,EAAgB,CAAhB,CAAjB;EACA,IAAI,CAACX,aAAa,CAACU,QAAD,EAAWT,eAAX,CAAlB,EAA+C,MAAM,IAAIN,gBAAJ,CAAqBe,QAArB,CAAN;EAC/C,MAAME,KAAK,GAAGX,eAAe,CAACY,OAAhB,CAAwBH,QAAxB,IAAoC,CAAlD;EACA,OAAO,QAAOI,IAAP,CAAY,CAAC,GAAGlB,OAAO,CAACgB,KAAD,CAAX,EAAoB,GAAGf,MAAM,CAACY,MAAD,CAA7B,CAAZ,CAAP;AACD;AAED;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASM,MAAT,CAAgBC,GAAhB,EAAgE;EACrE,MAAMJ,KAAK,GAAG,QAAOE,IAAP,CAAYE,GAAZ,EAAiBC,UAAjB,CAA4B,CAA5B,EAA+B,CAA/B,CAAd;;EACA,MAAMP,QAAQ,GAAGT,eAAe,CAACW,KAAK,GAAG,CAAT,CAAhC;EACA,IAAIF,QAAQ,IAAI,IAAhB,EAAsB,MAAM,IAAIhB,mBAAJ,CAAwBkB,KAAxB,CAAN;EACtB,OAAOd,MAAM,CAACkB,GAAG,CAACL,KAAJ,CAAU,CAAV,EAAaK,GAAG,CAACE,MAAjB,CAAD,EAA2BR,QAA3B,CAAb;AACD"}
@@ -1,4 +1,3 @@
1
- import { EncodingType } from './../../utils/encoder';
2
1
  import BigNumber from 'bignumber.js';
3
2
  export declare type AensName = `${string}.chain`;
4
3
  export declare const NAME_TTL = 180000;
@@ -11,31 +10,61 @@ export declare const NAME_FEE_BID_INCREMENT = 0.05;
11
10
  export declare const NAME_BID_TIMEOUT_BLOCKS = 480;
12
11
  export declare const NAME_MAX_LENGTH_FEE = 31;
13
12
  export declare const NAME_BID_MAX_LENGTH = 12;
14
- export declare enum POINTER_KEY_BY_PREFIX {
15
- ak = "account_pubkey",
16
- ok = "oracle_pubkey",
17
- ct = "contract_pubkey",
18
- ch = "channel"
19
- }
20
13
  export declare const NAME_BID_RANGES: {
21
14
  [k: string]: BigNumber;
22
15
  };
23
- export declare const ID_TAG: {
24
- account: number;
25
- name: number;
26
- commitment: number;
27
- oracle: number;
28
- contract: number;
29
- channel: number;
30
- };
31
- export declare const PREFIX_ID_TAG: {
32
- readonly ak: number;
33
- readonly nm: number;
34
- readonly cm: number;
35
- readonly ok: number;
36
- readonly ct: number;
37
- readonly ch: number;
38
- };
39
- export declare const ID_TAG_PREFIX: {
40
- [k: string]: EncodingType;
41
- };
16
+ /**
17
+ * Enum with tag types
18
+ * @category transaction builder
19
+ * @see {@link https://github.com/aeternity/protocol/blob/0f6dee3d9d1e8e2469816798f5c7587a6c918f94/serializations.md#binary-serialization}
20
+ * @see {@link https://github.com/aeternity/aeserialization/blob/eb68fe331bd476910394966b7f5ede7a74d37e35/src/aeser_chain_objects.erl#L39-L97}
21
+ */
22
+ export declare enum Tag {
23
+ Account = 10,
24
+ SignedTx = 11,
25
+ SpendTx = 12,
26
+ OracleRegisterTx = 22,
27
+ OracleQueryTx = 23,
28
+ OracleResponseTx = 24,
29
+ OracleExtendTx = 25,
30
+ NameClaimTx = 32,
31
+ NamePreclaimTx = 33,
32
+ NameUpdateTx = 34,
33
+ NameRevokeTx = 35,
34
+ NameTransferTx = 36,
35
+ Contract = 40,
36
+ ContractCall = 41,
37
+ ContractCreateTx = 42,
38
+ ContractCallTx = 43,
39
+ ChannelCreateTx = 50,
40
+ ChannelDepositTx = 51,
41
+ ChannelWithdrawTx = 52,
42
+ ChannelForceProgressTx = 521,
43
+ ChannelCloseMutualTx = 53,
44
+ ChannelCloseSoloTx = 54,
45
+ ChannelSlashTx = 55,
46
+ ChannelSettleTx = 56,
47
+ ChannelOffChainTx = 57,
48
+ ChannelOffChainUpdateTransfer = 570,
49
+ ChannelOffChainUpdateDeposit = 571,
50
+ ChannelOffChainUpdateWithdraw = 572,
51
+ ChannelOffChainUpdateCreateContract = 573,
52
+ ChannelOffChainUpdateCallContract = 574,
53
+ ChannelClientReconnectTx = 575,
54
+ Channel = 58,
55
+ ChannelSnapshotSoloTx = 59,
56
+ TreesPoi = 60,
57
+ StateTrees = 62,
58
+ Mtree = 63,
59
+ MtreeValue = 64,
60
+ ContractsMtree = 621,
61
+ CallsMtree = 622,
62
+ ChannelsMtree = 623,
63
+ NameserviceMtree = 624,
64
+ OraclesMtree = 625,
65
+ AccountsMtree = 626,
66
+ CompilerSophia = 70,
67
+ GaAttachTx = 80,
68
+ GaMetaTx = 81,
69
+ PayingForTx = 82
70
+ }