@aeternity/aepp-sdk 11.0.1 → 12.0.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 (376) 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 +12 -19
  4. package/dist/aepp-sdk.browser-script.js.map +1 -1
  5. package/dist/aepp-sdk.browser.js +1 -1
  6. package/dist/aepp-sdk.browser.js.map +1 -1
  7. package/dist/aepp-sdk.js +1 -1
  8. package/dist/aepp-sdk.js.map +1 -1
  9. package/es/AeSdk.d.ts +37 -0
  10. package/es/AeSdk.mjs +81 -0
  11. package/es/AeSdk.mjs.map +1 -0
  12. package/es/AeSdkAepp.d.ts +69 -0
  13. package/es/AeSdkAepp.mjs +175 -0
  14. package/es/AeSdkAepp.mjs.map +1 -0
  15. package/es/AeSdkBase.d.ts +212 -0
  16. package/es/AeSdkBase.mjs +310 -0
  17. package/es/AeSdkBase.mjs.map +1 -0
  18. package/es/AeSdkWallet.d.ts +103 -0
  19. package/es/AeSdkWallet.mjs +322 -0
  20. package/es/AeSdkWallet.mjs.map +1 -0
  21. package/es/Node.d.ts +44 -0
  22. package/es/Node.mjs +141 -0
  23. package/es/Node.mjs.map +1 -0
  24. package/es/account/Base.d.ts +65 -0
  25. package/es/account/Base.mjs +123 -0
  26. package/es/account/Base.mjs.map +1 -0
  27. package/es/account/Memory.d.ts +25 -0
  28. package/es/account/Memory.mjs +81 -0
  29. package/es/account/Memory.mjs.map +1 -0
  30. package/es/account/Rpc.d.ts +27 -0
  31. package/es/account/Rpc.mjs +79 -0
  32. package/es/account/Rpc.mjs.map +1 -0
  33. package/es/aens.d.ts +209 -0
  34. package/es/aens.mjs +332 -0
  35. package/es/aens.mjs.map +1 -0
  36. package/es/aepp-wallet-communication/connection/Browser.d.ts +32 -0
  37. package/es/aepp-wallet-communication/connection/Browser.mjs +70 -0
  38. package/es/aepp-wallet-communication/connection/Browser.mjs.map +1 -0
  39. package/es/aepp-wallet-communication/connection/BrowserRuntime.d.ts +17 -0
  40. package/es/aepp-wallet-communication/connection/BrowserRuntime.mjs +57 -0
  41. package/es/aepp-wallet-communication/connection/BrowserRuntime.mjs.map +1 -0
  42. package/es/aepp-wallet-communication/connection/BrowserWindowMessage.d.ts +35 -0
  43. package/es/aepp-wallet-communication/connection/BrowserWindowMessage.mjs +142 -0
  44. package/es/aepp-wallet-communication/connection/BrowserWindowMessage.mjs.map +1 -0
  45. package/es/aepp-wallet-communication/connection-proxy.d.ts +10 -0
  46. package/{src/utils/crypto-ts.ts → es/aepp-wallet-communication/connection-proxy.mjs} +15 -11
  47. package/es/aepp-wallet-communication/connection-proxy.mjs.map +1 -0
  48. package/es/aepp-wallet-communication/rpc/RpcClient.d.ts +33 -0
  49. package/es/aepp-wallet-communication/rpc/RpcClient.mjs +169 -0
  50. package/es/aepp-wallet-communication/rpc/RpcClient.mjs.map +1 -0
  51. package/es/aepp-wallet-communication/rpc/types.d.ts +77 -0
  52. package/es/aepp-wallet-communication/rpc/types.mjs +3 -0
  53. package/es/aepp-wallet-communication/rpc/types.mjs.map +1 -0
  54. package/es/aepp-wallet-communication/schema.d.ts +90 -46
  55. package/es/aepp-wallet-communication/schema.mjs +214 -0
  56. package/es/aepp-wallet-communication/schema.mjs.map +1 -0
  57. package/es/aepp-wallet-communication/wallet-detector.d.ts +24 -0
  58. package/es/aepp-wallet-communication/wallet-detector.mjs +63 -0
  59. package/es/aepp-wallet-communication/wallet-detector.mjs.map +1 -0
  60. package/es/apis/compiler/compiler.d.ts +92 -0
  61. package/es/apis/compiler/compiler.mjs +576 -0
  62. package/es/apis/compiler/compiler.mjs.map +1 -0
  63. package/es/apis/compiler/index.d.ts +2 -0
  64. package/es/apis/compiler/index.mjs +3 -0
  65. package/es/apis/compiler/index.mjs.map +1 -0
  66. package/es/apis/compiler/models/index.d.ts +248 -0
  67. package/es/apis/compiler/models/index.mjs +48 -0
  68. package/es/apis/compiler/models/index.mjs.map +1 -0
  69. package/es/apis/compiler/models/mappers.d.ts +23 -0
  70. package/es/apis/compiler/models/mappers.mjs +585 -0
  71. package/es/apis/compiler/models/mappers.mjs.map +1 -0
  72. package/es/apis/compiler/models/parameters.d.ts +13 -0
  73. package/es/apis/compiler/models/parameters.mjs +71 -0
  74. package/es/apis/compiler/models/parameters.mjs.map +1 -0
  75. package/es/apis/node/index.d.ts +2 -0
  76. package/es/apis/node/index.mjs +3 -0
  77. package/es/apis/node/index.mjs.map +1 -0
  78. package/es/apis/node/models/index.d.ts +1061 -0
  79. package/es/apis/node/models/index.mjs +2 -0
  80. package/es/apis/node/models/index.mjs.map +1 -0
  81. package/es/apis/node/models/mappers.d.ts +95 -0
  82. package/es/apis/node/models/mappers.mjs +4164 -0
  83. package/es/apis/node/models/mappers.mjs.map +1 -0
  84. package/es/apis/node/models/parameters.d.ts +17 -0
  85. package/es/apis/node/models/parameters.mjs +165 -0
  86. package/es/apis/node/models/parameters.mjs.map +1 -0
  87. package/es/apis/node/node.d.ts +215 -0
  88. package/es/apis/node/node.mjs +1165 -0
  89. package/es/apis/node/node.mjs.map +1 -0
  90. package/es/chain.d.ts +220 -0
  91. package/es/chain.mjs +524 -0
  92. package/es/chain.mjs.map +1 -0
  93. package/es/channel/handlers.d.ts +34 -0
  94. package/es/channel/handlers.mjs +147 -112
  95. package/es/channel/handlers.mjs.map +1 -1
  96. package/es/channel/index.d.ts +634 -0
  97. package/es/channel/index.mjs +898 -900
  98. package/es/channel/index.mjs.map +1 -1
  99. package/es/channel/internal.d.ts +100 -0
  100. package/es/channel/internal.mjs +97 -51
  101. package/es/channel/internal.mjs.map +1 -1
  102. package/es/contract/Compiler.d.ts +17 -0
  103. package/es/contract/Compiler.mjs +67 -0
  104. package/es/contract/Compiler.mjs.map +1 -0
  105. package/es/contract/aci.d.ts +125 -0
  106. package/es/contract/aci.mjs +199 -180
  107. package/es/contract/aci.mjs.map +1 -1
  108. package/es/contract/ga.d.ts +68 -0
  109. package/es/contract/ga.mjs +190 -0
  110. package/es/contract/ga.mjs.map +1 -0
  111. package/es/contract/methods.d.ts +68 -0
  112. package/es/contract/methods.mjs +101 -0
  113. package/es/contract/methods.mjs.map +1 -0
  114. package/es/index.d.ts +32 -0
  115. package/es/index.mjs +32 -40
  116. package/es/index.mjs.map +1 -1
  117. package/es/oracle.d.ts +154 -0
  118. package/es/oracle.mjs +288 -0
  119. package/es/oracle.mjs.map +1 -0
  120. package/es/spend.d.ts +61 -0
  121. package/es/spend.mjs +122 -0
  122. package/es/spend.mjs.map +1 -0
  123. package/es/tx/builder/constants.d.ts +41 -0
  124. package/es/tx/builder/constants.mjs +11 -19
  125. package/es/tx/builder/constants.mjs.map +1 -1
  126. package/es/tx/builder/field-types.d.ts +62 -0
  127. package/es/tx/builder/field-types.mjs +62 -10
  128. package/es/tx/builder/field-types.mjs.map +1 -1
  129. package/es/tx/builder/helpers.d.ts +131 -0
  130. package/es/tx/builder/helpers.mjs +71 -169
  131. package/es/tx/builder/helpers.mjs.map +1 -1
  132. package/es/tx/builder/index.d.ts +75 -0
  133. package/es/tx/builder/index.mjs +141 -323
  134. package/es/tx/builder/index.mjs.map +1 -1
  135. package/es/tx/builder/schema.d.ts +350 -0
  136. package/es/tx/builder/schema.mjs +173 -510
  137. package/es/tx/builder/schema.mjs.map +1 -1
  138. package/es/tx/index.d.ts +63 -0
  139. package/es/tx/index.mjs +171 -265
  140. package/es/tx/index.mjs.map +1 -1
  141. package/es/tx/min-fee.d.ts +20 -0
  142. package/es/tx/min-fee.mjs +148 -0
  143. package/es/tx/min-fee.mjs.map +1 -0
  144. package/es/tx/validator.d.ts +19 -0
  145. package/es/tx/validator.mjs +64 -71
  146. package/es/tx/validator.mjs.map +1 -1
  147. package/es/typings/@aeternity__argon2-browser/index.d.mjs +2 -0
  148. package/es/typings/@aeternity__argon2-browser/index.d.mjs.map +1 -0
  149. package/es/typings/@aeternity__uuid/index.d.mjs +2 -0
  150. package/es/typings/@aeternity__uuid/index.d.mjs.map +1 -0
  151. package/es/typings/bip32-path/index.d.mjs +2 -0
  152. package/es/typings/bip32-path/index.d.mjs.map +1 -0
  153. package/es/typings/blakejs/index.d.mjs.map +1 -1
  154. package/es/typings/tweetnacl-auth/index.d.mjs +2 -0
  155. package/es/typings/tweetnacl-auth/index.d.mjs.map +1 -0
  156. package/es/utils/amount-formatter.d.ts +42 -0
  157. package/es/utils/amount-formatter.mjs +28 -41
  158. package/es/utils/amount-formatter.mjs.map +1 -1
  159. package/es/utils/autorest.d.ts +6 -0
  160. package/es/utils/autorest.mjs +97 -0
  161. package/es/utils/autorest.mjs.map +1 -0
  162. package/es/utils/bignumber.d.ts +13 -0
  163. package/es/utils/bignumber.mjs +10 -8
  164. package/es/utils/bignumber.mjs.map +1 -1
  165. package/es/{bytes.d.ts → utils/bytes.d.ts} +10 -13
  166. package/es/utils/bytes.mjs +10 -14
  167. package/es/utils/bytes.mjs.map +1 -1
  168. package/es/utils/crypto.d.ts +103 -0
  169. package/es/utils/crypto.mjs +60 -68
  170. package/es/utils/crypto.mjs.map +1 -1
  171. package/es/utils/encoder.d.ts +26 -0
  172. package/es/utils/encoder.mjs +47 -51
  173. package/es/utils/encoder.mjs.map +1 -1
  174. package/es/{errors.d.ts → utils/errors.d.ts} +254 -57
  175. package/es/utils/errors.mjs +318 -125
  176. package/es/utils/errors.mjs.map +1 -1
  177. package/es/utils/hd-wallet.d.ts +34 -0
  178. package/es/utils/hd-wallet.mjs +27 -16
  179. package/es/utils/hd-wallet.mjs.map +1 -1
  180. package/es/utils/json-big.d.ts +5 -0
  181. package/es/utils/json-big.mjs +10 -14
  182. package/es/utils/json-big.mjs.map +1 -1
  183. package/es/utils/keystore.d.ts +51 -0
  184. package/es/utils/keystore.mjs +98 -193
  185. package/es/utils/keystore.mjs.map +1 -1
  186. package/es/{mptree.d.ts → utils/mptree.d.ts} +5 -8
  187. package/es/utils/mptree.mjs +13 -14
  188. package/es/utils/mptree.mjs.map +1 -1
  189. package/es/utils/other.d.ts +14 -0
  190. package/es/utils/other.mjs +21 -36
  191. package/es/utils/other.mjs.map +1 -1
  192. package/es/{semver-satisfies.d.ts → utils/semver-satisfies.d.ts} +0 -0
  193. package/es/utils/semver-satisfies.mjs.map +1 -1
  194. package/es/utils/string.d.ts +24 -0
  195. package/es/utils/string.mjs +8 -10
  196. package/es/utils/string.mjs.map +1 -1
  197. package/package.json +49 -39
  198. package/src/AeSdk.ts +65 -0
  199. package/src/AeSdkAepp.ts +167 -0
  200. package/src/AeSdkBase.ts +320 -0
  201. package/src/AeSdkWallet.ts +332 -0
  202. package/src/Node.ts +167 -0
  203. package/src/account/Base.ts +114 -0
  204. package/src/account/Memory.ts +83 -0
  205. package/src/account/Rpc.ts +67 -0
  206. package/src/aens.ts +391 -0
  207. package/src/aepp-wallet-communication/connection/Browser.ts +68 -0
  208. package/src/aepp-wallet-communication/connection/BrowserRuntime.ts +58 -0
  209. package/src/aepp-wallet-communication/connection/BrowserWindowMessage.ts +111 -0
  210. package/{es/utils/crypto-ts.mjs → src/aepp-wallet-communication/connection-proxy.ts} +16 -17
  211. package/src/aepp-wallet-communication/rpc/RpcClient.ts +137 -0
  212. package/src/aepp-wallet-communication/rpc/types.ts +66 -0
  213. package/src/aepp-wallet-communication/schema.ts +181 -0
  214. package/src/aepp-wallet-communication/wallet-detector.ts +71 -0
  215. package/src/apis/compiler/code-model-v4.yaml +2649 -0
  216. package/src/apis/compiler/compiler.ts +585 -0
  217. package/src/apis/compiler/index.ts +2 -0
  218. package/src/apis/compiler/models/index.ts +301 -0
  219. package/src/apis/compiler/models/mappers.ts +583 -0
  220. package/src/apis/compiler/models/parameters.ts +93 -0
  221. package/src/apis/node/code-model-v4.yaml +10046 -0
  222. package/src/apis/node/index.ts +2 -0
  223. package/src/apis/node/models/index.ts +1253 -0
  224. package/src/apis/node/models/mappers.ts +4278 -0
  225. package/src/apis/node/models/parameters.ts +188 -0
  226. package/src/apis/node/node.ts +1299 -0
  227. package/src/chain.ts +444 -0
  228. package/src/channel/{handlers.js → handlers.ts} +220 -128
  229. package/src/channel/index.ts +991 -0
  230. package/src/channel/internal.ts +345 -0
  231. package/src/contract/Compiler.ts +66 -0
  232. package/src/contract/aci.ts +529 -0
  233. package/src/contract/ga.ts +178 -0
  234. package/src/contract/methods.ts +118 -0
  235. package/src/index.ts +51 -0
  236. package/src/oracle.ts +342 -0
  237. package/src/spend.ts +152 -0
  238. package/src/tx/builder/{constants.js → constants.ts} +12 -16
  239. package/src/tx/builder/field-types.ts +111 -0
  240. package/src/tx/builder/helpers.ts +253 -0
  241. package/src/tx/builder/index.ts +394 -0
  242. package/src/tx/builder/schema.ts +771 -0
  243. package/src/tx/index.ts +199 -0
  244. package/src/tx/min-fee.ts +136 -0
  245. package/src/tx/validator.ts +226 -0
  246. package/src/typings/@aeternity__argon2-browser/index.d.ts +3 -0
  247. package/src/typings/@aeternity__uuid/index.d.ts +3 -0
  248. package/src/typings/bip32-path/index.d.ts +33 -0
  249. package/src/typings/tweetnacl-auth/index.d.ts +14 -0
  250. package/src/utils/amount-formatter.ts +29 -42
  251. package/src/utils/autorest.ts +90 -0
  252. package/src/utils/bignumber.ts +9 -11
  253. package/src/utils/bytes.ts +12 -14
  254. package/src/utils/crypto.ts +217 -0
  255. package/src/utils/encoder.ts +52 -55
  256. package/src/utils/errors.ts +268 -134
  257. package/src/utils/hd-wallet.ts +134 -0
  258. package/src/utils/json-big.ts +26 -0
  259. package/src/utils/keystore.ts +179 -0
  260. package/src/utils/mptree.ts +14 -14
  261. package/src/utils/other.ts +28 -43
  262. package/src/utils/string.ts +8 -10
  263. package/es/account/base.mjs +0 -179
  264. package/es/account/base.mjs.map +0 -1
  265. package/es/account/memory.mjs +0 -99
  266. package/es/account/memory.mjs.map +0 -1
  267. package/es/account/multiple.mjs +0 -179
  268. package/es/account/multiple.mjs.map +0 -1
  269. package/es/ae/aens.mjs +0 -404
  270. package/es/ae/aens.mjs.map +0 -1
  271. package/es/ae/aepp.mjs +0 -45
  272. package/es/ae/aepp.mjs.map +0 -1
  273. package/es/ae/contract.mjs +0 -159
  274. package/es/ae/contract.mjs.map +0 -1
  275. package/es/ae/index.mjs +0 -207
  276. package/es/ae/index.mjs.map +0 -1
  277. package/es/ae/oracle.mjs +0 -339
  278. package/es/ae/oracle.mjs.map +0 -1
  279. package/es/ae/universal.mjs +0 -45
  280. package/es/ae/universal.mjs.map +0 -1
  281. package/es/ae/wallet.mjs +0 -50
  282. package/es/ae/wallet.mjs.map +0 -1
  283. package/es/amount-formatter.d.ts +0 -58
  284. package/es/bignumber.d.ts +0 -18
  285. package/es/chain/index.mjs +0 -272
  286. package/es/chain/index.mjs.map +0 -1
  287. package/es/chain/node.mjs +0 -442
  288. package/es/chain/node.mjs.map +0 -1
  289. package/es/contract/compiler.mjs +0 -115
  290. package/es/contract/compiler.mjs.map +0 -1
  291. package/es/contract/ga/helpers.mjs +0 -30
  292. package/es/contract/ga/helpers.mjs.map +0 -1
  293. package/es/contract/ga/index.mjs +0 -178
  294. package/es/contract/ga/index.mjs.map +0 -1
  295. package/es/crypto-ts.d.ts +0 -9
  296. package/es/encoder.d.ts +0 -26
  297. package/es/node-pool/index.mjs +0 -188
  298. package/es/node-pool/index.mjs.map +0 -1
  299. package/es/node.mjs +0 -133
  300. package/es/node.mjs.map +0 -1
  301. package/es/other.d.ts +0 -31
  302. package/es/string.d.ts +0 -26
  303. package/es/tx/tx-object.mjs +0 -283
  304. package/es/tx/tx-object.mjs.map +0 -1
  305. package/es/tx/tx.mjs +0 -938
  306. package/es/tx/tx.mjs.map +0 -1
  307. package/es/utils/aepp-wallet-communication/connection/browser-runtime.mjs +0 -132
  308. package/es/utils/aepp-wallet-communication/connection/browser-runtime.mjs.map +0 -1
  309. package/es/utils/aepp-wallet-communication/connection/browser-window-message.mjs +0 -183
  310. package/es/utils/aepp-wallet-communication/connection/browser-window-message.mjs.map +0 -1
  311. package/es/utils/aepp-wallet-communication/connection/index.mjs +0 -87
  312. package/es/utils/aepp-wallet-communication/connection/index.mjs.map +0 -1
  313. package/es/utils/aepp-wallet-communication/content-script-bridge.mjs +0 -98
  314. package/es/utils/aepp-wallet-communication/content-script-bridge.mjs.map +0 -1
  315. package/es/utils/aepp-wallet-communication/helpers.mjs +0 -92
  316. package/es/utils/aepp-wallet-communication/helpers.mjs.map +0 -1
  317. package/es/utils/aepp-wallet-communication/rpc/aepp-rpc.mjs +0 -375
  318. package/es/utils/aepp-wallet-communication/rpc/aepp-rpc.mjs.map +0 -1
  319. package/es/utils/aepp-wallet-communication/rpc/rpc-client.mjs +0 -275
  320. package/es/utils/aepp-wallet-communication/rpc/rpc-client.mjs.map +0 -1
  321. package/es/utils/aepp-wallet-communication/rpc/wallet-rpc.mjs +0 -541
  322. package/es/utils/aepp-wallet-communication/rpc/wallet-rpc.mjs.map +0 -1
  323. package/es/utils/aepp-wallet-communication/schema.mjs +0 -102
  324. package/es/utils/aepp-wallet-communication/schema.mjs.map +0 -1
  325. package/es/utils/aepp-wallet-communication/wallet-detector.mjs +0 -110
  326. package/es/utils/aepp-wallet-communication/wallet-detector.mjs.map +0 -1
  327. package/es/utils/async-init.mjs +0 -64
  328. package/es/utils/async-init.mjs.map +0 -1
  329. package/es/utils/crypto-ts.mjs.map +0 -1
  330. package/es/utils/swagger.mjs +0 -164
  331. package/es/utils/swagger.mjs.map +0 -1
  332. package/src/account/base.js +0 -153
  333. package/src/account/memory.js +0 -83
  334. package/src/account/multiple.js +0 -162
  335. package/src/ae/aens.js +0 -361
  336. package/src/ae/aepp.js +0 -45
  337. package/src/ae/contract.js +0 -148
  338. package/src/ae/index.js +0 -168
  339. package/src/ae/oracle.js +0 -311
  340. package/src/ae/universal.js +0 -47
  341. package/src/ae/wallet.js +0 -50
  342. package/src/chain/index.js +0 -269
  343. package/src/chain/node.js +0 -320
  344. package/src/channel/index.js +0 -903
  345. package/src/channel/internal.js +0 -236
  346. package/src/contract/aci.js +0 -376
  347. package/src/contract/compiler.js +0 -100
  348. package/src/contract/ga/helpers.js +0 -19
  349. package/src/contract/ga/index.js +0 -150
  350. package/src/index.js +0 -89
  351. package/src/node-pool/index.js +0 -172
  352. package/src/node.js +0 -116
  353. package/src/tx/builder/field-types.js +0 -61
  354. package/src/tx/builder/helpers.js +0 -334
  355. package/src/tx/builder/index.js +0 -465
  356. package/src/tx/builder/schema.js +0 -1100
  357. package/src/tx/index.js +0 -301
  358. package/src/tx/tx-object.js +0 -187
  359. package/src/tx/tx.js +0 -631
  360. package/src/tx/validator.js +0 -181
  361. package/src/utils/aepp-wallet-communication/connection/browser-runtime.js +0 -119
  362. package/src/utils/aepp-wallet-communication/connection/browser-window-message.js +0 -165
  363. package/src/utils/aepp-wallet-communication/connection/index.js +0 -85
  364. package/src/utils/aepp-wallet-communication/content-script-bridge.js +0 -86
  365. package/src/utils/aepp-wallet-communication/helpers.js +0 -60
  366. package/src/utils/aepp-wallet-communication/rpc/aepp-rpc.js +0 -294
  367. package/src/utils/aepp-wallet-communication/rpc/rpc-client.js +0 -232
  368. package/src/utils/aepp-wallet-communication/rpc/wallet-rpc.js +0 -401
  369. package/src/utils/aepp-wallet-communication/schema.ts +0 -80
  370. package/src/utils/aepp-wallet-communication/wallet-detector.js +0 -92
  371. package/src/utils/async-init.js +0 -45
  372. package/src/utils/crypto.js +0 -219
  373. package/src/utils/hd-wallet.js +0 -100
  374. package/src/utils/json-big.js +0 -26
  375. package/src/utils/keystore.js +0 -219
  376. package/src/utils/swagger.js +0 -156
