@aeternity/aepp-sdk 11.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 (442) hide show
  1. package/LICENSE +1 -1
  2. package/dist/aepp-sdk.browser-script.js +1 -1
  3. package/dist/aepp-sdk.browser-script.js.LICENSE.txt +0 -22
  4. package/dist/aepp-sdk.browser-script.js.map +1 -1
  5. package/dist/aepp-sdk.browser.js +2 -1
  6. package/dist/aepp-sdk.browser.js.LICENSE.txt +1 -0
  7. package/dist/aepp-sdk.browser.js.map +1 -1
  8. package/dist/aepp-sdk.js +20764 -1
  9. package/dist/aepp-sdk.js.map +1 -1
  10. package/es/AeSdk.d.ts +37 -0
  11. package/es/AeSdk.mjs +81 -0
  12. package/es/AeSdk.mjs.map +1 -0
  13. package/es/AeSdkAepp.d.ts +70 -0
  14. package/es/AeSdkAepp.mjs +176 -0
  15. package/es/AeSdkAepp.mjs.map +1 -0
  16. package/es/AeSdkBase.d.ts +213 -0
  17. package/es/AeSdkBase.mjs +314 -0
  18. package/es/AeSdkBase.mjs.map +1 -0
  19. package/es/AeSdkWallet.d.ts +104 -0
  20. package/es/AeSdkWallet.mjs +326 -0
  21. package/es/AeSdkWallet.mjs.map +1 -0
  22. package/es/Node.d.ts +41 -0
  23. package/es/Node.mjs +147 -0
  24. package/es/Node.mjs.map +1 -0
  25. package/es/account/Base.d.ts +68 -0
  26. package/es/account/Base.mjs +123 -0
  27. package/es/account/Base.mjs.map +1 -0
  28. package/es/account/Memory.d.ts +26 -0
  29. package/es/account/Memory.mjs +103 -0
  30. package/es/account/Memory.mjs.map +1 -0
  31. package/es/account/Rpc.d.ts +27 -0
  32. package/es/account/Rpc.mjs +80 -0
  33. package/es/account/Rpc.mjs.map +1 -0
  34. package/es/aens.d.ts +222 -0
  35. package/es/aens.mjs +338 -0
  36. package/es/aens.mjs.map +1 -0
  37. package/es/aepp-wallet-communication/connection/Browser.d.ts +33 -0
  38. package/es/aepp-wallet-communication/connection/Browser.mjs +73 -0
  39. package/es/aepp-wallet-communication/connection/Browser.mjs.map +1 -0
  40. package/es/aepp-wallet-communication/connection/BrowserRuntime.d.ts +18 -0
  41. package/es/aepp-wallet-communication/connection/BrowserRuntime.mjs +58 -0
  42. package/es/aepp-wallet-communication/connection/BrowserRuntime.mjs.map +1 -0
  43. package/es/aepp-wallet-communication/connection/BrowserWindowMessage.d.ts +36 -0
  44. package/es/aepp-wallet-communication/connection/BrowserWindowMessage.mjs +146 -0
  45. package/es/aepp-wallet-communication/connection/BrowserWindowMessage.mjs.map +1 -0
  46. package/es/aepp-wallet-communication/connection-proxy.d.ts +11 -0
  47. package/{src/utils/crypto-ts.ts → es/aepp-wallet-communication/connection-proxy.mjs} +16 -11
  48. package/es/aepp-wallet-communication/connection-proxy.mjs.map +1 -0
  49. package/es/aepp-wallet-communication/rpc/RpcClient.d.ts +34 -0
  50. package/es/aepp-wallet-communication/rpc/RpcClient.mjs +169 -0
  51. package/es/aepp-wallet-communication/rpc/RpcClient.mjs.map +1 -0
  52. package/es/aepp-wallet-communication/rpc/types.d.ts +77 -0
  53. package/es/aepp-wallet-communication/rpc/types.mjs +3 -0
  54. package/es/aepp-wallet-communication/rpc/types.mjs.map +1 -0
  55. package/es/aepp-wallet-communication/schema.d.ts +105 -46
  56. package/es/aepp-wallet-communication/schema.mjs +251 -0
  57. package/es/aepp-wallet-communication/schema.mjs.map +1 -0
  58. package/es/aepp-wallet-communication/wallet-detector.d.ts +25 -0
  59. package/es/aepp-wallet-communication/wallet-detector.mjs +62 -0
  60. package/es/aepp-wallet-communication/wallet-detector.mjs.map +1 -0
  61. package/es/apis/compiler/compiler.d.ts +92 -0
  62. package/es/apis/compiler/compiler.mjs +576 -0
  63. package/es/apis/compiler/compiler.mjs.map +1 -0
  64. package/es/apis/compiler/index.d.ts +2 -0
  65. package/es/apis/compiler/index.mjs +3 -0
  66. package/es/apis/compiler/index.mjs.map +1 -0
  67. package/es/apis/compiler/models/index.d.ts +248 -0
  68. package/es/apis/compiler/models/index.mjs +48 -0
  69. package/es/apis/compiler/models/index.mjs.map +1 -0
  70. package/es/apis/compiler/models/mappers.d.ts +23 -0
  71. package/es/apis/compiler/models/mappers.mjs +585 -0
  72. package/es/apis/compiler/models/mappers.mjs.map +1 -0
  73. package/es/apis/compiler/models/parameters.d.ts +13 -0
  74. package/es/apis/compiler/models/parameters.mjs +71 -0
  75. package/es/apis/compiler/models/parameters.mjs.map +1 -0
  76. package/es/apis/node/index.d.ts +2 -0
  77. package/es/apis/node/index.mjs +3 -0
  78. package/es/apis/node/index.mjs.map +1 -0
  79. package/es/apis/node/models/index.d.ts +1065 -0
  80. package/es/apis/node/models/index.mjs +2 -0
  81. package/es/apis/node/models/index.mjs.map +1 -0
  82. package/es/apis/node/models/mappers.d.ts +95 -0
  83. package/es/apis/node/models/mappers.mjs +4166 -0
  84. package/es/apis/node/models/mappers.mjs.map +1 -0
  85. package/es/apis/node/models/parameters.d.ts +17 -0
  86. package/es/apis/node/models/parameters.mjs +165 -0
  87. package/es/apis/node/models/parameters.mjs.map +1 -0
  88. package/es/apis/node/node.d.ts +215 -0
  89. package/es/apis/node/node.mjs +1165 -0
  90. package/es/apis/node/node.mjs.map +1 -0
  91. package/es/chain.d.ts +248 -0
  92. package/es/chain.mjs +560 -0
  93. package/es/chain.mjs.map +1 -0
  94. package/es/channel/handlers.d.ts +34 -0
  95. package/es/channel/handlers.mjs +164 -131
  96. package/es/channel/handlers.mjs.map +1 -1
  97. package/es/channel/index.d.ts +625 -0
  98. package/es/channel/index.mjs +897 -902
  99. package/es/channel/index.mjs.map +1 -1
  100. package/es/channel/internal.d.ts +101 -0
  101. package/es/channel/internal.mjs +138 -88
  102. package/es/channel/internal.mjs.map +1 -1
  103. package/es/contract/Compiler.d.ts +18 -0
  104. package/es/contract/Compiler.mjs +68 -0
  105. package/es/contract/Compiler.mjs.map +1 -0
  106. package/es/contract/aci.d.ts +127 -0
  107. package/es/contract/aci.mjs +225 -193
  108. package/es/contract/aci.mjs.map +1 -1
  109. package/es/contract/ga.d.ts +69 -0
  110. package/es/contract/ga.mjs +195 -0
  111. package/es/contract/ga.mjs.map +1 -0
  112. package/es/contract/methods.d.ts +71 -0
  113. package/es/contract/methods.mjs +104 -0
  114. package/es/contract/methods.mjs.map +1 -0
  115. package/es/deprecated/index.d.ts +143 -0
  116. package/es/deprecated/index.mjs +162 -0
  117. package/es/deprecated/index.mjs.map +1 -0
  118. package/es/deprecated/methods.d.ts +18 -0
  119. package/es/deprecated/methods.mjs +26 -0
  120. package/es/deprecated/methods.mjs.map +1 -0
  121. package/es/index.d.ts +35 -0
  122. package/es/index.mjs +35 -40
  123. package/es/index.mjs.map +1 -1
  124. package/es/oracle.d.ts +161 -0
  125. package/es/oracle.mjs +306 -0
  126. package/es/oracle.mjs.map +1 -0
  127. package/es/spend.d.ts +62 -0
  128. package/es/spend.mjs +111 -0
  129. package/es/spend.mjs.map +1 -0
  130. package/es/tx/builder/address.d.ts +25 -0
  131. package/es/tx/builder/address.mjs +45 -0
  132. package/es/tx/builder/address.mjs.map +1 -0
  133. package/es/tx/builder/constants.d.ts +70 -0
  134. package/es/tx/builder/constants.mjs +122 -0
  135. package/es/tx/builder/constants.mjs.map +1 -0
  136. package/es/tx/builder/field-types/coin-amount.d.ts +13 -0
  137. package/es/tx/builder/field-types/coin-amount.mjs +26 -0
  138. package/es/tx/builder/field-types/coin-amount.mjs.map +1 -0
  139. package/es/tx/builder/field-types/deposit.d.ts +15 -0
  140. package/es/tx/builder/field-types/deposit.mjs +19 -0
  141. package/es/tx/builder/field-types/deposit.mjs.map +1 -0
  142. package/es/tx/builder/field-types/fee.d.ts +25 -0
  143. package/es/tx/builder/field-types/fee.mjs +150 -0
  144. package/es/tx/builder/field-types/fee.mjs.map +1 -0
  145. package/es/tx/builder/field-types/field.d.ts +6 -0
  146. package/es/tx/builder/field-types/field.mjs +15 -0
  147. package/es/tx/builder/field-types/field.mjs.map +1 -0
  148. package/es/tx/builder/field-types/gas-limit.d.ts +12 -0
  149. package/es/tx/builder/field-types/gas-limit.mjs +33 -0
  150. package/es/tx/builder/field-types/gas-limit.mjs.map +1 -0
  151. package/es/tx/builder/field-types/gas-price.d.ts +8 -0
  152. package/es/tx/builder/field-types/gas-price.mjs +18 -0
  153. package/es/tx/builder/field-types/gas-price.mjs.map +1 -0
  154. package/es/tx/builder/field-types/index.d.ts +70 -0
  155. package/es/tx/builder/field-types/index.mjs +25 -0
  156. package/es/tx/builder/field-types/index.mjs.map +1 -0
  157. package/es/tx/builder/field-types/name-fee.d.ts +20 -0
  158. package/es/tx/builder/field-types/name-fee.mjs +24 -0
  159. package/es/tx/builder/field-types/name-fee.mjs.map +1 -0
  160. package/es/tx/builder/field-types/name-id.d.ts +14 -0
  161. package/es/tx/builder/field-types/name-id.mjs +19 -0
  162. package/es/tx/builder/field-types/name-id.mjs.map +1 -0
  163. package/es/tx/builder/field-types/name.d.ts +13 -0
  164. package/es/tx/builder/field-types/name.mjs +18 -0
  165. package/es/tx/builder/field-types/name.mjs.map +1 -0
  166. package/es/tx/builder/field-types/short-u-int.d.ts +6 -0
  167. package/es/tx/builder/field-types/short-u-int.mjs +12 -0
  168. package/es/tx/builder/field-types/short-u-int.mjs.map +1 -0
  169. package/es/tx/builder/field-types/u-int.d.ts +8 -0
  170. package/es/tx/builder/field-types/u-int.mjs +14 -0
  171. package/es/tx/builder/field-types/u-int.mjs.map +1 -0
  172. package/es/tx/builder/helpers.d.ts +125 -0
  173. package/es/tx/builder/helpers.mjs +94 -240
  174. package/es/tx/builder/helpers.mjs.map +1 -1
  175. package/es/tx/builder/index.d.ts +88 -0
  176. package/es/tx/builder/index.mjs +167 -358
  177. package/es/tx/builder/index.mjs.map +1 -1
  178. package/es/tx/builder/schema.d.ts +1201 -0
  179. package/es/tx/builder/schema.mjs +175 -664
  180. package/es/tx/builder/schema.mjs.map +1 -1
  181. package/es/tx/index.d.ts +64 -0
  182. package/es/tx/index.mjs +151 -265
  183. package/es/tx/index.mjs.map +1 -1
  184. package/es/tx/validator.d.ts +20 -0
  185. package/es/tx/validator.mjs +104 -124
  186. package/es/tx/validator.mjs.map +1 -1
  187. package/es/typings/@aeternity__argon2-browser/index.d.mjs +2 -0
  188. package/es/typings/@aeternity__argon2-browser/index.d.mjs.map +1 -0
  189. package/es/typings/@aeternity__uuid/index.d.mjs +2 -0
  190. package/es/typings/@aeternity__uuid/index.d.mjs.map +1 -0
  191. package/es/typings/bip32-path/index.d.mjs +2 -0
  192. package/es/typings/bip32-path/index.d.mjs.map +1 -0
  193. package/es/typings/blakejs/index.d.mjs.map +1 -1
  194. package/es/typings/sha-js/index.d.mjs +2 -0
  195. package/es/typings/sha-js/index.d.mjs.map +1 -0
  196. package/es/typings/tweetnacl-auth/index.d.mjs +2 -0
  197. package/es/typings/tweetnacl-auth/index.d.mjs.map +1 -0
  198. package/es/utils/amount-formatter.d.ts +42 -0
  199. package/es/utils/amount-formatter.mjs +36 -49
  200. package/es/utils/amount-formatter.mjs.map +1 -1
  201. package/es/utils/autorest.d.ts +6 -0
  202. package/es/utils/autorest.mjs +97 -0
  203. package/es/utils/autorest.mjs.map +1 -0
  204. package/es/utils/bignumber.d.ts +13 -0
  205. package/es/utils/bignumber.mjs +11 -8
  206. package/es/utils/bignumber.mjs.map +1 -1
  207. package/es/{bytes.d.ts → utils/bytes.d.ts} +10 -13
  208. package/es/utils/bytes.mjs +11 -15
  209. package/es/utils/bytes.mjs.map +1 -1
  210. package/es/utils/crypto.d.ts +88 -0
  211. package/es/utils/crypto.mjs +64 -108
  212. package/es/utils/crypto.mjs.map +1 -1
  213. package/es/utils/encoder-types.d.ts +61 -0
  214. package/es/utils/encoder-types.mjs +36 -0
  215. package/es/utils/encoder-types.mjs.map +1 -0
  216. package/es/utils/encoder.d.ts +25 -0
  217. package/es/utils/encoder.mjs +118 -0
  218. package/es/utils/encoder.mjs.map +1 -0
  219. package/es/{errors.d.ts → utils/errors.d.ts} +246 -59
  220. package/es/utils/errors.mjs +313 -136
  221. package/es/utils/errors.mjs.map +1 -1
  222. package/es/utils/hd-wallet.d.ts +50 -0
  223. package/es/utils/hd-wallet.mjs +86 -45
  224. package/es/utils/hd-wallet.mjs.map +1 -1
  225. package/es/utils/json-big.d.ts +5 -0
  226. package/es/utils/json-big.mjs +12 -16
  227. package/es/utils/json-big.mjs.map +1 -1
  228. package/es/utils/keystore.d.ts +51 -0
  229. package/es/utils/keystore.mjs +101 -194
  230. package/es/utils/keystore.mjs.map +1 -1
  231. package/es/{mptree.d.ts → utils/mptree.d.ts} +6 -9
  232. package/es/utils/mptree.mjs +22 -18
  233. package/es/utils/mptree.mjs.map +1 -1
  234. package/es/utils/other.d.ts +20 -0
  235. package/es/utils/other.mjs +32 -35
  236. package/es/utils/other.mjs.map +1 -1
  237. package/es/utils/semver-satisfies.d.ts +1 -0
  238. package/es/utils/semver-satisfies.mjs +2 -2
  239. package/es/utils/semver-satisfies.mjs.map +1 -1
  240. package/es/utils/string.d.ts +24 -0
  241. package/es/utils/string.mjs +8 -10
  242. package/es/utils/string.mjs.map +1 -1
  243. package/package.json +56 -42
  244. package/src/AeSdk.ts +68 -0
  245. package/src/AeSdkAepp.ts +176 -0
  246. package/src/AeSdkBase.ts +338 -0
  247. package/src/AeSdkWallet.ts +348 -0
  248. package/src/Node.ts +173 -0
  249. package/src/account/Base.ts +124 -0
  250. package/src/account/Memory.ts +98 -0
  251. package/src/account/Rpc.ts +69 -0
  252. package/src/aens.ts +407 -0
  253. package/src/aepp-wallet-communication/connection/Browser.ts +71 -0
  254. package/src/aepp-wallet-communication/connection/BrowserRuntime.ts +59 -0
  255. package/src/aepp-wallet-communication/connection/BrowserWindowMessage.ts +122 -0
  256. package/{es/utils/crypto-ts.mjs → src/aepp-wallet-communication/connection-proxy.ts} +18 -18
  257. package/src/aepp-wallet-communication/rpc/RpcClient.ts +143 -0
  258. package/src/aepp-wallet-communication/rpc/types.ts +66 -0
  259. package/src/aepp-wallet-communication/schema.ts +224 -0
  260. package/src/aepp-wallet-communication/wallet-detector.ts +72 -0
  261. package/src/apis/compiler/code-model-v4.yaml +2649 -0
  262. package/src/apis/compiler/compiler.ts +585 -0
  263. package/src/apis/compiler/index.ts +2 -0
  264. package/src/apis/compiler/models/index.ts +301 -0
  265. package/src/apis/compiler/models/mappers.ts +583 -0
  266. package/src/apis/compiler/models/parameters.ts +93 -0
  267. package/src/apis/node/code-model-v4.yaml +10080 -0
  268. package/src/apis/node/index.ts +2 -0
  269. package/src/apis/node/models/index.ts +1257 -0
  270. package/src/apis/node/models/mappers.ts +4280 -0
  271. package/src/apis/node/models/parameters.ts +188 -0
  272. package/src/apis/node/node.ts +1299 -0
  273. package/src/chain.ts +502 -0
  274. package/src/channel/handlers.ts +817 -0
  275. package/src/channel/index.ts +1025 -0
  276. package/src/channel/internal.ts +361 -0
  277. package/src/contract/Compiler.ts +67 -0
  278. package/src/contract/aci.ts +538 -0
  279. package/src/contract/ga.ts +199 -0
  280. package/src/contract/methods.ts +123 -0
  281. package/src/deprecated/index.ts +170 -0
  282. package/src/deprecated/methods.ts +25 -0
  283. package/src/index.ts +56 -0
  284. package/src/oracle.ts +364 -0
  285. package/src/spend.ts +164 -0
  286. package/src/tx/builder/address.ts +50 -0
  287. package/src/tx/builder/constants.ts +126 -0
  288. package/src/tx/builder/field-types/coin-amount.ts +27 -0
  289. package/src/tx/builder/field-types/deposit.ts +21 -0
  290. package/src/tx/builder/field-types/fee.ts +143 -0
  291. package/src/tx/builder/field-types/field.ts +9 -0
  292. package/src/tx/builder/field-types/gas-limit.ts +41 -0
  293. package/src/tx/builder/field-types/gas-price.ts +16 -0
  294. package/src/tx/builder/field-types/index.ts +45 -0
  295. package/src/tx/builder/field-types/name-fee.ts +32 -0
  296. package/src/tx/builder/field-types/name-id.ts +20 -0
  297. package/src/tx/builder/field-types/name.ts +18 -0
  298. package/src/tx/builder/field-types/short-u-int.ts +11 -0
  299. package/src/tx/builder/field-types/u-int.ts +16 -0
  300. package/src/tx/builder/helpers.ts +248 -0
  301. package/src/tx/builder/index.ts +400 -0
  302. package/src/tx/builder/schema.ts +727 -0
  303. package/src/tx/index.ts +192 -0
  304. package/src/tx/validator.ts +230 -0
  305. package/src/typings/@aeternity__argon2-browser/index.d.ts +3 -0
  306. package/src/typings/@aeternity__uuid/index.d.ts +5 -0
  307. package/src/typings/bip32-path/index.d.ts +33 -0
  308. package/src/typings/blakejs/index.d.ts +4 -32
  309. package/src/typings/sha-js/index.d.ts +5 -0
  310. package/src/typings/tweetnacl-auth/index.d.ts +14 -0
  311. package/src/utils/amount-formatter.ts +56 -69
  312. package/src/utils/autorest.ts +93 -0
  313. package/src/utils/bignumber.ts +11 -12
  314. package/src/utils/bytes.ts +29 -31
  315. package/src/utils/crypto.ts +205 -0
  316. package/src/utils/encoder-types.ts +63 -0
  317. package/src/utils/encoder.ts +146 -0
  318. package/src/utils/errors.ts +482 -366
  319. package/src/utils/hd-wallet.ts +166 -0
  320. package/src/utils/json-big.ts +27 -0
  321. package/src/utils/keystore.ts +182 -0
  322. package/src/utils/mptree.ts +64 -61
  323. package/src/utils/other.ts +34 -41
  324. package/src/utils/semver-satisfies.ts +15 -11
  325. package/src/utils/string.ts +18 -20
  326. package/es/account/base.mjs +0 -179
  327. package/es/account/base.mjs.map +0 -1
  328. package/es/account/memory.mjs +0 -99
  329. package/es/account/memory.mjs.map +0 -1
  330. package/es/account/multiple.mjs +0 -179
  331. package/es/account/multiple.mjs.map +0 -1
  332. package/es/ae/aens.mjs +0 -404
  333. package/es/ae/aens.mjs.map +0 -1
  334. package/es/ae/aepp.mjs +0 -45
  335. package/es/ae/aepp.mjs.map +0 -1
  336. package/es/ae/contract.mjs +0 -159
  337. package/es/ae/contract.mjs.map +0 -1
  338. package/es/ae/index.mjs +0 -207
  339. package/es/ae/index.mjs.map +0 -1
  340. package/es/ae/oracle.mjs +0 -339
  341. package/es/ae/oracle.mjs.map +0 -1
  342. package/es/ae/universal.mjs +0 -45
  343. package/es/ae/universal.mjs.map +0 -1
  344. package/es/ae/wallet.mjs +0 -50
  345. package/es/ae/wallet.mjs.map +0 -1
  346. package/es/amount-formatter.d.ts +0 -58
  347. package/es/bignumber.d.ts +0 -18
  348. package/es/chain/index.mjs +0 -272
  349. package/es/chain/index.mjs.map +0 -1
  350. package/es/chain/node.mjs +0 -442
  351. package/es/chain/node.mjs.map +0 -1
  352. package/es/contract/compiler.mjs +0 -115
  353. package/es/contract/compiler.mjs.map +0 -1
  354. package/es/contract/ga/helpers.mjs +0 -30
  355. package/es/contract/ga/helpers.mjs.map +0 -1
  356. package/es/contract/ga/index.mjs +0 -178
  357. package/es/contract/ga/index.mjs.map +0 -1
  358. package/es/crypto-ts.d.ts +0 -9
  359. package/es/node-pool/index.mjs +0 -188
  360. package/es/node-pool/index.mjs.map +0 -1
  361. package/es/node.mjs +0 -133
  362. package/es/node.mjs.map +0 -1
  363. package/es/other.d.ts +0 -31
  364. package/es/semver-satisfies.d.ts +0 -1
  365. package/es/string.d.ts +0 -26
  366. package/es/tx/builder/field-types.mjs +0 -74
  367. package/es/tx/builder/field-types.mjs.map +0 -1
  368. package/es/tx/tx-object.mjs +0 -283
  369. package/es/tx/tx-object.mjs.map +0 -1
  370. package/es/tx/tx.mjs +0 -938
  371. package/es/tx/tx.mjs.map +0 -1
  372. package/es/utils/aepp-wallet-communication/connection/browser-runtime.mjs +0 -132
  373. package/es/utils/aepp-wallet-communication/connection/browser-runtime.mjs.map +0 -1
  374. package/es/utils/aepp-wallet-communication/connection/browser-window-message.mjs +0 -183
  375. package/es/utils/aepp-wallet-communication/connection/browser-window-message.mjs.map +0 -1
  376. package/es/utils/aepp-wallet-communication/connection/index.mjs +0 -87
  377. package/es/utils/aepp-wallet-communication/connection/index.mjs.map +0 -1
  378. package/es/utils/aepp-wallet-communication/content-script-bridge.mjs +0 -98
  379. package/es/utils/aepp-wallet-communication/content-script-bridge.mjs.map +0 -1
  380. package/es/utils/aepp-wallet-communication/helpers.mjs +0 -92
  381. package/es/utils/aepp-wallet-communication/helpers.mjs.map +0 -1
  382. package/es/utils/aepp-wallet-communication/rpc/aepp-rpc.mjs +0 -375
  383. package/es/utils/aepp-wallet-communication/rpc/aepp-rpc.mjs.map +0 -1
  384. package/es/utils/aepp-wallet-communication/rpc/rpc-client.mjs +0 -275
  385. package/es/utils/aepp-wallet-communication/rpc/rpc-client.mjs.map +0 -1
  386. package/es/utils/aepp-wallet-communication/rpc/wallet-rpc.mjs +0 -541
  387. package/es/utils/aepp-wallet-communication/rpc/wallet-rpc.mjs.map +0 -1
  388. package/es/utils/aepp-wallet-communication/schema.mjs +0 -102
  389. package/es/utils/aepp-wallet-communication/schema.mjs.map +0 -1
  390. package/es/utils/aepp-wallet-communication/wallet-detector.mjs +0 -110
  391. package/es/utils/aepp-wallet-communication/wallet-detector.mjs.map +0 -1
  392. package/es/utils/async-init.mjs +0 -64
  393. package/es/utils/async-init.mjs.map +0 -1
  394. package/es/utils/crypto-ts.mjs.map +0 -1
  395. package/es/utils/swagger.mjs +0 -164
  396. package/es/utils/swagger.mjs.map +0 -1
  397. package/src/account/base.js +0 -153
  398. package/src/account/memory.js +0 -83
  399. package/src/account/multiple.js +0 -162
  400. package/src/ae/aens.js +0 -361
  401. package/src/ae/aepp.js +0 -45
  402. package/src/ae/contract.js +0 -148
  403. package/src/ae/index.js +0 -168
  404. package/src/ae/oracle.js +0 -311
  405. package/src/ae/universal.js +0 -47
  406. package/src/ae/wallet.js +0 -50
  407. package/src/chain/index.js +0 -269
  408. package/src/chain/node.js +0 -320
  409. package/src/channel/handlers.js +0 -673
  410. package/src/channel/index.js +0 -898
  411. package/src/channel/internal.js +0 -237
  412. package/src/contract/aci.js +0 -376
  413. package/src/contract/compiler.js +0 -100
  414. package/src/contract/ga/helpers.js +0 -19
  415. package/src/contract/ga/index.js +0 -150
  416. package/src/index.js +0 -89
  417. package/src/node-pool/index.js +0 -172
  418. package/src/node.js +0 -116
  419. package/src/tx/builder/field-types.js +0 -61
  420. package/src/tx/builder/helpers.js +0 -380
  421. package/src/tx/builder/index.js +0 -465
  422. package/src/tx/builder/schema.js +0 -1197
  423. package/src/tx/index.js +0 -301
  424. package/src/tx/tx-object.js +0 -187
  425. package/src/tx/tx.js +0 -631
  426. package/src/tx/validator.js +0 -181
  427. package/src/utils/aepp-wallet-communication/connection/browser-runtime.js +0 -119
  428. package/src/utils/aepp-wallet-communication/connection/browser-window-message.js +0 -165
  429. package/src/utils/aepp-wallet-communication/connection/index.js +0 -85
  430. package/src/utils/aepp-wallet-communication/content-script-bridge.js +0 -86
  431. package/src/utils/aepp-wallet-communication/helpers.js +0 -60
  432. package/src/utils/aepp-wallet-communication/rpc/aepp-rpc.js +0 -294
  433. package/src/utils/aepp-wallet-communication/rpc/rpc-client.js +0 -232
  434. package/src/utils/aepp-wallet-communication/rpc/wallet-rpc.js +0 -401
  435. package/src/utils/aepp-wallet-communication/schema.ts +0 -80
  436. package/src/utils/aepp-wallet-communication/wallet-detector.js +0 -92
  437. package/src/utils/async-init.js +0 -45
  438. package/src/utils/crypto.js +0 -229
  439. package/src/utils/hd-wallet.js +0 -100
  440. package/src/utils/json-big.js +0 -26
  441. package/src/utils/keystore.js +0 -219
  442. package/src/utils/swagger.js +0 -156
