@aeternity/aepp-sdk 10.0.0 → 11.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (238) 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} +20 -10
  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} +10 -9
  14. package/es/account/multiple.mjs.map +1 -0
  15. package/es/ae/{aens.js → aens.mjs} +18 -22
  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} +8 -7
  22. package/es/ae/index.mjs.map +1 -0
  23. package/es/ae/{oracle.js → oracle.mjs} +33 -16
  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} +20 -4
  32. package/es/chain/index.mjs.map +1 -0
  33. package/es/chain/{node.js → node.mjs} +121 -73
  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} +7 -7
  38. package/es/channel/index.mjs.map +1 -0
  39. package/es/channel/{internal.js → internal.mjs} +49 -32
  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} +36 -28
  48. package/es/contract/ga/index.mjs.map +1 -0
  49. package/es/errors.d.ts +284 -0
  50. package/es/index.mjs +57 -0
  51. package/es/index.mjs.map +1 -0
  52. package/es/node-pool/{index.js → index.mjs} +11 -10
  53. package/es/node-pool/index.mjs.map +1 -0
  54. package/es/{node.js → node.mjs} +9 -8
  55. package/es/node.mjs.map +1 -0
  56. package/es/tx/builder/field-types.mjs +74 -0
  57. package/es/tx/builder/field-types.mjs.map +1 -0
  58. package/es/tx/builder/{helpers.js → helpers.mjs} +114 -56
  59. package/es/tx/builder/helpers.mjs.map +1 -0
  60. package/es/tx/builder/{index.js → index.mjs} +79 -68
  61. package/es/tx/builder/index.mjs.map +1 -0
  62. package/es/tx/builder/{schema.js → schema.mjs} +11 -65
  63. package/es/tx/builder/schema.mjs.map +1 -0
  64. package/es/tx/{index.js → index.mjs} +5 -2
  65. package/es/tx/index.mjs.map +1 -0
  66. package/es/tx/{tx-object.js → tx-object.mjs} +22 -15
  67. package/es/tx/tx-object.mjs.map +1 -0
  68. package/es/tx/{tx.js → tx.mjs} +15 -14
  69. package/es/tx/tx.mjs.map +1 -0
  70. package/es/tx/{validator.js → validator.mjs} +72 -33
  71. package/es/tx/validator.mjs.map +1 -0
  72. package/es/typings/blakejs/index.d.mjs +2 -0
  73. package/es/typings/blakejs/{index.d.js.map → index.d.mjs.map} +1 -1
  74. package/es/utils/aepp-wallet-communication/connection/{browser-runtime.js → browser-runtime.mjs} +7 -6
  75. package/es/utils/aepp-wallet-communication/connection/browser-runtime.mjs.map +1 -0
  76. package/es/utils/aepp-wallet-communication/connection/{browser-window-message.js → browser-window-message.mjs} +10 -11
  77. package/es/utils/aepp-wallet-communication/connection/browser-window-message.mjs.map +1 -0
  78. package/es/utils/aepp-wallet-communication/connection/{index.js → index.mjs} +5 -2
  79. package/es/utils/aepp-wallet-communication/connection/index.mjs.map +1 -0
  80. package/es/utils/aepp-wallet-communication/{content-script-bridge.js → content-script-bridge.mjs} +6 -5
  81. package/es/utils/aepp-wallet-communication/content-script-bridge.mjs.map +1 -0
  82. package/es/utils/aepp-wallet-communication/{helpers.js → helpers.mjs} +3 -14
  83. package/es/utils/aepp-wallet-communication/helpers.mjs.map +1 -0
  84. package/es/utils/aepp-wallet-communication/rpc/{aepp-rpc.js → aepp-rpc.mjs} +113 -67
  85. package/es/utils/aepp-wallet-communication/rpc/aepp-rpc.mjs.map +1 -0
  86. package/es/utils/aepp-wallet-communication/rpc/{rpc-client.js → rpc-client.mjs} +14 -9
  87. package/es/utils/aepp-wallet-communication/rpc/rpc-client.mjs.map +1 -0
  88. package/es/utils/aepp-wallet-communication/rpc/{wallet-rpc.js → wallet-rpc.mjs} +71 -63
  89. package/es/utils/aepp-wallet-communication/rpc/wallet-rpc.mjs.map +1 -0
  90. package/es/utils/aepp-wallet-communication/schema.mjs +102 -0
  91. package/es/utils/aepp-wallet-communication/schema.mjs.map +1 -0
  92. package/es/utils/aepp-wallet-communication/{wallet-detector.js → wallet-detector.mjs} +6 -5
  93. package/es/utils/aepp-wallet-communication/wallet-detector.mjs.map +1 -0
  94. package/es/utils/{amount-formatter.js → amount-formatter.mjs} +14 -7
  95. package/es/utils/amount-formatter.mjs.map +1 -0
  96. package/es/utils/{async-init.js → async-init.mjs} +8 -11
  97. package/es/utils/async-init.mjs.map +1 -0
  98. package/es/utils/{bignumber.js → bignumber.mjs} +2 -9
  99. package/es/utils/bignumber.mjs.map +1 -0
  100. package/es/utils/{bytes.js → bytes.mjs} +16 -8
  101. package/es/utils/bytes.mjs.map +1 -0
  102. package/es/utils/{crypto-ts.js → crypto-ts.mjs} +11 -3
  103. package/es/utils/crypto-ts.mjs.map +1 -0
  104. package/es/utils/{crypto.js → crypto.mjs} +40 -105
  105. package/es/utils/crypto.mjs.map +1 -0
  106. package/es/utils/errors.mjs +689 -0
  107. package/es/utils/errors.mjs.map +1 -0
  108. package/es/utils/{hd-wallet.js → hd-wallet.mjs} +33 -34
  109. package/es/utils/hd-wallet.mjs.map +1 -0
  110. package/es/utils/{json-big.js → json-big.mjs} +1 -1
  111. package/es/utils/{json-big.js.map → json-big.mjs.map} +1 -1
  112. package/es/utils/{keystore.js → keystore.mjs} +63 -51
  113. package/es/utils/keystore.mjs.map +1 -0
  114. package/es/utils/{mptree.js → mptree.mjs} +21 -12
  115. package/es/utils/mptree.mjs.map +1 -0
  116. package/es/utils/{other.js → other.mjs} +2 -2
  117. package/es/utils/other.mjs.map +1 -0
  118. package/es/utils/{semver-satisfies.js → semver-satisfies.mjs} +1 -1
  119. package/es/utils/{semver-satisfies.js.map → semver-satisfies.mjs.map} +1 -1
  120. package/es/utils/{string.js → string.mjs} +1 -1
  121. package/es/utils/{string.js.map → string.mjs.map} +1 -1
  122. package/es/utils/{swagger.js → swagger.mjs} +46 -14
  123. package/es/utils/swagger.mjs.map +1 -0
  124. package/package.json +46 -55
  125. package/src/account/memory.js +13 -8
  126. package/src/account/multiple.js +12 -4
  127. package/src/ae/aens.js +12 -17
  128. package/src/ae/aepp.js +2 -2
  129. package/src/ae/contract.js +15 -152
  130. package/src/ae/index.js +2 -1
  131. package/src/ae/oracle.js +25 -10
  132. package/src/ae/universal.js +2 -2
  133. package/src/ae/wallet.js +2 -2
  134. package/src/chain/index.js +21 -2
  135. package/src/chain/node.js +80 -53
  136. package/src/channel/handlers.js +20 -17
  137. package/src/channel/internal.js +30 -24
  138. package/src/contract/{aci/index.js → aci.js} +152 -93
  139. package/src/contract/compiler.js +22 -117
  140. package/src/contract/ga/helpers.js +7 -5
  141. package/src/contract/ga/index.js +27 -24
  142. package/src/index.js +7 -8
  143. package/src/node-pool/index.js +9 -8
  144. package/src/node.js +5 -7
  145. package/src/tx/builder/field-types.js +61 -0
  146. package/src/tx/builder/helpers.js +113 -58
  147. package/src/tx/builder/index.js +39 -34
  148. package/src/tx/builder/schema.js +11 -25
  149. package/src/tx/tx-object.js +10 -9
  150. package/src/tx/tx.js +17 -8
  151. package/src/tx/validator.js +25 -5
  152. package/src/utils/aepp-wallet-communication/connection/browser-runtime.js +8 -3
  153. package/src/utils/aepp-wallet-communication/connection/browser-window-message.js +10 -6
  154. package/src/utils/aepp-wallet-communication/content-script-bridge.js +5 -4
  155. package/src/utils/aepp-wallet-communication/helpers.js +2 -12
  156. package/src/utils/aepp-wallet-communication/rpc/aepp-rpc.js +81 -55
  157. package/src/utils/aepp-wallet-communication/rpc/rpc-client.js +15 -6
  158. package/src/utils/aepp-wallet-communication/rpc/wallet-rpc.js +60 -49
  159. package/src/utils/aepp-wallet-communication/schema.ts +80 -0
  160. package/src/utils/aepp-wallet-communication/wallet-detector.js +3 -2
  161. package/src/utils/amount-formatter.ts +4 -3
  162. package/src/utils/async-init.js +10 -6
  163. package/src/utils/bignumber.ts +1 -9
  164. package/src/utils/bytes.ts +3 -2
  165. package/src/utils/crypto-ts.ts +2 -2
  166. package/src/utils/crypto.js +9 -92
  167. package/src/utils/errors.ts +683 -0
  168. package/src/utils/hd-wallet.js +11 -26
  169. package/src/utils/keystore.js +47 -51
  170. package/src/utils/mptree.ts +12 -6
  171. package/src/utils/swagger.js +67 -44
  172. package/CHANGELOG.md +0 -1603
  173. package/es/account/base.js.map +0 -1
  174. package/es/account/memory.js.map +0 -1
  175. package/es/account/multiple.js.map +0 -1
  176. package/es/ae/aens.js.map +0 -1
  177. package/es/ae/aepp.js.map +0 -1
  178. package/es/ae/contract.js +0 -312
  179. package/es/ae/contract.js.map +0 -1
  180. package/es/ae/index.js.map +0 -1
  181. package/es/ae/oracle.js.map +0 -1
  182. package/es/ae/universal.js.map +0 -1
  183. package/es/ae/wallet.js.map +0 -1
  184. package/es/chain/index.js.map +0 -1
  185. package/es/chain/node.js.map +0 -1
  186. package/es/channel/handlers.js.map +0 -1
  187. package/es/channel/index.js.map +0 -1
  188. package/es/channel/internal.js.map +0 -1
  189. package/es/contract/aci/helpers.js +0 -298
  190. package/es/contract/aci/helpers.js.map +0 -1
  191. package/es/contract/aci/index.js +0 -361
  192. package/es/contract/aci/index.js.map +0 -1
  193. package/es/contract/aci/transformation.js +0 -66
  194. package/es/contract/aci/transformation.js.map +0 -1
  195. package/es/contract/compiler.js +0 -244
  196. package/es/contract/compiler.js.map +0 -1
  197. package/es/contract/ga/helpers.js +0 -22
  198. package/es/contract/ga/helpers.js.map +0 -1
  199. package/es/contract/ga/index.js.map +0 -1
  200. package/es/contract/index.js +0 -162
  201. package/es/contract/index.js.map +0 -1
  202. package/es/index.js +0 -57
  203. package/es/index.js.map +0 -1
  204. package/es/node-pool/index.js.map +0 -1
  205. package/es/node.js.map +0 -1
  206. package/es/tx/builder/helpers.js.map +0 -1
  207. package/es/tx/builder/index.js.map +0 -1
  208. package/es/tx/builder/schema.js.map +0 -1
  209. package/es/tx/index.js.map +0 -1
  210. package/es/tx/tx-object.js.map +0 -1
  211. package/es/tx/tx.js.map +0 -1
  212. package/es/tx/validator.js.map +0 -1
  213. package/es/typings/blakejs/index.d.js +0 -2
  214. package/es/utils/aepp-wallet-communication/connection/browser-runtime.js.map +0 -1
  215. package/es/utils/aepp-wallet-communication/connection/browser-window-message.js.map +0 -1
  216. package/es/utils/aepp-wallet-communication/connection/index.js.map +0 -1
  217. package/es/utils/aepp-wallet-communication/content-script-bridge.js.map +0 -1
  218. package/es/utils/aepp-wallet-communication/helpers.js.map +0 -1
  219. package/es/utils/aepp-wallet-communication/rpc/aepp-rpc.js.map +0 -1
  220. package/es/utils/aepp-wallet-communication/rpc/rpc-client.js.map +0 -1
  221. package/es/utils/aepp-wallet-communication/rpc/wallet-rpc.js.map +0 -1
  222. package/es/utils/aepp-wallet-communication/schema.js +0 -107
  223. package/es/utils/aepp-wallet-communication/schema.js.map +0 -1
  224. package/es/utils/aepp-wallet-communication/wallet-detector.js.map +0 -1
  225. package/es/utils/amount-formatter.js.map +0 -1
  226. package/es/utils/async-init.js.map +0 -1
  227. package/es/utils/bignumber.js.map +0 -1
  228. package/es/utils/bytes.js.map +0 -1
  229. package/es/utils/crypto-ts.js.map +0 -1
  230. package/es/utils/crypto.js.map +0 -1
  231. package/es/utils/hd-wallet.js.map +0 -1
  232. package/es/utils/keystore.js.map +0 -1
  233. package/es/utils/mptree.js.map +0 -1
  234. package/es/utils/other.js.map +0 -1
  235. package/es/utils/swagger.js.map +0 -1
  236. package/src/contract/aci/transformation.js +0 -72
  237. package/src/contract/index.js +0 -163
  238. package/src/utils/aepp-wallet-communication/schema.js +0 -108