@@ -0,0 +1,134 @@
1
+ import nacl from 'tweetnacl'
2
+ import { full as hmac } from 'tweetnacl-auth'
3
+ import { fromString } from 'bip32-path'
4
+ import { decryptKey, encryptKey } from './crypto'
5
+ import { encode } from './encoder'
6
+ import { CryptographyError } from './errors'
7
+ import { bytesToHex } from './bytes'
8
+ import { concatBuffers } from './other'
9
+
10
+ /**
11
+ * @category exception
12
+ */
13
+ export class DerivationError extends CryptographyError {
14
+ constructor (message: string) {
15
+ super(message)
16
+ this.name = 'DerivationError'
17
+ }
18
+ }
19
+
20
+ const ED25519_CURVE = Buffer.from('ed25519 seed')
21
+ const HARDENED_OFFSET = 0x80000000
22
+
23
+ interface KeyTreeNode {
24
+ secretKey: Uint8Array
25
+ chainCode: Uint8Array
26
+ }
27
+
28
+ interface HDWallet {
29
+ secretKey: string
30
+ chainCode: string
31
+ }
32
+
33
+ interface Account {
34
+ secretKey: string
35
+ publicKey: string
36
+ }
37
+
38
+ type Dec<N extends number> = [-1, 0, 1, 2, 3, 4][N]
39
+ type Bip32PathT<MaxLen extends number, H extends 'H' | 'h' | '\''> = MaxLen extends -1
40
+ ? `${number}${H}`
41
+ : Bip32PathT<Dec<MaxLen>, H> | `${Bip32PathT<Dec<MaxLen>, H>}/${number}${H}`
42
+ type Bip32Path<MaxLen extends number> =
43
+ '' | Bip32PathT<MaxLen, 'H'> | Bip32PathT<MaxLen, 'h'> | Bip32PathT<MaxLen, '\''>
44
+
45
+ export function derivePathFromKey (path: Bip32Path<5>, key: KeyTreeNode): KeyTreeNode {
46
+ const segments = path === '' ? [] : fromString(path).toPathArray()
47
+ segments.forEach((segment, i) => {
48
+ if (segment < HARDENED_OFFSET) {
49
+ throw new DerivationError(`Segment #${i + 1} is not hardened`)
50
+ }
51
+ })
52
+
53
+ return segments.reduce((parentKey, segment) => deriveChild(parentKey, segment), key)
54
+ }
55
+
56
+ export function derivePathFromSeed (path: 'm' | `m/${Bip32Path<5>}`, seed: Uint8Array): KeyTreeNode {
57
+ if (!['m', 'm/'].includes(path.slice(0, 2))) {
58
+ throw new DerivationError('Root element is required')
59
+ }
60
+ const masterKey = getMasterKeyFromSeed(seed)
61
+ return derivePathFromKey(path.slice(2) as Bip32Path<5>, masterKey)
62
+ }
63
+
64
+ function formatAccount (keys: nacl.SignKeyPair): Account {
65
+ const { secretKey, publicKey } = keys
66
+ return {
67
+ secretKey: bytesToHex(secretKey),
68
+ publicKey: encode(publicKey, 'ak')
69
+ }
70
+ }
71
+
72
+ export function getKeyPair (secretKey: Uint8Array): nacl.SignKeyPair {
73
+ return nacl.sign.keyPair.fromSeed(secretKey)
74
+ }
75
+
76
+ export function getMasterKeyFromSeed (seed: Uint8Array): KeyTreeNode {
77
+ const I = hmac(seed, ED25519_CURVE)
78
+ const IL = I.slice(0, 32)
79
+ const IR = I.slice(32)
80
+ return {
81
+ secretKey: IL,
82
+ chainCode: IR
83
+ }
84
+ }
85
+
86
+ export function deriveChild ({ secretKey, chainCode }: KeyTreeNode, index: number): KeyTreeNode {
87
+ if (index < HARDENED_OFFSET) {
88
+ throw new DerivationError(`Segment ${index} is not hardened`)
89
+ }
90
+ const indexBuffer = Buffer.allocUnsafe(4)
91
+ indexBuffer.writeUInt32BE(index, 0)
92
+
93
+ const data = concatBuffers([Buffer.alloc(1, 0), secretKey, indexBuffer])
94
+
95
+ const I = hmac(data, chainCode)
96
+ const IL = I.slice(0, 32)
97
+ const IR = I.slice(32)
98
+ return {
99
+ secretKey: IL,
100
+ chainCode: IR
101
+ }
102
+ }
103
+
104
+ export function generateSaveHDWalletFromSeed (seed: Uint8Array, password: string): HDWallet {
105
+ const walletKey = derivePathFromSeed('m/44h/457h', seed)
106
+ return {
107
+ secretKey: bytesToHex(encryptKey(password, walletKey.secretKey)),
108
+ chainCode: bytesToHex(encryptKey(password, walletKey.chainCode))
109
+ }
110
+ }
111
+
112
+ export function getSaveHDWalletAccounts (
113
+ saveHDWallet: HDWallet, password: string, accountCount: number
114
+ ): Account[] {
115
+ const walletKey = {
116
+ secretKey: decryptKey(password, Buffer.from(saveHDWallet.secretKey, 'hex')),
117
+ chainCode: decryptKey(password, Buffer.from(saveHDWallet.chainCode, 'hex'))
118
+ }
119
+ return (new Array(accountCount)).fill(undefined)
120
+ .map((_, idx) =>
121
+ formatAccount(getKeyPair(derivePathFromKey(`${idx}h/0h/0h`, walletKey).secretKey)))
122
+ }
123
+
124
+ export const getHdWalletAccountFromSeed = (
125
+ seed: Uint8Array, accountIdx: number
126
+ ): Account & { idx: number } => {
127
+ const walletKey = derivePathFromSeed('m/44h/457h', seed)
128
+ const derived = derivePathFromKey(`${accountIdx}h/0h/0h`, walletKey)
129
+ const keyPair = getKeyPair(derived.secretKey)
130
+ return {
131
+ ...formatAccount(keyPair),
132
+ idx: accountIdx
133
+ }
134
+ }
@@ -0,0 +1,26 @@
1
+ import JsonBig from 'json-bigint'
2
+ import BigNumber from 'bignumber.js'
3
+ import { mapObject } from './other'
4
+
5
+ const jsonBig = JsonBig({ storeAsString: true })
6
+
7
+ const convertValuesToBigNumbers = (value: any): any => {
8
+ if (typeof value === 'object' && value !== null && value.constructor === Object) {
9
+ return mapObject(value, ([key, value]) => [key, convertValuesToBigNumbers(value)])
10
+ }
11
+ if (Array.isArray(value)) {
12
+ return value.map(item => convertValuesToBigNumbers(item))
13
+ }
14
+ if (typeof value === 'string' && new BigNumber(value).toString(10) === value) {
15
+ const bn = new BigNumber(value)
16
+ bn.toJSON = () => bn.toString(10)
17
+ return bn
18
+ }
19
+ return value
20
+ }
21
+
22
+ export default {
23
+ stringify: (...args: Parameters<typeof JsonBig['stringify']>): string =>
24
+ jsonBig.stringify(convertValuesToBigNumbers(args[0]), ...args.slice(1)),
25
+ parse: jsonBig.parse
26
+ }
@@ -0,0 +1,179 @@
1
+ import nacl from 'tweetnacl'
2
+ import { v4 as uuid } from '@aeternity/uuid'
3
+ import { ArgonType, hash } from '@aeternity/argon2-browser/dist/argon2-bundled.min.js'
4
+ import { getAddressFromPriv } from './crypto'
5
+ import { bytesToHex, hexToBytes } from './bytes'
6
+ import { InvalidPasswordError } from './errors'
7
+
8
+ const DERIVED_KEY_FUNCTIONS = {
9
+ async argon2id (
10
+ pass: string | Uint8Array,
11
+ salt: string | Uint8Array,
12
+ params: Partial<Keystore['crypto']['kdf_params']>
13
+ ): Promise<Uint8Array> {
14
+ const { memlimit_kib: mem, opslimit: time } = params
15
+
16
+ return (await hash({
17
+ hashLen: 32,
18
+ pass,
19
+ salt,
20
+ time,
21
+ mem,
22
+ type: ArgonType.Argon2id
23
+ })).hash
24
+ }
25
+ }
26
+
27
+ const CRYPTO_FUNCTIONS = {
28
+ 'xsalsa20-poly1305': {
29
+ encrypt: nacl.secretbox,
30
+ decrypt (...args: Parameters<typeof nacl.secretbox.open>): Uint8Array {
31
+ const res = nacl.secretbox.open(...args)
32
+ if (res == null) throw new InvalidPasswordError()
33
+ return res
34
+ }
35
+ }
36
+ }
37
+
38
+ export interface Keystore {
39
+ name: string
40
+ version: 1
41
+ public_key: string
42
+ id: string
43
+ crypto: {
44
+ secret_type: 'ed25519'
45
+ symmetric_alg: keyof typeof CRYPTO_FUNCTIONS
46
+ ciphertext: string
47
+ cipher_params: {
48
+ nonce: string
49
+ }
50
+ kdf: keyof typeof DERIVED_KEY_FUNCTIONS
51
+ kdf_params: {
52
+ memlimit_kib: number
53
+ opslimit: number
54
+ parallelism: number
55
+ salt: string
56
+ }
57
+ }
58
+ }
59
+
60
+ const CRYPTO_DEFAULTS = {
61
+ secret_type: 'ed25519',
62
+ symmetric_alg: 'xsalsa20-poly1305',
63
+ kdf: 'argon2id',
64
+ kdf_params: {
65
+ memlimit_kib: 65536,
66
+ opslimit: 3,
67
+ parallelism: 1
68
+ }
69
+ } as const
70
+
71
+ /**
72
+ * Symmetric private key encryption using secret (derived) key.
73
+ * @param plaintext - Data to be encrypted.
74
+ * @param key - Secret key.
75
+ * @param nonce - Randomly generated nonce.
76
+ * @param algo - Encryption algorithm.
77
+ * @returns Encrypted data.
78
+ */
79
+ function encrypt (
80
+ plaintext: Uint8Array,
81
+ key: Uint8Array,
82
+ nonce: Uint8Array,
83
+ algo: keyof typeof CRYPTO_FUNCTIONS = CRYPTO_DEFAULTS.symmetric_alg
84
+ ): Uint8Array {
85
+ return CRYPTO_FUNCTIONS[algo].encrypt(plaintext, nonce, key)
86
+ }
87
+
88
+ /**
89
+ * Symmetric private key decryption using secret (derived) key.
90
+ * @param ciphertext - Data to be decrypted.
91
+ * @param key - Secret key.
92
+ * @param nonce - Nonce from key-object.
93
+ * @param algo - Encryption algorithm.
94
+ * @returns Decrypted data.
95
+ */
96
+ function decrypt (
97
+ ciphertext: Uint8Array,
98
+ key: Uint8Array,
99
+ nonce: Uint8Array,
100
+ algo: keyof typeof CRYPTO_FUNCTIONS = CRYPTO_DEFAULTS.symmetric_alg
101
+ ): Uint8Array {
102
+ return CRYPTO_FUNCTIONS[algo].decrypt(ciphertext, nonce, key)
103
+ }
104
+
105
+ /**
106
+ * Derive secret key from password with key derivation function.
107
+ * @param password - User-supplied password.
108
+ * @param nonce - Randomly generated nonce.
109
+ * @param kdf - Key derivation function.
110
+ * @param kdfParams - KDF parameters.
111
+ * @returns Secret key derived from password.
112
+ */
113
+ async function deriveKey (
114
+ password: string | Uint8Array,
115
+ nonce: string | Uint8Array,
116
+ kdf: Keystore['crypto']['kdf'],
117
+ kdfParams: Omit<Keystore['crypto']['kdf_params'], 'salt'>
118
+ ): Promise<Uint8Array> {
119
+ return await DERIVED_KEY_FUNCTIONS[kdf](password, nonce, kdfParams)
120
+ }
121
+
122
+ /**
123
+ * Recover plaintext private key from secret-storage key object.
124
+ * @param password - Keystore object password.
125
+ * @param keystore - Keystore object.
126
+ * @returns Plaintext private key.
127
+ */
128
+ export async function recover (
129
+ password: string | Uint8Array, { crypto }: Keystore
130
+ ): Promise<string> {
131
+ const salt = hexToBytes(crypto.kdf_params.salt)
132
+ return bytesToHex(decrypt(
133
+ hexToBytes(crypto.ciphertext),
134
+ await deriveKey(password, salt, crypto.kdf, crypto.kdf_params),
135
+ hexToBytes(crypto.cipher_params.nonce),
136
+ crypto.symmetric_alg
137
+ ))
138
+ }
139
+
140
+ /**
141
+ * Export private key to keystore secret-storage format.
142
+ * @param name - Key name.
143
+ * @param password - User-supplied password.
144
+ * @param privateKey - Private key as hex-string or a Buffer.
145
+ * @param nonce - Randomly generated 24byte nonce.
146
+ * @param salt - Randomly generated 16byte salt.
147
+ * @param options - Encryption parameters.
148
+ * @param options.kdf - Key derivation function.
149
+ * @param options.kdf_params - KDF parameters.
150
+ */
151
+ export async function dump (
152
+ name: string,
153
+ password: string | Uint8Array,
154
+ privateKey: string | Uint8Array,
155
+ nonce: Uint8Array = nacl.randomBytes(24),
156
+ salt: Uint8Array = nacl.randomBytes(16),
157
+ options?: Partial<Keystore['crypto']>
158
+ ): Promise<Keystore> {
159
+ const opt = { ...CRYPTO_DEFAULTS, ...options }
160
+ const derivedKey = await deriveKey(password, salt, opt.kdf, opt.kdf_params)
161
+ const payload = typeof privateKey === 'string' ? hexToBytes(privateKey) : privateKey
162
+ return {
163
+ name,
164
+ version: 1,
165
+ public_key: getAddressFromPriv(payload),
166
+ id: uuid(),
167
+ crypto: {
168
+ secret_type: opt.secret_type,
169
+ symmetric_alg: opt.symmetric_alg,
170
+ ciphertext: bytesToHex(encrypt(payload, derivedKey, nonce, opt.symmetric_alg)),
171
+ cipher_params: { nonce: bytesToHex(nonce) },
172
+ kdf: opt.kdf,
173
+ kdf_params: {
174
+ ...opt.kdf_params,
175
+ salt: bytesToHex(salt)
176
+ }
177
+ }
178
+ }
179
+ }
@@ -17,7 +17,7 @@
17
17
 