@@ -1,240 +1,147 @@
1
- import _buffer from "buffer";
2
- const {
3
- Buffer: _Buffer
4
- } = _buffer;
5
1
  import nacl from 'tweetnacl';
6
- import { v4 as uuid } from '@aeternity/uuid';
2
+ import { v4 as uuid } from '@aeternity/uuid'; // js extension is required for mjs build
3
+ // eslint-disable-next-line import/extensions
4
+
7
5
  import _aeternityArgon2BrowserDistArgon2BundledMinJs from '@aeternity/argon2-browser/dist/argon2-bundled.min.js';
8
6
  const {
9
7
  ArgonType,
10
8
  hash
11
9
  } = _aeternityArgon2BrowserDistArgon2BundledMinJs;
12
- import { encode } from "../tx/builder/helpers.mjs";
13
- import { str2buf } from "./bytes.mjs";
14
- import { ArgumentError, InvalidKeyError, UnsupportedAlgorithmError, InvalidPasswordError } from "./errors.mjs";
15
- /**
16
- * KeyStore module
17
- * @module @aeternity/aepp-sdk/es/utils/keystore
18
- * @example import { Keystore } from '@aeternity/aepp-sdk'
19
- * @example const { Keystore } = require('@aeternity/aepp-sdk')
20
- */
21
-
22
- const DEFAULTS = {
23
- crypto: {
24
- secret_type: 'ed25519',
25
- symmetric_alg: 'xsalsa20-poly1305',
26
- kdf: 'argon2id',
27
- kdf_params: {
28
- memlimit_kib: 65536,
29
- opslimit: 3,
30
- parallelism: 1
31
- }
10
+ import { getAddressFromPriv } from "./crypto.mjs";
11
+ import { bytesToHex, hexToBytes } from "./bytes.mjs";
12
+ import { InvalidPasswordError } from "./errors.mjs";
13
+ const DERIVED_KEY_FUNCTIONS = {
14
+ async argon2id(pass, salt, params) {
15
+ const {
16
+ memlimit_kib: mem,
17
+ opslimit: time
18
+ } = params;
19
+ return (await hash({
20
+ hashLen: 32,
21
+ pass,
22
+ salt,
23
+ time,
24
+ mem,
25
+ type: ArgonType.Argon2id
26
+ })).hash;
32
27
  }
33
- }; // DERIVED KEY PART
34
28
 
35
- const DERIVED_KEY_FUNCTIONS = {
36
- argon2id: deriveKeyUsingArgon2id
37
29
  };
38
- export async function deriveKeyUsingArgon2id(pass, salt, options) {
39
- const {
40
- memlimit_kib: mem,
41
- opslimit: time
42
- } = options.kdf_params;
43
- const result = (await hash({
44
- hashLen: 32,
45
- pass,
46
- salt,
47
- time,
48
- mem,
49
- type: ArgonType.Argon2id
50
- })).hash;
51
- return _Buffer.from(result);
52
- } // CRYPTO PART
53
-
54
30
  const CRYPTO_FUNCTIONS = {
55
31
  'xsalsa20-poly1305': {
56
- encrypt: encryptXsalsa20Poly1305,
57
- decrypt: decryptXsalsa20Poly1305
58
- }
59
- };
32
+ encrypt: nacl.secretbox,
60
33
 
61
- function encryptXsalsa20Poly1305(_ref) {
62
- let {
63
- plaintext,
64
- key,
65
- nonce
66
- } = _ref;
67
- return nacl.secretbox(plaintext, nonce, key);
68
- }
34
+ decrypt() {
35
+ const res = nacl.secretbox.open(...arguments);
36
+ if (res == null) throw new InvalidPasswordError();
37
+ return res;
38
+ }
69
39
 
70
- function decryptXsalsa20Poly1305(_ref2) {
71
- let {
72
- ciphertext,
73
- key,
74
- nonce
75
- } = _ref2;
76
- const res = nacl.secretbox.open(ciphertext, nonce, key);
77
- if (!res) throw new InvalidPasswordError('Invalid password or nonce');
78
- return res;
79
- }
40
+ }
41
+ };
42
+ const CRYPTO_DEFAULTS = {
43
+ secret_type: 'ed25519',
44
+ symmetric_alg: 'xsalsa20-poly1305',
45
+ kdf: 'argon2id',
46
+ kdf_params: {
47
+ memlimit_kib: 65536,
48
+ opslimit: 3,
49
+ parallelism: 1
50
+ }
51
+ };
80
52
  /**
81
53
  * Symmetric private key encryption using secret (derived) key.
82
- * @param {Buffer|string} plaintext Data to be encrypted.
83
- * @param {Buffer|string} key Secret key.
84
- * @param {Buffer|string} nonce Randomly generated nonce.
85
- * @param {string=} algo Encryption algorithm (default: DEFAULTS.crypto.symmetric_alg).
86
- * @return {Buffer} Encrypted data.
54
+ * @param plaintext - Data to be encrypted.
55
+ * @param key - Secret key.
56
+ * @param nonce - Randomly generated nonce.
57
+ * @param algo - Encryption algorithm.
58
+ * @returns Encrypted data.
87
59
  */
