@aeternity/aepp-sdk 10.0.0-beta.1 → 11.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (250) hide show
  1. package/README.md +15 -14
  2. package/dist/aepp-sdk.browser-script.js +1 -1
  3. package/dist/aepp-sdk.browser-script.js.LICENSE.txt +7 -27
  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/account/{base.js → base.mjs} +23 -11
  10. package/es/account/base.mjs.map +1 -0
  11. package/es/account/{memory.js → memory.mjs} +29 -14
  12. package/es/account/memory.mjs.map +1 -0
  13. package/es/account/{multiple.js → multiple.mjs} +14 -11
  14. package/es/account/multiple.mjs.map +1 -0
  15. package/es/ae/{aens.js → aens.mjs} +69 -59
  16. package/es/ae/aens.mjs.map +1 -0
  17. package/es/ae/{aepp.js → aepp.mjs} +9 -9
  18. package/es/ae/aepp.mjs.map +1 -0
  19. package/es/ae/contract.mjs +159 -0
  20. package/es/ae/contract.mjs.map +1 -0
  21. package/es/ae/{index.js → index.mjs} +12 -10
  22. package/es/ae/index.mjs.map +1 -0
  23. package/es/ae/{oracle.js → oracle.mjs} +37 -20
  24. package/es/ae/oracle.mjs.map +1 -0
  25. package/es/ae/{universal.js → universal.mjs} +10 -10
  26. package/es/ae/universal.mjs.map +1 -0
  27. package/es/ae/{wallet.js → wallet.mjs} +10 -10
  28. package/es/ae/wallet.mjs.map +1 -0
  29. package/es/aepp-wallet-communication/schema.d.ts +74 -0
  30. package/es/bignumber.d.ts +1 -7
  31. package/es/chain/{index.js → index.mjs} +28 -8
  32. package/es/chain/index.mjs.map +1 -0
  33. package/es/chain/{node.js → node.mjs} +133 -90
  34. package/es/chain/node.mjs.map +1 -0
  35. package/es/channel/{handlers.js → handlers.mjs} +18 -20
  36. package/es/channel/handlers.mjs.map +1 -0
  37. package/es/channel/{index.js → index.mjs} +43 -22
  38. package/es/channel/index.mjs.map +1 -0
  39. package/es/channel/{internal.js → internal.mjs} +51 -35
  40. package/es/channel/internal.mjs.map +1 -0
  41. package/es/contract/aci.mjs +477 -0
  42. package/es/contract/aci.mjs.map +1 -0
  43. package/es/contract/compiler.mjs +115 -0
  44. package/es/contract/compiler.mjs.map +1 -0
  45. package/es/contract/ga/helpers.mjs +30 -0
  46. package/es/contract/ga/helpers.mjs.map +1 -0
  47. package/es/contract/ga/{index.js → index.mjs} +40 -28
  48. package/es/contract/ga/index.mjs.map +1 -0
  49. package/es/encoder.d.ts +26 -0
  50. package/es/errors.d.ts +284 -0
  51. package/es/index.mjs +57 -0
  52. package/es/index.mjs.map +1 -0
  53. package/es/node-pool/{index.js → index.mjs} +15 -12
  54. package/es/node-pool/index.mjs.map +1 -0
  55. package/es/{node.js → node.mjs} +17 -11
  56. package/es/node.mjs.map +1 -0
  57. package/es/tx/builder/constants.mjs +108 -0
  58. package/es/tx/builder/constants.mjs.map +1 -0
  59. package/es/tx/builder/field-types.mjs +74 -0
  60. package/es/tx/builder/field-types.mjs.map +1 -0
  61. package/es/tx/builder/helpers.mjs +321 -0
  62. package/es/tx/builder/helpers.mjs.map +1 -0
  63. package/es/tx/builder/{index.js → index.mjs} +92 -74
  64. package/es/tx/builder/index.mjs.map +1 -0
  65. package/es/tx/builder/{schema.js → schema.mjs} +16 -172
  66. package/es/tx/builder/schema.mjs.map +1 -0
  67. package/es/tx/{index.js → index.mjs} +106 -14
  68. package/es/tx/index.mjs.map +1 -0
  69. package/es/tx/{tx-object.js → tx-object.mjs} +31 -18
  70. package/es/tx/tx-object.mjs.map +1 -0
  71. package/es/tx/{tx.js → tx.mjs} +15 -14
  72. package/es/tx/tx.mjs.map +1 -0
  73. package/es/tx/{validator.js → validator.mjs} +72 -33
  74. package/es/tx/validator.mjs.map +1 -0
  75. package/es/typings/blakejs/index.d.mjs +2 -0
  76. package/es/typings/blakejs/{index.d.js.map → index.d.mjs.map} +1 -1
  77. package/es/utils/aepp-wallet-communication/connection/{browser-runtime.js → browser-runtime.mjs} +10 -8
  78. package/es/utils/aepp-wallet-communication/connection/browser-runtime.mjs.map +1 -0
  79. package/es/utils/aepp-wallet-communication/connection/{browser-window-message.js → browser-window-message.mjs} +25 -17
  80. package/es/utils/aepp-wallet-communication/connection/browser-window-message.mjs.map +1 -0
  81. package/es/utils/aepp-wallet-communication/connection/{index.js → index.mjs} +7 -3
  82. package/es/utils/aepp-wallet-communication/connection/index.mjs.map +1 -0
  83. package/es/utils/aepp-wallet-communication/{content-script-bridge.js → content-script-bridge.mjs} +15 -8
  84. package/es/utils/aepp-wallet-communication/content-script-bridge.mjs.map +1 -0
  85. package/es/utils/aepp-wallet-communication/{helpers.js → helpers.mjs} +3 -14
  86. package/es/utils/aepp-wallet-communication/helpers.mjs.map +1 -0
  87. package/es/utils/aepp-wallet-communication/rpc/{aepp-rpc.js → aepp-rpc.mjs} +126 -72
  88. package/es/utils/aepp-wallet-communication/rpc/aepp-rpc.mjs.map +1 -0
  89. package/es/utils/aepp-wallet-communication/rpc/{rpc-client.js → rpc-client.mjs} +23 -14
  90. package/es/utils/aepp-wallet-communication/rpc/rpc-client.mjs.map +1 -0
  91. package/es/utils/aepp-wallet-communication/rpc/{wallet-rpc.js → wallet-rpc.mjs} +116 -91
  92. package/es/utils/aepp-wallet-communication/rpc/wallet-rpc.mjs.map +1 -0
  93. package/es/utils/aepp-wallet-communication/schema.mjs +102 -0
  94. package/es/utils/aepp-wallet-communication/schema.mjs.map +1 -0
  95. package/es/utils/aepp-wallet-communication/{wallet-detector.js → wallet-detector.mjs} +6 -5
  96. package/es/utils/aepp-wallet-communication/wallet-detector.mjs.map +1 -0
  97. package/es/utils/{amount-formatter.js → amount-formatter.mjs} +14 -7
  98. package/es/utils/amount-formatter.mjs.map +1 -0
  99. package/es/utils/{async-init.js → async-init.mjs} +8 -11
  100. package/es/utils/async-init.mjs.map +1 -0
  101. package/es/utils/{bignumber.js → bignumber.mjs} +2 -9
  102. package/es/utils/bignumber.mjs.map +1 -0
  103. package/es/utils/{bytes.js → bytes.mjs} +16 -8
  104. package/es/utils/bytes.mjs.map +1 -0
  105. package/es/utils/{crypto-ts.js → crypto-ts.mjs} +11 -3
  106. package/es/utils/crypto-ts.mjs.map +1 -0
  107. package/es/utils/{crypto.js → crypto.mjs} +42 -156
  108. package/es/utils/crypto.mjs.map +1 -0
  109. package/es/utils/encoder.mjs +106 -0
  110. package/es/utils/encoder.mjs.map +1 -0
  111. package/es/utils/errors.mjs +689 -0
  112. package/es/utils/errors.mjs.map +1 -0
  113. package/es/utils/{hd-wallet.js → hd-wallet.mjs} +33 -34
  114. package/es/utils/hd-wallet.mjs.map +1 -0
  115. package/es/utils/{json-big.js → json-big.mjs} +1 -1
  116. package/es/utils/{json-big.js.map → json-big.mjs.map} +1 -1
  117. package/es/utils/{keystore.js → keystore.mjs} +63 -51
  118. package/es/utils/keystore.mjs.map +1 -0
  119. package/es/utils/{mptree.js → mptree.mjs} +21 -12
  120. package/es/utils/mptree.mjs.map +1 -0
  121. package/es/utils/{other.js → other.mjs} +2 -2
  122. package/es/utils/other.mjs.map +1 -0
  123. package/es/utils/{semver-satisfies.js → semver-satisfies.mjs} +1 -1
  124. package/es/utils/{semver-satisfies.js.map → semver-satisfies.mjs.map} +1 -1
  125. package/es/utils/{string.js → string.mjs} +1 -1
  126. package/es/utils/{string.js.map → string.mjs.map} +1 -1
  127. package/es/utils/{swagger.js → swagger.mjs} +49 -15
  128. package/es/utils/swagger.mjs.map +1 -0
  129. package/package.json +49 -58
  130. package/src/account/base.js +3 -1
  131. package/src/account/memory.js +13 -8
  132. package/src/account/multiple.js +16 -6
  133. package/src/ae/aens.js +52 -58
  134. package/src/ae/aepp.js +2 -2
  135. package/src/ae/contract.js +21 -154
  136. package/src/ae/index.js +6 -4
  137. package/src/ae/oracle.js +33 -14
  138. package/src/ae/universal.js +4 -2
  139. package/src/ae/wallet.js +2 -2
  140. package/src/chain/index.js +29 -6
  141. package/src/chain/node.js +95 -65
  142. package/src/channel/handlers.js +30 -20
  143. package/src/channel/index.js +46 -16
  144. package/src/channel/internal.js +35 -30
  145. package/src/contract/aci.js +376 -0
  146. package/src/contract/compiler.js +22 -113
  147. package/src/contract/ga/helpers.js +10 -6
  148. package/src/contract/ga/index.js +31 -24
  149. package/src/index.js +9 -8
  150. package/src/node-pool/index.js +13 -10
  151. package/src/node.js +11 -10
  152. package/src/tx/builder/constants.js +100 -0
  153. package/src/tx/builder/field-types.js +61 -0
  154. package/src/tx/builder/helpers.js +99 -103
  155. package/src/tx/builder/index.js +81 -40
  156. package/src/tx/builder/schema.js +44 -132
  157. package/src/tx/index.js +101 -12
  158. package/src/tx/tx-object.js +35 -15
  159. package/src/tx/tx.js +110 -35
  160. package/src/tx/validator.js +25 -5
  161. package/src/utils/aepp-wallet-communication/connection/browser-runtime.js +11 -5
  162. package/src/utils/aepp-wallet-communication/connection/browser-window-message.js +35 -13
  163. package/src/utils/aepp-wallet-communication/connection/index.js +2 -1
  164. package/src/utils/aepp-wallet-communication/content-script-bridge.js +14 -7
  165. package/src/utils/aepp-wallet-communication/helpers.js +6 -14
  166. package/src/utils/aepp-wallet-communication/rpc/aepp-rpc.js +106 -57
  167. package/src/utils/aepp-wallet-communication/rpc/rpc-client.js +24 -11
  168. package/src/utils/aepp-wallet-communication/rpc/wallet-rpc.js +95 -53
  169. package/src/utils/aepp-wallet-communication/schema.ts +80 -0
  170. package/src/utils/aepp-wallet-communication/wallet-detector.js +6 -2
  171. package/src/utils/amount-formatter.ts +4 -3
  172. package/src/utils/async-init.js +10 -6
  173. package/src/utils/bignumber.ts +1 -9
  174. package/src/utils/bytes.ts +3 -2
  175. package/src/utils/crypto-ts.ts +2 -2
  176. package/src/utils/crypto.js +11 -155
  177. package/src/utils/encoder.ts +101 -0
  178. package/src/utils/errors.ts +683 -0
  179. package/src/utils/hd-wallet.js +11 -26
  180. package/src/utils/keystore.js +57 -53
  181. package/src/utils/mptree.ts +12 -6
  182. package/src/utils/swagger.js +68 -45
  183. package/es/account/base.js.map +0 -1
  184. package/es/account/memory.js.map +0 -1
  185. package/es/account/multiple.js.map +0 -1
  186. package/es/ae/aens.js.map +0 -1
  187. package/es/ae/aepp.js.map +0 -1
  188. package/es/ae/contract.js +0 -308
  189. package/es/ae/contract.js.map +0 -1
  190. package/es/ae/index.js.map +0 -1
  191. package/es/ae/oracle.js.map +0 -1
  192. package/es/ae/universal.js.map +0 -1
  193. package/es/ae/wallet.js.map +0 -1
  194. package/es/chain/index.js.map +0 -1
  195. package/es/chain/node.js.map +0 -1
  196. package/es/channel/handlers.js.map +0 -1
  197. package/es/channel/index.js.map +0 -1
  198. package/es/channel/internal.js.map +0 -1
  199. package/es/contract/aci/helpers.js +0 -298
  200. package/es/contract/aci/helpers.js.map +0 -1
  201. package/es/contract/aci/index.js +0 -356
  202. package/es/contract/aci/index.js.map +0 -1
  203. package/es/contract/aci/transformation.js +0 -66
  204. package/es/contract/aci/transformation.js.map +0 -1
  205. package/es/contract/compiler.js +0 -242
  206. package/es/contract/compiler.js.map +0 -1
  207. package/es/contract/ga/helpers.js +0 -22
  208. package/es/contract/ga/helpers.js.map +0 -1
  209. package/es/contract/ga/index.js.map +0 -1
  210. package/es/contract/index.js +0 -158
  211. package/es/contract/index.js.map +0 -1
  212. package/es/index.js +0 -56
  213. package/es/index.js.map +0 -1
  214. package/es/node-pool/index.js.map +0 -1
  215. package/es/node.js.map +0 -1
  216. package/es/tx/builder/helpers.js +0 -318
  217. package/es/tx/builder/helpers.js.map +0 -1
  218. package/es/tx/builder/index.js.map +0 -1
  219. package/es/tx/builder/schema.js.map +0 -1
  220. package/es/tx/index.js.map +0 -1
  221. package/es/tx/tx-object.js.map +0 -1
  222. package/es/tx/tx.js.map +0 -1
  223. package/es/tx/validator.js.map +0 -1
  224. package/es/typings/blakejs/index.d.js +0 -2
  225. package/es/utils/aepp-wallet-communication/connection/browser-runtime.js.map +0 -1
  226. package/es/utils/aepp-wallet-communication/connection/browser-window-message.js.map +0 -1
  227. package/es/utils/aepp-wallet-communication/connection/index.js.map +0 -1
  228. package/es/utils/aepp-wallet-communication/content-script-bridge.js.map +0 -1
  229. package/es/utils/aepp-wallet-communication/helpers.js.map +0 -1
  230. package/es/utils/aepp-wallet-communication/rpc/aepp-rpc.js.map +0 -1
  231. package/es/utils/aepp-wallet-communication/rpc/rpc-client.js.map +0 -1
  232. package/es/utils/aepp-wallet-communication/rpc/wallet-rpc.js.map +0 -1
  233. package/es/utils/aepp-wallet-communication/schema.js +0 -107
  234. package/es/utils/aepp-wallet-communication/schema.js.map +0 -1
  235. package/es/utils/aepp-wallet-communication/wallet-detector.js.map +0 -1
  236. package/es/utils/amount-formatter.js.map +0 -1
  237. package/es/utils/async-init.js.map +0 -1
  238. package/es/utils/bignumber.js.map +0 -1
  239. package/es/utils/bytes.js.map +0 -1
  240. package/es/utils/crypto-ts.js.map +0 -1
  241. package/es/utils/crypto.js.map +0 -1
  242. package/es/utils/hd-wallet.js.map +0 -1
  243. package/es/utils/keystore.js.map +0 -1
  244. package/es/utils/mptree.js.map +0 -1
  245. package/es/utils/other.js.map +0 -1
  246. package/es/utils/swagger.js.map +0 -1
  247. package/src/contract/aci/index.js +0 -310
  248. package/src/contract/aci/transformation.js +0 -72
  249. package/src/contract/index.js +0 -159
  250. package/src/utils/aepp-wallet-communication/schema.js +0 -108
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/errors.ts"],"names":["BaseError","Error","constructor","message","name","AccountError","AensError","AeppError","ChannelError","CompilerError","ContractError","CryptographyError","NodeError","TransactionError","WalletError","ArgumentError","argumentName","requirement","argumentValue","IllegalArgumentError","ArgumentCountMismatchError","functionName","requiredCount","providedCount","InsufficientBalanceError","InvalidDenominationError","InvalidNameError","MissingParamError","NoBrowserFoundError","NoSerializerFoundError","RequestTimedOutError","requestTime","currentHeight","height","undefined","TxTimedOutError","blocks","th","status","join","TypeError","UnsupportedPlatformError","UnsupportedProtocolError","NotImplementedError","UnsupportedVersionError","dependency","version","geVersion","ltVersion","InternalError","InvalidKeypairError","UnavailableAccountError","address","AensPointerContextError","nameOrId","prefix","InsufficientNameFeeError","nameFee","minNameFee","InvalidAensNameError","DuplicateCallbackError","InvalidRpcMessageError","MissingCallbackError","id","UnAuthorizedAccountError","onAccount","UnknownRpcClientError","UnsubscribedAccountError","ChannelCallError","ChannelConnectionError","ChannelPingTimedOutError","UnexpectedChannelMessageError","UnknownChannelStateError","InvalidAuthDataError","BytecodeMismatchError","source","DuplicateContractError","InactiveContractError","contractAddress","InvalidMethodInvocationError","MissingContractAddressError","MissingContractDefError","MissingFunctionNameError","NodeInvocationError","NoSuchContractFunctionError","NotPayableFunctionError","amount","fn","MissingEventDefinitionError","eventNameHash","eventAddress","AmbiguousEventDefinitionError","matchedEvents","map","InvalidChecksumError","InvalidDerivationPathError","InvalidKeyError","InvalidPasswordError","MerkleTreeHashMismatchError","MissingNodeInTreeError","UnsupportedAlgorithmError","algo","NotHardenedSegmentError","UnknownNodeLengthError","nodeLength","UnknownPathNibbleError","nibble","UnsupportedChildIndexError","index","DisconnectedError","DuplicateNodeError","NodeNotFoundError","DecodeError","EncodeError","PayloadLengthError","DryRunError","IllegalBidFeeError","InvalidSignatureError","InvalidTxError","InvalidTxParamsError","NoDefaultAensPointerError","PrefixMismatchError","requiredPrefix","PrefixNotFoundError","tag","SchemaNotFoundError","TagNotFoundError","TxNotInChainError","txHash","UnknownTxError","UnsupportedABIversionError","UnsupportedVMversionError","AlreadyConnectedError","MessageDirectionError","NoWalletConnectedError","RpcConnectionError"],"mappings":"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","sourcesContent":["/**\n * Error module\n * @module @aeternity/aepp-sdk/es/utils/errors\n * @example import { BytecodeMismatchError } from '@aeternity/aepp-sdk'\n */\n\n/**\n * aepp-sdk originated error\n */\nexport abstract class BaseError extends Error {\n constructor (message: string) {\n super(message)\n this.name = 'BaseError'\n }\n}\n\nexport class AccountError extends BaseError {\n constructor (message: string) {\n super(message)\n this.name = 'AccountError'\n }\n}\n\nexport class AensError extends BaseError {\n constructor (message: string) {\n super(message)\n this.name = 'AensError'\n }\n}\n\nexport class AeppError extends BaseError {\n constructor (message: string) {\n super(message)\n this.name = 'AeppError'\n }\n}\n\nexport class ChannelError extends BaseError {\n constructor (message: string) {\n super(message)\n this.name = 'ChannelError'\n }\n}\n\nexport class CompilerError extends BaseError {\n constructor (message: string) {\n super(message)\n this.name = 'CompilerError'\n }\n}\n\nexport class ContractError extends BaseError {\n constructor (message: string) {\n super(message)\n this.name = 'ContractError'\n }\n}\n\nexport class CryptographyError extends BaseError {\n constructor (message: string) {\n super(message)\n this.name = 'CryptographyError'\n }\n}\n\nexport class NodeError extends BaseError {\n constructor (message: string) {\n super(message)\n this.name = 'NodeError'\n }\n}\n\nexport class TransactionError extends BaseError {\n constructor (message: string) {\n super(message)\n this.name = 'TransactionError'\n }\n}\n\nexport class WalletError extends BaseError {\n constructor (message: string) {\n super(message)\n this.name = 'WalletError'\n }\n}\n\n/* Common error patterns */\nexport class ArgumentError extends BaseError {\n constructor (argumentName: string, requirement: string, argumentValue: any) {\n super(`${argumentName} should be ${requirement}, got ${argumentValue} instead`)\n this.name = 'ArgumentError'\n }\n}\n\nexport class IllegalArgumentError extends CryptographyError {\n constructor (message: string) {\n super(message)\n this.name = 'IllegalArgumentError'\n }\n}\n\nexport class ArgumentCountMismatchError extends BaseError {\n constructor (functionName: string, requiredCount: number, providedCount: number) {\n super(`${functionName} expects ${requiredCount} arguments, got ${providedCount} instead`)\n this.name = 'ArgumentCountMismatchError'\n }\n}\n\nexport class InsufficientBalanceError extends BaseError {\n constructor (message: string) {\n super(message)\n this.name = 'InsufficientBalanceError'\n }\n}\n\nexport class InvalidDenominationError extends BaseError {\n constructor (message: string) {\n super(message)\n this.name = 'InvalidDenominationError'\n }\n}\n\nexport class InvalidNameError extends BaseError {\n constructor (message: string) {\n super(message)\n this.name = 'InvalidNameError'\n }\n}\n\nexport class MissingParamError extends BaseError {\n constructor (message: string) {\n super(message)\n this.name = 'MissingParamError'\n }\n}\n\nexport class NoBrowserFoundError extends BaseError {\n constructor () {\n super('Browser is not detected')\n this.name = 'NoBrowserFoundError'\n }\n}\n\nexport class NoSerializerFoundError extends BaseError {\n constructor () {\n super('Byte serialization not supported')\n this.name = 'NoSerializerFoundError'\n }\n}\n\nexport class RequestTimedOutError extends BaseError {\n constructor (requestTime: number);\n constructor (requestTime: number, currentHeight?: number, height?: number) {\n if (currentHeight !== undefined && height !== undefined) {\n super(`Giving up after ${requestTime}ms, current height: ${currentHeight}, desired height: ${height}`)\n } else {\n super(`Giving up after ${requestTime} ms`)\n }\n this.name = 'RequestTimedOutError'\n }\n}\n\nexport class TxTimedOutError extends BaseError {\n constructor (blocks: number, th: string, status?: string) {\n super([\n `Giving up after ${blocks} blocks mined`,\n `transaction hash: ${th}`,\n ...status ? [`status: ${status}`] : []\n ].join(', '))\n this.name = 'TxTimedOutError'\n }\n}\n\nexport class TypeError extends BaseError {\n constructor (message: string) {\n super(message)\n this.name = 'TypeError'\n }\n}\n\nexport class UnsupportedPlatformError extends BaseError {\n constructor (message: string) {\n super(message)\n this.name = 'UnsupportedPlatformError'\n }\n}\n\nexport class UnsupportedProtocolError extends BaseError {\n constructor (message: string) {\n super(message)\n this.name = 'UnsupportedProtocolError'\n }\n}\n\nexport class NotImplementedError extends BaseError {\n constructor (message: string) {\n super(message)\n this.name = 'NotImplementedError'\n }\n}\n\nexport class UnsupportedVersionError extends BaseError {\n constructor (dependency: string, version: string, geVersion: string, ltVersion: string) {\n super(`Unsupported ${dependency} version ${version}. Supported: >= ${geVersion} < ${ltVersion}`)\n this.name = 'UnsupportedVersionError'\n }\n}\n\nexport class InternalError extends BaseError {\n constructor (message: string) {\n super(message)\n this.name = 'InternalError'\n }\n}\n\n/* keypair an account related errors */\nexport class InvalidKeypairError extends AccountError {\n constructor (message: string) {\n super(message)\n this.name = 'InvalidKeypairError'\n }\n}\n\nexport class UnavailableAccountError extends AccountError {\n constructor (address: string) {\n super(`Account for ${address} not available`)\n this.name = 'UnavailableAccountError'\n }\n}\n\n/* errors originating from AENS operation */\nexport class AensPointerContextError extends AensError {\n constructor (nameOrId: string, prefix: string) {\n super(`Name ${nameOrId} don't have pointers for ${prefix}`)\n this.name = 'AensPointerContextError'\n }\n}\n\nexport class InsufficientNameFeeError extends AensError {\n constructor (nameFee: number, minNameFee: number) {\n super(`the provided fee ${nameFee} is not enough to execute the claim, required: ${minNameFee}`)\n this.name = 'InsufficientNameFeeError'\n }\n}\n\nexport class InvalidAensNameError extends AensError {\n constructor (message: string) {\n super(message)\n this.name = 'InvalidAensNameError'\n }\n}\n\n/* Aepp Errors */\nexport class DuplicateCallbackError extends AeppError {\n constructor () {\n super('Callback Already exist')\n this.name = 'DuplicateCallbackError'\n }\n}\n\nexport class InvalidRpcMessageError extends AeppError {\n constructor (message: string) {\n super(`Received invalid message: ${message}`)\n this.name = 'InvalidRpcMessageError'\n }\n}\n\nexport class MissingCallbackError extends AeppError {\n constructor (id: string) {\n super(`Can't find callback for this messageId ${id}`)\n this.name = 'MissingCallbackError'\n }\n}\n\nexport class UnAuthorizedAccountError extends AeppError {\n constructor (onAccount: string) {\n super(`You do not have access to account ${onAccount}`)\n this.name = 'UnAuthorizedAccountError'\n }\n}\n\nexport class UnknownRpcClientError extends AeppError {\n constructor (id: string) {\n super(`RpcClient with id ${id} do not exist`)\n this.name = 'UnknownRpcClientError'\n }\n}\n\nexport class UnsubscribedAccountError extends AeppError {\n constructor () {\n super('You are not subscribed for an account.')\n this.name = 'UnsubscribedAccountError'\n }\n}\n\n/* Channel originated errors */\nexport class ChannelCallError extends ChannelError {\n constructor (message: string) {\n super(message)\n this.name = 'ChannelCallError'\n }\n}\n\nexport class ChannelConnectionError extends ChannelError {\n constructor (message: string) {\n super(message)\n this.name = 'ChannelConnectionError'\n }\n}\n\nexport class ChannelPingTimedOutError extends ChannelError {\n constructor () {\n super('Server pong timed out')\n this.name = 'ChannelPingTimedOutError'\n }\n}\n\nexport class UnexpectedChannelMessageError extends ChannelError {\n constructor (message: string) {\n super(message)\n this.name = 'UnexpectedChannelMessageError'\n }\n}\n\nexport class UnknownChannelStateError extends ChannelError {\n constructor () {\n super('State Channels FSM entered unknown state')\n this.name = 'UnknownChannelStateError'\n }\n}\n\n/* compiler issued errors */\n/* errors from option validations */\nexport class InvalidAuthDataError extends CompilerError {\n constructor (message: string) {\n super(message)\n this.name = 'InvalidAuthDataError'\n }\n}\n\n/* contract invocation errors */\nexport class BytecodeMismatchError extends ContractError {\n constructor (source: string) {\n super(`Contract ${source} do not correspond to the bytecode deployed on the chain`)\n this.name = 'BytecodeMismatchError'\n }\n}\n\nexport class DuplicateContractError extends ContractError {\n constructor () {\n super('Contract already deployed')\n this.name = 'DuplicateContractError'\n }\n}\n\nexport class InactiveContractError extends ContractError {\n constructor (contractAddress: string) {\n super(`Contract with address ${contractAddress} not active`)\n this.name = 'InactiveContractError'\n }\n}\n\nexport class InvalidMethodInvocationError extends ContractError {\n constructor (message: string) {\n super(message)\n this.name = 'InvalidMethodInvocationError'\n }\n}\n\nexport class MissingContractAddressError extends ContractError {\n constructor (message: string) {\n super(message)\n this.name = 'MissingContractAddressError'\n }\n}\n\nexport class MissingContractDefError extends ContractError {\n constructor () {\n super('Either ACI or source code is required')\n this.name = 'MissingContractDefError'\n }\n}\n\nexport class MissingFunctionNameError extends ContractError {\n constructor () {\n super('Function name is required')\n this.name = 'MissingFunctionNameError'\n }\n}\n\nexport class NodeInvocationError extends ContractError {\n constructor (message?: string) {\n message = message ?? ''\n super(`Invocation failed${message === '' ? '' : `: \"${message}\"`}`)\n this.name = 'NodeInvocationError'\n }\n}\n\nexport class NoSuchContractFunctionError extends ContractError {\n constructor (name: string) {\n super(`Function ${name} doesn't exist in contract`)\n this.name = 'NoSuchContractFunctionError'\n }\n}\n\nexport class NotPayableFunctionError extends ContractError {\n constructor (amount: string, fn: string) {\n super(\n `You try to pay \"${amount}\" to function \"${fn}\" which is not payable. ` +\n 'Only payable function can accept tokens')\n this.name = 'NotPayableFunctionError'\n }\n}\n\nexport class MissingEventDefinitionError extends ContractError {\n constructor (eventNameHash: string, eventAddress: string) {\n super(\n `Can't find definition of ${eventNameHash} event emitted by ${eventAddress}` +\n ' (use omitUnknown option to ignore events like this)'\n )\n this.name = 'MissingEventDefinitionError'\n }\n}\n\nexport class AmbiguousEventDefinitionError extends ContractError {\n constructor (eventAddress: string, matchedEvents: [string, string][]) {\n super(\n `Found multiple definitions of \"${matchedEvents[0][1]}\" event emitted by ${eventAddress}` +\n ` in ${matchedEvents.map(([name]) => `\"${name}\"`).join(', ')} contracts` +\n ' (use contractAddressToName option to specify contract name corresponding to address)'\n )\n this.name = 'AmbiguousEventDefinitionError'\n }\n}\n\n/* cryptography errors */\nexport class InvalidChecksumError extends CryptographyError {\n constructor () {\n super('Invalid checksum')\n this.name = 'InvalidChecksumError'\n }\n}\n\nexport class InvalidDerivationPathError extends CryptographyError {\n constructor () {\n super('Invalid path')\n this.name = 'InvalidDerivationPathError'\n }\n}\n\nexport class InvalidKeyError extends CryptographyError {\n constructor (message: string) {\n super(message)\n this.name = 'InvalidKeyError'\n }\n}\n\nexport class InvalidPasswordError extends CryptographyError {\n constructor (message: string) {\n super(message)\n this.name = 'InvalidPasswordError'\n }\n}\n\nexport class MerkleTreeHashMismatchError extends CryptographyError {\n constructor () {\n super('Node hash is not equal to provided one')\n this.name = 'MerkleTreeHashMismatchError'\n }\n}\n\nexport class MissingNodeInTreeError extends CryptographyError {\n constructor (message: string) {\n super(message)\n this.name = 'MissingNodeInTreeError'\n }\n}\n\nexport class UnsupportedAlgorithmError extends CryptographyError {\n constructor (algo: string) {\n super(algo + ' is not available')\n this.name = 'UnsupportedAlgorithmError'\n }\n}\n\nexport class NotHardenedSegmentError extends CryptographyError {\n constructor (message: string) {\n super(message)\n this.name = 'NotHardenedSegmentError'\n }\n}\n\nexport class UnknownNodeLengthError extends CryptographyError {\n constructor (nodeLength: number) {\n super(`Unknown node length: ${nodeLength}`)\n this.name = 'UnknownNodeLengthError'\n }\n}\n\nexport class UnknownPathNibbleError extends CryptographyError {\n constructor (nibble: number) {\n super(`Unknown path nibble: ${nibble}`)\n this.name = 'UnknownPathNibbleError'\n }\n}\n\nexport class UnsupportedChildIndexError extends CryptographyError {\n constructor (index: string) {\n super(`Child index #${index} is not supported`)\n this.name = 'UnsupportedChildIndexError'\n }\n}\n\n/* Node errors */\nexport class DisconnectedError extends NodeError {\n constructor () {\n super('Can not get node info. Node is not connected')\n this.name = 'DisconnectedError'\n }\n}\n\nexport class DuplicateNodeError extends NodeError {\n constructor (name: string) {\n super(`Node with name ${name} already exist`)\n this.name = 'DuplicateNodeError'\n }\n}\n\nexport class NodeNotFoundError extends NodeError {\n constructor (message: string) {\n super(message)\n this.name = 'NodeNotFoundError'\n }\n}\n\n/* transaction related errors */\nexport class DecodeError extends TransactionError {\n constructor (message: string) {\n super(message)\n this.name = 'DecodeError'\n }\n}\n\nexport class EncodeError extends TransactionError {\n constructor (message: string) {\n super(message)\n this.name = 'EncodeError'\n }\n}\n\nexport class PayloadLengthError extends TransactionError {\n constructor (message: string) {\n super(message)\n this.name = 'PayloadLengthError'\n }\n}\n\nexport class DryRunError extends TransactionError {\n constructor (message: string) {\n super(message)\n this.name = 'DryRunError'\n }\n}\n\nexport class IllegalBidFeeError extends TransactionError {\n constructor (message: string) {\n super(message)\n this.name = 'IllegalBidFeeError'\n }\n}\n\nexport class InvalidSignatureError extends TransactionError {\n constructor (message: string) {\n super(message)\n this.name = 'InvalidSignatureError'\n }\n}\n\nexport class InvalidTxError extends TransactionError {\n constructor (message: string) {\n super(message)\n this.name = 'InvalidTxError'\n }\n}\n\nexport class InvalidTxParamsError extends TransactionError {\n constructor (message: string) {\n super(message)\n this.name = 'InvalidTxParamsError'\n }\n}\n\nexport class NoDefaultAensPointerError extends TransactionError {\n constructor (prefix: string) {\n super(`Default AENS pointer key is not defined for ${prefix} prefix`)\n this.name = 'NoDefaultAensPointerError'\n }\n}\n\nexport class PrefixMismatchError extends TransactionError {\n constructor (prefix: string, requiredPrefix: string) {\n super(`Encoded string have a wrong type: ${prefix} (expected: ${requiredPrefix})`)\n this.name = 'PrefixMismatchError'\n }\n}\n\nexport class PrefixNotFoundError extends TransactionError {\n constructor (tag: string) {\n super(`Prefix for id-tag ${tag} not found.`)\n this.name = 'PrefixNotFoundError'\n }\n}\n\nexport class SchemaNotFoundError extends TransactionError {\n constructor (message: string) {\n super(message)\n this.name = 'SchemaNotFoundError'\n }\n}\n\nexport class TagNotFoundError extends TransactionError {\n constructor (prefix: string) {\n super(`Id tag for prefix ${prefix} not found.`)\n this.name = 'DecodeError'\n }\n}\n\nexport class TxNotInChainError extends TransactionError {\n constructor (txHash: string) {\n super(`Transaction ${txHash} is removed from chain`)\n this.name = 'TxNotInChainError'\n }\n}\n\nexport class UnknownTxError extends TransactionError {\n constructor (message: string) {\n super(message)\n this.name = 'UnknownTxError'\n }\n}\n\nexport class UnsupportedABIversionError extends TransactionError {\n constructor (message: string) {\n super(message)\n this.name = 'UnsupportedABIversionError'\n }\n}\n\nexport class UnsupportedVMversionError extends TransactionError {\n constructor (message: string) {\n super(message)\n this.name = 'UnsupportedVMversionError'\n }\n}\n\n/* Wallet Errors */\nexport class AlreadyConnectedError extends WalletError {\n constructor (message: string) {\n super(message)\n this.name = 'AlreadyConnectedError'\n }\n}\n\nexport class MessageDirectionError extends WalletError {\n constructor (message: string) {\n super(message)\n this.name = 'MessageDirectionError'\n }\n}\n\nexport class NoWalletConnectedError extends WalletError {\n constructor (message: string) {\n super(message)\n this.name = 'NoWalletConnectedError'\n }\n}\n\nexport class RpcConnectionError extends WalletError {\n constructor (message: string) {\n super(message)\n this.name = 'RpcConnectionError'\n }\n}\n"],"file":"errors.mjs"}
@@ -1,25 +1,38 @@
1
+ import _buffer from "buffer";
2
+ const {
3
+ Buffer: _Buffer
4
+ } = _buffer;
1
5
  import nacl from 'tweetnacl';
2
- import { full as hmac } from 'tweetnacl-auth';
3
- import { fromString } from 'bip32-path';
4
- import { validateMnemonic, mnemonicToSeed, generateMnemonic as genMnemonic } from '@aeternity/bip39';
5
- import { decryptKey, encodeBase58Check, encryptKey } from './crypto';
6
- const ED25519_CURVE = Buffer.from('ed25519 seed');
6
+ import _tweetnaclAuth from 'tweetnacl-auth';
7
+ const {
8
+ full: hmac
9
+ } = _tweetnaclAuth;
10
+ import _bip32Path from 'bip32-path';
11
+ const {
12
+ fromString
13
+ } = _bip32Path;
14
+ import { decryptKey, encryptKey } from "./crypto.mjs";
15
+ import { encode } from "../tx/builder/helpers.mjs";
16
+ import { InvalidDerivationPathError, NotHardenedSegmentError, UnsupportedChildIndexError } from "./errors.mjs";
17
+
18
+ const ED25519_CURVE = _Buffer.from('ed25519 seed');
19
+
7
20
  const HARDENED_OFFSET = 0x80000000;
8
21
 
9
- const toHex = buffer => Buffer.from(buffer).toString('hex');
22
+ const toHex = buffer => _Buffer.from(buffer).toString('hex');
10
23
 
11
24
  export function derivePathFromKey(path, key) {
12
25
  const segments = path === '' ? [] : fromString(path).toPathArray();
13
26
  segments.forEach((segment, i) => {
14
27
  if (segment < HARDENED_OFFSET) {
15
- throw new Error(`Segment #${i + 1} is not hardened`);
28
+ throw new NotHardenedSegmentError(`Segment #${i + 1} is not hardened`);
16
29
  }
17
30
  });
18
31
  return segments.reduce((parentKey, segment) => deriveChild(parentKey, segment), key);
19
32
  }
20
33
  export function derivePathFromSeed(path, seed) {
21
34
  if (!['m', 'm/'].includes(path.slice(0, 2))) {
22
- throw new Error('Invalid path');
35
+ throw new InvalidDerivationPathError();
23
36
  }
24
37
 
25
38
  const masterKey = getMasterKeyFromSeed(seed);
@@ -33,16 +46,13 @@ function formatAccount(keys) {
33
46
  } = keys;
34
47
  return {
35
48
  secretKey: toHex(secretKey),
36
- publicKey: `ak_${encodeBase58Check(publicKey)}`
49
+ publicKey: encode(publicKey, 'ak')
37
50
  };
38
51
  }
39
52
 
40
53
  export function getKeyPair(secretKey) {
41
54
  return nacl.sign.keyPair.fromSeed(secretKey);
42
55
  }
43
- export function generateMnemonic() {
44
- return genMnemonic();
45
- }
46
56
  export function getMasterKeyFromSeed(seed) {
47
57
  const I = hmac(seed, ED25519_CURVE);
48
58
  const IL = I.slice(0, 32);
@@ -59,12 +69,15 @@ export function deriveChild(_ref, index) {
59
69
  } = _ref;
60
70
 
61
71
  if (index < HARDENED_OFFSET) {
62
- throw new Error(`Child index #${index} is not supported`);
72
+ throw new UnsupportedChildIndexError(index);
63
73
  }
64
74
 
65
- const indexBuffer = Buffer.allocUnsafe(4);
75
+ const indexBuffer = _Buffer.allocUnsafe(4);
76
+
66
77
  indexBuffer.writeUInt32BE(index, 0);
67
- const data = Buffer.concat([Buffer.alloc(1, 0), Buffer.from(secretKey), Buffer.from(indexBuffer)]);
78
+
79
+ const data = _Buffer.concat([_Buffer.alloc(1, 0), _Buffer.from(secretKey), _Buffer.from(indexBuffer)]);
80
+
68
81
  const I = hmac(data, chainCode);
69
82
  const IL = I.slice(0, 32);
70
83
  const IR = I.slice(32);
@@ -73,12 +86,7 @@ export function deriveChild(_ref, index) {
73
86
  chainCode: IR
74
87
  };
75
88
  }
76
- export function generateSaveHDWallet(mnemonic, password) {
77
- if (!validateMnemonic(mnemonic)) {
78
- throw new Error('Invalid mnemonic');
79
- }
80
-
81
- const seed = mnemonicToSeed(mnemonic);
89
+ export function generateSaveHDWalletFromSeed(seed, password) {
82
90
  const walletKey = derivePathFromSeed('m/44h/457h', seed);
83
91
  return {
84
92
  secretKey: toHex(encryptKey(password, walletKey.secretKey)),
@@ -87,13 +95,12 @@ export function generateSaveHDWallet(mnemonic, password) {
87
95
  }
88
96
  export function getSaveHDWalletAccounts(saveHDWallet, password, accountCount) {
89
97
  const walletKey = {
90
- secretKey: decryptKey(password, Buffer.from(saveHDWallet.secretKey, 'hex')),
91
- chainCode: decryptKey(password, Buffer.from(saveHDWallet.chainCode, 'hex'))
98
+ secretKey: decryptKey(password, _Buffer.from(saveHDWallet.secretKey, 'hex')),
99
+ chainCode: decryptKey(password, _Buffer.from(saveHDWallet.chainCode, 'hex'))
92
100
  };
93
101
  return new Array(accountCount).fill().map((_, idx) => formatAccount(getKeyPair(derivePathFromKey(`${idx}h/0h/0h`, walletKey).secretKey)));
94
102
  }
95
- export const getHdWalletAccountFromMnemonic = (mnemonic, accountIdx) => {
96
- const seed = mnemonicToSeed(mnemonic);
103
+ export const getHdWalletAccountFromSeed = (seed, accountIdx) => {
97
104
  const walletKey = derivePathFromSeed('m/44h/457h', seed);
98
105
  const derived = derivePathFromKey(`${accountIdx}h/0h/0h`, walletKey);
99
106
  const keyPair = getKeyPair(derived.secretKey);
@@ -101,12 +108,4 @@ export const getHdWalletAccountFromMnemonic = (mnemonic, accountIdx) => {
101
108
  idx: accountIdx
102
109
  };
103
110
  };
104
- export default {
105
- getHdWalletAccountFromMnemonic,
106
- getSaveHDWalletAccounts,
107
- generateSaveHDWallet,
108
- generateMnemonic,
109
- deriveChild,
110
- getMasterKeyFromSeed
111
- };
112
- //# sourceMappingURL=hd-wallet.js.map
111
+ //# sourceMappingURL=hd-wallet.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/hd-wallet.js"],"names":["nacl","decryptKey","encryptKey","encode","InvalidDerivationPathError","NotHardenedSegmentError","UnsupportedChildIndexError","ED25519_CURVE","from","HARDENED_OFFSET","toHex","buffer","toString","derivePathFromKey","path","key","segments","fromString","toPathArray","forEach","segment","i","reduce","parentKey","deriveChild","derivePathFromSeed","seed","includes","slice","masterKey","getMasterKeyFromSeed","formatAccount","keys","secretKey","publicKey","getKeyPair","sign","keyPair","fromSeed","I","hmac","IL","IR","chainCode","index","indexBuffer","allocUnsafe","writeUInt32BE","data","concat","alloc","generateSaveHDWalletFromSeed","password","walletKey","getSaveHDWalletAccounts","saveHDWallet","accountCount","Array","fill","map","_","idx","getHdWalletAccountFromSeed","accountIdx","derived"],"mappings":"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","sourcesContent":["import nacl from 'tweetnacl'\nimport { full as hmac } from 'tweetnacl-auth'\nimport { fromString } from 'bip32-path'\nimport { decryptKey, encryptKey } from './crypto'\nimport { encode } from '../tx/builder/helpers'\nimport {\n InvalidDerivationPathError, NotHardenedSegmentError, UnsupportedChildIndexError\n} from './errors'\n\nconst ED25519_CURVE = Buffer.from('ed25519 seed')\nconst HARDENED_OFFSET = 0x80000000\n\nconst toHex = (buffer) => Buffer.from(buffer).toString('hex')\n\nexport function derivePathFromKey (path, key) {\n const segments = path === '' ? [] : fromString(path).toPathArray()\n segments.forEach((segment, i) => {\n if (segment < HARDENED_OFFSET) {\n throw new NotHardenedSegmentError(`Segment #${i + 1} is not hardened`)\n }\n })\n\n return segments.reduce((parentKey, segment) => deriveChild(parentKey, segment), key)\n}\n\nexport function derivePathFromSeed (path, seed) {\n if (!['m', 'm/'].includes(path.slice(0, 2))) {\n throw new InvalidDerivationPathError()\n }\n const masterKey = getMasterKeyFromSeed(seed)\n return derivePathFromKey(path.slice(2), masterKey)\n}\n\nfunction formatAccount (keys) {\n const { secretKey, publicKey } = keys\n return {\n secretKey: toHex(secretKey),\n publicKey: encode(publicKey, 'ak')\n }\n}\n\nexport function getKeyPair (secretKey) {\n return nacl.sign.keyPair.fromSeed(secretKey)\n}\n\nexport function getMasterKeyFromSeed (seed) {\n const I = hmac(seed, ED25519_CURVE)\n const IL = I.slice(0, 32)\n const IR = I.slice(32)\n return {\n secretKey: IL,\n chainCode: IR\n }\n}\n\nexport function deriveChild ({ secretKey, chainCode }, index) {\n if (index < HARDENED_OFFSET) {\n throw new UnsupportedChildIndexError(index)\n }\n const indexBuffer = Buffer.allocUnsafe(4)\n indexBuffer.writeUInt32BE(index, 0)\n\n const data = Buffer.concat([Buffer.alloc(1, 0), Buffer.from(secretKey), Buffer.from(indexBuffer)])\n\n const I = hmac(data, chainCode)\n const IL = I.slice(0, 32)\n const IR = I.slice(32)\n return {\n secretKey: IL,\n chainCode: IR\n }\n}\n\nexport function generateSaveHDWalletFromSeed (seed, password) {\n const walletKey = derivePathFromSeed('m/44h/457h', seed)\n return {\n secretKey: toHex(encryptKey(password, walletKey.secretKey)),\n chainCode: toHex(encryptKey(password, walletKey.chainCode))\n }\n}\n\nexport function getSaveHDWalletAccounts (saveHDWallet, password, accountCount) {\n const walletKey = {\n secretKey: decryptKey(password, Buffer.from(saveHDWallet.secretKey, 'hex')),\n chainCode: decryptKey(password, Buffer.from(saveHDWallet.chainCode, 'hex'))\n }\n return (new Array(accountCount)).fill()\n .map((_, idx) =>\n formatAccount(getKeyPair(derivePathFromKey(`${idx}h/0h/0h`, walletKey).secretKey)))\n}\n\nexport const getHdWalletAccountFromSeed = (seed, accountIdx) => {\n const walletKey = derivePathFromSeed('m/44h/457h', seed)\n const derived = derivePathFromKey(`${accountIdx}h/0h/0h`, walletKey)\n const keyPair = getKeyPair(derived.secretKey)\n return {\n ...formatAccount(keyPair),\n idx: accountIdx\n }\n}\n"],"file":"hd-wallet.mjs"}
@@ -42,4 +42,4 @@ export default {
42
42
  },
43
43
  parse: jsonBig.parse
44
44
  };
45
- //# sourceMappingURL=json-big.js.map
45
+ //# sourceMappingURL=json-big.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utils/json-big.js"],"names":["JsonBig","BigNumber","jsonBig","storeAsString","convertValuesToBigNumbers","value","constructor","Object","entries","map","key","reduce","p","k","v","Array","isArray","item","toString","bn","toJSON","stringify","object","args","parse"],"mappings":"AAAA,OAAOA,OAAP,MAAoB,wBAApB;AACA,OAAOC,SAAP,MAAsB,cAAtB;AAEA,MAAMC,OAAO,GAAGF,OAAO,CAAC;AAAEG,EAAAA,aAAa,EAAE;AAAjB,CAAD,CAAvB;;AAEA,MAAMC,yBAAyB,GAAGC,KAAK,IAAI;AACzC,MAAI,OAAOA,KAAP,KAAiB,QAAjB,IAA6BA,KAAK,KAAK,IAAvC,IAA+CA,KAAK,CAACC,WAAN,KAAsBC,MAAzE,EAAiF;AAC/E,WAAOA,MAAM,CAACC,OAAP,CAAeH,KAAf,EACJI,GADI,CACA;AAAA,UAAC,CAACC,GAAD,EAAML,KAAN,CAAD;AAAA,aAAkB,CAACK,GAAD,EAAMN,yBAAyB,CAACC,KAAD,CAA/B,CAAlB;AAAA,KADA,EAEJM,MAFI,CAEG,CAACC,CAAD;AAAA,UAAI,CAACC,CAAD,EAAIC,CAAJ,CAAJ;AAAA,aAAgB,EAAE,GAAGF,CAAL;AAAQ,SAACC,CAAD,GAAKC;AAAb,OAAhB;AAAA,KAFH,EAEsC,EAFtC,CAAP;AAGD;;AACD,MAAIC,KAAK,CAACC,OAAN,CAAcX,KAAd,CAAJ,EAA0B;AACxB,WAAOA,KAAK,CAACI,GAAN,CAAUQ,IAAI,IAAIb,yBAAyB,CAACa,IAAD,CAA3C,CAAP;AACD;;AACD,MAAI,OAAOZ,KAAP,KAAiB,QAAjB,IAA6BJ,SAAS,CAACI,KAAD,CAAT,CAAiBa,QAAjB,CAA0B,EAA1B,MAAkCb,KAAnE,EAA0E;AACxE,UAAMc,EAAE,GAAGlB,SAAS,CAACI,KAAD,CAApB;;AACAc,IAAAA,EAAE,CAACC,MAAH,GAAY,MAAMD,EAAE,CAACD,QAAH,CAAY,EAAZ,CAAlB;;AACA,WAAOC,EAAP;AACD;;AACD,SAAOd,KAAP;AACD,CAfD;;AAiBA,eAAe;AACbgB,EAAAA,SAAS,EAAE,UAACC,MAAD;AAAA,sCAAYC,IAAZ;AAAYA,MAAAA,IAAZ;AAAA;;AAAA,WAAqBrB,OAAO,CAACmB,SAAR,CAAkBjB,yBAAyB,CAACkB,MAAD,CAA3C,EAAqD,GAAGC,IAAxD,CAArB;AAAA,GADE;AAEbC,EAAAA,KAAK,EAAEtB,OAAO,CAACsB;AAFF,CAAf","sourcesContent":["import JsonBig from '@aeternity/json-bigint'\nimport BigNumber from 'bignumber.js'\n\nconst jsonBig = JsonBig({ storeAsString: true })\n\nconst convertValuesToBigNumbers = value => {\n if (typeof value === 'object' && value !== null && value.constructor === Object) {\n return Object.entries(value)\n .map(([key, value]) => [key, convertValuesToBigNumbers(value)])\n .reduce((p, [k, v]) => ({ ...p, [k]: v }), {})\n }\n if (Array.isArray(value)) {\n return value.map(item => convertValuesToBigNumbers(item))\n }\n if (typeof value === 'string' && BigNumber(value).toString(10) === value) {\n const bn = BigNumber(value)\n bn.toJSON = () => bn.toString(10)\n return bn\n }\n return value\n}\n\nexport default {\n stringify: (object, ...args) => jsonBig.stringify(convertValuesToBigNumbers(object), ...args),\n parse: jsonBig.parse\n}\n"],"file":"json-big.js"}
1
+ {"version":3,"sources":["../../src/utils/json-big.js"],"names":["JsonBig","BigNumber","jsonBig","storeAsString","convertValuesToBigNumbers","value","constructor","Object","entries","map","key","reduce","p","k","v","Array","isArray","item","toString","bn","toJSON","stringify","object","args","parse"],"mappings":"AAAA,OAAOA,OAAP,MAAoB,wBAApB;AACA,OAAOC,SAAP,MAAsB,cAAtB;AAEA,MAAMC,OAAO,GAAGF,OAAO,CAAC;AAAEG,EAAAA,aAAa,EAAE;AAAjB,CAAD,CAAvB;;AAEA,MAAMC,yBAAyB,GAAGC,KAAK,IAAI;AACzC,MAAI,OAAOA,KAAP,KAAiB,QAAjB,IAA6BA,KAAK,KAAK,IAAvC,IAA+CA,KAAK,CAACC,WAAN,KAAsBC,MAAzE,EAAiF;AAC/E,WAAOA,MAAM,CAACC,OAAP,CAAeH,KAAf,EACJI,GADI,CACA;AAAA,UAAC,CAACC,GAAD,EAAML,KAAN,CAAD;AAAA,aAAkB,CAACK,GAAD,EAAMN,yBAAyB,CAACC,KAAD,CAA/B,CAAlB;AAAA,KADA,EAEJM,MAFI,CAEG,CAACC,CAAD;AAAA,UAAI,CAACC,CAAD,EAAIC,CAAJ,CAAJ;AAAA,aAAgB,EAAE,GAAGF,CAAL;AAAQ,SAACC,CAAD,GAAKC;AAAb,OAAhB;AAAA,KAFH,EAEsC,EAFtC,CAAP;AAGD;;AACD,MAAIC,KAAK,CAACC,OAAN,CAAcX,KAAd,CAAJ,EAA0B;AACxB,WAAOA,KAAK,CAACI,GAAN,CAAUQ,IAAI,IAAIb,yBAAyB,CAACa,IAAD,CAA3C,CAAP;AACD;;AACD,MAAI,OAAOZ,KAAP,KAAiB,QAAjB,IAA6BJ,SAAS,CAACI,KAAD,CAAT,CAAiBa,QAAjB,CAA0B,EAA1B,MAAkCb,KAAnE,EAA0E;AACxE,UAAMc,EAAE,GAAGlB,SAAS,CAACI,KAAD,CAApB;;AACAc,IAAAA,EAAE,CAACC,MAAH,GAAY,MAAMD,EAAE,CAACD,QAAH,CAAY,EAAZ,CAAlB;;AACA,WAAOC,EAAP;AACD;;AACD,SAAOd,KAAP;AACD,CAfD;;AAiBA,eAAe;AACbgB,EAAAA,SAAS,EAAE,UAACC,MAAD;AAAA,sCAAYC,IAAZ;AAAYA,MAAAA,IAAZ;AAAA;;AAAA,WAAqBrB,OAAO,CAACmB,SAAR,CAAkBjB,yBAAyB,CAACkB,MAAD,CAA3C,EAAqD,GAAGC,IAAxD,CAArB;AAAA,GADE;AAEbC,EAAAA,KAAK,EAAEtB,OAAO,CAACsB;AAFF,CAAf","sourcesContent":["import JsonBig from '@aeternity/json-bigint'\nimport BigNumber from 'bignumber.js'\n\nconst jsonBig = JsonBig({ storeAsString: true })\n\nconst convertValuesToBigNumbers = value => {\n if (typeof value === 'object' && value !== null && value.constructor === Object) {\n return Object.entries(value)\n .map(([key, value]) => [key, convertValuesToBigNumbers(value)])\n .reduce((p, [k, v]) => ({ ...p, [k]: v }), {})\n }\n if (Array.isArray(value)) {\n return value.map(item => convertValuesToBigNumbers(item))\n }\n if (typeof value === 'string' && BigNumber(value).toString(10) === value) {\n const bn = BigNumber(value)\n bn.toJSON = () => bn.toString(10)\n return bn\n }\n return value\n}\n\nexport default {\n stringify: (object, ...args) => jsonBig.stringify(convertValuesToBigNumbers(object), ...args),\n parse: jsonBig.parse\n}\n"],"file":"json-big.mjs"}
@@ -1,9 +1,17 @@
1
+ import _buffer from "buffer";
2
+ const {
3
+ Buffer: _Buffer
4
+ } = _buffer;
1
5
  import nacl from 'tweetnacl';
2
- import { v4 as uuid } from 'uuid';
3
- import { encodeBase58Check } from './crypto';
4
- import { str2buf } from './bytes';
5
-
6
- const _sodium = require('libsodium-wrappers-sumo');
6
+ import { v4 as uuid } from '@aeternity/uuid';
7
+ import _aeternityArgon2BrowserDistArgon2BundledMinJs from '@aeternity/argon2-browser/dist/argon2-bundled.min.js';
8
+ const {
9
+ ArgonType,
10
+ hash
11
+ } = _aeternityArgon2BrowserDistArgon2BundledMinJs;
12
+ import { encode } from "../tx/builder/helpers.mjs";
13
+ import { str2buf } from "./bytes.mjs";
14
+ import { ArgumentError, InvalidKeyError, UnsupportedAlgorithmError, InvalidPasswordError } from "./errors.mjs";
7
15
  /**
8
16
  * KeyStore module
9
17
  * @module @aeternity/aepp-sdk/es/utils/keystore
@@ -11,7 +19,6 @@ const _sodium = require('libsodium-wrappers-sumo');
11
19
  * @example const { Keystore } = require('@aeternity/aepp-sdk')
12
20
  */
13
21
 
14
-
15
22
  const DEFAULTS = {
16
23
  crypto: {
17
24
  secret_type: 'ed25519',
@@ -28,18 +35,20 @@ const DEFAULTS = {
28
35
  const DERIVED_KEY_FUNCTIONS = {
29
36
  argon2id: deriveKeyUsingArgon2id
30
37
  };
31
- export async function deriveKeyUsingArgon2id(password, salt, options) {
38
+ export async function deriveKeyUsingArgon2id(pass, salt, options) {
32
39
  const {
33
- memlimit_kib: memoryCost,
34
- opslimit: timeCost
35
- } = options.kdf_params; // const isBrowser = !(typeof module !== 'undefined' && module.exports)
36
-
37
- return _sodium.ready.then(async () => {
38
- // tslint:disable-next-line:typedef
39
- const sodium = _sodium;
40
- const result = sodium.crypto_pwhash(32, password, salt, timeCost, memoryCost * 1024, sodium.crypto_pwhash_ALG_ARGON2ID13);
41
- return Buffer.from(result);
42
- });
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);
43
52
  } // CRYPTO PART
44
53
 
45
54
  const CRYPTO_FUNCTIONS = {
@@ -65,22 +74,22 @@ function decryptXsalsa20Poly1305(_ref2) {
65
74
  nonce
66
75
  } = _ref2;
67
76
  const res = nacl.secretbox.open(ciphertext, nonce, key);
68
- if (!res) throw new Error('Invalid password or nonce');
77
+ if (!res) throw new InvalidPasswordError('Invalid password or nonce');
69
78
  return res;
70
79
  }
71
80
  /**
72
81
  * Symmetric private key encryption using secret (derived) key.
73
- * @param {buffer|string} plaintext Data to be encrypted.
74
- * @param {buffer|string} key Secret key.
75
- * @param {buffer|string} nonce Randomly generated nonce.
82
+ * @param {Buffer|string} plaintext Data to be encrypted.
83
+ * @param {Buffer|string} key Secret key.
84
+ * @param {Buffer|string} nonce Randomly generated nonce.
76
85
  * @param {string=} algo Encryption algorithm (default: DEFAULTS.crypto.symmetric_alg).
77
- * @return {buffer} Encrypted data.
86
+ * @return {Buffer} Encrypted data.
78
87
  */
79
88
 
80
89
 
81
90
  function encrypt(plaintext, key, nonce) {
82
91
  let algo = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : DEFAULTS.crypto.symmetric_alg;
83
- if (!CRYPTO_FUNCTIONS[algo]) throw new Error(algo + ' is not available');
92
+ if (!CRYPTO_FUNCTIONS[algo]) throw new UnsupportedAlgorithmError(algo);
84
93
  return CRYPTO_FUNCTIONS[algo].encrypt({
85
94
  plaintext,
86
95
  nonce,
@@ -89,16 +98,16 @@ function encrypt(plaintext, key, nonce) {
89
98
  }
90
99
  /**
91
100
  * Symmetric private key decryption using secret (derived) key.
92
- * @param {buffer|Uint8Array} ciphertext Data to be decrypted.
93
- * @param {buffer|Uint8Array} key Secret key.
94
- * @param {buffer|Uint8Array} nonce Nonce from key-object.
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.
95
104
  * @param {string=} algo Encryption algorithm.
96
- * @return {buffer} Decrypted data.
105
+ * @return {Buffer} Decrypted data.
97
106
  */
98
107
 
99
108
 
100
109
  function decrypt(ciphertext, key, nonce, algo) {
101
- if (!CRYPTO_FUNCTIONS[algo]) throw new Error(algo + ' is not available');
110
+ if (!CRYPTO_FUNCTIONS[algo]) throw new UnsupportedAlgorithmError(algo);
102
111
  return CRYPTO_FUNCTIONS[algo].decrypt({
103
112
  ciphertext,
104
113
  nonce,
@@ -108,11 +117,11 @@ function decrypt(ciphertext, key, nonce, algo) {
108
117
  /**
109
118
  * Derive secret key from password with key derivation function.
110
119
  * @param {string} password User-supplied password.
111
- * @param {buffer|Uint8Array} nonce Randomly generated nonce.
120
+ * @param {Buffer|Uint8Array} nonce Randomly generated nonce.
112
121
  * @param {Object=} options Encryption parameters.
113
122
  * @param {string=} options.kdf Key derivation function (default: DEFAULTS.crypto.kdf).
114
123
  * @param {Object=} options.kdf_params KDF parameters (default: DEFAULTS.crypto.kdf_params).
115
- * @return {buffer} Secret key derived from password.
124
+ * @return {Buffer} Secret key derived from password.
116
125
  */
117
126
 
118
127
 
@@ -121,21 +130,22 @@ async function deriveKey(password, nonce) {
121
130
  kdf_params: DEFAULTS.crypto.kdf_params,
122
131
  kdf: DEFAULTS.crypto.kdf
123
132
  };
133
+ if (!nonce) throw new ArgumentError('nonce', 'provided', nonce);
134
+ if (password == null) throw new ArgumentError('password', 'provided', password);
124
135
 
125
- if (typeof password === 'undefined' || password === null || !nonce) {
126
- throw new Error('Must provide password and nonce to derive a key');
136
+ if (!Object.prototype.hasOwnProperty.call(DERIVED_KEY_FUNCTIONS, options.kdf)) {
137
+ throw new UnsupportedAlgorithmError(options.kdf);
127
138
  }
128
139
 
129
- if (!Object.prototype.hasOwnProperty.call(DERIVED_KEY_FUNCTIONS, options.kdf)) throw new Error('Unsupported kdf type');
130
140
  return DERIVED_KEY_FUNCTIONS[options.kdf](password, nonce, options);
131
141
  }
132
142
  /**
133
143
  * Assemble key data object in secret-storage format.
134
- * @param {buffer} name Key name.
135
- * @param {buffer} derivedKey Password-derived secret key.
136
- * @param {buffer} privateKey Private key.
137
- * @param {buffer} nonce Randomly generated 24byte nonce.
138
- * @param {buffer} salt Randomly generated 16byte salt.
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.
139
149
  * @param {Object=} options Encryption parameters.
140
150
  * @param {string=} options.kdf Key derivation function (default: argon2id).
141
151
  * @param {string=} options.cipher Symmetric cipher (default: constants.cipher).
@@ -156,14 +166,14 @@ function marshal(name, derivedKey, privateKey, nonce, salt) {
156
166
  crypto: Object.assign({
157
167
  secret_type: opt.secret_type,
158
168
  symmetric_alg: opt.symmetric_alg,
159
- ciphertext: Buffer.from(encrypt(Buffer.from(privateKey), derivedKey, nonce, opt.symmetric_alg)).toString('hex'),
169
+ ciphertext: _Buffer.from(encrypt(_Buffer.from(privateKey), derivedKey, nonce, opt.symmetric_alg)).toString('hex'),
160
170
  cipher_params: {
161
- nonce: Buffer.from(nonce).toString('hex')
171
+ nonce: _Buffer.from(nonce).toString('hex')
162
172
  }
163
173
  }, {
164
174
  kdf: opt.kdf,
165
175
  kdf_params: { ...opt.kdf_params,
166
- salt: Buffer.from(salt).toString('hex')
176
+ salt: _Buffer.from(salt).toString('hex')
167
177
  }
168
178
  })
169
179
  });
@@ -171,8 +181,10 @@ function marshal(name, derivedKey, privateKey, nonce, salt) {
171
181
 
172
182
  export function getAddressFromPriv(secret) {
173
183
  const keys = nacl.sign.keyPair.fromSecretKey(str2buf(secret));
174
- const publicBuffer = Buffer.from(keys.publicKey);
175
- return `ak_${encodeBase58Check(publicBuffer)}`;
184
+
185
+ const publicBuffer = _Buffer.from(keys.publicKey);
186
+
187
+ return encode(publicBuffer, 'ak');
176
188
  }
177
189
  /**
178
190
  * Recover plaintext private key from secret-storage key object.
@@ -191,15 +203,15 @@ export async function recover(password, keyObject) {
191
203
  kdf,
192
204
  kdf_params: kdfParams
193
205
  }), nonce, keyObject.crypto.symmetric_alg);
194
- if (!key) throw new Error('Invalid password');
195
- if (Buffer.from(key).length === 64) return Buffer.from(key).toString('hex');
196
- return Buffer.from(key).toString('utf-8');
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');
197
209
  }
198
210
  /**
199
211
  * Export private key to keystore secret-storage format.
200
212
  * @param {String} name Key name.
201
213
  * @param {String} password User-supplied password.
202
- * @param {String} privateKey Private key.
214
+ * @param {String|Buffer} privateKey Private key as hex-string or a Buffer.
203
215
  * @param {Buffer} nonce Randomly generated 24byte nonce.
204
216
  * @param {Buffer} salt Randomly generated 16byte salt.
205
217
  * @param {Object=} options Encryption parameters.
@@ -214,15 +226,15 @@ export async function dump(name, password, privateKey) {
214
226
  let salt = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : nacl.randomBytes(16);
215
227
  let options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {};
216
228
  const opt = Object.assign({}, DEFAULTS.crypto, options);
217
- return marshal(name, await deriveKey(password, salt, opt), privateKey, nonce, salt, opt);
229
+ return marshal(name, await deriveKey(password, salt, opt), typeof privateKey === 'string' ? _Buffer.from(privateKey, 'hex') : privateKey, nonce, salt, opt);
218
230
  }
219
231
  export function validateKeyObj(obj) {
220
232
  const root = ['crypto', 'id', 'version', 'public_key'];
221
233
  const cryptoKeys = ['cipher_params', 'ciphertext', 'symmetric_alg', 'kdf', 'kdf_params'];
222
234
  const missingRootKeys = root.filter(key => !Object.prototype.hasOwnProperty.call(obj, key));
223
- if (missingRootKeys.length) throw new Error(`Invalid key file format. Require properties: ${missingRootKeys}`);
235
+ if (missingRootKeys.length) throw new InvalidKeyError(`Invalid key file format. Require properties: ${missingRootKeys}`);
224
236
  const missingCryptoKeys = cryptoKeys.filter(key => !Object.prototype.hasOwnProperty.call(obj.crypto, key));
225
- if (missingCryptoKeys.length) throw new Error(`Invalid key file format. Require properties: ${missingCryptoKeys}`);
237
+ if (missingCryptoKeys.length) throw new InvalidKeyError(`Invalid key file format. Require properties: ${missingCryptoKeys}`);
226
238
  return true;
227
239
  }
228
- //# sourceMappingURL=keystore.js.map
240
+ //# sourceMappingURL=keystore.mjs.map
@@ -0,0 +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":";;;;AAAA,OAAOA,IAAP,MAAiB,WAAjB;AACA,SAASC,EAAE,IAAIC,IAAf,QAA2B,iBAA3B;AACA,0DAAgC,sDAAhC;;;;;SACSC,M;SACAC,O;SAEPC,a,EAAeC,e,EAAiBC,yB,EAA2BC,oB;AAG7D;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAMC,QAAQ,GAAG;AACfC,EAAAA,MAAM,EAAE;AACNC,IAAAA,WAAW,EAAE,SADP;AAENC,IAAAA,aAAa,EAAE,mBAFT;AAGNC,IAAAA,GAAG,EAAE,UAHC;AAINC,IAAAA,UAAU,EAAE;AACVC,MAAAA,YAAY,EAAE,KADJ;AAEVC,MAAAA,QAAQ,EAAE,CAFA;AAGVC,MAAAA,WAAW,EAAE;AAHH;AAJN;AADO,CAAjB,C,CAaA;;AACA,MAAMC,qBAAqB,GAAG;AAC5BC,EAAAA,QAAQ,EAAEC;AADkB,CAA9B;AAIA,OAAO,eAAeA,sBAAf,CAAuCC,IAAvC,EAA6CC,IAA7C,EAAmDC,OAAnD,EAA4D;AACjE,QAAM;AAAER,IAAAA,YAAY,EAAES,GAAhB;AAAqBR,IAAAA,QAAQ,EAAES;AAA/B,MAAwCF,OAAO,CAACT,UAAtD;AAEA,QAAMY,MAAM,GAAG,CAAC,MAAMC,IAAI,CAAC;AACzBC,IAAAA,OAAO,EAAE,EADgB;AAEzBP,IAAAA,IAFyB;AAGzBC,IAAAA,IAHyB;AAIzBG,IAAAA,IAJyB;AAKzBD,IAAAA,GALyB;AAMzBK,IAAAA,IAAI,EAAEC,SAAS,CAACC;AANS,GAAD,CAAX,EAOXJ,IAPJ;AAQA,SAAO,QAAOK,IAAP,CAAYN,MAAZ,CAAP;AACD,C,CAED;;AACA,MAAMO,gBAAgB,GAAG;AACvB,uBAAqB;AAAEC,IAAAA,OAAO,EAAEC,uBAAX;AAAoCC,IAAAA,OAAO,EAAEC;AAA7C;AADE,CAAzB;;AAIA,SAASF,uBAAT,OAA6D;AAAA,MAA3B;AAAEG,IAAAA,SAAF;AAAaC,IAAAA,GAAb;AAAkBC,IAAAA;AAAlB,GAA2B;AAC3D,SAAOxC,IAAI,CAACyC,SAAL,CAAeH,SAAf,EAA0BE,KAA1B,EAAiCD,GAAjC,CAAP;AACD;;AAED,SAASF,uBAAT,QAA8D;AAAA,MAA5B;AAAEK,IAAAA,UAAF;AAAcH,IAAAA,GAAd;AAAmBC,IAAAA;AAAnB,GAA4B;AAC5D,QAAMG,GAAG,GAAG3C,IAAI,CAACyC,SAAL,CAAeG,IAAf,CAAoBF,UAApB,EAAgCF,KAAhC,EAAuCD,GAAvC,CAAZ;AACA,MAAI,CAACI,GAAL,EAAU,MAAM,IAAInC,oBAAJ,CAAyB,2BAAzB,CAAN;AACV,SAAOmC,GAAP;AACD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAAST,OAAT,CAAkBI,SAAlB,EAA6BC,GAA7B,EAAkCC,KAAlC,EAA+E;AAAA,MAAtCK,IAAsC,uEAA/BpC,QAAQ,CAACC,MAAT,CAAgBE,aAAe;AAC7E,MAAI,CAACqB,gBAAgB,CAACY,IAAD,CAArB,EAA6B,MAAM,IAAItC,yBAAJ,CAA8BsC,IAA9B,CAAN;AAC7B,SAAOZ,gBAAgB,CAACY,IAAD,CAAhB,CAAuBX,OAAvB,CAA+B;AAAEI,IAAAA,SAAF;AAAaE,IAAAA,KAAb;AAAoBD,IAAAA;AAApB,GAA/B,CAAP;AACD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAASH,OAAT,CAAkBM,UAAlB,EAA8BH,GAA9B,EAAmCC,KAAnC,EAA0CK,IAA1C,EAAgD;AAC9C,MAAI,CAACZ,gBAAgB,CAACY,IAAD,CAArB,EAA6B,MAAM,IAAItC,yBAAJ,CAA8BsC,IAA9B,CAAN;AAC7B,SAAOZ,gBAAgB,CAACY,IAAD,CAAhB,CAAuBT,OAAvB,CAA+B;AAAEM,IAAAA,UAAF;AAAcF,IAAAA,KAAd;AAAqBD,IAAAA;AAArB,GAA/B,CAAP;AACD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,eAAeO,SAAf,CAA0BC,QAA1B,EAAoCP,KAApC,EAGG;AAAA,MAHwCjB,OAGxC,uEAHkD;AACnDT,IAAAA,UAAU,EAAEL,QAAQ,CAACC,MAAT,CAAgBI,UADuB;AAEnDD,IAAAA,GAAG,EAAEJ,QAAQ,CAACC,MAAT,CAAgBG;AAF8B,GAGlD;AACD,MAAI,CAAC2B,KAAL,EAAY,MAAM,IAAInC,aAAJ,CAAkB,OAAlB,EAA2B,UAA3B,EAAuCmC,KAAvC,CAAN;AACZ,MAAIO,QAAQ,IAAI,IAAhB,EAAsB,MAAM,IAAI1C,aAAJ,CAAkB,UAAlB,EAA8B,UAA9B,EAA0C0C,QAA1C,CAAN;;AAEtB,MAAI,CAACC,MAAM,CAACC,SAAP,CAAiBC,cAAjB,CAAgCC,IAAhC,CAAqCjC,qBAArC,EAA4DK,OAAO,CAACV,GAApE,CAAL,EAA+E;AAC7E,UAAM,IAAIN,yBAAJ,CAA8BgB,OAAO,CAACV,GAAtC,CAAN;AACD;;AAED,SAAOK,qBAAqB,CAACK,OAAO,CAACV,GAAT,CAArB,CAAmCkC,QAAnC,EAA6CP,KAA7C,EAAoDjB,OAApD,CAAP;AACD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAAS6B,OAAT,CAAkBC,IAAlB,EAAwBC,UAAxB,EAAoCC,UAApC,EAAgDf,KAAhD,EAAuDlB,IAAvD,EAA2E;AAAA,MAAdC,OAAc,uEAAJ,EAAI;AACzE,QAAMiC,GAAG,GAAGR,MAAM,CAACS,MAAP,CAAc,EAAd,EAAkBhD,QAAQ,CAACC,MAA3B,EAAmCa,OAAnC,CAAZ;AACA,SAAOyB,MAAM,CAACS,MAAP,CACL;AAAEJ,IAAAA,IAAF;AAAQK,IAAAA,OAAO,EAAE,CAAjB;AAAoBC,IAAAA,UAAU,EAAEC,kBAAkB,CAACL,UAAD,CAAlD;AAAgEM,IAAAA,EAAE,EAAE3D,IAAI;AAAxE,GADK,EAEL;AACEQ,IAAAA,MAAM,EAAEsC,MAAM,CAACS,MAAP,CACN;AACE9C,MAAAA,WAAW,EAAE6C,GAAG,CAAC7C,WADnB;AAEEC,MAAAA,aAAa,EAAE4C,GAAG,CAAC5C,aAFrB;AAGE8B,MAAAA,UAAU,EAAE,QAAOV,IAAP,CAAYE,OAAO,CAAC,QAAOF,IAAP,CAAYuB,UAAZ,CAAD,EAA0BD,UAA1B,EAAsCd,KAAtC,EAA6CgB,GAAG,CAAC5C,aAAjD,CAAnB,EAAoFkD,QAApF,CAA6F,KAA7F,CAHd;AAIEC,MAAAA,aAAa,EAAE;AAAEvB,QAAAA,KAAK,EAAE,QAAOR,IAAP,CAAYQ,KAAZ,EAAmBsB,QAAnB,CAA4B,KAA5B;AAAT;AAJjB,KADM,EAON;AAAEjD,MAAAA,GAAG,EAAE2C,GAAG,CAAC3C,GAAX;AAAgBC,MAAAA,UAAU,EAAE,EAAE,GAAG0C,GAAG,CAAC1C,UAAT;AAAqBQ,QAAAA,IAAI,EAAE,QAAOU,IAAP,CAAYV,IAAZ,EAAkBwC,QAAlB,CAA2B,KAA3B;AAA3B;AAA5B,KAPM;AADV,GAFK,CAAP;AAcD;;AAED,OAAO,SAASF,kBAAT,CAA6BI,MAA7B,EAAqC;AAC1C,QAAMC,IAAI,GAAGjE,IAAI,CAACkE,IAAL,CAAUC,OAAV,CAAkBC,aAAlB,CAAgChE,OAAO,CAAC4D,MAAD,CAAvC,CAAb;;AACA,QAAMK,YAAY,GAAG,QAAOrC,IAAP,CAAYiC,IAAI,CAACK,SAAjB,CAArB;;AACA,SAAOnE,MAAM,CAACkE,YAAD,EAAe,IAAf,CAAb;AACD;AAED;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,eAAeE,OAAf,CAAwBxB,QAAxB,EAAkCyB,SAAlC,EAA6C;AAClDC,EAAAA,cAAc,CAACD,SAAD,CAAd;AACA,QAAMhC,KAAK,GAAGkC,UAAU,CAAC1C,IAAX,CAAgB5B,OAAO,CAACoE,SAAS,CAAC9D,MAAV,CAAiBqD,aAAjB,CAA+BvB,KAAhC,CAAvB,CAAd;AACA,QAAMlB,IAAI,GAAGoD,UAAU,CAAC1C,IAAX,CAAgB5B,OAAO,CAACoE,SAAS,CAAC9D,MAAV,CAAiBI,UAAjB,CAA4BQ,IAA7B,CAAvB,CAAb;AACA,QAAMqD,SAAS,GAAGH,SAAS,CAAC9D,MAAV,CAAiBI,UAAnC;AACA,QAAMD,GAAG,GAAG2D,SAAS,CAAC9D,MAAV,CAAiBG,GAA7B;AAEA,QAAM0B,GAAG,GAAG,MAAMH,OAAO,CACvBsC,UAAU,CAAC1C,IAAX,CAAgB5B,OAAO,CAACoE,SAAS,CAAC9D,MAAV,CAAiBgC,UAAlB,CAAvB,CADuB,EAEvB,MAAMI,SAAS,CAACC,QAAD,EAAWzB,IAAX,EAAiB;AAAET,IAAAA,GAAF;AAAOC,IAAAA,UAAU,EAAE6D;AAAnB,GAAjB,CAFQ,EAGvBnC,KAHuB,EAIvBgC,SAAS,CAAC9D,MAAV,CAAiBE,aAJM,CAAzB;AAMA,MAAI,CAAC2B,GAAL,EAAU,MAAM,IAAI/B,oBAAJ,CAAyB,kBAAzB,CAAN;AAEV,MAAI,QAAOwB,IAAP,CAAYO,GAAZ,EAAiBqC,MAAjB,KAA4B,EAAhC,EAAoC,OAAO,QAAO5C,IAAP,CAAYO,GAAZ,EAAiBuB,QAAjB,CAA0B,KAA1B,CAAP;AACpC,SAAO,QAAO9B,IAAP,CAAYO,GAAZ,EAAiBuB,QAAjB,CAA0B,OAA1B,CAAP;AACD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,eAAee,IAAf,CACLxB,IADK,EAELN,QAFK,EAGLQ,UAHK,EAOL;AAAA,MAHAf,KAGA,uEAHQxC,IAAI,CAAC8E,WAAL,CAAiB,EAAjB,CAGR;AAAA,MAFAxD,IAEA,uEAFOtB,IAAI,CAAC8E,WAAL,CAAiB,EAAjB,CAEP;AAAA,MADAvD,OACA,uEADU,EACV;AACA,QAAMiC,GAAG,GAAGR,MAAM,CAACS,MAAP,CAAc,EAAd,EAAkBhD,QAAQ,CAACC,MAA3B,EAAmCa,OAAnC,CAAZ;AACA,SAAO6B,OAAO,CACZC,IADY,EAEZ,MAAMP,SAAS,CAACC,QAAD,EAAWzB,IAAX,EAAiBkC,GAAjB,CAFH,EAGZ,OAAOD,UAAP,KAAsB,QAAtB,GAAiC,QAAOvB,IAAP,CAAYuB,UAAZ,EAAwB,KAAxB,CAAjC,GAAkEA,UAHtD,EAIZf,KAJY,EAKZlB,IALY,EAMZkC,GANY,CAAd;AAQD;AAED,OAAO,SAASiB,cAAT,CAAyBM,GAAzB,EAA8B;AACnC,QAAMC,IAAI,GAAG,CAAC,QAAD,EAAW,IAAX,EAAiB,SAAjB,EAA4B,YAA5B,CAAb;AACA,QAAMC,UAAU,GAAG,CAAC,eAAD,EAAkB,YAAlB,EAAgC,eAAhC,EAAiD,KAAjD,EAAwD,YAAxD,CAAnB;AAEA,QAAMC,eAAe,GAAGF,IAAI,CAACG,MAAL,CAAY5C,GAAG,IAAI,CAACS,MAAM,CAACC,SAAP,CAAiBC,cAAjB,CAAgCC,IAAhC,CAAqC4B,GAArC,EAA0CxC,GAA1C,CAApB,CAAxB;AACA,MAAI2C,eAAe,CAACN,MAApB,EAA4B,MAAM,IAAItE,eAAJ,CAAqB,gDAA+C4E,eAAgB,EAApF,CAAN;AAE5B,QAAME,iBAAiB,GAAGH,UAAU,CACjCE,MADuB,CAChB5C,GAAG,IAAI,CAACS,MAAM,CAACC,SAAP,CAAiBC,cAAjB,CAAgCC,IAAhC,CAAqC4B,GAAG,CAACrE,MAAzC,EAAiD6B,GAAjD,CADQ,CAA1B;AAEA,MAAI6C,iBAAiB,CAACR,MAAtB,EAA8B,MAAM,IAAItE,eAAJ,CAAqB,gDAA+C8E,iBAAkB,EAAtF,CAAN;AAE9B,SAAO,IAAP;AACD","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,3 +1,8 @@
1
+ import _buffer from "buffer";
2
+ const {
3
+ Buffer: _Buffer
4
+ } = _buffer;
5
+
1
6
  /*
2
7
  * ISC License (ISC)
3
8
  * Copyright (c) 2021 aeternity developers
@@ -14,8 +19,12 @@
14
19
  * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
15
20
  * PERFORMANCE OF THIS SOFTWARE.
16
21
  */
17
- import { encode as rlpEncode } from 'rlp';
18
- import { hash } from './crypto-ts';
22
+ import _rlp from 'rlp';
23
+ const {
24
+ encode: rlpEncode
25
+ } = _rlp;
26
+ import { hash } from "./crypto-ts.mjs";
27
+ import { MerkleTreeHashMismatchError, MissingNodeInTreeError, UnknownPathNibbleError, UnknownNodeLengthError } from "./errors.mjs";
19
28
  var NodeType;
20
29
 
21
30
  (function (NodeType) {
@@ -26,7 +35,7 @@ var NodeType;
26
35
 
27
36
  export default class MPTree {
28
37
  static nodeHash(node) {
29
- return Buffer.from(hash(rlpEncode(node))).toString('hex');
38
+ return _Buffer.from(hash(rlpEncode(node))).toString('hex');
30
39
  }
31
40
  /**
32
41
  * Deserialize Merkle Patricia Tree
@@ -39,10 +48,10 @@ export default class MPTree {
39
48
  constructor(binary) {
40
49
  this.rootHash = binary[0].toString('hex');
41
50
  this.nodes = Object.fromEntries(binary[1].map(node => [node[0].toString('hex'), node[1]]));
42
- if (this.nodes[this.rootHash] === undefined) throw new Error('Can\'t find a node by root hash');
51
+ if (this.nodes[this.rootHash] === undefined) throw new MissingNodeInTreeError('Can\'t find a node by root hash');
43
52
  Object.entries(this.nodes).forEach(_ref => {
44
53
  let [key, node] = _ref;
45
- if (MPTree.nodeHash(node) !== key) throw new Error('Node hash is not equal to provided one');
54
+ if (MPTree.nodeHash(node) !== key) throw new MerkleTreeHashMismatchError();
46
55
  const {
47
56
  type,
48
57
  payload
@@ -52,14 +61,14 @@ export default class MPTree {
52
61
  case NodeType.Branch:
53
62
  payload.slice(0, 16).filter(n => n.length).forEach(n => {
54
63
  if (this.nodes[n.toString('hex')] === undefined) {
55
- throw new Error('Can\'t find a node by hash in branch node');
64
+ throw new MissingNodeInTreeError('Can\'t find a node by hash in branch node');
56
65
  }
57
66
  });
58
67
  break;
59
68
 
60
69
  case NodeType.Extension:
61
70
  if (this.nodes[payload[0].toString('hex')] === undefined) {
62
- throw new Error('Can\'t find a node by hash in extension node');
71
+ throw new MissingNodeInTreeError('Can\'t find a node by hash in extension node');
63
72
  }
64
73
 
65
74
  }
@@ -83,7 +92,7 @@ export default class MPTree {
83
92
  {
84
93
  const path = node[0].toString('hex');
85
94
  const nibble = parseInt(path[0], 16);
86
- if (nibble > 3) throw new Error(`Unknown path nibble: ${nibble}`);
95
+ if (nibble > 3) throw new UnknownPathNibbleError(nibble);
87
96
  const type = nibble <= 1 ? NodeType.Extension : NodeType.Leaf;
88
97
  const slice = [0, 2].includes(nibble) ? 2 : 1;
89
98
  return {
@@ -94,7 +103,7 @@ export default class MPTree {
94
103
  }
95
104
 
96
105
  default:
97
- throw new Error(`Unknown node length: ${node.length}`);
106
+ throw new UnknownNodeLengthError(node.length);
98
107
  }
99
108
  }
100
109
  /**
@@ -105,9 +114,9 @@ export default class MPTree {
105
114
 
106
115
 
107
116
  serialize() {
108
- return [Buffer.from(this.rootHash, 'hex'), Object.entries(this.nodes).map(_ref2 => {
117
+ return [_Buffer.from(this.rootHash, 'hex'), Object.entries(this.nodes).map(_ref2 => {
109
118
  let [mptHash, value] = _ref2;
110
- return [Buffer.from(mptHash, 'hex'), value];
119
+ return [_Buffer.from(mptHash, 'hex'), value];
111
120
  })];
112
121
  }
113
122
  /**
@@ -149,4 +158,4 @@ export default class MPTree {
149
158
  }
150
159
 
151
160
  }
152
- //# sourceMappingURL=mptree.js.map
161
+ //# sourceMappingURL=mptree.mjs.map