18
18
  import { encode as rlpEncode } from 'rlp'
19
19
  import type { Input } from 'rlp'
20
- import { hash } from './crypto-ts'
20
+ import { hash } from './crypto'
21
21
  import {
22
22
  MerkleTreeHashMismatchError,
23
23
  MissingNodeInTreeError,
@@ -43,9 +43,8 @@ export default class MPTree {
43
43
 
44
44
  /**
45
45
  * Deserialize Merkle Patricia Tree
46
- * @rtype (binary: Array) => MPTree
47
- * @param {Array} binary - Binary
48
- * @return {MPTree} Merkle Patricia Tree
46
+ * @param binary - Binary
47
+ * @returns Merkle Patricia Tree
49
48
  */
50
49
  constructor (binary: MPTreeBinary) {
51
50
  this.rootHash = binary[0].toString('hex')
@@ -80,17 +79,20 @@ export default class MPTree {
80
79
  return this.rootHash === tree.rootHash
81
80
  }
82
81
 
83
- private static parseNode (node: Buffer[]): { type: NodeType, payload: Buffer[], path: string | null } {
82
+ private static parseNode (node: Buffer[]): {
83
+ type: NodeType
84
+ payload: Buffer[]
85
+ path: string | null
86
+ } {
84
87
  switch (node.length) {
85
88
  case 17:
86
89
  return { type: NodeType.Branch, payload: node, path: null }
87
90
  case 2: {
88
- const path = node[0].toString('hex')
89
- const nibble = parseInt(path[0], 16)
91
+ const nibble = node[0][0] >> 4
90
92
  if (nibble > 3) throw new UnknownPathNibbleError(nibble)
91
93
  const type = nibble <= 1 ? NodeType.Extension : NodeType.Leaf
92
94
  const slice = [0, 2].includes(nibble) ? 2 : 1
93
- return { type, payload: [node[1]], path: path.slice(slice) }
95
+ return { type, payload: [node[1]], path: node[0].toString('hex').slice(slice) }
94
96
  }
95
97
  default:
96
98
  throw new UnknownNodeLengthError(node.length)
@@ -99,8 +101,7 @@ export default class MPTree {
99
101
 
100
102
  /**
101
103
  * Serialize Merkle Patricia Tree
102
- * @rtype () => Array
103
- * @return {Array} Binary
104
+ * @returns Binary
104
105
  */
105
106
  serialize (): MPTreeBinary {
106
107
  return [
@@ -114,9 +115,8 @@ export default class MPTree {
114
115
 
115
116
  /**
116
117
  * Retrieve value from Merkle Patricia Tree
117
- * @rtype (key: String) => Buffer
118
- * @param {String} key - The key of the element to retrieve
119
- * @return {Buffer} Value associated to the specified key
118
+ * @param key - The key of the element to retrieve
119
+ * @returns Value associated to the specified key
120
120
  */
121
121
  get (key: string): Buffer | undefined {
122
122
  let searchFrom = this.rootHash
@@ -125,7 +125,7 @@ export default class MPTree {
125
125
  switch (type) {
126
126
  case NodeType.Branch:
127
127
  if (key.length === 0) return payload[16]
128
- searchFrom = payload[parseInt(key[0], 16)].toString('hex')
128
+ searchFrom = payload[+`0x${key[0]}`].toString('hex')
129
129
  key = key.substr(1)
130
130
  break
131
131
  case NodeType.Extension:
@@ -1,51 +1,36 @@
1
- import { snakeToPascal, pascalToSnake } from './string'
2
-
3
1
  export const pause = async (duration: number): Promise<void> =>
4
2
  await new Promise(resolve => setTimeout(resolve, duration))
5
3
 
6
- export const mapObject = (
7
- object: object,
8
- fn: (value: [string, any], index: number, array: Array<[string, any]>) => Array<[string, any]>
9
- ): object => Object.fromEntries(Object.entries(object).map(fn))
10
-
11
- export const filterObject = (
12
- object: object,
13
- fn: (value: [string, any], index: number, array: Array<[string, any]>) => boolean
14
- ): object => Object.fromEntries(Object.entries(object).filter(fn))
4
+ export const mapObject = <InputV, OutputV>(
5
+ object: { [k: string]: InputV },
6
+ fn: (
7
+ value: [string, InputV], index: number, array: Array<[string, InputV]>
8
+ ) => [number | string, OutputV]
9
+ ): { [k: string]: OutputV } => Object.fromEntries(Object.entries(object).map(fn))
15
10
 
16
- /**
17
- * Key traversal metafunction
18
- * @static
19
- * @function
20
- * @rtype (fn: (s: String) => String) => (o: Object) => Object
21
- * @param {Function} fn - Key transformation function
22
- * @param {Object} object - Object to traverse
23
- * @return {Object} Transformed object
24
- */
25
- export const traverseKeys = (fn: Function, object: any): any => {
26
- if (typeof object !== 'object' || object === null) return object
27
- if (Array.isArray(object)) return object.map(i => traverseKeys(fn, i))
28
- return mapObject(object, ([key, value]: [string, any]) => [
29
- fn(key), traverseKeys(fn, value)
30
- ])
31
- }
11
+ // remove after dropping webpack4 support
12
+ const isWebpack4Buffer = (() => {
13
+ try {
14
+ Buffer.concat([Uint8Array.from([])])
15
+ return false
16
+ } catch (error) {
17
+ return true
18
+ }
19
+ })()
32
20
 
33
- /**
34
- * snake_case key traversal
35
- * @static
36
- * @rtype (o: Object) => Object
37
- * @param {Object} object - Object to traverse
38
- * @return {Object} Transformed object
39
- * @see pascalToSnake
40
- */
41
- export const snakizeKeys = traverseKeys.bind(null, pascalToSnake)
21
+ export const concatBuffers = isWebpack4Buffer
22
+ ? (list: readonly Uint8Array[], totalLength?: number): Buffer =>
23
+ Buffer.concat(list.map(el => Buffer.from(el)), totalLength)
24
+ : Buffer.concat
42
25
 
43
26
  /**
44
- * PascalCase key traversal
45
- * @static
46
- * @rtype (o: Object) => Object
47
- * @param {Object} object - Object to traverse
48
- * @return {Object} Transformed object
49
- * @see snakeToPascal
27
+ * Object key type guard
28
+ * @param key - Object key
29
+ * @param object - object
50
30
  */
51
- export const pascalizeKeys = traverseKeys.bind(null, snakeToPascal)
31
+ export function isKeyOfObject<T> (
32
+ key: string | number | symbol,
33
+ object: T
34
+ ): key is keyof T {
35
+ return key in object
36
+ }
@@ -17,9 +17,8 @@
17
17
 
18
18
  /**
19
19
  * Convert string from snake_case to PascalCase
20
- * @rtype (s: String) => String
21
- * @param {String} s - String to convert
22
- * @return {String} Converted string
20
+ * @param s - String to convert
21
+ * @returns Converted string
23
22
  */
24
23
  export function snakeToPascal (s: string): string {
25
24
  return s.replace(/_./g, match => match[1].toUpperCase())
@@ -27,9 +26,8 @@ export function snakeToPascal (s: string): string {
27
26
 
28
27
  /**
29
28
  * Convert string from PascalCase to snake_case
30
- * @rtype (s: String) => String
31
- * @param {String} s - String to convert
32
- * @return {String} Converted string
29
+ * @param s - String to convert
30
+ * @returns Converted string
33
31
  */
34
32
  export function pascalToSnake (s: string): string {
35
33
  return s.replace(/[A-Z]/g, match => `_${match.toLowerCase()}`)
@@ -37,8 +35,8 @@ export function pascalToSnake (s: string): string {
37
35
 
38
36
  /**
39
37
  * Check whether a string is valid hex.
40
- * @param {string} str String to validate.
41
- * @return {boolean} True if the string is valid hex, false otherwise.
38
+ * @param str - String to validate.
39
+ * @returns True if the string is valid hex, false otherwise.
42
40
  */
43
41
  export function isHex (str: string): boolean {
44
42
  return str.length % 2 === 0 && /^[0-9a-f]+$/i.test(str)
@@ -46,8 +44,8 @@ export function isHex (str: string): boolean {
46
44
 
47
45
  /**
48
46
  * Check whether a string is valid base-64.
49
- * @param {string} str String to validate.
50
- * @return {boolean} True if the string is valid base-64, false otherwise.
47
+ * @param str - String to validate.
48
+ * @returns True if the string is valid base-64, false otherwise.
51
49
  */
52
50
  export function isBase64 (str: string): boolean {
53
51
  if (str.length % 4 > 0 || /[^0-9a-z+/=]/i.test(str)) return false