88
60
 
89
-
90
61
  function encrypt(plaintext, key, nonce) {
91
- let algo = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : DEFAULTS.crypto.symmetric_alg;
92
- if (!CRYPTO_FUNCTIONS[algo]) throw new UnsupportedAlgorithmError(algo);
93
- return CRYPTO_FUNCTIONS[algo].encrypt({
94
- plaintext,
95
- nonce,
96
- key
97
- });
62
+ let algo = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : CRYPTO_DEFAULTS.symmetric_alg;
63
+ return CRYPTO_FUNCTIONS[algo].encrypt(plaintext, nonce, key);
98
64
  }
99
65
  /**
100
66
  * Symmetric private key decryption using secret (derived) key.
101
- * @param {Buffer|Uint8Array} ciphertext Data to be decrypted.
102
- * @param {Buffer|Uint8Array} key Secret key.
103
- * @param {Buffer|Uint8Array} nonce Nonce from key-object.
104
- * @param {string=} algo Encryption algorithm.
105
- * @return {Buffer} Decrypted data.
67
+ * @param ciphertext - Data to be decrypted.
68
+ * @param key - Secret key.
69
+ * @param nonce - Nonce from key-object.
70
+ * @param algo - Encryption algorithm.
71
+ * @returns Decrypted data.
106
72
  */