@@ -6,14 +6,28 @@
6
6
  * @example
7
7
  * import WalletRpc from '@aeternity/aepp-sdk/es/utils/aepp-wallet-communication/rpc/wallet-rpc'
8
8
  */
9
- import { v4 as uuid } from 'uuid';
10
- import Ae from '../../../ae';
11
- import verifyTransaction from '../../../tx/validator';
12
- import AccountMultiple from '../../../account/multiple';
13
- import TxObject from '../../../tx/tx-object';
14
- import RpcClient from './rpc-client';
15
- import { getBrowserAPI, getHandler, isValidAccounts, message, resolveOnAccount, sendResponseMessage } from '../helpers';
16
- import { ERRORS, METHODS, RPC_STATUS, VERSION, WALLET_TYPE } from '../schema';
9
+ import { v4 as uuid } from '@aeternity/uuid';
10
+ import Ae from "../../../ae/index.mjs";
11
+ import verifyTransaction from "../../../tx/validator.mjs";
12
+ import AccountMultiple from "../../../account/multiple.mjs";
13
+ import TxObject from "../../../tx/tx-object.mjs";
14
+ import RpcClient from "./rpc-client.mjs";
15
+ import { getBrowserAPI, getHandler, isValidAccounts, message, sendResponseMessage } from "../helpers.mjs";
16
+ import { ERRORS, METHODS, RPC_STATUS, VERSION, WALLET_TYPE } from "../schema.mjs";
17
+ import { ArgumentError, TypeError, UnknownRpcClientError } from "../../errors.mjs";
18
+ import { isAccountBase } from "../../../account/base.mjs";
19
+
20
+ const resolveOnAccount = function (addresses, onAccount) {
21
+ let opt = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
22
+
23
+ if (!addresses.find(a => a === onAccount)) {
24
+ if (typeof opt.onAccount !== 'object' || !isAccountBase(opt.onAccount)) throw new TypeError('Provided onAccount should be an AccountBase');
25
+ onAccount = opt.onAccount;
26
+ }
27
+
28
+ return onAccount;
29
+ };
30
+
17
31
  const NOTIFICATIONS = {
18
32
  [METHODS.closeConnection]: (instance, _ref) => {
19
33
  let {
@@ -29,12 +43,13 @@ const RESPONSES = {};
29
43
  const REQUESTS = {
30
44
  // Store client info and prepare two fn for each client `connect` and `denyConnection`
31
45
  // which automatically prepare and send response for that client
32
- [METHODS.aepp.connect](callInstance, instance, client, _ref2) {
46
+ [METHODS.connect](callInstance, instance, client, _ref2) {
33
47
  let {
34
48
  name,
35
49
  networkId,
36
50
  version,
37
- icons
51
+ icons,
52
+ connectNode
38
53
  } = _ref2;
39
54
  // Check if protocol and network is compatible with wallet
40
55
  if (version !== VERSION) return {
@@ -46,19 +61,28 @@ const REQUESTS = {
46
61
  name,
47
62
  networkId,
48
63
  icons,
49
- version
64
+ version,
65
+ origin: window.location.origin,
66
+ connectNode
50
67
  }); // Call onConnection callBack to notice Wallet about new AEPP
51
68
 
52
69
  return callInstance('onConnection', {
53
70
  name,
54
71
  networkId,
55
72
  version
56
- }, () => {
73
+ }, function () {
74
+ let {
75
+ shareNode
76
+ } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
57
77
  client.updateInfo({
58
- status: RPC_STATUS.CONNECTED
78
+ status: shareNode ? RPC_STATUS.NODE_BINDED : RPC_STATUS.CONNECTED
59
79
  });
60
80
  return {
61
- result: instance.getWalletInfo()
81
+ result: { ...instance.getWalletInfo(),
82
+ ...(shareNode && {
83
+ node: instance.selectedNode
84
+ })
85
+ }
62
86
  };
63
87
  }, error => {
64
88
  client.updateInfo({
@@ -70,7 +94,7 @@ const REQUESTS = {
70
94
  });
71
95
  },
72
96
 
73
- [METHODS.aepp.subscribeAddress](callInstance, instance, client, _ref3) {
97
+ [METHODS.subscribeAddress](callInstance, instance, client, _ref3) {
74
98
  let {
75
99
  type,
76
100
  value
@@ -89,7 +113,11 @@ const REQUESTS = {
89
113
 
90
114
  try {
91
115
  const clientAccounts = accounts || instance.getAccounts();
92
- if (!isValidAccounts(clientAccounts)) throw new Error('Invalid provided accounts object');
116
+
117
+ if (!isValidAccounts(clientAccounts)) {
118
+ throw new TypeError('Invalid provided accounts object');
119
+ }
120
+
93
121
  const subscription = client.updateSubscription(type, value);
94
122
  client.setAccounts(clientAccounts, {
95
123
  forceNotification: true
@@ -103,9 +131,7 @@ const REQUESTS = {
103
131
  } catch (e) {
104
132
  if (instance.debug) console.error(e);
105
133
  return {
106
- error: ERRORS.internalError({
107
- msg: e.message
108
- })
134
+ error: ERRORS.internalError(e.message)
109
135
  };
110
136
  }
111
137
  }, error => ({
@@ -113,7 +139,7 @@ const REQUESTS = {
113
139
  }));
114
140
  },
115
141
 
116
- [METHODS.aepp.address](callInstance, instance, client) {
142
+ [METHODS.address](callInstance, instance, client) {
117
143
  // Authorization check
118
144
  if (!client.isConnected()) return {
119
145
  error: ERRORS.notAuthorize()
@@ -133,7 +159,7 @@ const REQUESTS = {
133
159
  }));
134
160
  },
135
161
 
136
- [METHODS.aepp.sign](callInstance, instance, client, options) {
162
+ [METHODS.sign](callInstance, instance, client, options) {
137
163
  const {
138
164
  tx,
139
165
  onAccount,
@@ -152,9 +178,7 @@ const REQUESTS = {
152
178
 
153
179
  if (!client.hasAccessToAccount(address)) {
154
180
  return {
155
- error: ERRORS.permissionDeny({
156
- account: address
157
- })
181
+ error: ERRORS.permissionDeny(address)
158
182
  };
159
183
  } // NetworkId check
160
184
 
@@ -179,9 +203,7 @@ const REQUESTS = {
179
203
  } catch (e) {
180
204
  if (instance.debug) console.error(e);
181
205
  return {
182
- error: ERRORS.internalError({
183
- msg: e.message
184
- })
206
+ error: ERRORS.internalError(e.message)
185
207
  };
186
208
  }
187
209
 
@@ -220,7 +242,7 @@ const REQUESTS = {
220
242
  }));
221
243
  },
222
244
 
223
- [METHODS.aepp.signMessage](callInstance, instance, client, _ref4) {
245
+ [METHODS.signMessage](callInstance, instance, client, _ref4) {
224
246
  let {
225
247
  message,
226
248
  onAccount
@@ -233,9 +255,7 @@ const REQUESTS = {
233
255
 
234
256
  if (!client.hasAccessToAccount(address)) {
235
257
  return {
236
- error: ERRORS.permissionDeny({
237
- account: address
238
- })
258
+ error: ERRORS.permissionDeny(address)
239
259
  };
240
260
  }
241
261
 
@@ -258,9 +278,7 @@ const REQUESTS = {
258
278
  } catch (e) {
259
279
  if (instance.debug) console.error(e);
260
280
  return {
261
- error: ERRORS.internalError({
262
- msg: e.message
263
- })
281
+ error: ERRORS.internalError(e.message)
264
282
  };
265
283
  }
266
284
  }, error => ({
@@ -327,7 +345,7 @@ const handleMessage = (instance, id) => async (msg, origin) => {
327
345
  * @param {Function} onSign Call-back function for incoming AEPP sign request
328
346
  * @param {Function} onAskAccounts Call-back function for incoming AEPP get address request
329
347
  * @param {Function} onMessageSign Call-back function for incoming AEPP sign message request
330
- * Second argument of incoming call-backs contain function for accept/deny request
348
+ * Second argument of incoming call-backs contain function for accept/deny request
331
349
  * @param {Function} onDisconnect Call-back function for disconnect event
332
350
  * @return {Object}
333
351
  */
@@ -339,31 +357,16 @@ export default Ae.compose(AccountMultiple, {
339
357
 
340
358
  let {
341
359
  name,
342
- onConnection,
343
- onSubscription,
344
- onSign,
345
- onDisconnect,
346
- onAskAccounts,
347
- onMessageSign,
348
- forceValidation = false,
349
- debug = false
360
+ debug = false,
361
+ ...other
350
362
  } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
363
+ ['onConnection', 'onSubscription', 'onSign', 'onDisconnect', 'onAskAccounts', 'onMessageSign'].forEach(event => {
364
+ const handler = other[event];
365
+ if (typeof handler !== 'function') throw new ArgumentError(event, 'a function', handler);
366
+ this[event] = handler;
367
+ });
351
368
  this.debug = debug;
352
- const eventsHandlers = ['onConnection', 'onSubscription', 'onSign', 'onDisconnect', 'onMessageSign']; // CallBacks for events
353
-
354
- this.onConnection = onConnection;
355
- this.onSubscription = onSubscription;
356
- this.onSign = onSign;
357
- this.onDisconnect = onDisconnect;
358
- this.onAskAccounts = onAskAccounts;
359
- this.onMessageSign = onMessageSign;
360
369
  this.rpcClients = {};
361
- eventsHandlers.forEach(event => {
362
- if (!forceValidation && typeof this[event] !== 'function') {
363
- throw new Error(`Call-back for ${event} must be an function!`);
364
- }
365
- }); //
366
-
367
370
  this.name = name;
368
371
  this.id = uuid();
369
372
 
@@ -427,9 +430,14 @@ export default Ae.compose(AccountMultiple, {
427
430
  _selectNode(name); // Send notification 'update.network' to all Aepp which connected
428
431
 
429
432
 
430
- Object.values(this.rpcClients).filter(client => client.isConnected()).forEach(client => client.sendMessage(message(METHODS.updateNetwork, {
431
- networkId: this.getNetworkId()
432
- }), true));
433
+ Object.values(this.rpcClients).filter(client => client.isConnected()).forEach(client => {
434
+ client.sendMessage(message(METHODS.updateNetwork, {
435
+ networkId: this.getNetworkId(),
436
+ ...(client.info.status === RPC_STATUS.NODE_BINDED && {
437
+ node: this.selectedNode
438
+ })
439
+ }), true);
440
+ });
433
441
  };
434
442
  },
435
443
 
@@ -448,7 +456,7 @@ export default Ae.compose(AccountMultiple, {
448
456
  forceConnectionClose = false
449
457
  } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
450
458
  const client = this.rpcClients[id];
451
- if (!client) throw new Error(`RpcClient with id ${id} do not exist`);
459
+ if (!client) throw new UnknownRpcClientError(id);
452
460
  client.disconnect(forceConnectionClose);
453
461
  delete this.rpcClients[id];
454
462
  },
@@ -488,7 +496,7 @@ export default Ae.compose(AccountMultiple, {
488
496
  shareWalletInfo(postFn) {
489
497
  postFn({
490
498
  jsonrpc: '2.0',
491
- ...message(METHODS.wallet.readyToConnect, this.getWalletInfo())
499
+ ...message(METHODS.readyToConnect, this.getWalletInfo())
492
500
  });
493
501
  },
494
502
 
@@ -530,4 +538,4 @@ export default Ae.compose(AccountMultiple, {
530
538
 
531
539
  }
532
540
  });
533
- //# sourceMappingURL=wallet-rpc.js.map
541
+ //# sourceMappingURL=wallet-rpc.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/utils/aepp-wallet-communication/rpc/wallet-rpc.js"],"names":["v4","uuid","Ae","verifyTransaction","AccountMultiple","TxObject","RpcClient","getBrowserAPI","getHandler","isValidAccounts","message","sendResponseMessage","ERRORS","METHODS","RPC_STATUS","VERSION","WALLET_TYPE","ArgumentError","TypeError","UnknownRpcClientError","isAccountBase","resolveOnAccount","addresses","onAccount","opt","find","a","NOTIFICATIONS","closeConnection","instance","client","msg","disconnect","onDisconnect","params","RESPONSES","REQUESTS","connect","callInstance","name","networkId","version","icons","connectNode","error","unsupportedProtocol","updateInfo","status","WAITING_FOR_CONNECTION_APPROVE","origin","window","location","shareNode","NODE_BINDED","CONNECTED","result","getWalletInfo","node","selectedNode","CONNECTION_REJECTED","connectionDeny","subscribeAddress","type","value","isConnected","notAuthorize","accounts","clientAccounts","getAccounts","subscription","updateSubscription","setAccounts","forceNotification","address","e","debug","console","internalError","rejectedByUser","isSubscribed","Object","keys","current","connected","sign","options","tx","returnSigned","currentAccount","hasAccessToAccount","permissionDeny","getNetworkId","unsupportedNetwork","txObject","fromString","rawTx","onAcc","t","signedTransaction","signTransaction","transactionHash","send","verify","validation","length","invalidTransaction","broadcastFailed","signMessage","signature","returnHex","handleMessage","id","rpcClients","prototype","hasOwnProperty","call","callbacks","method","methodName","accept","deny","Promise","resolve","errorObjectOrHandler","response","compose","init","other","forEach","event","handler","_selectAccount","selectAccount","bind","_addAccount","addAccount","_selectNode","selectNode","condition","values","filter","entries","k","v","reduce","acc","account","select","meta","sendMessage","updateNetwork","info","methods","removeRpcClient","forceConnectionClose","addRpcClient","clientConnection","WAITING_FOR_CONNECTION_REQUEST","connection","handlers","shareWalletInfo","postFn","jsonrpc","readyToConnect","runtime","extension","selectedAddress"],"mappings":"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","sourcesContent":["/**\n * RPC handler for WAELLET side\n *\n * @module @aeternity/aepp-sdk/es/utils/aepp-wallet-communication/rpc/wallet-rpc\n * @export WalletRpc\n * @example\n * import WalletRpc from '@aeternity/aepp-sdk/es/utils/aepp-wallet-communication/rpc/wallet-rpc'\n */\nimport { v4 as uuid } from '@aeternity/uuid'\nimport Ae from '../../../ae'\nimport verifyTransaction from '../../../tx/validator'\nimport AccountMultiple from '../../../account/multiple'\nimport TxObject from '../../../tx/tx-object'\nimport RpcClient from './rpc-client'\nimport { getBrowserAPI, getHandler, isValidAccounts, message, sendResponseMessage } from '../helpers'\nimport { ERRORS, METHODS, RPC_STATUS, VERSION, WALLET_TYPE } from '../schema'\nimport { ArgumentError, TypeError, UnknownRpcClientError } from '../../errors'\nimport { isAccountBase } from '../../../account/base'\n\nconst resolveOnAccount = (addresses, onAccount, opt = {}) => {\n if (!addresses.find(a => a === onAccount)) {\n if (typeof opt.onAccount !== 'object' || !isAccountBase(opt.onAccount)) throw new TypeError('Provided onAccount should be an AccountBase')\n onAccount = opt.onAccount\n }\n return onAccount\n}\n\nconst NOTIFICATIONS = {\n [METHODS.closeConnection]: (instance, { client }) =>\n async (msg) => {\n client.disconnect(true)\n instance.onDisconnect(msg.params, client)\n }\n}\n\nconst RESPONSES = {}\n\nconst REQUESTS = {\n // Store client info and prepare two fn for each client `connect` and `denyConnection`\n // which automatically prepare and send response for that client\n [METHODS.connect] (\n callInstance,\n instance,\n client,\n { name, networkId, version, icons, connectNode }) {\n // Check if protocol and network is compatible with wallet\n if (version !== VERSION) return { error: ERRORS.unsupportedProtocol() }\n // Store new AEPP and wait for connection approve\n client.updateInfo({\n status: RPC_STATUS.WAITING_FOR_CONNECTION_APPROVE,\n name,\n networkId,\n icons,\n version,\n origin: window.location.origin,\n connectNode\n })\n\n // Call onConnection callBack to notice Wallet about new AEPP\n return callInstance(\n 'onConnection',\n { name, networkId, version },\n ({ shareNode } = {}) => {\n client.updateInfo({ status: shareNode ? RPC_STATUS.NODE_BINDED : RPC_STATUS.CONNECTED })\n return {\n result: {\n ...instance.getWalletInfo(),\n ...(shareNode && { node: instance.selectedNode })\n }\n }\n },\n (error) => {\n client.updateInfo({ status: RPC_STATUS.CONNECTION_REJECTED })\n return { error: ERRORS.connectionDeny(error) }\n }\n )\n },\n [METHODS.subscribeAddress] (callInstance, instance, client, { type, value }) {\n // Authorization check\n if (!client.isConnected()) return { error: ERRORS.notAuthorize() }\n\n return callInstance(\n 'onSubscription',\n { type, value },\n async ({ accounts } = {}) => {\n try {\n const clientAccounts = accounts || instance.getAccounts()\n if (!isValidAccounts(clientAccounts)) {\n throw new TypeError('Invalid provided accounts object')\n }\n const subscription = client.updateSubscription(type, value)\n client.setAccounts(clientAccounts, { forceNotification: true })\n return {\n result: {\n subscription,\n address: clientAccounts\n }\n }\n } catch (e) {\n if (instance.debug) console.error(e)\n return { error: ERRORS.internalError(e.message) }\n }\n },\n (error) => ({ error: ERRORS.rejectedByUser(error) })\n )\n },\n [METHODS.address] (callInstance, instance, client) {\n // Authorization check\n if (!client.isConnected()) return { error: ERRORS.notAuthorize() }\n if (!client.isSubscribed()) return { error: ERRORS.notAuthorize() }\n\n return callInstance(\n 'onAskAccounts',\n {},\n ({ accounts } = {}) => ({\n result: accounts ||\n [...Object.keys(client.accounts.current), ...Object.keys(client.accounts.connected)]\n }),\n (error) => ({ error: ERRORS.rejectedByUser(error) })\n )\n },\n [METHODS.sign] (callInstance, instance, client, options) {\n const { tx, onAccount, networkId, returnSigned = false } = options\n const address = onAccount || client.currentAccount\n // Update client with new networkId\n networkId && client.updateInfo({ networkId })\n // Authorization check\n if (!client.isConnected()) return { error: ERRORS.notAuthorize() }\n // Account permission check\n if (!client.hasAccessToAccount(address)) {\n return { error: ERRORS.permissionDeny(address) }\n }\n // NetworkId check\n if (!networkId || networkId !== instance.getNetworkId()) {\n return { error: ERRORS.unsupportedNetwork() }\n }\n\n return callInstance(\n 'onSign',\n { tx, returnSigned, onAccount: address, txObject: TxObject.fromString(tx) },\n async (rawTx, opt = {}) => {\n let onAcc\n try {\n onAcc = resolveOnAccount(instance.addresses(), address, opt)\n } catch (e) {\n if (instance.debug) console.error(e)\n return { error: ERRORS.internalError(e.message) }\n }\n try {\n const t = rawTx || tx\n const result = returnSigned\n ? { signedTransaction: await instance.signTransaction(t, { onAccount: onAcc }) }\n : { transactionHash: await instance.send(t, { onAccount: onAcc, verify: false }) }\n return { result }\n } catch (e) {\n if (!returnSigned) {\n // Validate transaction\n const validation = await verifyTransaction(rawTx || tx, instance.selectedNode.instance)\n if (validation.length) return { error: ERRORS.invalidTransaction(validation) }\n // Send broadcast failed error to aepp\n return { error: ERRORS.broadcastFailed(e.message) }\n }\n throw e\n }\n },\n (error) => ({ error: ERRORS.rejectedByUser(error) })\n )\n },\n [METHODS.signMessage] (callInstance, instance, client, { message, onAccount }) {\n // Authorization check\n if (!client.isConnected()) return { error: ERRORS.notAuthorize() }\n const address = onAccount || client.currentAccount\n if (!client.hasAccessToAccount(address)) {\n return { error: ERRORS.permissionDeny(address) }\n }\n\n return callInstance(\n 'onMessageSign',\n { message, onAccount: address },\n async (opt = {}) => {\n try {\n const onAcc = resolveOnAccount(instance.addresses(), address, opt)\n return {\n result: {\n signature: await instance.signMessage(message, {\n onAccount: onAcc,\n returnHex: true\n })\n }\n }\n } catch (e) {\n if (instance.debug) console.error(e)\n return { error: ERRORS.internalError(e.message) }\n }\n },\n (error) => ({ error: ERRORS.rejectedByUser(error) })\n )\n }\n}\n\nconst handleMessage = (instance, id) => async (msg, origin) => {\n const client = instance.rpcClients[id]\n if (!msg.id) {\n return getHandler(\n NOTIFICATIONS, msg, { debug: instance.debug }\n )(instance, { client })(msg, origin)\n }\n if (Object.prototype.hasOwnProperty.call(client.callbacks, msg.id)) {\n return getHandler(RESPONSES, msg, { debug: instance.debug })(instance, { client })(msg, origin)\n } else {\n const { id, method } = msg\n const callInstance = (methodName, params, accept, deny) => () => new Promise(resolve => {\n instance[methodName](\n client,\n {\n id,\n method,\n params,\n accept: (...args) => resolve(accept(...args)),\n deny: (...args) => resolve(deny(...args))\n },\n origin\n )\n })\n // TODO make one structure for handler functions\n const errorObjectOrHandler = getHandler(REQUESTS, msg, { debug: instance.debug })(\n callInstance, instance, client, msg.params\n )\n const response = typeof errorObjectOrHandler === 'function' ? await errorObjectOrHandler() : errorObjectOrHandler\n sendResponseMessage(client)(id, method, response)\n }\n}\n\n/**\n * Contain functionality for aepp interaction and managing multiple aepps\n * @alias module:@aeternity/aepp-sdk/es/utils/aepp-wallet-communication/rpc/wallet-rpc\n * @function\n * @rtype Stamp\n * @param {Object} param Init params object\n * @param {String=} [param.name] Wallet name\n * @param {Function} onConnection Call-back function for incoming AEPP connection\n * @param {Function} onSubscription Call-back function for incoming AEPP account subscription\n * @param {Function} onSign Call-back function for incoming AEPP sign request\n * @param {Function} onAskAccounts Call-back function for incoming AEPP get address request\n * @param {Function} onMessageSign Call-back function for incoming AEPP sign message request\n * Second argument of incoming call-backs contain function for accept/deny request\n * @param {Function} onDisconnect Call-back function for disconnect event\n * @return {Object}\n */\nexport default Ae.compose(AccountMultiple, {\n init ({\n name,\n debug = false,\n ...other\n } = {}) {\n [\n 'onConnection', 'onSubscription', 'onSign', 'onDisconnect', 'onAskAccounts', 'onMessageSign'\n ].forEach(event => {\n const handler = other[event]\n if (typeof handler !== 'function') throw new ArgumentError(event, 'a function', handler)\n this[event] = handler\n })\n\n this.debug = debug\n this.rpcClients = {}\n this.name = name\n this.id = uuid()\n\n const _selectAccount = this.selectAccount.bind(this)\n const _addAccount = this.addAccount.bind(this)\n const _selectNode = this.selectNode.bind(this)\n\n // Overwrite AE methods\n this.selectAccount = (address, { condition = () => true } = {}) => {\n _selectAccount(address)\n Object.values(this.rpcClients)\n .filter(client => client.isConnected() && client.isSubscribed() &&\n client.hasAccessToAccount(address) && condition(client))\n .forEach(client => client.setAccounts({\n current: { [address]: {} },\n connected: {\n ...client.accounts.current,\n ...Object.entries(client.accounts.connected)\n .filter(([k, v]) => k !== address)\n .reduce((acc, [k, v]) => ({ ...acc, [k]: v }), {})\n }\n }))\n }\n this.addAccount = async (account, { select, meta = {}, condition = () => true } = {}) => {\n await _addAccount(account, { select })\n const address = await account.address()\n // Send notification 'update.address' to all Aepp which are subscribed for connected accounts\n Object.values(this.rpcClients)\n .filter(client => client.isConnected() && client.isSubscribed() && condition(client))\n .forEach(client => client.setAccounts({\n current: { ...select ? { [address]: meta } : client.accounts.current },\n connected: {\n ...select ? client.accounts.current : { [address]: meta },\n ...client.accounts.connected\n }\n }))\n }\n this.selectNode = (name) => {\n _selectNode(name)\n // Send notification 'update.network' to all Aepp which connected\n Object.values(this.rpcClients)\n .filter(client => client.isConnected())\n .forEach(client => {\n client.sendMessage(\n message(METHODS.updateNetwork, {\n networkId: this.getNetworkId(),\n ...(client.info.status === RPC_STATUS.NODE_BINDED && { node: this.selectedNode })\n }), true)\n })\n }\n },\n methods: {\n /**\n * Remove specific RpcClient by ID\n * @function removeRpcClient\n * @instance\n * @rtype (id: string) => void\n * @param {String} id Client ID\n * @param {Object} [opt = {}]\n * @return {void}\n */\n removeRpcClient (id, { forceConnectionClose = false } = {}) {\n const client = this.rpcClients[id]\n if (!client) throw new UnknownRpcClientError(id)\n client.disconnect(forceConnectionClose)\n delete this.rpcClients[id]\n },\n /**\n * Add new client by AEPP connection\n * @function addRpcClient\n * @instance\n * @rtype (clientConnection: Object) => Object\n * @param {Object} clientConnection AEPP connection object\n * @return {String} Client ID\n */\n addRpcClient (clientConnection) {\n // @TODO detect if aepp has some history based on origin????\n // if yes use this instance for connection\n const id = uuid()\n this.rpcClients[id] = RpcClient({\n id,\n info: { status: RPC_STATUS.WAITING_FOR_CONNECTION_REQUEST },\n connection: clientConnection,\n handlers: [handleMessage(this, id), this.onDisconnect]\n })\n return id\n },\n /**\n * Share wallet info\n * Send shareWalletInfo message to notify AEPP about wallet\n * @function shareWalletInfo\n * @instance\n * @rtype (postFn: Function) => void\n * @param {Function} postFn Send message function like `(msg) => void`\n * @return {void}\n */\n shareWalletInfo (postFn) {\n postFn({\n jsonrpc: '2.0',\n ...message(METHODS.readyToConnect, this.getWalletInfo())\n })\n },\n /**\n * Get Wallet info object\n * @function getWalletInfo\n * @instance\n * @rtype () => Object\n * @return {Object} Object with wallet information(id, name, network, ...)\n */\n getWalletInfo () {\n const runtime = getBrowserAPI(true).runtime\n return {\n id: runtime && runtime.id ? runtime.id : this.id,\n name: this.name,\n networkId: this.getNetworkId(),\n origin: window.location.origin,\n type: runtime && runtime.id ? WALLET_TYPE.extension : WALLET_TYPE.window\n }\n },\n /**\n * Get Wallet accounts\n * @function getAccounts\n * @instance\n * @rtype () => Object\n * @return {Object} Object with accounts information({ connected: Object, current: Object })\n */\n getAccounts () {\n return {\n current: this.selectedAddress ? { [this.selectedAddress]: {} } : {},\n connected: this.addresses()\n .filter(a => a !== this.selectedAddress)\n .reduce((acc, a) => ({ ...acc, [a]: {} }), {})\n }\n }\n }\n})\n"],"file":"wallet-rpc.mjs"}
@@ -0,0 +1,102 @@
1
+ export const VERSION = 1;
2
+ export let MESSAGE_DIRECTION;
3
+
4
+ (function (MESSAGE_DIRECTION) {
5
+ MESSAGE_DIRECTION["to_waellet"] = "to_waellet";
6
+ MESSAGE_DIRECTION["to_aepp"] = "to_aepp";
7
+ })(MESSAGE_DIRECTION || (MESSAGE_DIRECTION = {}));
8
+
9
+ export let WALLET_TYPE;
10
+
11
+ (function (WALLET_TYPE) {
12
+ WALLET_TYPE["window"] = "window";
13
+ WALLET_TYPE["extension"] = "extension";
14
+ })(WALLET_TYPE || (WALLET_TYPE = {}));
15
+
16
+ export let SUBSCRIPTION_TYPES;
17
+
18
+ (function (SUBSCRIPTION_TYPES) {
19
+ SUBSCRIPTION_TYPES["subscribe"] = "subscribe";
20
+ SUBSCRIPTION_TYPES["unsubscribe"] = "unsubscribe";
21
+ })(SUBSCRIPTION_TYPES || (SUBSCRIPTION_TYPES = {}));
22
+
23
+ export let METHODS;
24
+
25
+ (function (METHODS) {
26
+ METHODS["readyToConnect"] = "connection.announcePresence";
27
+ METHODS["updateAddress"] = "address.update";
28
+ METHODS["address"] = "address.get";
29
+ METHODS["connect"] = "connection.open";
30
+ METHODS["sign"] = "transaction.sign";
31
+ METHODS["signMessage"] = "message.sign";
32
+ METHODS["subscribeAddress"] = "address.subscribe";
33
+ METHODS["updateNetwork"] = "networkId.update";
34
+ METHODS["closeConnection"] = "connection.close";
35
+ })(METHODS || (METHODS = {}));
36
+
37
+ export let RPC_STATUS;
38
+
39
+ (function (RPC_STATUS) {
40
+ RPC_STATUS["CONNECTED"] = "CONNECTED";
41
+ RPC_STATUS["NODE_BINDED"] = "NODE_BINDED";
42
+ RPC_STATUS["DISCONNECTED"] = "DISCONNECTED";
43
+ RPC_STATUS["CONNECTION_REJECTED"] = "CONNECTION_REJECTED";
44
+ RPC_STATUS["WAITING_FOR_CONNECTION_APPROVE"] = "WAITING_FOR_CONNECTION_APPROVE";
45
+ RPC_STATUS["WAITING_FOR_CONNECTION_REQUEST"] = "WAITING_FOR_CONNECTION_REQUEST";
46
+ })(RPC_STATUS || (RPC_STATUS = {}));
47
+
48
+ export const ERRORS = {
49
+ broadcastFailed: function () {
50
+ let error = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
51
+ return {
52
+ code: 3,
53
+ data: error,
54
+ message: 'Broadcast failed'
55
+ };
56
+ },
57
+ invalidTransaction: function () {
58
+ let error = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
59
+ return {
60
+ code: 2,
61
+ data: error,
62
+ message: 'Invalid transaction'
63
+ };
64
+ },
65
+ rejectedByUser: function () {
66
+ let error = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
67
+ return {
68
+ code: 4,
69
+ data: error,
70
+ message: 'Operation rejected by user'
71
+ };
72
+ },
73
+ connectionDeny: function () {
74
+ let error = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
75
+ return {
76
+ code: 9,
77
+ data: error,
78
+ message: 'Wallet deny your connection request'
79
+ };
80
+ },
81
+ permissionDeny: address => ({
82
+ code: 11,
83
+ message: `You are not subscribed for account ${address}`
84
+ }),
85
+ internalError: message => ({
86
+ code: 12,
87
+ message
88
+ }),
89
+ notAuthorize: () => ({
90
+ code: 10,
91
+ message: 'You are not connected to the wallet'
92
+ }),
93
+ unsupportedProtocol: () => ({
94
+ code: 5,
95
+ message: 'Unsupported Protocol Version'
96
+ }),
97
+ unsupportedNetwork: () => ({
98
+ code: 8,
99
+ message: 'Unsupported Network'
100
+ })
101
+ };
102
+ //# sourceMappingURL=schema.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/utils/aepp-wallet-communication/schema.ts"],"names":["VERSION","MESSAGE_DIRECTION","WALLET_TYPE","SUBSCRIPTION_TYPES","METHODS","RPC_STATUS","ERRORS","broadcastFailed","error","code","data","message","invalidTransaction","rejectedByUser","connectionDeny","permissionDeny","address","internalError","notAuthorize","unsupportedProtocol","unsupportedNetwork"],"mappings":"AAAA,OAAO,MAAMA,OAAO,GAAG,CAAhB;AAEP,WAAkBC,iBAAlB;;WAAkBA,iB;AAAAA,EAAAA,iB;AAAAA,EAAAA,iB;GAAAA,iB,KAAAA,iB;;AAKlB,WAAkBC,WAAlB;;WAAkBA,W;AAAAA,EAAAA,W;AAAAA,EAAAA,W;GAAAA,W,KAAAA,W;;AAKlB,WAAkBC,kBAAlB;;WAAkBA,kB;AAAAA,EAAAA,kB;AAAAA,EAAAA,kB;GAAAA,kB,KAAAA,kB;;AAKlB,WAAkBC,OAAlB;;WAAkBA,O;AAAAA,EAAAA,O;AAAAA,EAAAA,O;AAAAA,EAAAA,O;AAAAA,EAAAA,O;AAAAA,EAAAA,O;AAAAA,EAAAA,O;AAAAA,EAAAA,O;AAAAA,EAAAA,O;AAAAA,EAAAA,O;GAAAA,O,KAAAA,O;;AAYlB,WAAkBC,UAAlB;;WAAkBA,U;AAAAA,EAAAA,U;AAAAA,EAAAA,U;AAAAA,EAAAA,U;AAAAA,EAAAA,U;AAAAA,EAAAA,U;AAAAA,EAAAA,U;GAAAA,U,KAAAA,U;;AASlB,OAAO,MAAMC,MAAM,GAAG;AACpBC,EAAAA,eAAe,EAAE;AAAA,QAACC,KAAD,uEAAS,EAAT;AAAA,WAAiB;AAChCC,MAAAA,IAAI,EAAE,CAD0B;AAEhCC,MAAAA,IAAI,EAAEF,KAF0B;AAGhCG,MAAAA,OAAO,EAAE;AAHuB,KAAjB;AAAA,GADG;AAMpBC,EAAAA,kBAAkB,EAAE;AAAA,QAACJ,KAAD,uEAAS,EAAT;AAAA,WAAiB;AACnCC,MAAAA,IAAI,EAAE,CAD6B;AAEnCC,MAAAA,IAAI,EAAEF,KAF6B;AAGnCG,MAAAA,OAAO,EAAE;AAH0B,KAAjB;AAAA,GANA;AAWpBE,EAAAA,cAAc,EAAE;AAAA,QAACL,KAAD,uEAAS,EAAT;AAAA,WAAiB;AAC/BC,MAAAA,IAAI,EAAE,CADyB;AAE/BC,MAAAA,IAAI,EAAEF,KAFyB;AAG/BG,MAAAA,OAAO,EAAE;AAHsB,KAAjB;AAAA,GAXI;AAgBpBG,EAAAA,cAAc,EAAE;AAAA,QAACN,KAAD,uEAAS,EAAT;AAAA,WAAiB;AAC/BC,MAAAA,IAAI,EAAE,CADyB;AAE/BC,MAAAA,IAAI,EAAEF,KAFyB;AAG/BG,MAAAA,OAAO,EAAE;AAHsB,KAAjB;AAAA,GAhBI;AAqBpBI,EAAAA,cAAc,EAAGC,OAAD,KAAsB;AACpCP,IAAAA,IAAI,EAAE,EAD8B;AAEpCE,IAAAA,OAAO,EAAG,sCAAqCK,OAAQ;AAFnB,GAAtB,CArBI;AAyBpBC,EAAAA,aAAa,EAAGN,OAAD,KAAsB;AACnCF,IAAAA,IAAI,EAAE,EAD6B;AAEnCE,IAAAA;AAFmC,GAAtB,CAzBK;AA6BpBO,EAAAA,YAAY,EAAE,OAAO;AACnBT,IAAAA,IAAI,EAAE,EADa;AAEnBE,IAAAA,OAAO,EAAE;AAFU,GAAP,CA7BM;AAiCpBQ,EAAAA,mBAAmB,EAAE,OAAO;AAC1BV,IAAAA,IAAI,EAAE,CADoB;AAE1BE,IAAAA,OAAO,EAAE;AAFiB,GAAP,CAjCD;AAqCpBS,EAAAA,kBAAkB,EAAE,OAAO;AACzBX,IAAAA,IAAI,EAAE,CADmB;AAEzBE,IAAAA,OAAO,EAAE;AAFgB,GAAP;AArCA,CAAf","sourcesContent":["export const VERSION = 1\n\nexport const enum MESSAGE_DIRECTION {\n to_waellet = 'to_waellet',\n to_aepp = 'to_aepp'\n}\n\nexport const enum WALLET_TYPE {\n window = 'window',\n extension = 'extension'\n}\n\nexport const enum SUBSCRIPTION_TYPES {\n subscribe = 'subscribe',\n unsubscribe = 'unsubscribe'\n}\n\nexport const enum METHODS {\n readyToConnect = 'connection.announcePresence',\n updateAddress = 'address.update',\n address = 'address.get',\n connect = 'connection.open',\n sign = 'transaction.sign',\n signMessage = 'message.sign',\n subscribeAddress = 'address.subscribe',\n updateNetwork = 'networkId.update',\n closeConnection = 'connection.close'\n}\n\nexport const enum RPC_STATUS {\n CONNECTED = 'CONNECTED',\n NODE_BINDED = 'NODE_BINDED',\n DISCONNECTED = 'DISCONNECTED',\n CONNECTION_REJECTED = 'CONNECTION_REJECTED',\n WAITING_FOR_CONNECTION_APPROVE = 'WAITING_FOR_CONNECTION_APPROVE',\n WAITING_FOR_CONNECTION_REQUEST = 'WAITING_FOR_CONNECTION_REQUEST'\n}\n\nexport const ERRORS = {\n broadcastFailed: (error = {}) => ({\n code: 3,\n data: error,\n message: 'Broadcast failed'\n }),\n invalidTransaction: (error = {}) => ({\n code: 2,\n data: error,\n message: 'Invalid transaction'\n }),\n rejectedByUser: (error = {}) => ({\n code: 4,\n data: error,\n message: 'Operation rejected by user'\n }),\n connectionDeny: (error = {}) => ({\n code: 9,\n data: error,\n message: 'Wallet deny your connection request'\n }),\n permissionDeny: (address: string) => ({\n code: 11,\n message: `You are not subscribed for account ${address}`\n }),\n internalError: (message: string) => ({\n code: 12,\n message\n }),\n notAuthorize: () => ({\n code: 10,\n message: 'You are not connected to the wallet'\n }),\n unsupportedProtocol: () => ({\n code: 5,\n message: 'Unsupported Protocol Version'\n }),\n unsupportedNetwork: () => ({\n code: 8,\n message: 'Unsupported Network'\n })\n}\n"],"file":"schema.mjs"}
@@ -23,8 +23,9 @@
23
23
  * @export WalletDetector
24
24
  */
25
25
  import stampit from '@stamp/it';
26
- import BrowserWindowMessageConnection from './connection/browser-window-message';
27
- import { MESSAGE_DIRECTION, METHODS } from './schema';
26
+ import BrowserWindowMessageConnection from "./connection/browser-window-message.mjs";
27
+ import { MESSAGE_DIRECTION, METHODS } from "./schema.mjs";
28
+ import { UnsupportedPlatformError } from "../errors.mjs";
28
29
  /**
29
30
  * WalletDetector stamp
30
31
  * @function
@@ -40,7 +41,7 @@ export default stampit({
40
41
  let {
41
42
  connection
42
43
  } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
43
- if (!window) throw new Error('Window object not found, you can run wallet detector only in browser');
44
+ if (!window) throw new UnsupportedPlatformError('Window object not found, you can run wallet detector only in browser');
44
45
  this.connection = connection || BrowserWindowMessageConnection({
45
46
  connectionInfo: {
46
47
  id: 'spy'
@@ -66,7 +67,7 @@ export default stampit({
66
67
  method,
67
68
  params
68
69
  } = _ref;
69
- if (!method || !params || method !== METHODS.wallet.readyToConnect || wallets[params.id]) return;
70
+ if (!method || !params || method !== METHODS.readyToConnect || wallets[params.id]) return;
70
71
  const wallet = { ...params,
71
72
 
72
73
  async getConnection() {
@@ -106,4 +107,4 @@ export default stampit({
106
107
 
107
108
  }
108
109
  });
109
- //# sourceMappingURL=wallet-detector.js.map
110
+ //# sourceMappingURL=wallet-detector.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/utils/aepp-wallet-communication/wallet-detector.js"],"names":["stampit","BrowserWindowMessageConnection","MESSAGE_DIRECTION","METHODS","UnsupportedPlatformError","init","connection","window","connectionInfo","id","wallets","methods","scan","onDetected","connect","origin","source","method","params","readyToConnect","wallet","getConnection","isExtension","type","sendDirection","to_waellet","undefined","receiveDirection","to_aepp","target","newWallet","Object","keys","length","stopScan","disconnect"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAOA,OAAP,MAAoB,WAApB;OACOC,8B;SACEC,iB,EAAmBC,O;SACnBC,wB;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,eAAeJ,OAAO,CAAC;AACrBK,EAAAA,IAAI,GAAuB;AAAA,QAArB;AAAEC,MAAAA;AAAF,KAAqB,uEAAJ,EAAI;AACzB,QAAI,CAACC,MAAL,EAAa,MAAM,IAAIH,wBAAJ,CAA6B,sEAA7B,CAAN;AACb,SAAKE,UAAL,GAAkBA,UAAU,IAAIL,8BAA8B,CAAC;AAAEO,MAAAA,cAAc,EAAE;AAAEC,QAAAA,EAAE,EAAE;AAAN;AAAlB,KAAD,CAA9D;AACA,SAAKC,OAAL,GAAe,EAAf;AACD,GALoB;;AAMrBC,EAAAA,OAAO,EAAE;AACP;AACJ;AACA;AACA;AACA;AACA;AACA;AACIC,IAAAA,IAAI,CAAEC,UAAF,EAAc;AAChB,YAAM;AAAEH,QAAAA;AAAF,UAAc,IAApB;AACA,WAAKJ,UAAL,CAAgBQ,OAAhB,CAAwB,OAAqBC,MAArB,EAA6BC,MAA7B,KAAwC;AAAA,YAAvC;AAAEC,UAAAA,MAAF;AAAUC,UAAAA;AAAV,SAAuC;AAC9D,YACE,CAACD,MAAD,IAAW,CAACC,MAAZ,IACAD,MAAM,KAAKd,OAAO,CAACgB,cADnB,IACqCT,OAAO,CAACQ,MAAM,CAACT,EAAR,CAF9C,EAGE;AAEF,cAAMW,MAAM,GAAG,EACb,GAAGF,MADU;;AAEb,gBAAMG,aAAN,GAAuB;AACrB;AACA,kBAAMC,WAAW,GAAG,KAAKC,IAAL,KAAc,WAAlC;AACA,kBAAMR,MAAM,GAAGO,WAAW,GAAGf,MAAM,CAACQ,MAAV,GAAmB,KAAKA,MAAlD;AACA,mBAAOd,8BAA8B,CAAC;AACpCO,cAAAA,cAAc,EAAE,IADoB;AAEpCgB,cAAAA,aAAa,EAAEF,WAAW,GAAGpB,iBAAiB,CAACuB,UAArB,GAAkCC,SAFxB;AAGpCC,cAAAA,gBAAgB,EAAEL,WAAW,GAAGpB,iBAAiB,CAAC0B,OAArB,GAA+BF,SAHxB;AAIpCG,cAAAA,MAAM,EAAEb,MAJ4B;AAKpCD,cAAAA;AALoC,aAAD,CAArC;AAOD;;AAbY,SAAf;AAeAL,QAAAA,OAAO,CAACU,MAAM,CAACX,EAAR,CAAP,GAAqBW,MAArB;AACAP,QAAAA,UAAU,CAAC;AAAEH,UAAAA,OAAF;AAAWoB,UAAAA,SAAS,EAAEV;AAAtB,SAAD,CAAV;AACD,OAvBD;AAwBA,UAAIW,MAAM,CAACC,IAAP,CAAYtB,OAAZ,EAAqBuB,MAAzB,EAAiCpB,UAAU,CAAC;AAAEH,QAAAA;AAAF,OAAD,CAAV;AAClC,KAnCM;;AAqCP;AACJ;AACA;AACA;AACA;AACA;AACIwB,IAAAA,QAAQ,GAAI;AACV,WAAK5B,UAAL,CAAgB6B,UAAhB;AACD;;AA7CM;AANY,CAAD,CAAtB","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 * Wallet Detector\n *\n * This is the complement to {@link module:@aeternity/aepp-sdk/es/utils}.\n * @module @aeternity/aepp-sdk/es/utils/aepp-wallet-communication/wallet-detector\n * @export WalletDetector\n */\nimport stampit from '@stamp/it'\nimport BrowserWindowMessageConnection from './connection/browser-window-message'\nimport { MESSAGE_DIRECTION, METHODS } from './schema'\nimport { UnsupportedPlatformError } from '../errors'\n\n/**\n * WalletDetector stamp\n * @function\n * @alias module:@aeternity/aepp-sdk/es/utils/aepp-wallet-communication/wallet-detector\n * @rtype Stamp\n * @param {Object} params={} - Initializer object\n * @param {WalletConnection} params.connection - Connection for listening for wallets\n * @return {WalletDetector}\n */\nexport default stampit({\n init ({ connection } = {}) {\n if (!window) throw new UnsupportedPlatformError('Window object not found, you can run wallet detector only in browser')\n this.connection = connection || BrowserWindowMessageConnection({ connectionInfo: { id: 'spy' } })\n this.wallets = {}\n },\n methods: {\n /**\n * Start scanning\n * @function scan\n * @instance\n * @param {Function} onDetected Call-back function which trigger on new wallet\n * @return {void}\n */\n scan (onDetected) {\n const { wallets } = this\n this.connection.connect(({ method, params }, origin, source) => {\n if (\n !method || !params ||\n method !== METHODS.readyToConnect || wallets[params.id]\n ) return\n\n const wallet = {\n ...params,\n async getConnection () {\n // if detect extension wallet or page wallet\n const isExtension = this.type === 'extension'\n const origin = isExtension ? window.origin : this.origin\n return BrowserWindowMessageConnection({\n connectionInfo: this,\n sendDirection: isExtension ? MESSAGE_DIRECTION.to_waellet : undefined,\n receiveDirection: isExtension ? MESSAGE_DIRECTION.to_aepp : undefined,\n target: source,\n origin\n })\n }\n }\n wallets[wallet.id] = wallet\n onDetected({ wallets, newWallet: wallet })\n })\n if (Object.keys(wallets).length) onDetected({ wallets })\n },\n\n /**\n * Stop scanning\n * @function stopScan\n * @instance\n * @return {void}\n */\n stopScan () {\n this.connection.disconnect()\n }\n }\n})\n"],"file":"wallet-detector.mjs"}
@@ -21,7 +21,8 @@
21
21
  * @example import { AmountFormatter } from '@aeternity/aepp-sdk'
22
22
  */
23
23
  import BigNumber from 'bignumber.js';
24
- import { isBigNumber } from './bignumber';
24
+ import { isBigNumber } from "./bignumber.mjs";
25
+ import { ArgumentError, InvalidDenominationError } from "./errors.mjs";
25
26
  /**
26
27
  * AE amount formats
27
28
  */
@@ -96,9 +97,9 @@ export const formatAmount = function (value) {
96
97
  targetDenomination = AE_AMOUNT_FORMATS.AETTOS
97
98
  } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
98
99
  const denominations = Object.values(AE_AMOUNT_FORMATS);
99
- if (!denominations.includes(denomination)) throw new Error(`Invalid denomination: ${denomination}`);
100
- if (!denominations.includes(targetDenomination)) throw new Error(`Invalid target denomination: ${targetDenomination}`);
101
- if (!isBigNumber(value)) throw new Error(`Value ${value === null || value === void 0 ? void 0 : value.toString()} is not type of number`);
100
+ if (!denominations.includes(denomination)) throw new InvalidDenominationError(`Invalid denomination: ${denomination}`);
101
+ if (!denominations.includes(targetDenomination)) throw new InvalidDenominationError(`Invalid target denomination: ${targetDenomination}`);
102
+ if (!isBigNumber(value)) throw new ArgumentError('value', `a number`, value);
102
103
  return new BigNumber(value).shiftedBy(DENOMINATION_MAGNITUDE[denomination] - DENOMINATION_MAGNITUDE[targetDenomination]).toFixed();
103
104
  };
104
105
  const prefixes = [{
@@ -117,11 +118,17 @@ const prefixes = [{
117
118
 
118
119
  const getNearestPrefix = exponent => prefixes.reduce((p, n) => Math.abs(n.magnitude - exponent) < Math.abs(p.magnitude - exponent) ? n : p);
119
120
 
120
- const getLowerBoundPrefix = exponent => prefixes.find(p => p.magnitude <= exponent) ?? prefixes[prefixes.length - 1];
121
+ const getLowerBoundPrefix = exponent => {
122
+ var _prefixes$find;
123
+
124
+ return (_prefixes$find = prefixes.find(p => p.magnitude <= exponent)) !== null && _prefixes$find !== void 0 ? _prefixes$find : prefixes[prefixes.length - 1];
125
+ };
121
126
 
122
127
  export default (rawValue => {
128
+ var _value$e;
129
+
123
130
  const value = new BigNumber(rawValue);
124
- const exp = value.e ?? 0;
131
+ const exp = (_value$e = value.e) !== null && _value$e !== void 0 ? _value$e : 0;
125
132
  const {
126
133
  name,
127
134
  magnitude
@@ -129,4 +136,4 @@ export default (rawValue => {
129
136
  const v = value.shiftedBy(-magnitude).precision(9 + Math.min(exp - magnitude, 0)).toFixed();
130
137
  return `${v}${name !== '' ? ' ' : ''}${name}`;
131
138
  });
132
- //# sourceMappingURL=amount-formatter.js.map
139
+ //# sourceMappingURL=amount-formatter.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/amount-formatter.ts"],"names":["BigNumber","isBigNumber","ArgumentError","InvalidDenominationError","AE_AMOUNT_FORMATS","AE","MILI_AE","MICRO_AE","NANO_AE","PICO_AE","FEMTO_AE","AETTOS","DENOMINATION_MAGNITUDE","toAe","value","denomination","formatAmount","targetDenomination","toAettos","denominations","Object","values","includes","shiftedBy","toFixed","prefixes","name","magnitude","getNearestPrefix","exponent","reduce","p","n","Math","abs","getLowerBoundPrefix","find","length","rawValue","exp","e","v","precision","min"],"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 * Amount Formatter\n * @module @aeternity/aepp-sdk/es/utils/amount-formatter\n * @example import { AmountFormatter } from '@aeternity/aepp-sdk'\n */\nimport BigNumber from 'bignumber.js'\nimport { isBigNumber } from './bignumber'\nimport { ArgumentError, InvalidDenominationError } from './errors'\n\n/**\n * AE amount formats\n */\nexport const AE_AMOUNT_FORMATS = {\n AE: 'ae',\n MILI_AE: 'miliAE',\n MICRO_AE: 'microAE',\n NANO_AE: 'nanoAE',\n PICO_AE: 'picoAE',\n FEMTO_AE: 'femtoAE',\n AETTOS: 'aettos'\n}\n\n/**\n * DENOMINATION_MAGNITUDE\n */\nexport const DENOMINATION_MAGNITUDE = {\n [AE_AMOUNT_FORMATS.AE]: 0,\n [AE_AMOUNT_FORMATS.MILI_AE]: -3,\n [AE_AMOUNT_FORMATS.MICRO_AE]: -6,\n [AE_AMOUNT_FORMATS.NANO_AE]: -9,\n [AE_AMOUNT_FORMATS.PICO_AE]: -12,\n [AE_AMOUNT_FORMATS.FEMTO_AE]: -15,\n [AE_AMOUNT_FORMATS.AETTOS]: -18\n}\n\n/**\n * Convert amount to AE\n * @param {String|Number|BigNumber} value amount to convert\n * @param {Object} [options={}] options\n * @param {String} [options.denomination='aettos'] denomination of amount, can be ['ae', 'aettos']\n * @return {String}\n */\nexport const toAe = (\n value: string | number | BigNumber,\n { denomination = AE_AMOUNT_FORMATS.AETTOS } = {}\n): string => formatAmount(value, { denomination, targetDenomination: AE_AMOUNT_FORMATS.AE })\n\n/**\n * Convert amount to aettos\n * @param {String|Number|BigNumber} value amount to convert\n * @param {Object} [options={}] options\n * @param {String} [options.denomination='ae'] denomination of amount, can be ['ae', 'aettos']\n * @return {String}\n */\nexport const toAettos = (\n value: string | number | BigNumber,\n { denomination = AE_AMOUNT_FORMATS.AE } = {}\n): string => formatAmount(value, { denomination })\n\n/**\n * Convert amount from one to other denomination\n * @param {String|Number|BigNumber} value amount to convert\n * @param {Object} [options={}] options\n * @param {String} [options.denomination='aettos'] denomination of amount, can be ['ae', 'aettos']\n * @param {String} [options.targetDenomination='aettos'] target denomination, can be ['ae', 'aettos']\n * @return {String}\n */\nexport const formatAmount = (\n value: string | number | BigNumber,\n { denomination = AE_AMOUNT_FORMATS.AETTOS, targetDenomination = AE_AMOUNT_FORMATS.AETTOS } = {}\n): string => {\n const denominations = Object.values(AE_AMOUNT_FORMATS)\n if (!denominations.includes(denomination)) throw new InvalidDenominationError(`Invalid denomination: ${denomination}`)\n if (!denominations.includes(targetDenomination)) throw new InvalidDenominationError(`Invalid target denomination: ${targetDenomination}`)\n if (!isBigNumber(value)) throw new ArgumentError('value', `a number`, value)\n\n return new BigNumber(value)\n .shiftedBy(DENOMINATION_MAGNITUDE[denomination] - DENOMINATION_MAGNITUDE[targetDenomination])\n .toFixed()\n}\n\ninterface Prefix {\n name: string\n magnitude: number\n}\n\nconst prefixes: Prefix[] = [\n { name: 'exa', magnitude: 18 },\n { name: 'giga', magnitude: 9 },\n { name: '', magnitude: 0 },\n { name: 'pico', magnitude: -12 }\n]\n\nconst getNearestPrefix = (exponent: number): Prefix => prefixes.reduce((p, n) => (\n Math.abs(n.magnitude - exponent) < Math.abs(p.magnitude - exponent) ? n : p))\n\nconst getLowerBoundPrefix = (exponent: number): Prefix => prefixes\n .find(p => p.magnitude <= exponent) ?? prefixes[prefixes.length - 1]\n\nexport default (rawValue: string | number | BigNumber): string => {\n const value: BigNumber = new BigNumber(rawValue)\n\n const exp = value.e ?? 0\n const { name, magnitude } = (exp < 0 ? getNearestPrefix : getLowerBoundPrefix)(exp)\n const v = value\n .shiftedBy(-magnitude)\n .precision(9 + Math.min(exp - magnitude, 0))\n .toFixed()\n return `${v}${name !== '' ? ' ' : ''}${name}`\n}\n"],"file":"amount-formatter.mjs"}
@@ -1,12 +1,6 @@
1
- import _path from "ramda/src/path";
2
- import _flatten from "ramda/src/flatten";
3
- import _identical from "ramda/src/identical";
4
- import _uniqWith from "ramda/src/uniqWith";
5
- import _without from "ramda/src/without";
6
-
7
1
  /*
8
2
  * ISC License (ISC)
9
- * Copyright (c) 2018 aeternity developers
3
+ * Copyright (c) 2022 aeternity developers
10
4
  *
11
5
  * Permission to use, copy, modify, and/or distribute this software for any
12
6
  * purpose with or without fee is hereby granted, provided that the above
@@ -45,7 +39,7 @@ function asyncInit() {
45
39
  }, instance);
46
40
  }
47
41
 
48
- const AsyncInit = stampit({
42
+ export default stampit({
49
43
  deepConf: {
50
44
  AsyncInit: {
51
45
  initializers: []
@@ -58,10 +52,13 @@ const AsyncInit = stampit({
58
52
  composables
59
53
  } = _ref;
60
54
  const conf = stamp.compose.deepConfiguration.AsyncInit;
61
- conf.initializers = _without([asyncInit], _uniqWith(_identical, _flatten(composables.map(c => _path(['compose', 'deepConfiguration', 'AsyncInit', 'initializers'], c) || (c.compose || c).initializers || []))));
55
+ conf.initializers = composables.map(c => {
56
+ var _c$compose, _c$compose$deepConfig, _c$compose$deepConfig2;
57
+
58
+ return (c === null || c === void 0 ? void 0 : (_c$compose = c.compose) === null || _c$compose === void 0 ? void 0 : (_c$compose$deepConfig = _c$compose.deepConfiguration) === null || _c$compose$deepConfig === void 0 ? void 0 : (_c$compose$deepConfig2 = _c$compose$deepConfig.AsyncInit) === null || _c$compose$deepConfig2 === void 0 ? void 0 : _c$compose$deepConfig2.initializers) || (c.compose || c).initializers || [];
59
+ }).flat(Infinity).filter((f, idx, arr) => !arr.slice(0, idx).includes(f)).filter(f => f !== asyncInit);
62
60
  stamp.compose.initializers = [asyncInit];
63
61
  }
64
62
 
65
63
  });
66
- export default AsyncInit;
67
- //# sourceMappingURL=async-init.js.map
64
+ //# sourceMappingURL=async-init.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utils/async-init.js"],"names":["stampit","asyncInit","options","stamp","args","instance","compose","deepConfiguration","AsyncInit","initializers","reduce","init","Promise","resolve","ret","call","undefined","deepConf","composers","composables","conf","map","c","flat","Infinity","filter","f","idx","arr","slice","includes"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA,OAAOA,OAAP,MAAoB,WAApB;;AAEA,SAASC,SAAT,GAA6D;AAAA,MAAzCC,OAAyC,uEAA/B,EAA+B;AAAA,MAA3B;AAAEC,IAAAA,KAAF;AAASC,IAAAA,IAAT;AAAeC,IAAAA;AAAf,GAA2B;AAC3D,SAAOF,KAAK,CAACG,OAAN,CAAcC,iBAAd,CAAgCC,SAAhC,CAA0CC,YAA1C,CAAuDC,MAAvD,CAA8D,OAAOL,QAAP,EAAiBM,IAAjB,KAA0B;AAC7FN,IAAAA,QAAQ,GAAG,MAAMO,OAAO,CAACC,OAAR,CAAgBR,QAAhB,CAAjB;;AACA,QAAI,OAAOM,IAAP,KAAgB,UAApB,EAAgC;AAC9B,YAAMG,GAAG,GAAG,MAAMF,OAAO,CAACC,OAAR,CAAgBF,IAAI,CAACI,IAAL,CAAUV,QAAV,EAAoBH,OAApB,EAA6B;AAAEC,QAAAA,KAAF;AAASC,QAAAA,IAAT;AAAeC,QAAAA;AAAf,OAA7B,CAAhB,CAAlB;AACA,aAAOS,GAAG,KAAKE,SAAR,GAAoBX,QAApB,GAA+BS,GAAtC;AACD;;AACD,WAAOT,QAAP;AACD,GAPM,EAOJA,QAPI,CAAP;AAQD;;AAED,eAAeL,OAAO,CAAC;AACrBiB,EAAAA,QAAQ,EAAE;AAAET,IAAAA,SAAS,EAAE;AAAEC,MAAAA,YAAY,EAAE;AAAhB;AAAb,GADW;;AAErBS,EAAAA,SAAS,OAA0B;AAAA,QAAxB;AAAEf,MAAAA,KAAF;AAASgB,MAAAA;AAAT,KAAwB;AACjC,UAAMC,IAAI,GAAGjB,KAAK,CAACG,OAAN,CAAcC,iBAAd,CAAgCC,SAA7C;AACAY,IAAAA,IAAI,CAACX,YAAL,GAAoBU,WAAW,CAC5BE,GADiB,CACbC,CAAC;AAAA;;AAAA,aACJ,CAAAA,CAAC,SAAD,IAAAA,CAAC,WAAD,0BAAAA,CAAC,CAAEhB,OAAH,mFAAYC,iBAAZ,0GAA+BC,SAA/B,kFAA0CC,YAA1C,KACA,CAACa,CAAC,CAAChB,OAAF,IAAagB,CAAd,EAAiBb,YADjB,IAEA,EAHI;AAAA,KADY,EAKjBc,IALiB,CAKZC,QALY,EAMjBC,MANiB,CAMV,CAACC,CAAD,EAAIC,GAAJ,EAASC,GAAT,KAAiB,CAACA,GAAG,CAACC,KAAJ,CAAU,CAAV,EAAaF,GAAb,EAAkBG,QAAlB,CAA2BJ,CAA3B,CANR,EAOjBD,MAPiB,CAOVC,CAAC,IAAIA,CAAC,KAAKzB,SAPD,CAApB;AAQAE,IAAAA,KAAK,CAACG,OAAN,CAAcG,YAAd,GAA6B,CAACR,SAAD,CAA7B;AACD;;AAboB,CAAD,CAAtB","sourcesContent":["/*\n * ISC License (ISC)\n * Copyright (c) 2022 aeternity developers\n *\n * Permission to use, copy, modify, and/or distribute this software for any\n * purpose with or without fee is hereby granted, provided that the above\n * copyright notice and this permission notice appear in all copies.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\n * AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\n * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\n * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\n * PERFORMANCE OF THIS SOFTWARE.\n */\n\nimport stampit from '@stamp/it'\n\nfunction asyncInit (options = {}, { stamp, args, instance }) {\n return stamp.compose.deepConfiguration.AsyncInit.initializers.reduce(async (instance, init) => {\n instance = await Promise.resolve(instance)\n if (typeof init === 'function') {\n const ret = await Promise.resolve(init.call(instance, options, { stamp, args, instance }))\n return ret === undefined ? instance : ret\n }\n return instance\n }, instance)\n}\n\nexport default stampit({\n deepConf: { AsyncInit: { initializers: [] } },\n composers ({ stamp, composables }) {\n const conf = stamp.compose.deepConfiguration.AsyncInit\n conf.initializers = composables\n .map(c =>\n c?.compose?.deepConfiguration?.AsyncInit?.initializers ||\n (c.compose || c).initializers ||\n [])\n .flat(Infinity)\n .filter((f, idx, arr) => !arr.slice(0, idx).includes(f))\n .filter(f => f !== asyncInit)\n stamp.compose.initializers = [asyncInit]\n }\n})\n"],"file":"async-init.mjs"}