@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
@@ -1,8 +1,11 @@
1
1
  import nacl from 'tweetnacl'
2
2
  import { full as hmac } from 'tweetnacl-auth'
3
3
  import { fromString } from 'bip32-path'
4
- import { validateMnemonic, mnemonicToSeed, generateMnemonic as genMnemonic } from '@aeternity/bip39'
5
- import { decryptKey, encodeBase58Check, encryptKey } from './crypto'
4
+ import { decryptKey, encryptKey } from './crypto'
5
+ import { encode } from '../tx/builder/helpers'
6
+ import {
7
+ InvalidDerivationPathError, NotHardenedSegmentError, UnsupportedChildIndexError
8
+ } from './errors'
6
9
 
7
10
  const ED25519_CURVE = Buffer.from('ed25519 seed')
8
11
  const HARDENED_OFFSET = 0x80000000
@@ -13,7 +16,7 @@ export function derivePathFromKey (path, key) {
13
16
  const segments = path === '' ? [] : fromString(path).toPathArray()
14
17
  segments.forEach((segment, i) => {
15
18
  if (segment < HARDENED_OFFSET) {
16
- throw new Error(`Segment #${i + 1} is not hardened`)
19
+ throw new NotHardenedSegmentError(`Segment #${i + 1} is not hardened`)
17
20
  }
18
21
  })
19
22
 
@@ -22,7 +25,7 @@ export function derivePathFromKey (path, key) {
22
25
 
23
26
  export function derivePathFromSeed (path, seed) {
24
27
  if (!['m', 'm/'].includes(path.slice(0, 2))) {
25
- throw new Error('Invalid path')
28
+ throw new InvalidDerivationPathError()
26
29
  }
27
30
  const masterKey = getMasterKeyFromSeed(seed)
28
31
  return derivePathFromKey(path.slice(2), masterKey)
@@ -32,7 +35,7 @@ function formatAccount (keys) {
32
35
  const { secretKey, publicKey } = keys
33
36
  return {
34
37
  secretKey: toHex(secretKey),
35
- publicKey: `ak_${encodeBase58Check(publicKey)}`
38
+ publicKey: encode(publicKey, 'ak')
36
39
  }
37
40
  }
38
41
 
@@ -40,10 +43,6 @@ export function getKeyPair (secretKey) {
40
43
  return nacl.sign.keyPair.fromSeed(secretKey)
41
44
  }
42
45
 
43
- export function generateMnemonic () {
44
- return genMnemonic()
45
- }
46
-
47
46
  export function getMasterKeyFromSeed (seed) {
48
47
  const I = hmac(seed, ED25519_CURVE)
49
48
  const IL = I.slice(0, 32)
@@ -56,7 +55,7 @@ export function getMasterKeyFromSeed (seed) {
56
55
 
57
56
  export function deriveChild ({ secretKey, chainCode }, index) {
58
57
  if (index < HARDENED_OFFSET) {
59
- throw new Error(`Child index #${index} is not supported`)
58
+ throw new UnsupportedChildIndexError(index)
60
59
  }
61
60
  const indexBuffer = Buffer.allocUnsafe(4)
62
61
  indexBuffer.writeUInt32BE(index, 0)
@@ -72,11 +71,7 @@ export function deriveChild ({ secretKey, chainCode }, index) {
72
71
  }
73
72
  }
74
73
 
75
- export function generateSaveHDWallet (mnemonic, password) {
76
- if (!validateMnemonic(mnemonic)) {
77
- throw new Error('Invalid mnemonic')
78
- }
79
- const seed = mnemonicToSeed(mnemonic)
74
+ export function generateSaveHDWalletFromSeed (seed, password) {
80
75
  const walletKey = derivePathFromSeed('m/44h/457h', seed)
81
76
  return {
82
77
  secretKey: toHex(encryptKey(password, walletKey.secretKey)),
@@ -94,8 +89,7 @@ export function getSaveHDWalletAccounts (saveHDWallet, password, accountCount) {
94
89
  formatAccount(getKeyPair(derivePathFromKey(`${idx}h/0h/0h`, walletKey).secretKey)))
95
90
  }
96
91
 
97
- export const getHdWalletAccountFromMnemonic = (mnemonic, accountIdx) => {
98
- const seed = mnemonicToSeed(mnemonic)
92
+ export const getHdWalletAccountFromSeed = (seed, accountIdx) => {
99
93
  const walletKey = derivePathFromSeed('m/44h/457h', seed)
100
94
  const derived = derivePathFromKey(`${accountIdx}h/0h/0h`, walletKey)
101
95
  const keyPair = getKeyPair(derived.secretKey)
@@ -104,12 +98,3 @@ export const getHdWalletAccountFromMnemonic = (mnemonic, accountIdx) => {
104
98
  idx: accountIdx
105
99
  }
106
100
  }
107
-
108
- export default {
109
- getHdWalletAccountFromMnemonic,
110
- getSaveHDWalletAccounts,
111
- generateSaveHDWallet,
112
- generateMnemonic,
113
- deriveChild,
114
- getMasterKeyFromSeed
115
- }
@@ -1,10 +1,11 @@
1
1
  import nacl from 'tweetnacl'
2
- import { v4 as uuid } from 'uuid'
3
-
4
- import { encodeBase58Check } from './crypto'
2
+ import { v4 as uuid } from '@aeternity/uuid'
3
+ import { ArgonType, hash } from '@aeternity/argon2-browser/dist/argon2-bundled.min.js'
4
+ import { encode } from '../tx/builder/helpers'
5
5
  import { str2buf } from './bytes'
6
-
7
- const _sodium = require('libsodium-wrappers-sumo')
6
+ import {
7
+ ArgumentError, InvalidKeyError, UnsupportedAlgorithmError, InvalidPasswordError
8
+ } from './errors'
8
9
 
9
10
  /**
10
11
  * KeyStore module
@@ -31,24 +32,18 @@ const DERIVED_KEY_FUNCTIONS = {
31
32
  argon2id: deriveKeyUsingArgon2id
32
33
  }
33
34
 
34
- export async function deriveKeyUsingArgon2id (password, salt, options) {
35
- const { memlimit_kib: memoryCost, opslimit: timeCost } = options.kdf_params
36
- // const isBrowser = !(typeof module !== 'undefined' && module.exports)
37
-
38
- return _sodium.ready.then(async () => {
39
- // tslint:disable-next-line:typedef
40
- const sodium = _sodium
41
-
42
- const result = sodium.crypto_pwhash(
43
- 32,
44
- password,
45
- salt,
46
- timeCost,
47
- memoryCost * 1024,
48
- sodium.crypto_pwhash_ALG_ARGON2ID13
49
- )
50
- return Buffer.from(result)
51
- })
35
+ export async function deriveKeyUsingArgon2id (pass, salt, options) {
36
+ const { memlimit_kib: mem, opslimit: time } = options.kdf_params
37
+
38
+ const result = (await hash({
39
+ hashLen: 32,
40
+ pass,
41
+ salt,
42
+ time,
43
+ mem,
44
+ type: ArgonType.Argon2id
45
+ })).hash
46
+ return Buffer.from(result)
52
47
  }
53
48
 
54
49
  // CRYPTO PART
@@ -62,65 +57,66 @@ function encryptXsalsa20Poly1305 ({ plaintext, key, nonce }) {
62
57
 
63
58
  function decryptXsalsa20Poly1305 ({ ciphertext, key, nonce }) {
64
59
  const res = nacl.secretbox.open(ciphertext, nonce, key)
65
- if (!res) throw new Error('Invalid password or nonce')
60
+ if (!res) throw new InvalidPasswordError('Invalid password or nonce')
66
61
  return res
67
62
  }
68
63
 
69
64
  /**
70
65
  * Symmetric private key encryption using secret (derived) key.
71
- * @param {buffer|string} plaintext Data to be encrypted.
72
- * @param {buffer|string} key Secret key.
73
- * @param {buffer|string} nonce Randomly generated nonce.
66
+ * @param {Buffer|string} plaintext Data to be encrypted.
67
+ * @param {Buffer|string} key Secret key.
68
+ * @param {Buffer|string} nonce Randomly generated nonce.
74
69
  * @param {string=} algo Encryption algorithm (default: DEFAULTS.crypto.symmetric_alg).
75
- * @return {buffer} Encrypted data.
70
+ * @return {Buffer} Encrypted data.
76
71
  */
77
72
  function encrypt (plaintext, key, nonce, algo = DEFAULTS.crypto.symmetric_alg) {
78
- if (!CRYPTO_FUNCTIONS[algo]) throw new Error(algo + ' is not available')
73
+ if (!CRYPTO_FUNCTIONS[algo]) throw new UnsupportedAlgorithmError(algo)
79
74
  return CRYPTO_FUNCTIONS[algo].encrypt({ plaintext, nonce, key })
80
75
  }
81
76
 
82
77
  /**
83
78
  * Symmetric private key decryption using secret (derived) key.
84
- * @param {buffer|Uint8Array} ciphertext Data to be decrypted.
85
- * @param {buffer|Uint8Array} key Secret key.
86
- * @param {buffer|Uint8Array} nonce Nonce from key-object.
79
+ * @param {Buffer|Uint8Array} ciphertext Data to be decrypted.
80
+ * @param {Buffer|Uint8Array} key Secret key.
81
+ * @param {Buffer|Uint8Array} nonce Nonce from key-object.
87
82
  * @param {string=} algo Encryption algorithm.
88
- * @return {buffer} Decrypted data.
83
+ * @return {Buffer} Decrypted data.
89
84
  */
90
85
  function decrypt (ciphertext, key, nonce, algo) {
91
- if (!CRYPTO_FUNCTIONS[algo]) throw new Error(algo + ' is not available')
86
+ if (!CRYPTO_FUNCTIONS[algo]) throw new UnsupportedAlgorithmError(algo)
92
87
  return CRYPTO_FUNCTIONS[algo].decrypt({ ciphertext, nonce, key })
93
88
  }
94
89
 
95
90
  /**
96
91
  * Derive secret key from password with key derivation function.
97
92
  * @param {string} password User-supplied password.
98
- * @param {buffer|Uint8Array} nonce Randomly generated nonce.
93
+ * @param {Buffer|Uint8Array} nonce Randomly generated nonce.
99
94
  * @param {Object=} options Encryption parameters.
100
95
  * @param {string=} options.kdf Key derivation function (default: DEFAULTS.crypto.kdf).
101
96
  * @param {Object=} options.kdf_params KDF parameters (default: DEFAULTS.crypto.kdf_params).
102
- * @return {buffer} Secret key derived from password.
97
+ * @return {Buffer} Secret key derived from password.
103
98
  */
104
99
  async function deriveKey (password, nonce, options = {
105
100
  kdf_params: DEFAULTS.crypto.kdf_params,
106
101
  kdf: DEFAULTS.crypto.kdf
107
102
  }) {
108
- if (typeof password === 'undefined' || password === null || !nonce) {
109
- throw new Error('Must provide password and nonce to derive a key')
110
- }
103
+ if (!nonce) throw new ArgumentError('nonce', 'provided', nonce)
104
+ if (password == null) throw new ArgumentError('password', 'provided', password)
111
105
 
112
- if (!Object.prototype.hasOwnProperty.call(DERIVED_KEY_FUNCTIONS, options.kdf)) throw new Error('Unsupported kdf type')
106
+ if (!Object.prototype.hasOwnProperty.call(DERIVED_KEY_FUNCTIONS, options.kdf)) {
107
+ throw new UnsupportedAlgorithmError(options.kdf)
108
+ }
113
109
 
114
110
  return DERIVED_KEY_FUNCTIONS[options.kdf](password, nonce, options)
115
111
  }
116
112
 
117
113
  /**
118
114
  * Assemble key data object in secret-storage format.
119
- * @param {buffer} name Key name.
120
- * @param {buffer} derivedKey Password-derived secret key.
121
- * @param {buffer} privateKey Private key.
122
- * @param {buffer} nonce Randomly generated 24byte nonce.
123
- * @param {buffer} salt Randomly generated 16byte salt.
115
+ * @param {Buffer} name Key name.
116
+ * @param {Buffer} derivedKey Password-derived secret key.
117
+ * @param {Buffer} privateKey Private key.
118
+ * @param {Buffer} nonce Randomly generated 24byte nonce.
119
+ * @param {Buffer} salt Randomly generated 16byte salt.
124
120
  * @param {Object=} options Encryption parameters.
125
121
  * @param {string=} options.kdf Key derivation function (default: argon2id).
126
122
  * @param {string=} options.cipher Symmetric cipher (default: constants.cipher).
@@ -148,7 +144,7 @@ function marshal (name, derivedKey, privateKey, nonce, salt, options = {}) {
148
144
  export function getAddressFromPriv (secret) {
149
145
  const keys = nacl.sign.keyPair.fromSecretKey(str2buf(secret))
150
146
  const publicBuffer = Buffer.from(keys.publicKey)
151
- return `ak_${encodeBase58Check(publicBuffer)}`
147
+ return encode(publicBuffer, 'ak')
152
148
  }
153
149
 
154
150
  /**
@@ -170,7 +166,7 @@ export async function recover (password, keyObject) {
170
166
  nonce,
171
167
  keyObject.crypto.symmetric_alg
172
168
  )
173
- if (!key) throw new Error('Invalid password')
169
+ if (!key) throw new InvalidPasswordError('Invalid password')
174
170
 
175
171
  if (Buffer.from(key).length === 64) return Buffer.from(key).toString('hex')
176
172
  return Buffer.from(key).toString('utf-8')
@@ -180,7 +176,7 @@ export async function recover (password, keyObject) {
180
176
  * Export private key to keystore secret-storage format.
181
177
  * @param {String} name Key name.
182
178
  * @param {String} password User-supplied password.
183
- * @param {String} privateKey Private key.
179
+ * @param {String|Buffer} privateKey Private key as hex-string or a Buffer.
184
180
  * @param {Buffer} nonce Randomly generated 24byte nonce.
185
181
  * @param {Buffer} salt Randomly generated 16byte salt.
186
182
  * @param {Object=} options Encryption parameters.
@@ -189,12 +185,19 @@ export async function recover (password, keyObject) {
189
185
  * @param {Object=} options.kdfparams KDF parameters (default: constants.<kdf>).
190
186
  * @return {Object}
191
187
  */
192
- export async function dump (name, password, privateKey, nonce = nacl.randomBytes(24), salt = nacl.randomBytes(16), options = {}) {
188
+ export async function dump (
189
+ name,
190
+ password,
191
+ privateKey,
192
+ nonce = nacl.randomBytes(24),
193
+ salt = nacl.randomBytes(16),
194
+ options = {}
195
+ ) {
193
196
  const opt = Object.assign({}, DEFAULTS.crypto, options)
194
197
  return marshal(
195
198
  name,
196
199
  await deriveKey(password, salt, opt),
197
- privateKey,
200
+ typeof privateKey === 'string' ? Buffer.from(privateKey, 'hex') : privateKey,
198
201
  nonce,
199
202
  salt,
200
203
  opt
@@ -206,10 +209,11 @@ export function validateKeyObj (obj) {
206
209
  const cryptoKeys = ['cipher_params', 'ciphertext', 'symmetric_alg', 'kdf', 'kdf_params']
207
210
 
208
211
  const missingRootKeys = root.filter(key => !Object.prototype.hasOwnProperty.call(obj, key))
209
- if (missingRootKeys.length) throw new Error(`Invalid key file format. Require properties: ${missingRootKeys}`)
212
+ if (missingRootKeys.length) throw new InvalidKeyError(`Invalid key file format. Require properties: ${missingRootKeys}`)
210
213
 
211
- const missingCryptoKeys = cryptoKeys.filter(key => !Object.prototype.hasOwnProperty.call(obj.crypto, key))
212
- if (missingCryptoKeys.length) throw new Error(`Invalid key file format. Require properties: ${missingCryptoKeys}`)
214
+ const missingCryptoKeys = cryptoKeys
215
+ .filter(key => !Object.prototype.hasOwnProperty.call(obj.crypto, key))
216
+ if (missingCryptoKeys.length) throw new InvalidKeyError(`Invalid key file format. Require properties: ${missingCryptoKeys}`)
213
217
 
214
218
  return true
215
219
  }
@@ -18,6 +18,12 @@
18
18
  import { encode as rlpEncode } from 'rlp'
19
19
  import type { Input } from 'rlp'
20
20
  import { hash } from './crypto-ts'
21
+ import {
22
+ MerkleTreeHashMismatchError,
23
+ MissingNodeInTreeError,
24
+ UnknownPathNibbleError,
25
+ UnknownNodeLengthError
26
+ } from './errors'
21
27
 
22
28
  enum NodeType {
23
29
  Branch,
@@ -47,9 +53,9 @@ export default class MPTree {
47
53
  binary[1].map((node) => [node[0].toString('hex'), node[1]])
48
54
  )
49
55
 
50
- if (this.nodes[this.rootHash] === undefined) throw new Error('Can\'t find a node by root hash')
56
+ if (this.nodes[this.rootHash] === undefined) throw new MissingNodeInTreeError('Can\'t find a node by root hash')
51
57
  Object.entries(this.nodes).forEach(([key, node]) => {
52
- if (MPTree.nodeHash(node) !== key) throw new Error('Node hash is not equal to provided one')
58
+ if (MPTree.nodeHash(node) !== key) throw new MerkleTreeHashMismatchError()
53
59
  const { type, payload } = MPTree.parseNode(node)
54
60
  switch (type) {
55
61
  case NodeType.Branch:
@@ -58,13 +64,13 @@ export default class MPTree {
58
64
  .filter(n => n.length)
59
65
  .forEach((n) => {
60
66
  if (this.nodes[n.toString('hex')] === undefined) {
61
- throw new Error('Can\'t find a node by hash in branch node')
67
+ throw new MissingNodeInTreeError('Can\'t find a node by hash in branch node')
62
68
  }
63
69
  })
64
70
  break
65
71
  case NodeType.Extension:
66
72
  if (this.nodes[payload[0].toString('hex')] === undefined) {
67
- throw new Error('Can\'t find a node by hash in extension node')
73
+ throw new MissingNodeInTreeError('Can\'t find a node by hash in extension node')
68
74
  }
69
75
  }
70
76
  })
@@ -81,13 +87,13 @@ export default class MPTree {
81
87
  case 2: {
82
88
  const path = node[0].toString('hex')
83
89
  const nibble = parseInt(path[0], 16)
84
- if (nibble > 3) throw new Error(`Unknown path nibble: ${nibble}`)
90
+ if (nibble > 3) throw new UnknownPathNibbleError(nibble)
85
91
  const type = nibble <= 1 ? NodeType.Extension : NodeType.Leaf
86
92
  const slice = [0, 2].includes(nibble) ? 2 : 1
87
93
  return { type, payload: [node[1]], path: path.slice(slice) }
88
94
  }
89
95
  default:
90
- throw new Error(`Unknown node length: ${node.length}`)
96
+ throw new UnknownNodeLengthError(node.length)
91
97
  }
92
98
  }
93
99
 
@@ -25,6 +25,8 @@ import SwaggerClient from 'swagger-client'
25
25
  import fetch from 'cross-fetch'
26
26
  import JsonBig from './json-big'
27
27
  import { snakizeKeys, pascalizeKeys, mapObject, filterObject } from './other'
28
+ import { ArgumentCountMismatchError } from './errors'
29
+ import { snakeToPascal } from './string'
28
30
 
29
31
  let warnedAboutInternalApiUsage = false
30
32
 
@@ -50,23 +52,29 @@ export default async (
50
52
  spec = spec || await (await fetch(specUrl)).json()
51
53
  const jsonImp = disableBigNumbers ? JSON : JsonBig
52
54
 
53
- if (
54
- [
55
- 'https://compiler.aepps.com',
56
- 'https://latest.compiler.aepps.com'
57
- ].includes(new URL(specUrl).origin) ||
58
- new URL(specUrl).origin.includes('https://')
59
- ) {
60
- spec.schemes = ['https']
61
- }
62
-
63
55
  const [external, internal] = await Promise.all([specUrl, internalUrl].map((url) => {
64
56
  if (!url) return null
57
+ const pendingGetRequests = {}
65
58
  return SwaggerClient({
66
59
  url,
67
60
  spec,
61
+ requestInterceptor: request => {
62
+ if (request.method !== 'GET') return
63
+ return {
64
+ ...request,
65
+ userFetch: async (url, request) => {
66
+ const key = JSON.stringify({ ...request, url })
67
+ pendingGetRequests[key] ??= fetch(url, request)
68
+ try {
69
+ return (await pendingGetRequests[key]).clone()
70
+ } finally {
71
+ delete pendingGetRequests[key]
72
+ }
73
+ }
74
+ }
75
+ },
68
76
  responseInterceptor: response => {
69
- if (!response.text) return response
77
+ if (response.text === '' || response.text?.size === 0) return response
70
78
  const body = jsonImp.parse(response.text)
71
79
  Object.assign(response, {
72
80
  body: disableCaseConversion ? body : pascalizeKeys(body)
@@ -76,8 +84,9 @@ export default async (
76
84
  })
77
85
  }))
78
86
 
79
- const combinedApi = [
80
- ...Object.values(external.apis),
87
+ const combinedApi = Object.assign(
88
+ {},
89
+ ...external.apis.external ? [external.apis.external] : Object.values(external.apis),
81
90
  mapObject(internal?.apis.internal || {}, ([key, handler]) => [key, (...args) => {
82
91
  if (!warnedAboutInternalApiUsage) {
83
92
  console.warn(
@@ -89,45 +98,59 @@ export default async (
89
98
  }
90
99
  return handler(...args)
91
100
  }])
92
- ].reduce((acc, n) => ({ ...acc, ...n }))
101
+ )
93
102
 
94
103
  const opSpecs = Object.values(spec.paths)
95
104
  .map(paths => Object.values(paths))
96
105
  .flat()
97
106
  .reduce((acc, n) => ({ ...acc, [n.operationId]: n }), {})
98
107
 
99
- const api = mapObject(combinedApi, ([opId, handler]) => [
100
- opId.slice(0, 1).toLowerCase() + opId.slice(1),
101
- async (...args) => {
102
- const opSpec = opSpecs[opId]
103
- const parameters = [
104
- ...opSpec.parameters,
105
- ...opSpec.requestBody
106
- ? [{
107
- required: opSpec.requestBody.required,
108
- schema: Object.values(opSpec.requestBody.content)[0].schema,
109
- name: '__requestBody'
110
- }]
111
- : []
112
- ]
113
- const required = parameters.filter(param => param.required).map(p => p.name)
114
- if (args.length < required.length) throw new Error('swagger: Not enough arguments')
115
- const values = required.reduce(
116
- (acc, req, idx) => ({ ...acc, [req]: args[idx] }),
117
- args[required.length] || {}
118
- )
119
- const { __requestBody, ...stringified } = mapObject(values, ([param, value]) => {
120
- if (typeof value !== 'object') return [param, value]
121
- const rootKeys = Object.keys(parameters.find(p => p.name === param).schema.properties)
122
- const filteredValue = filterObject(
123
- disableCaseConversion ? value : snakizeKeys(value),
124
- ([key]) => rootKeys.includes(key)
108
+ const requestQueues = {}
109
+ const api = mapObject(combinedApi, ([opId, handler]) => {
110
+ const functionName = opId.slice(0, 1).toLowerCase() + snakeToPascal(opId.slice(1))
111
+ return [
112
+ functionName,
113
+ async (...args) => {
114
+ const opSpec = opSpecs[opId]
115
+ const parameters = [
116
+ ...opSpec.parameters,
117
+ ...opSpec.requestBody
118
+ ? [{
119
+ required: opSpec.requestBody.required,
120
+ schema: Object.values(opSpec.requestBody.content)[0].schema,
121
+ name: '__requestBody'
122
+ }]
123
+ : []
124
+ ]
125
+ const required = parameters.filter(param => param.required).map(p => p.name)
126
+ if (![0, 1].includes(args.length - required.length)) {
127
+ throw new ArgumentCountMismatchError(functionName, required.length, args.length)
128
+ }
129
+ const values = required.reduce(
130
+ (acc, req, idx) => ({ ...acc, [req]: args[idx] }),
131
+ args[required.length] || {}
125
132
  )
126
- return [param, jsonImp.stringify(filteredValue)]
127
- })
128
- return (await handler(stringified, { requestBody: __requestBody })).body
129
- }
130
- ])
133
+ const { __requestBody, __queue, ...stringified } = mapObject(values, ([param, value]) => {
134
+ if (typeof value !== 'object') return [param, value]
135
+ const rootKeys = Object.keys(parameters.find(p => p.name === param).schema.properties)
136
+ const filteredValue = filterObject(
137
+ disableCaseConversion ? value : snakizeKeys(value),
138
+ ([key]) => rootKeys.includes(key)
139
+ )
140
+ return [param, jsonImp.stringify(filteredValue)]
141
+ })
142
+
143
+ const request = async () => (await handler(stringified, { requestBody: __requestBody }))
144
+ .body
145
+ if (!__queue) return request()
146
+ const res = (requestQueues[__queue] ?? Promise.resolve()).then(request, request)
147
+ // TODO: remove after fixing https://github.com/aeternity/aeternity/issues/3803
148
+ // gap to ensure that node won't reject the nonce
149
+ requestQueues[__queue] = res.then(() => new Promise(resolve => setTimeout(resolve, 750)))
150
+ return res
151
+ }
152
+ ]
153
+ })
131
154
 
132
155
  return Object.assign(external, { api })
133
156
  }
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/account/base.js"],"names":["stampit","required","messageToHash","verifyMessage","verifyMessageCrypto","hash","buildTx","decode","TX_TYPE","getNetworkId","isAccountBase","acc","find","f","signTransaction","tx","opt","prefixes","innerTx","push","rlpBinaryTx","txWithNetworkId","Buffer","concat","from","join","signatures","sign","encodedTx","signed","signMessage","message","returnHex","sig","toString","signature","address","init","networkId","methods"],"mappings":"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","sourcesContent":["/*\n * ISC License (ISC)\n * Copyright (c) 2018 aeternity developers\n *\n * Permission to use, copy, modify, and/or distribute this software for any\n * purpose with or without fee is hereby granted, provided that the above\n * copyright notice and this permission notice appear in all copies.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\n * AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\n * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\n * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\n * PERFORMANCE OF THIS SOFTWARE.\n */\n\n/**\n * AccountBase module\n * @module @aeternity/aepp-sdk/es/account/base\n * @export AccountBase\n * @export isAccountBase\n */\n\nimport stampit from '@stamp/it'\nimport { required } from '@stamp/required'\nimport { messageToHash, verifyMessage as verifyMessageCrypto, hash } from '../utils/crypto'\nimport { buildTx } from '../tx/builder'\nimport { decode } from '../tx/builder/helpers'\nimport { TX_TYPE } from '../tx/builder/schema'\nimport { getNetworkId } from '../node'\n\n/**\n * Check is provided object looks like an instance of AccountBase\n * @rtype (Object) => Boolean\n * @param {Object} acc - Object to check\n * @return {Boolean}\n */\nexport const isAccountBase = (acc) => !['sign', 'address'].find(f => typeof acc[f] !== 'function')\n\n/**\n * Sign encoded transaction\n * @instance\n * @category async\n * @rtype (tx: String) => tx: Promise[String], throws: Error\n * @param {String} tx - Transaction to sign\n * @param {Object} opt - Options\n * @param {Object} [opt.innerTx] - Sign as inner transaction for PayingFor\n * @return {String} Signed transaction\n */\nasync function signTransaction (tx, opt = {}) {\n const prefixes = [this.getNetworkId(opt)]\n if (opt.innerTx) prefixes.push('inner_tx')\n const rlpBinaryTx = decode(tx, 'tx')\n const txWithNetworkId = Buffer.concat([Buffer.from(prefixes.join('-')), hash(rlpBinaryTx)])\n\n const signatures = [await this.sign(txWithNetworkId, opt)]\n return buildTx({ encodedTx: rlpBinaryTx, signatures }, TX_TYPE.signed).tx\n}\n\n/**\n * Get network Id\n * @instance\n * @function getNetworkId\n * @category async\n * @rtype () => networkId: String\n * @return {String} Network Id\n */\n\n/**\n * Sign message\n * @instance\n * @category async\n * @rtype (msg: String) => signature: Promise[String], throws: Error\n * @param {String} message - Message to sign\n * @param {Object} opt - Options\n * @return {String} Signature\n */\nasync function signMessage (message, opt = { returnHex: false }) {\n const sig = await this.sign(messageToHash(message), opt)\n return opt.returnHex ? Buffer.from(sig).toString('hex') : sig\n}\n\n/**\n * Verify message\n * @instance\n * @category async\n * @rtype (msg: String, signature: String, publicKey: String) => signature: Promise[String], throws: Error\n * @param {String} message - Message to verify\n * @param {String} signature - Signature\n * @param {Object} opt - Options\n * @return {Boolean}\n */\nasync function verifyMessage (message, signature, opt = {}) {\n return verifyMessageCrypto(\n message,\n typeof signature === 'string' ? Buffer.from(signature, 'hex') : signature,\n decode(await this.address(opt))\n )\n}\n\n/**\n * AccountBase Stamp\n *\n * Attempting to create instances from the Stamp without overwriting all\n * abstract methods using composition will result in an exception.\n *\n * Account is one of the three basic building blocks of an\n * {@link module:@aeternity/aepp-sdk/es/ae--Ae} client and provides access to a\n * signing key pair.\n * @function\n * @alias module:@aeternity/aepp-sdk/es/account\n * @rtype Stamp\n * @param {Object} [options={}] - Initializer object\n * @param {String} options.networkId - NETWORK_ID using for signing transaction's\n * @return {Object} Account instance\n */\nexport default stampit({\n init ({ networkId }) { // NETWORK_ID using for signing transaction's\n if (!this.networkId && networkId) {\n this.networkId = networkId\n }\n },\n methods: { signTransaction, getNetworkId, signMessage, verifyMessage }\n}, required({\n methods: {\n sign: required,\n address: required\n }\n}))\n\n/**\n * Sign data blob\n * @function sign\n * @instance\n * @abstract\n * @category async\n * @rtype (data: String) => data: Promise[String]\n * @param {String} data - Data blob to sign\n * @return {String} Signed data blob\n */\n\n/**\n * Obtain account address\n * @function address\n * @instance\n * @abstract\n * @category async\n * @rtype () => address: Promise[String]\n * @return {String} Public account address\n */\n"],"file":"base.js"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/account/memory.js"],"names":["AccountBase","sign","isAddressValid","isValidKeypair","isHex","decode","secrets","WeakMap","compose","init","keypair","gaId","isGa","Error","set","publicKey","secretKey","indexOf","Buffer","isBuffer","pubBuffer","from","props","methods","data","Promise","resolve","get","address"],"mappings":"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","sourcesContent":["/*\n * ISC License (ISC)\n * Copyright (c) 2018 aeternity developers\n *\n * Permission to use, copy, modify, and/or distribute this software for any\n * purpose with or without fee is hereby granted, provided that the above\n * copyright notice and this permission notice appear in all copies.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\n * AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\n * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\n * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\n * PERFORMANCE OF THIS SOFTWARE.\n */\n\n/**\n * Memory Account module\n * @module @aeternity/aepp-sdk/es/account/memory\n * @export MemoryAccount\n * @example import { MemoryAccount } from '@aeternity/aepp-sdk'\n */\n\nimport AccountBase from './base'\nimport { sign, isAddressValid, isValidKeypair } from '../utils/crypto'\nimport { isHex } from '../utils/string'\nimport { decode } from '../tx/builder/helpers'\n\nconst secrets = new WeakMap()\n\n/**\n * In-memory account stamp\n * @function\n * @alias module:@aeternity/aepp-sdk/es/account/memory\n * @rtype Stamp\n * @param {Object} [options={}] - Initializer object\n * @param {Object} options.keypair - Key pair to use\n * @param {String} options.keypair.publicKey - Public key\n * @param {String} options.keypair.secretKey - Private key\n * @return {Account}\n */\nexport default AccountBase.compose({\n init ({ keypair, gaId }) {\n this.isGa = !!gaId\n if (gaId) {\n if (!isAddressValid(gaId)) throw new Error('Invalid GA address')\n secrets.set(this, { publicKey: gaId })\n return\n }\n\n if (!keypair || typeof keypair !== 'object') throw new Error('KeyPair must be an object')\n if (!keypair.secretKey || !keypair.publicKey) throw new Error('KeyPair must must have \"secretKey\", \"publicKey\" properties')\n if (typeof keypair.publicKey !== 'string' || keypair.publicKey.indexOf('ak_') === -1) throw new Error('Public Key must be a base58c string with \"ak_\" prefix')\n if (\n !Buffer.isBuffer(keypair.secretKey) &&\n (typeof keypair.secretKey === 'string' && !isHex(keypair.secretKey))\n ) throw new Error('Secret key must be hex string or Buffer')\n\n const pubBuffer = Buffer.from(decode(keypair.publicKey, 'ak'))\n if (!isValidKeypair(Buffer.from(keypair.secretKey, 'hex'), pubBuffer)) throw new Error('Invalid Key Pair')\n\n secrets.set(this, {\n secretKey: Buffer.isBuffer(keypair.secretKey) ? keypair.secretKey : Buffer.from(keypair.secretKey, 'hex'),\n publicKey: keypair.publicKey\n })\n },\n props: { isGa: false },\n methods: {\n sign (data) {\n if (this.isGa) throw new Error('You are trying to sign data using GA account without keypair')\n return Promise.resolve(sign(data, secrets.get(this).secretKey))\n },\n address () {\n return Promise.resolve(secrets.get(this).publicKey)\n }\n }\n})\n"],"file":"memory.js"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/account/multiple.js"],"names":["AsyncInit","MemoryAccount","decode","AccountBase","isAccountBase","compose","init","accounts","address","Object","fromEntries","Promise","all","map","a","keys","selectAccount","props","deepProps","selectedAddress","methods","onAccount","_resolveAccount","sign","data","addresses","addAccount","account","select","removeAccount","console","warn","Error","keypair"],"mappings":"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","sourcesContent":["/*\n * ISC License (ISC)\n * Copyright (c) 2018 aeternity developers\n *\n * Permission to use, copy, modify, and/or distribute this software for any\n * purpose with or without fee is hereby granted, provided that the above\n * copyright notice and this permission notice appear in all copies.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\n * AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\n * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\n * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\n * PERFORMANCE OF THIS SOFTWARE.\n */\n\n/**\n * AccountMultiple module\n * @module @aeternity/aepp-sdk/es/accounts/multiple\n * @export AccountMultiple\n */\n\nimport AsyncInit from '../utils/async-init'\nimport MemoryAccount from './memory'\nimport { decode } from '../tx/builder/helpers'\nimport AccountBase, { isAccountBase } from './base'\n\n/**\n * AccountMultiple stamp\n *\n * The purpose of this stamp is to wrap up implementations of\n * {@link module:@aeternity/aepp-sdk/es/account/base--AccountBase} objects and provide a\n * common interface to all of them. List are a substantial part of\n * {@link module:@aeternity/aepp-sdk/es/ae/wallet--Wallet}s.\n * @function\n * @alias module:@aeternity/aepp-sdk/es/accounts/multiple\n * @rtype Stamp\n * @param {Object} [options={}] - Initializer object\n * @param {Array} [options.accounts] - Accounts array\n * @param {String} [options.address] - Address of account to select\n * @return {Object} AccountMultiple instance\n * @example\n * const accounts = await AccountMultiple({ accounts: [ MemmoryAccount({ keypair: 'keypair_object' }) ] })\n * await accounts.addAccount(account, { select: true }) // Add account and make it selected\n * accounts.removeAccount(address) // Remove account\n * accounts.selectAccount(address) // Select account\n * accounts.addresses() // Get available accounts\n */\nexport default AccountBase.compose(AsyncInit, {\n async init ({ accounts = [], address }) {\n this.accounts = Object.fromEntries(await Promise.all(\n accounts.map(async a => [await a.address(), a])\n ))\n address = address || Object.keys(this.accounts)[0]\n if (address) this.selectAccount(address)\n },\n props: {\n accounts: {}\n },\n deepProps: {\n selectedAddress: null\n },\n methods: {\n async address ({ onAccount = this.selectedAddress } = {}) {\n return this._resolveAccount(onAccount).address()\n },\n async sign (data, { onAccount = this.selectedAddress } = {}) {\n return this._resolveAccount(onAccount).sign(data)\n },\n /**\n * Get accounts addresses\n * @alias module:@aeternity/aepp-sdk/es/accounts/multiple\n * @function\n * @rtype () => String[]\n * @return {String[]}\n * @example addresses()\n */\n addresses () {\n return Object.keys(this.accounts)\n },\n /**\n * Add specific account\n * @alias module:@aeternity/aepp-sdk/es/accounts/multiple\n * @function\n * @category async\n * @rtype (account: Account, { select: Boolean }) => void\n * @param {Object} account - Account instance\n * @param {Object} [options={}] - Options\n * @param {Boolean} [options.select] - Select account\n * @return {void}\n * @example addAccount(account)\n */\n async addAccount (account, { select } = {}) {\n const address = await account.address()\n this.accounts[address] = account\n if (select) this.selectAccount(address)\n },\n /**\n * Remove specific account\n * @alias module:@aeternity/aepp-sdk/es/accounts/multiple\n * @function\n * @rtype (address: String) => void\n * @param {String} address - Address of account to remove\n * @return {void}\n * @example removeAccount(address)\n */\n removeAccount (address) {\n if (!this.accounts[address]) {\n console.warn(`removeAccount: Account for ${address} not available`)\n return\n }\n delete this.accounts[address]\n if (this.selectedAddress === address) this.selectedAddress = null\n },\n /**\n * Select specific account\n * @alias module:@aeternity/aepp-sdk/es/account/selector\n * @instance\n * @rtype (address: String) => void\n * @param {String} address - Address of account to select\n * @example selectAccount('ak_xxxxxxxx')\n */\n selectAccount (address) {\n decode(address, 'ak')\n if (!this.accounts[address]) throw new Error(`Account for ${address} not available`)\n this.selectedAddress = address\n },\n /**\n * Resolves an account\n * @param account can be account address (should exist in sdk instance), MemoryAccount or keypair\n * @returns {AccountBase}\n * @private\n */\n _resolveAccount (account) {\n if (account === null) {\n throw new Error('No account or wallet configured')\n } else {\n switch (typeof account) {\n case 'string':\n decode(account, 'ak')\n if (!this.accounts[account]) throw new Error(`Account for ${account} not available`)\n return this.accounts[account]\n case 'object':\n return isAccountBase(account) ? account : MemoryAccount({ keypair: account })\n default:\n throw new Error(`Unknown account type: ${typeof account} (account: ${account})`)\n }\n }\n }\n }\n})\n"],"file":"multiple.js"}
package/es/ae/aens.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/ae/aens.js"],"names":["salt","commitmentHash","ensureNameValid","getMinimumNameFee","classify","isAuctionName","validatePointers","encode","produceNameId","Ae","CLIENT_TTL","NAME_FEE","NAME_TTL","revoke","name","options","opt","defaults","nameRevokeTx","nameId","accountId","address","send","update","pointers","extendPointers","Error","getName","map","p","Object","fromEntries","reduce","acc","el","filter","key","nameUpdateTx","transfer","account","nameTransferTx","recipientId","query","o","freeze","assign","aensUpdate","aensQuery","aensTransfer","aensRevoke","extendTtl","nameTtl","id","claim","minNameFee","nameFee","gt","claimTx","nameClaimTx","nameSalt","result","nameInter","waitMined","preclaim","_salt","height","commitmentId","preclaimTx","namePreclaimTx","aensClaim","onAccount","bid","vsn","Aens","compose","methods","aensPreclaim","aensBid","deepProps","clientTtl"],"mappings":"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","sourcesContent":["/*\n * ISC License (ISC)\n * Copyright (c) 2018 aeternity developers\n *\n * Permission to use, copy, modify, and/or distribute this software for any\n * purpose with or without fee is hereby granted, provided that the above\n * copyright notice and this permission notice appear in all copies.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\n * AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\n * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\n * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\n * PERFORMANCE OF THIS SOFTWARE.\n */\n\n/**\n * Aens module - routines to interact with the æternity naming system\n *\n * The high-level description of the naming system is\n * https://github.com/aeternity/protocol/blob/master/AENS.md in the protocol\n * repository.\n * @module @aeternity/aepp-sdk/es/ae/aens\n * @export Aens\n * @example import { Aens } from '@aeternity/aepp-sdk'\n */\n\nimport { salt } from '../utils/crypto'\nimport {\n commitmentHash,\n ensureNameValid,\n getMinimumNameFee,\n classify,\n isAuctionName,\n validatePointers, encode, produceNameId\n} from '../tx/builder/helpers'\nimport Ae from './'\nimport { CLIENT_TTL, NAME_FEE, NAME_TTL } from '../tx/builder/schema'\n\n/**\n * Revoke a name\n * @instance\n * @function\n * @alias module:@aeternity/aepp-sdk/es/ae/aens\n * @category async\n * @param {String} name Name hash\n * @param {Object} [options={}] options\n * @param {(String|Object)} [options.onAccount] onAccount Make operation on specific account from sdk(you pass publickKey) or\n * using provided KeyPair(Can be keypair object or MemoryAccount)\n * @param {(Number|String|BigNumber)} [options.fee] fee\n * @param {(Number|String|BigNumber)} [options.ttl] ttl\n * @param {(Number|String|BigNumber)} [options.nonce] nonce\n * @return {Promise<Object>} Transaction result\n * @example\n * const name = 'test.chain'\n * const nameObject = await sdkInstance.aensQuery(name)\n *\n * await sdkInstance.aensRevoke(name, { fee, ttl , nonce })\n * // or\n * await nameObject.revoke({ fee, ttl, nonce })\n */\nasync function revoke (name, options = {}) {\n ensureNameValid(name)\n const opt = { ...this.Ae.defaults, ...options }\n\n const nameRevokeTx = await this.nameRevokeTx({\n ...opt,\n nameId: produceNameId(name),\n accountId: await this.address(opt)\n })\n\n return this.send(nameRevokeTx, opt)\n}\n\n/**\n * Update a name\n * @instance\n * @function\n * @category async\n * @alias module:@aeternity/aepp-sdk/es/ae/aens\n * @param {String} name AENS name\n * @param {String[]} pointers Array of name pointers. Can be oracle|account|contract|channel public key\n * @param {Object} [options={}]\n * @param {Boolean} [options.extendPointers=false] extendPointers Get the pointers from the node and merge with provided one. Pointers with the same type will be overwrited\n * @param {(String|Object)} [options.onAccount] onAccount Make operation on specific account from sdk(you pass publickKey) or\n * using provided KeyPair(Can be keypair object or MemoryAccount)\n * @param {(Number|String|BigNumber)} [options.fee] fee\n * @param {(Number|String|BigNumber)} [options.ttl] ttl\n * @param {(Number|String|BigNumber)} [options.nonce] nonce\n * @param {(Number|String|BigNumber)} [options.nameTtl=50000] nameTtl Name ttl represented in number of blocks (Max value is 50000 blocks)\n * @param {(Number|String|BigNumber)} [options.clientTtl=84600] clientTtl a suggestion as to how long any clients should cache this information\n * @return {Promise<Object>}\n * @throws Invalid pointer array error\n * @example\n * const name = 'test.chain'\n * const pointersArray = ['ak_asd23dasdas...,' 'ct_asdf34fasdasd...']\n * const nameObject = await sdkInstance.aensQuery(name)\n *\n * await sdkInstance.aensUpdate(name, pointersArray, { nameTtl, ttl, fee, nonce, clientTtl })\n * // or\n * await nameObject.update(pointersArray, { nameTtl, ttl, fee, nonce, clientTtl })\n */\nasync function update (name, pointers = [], options = { extendPointers: false }) {\n ensureNameValid(name)\n const opt = { ...this.Ae.defaults, ...options }\n if (!validatePointers(pointers)) throw new Error('Invalid pointers array')\n\n pointers = [\n ...options.extendPointers ? (await this.getName(name)).pointers : [],\n ...pointers.map(p => Object.fromEntries([['id', p], ['key', classify(p)]]))\n ].reduce((acc, el) => [...acc.filter(p => p.key !== el.key), el], [])\n const nameUpdateTx = await this.nameUpdateTx({\n ...opt,\n nameId: produceNameId(name),\n accountId: await this.address(opt),\n pointers\n })\n\n return this.send(nameUpdateTx, opt)\n}\n\n/**\n * Transfer a domain to another account\n * @instance\n * @function\n * @category async\n * @alias module:@aeternity/aepp-sdk/es/ae/aens\n * @param {String} name AENS name\n * @param {String} account Recipient account publick key\n * @param {Object} [options={}]\n * @param {(String|Object)} [options.onAccount] onAccount Make operation on specific account from sdk(you pass publickKey) or\n * using provided KeyPair(Can be keypair object or MemoryAccount)\n * @param {(Number|String|BigNumber)} [options.fee] fee\n * @param {(Number|String|BigNumber)} [options.ttl] ttl\n * @param {(Number|String|BigNumber)} [options.nonce] nonce\n * @return {Promise<Object>} Transaction result\n * @example\n * const name = 'test.chain'\n * const recipientPub = 'ak_asd23dasdas...'\n * const nameObject = await sdkInstance.aensQuery(name)\n *\n * await sdkInstance.aensTransfer(name, recipientPub, { ttl, fee, nonce })\n * // or\n * await nameObject.transfer(recipientPub, { ttl, fee, nonce })\n */\nasync function transfer (name, account, options = {}) {\n ensureNameValid(name)\n const opt = { ...this.Ae.defaults, ...options }\n\n const nameTransferTx = await this.nameTransferTx({\n ...opt,\n nameId: produceNameId(name),\n accountId: await this.address(opt),\n recipientId: account\n })\n\n return this.send(nameTransferTx, opt)\n}\n\n/**\n * Query the AENS name info from the node\n * and return the object with info and predefined functions for manipulating name\n * @instance\n * @function\n * @category async\n * @alias module:@aeternity/aepp-sdk/es/ae/aens\n * @param {String} name\n * @param {Object} opt Options\n * @return {Promise<Object>}\n * @example\n * const nameObject = sdkInstance.aensQuery('test.chain')\n * console.log(nameObject)\n * {\n * id, // name hash\n * pointers, // array of pointers\n * update, // Update name function\n * extendTtl, // Extend Ttl name function\n * transfer, // Transfer name function\n * revoke // Revoke name function\n * }\n */\nasync function query (name, opt = {}) {\n ensureNameValid(name)\n const o = await this.getName(name)\n\n return Object.freeze(Object.assign(o, {\n pointers: o.pointers || [],\n update: async (pointers = [], options = {}) => {\n return {\n ...(await this.aensUpdate(name, pointers, { ...opt, ...options })),\n ...(await this.aensQuery(name))\n }\n },\n transfer: async (account, options = {}) => {\n return {\n ...(await this.aensTransfer(name, account, { ...opt, ...options })),\n ...(await this.aensQuery(name))\n }\n },\n revoke: async (options = {}) => this.aensRevoke(name, { ...opt, ...options }),\n extendTtl: async (nameTtl = NAME_TTL, options = {}) => {\n if (!nameTtl || typeof nameTtl !== 'number' || nameTtl > NAME_TTL) throw new Error('Ttl must be an number and less then 180000 blocks')\n\n return {\n ...(await this.aensUpdate(name, o.pointers.map(p => p.id), { ...opt, ...options, nameTtl })),\n ...(await this.aensQuery(name))\n }\n }\n }))\n}\n\n/**\n * Claim a previously preclaimed registration. This can only be done after the\n * preclaim step\n * @instance\n * @function\n * @category async\n * @alias module:@aeternity/aepp-sdk/es/ae/aens\n * @param {String} name\n * @param {Number} salt Salt from pre-claim, or 0 if it's a bid\n * @param {Object} [options] options\n * @param {String|Object} [options.onAccount] onAccount Make operation on specific account from sdk(you pass publickKey) or\n * using provided KeyPair(Can be keypair object or MemoryAccount)\n * @param {Number|String|BigNumber} [options.fee] fee\n * @param {Number|String|BigNumber} [options.ttl] ttl\n * @param {Number|String|BigNumber} [options.nonce] nonce\n * @param {Number|String} [options.nameFee] Name Fee (By default calculated by sdk)\n * @return {Promise<Object>} the result of the claim\n * @example\n * const name = 'test.chain'\n * const salt = preclaimResult.salt // salt from pre-claim transaction\n *\n * await sdkInstance.aensClaim(name, salt, { ttl, fee, nonce, nameFee })\n */\nasync function claim (name, salt, options) {\n ensureNameValid(name)\n const opt = { ...this.Ae.defaults, ...options }\n\n const minNameFee = getMinimumNameFee(name)\n if (opt.nameFee !== this.Ae.defaults.nameFee && minNameFee.gt(opt.nameFee)) {\n throw new Error(`the provided fee ${opt.nameFee} is not enough to execute the claim, required: ${minNameFee}`)\n }\n opt.nameFee = opt.nameFee !== this.Ae.defaults.nameFee ? opt.nameFee : minNameFee\n const claimTx = await this.nameClaimTx({\n ...opt,\n accountId: await this.address(opt),\n nameSalt: salt,\n name: encode(name, 'nm')\n })\n\n const result = await this.send(claimTx, opt)\n if (!isAuctionName(name)) {\n const nameInter = opt.waitMined ? await this.aensQuery(name, opt) : {}\n return Object.assign(result, nameInter)\n }\n return { ...result, nameFee: opt.nameFee }\n}\n\n/**\n * Preclaim a name. Sends a hash of the name and a random salt to the node\n * @instance\n * @function\n * @category async\n * @alias module:@aeternity/aepp-sdk/es/ae/aens\n * @param {String} name\n * @param {Object} [options={}]\n * @param {String|Object} [options.onAccount] onAccount Make operation on specific account from sdk(you pass publickKey) or\n * using provided KeyPair(Can be keypair object or MemoryAccount)\n * @param {Number|String|BigNumber} [options.fee] fee\n * @param {Number|String|BigNumber} [options.ttl] ttl\n * @param {Number|String|BigNumber} [options.nonce] nonce\n * @return {Promise<Object>}\n * @example\n * const name = 'test.chain'\n * const salt = preclaimResult.salt // salt from pre-claim transaction\n *\n * await sdkInstance.aensPreclaim(name, { ttl, fee, nonce })\n * {\n * ...transactionResult,\n * claim, // Claim function (options={}) => claimTransactionResult\n * salt,\n * commitmentId\n * }\n */\nasync function preclaim (name, options = {}) {\n ensureNameValid(name)\n const opt = { ...this.Ae.defaults, ...options }\n const _salt = salt()\n const height = await this.height()\n const commitmentId = commitmentHash(name, _salt)\n\n const preclaimTx = await this.namePreclaimTx({\n ...opt,\n accountId: await this.address(opt),\n commitmentId\n })\n\n const result = await this.send(preclaimTx, opt)\n\n return Object.freeze({\n ...result,\n height,\n claim: options => this.aensClaim(name, _salt, { ...options, onAccount: opt.onAccount }),\n salt: _salt,\n commitmentId\n })\n}\n\n/**\n * Bid to name auction\n * @instance\n * @function\n * @category async\n * @alias module:@aeternity/aepp-sdk/es/ae/aens\n * @param {String} name Domain name\n * @param {String|Number} nameFee Name fee (bid fee)\n * @param {Object} [options={}]\n * @param {String|Object} [options.onAccount] onAccount Make operation on specific account from sdk(you pass publickKey) or\n * using provided KeyPair(Can be keypair object or MemoryAccount)\n * @param {Number|String|BigNumber} [options.fee] fee\n * @param {Number|String|BigNumber} [options.ttl] ttl\n * @param {Number|String|BigNumber} [options.nonce] nonce\n * @return {Promise<Object>} Transaction result\n * @example\n * const name = 'test.chain'\n * const bidFee = computeBidFee(name, startFee, incrementPercentage)\n *\n * await sdkInstance.aensBid(name, 213109412839123, { ttl, fee, nonce })\n */\nasync function bid (name, nameFee = NAME_FEE, options = {}) {\n return this.aensClaim(name, 0, { ...options, nameFee, vsn: 2 })\n}\n\n/**\n * Aens Stamp\n *\n * Aens provides name-system related methods atop\n * {@link module:@aeternity/aepp-sdk/es/ae--Ae} clients.\n * @function\n * @alias module:@aeternity/aepp-sdk/es/ae/aens\n * @rtype Stamp\n * @param {Object} [options={}] - Initializer object\n * @return {Object} Aens instance\n */\nconst Aens = Ae.compose({\n methods: {\n aensQuery: query,\n aensPreclaim: preclaim,\n aensClaim: claim,\n aensUpdate: update,\n aensTransfer: transfer,\n aensRevoke: revoke,\n aensBid: bid\n },\n deepProps: {\n Ae: {\n defaults: {\n clientTtl: CLIENT_TTL,\n nameTtl: NAME_TTL, // aec_governance:name_claim_max_expiration() => 50000\n nameFee: NAME_FEE\n }\n }\n }\n})\n\nexport default Aens\n"],"file":"aens.js"}
package/es/ae/aepp.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/ae/aepp.js"],"names":["Ae","Aens","ContractWithCompiler","Contract","AeppRpc","Chain","Tx","Oracle","compose"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AAEA,OAAOA,EAAP,MAAe,IAAf;AACA,OAAOC,IAAP,MAAiB,QAAjB;AACA,SAASC,oBAAoB,IAAIC,QAAjC,QAAiD,YAAjD;AACA,OAAOC,OAAP,MAAoB,iDAApB;AACA,OAAOC,KAAP,MAAkB,eAAlB;AACA,OAAOC,EAAP,MAAe,UAAf;AACA,OAAOC,MAAP,MAAmB,UAAnB;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,eAAeP,EAAE,CAACQ,OAAH,CAAWF,EAAX,EAAeC,MAAf,EAAuBJ,QAAvB,EAAiCF,IAAjC,EAAuCI,KAAvC,EAA8CD,OAA9C,CAAf","sourcesContent":["/*\n * ISC License (ISC)\n * Copyright (c) 2018 aeternity developers\n *\n * Permission to use, copy, modify, and/or distribute this software for any\n * purpose with or without fee is hereby granted, provided that the above\n * copyright notice and this permission notice appear in all copies.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\n * AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\n * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\n * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\n * PERFORMANCE OF THIS SOFTWARE.\n */\n\n/**\n * Aepp module\n * @module @aeternity/aepp-sdk/es/ae/aepp\n * @export Aepp\n * @example import { RpcAepp } from '@aeternity/aepp-sdk'\n */\n\nimport Ae from './'\nimport Aens from './aens'\nimport { ContractWithCompiler as Contract } from './contract'\nimport AeppRpc from '../utils/aepp-wallet-communication/rpc/aepp-rpc'\nimport Chain from '../chain/node'\nimport Tx from '../tx/tx'\nimport Oracle from './oracle'\n\n/**\n * Aepp Stamp\n *\n * Aepp provides base functionality.\n * Expected to use this stamp with a Wallet.\n * {@link module:@aeternity/aepp-sdk/es/ae--Ae} clients.\n * @function\n * @alias module:@aeternity/aepp-sdk/es/ae/aepp\n * @rtype Stamp\n * @param {Object} [options={}] - Initializer object\n * @return {Object} Aepp instance\n */\nexport default Ae.compose(Tx, Oracle, Contract, Aens, Chain, AeppRpc)\n"],"file":"aepp.js"}