107
73
 
108
74
 
109
- function decrypt(ciphertext, key, nonce, algo) {
110
- if (!CRYPTO_FUNCTIONS[algo]) throw new UnsupportedAlgorithmError(algo);
111
- return CRYPTO_FUNCTIONS[algo].decrypt({
112
- ciphertext,
113
- nonce,
114
- key
115
- });
75
+ function decrypt(ciphertext, key, nonce) {
76
+ let algo = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : CRYPTO_DEFAULTS.symmetric_alg;
77
+ return CRYPTO_FUNCTIONS[algo].decrypt(ciphertext, nonce, key);
116
78
  }
117
79
  /**
118
80
  * Derive secret key from password with key derivation function.
119
- * @param {string} password User-supplied password.
120
- * @param {Buffer|Uint8Array} nonce Randomly generated nonce.
121
- * @param {Object=} options Encryption parameters.
122
- * @param {string=} options.kdf Key derivation function (default: DEFAULTS.crypto.kdf).
123
- * @param {Object=} options.kdf_params KDF parameters (default: DEFAULTS.crypto.kdf_params).
124
- * @return {Buffer} Secret key derived from password.
81
+ * @param password - User-supplied password.
82
+ * @param nonce - Randomly generated nonce.
83
+ * @param kdf - Key derivation function.
84
+ * @param kdfParams - KDF parameters.
85
+ * @returns Secret key derived from password.
125
86
  */
126
87
 
127
88
 
128
- async function deriveKey(password, nonce) {
129
- let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {
130
- kdf_params: DEFAULTS.crypto.kdf_params,
131
- kdf: DEFAULTS.crypto.kdf
132
- };
133
- if (!nonce) throw new ArgumentError('nonce', 'provided', nonce);
134
- if (password == null) throw new ArgumentError('password', 'provided', password);
89
+ async function deriveKey(password, nonce, kdf, kdfParams) {
90
+ return DERIVED_KEY_FUNCTIONS[kdf](password, nonce, kdfParams);
91
+ }
92
+ /**
93
+ * Recover plaintext private key from secret-storage key object.
94
+ * @param password - Keystore object password.
95
+ * @param keystore - Keystore object.
96
+ * @returns Plaintext private key.
97
+ */
135
98
 
136
- if (!Object.prototype.hasOwnProperty.call(DERIVED_KEY_FUNCTIONS, options.kdf)) {
137
- throw new UnsupportedAlgorithmError(options.kdf);
138
- }
139
99
 
140
- return DERIVED_KEY_FUNCTIONS[options.kdf](password, nonce, options);
100
+ export async function recover(password, _ref) {
101
+ let {
102
+ crypto
103
+ } = _ref;
104
+ const salt = hexToBytes(crypto.kdf_params.salt);
105
+ return bytesToHex(decrypt(hexToBytes(crypto.ciphertext), await deriveKey(password, salt, crypto.kdf, crypto.kdf_params), hexToBytes(crypto.cipher_params.nonce), crypto.symmetric_alg));
141
106
  }
142
107
  /**
143
- * Assemble key data object in secret-storage format.
144
- * @param {Buffer} name Key name.
145
- * @param {Buffer} derivedKey Password-derived secret key.
146
- * @param {Buffer} privateKey Private key.
147
- * @param {Buffer} nonce Randomly generated 24byte nonce.
148
- * @param {Buffer} salt Randomly generated 16byte salt.
149
- * @param {Object=} options Encryption parameters.
150
- * @param {string=} options.kdf Key derivation function (default: argon2id).
151
- * @param {string=} options.cipher Symmetric cipher (default: constants.cipher).
152
- * @param {Object=} options.kdf_params KDF parameters (default: constants.<kdf>).
153
- * @return {Object}
108
+ * Export private key to keystore secret-storage format.
109
+ * @param name - Key name.
110
+ * @param password - User-supplied password.
111
+ * @param privateKey - Private key as hex-string or a Buffer.
112
+ * @param nonce - Randomly generated 24byte nonce.
113
+ * @param salt - Randomly generated 16byte salt.
114
+ * @param options - Encryption parameters.
115
+ * @param options.kdf - Key derivation function.
116
+ * @param options.kdf_params - KDF parameters.
154
117
  */
155
118
 
156
-
157
- function marshal(name, derivedKey, privateKey, nonce, salt) {
158
- let options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {};
159
- const opt = Object.assign({}, DEFAULTS.crypto, options);
160
- return Object.assign({
119
+ export async function dump(name, password, privateKey) {
120
+ let nonce = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : nacl.randomBytes(24);
121
+ let salt = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : nacl.randomBytes(16);
122
+ let options = arguments.length > 5 ? arguments[5] : undefined;
123
+ const opt = { ...CRYPTO_DEFAULTS,
124
+ ...options
125
+ };
126
+ const derivedKey = await deriveKey(password, salt, opt.kdf, opt.kdf_params);
127
+ const payload = typeof privateKey === 'string' ? hexToBytes(privateKey) : privateKey;
128
+ return {
161
129
  name,
162
130
  version: 1,
163
- public_key: getAddressFromPriv(privateKey),
164
- id: uuid()
165
- }, {
166
- crypto: Object.assign({
131
+ public_key: getAddressFromPriv(payload),
132
+ id: uuid(),
133
+ crypto: {
167
134
  secret_type: opt.secret_type,
168
135
  symmetric_alg: opt.symmetric_alg,
169
- ciphertext: _Buffer.from(encrypt(_Buffer.from(privateKey), derivedKey, nonce, opt.symmetric_alg)).toString('hex'),
136
+ ciphertext: bytesToHex(encrypt(payload, derivedKey, nonce, opt.symmetric_alg)),
170
137
  cipher_params: {
171
- nonce: _Buffer.from(nonce).toString('hex')
172
- }
173
- }, {
138
+ nonce: bytesToHex(nonce)
139
+ },
174
140
  kdf: opt.kdf,
175
141
  kdf_params: { ...opt.kdf_params,
176
- salt: _Buffer.from(salt).toString('hex')
142
+ salt: bytesToHex(salt)
177
143
  }
178
- })
179
- });
180
- }
181
-
182
- export function getAddressFromPriv(secret) {
183
- const keys = nacl.sign.keyPair.fromSecretKey(str2buf(secret));
184
-
185
- const publicBuffer = _Buffer.from(keys.publicKey);
186
-
187
- return encode(publicBuffer, 'ak');
188
- }
189
- /**
190
- * Recover plaintext private key from secret-storage key object.
191
- * @param {String} password Keystore object password.
192
- * @param {Object} keyObject Keystore object.
193
- * @return {Buffer} Plaintext private key.
194
- */
195
-
196
- export async function recover(password, keyObject) {
197
- validateKeyObj(keyObject);
198
- const nonce = Uint8Array.from(str2buf(keyObject.crypto.cipher_params.nonce));
199
- const salt = Uint8Array.from(str2buf(keyObject.crypto.kdf_params.salt));
200
- const kdfParams = keyObject.crypto.kdf_params;
201
- const kdf = keyObject.crypto.kdf;
202
- const key = await decrypt(Uint8Array.from(str2buf(keyObject.crypto.ciphertext)), await deriveKey(password, salt, {
203
- kdf,
204
- kdf_params: kdfParams
205
- }), nonce, keyObject.crypto.symmetric_alg);
206
- if (!key) throw new InvalidPasswordError('Invalid password');
207
- if (_Buffer.from(key).length === 64) return _Buffer.from(key).toString('hex');
208
- return _Buffer.from(key).toString('utf-8');
209
- }
210
- /**
211
- * Export private key to keystore secret-storage format.
212
- * @param {String} name Key name.
213
- * @param {String} password User-supplied password.
214
- * @param {String|Buffer} privateKey Private key as hex-string or a Buffer.
215
- * @param {Buffer} nonce Randomly generated 24byte nonce.
216
- * @param {Buffer} salt Randomly generated 16byte salt.
217
- * @param {Object=} options Encryption parameters.
218
- * @param {String=} options.kdf Key derivation function (default: pbkdf2).
219
- * @param {String=} options.cipher Symmetric cipher (default: constants.cipher).
220
- * @param {Object=} options.kdfparams KDF parameters (default: constants.<kdf>).
221
- * @return {Object}
222
- */
223
-
224
- export async function dump(name, password, privateKey) {
225
- let nonce = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : nacl.randomBytes(24);
226
- let salt = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : nacl.randomBytes(16);
227
- let options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {};
228
- const opt = Object.assign({}, DEFAULTS.crypto, options);
229
- return marshal(name, await deriveKey(password, salt, opt), typeof privateKey === 'string' ? _Buffer.from(privateKey, 'hex') : privateKey, nonce, salt, opt);
230
- }
231
- export function validateKeyObj(obj) {
232
- const root = ['crypto', 'id', 'version', 'public_key'];
233
- const cryptoKeys = ['cipher_params', 'ciphertext', 'symmetric_alg', 'kdf', 'kdf_params'];
234
- const missingRootKeys = root.filter(key => !Object.prototype.hasOwnProperty.call(obj, key));
235
- if (missingRootKeys.length) throw new InvalidKeyError(`Invalid key file format. Require properties: ${missingRootKeys}`);
236
- const missingCryptoKeys = cryptoKeys.filter(key => !Object.prototype.hasOwnProperty.call(obj.crypto, key));
237
- if (missingCryptoKeys.length) throw new InvalidKeyError(`Invalid key file format. Require properties: ${missingCryptoKeys}`);
238
- return true;
144
+ }
145
+ };
239
146
  }
240
147
  //# sourceMappingURL=keystore.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utils/keystore.js"],"names":["nacl","v4","uuid","encode","str2buf","ArgumentError","InvalidKeyError","UnsupportedAlgorithmError","InvalidPasswordError","DEFAULTS","crypto","secret_type","symmetric_alg","kdf","kdf_params","memlimit_kib","opslimit","parallelism","DERIVED_KEY_FUNCTIONS","argon2id","deriveKeyUsingArgon2id","pass","salt","options","mem","time","result","hash","hashLen","type","ArgonType","Argon2id","from","CRYPTO_FUNCTIONS","encrypt","encryptXsalsa20Poly1305","decrypt","decryptXsalsa20Poly1305","plaintext","key","nonce","secretbox","ciphertext","res","open","algo","deriveKey","password","Object","prototype","hasOwnProperty","call","marshal","name","derivedKey","privateKey","opt","assign","version","public_key","getAddressFromPriv","id","toString","cipher_params","secret","keys","sign","keyPair","fromSecretKey","publicBuffer","publicKey","recover","keyObject","validateKeyObj","Uint8Array","kdfParams","length","dump","randomBytes","obj","root","cryptoKeys","missingRootKeys","filter","missingCryptoKeys"],"mappings":"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","sourcesContent":["import nacl from 'tweetnacl'\nimport { v4 as uuid } from '@aeternity/uuid'\nimport { ArgonType, hash } from '@aeternity/argon2-browser/dist/argon2-bundled.min.js'\nimport { encode } from '../tx/builder/helpers'\nimport { str2buf } from './bytes'\nimport {\n ArgumentError, InvalidKeyError, UnsupportedAlgorithmError, InvalidPasswordError\n} from './errors'\n\n/**\n * KeyStore module\n * @module @aeternity/aepp-sdk/es/utils/keystore\n * @example import { Keystore } from '@aeternity/aepp-sdk'\n * @example const { Keystore } = require('@aeternity/aepp-sdk')\n */\n\nconst DEFAULTS = {\n crypto: {\n secret_type: 'ed25519',\n symmetric_alg: 'xsalsa20-poly1305',\n kdf: 'argon2id',\n kdf_params: {\n memlimit_kib: 65536,\n opslimit: 3,\n parallelism: 1\n }\n }\n}\n\n// DERIVED KEY PART\nconst DERIVED_KEY_FUNCTIONS = {\n argon2id: deriveKeyUsingArgon2id\n}\n\nexport async function deriveKeyUsingArgon2id (pass, salt, options) {\n const { memlimit_kib: mem, opslimit: time } = options.kdf_params\n\n const result = (await hash({\n hashLen: 32,\n pass,\n salt,\n time,\n mem,\n type: ArgonType.Argon2id\n })).hash\n return Buffer.from(result)\n}\n\n// CRYPTO PART\nconst CRYPTO_FUNCTIONS = {\n 'xsalsa20-poly1305': { encrypt: encryptXsalsa20Poly1305, decrypt: decryptXsalsa20Poly1305 }\n}\n\nfunction encryptXsalsa20Poly1305 ({ plaintext, key, nonce }) {\n return nacl.secretbox(plaintext, nonce, key)\n}\n\nfunction decryptXsalsa20Poly1305 ({ ciphertext, key, nonce }) {\n const res = nacl.secretbox.open(ciphertext, nonce, key)\n if (!res) throw new InvalidPasswordError('Invalid password or nonce')\n return res\n}\n\n/**\n * Symmetric private key encryption using secret (derived) key.\n * @param {Buffer|string} plaintext Data to be encrypted.\n * @param {Buffer|string} key Secret key.\n * @param {Buffer|string} nonce Randomly generated nonce.\n * @param {string=} algo Encryption algorithm (default: DEFAULTS.crypto.symmetric_alg).\n * @return {Buffer} Encrypted data.\n */\nfunction encrypt (plaintext, key, nonce, algo = DEFAULTS.crypto.symmetric_alg) {\n if (!CRYPTO_FUNCTIONS[algo]) throw new UnsupportedAlgorithmError(algo)\n return CRYPTO_FUNCTIONS[algo].encrypt({ plaintext, nonce, key })\n}\n\n/**\n * Symmetric private key decryption using secret (derived) key.\n * @param {Buffer|Uint8Array} ciphertext Data to be decrypted.\n * @param {Buffer|Uint8Array} key Secret key.\n * @param {Buffer|Uint8Array} nonce Nonce from key-object.\n * @param {string=} algo Encryption algorithm.\n * @return {Buffer} Decrypted data.\n */\nfunction decrypt (ciphertext, key, nonce, algo) {\n if (!CRYPTO_FUNCTIONS[algo]) throw new UnsupportedAlgorithmError(algo)\n return CRYPTO_FUNCTIONS[algo].decrypt({ ciphertext, nonce, key })\n}\n\n/**\n * Derive secret key from password with key derivation function.\n * @param {string} password User-supplied password.\n * @param {Buffer|Uint8Array} nonce Randomly generated nonce.\n * @param {Object=} options Encryption parameters.\n * @param {string=} options.kdf Key derivation function (default: DEFAULTS.crypto.kdf).\n * @param {Object=} options.kdf_params KDF parameters (default: DEFAULTS.crypto.kdf_params).\n * @return {Buffer} Secret key derived from password.\n */\nasync function deriveKey (password, nonce, options = {\n kdf_params: DEFAULTS.crypto.kdf_params,\n kdf: DEFAULTS.crypto.kdf\n}) {\n if (!nonce) throw new ArgumentError('nonce', 'provided', nonce)\n if (password == null) throw new ArgumentError('password', 'provided', password)\n\n if (!Object.prototype.hasOwnProperty.call(DERIVED_KEY_FUNCTIONS, options.kdf)) {\n throw new UnsupportedAlgorithmError(options.kdf)\n }\n\n return DERIVED_KEY_FUNCTIONS[options.kdf](password, nonce, options)\n}\n\n/**\n * Assemble key data object in secret-storage format.\n * @param {Buffer} name Key name.\n * @param {Buffer} derivedKey Password-derived secret key.\n * @param {Buffer} privateKey Private key.\n * @param {Buffer} nonce Randomly generated 24byte nonce.\n * @param {Buffer} salt Randomly generated 16byte salt.\n * @param {Object=} options Encryption parameters.\n * @param {string=} options.kdf Key derivation function (default: argon2id).\n * @param {string=} options.cipher Symmetric cipher (default: constants.cipher).\n * @param {Object=} options.kdf_params KDF parameters (default: constants.<kdf>).\n * @return {Object}\n */\nfunction marshal (name, derivedKey, privateKey, nonce, salt, options = {}) {\n const opt = Object.assign({}, DEFAULTS.crypto, options)\n return Object.assign(\n { name, version: 1, public_key: getAddressFromPriv(privateKey), id: uuid() },\n {\n crypto: Object.assign(\n {\n secret_type: opt.secret_type,\n symmetric_alg: opt.symmetric_alg,\n ciphertext: Buffer.from(encrypt(Buffer.from(privateKey), derivedKey, nonce, opt.symmetric_alg)).toString('hex'),\n cipher_params: { nonce: Buffer.from(nonce).toString('hex') }\n },\n { kdf: opt.kdf, kdf_params: { ...opt.kdf_params, salt: Buffer.from(salt).toString('hex') } }\n )\n }\n )\n}\n\nexport function getAddressFromPriv (secret) {\n const keys = nacl.sign.keyPair.fromSecretKey(str2buf(secret))\n const publicBuffer = Buffer.from(keys.publicKey)\n return encode(publicBuffer, 'ak')\n}\n\n/**\n * Recover plaintext private key from secret-storage key object.\n * @param {String} password Keystore object password.\n * @param {Object} keyObject Keystore object.\n * @return {Buffer} Plaintext private key.\n */\nexport async function recover (password, keyObject) {\n validateKeyObj(keyObject)\n const nonce = Uint8Array.from(str2buf(keyObject.crypto.cipher_params.nonce))\n const salt = Uint8Array.from(str2buf(keyObject.crypto.kdf_params.salt))\n const kdfParams = keyObject.crypto.kdf_params\n const kdf = keyObject.crypto.kdf\n\n const key = await decrypt(\n Uint8Array.from(str2buf(keyObject.crypto.ciphertext)),\n await deriveKey(password, salt, { kdf, kdf_params: kdfParams }),\n nonce,\n keyObject.crypto.symmetric_alg\n )\n if (!key) throw new InvalidPasswordError('Invalid password')\n\n if (Buffer.from(key).length === 64) return Buffer.from(key).toString('hex')\n return Buffer.from(key).toString('utf-8')\n}\n\n/**\n * Export private key to keystore secret-storage format.\n * @param {String} name Key name.\n * @param {String} password User-supplied password.\n * @param {String|Buffer} privateKey Private key as hex-string or a Buffer.\n * @param {Buffer} nonce Randomly generated 24byte nonce.\n * @param {Buffer} salt Randomly generated 16byte salt.\n * @param {Object=} options Encryption parameters.\n * @param {String=} options.kdf Key derivation function (default: pbkdf2).\n * @param {String=} options.cipher Symmetric cipher (default: constants.cipher).\n * @param {Object=} options.kdfparams KDF parameters (default: constants.<kdf>).\n * @return {Object}\n */\nexport async function dump (\n name,\n password,\n privateKey,\n nonce = nacl.randomBytes(24),\n salt = nacl.randomBytes(16),\n options = {}\n) {\n const opt = Object.assign({}, DEFAULTS.crypto, options)\n return marshal(\n name,\n await deriveKey(password, salt, opt),\n typeof privateKey === 'string' ? Buffer.from(privateKey, 'hex') : privateKey,\n nonce,\n salt,\n opt\n )\n}\n\nexport function validateKeyObj (obj) {\n const root = ['crypto', 'id', 'version', 'public_key']\n const cryptoKeys = ['cipher_params', 'ciphertext', 'symmetric_alg', 'kdf', 'kdf_params']\n\n const missingRootKeys = root.filter(key => !Object.prototype.hasOwnProperty.call(obj, key))\n if (missingRootKeys.length) throw new InvalidKeyError(`Invalid key file format. Require properties: ${missingRootKeys}`)\n\n const missingCryptoKeys = cryptoKeys\n .filter(key => !Object.prototype.hasOwnProperty.call(obj.crypto, key))\n if (missingCryptoKeys.length) throw new InvalidKeyError(`Invalid key file format. Require properties: ${missingCryptoKeys}`)\n\n return true\n}\n"],"file":"keystore.mjs"}
1
+ {"version":3,"file":"keystore.mjs","names":["nacl","v4","uuid","getAddressFromPriv","bytesToHex","hexToBytes","InvalidPasswordError","DERIVED_KEY_FUNCTIONS","argon2id","pass","salt","params","memlimit_kib","mem","opslimit","time","hash","hashLen","type","ArgonType","Argon2id","CRYPTO_FUNCTIONS","encrypt","secretbox","decrypt","res","open","CRYPTO_DEFAULTS","secret_type","symmetric_alg","kdf","kdf_params","parallelism","plaintext","key","nonce","algo","ciphertext","deriveKey","password","kdfParams","recover","crypto","cipher_params","dump","name","privateKey","randomBytes","options","opt","derivedKey","payload","version","public_key","id"],"sources":["../../src/utils/keystore.ts"],"sourcesContent":["import nacl from 'tweetnacl';\nimport { v4 as uuid } from '@aeternity/uuid';\n// js extension is required for mjs build\n// eslint-disable-next-line import/extensions\nimport { ArgonType, hash } from '@aeternity/argon2-browser/dist/argon2-bundled.min.js';\nimport { getAddressFromPriv } from './crypto';\nimport { bytesToHex, hexToBytes } from './bytes';\nimport { InvalidPasswordError } from './errors';\n\nconst DERIVED_KEY_FUNCTIONS = {\n async argon2id(\n pass: string | Uint8Array,\n salt: string | Uint8Array,\n params: Partial<Keystore['crypto']['kdf_params']>,\n ): Promise<Uint8Array> {\n const { memlimit_kib: mem, opslimit: time } = params;\n\n return (await hash({\n hashLen: 32,\n pass,\n salt,\n time,\n mem,\n type: ArgonType.Argon2id,\n })).hash;\n },\n};\n\nconst CRYPTO_FUNCTIONS = {\n 'xsalsa20-poly1305': {\n encrypt: nacl.secretbox,\n decrypt(...args: Parameters<typeof nacl.secretbox.open>): Uint8Array {\n const res = nacl.secretbox.open(...args);\n if (res == null) throw new InvalidPasswordError();\n return res;\n },\n },\n};\n\nexport interface Keystore {\n name: string;\n version: 1;\n public_key: string;\n id: string;\n crypto: {\n secret_type: 'ed25519';\n symmetric_alg: keyof typeof CRYPTO_FUNCTIONS;\n ciphertext: string;\n cipher_params: {\n nonce: string;\n };\n kdf: keyof typeof DERIVED_KEY_FUNCTIONS;\n kdf_params: {\n memlimit_kib: number;\n opslimit: number;\n parallelism: number;\n salt: string;\n };\n };\n}\n\nconst CRYPTO_DEFAULTS = {\n secret_type: 'ed25519',\n symmetric_alg: 'xsalsa20-poly1305',\n kdf: 'argon2id',\n kdf_params: {\n memlimit_kib: 65536,\n opslimit: 3,\n parallelism: 1,\n },\n} as const;\n\n/**\n * Symmetric private key encryption using secret (derived) key.\n * @param plaintext - Data to be encrypted.\n * @param key - Secret key.\n * @param nonce - Randomly generated nonce.\n * @param algo - Encryption algorithm.\n * @returns Encrypted data.\n */\nfunction encrypt(\n plaintext: Uint8Array,\n key: Uint8Array,\n nonce: Uint8Array,\n algo: keyof typeof CRYPTO_FUNCTIONS = CRYPTO_DEFAULTS.symmetric_alg,\n): Uint8Array {\n return CRYPTO_FUNCTIONS[algo].encrypt(plaintext, nonce, key);\n}\n\n/**\n * Symmetric private key decryption using secret (derived) key.\n * @param ciphertext - Data to be decrypted.\n * @param key - Secret key.\n * @param nonce - Nonce from key-object.\n * @param algo - Encryption algorithm.\n * @returns Decrypted data.\n */\nfunction decrypt(\n ciphertext: Uint8Array,\n key: Uint8Array,\n nonce: Uint8Array,\n algo: keyof typeof CRYPTO_FUNCTIONS = CRYPTO_DEFAULTS.symmetric_alg,\n): Uint8Array {\n return CRYPTO_FUNCTIONS[algo].decrypt(ciphertext, nonce, key);\n}\n\n/**\n * Derive secret key from password with key derivation function.\n * @param password - User-supplied password.\n * @param nonce - Randomly generated nonce.\n * @param kdf - Key derivation function.\n * @param kdfParams - KDF parameters.\n * @returns Secret key derived from password.\n */\nasync function deriveKey(\n password: string | Uint8Array,\n nonce: string | Uint8Array,\n kdf: Keystore['crypto']['kdf'],\n kdfParams: Omit<Keystore['crypto']['kdf_params'], 'salt'>,\n): Promise<Uint8Array> {\n return DERIVED_KEY_FUNCTIONS[kdf](password, nonce, kdfParams);\n}\n\n/**\n * Recover plaintext private key from secret-storage key object.\n * @param password - Keystore object password.\n * @param keystore - Keystore object.\n * @returns Plaintext private key.\n */\nexport async function recover(\n password: string | Uint8Array,\n { crypto }: Keystore,\n): Promise<string> {\n const salt = hexToBytes(crypto.kdf_params.salt);\n return bytesToHex(decrypt(\n hexToBytes(crypto.ciphertext),\n await deriveKey(password, salt, crypto.kdf, crypto.kdf_params),\n hexToBytes(crypto.cipher_params.nonce),\n crypto.symmetric_alg,\n ));\n}\n\n/**\n * Export private key to keystore secret-storage format.\n * @param name - Key name.\n * @param password - User-supplied password.\n * @param privateKey - Private key as hex-string or a Buffer.\n * @param nonce - Randomly generated 24byte nonce.\n * @param salt - Randomly generated 16byte salt.\n * @param options - Encryption parameters.\n * @param options.kdf - Key derivation function.\n * @param options.kdf_params - KDF parameters.\n */\nexport async function dump(\n name: string,\n password: string | Uint8Array,\n privateKey: string | Uint8Array,\n nonce: Uint8Array = nacl.randomBytes(24),\n salt: Uint8Array = nacl.randomBytes(16),\n options?: Partial<Keystore['crypto']>,\n): Promise<Keystore> {\n const opt = { ...CRYPTO_DEFAULTS, ...options };\n const derivedKey = await deriveKey(password, salt, opt.kdf, opt.kdf_params);\n const payload = typeof privateKey === 'string' ? hexToBytes(privateKey) : privateKey;\n return {\n name,\n version: 1,\n public_key: getAddressFromPriv(payload),\n id: uuid(),\n crypto: {\n secret_type: opt.secret_type,\n symmetric_alg: opt.symmetric_alg,\n ciphertext: bytesToHex(encrypt(payload, derivedKey, nonce, opt.symmetric_alg)),\n cipher_params: { nonce: bytesToHex(nonce) },\n kdf: opt.kdf,\n kdf_params: {\n ...opt.kdf_params,\n salt: bytesToHex(salt),\n },\n },\n };\n}\n"],"mappings":"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"}
@@ -6,24 +6,21 @@ export default class MPTree {
6
6
  private static nodeHash;
7
7
  /**
8
8
  * Deserialize Merkle Patricia Tree
9
- * @rtype (binary: Array) => MPTree
10
- * @param {Array} binary - Binary
11
- * @return {MPTree} Merkle Patricia Tree
9
+ * @param binary - Binary
10
+ * @returns Merkle Patricia Tree
12
11
  */
13
12
  constructor(binary: MPTreeBinary);
14
13
  isEqual(tree: MPTree): boolean;
15
14
  private static parseNode;
16
15
  /**
17
16
  * Serialize Merkle Patricia Tree
18
- * @rtype () => Array
19
- * @return {Array} Binary
17
+ * @returns Binary
20
18
  */
21
19
  serialize(): MPTreeBinary;
22
20
  /**
23
21
  * Retrieve value from Merkle Patricia Tree
24
- * @rtype (key: String) => Buffer
25
- * @param {String} key - The key of the element to retrieve
26
- * @return {Buffer} Value associated to the specified key
22
+ * @param _key - The key of the element to retrieve
23
+ * @returns Value associated to the specified key
27
24
  */
28
- get(key: string): Buffer | undefined;
25
+ get(_key: string): Buffer | undefined;
29
26
  }
@@ -1,4 +1,5 @@
1
1
  import _buffer from "buffer";
2
+ import _includesInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/includes";
2
3
  const {
3
4
  Buffer: _Buffer
4
5
  } = _buffer;
@@ -19,11 +20,13 @@ const {
19
20
  * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
20
21
  * PERFORMANCE OF THIS SOFTWARE.
21
22
  */
23
+
24
+ /* eslint-disable default-case */
22
25
  import _rlp from 'rlp';
23
26
  const {
24
27
  encode: rlpEncode
25
28
  } = _rlp;
26
- import { hash } from "./crypto-ts.mjs";
29
+ import { hash } from "./crypto.mjs";
27
30
  import { MerkleTreeHashMismatchError, MissingNodeInTreeError, UnknownPathNibbleError, UnknownNodeLengthError } from "./errors.mjs";
28
31
  var NodeType;
29
32
 
@@ -39,9 +42,8 @@ export default class MPTree {
39
42
  }
40
43
  /**
41
44
  * Deserialize Merkle Patricia Tree
42
- * @rtype (binary: Array) => MPTree
43
- * @param {Array} binary - Binary
44
- * @return {MPTree} Merkle Patricia Tree
45
+ * @param binary - Binary
46
+ * @returns Merkle Patricia Tree
45
47
  */
46
48
 
47
49
 
@@ -90,15 +92,17 @@ export default class MPTree {
90
92
 
91
93
  case 2:
92
94
  {
93
- const path = node[0].toString('hex');
94
- const nibble = parseInt(path[0], 16);
95
+ var _context;
96
+
97
+ const nibble = node[0][0] >> 4; // eslint-disable-line no-bitwise
98
+
95
99
  if (nibble > 3) throw new UnknownPathNibbleError(nibble);
96
100
  const type = nibble <= 1 ? NodeType.Extension : NodeType.Leaf;
97
- const slice = [0, 2].includes(nibble) ? 2 : 1;
101
+ const slice = _includesInstanceProperty(_context = [0, 2]).call(_context, nibble) ? 2 : 1;
98
102
  return {
99
103
  type,
100
104
  payload: [node[1]],
101
- path: path.slice(slice)
105
+ path: node[0].toString('hex').slice(slice)
102
106
  };
103
107
  }
104
108
 
@@ -108,8 +112,7 @@ export default class MPTree {
108
112
  }
109
113
  /**
110
114
  * Serialize Merkle Patricia Tree
111
- * @rtype () => Array
112
- * @return {Array} Binary
115
+ * @returns Binary
113
116
  */
114
117
 
115
118
 
@@ -121,16 +124,17 @@ export default class MPTree {
121
124
  }
122
125
  /**
123
126
  * Retrieve value from Merkle Patricia Tree
124
- * @rtype (key: String) => Buffer
125
- * @param {String} key - The key of the element to retrieve
126
- * @return {Buffer} Value associated to the specified key
127
+ * @param _key - The key of the element to retrieve
128
+ * @returns Value associated to the specified key
127
129
  */
128
130
 
129
131
 
130
- get(key) {
132
+ get(_key) {
131
133
  let searchFrom = this.rootHash;
134
+ let key = _key;
132
135
 
133
136
  while (true) {
137
+ // eslint-disable-line no-constant-condition
134
138
  const {
135
139
  type,
136
140
  payload,
@@ -140,14 +144,14 @@ export default class MPTree {
140
144
  switch (type) {
141
145
  case NodeType.Branch:
142
146
  if (key.length === 0) return payload[16];
143
- searchFrom = payload[parseInt(key[0], 16)].toString('hex');
144
- key = key.substr(1);
147
+ searchFrom = payload[+`0x${key[0]}`].toString('hex');
148
+ key = key.substring(1);
145
149
  break;
146
150
 
147
151
  case NodeType.Extension:
148
- if (key.substr(0, path === null || path === void 0 ? void 0 : path.length) !== path) return undefined;
152
+ if (key.substring(0, path === null || path === void 0 ? void 0 : path.length) !== path) return undefined;
149
153
  searchFrom = payload[0].toString('hex');
150
- key = key.substr(path.length);
154
+ key = key.substring(path.length);
151
155
  break;
152
156
 
153
157
  case NodeType.Leaf:
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utils/mptree.ts"],"names":["hash","MerkleTreeHashMismatchError","MissingNodeInTreeError","UnknownPathNibbleError","UnknownNodeLengthError","NodeType","MPTree","nodeHash","node","from","rlpEncode","toString","constructor","binary","rootHash","nodes","Object","fromEntries","map","undefined","entries","forEach","key","type","payload","parseNode","Branch","slice","filter","n","length","Extension","isEqual","tree","path","nibble","parseInt","Leaf","includes","serialize","mptHash","value","get","searchFrom","substr"],"mappings":"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","sourcesContent":["/*\n * ISC License (ISC)\n * Copyright (c) 2021 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\nimport { encode as rlpEncode } from 'rlp'\nimport type { Input } from 'rlp'\nimport { hash } from './crypto-ts'\nimport {\n MerkleTreeHashMismatchError,\n MissingNodeInTreeError,\n UnknownPathNibbleError,\n UnknownNodeLengthError\n} from './errors'\n\nenum NodeType {\n Branch,\n Extension,\n Leaf\n}\n\nexport type MPTreeBinary = [Buffer, Array<[Buffer, Buffer[]]>]\n\nexport default class MPTree {\n private readonly rootHash: string\n private readonly nodes: { [key: string]: Buffer[] }\n\n private static nodeHash (node: Input): string {\n return Buffer.from(hash(rlpEncode(node))).toString('hex')\n }\n\n /**\n * Deserialize Merkle Patricia Tree\n * @rtype (binary: Array) => MPTree\n * @param {Array} binary - Binary\n * @return {MPTree} Merkle Patricia Tree\n */\n constructor (binary: MPTreeBinary) {\n this.rootHash = binary[0].toString('hex')\n this.nodes = Object.fromEntries(\n binary[1].map((node) => [node[0].toString('hex'), node[1]])\n )\n\n if (this.nodes[this.rootHash] === undefined) throw new MissingNodeInTreeError('Can\\'t find a node by root hash')\n Object.entries(this.nodes).forEach(([key, node]) => {\n if (MPTree.nodeHash(node) !== key) throw new MerkleTreeHashMismatchError()\n const { type, payload } = MPTree.parseNode(node)\n switch (type) {\n case NodeType.Branch:\n payload\n .slice(0, 16)\n .filter(n => n.length)\n .forEach((n) => {\n if (this.nodes[n.toString('hex')] === undefined) {\n throw new MissingNodeInTreeError('Can\\'t find a node by hash in branch node')\n }\n })\n break\n case NodeType.Extension:\n if (this.nodes[payload[0].toString('hex')] === undefined) {\n throw new MissingNodeInTreeError('Can\\'t find a node by hash in extension node')\n }\n }\n })\n }\n\n isEqual (tree: MPTree): boolean {\n return this.rootHash === tree.rootHash\n }\n\n private static parseNode (node: Buffer[]): { type: NodeType, payload: Buffer[], path: string | null } {\n switch (node.length) {\n case 17:\n return { type: NodeType.Branch, payload: node, path: null }\n case 2: {\n const path = node[0].toString('hex')\n const nibble = parseInt(path[0], 16)\n if (nibble > 3) throw new UnknownPathNibbleError(nibble)\n const type = nibble <= 1 ? NodeType.Extension : NodeType.Leaf\n const slice = [0, 2].includes(nibble) ? 2 : 1\n return { type, payload: [node[1]], path: path.slice(slice) }\n }\n default:\n throw new UnknownNodeLengthError(node.length)\n }\n }\n\n /**\n * Serialize Merkle Patricia Tree\n * @rtype () => Array\n * @return {Array} Binary\n */\n serialize (): MPTreeBinary {\n return [\n Buffer.from(this.rootHash, 'hex'),\n Object.entries(this.nodes).map(([mptHash, value]) => ([\n Buffer.from(mptHash, 'hex'),\n value\n ]))\n ]\n }\n\n /**\n * Retrieve value from Merkle Patricia Tree\n * @rtype (key: String) => Buffer\n * @param {String} key - The key of the element to retrieve\n * @return {Buffer} Value associated to the specified key\n */\n get (key: string): Buffer | undefined {\n let searchFrom = this.rootHash\n while (true) {\n const { type, payload, path } = MPTree.parseNode(this.nodes[searchFrom])\n switch (type) {\n case NodeType.Branch:\n if (key.length === 0) return payload[16]\n searchFrom = payload[parseInt(key[0], 16)].toString('hex')\n key = key.substr(1)\n break\n case NodeType.Extension:\n if (key.substr(0, path?.length) !== path) return undefined\n searchFrom = payload[0].toString('hex')\n key = key.substr(path.length)\n break\n case NodeType.Leaf:\n if (path !== key) return undefined\n return payload[0]\n }\n }\n }\n}\n"],"file":"mptree.mjs"}
1
+ {"version":3,"file":"mptree.mjs","names":["hash","MerkleTreeHashMismatchError","MissingNodeInTreeError","UnknownPathNibbleError","UnknownNodeLengthError","NodeType","MPTree","nodeHash","node","from","rlpEncode","toString","constructor","binary","rootHash","nodes","Object","fromEntries","map","undefined","entries","forEach","key","type","payload","parseNode","Branch","slice","filter","n","length","Extension","isEqual","tree","path","nibble","Leaf","serialize","mptHash","value","get","_key","searchFrom","substring"],"sources":["../../src/utils/mptree.ts"],"sourcesContent":["/*\n * ISC License (ISC)\n * Copyright (c) 2021 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/* eslint-disable default-case */\nimport { encode as rlpEncode } from 'rlp';\nimport type { Input } from 'rlp';\nimport { hash } from './crypto';\nimport {\n MerkleTreeHashMismatchError,\n MissingNodeInTreeError,\n UnknownPathNibbleError,\n UnknownNodeLengthError,\n} from './errors';\n\nenum NodeType {\n Branch,\n Extension,\n Leaf,\n}\n\nexport type MPTreeBinary = [Buffer, Array<[Buffer, Buffer[]]>];\n\nexport default class MPTree {\n private readonly rootHash: string;\n\n private readonly nodes: { [key: string]: Buffer[] };\n\n private static nodeHash(node: Input): string {\n return Buffer.from(hash(rlpEncode(node))).toString('hex');\n }\n\n /**\n * Deserialize Merkle Patricia Tree\n * @param binary - Binary\n * @returns Merkle Patricia Tree\n */\n constructor(binary: MPTreeBinary) {\n this.rootHash = binary[0].toString('hex');\n this.nodes = Object.fromEntries(\n binary[1].map((node) => [node[0].toString('hex'), node[1]]),\n );\n\n if (this.nodes[this.rootHash] === undefined) throw new MissingNodeInTreeError('Can\\'t find a node by root hash');\n Object.entries(this.nodes).forEach(([key, node]) => {\n if (MPTree.nodeHash(node) !== key) throw new MerkleTreeHashMismatchError();\n const { type, payload } = MPTree.parseNode(node);\n switch (type) {\n case NodeType.Branch:\n payload\n .slice(0, 16)\n .filter((n) => n.length)\n .forEach((n) => {\n if (this.nodes[n.toString('hex')] === undefined) {\n throw new MissingNodeInTreeError('Can\\'t find a node by hash in branch node');\n }\n });\n break;\n case NodeType.Extension:\n if (this.nodes[payload[0].toString('hex')] === undefined) {\n throw new MissingNodeInTreeError('Can\\'t find a node by hash in extension node');\n }\n }\n });\n }\n\n isEqual(tree: MPTree): boolean {\n return this.rootHash === tree.rootHash;\n }\n\n private static parseNode(node: Buffer[]): {\n type: NodeType;\n payload: Buffer[];\n path: string | null;\n } {\n switch (node.length) {\n case 17:\n return { type: NodeType.Branch, payload: node, path: null };\n case 2: {\n const nibble = node[0][0] >> 4; // eslint-disable-line no-bitwise\n if (nibble > 3) throw new UnknownPathNibbleError(nibble);\n const type = nibble <= 1 ? NodeType.Extension : NodeType.Leaf;\n const slice = [0, 2].includes(nibble) ? 2 : 1;\n return { type, payload: [node[1]], path: node[0].toString('hex').slice(slice) };\n }\n default:\n throw new UnknownNodeLengthError(node.length);\n }\n }\n\n /**\n * Serialize Merkle Patricia Tree\n * @returns Binary\n */\n serialize(): MPTreeBinary {\n return [\n Buffer.from(this.rootHash, 'hex'),\n Object.entries(this.nodes).map(([mptHash, value]) => ([\n Buffer.from(mptHash, 'hex'),\n value,\n ])),\n ];\n }\n\n /**\n * Retrieve value from Merkle Patricia Tree\n * @param _key - The key of the element to retrieve\n * @returns Value associated to the specified key\n */\n get(_key: string): Buffer | undefined {\n let searchFrom = this.rootHash;\n let key = _key;\n while (true) { // eslint-disable-line no-constant-condition\n const { type, payload, path } = MPTree.parseNode(this.nodes[searchFrom]);\n switch (type) {\n case NodeType.Branch:\n if (key.length === 0) return payload[16];\n searchFrom = payload[+`0x${key[0]}`].toString('hex');\n key = key.substring(1);\n break;\n case NodeType.Extension:\n if (key.substring(0, path?.length) !== path) return undefined;\n searchFrom = payload[0].toString('hex');\n key = key.substring(path.length);\n break;\n case NodeType.Leaf:\n if (path !== key) return undefined;\n return payload[0];\n }\n }\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /// <reference types="node" />
2
+ export declare const pause: (duration: number) => Promise<void>;
3
+ export declare const mapObject: <InputV, OutputV>(object: {
4
+ [k: string]: InputV;
5
+ }, fn: (value: [string, InputV], index: number, array: [string, InputV][]) => [string | number, OutputV]) => {
6
+ [k: string]: OutputV;
7
+ };
8
+ export declare const concatBuffers: (list: readonly Uint8Array[], totalLength?: number | undefined) => Buffer;
9
+ /**
10
+ * Object key type guard
11
+ * @param key - Maybe object key
12
+ * @param object - Object
13
+ */
14
+ export declare function isKeyOfObject<T>(key: string | number | symbol, object: T): key is keyof T;
15
+ /**
16
+ * Array item type guard
17
+ * @param item - Maybe array item
18
+ * @param array - Array
19
+ */
20
+ export declare function isItemOfArray<T>(item: any, array: readonly T[]): item is T;