@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
@@ -3,16 +3,31 @@
3
3
  *
4
4
  * @module @aeternity/aepp-sdk/es/utils/aepp-wallet-communication/rpc/wallet-rpc
5
5
  * @export WalletRpc
6
- * @example import WalletRpc from '@aeternity/aepp-sdk/es/utils/aepp-wallet-communication/rpc/wallet-rpc'
6
+ * @example
7
+ * import WalletRpc from '@aeternity/aepp-sdk/es/utils/aepp-wallet-communication/rpc/wallet-rpc'
7
8
  */
8
- import { v4 as uuid } from 'uuid';
9
- import Ae from '../../../ae';
10
- import verifyTransaction from '../../../tx/validator';
11
- import AccountMultiple from '../../../account/multiple';
12
- import TxObject from '../../../tx/tx-object';
13
- import RpcClient from './rpc-client';
14
- import { getBrowserAPI, getHandler, isValidAccounts, message, resolveOnAccount, sendResponseMessage } from '../helpers';
15
- 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
+
16
31
  const NOTIFICATIONS = {
17
32
  [METHODS.closeConnection]: (instance, _ref) => {
18
33
  let {
@@ -28,12 +43,13 @@ const RESPONSES = {};
28
43
  const REQUESTS = {
29
44
  // Store client info and prepare two fn for each client `connect` and `denyConnection`
30
45
  // which automatically prepare and send response for that client
31
- [METHODS.aepp.connect](callInstance, instance, client, _ref2) {
46
+ [METHODS.connect](callInstance, instance, client, _ref2) {
32
47
  let {
33
48
  name,
34
49
  networkId,
35
50
  version,
36
- icons
51
+ icons,
52
+ connectNode
37
53
  } = _ref2;
38
54
  // Check if protocol and network is compatible with wallet
39
55
  if (version !== VERSION) return {
@@ -45,19 +61,28 @@ const REQUESTS = {
45
61
  name,
46
62
  networkId,
47
63
  icons,
48
- version
64
+ version,
65
+ origin: window.location.origin,
66
+ connectNode
49
67
  }); // Call onConnection callBack to notice Wallet about new AEPP
50
68
 
51
69
  return callInstance('onConnection', {
52
70
  name,
53
71
  networkId,
54
72
  version
55
- }, () => {
73
+ }, function () {
74
+ let {
75
+ shareNode
76
+ } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
56
77
  client.updateInfo({
57
- status: RPC_STATUS.CONNECTED
78
+ status: shareNode ? RPC_STATUS.NODE_BINDED : RPC_STATUS.CONNECTED
58
79
  });
59
80
  return {
60
- result: instance.getWalletInfo()
81
+ result: { ...instance.getWalletInfo(),
82
+ ...(shareNode && {
83
+ node: instance.selectedNode
84
+ })
85
+ }
61
86
  };
62
87
  }, error => {
63
88
  client.updateInfo({
@@ -69,7 +94,7 @@ const REQUESTS = {
69
94
  });
70
95
  },
71
96
 
72
- [METHODS.aepp.subscribeAddress](callInstance, instance, client, _ref3) {
97
+ [METHODS.subscribeAddress](callInstance, instance, client, _ref3) {
73
98
  let {
74
99
  type,
75
100
  value
@@ -88,7 +113,11 @@ const REQUESTS = {
88
113
 
89
114
  try {
90
115
  const clientAccounts = accounts || instance.getAccounts();
91
- 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
+
92
121
  const subscription = client.updateSubscription(type, value);
93
122
  client.setAccounts(clientAccounts, {
94
123
  forceNotification: true
@@ -102,9 +131,7 @@ const REQUESTS = {
102
131
  } catch (e) {
103
132
  if (instance.debug) console.error(e);
104
133
  return {
105
- error: ERRORS.internalError({
106
- msg: e.message
107
- })
134
+ error: ERRORS.internalError(e.message)
108
135
  };
109
136
  }
110
137
  }, error => ({
@@ -112,7 +139,7 @@ const REQUESTS = {
112
139
  }));
113
140
  },
114
141
 
115
- [METHODS.aepp.address](callInstance, instance, client) {
142
+ [METHODS.address](callInstance, instance, client) {
116
143
  // Authorization check
117
144
  if (!client.isConnected()) return {
118
145
  error: ERRORS.notAuthorize()
@@ -132,13 +159,13 @@ const REQUESTS = {
132
159
  }));
133
160
  },
134
161
 
135
- [METHODS.aepp.sign](callInstance, instance, client, _ref4) {
136
- let {
162
+ [METHODS.sign](callInstance, instance, client, options) {
163
+ const {
137
164
  tx,
138
165
  onAccount,
139
166
  networkId,
140
167
  returnSigned = false
141
- } = _ref4;
168
+ } = options;
142
169
  const address = onAccount || client.currentAccount; // Update client with new networkId
143
170
 
144
171
  networkId && client.updateInfo({
@@ -149,15 +176,19 @@ const REQUESTS = {
149
176
  error: ERRORS.notAuthorize()
150
177
  }; // Account permission check
151
178
 
152
- if (!client.hasAccessToAccount(address)) return {
153
- error: ERRORS.permissionDeny({
154
- account: address
155
- })
156
- }; // NetworkId check
179
+ if (!client.hasAccessToAccount(address)) {
180
+ return {
181
+ error: ERRORS.permissionDeny(address)
182
+ };
183
+ } // NetworkId check
184
+
185
+
186
+ if (!networkId || networkId !== instance.getNetworkId()) {
187
+ return {
188
+ error: ERRORS.unsupportedNetwork()
189
+ };
190
+ }
157
191
 
158
- if (!networkId || networkId !== instance.getNetworkId()) return {
159
- error: ERRORS.unsupportedNetwork()
160
- };
161
192
  return callInstance('onSign', {
162
193
  tx,
163
194
  returnSigned,
@@ -172,24 +203,24 @@ const REQUESTS = {
172
203
  } catch (e) {
173
204
  if (instance.debug) console.error(e);
174
205
  return {
175
- error: ERRORS.internalError({
176
- msg: e.message
177
- })
206
+ error: ERRORS.internalError(e.message)
178
207
  };
179
208
  }
180
209
 
181
210
  try {
211
+ const t = rawTx || tx;
212
+ const result = returnSigned ? {
213
+ signedTransaction: await instance.signTransaction(t, {
214
+ onAccount: onAcc
215
+ })
216
+ } : {
217
+ transactionHash: await instance.send(t, {
218
+ onAccount: onAcc,
219
+ verify: false
220
+ })
221
+ };
182
222
  return {
183
- result: returnSigned ? {
184
- signedTransaction: await instance.signTransaction(rawTx || tx, {
185
- onAccount: onAcc
186
- })
187
- } : {
188
- transactionHash: await instance.send(rawTx || tx, {
189
- onAccount: onAcc,
190
- verify: false
191
- })
192
- }
223
+ result
193
224
  };
194
225
  } catch (e) {
195
226
  if (!returnSigned) {
@@ -211,21 +242,23 @@ const REQUESTS = {
211
242
  }));
212
243
  },
213
244
 
214
- [METHODS.aepp.signMessage](callInstance, instance, client, _ref5) {
245
+ [METHODS.signMessage](callInstance, instance, client, _ref4) {
215
246
  let {
216
247
  message,
217
248
  onAccount
218
- } = _ref5;
249
+ } = _ref4;
219
250
  // Authorization check
220
251
  if (!client.isConnected()) return {
221
252
  error: ERRORS.notAuthorize()
222
253
  };
223
254
  const address = onAccount || client.currentAccount;
224
- if (!client.hasAccessToAccount(address)) return {
225
- error: ERRORS.permissionDeny({
226
- account: address
227
- })
228
- };
255
+
256
+ if (!client.hasAccessToAccount(address)) {
257
+ return {
258
+ error: ERRORS.permissionDeny(address)
259
+ };
260
+ }
261
+
229
262
  return callInstance('onMessageSign', {
230
263
  message,
231
264
  onAccount: address
@@ -245,9 +278,7 @@ const REQUESTS = {
245
278
  } catch (e) {
246
279
  if (instance.debug) console.error(e);
247
280
  return {
248
- error: ERRORS.internalError({
249
- msg: e.message
250
- })
281
+ error: ERRORS.internalError(e.message)
251
282
  };
252
283
  }
253
284
  }, error => ({
@@ -309,11 +340,12 @@ const handleMessage = (instance, id) => async (msg, origin) => {
309
340
  * @rtype Stamp
310
341
  * @param {Object} param Init params object
311
342
  * @param {String=} [param.name] Wallet name
312
- * @param {Function} onConnection Call-back function for incoming AEPP connection (Second argument contain function for accept/deny request)
313
- * @param {Function} onSubscription Call-back function for incoming AEPP account subscription (Second argument contain function for accept/deny request)
314
- * @param {Function} onSign Call-back function for incoming AEPP sign request (Second argument contain function for accept/deny request)
315
- * @param {Function} onAskAccounts Call-back function for incoming AEPP get address request (Second argument contain function for accept/deny request)
316
- * @param {Function} onMessageSign Call-back function for incoming AEPP sign message request (Second argument contain function for accept/deny request)
343
+ * @param {Function} onConnection Call-back function for incoming AEPP connection
344
+ * @param {Function} onSubscription Call-back function for incoming AEPP account subscription
345
+ * @param {Function} onSign Call-back function for incoming AEPP sign request
346
+ * @param {Function} onAskAccounts Call-back function for incoming AEPP get address request
347
+ * @param {Function} onMessageSign Call-back function for incoming AEPP sign message request
348
+ * Second argument of incoming call-backs contain function for accept/deny request
317
349
  * @param {Function} onDisconnect Call-back function for disconnect event
318
350
  * @return {Object}
319
351
  */
@@ -325,29 +357,16 @@ export default Ae.compose(AccountMultiple, {
325
357
 
326
358
  let {
327
359
  name,
328
- onConnection,
329
- onSubscription,
330
- onSign,
331
- onDisconnect,
332
- onAskAccounts,
333
- onMessageSign,
334
- forceValidation = false,
335
- debug = false
360
+ debug = false,
361
+ ...other
336
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
+ });
337
368
  this.debug = debug;
338
- const eventsHandlers = ['onConnection', 'onSubscription', 'onSign', 'onDisconnect', 'onMessageSign']; // CallBacks for events
339
-
340
- this.onConnection = onConnection;
341
- this.onSubscription = onSubscription;
342
- this.onSign = onSign;
343
- this.onDisconnect = onDisconnect;
344
- this.onAskAccounts = onAskAccounts;
345
- this.onMessageSign = onMessageSign;
346
369
  this.rpcClients = {};
347
- eventsHandlers.forEach(event => {
348
- if (!forceValidation && typeof this[event] !== 'function') throw new Error(`Call-back for ${event} must be an function!`);
349
- }); //
350
-
351
370
  this.name = name;
352
371
  this.id = uuid();
353
372
 
@@ -370,11 +389,11 @@ export default Ae.compose(AccountMultiple, {
370
389
  [address]: {}
371
390
  },
372
391
  connected: { ...client.accounts.current,
373
- ...Object.entries(client.accounts.connected).filter(_ref6 => {
374
- let [k, v] = _ref6;
392
+ ...Object.entries(client.accounts.connected).filter(_ref5 => {
393
+ let [k, v] = _ref5;
375
394
  return k !== address;
376
- }).reduce((acc, _ref7) => {
377
- let [k, v] = _ref7;
395
+ }).reduce((acc, _ref6) => {
396
+ let [k, v] = _ref6;
378
397
  return { ...acc,
379
398
  [k]: v
380
399
  };
@@ -411,9 +430,14 @@ export default Ae.compose(AccountMultiple, {
411
430
  _selectNode(name); // Send notification 'update.network' to all Aepp which connected
412
431
 
413
432
 
414
- Object.values(this.rpcClients).filter(client => client.isConnected()).forEach(client => client.sendMessage(message(METHODS.updateNetwork, {
415
- networkId: this.getNetworkId()
416
- }), 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
+ });
417
441
  };
418
442
  },
419
443
 
@@ -432,7 +456,7 @@ export default Ae.compose(AccountMultiple, {
432
456
  forceConnectionClose = false
433
457
  } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
434
458
  const client = this.rpcClients[id];
435
- if (!client) throw new Error(`RpcClient with id ${id} do not exist`);
459
+ if (!client) throw new UnknownRpcClientError(id);
436
460
  client.disconnect(forceConnectionClose);
437
461
  delete this.rpcClients[id];
438
462
  },
@@ -446,7 +470,8 @@ export default Ae.compose(AccountMultiple, {
446
470
  * @return {String} Client ID
447
471
  */
448
472
  addRpcClient(clientConnection) {
449
- // @TODO detect if aepp has some history based on origin????: if yes use this instance for connection
473
+ // @TODO detect if aepp has some history based on origin????
474
+ // if yes use this instance for connection
450
475
  const id = uuid();
451
476
  this.rpcClients[id] = RpcClient({
452
477
  id,
@@ -471,7 +496,7 @@ export default Ae.compose(AccountMultiple, {
471
496
  shareWalletInfo(postFn) {
472
497
  postFn({
473
498
  jsonrpc: '2.0',
474
- ...message(METHODS.wallet.readyToConnect, this.getWalletInfo())
499
+ ...message(METHODS.readyToConnect, this.getWalletInfo())
475
500
  });
476
501
  },
477
502
 
@@ -513,4 +538,4 @@ export default Ae.compose(AccountMultiple, {
513
538
 
514
539
  }
515
540
  });
516
- //# 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"}