@aeternity/aepp-sdk 9.0.1 → 10.0.0-beta.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 (137) hide show
  1. package/dist/aepp-sdk.browser-script.js +1 -1
  2. package/dist/aepp-sdk.browser-script.js.LICENSE.txt +0 -9
  3. package/dist/aepp-sdk.browser-script.js.map +1 -1
  4. package/dist/aepp-sdk.browser.js +1 -1
  5. package/dist/aepp-sdk.browser.js.map +1 -1
  6. package/dist/aepp-sdk.js +1 -1
  7. package/dist/aepp-sdk.js.map +1 -1
  8. package/es/account/base.js +30 -122
  9. package/es/account/base.js.map +1 -1
  10. package/es/account/memory.js +17 -19
  11. package/es/account/memory.js.map +1 -1
  12. package/es/account/multiple.js +73 -164
  13. package/es/account/multiple.js.map +1 -1
  14. package/es/ae/aens.js +164 -599
  15. package/es/ae/aens.js.map +1 -1
  16. package/es/ae/contract.js +82 -759
  17. package/es/ae/contract.js.map +1 -1
  18. package/es/ae/index.js +78 -315
  19. package/es/ae/index.js.map +1 -1
  20. package/es/ae/oracle.js +130 -498
  21. package/es/ae/oracle.js.map +1 -1
  22. package/es/chain/index.js +1 -1
  23. package/es/chain/index.js.map +1 -1
  24. package/es/chain/node.js +288 -1008
  25. package/es/chain/node.js.map +1 -1
  26. package/es/channel/handlers.js +597 -1086
  27. package/es/channel/handlers.js.map +1 -1
  28. package/es/channel/index.js +203 -451
  29. package/es/channel/index.js.map +1 -1
  30. package/es/channel/internal.js +129 -301
  31. package/es/channel/internal.js.map +1 -1
  32. package/es/contract/aci/index.js +319 -480
  33. package/es/contract/aci/index.js.map +1 -1
  34. package/es/contract/aci/transformation.js +35 -711
  35. package/es/contract/aci/transformation.js.map +1 -1
  36. package/es/contract/compiler.js +129 -203
  37. package/es/contract/compiler.js.map +1 -1
  38. package/es/contract/ga/helpers.js +16 -114
  39. package/es/contract/ga/helpers.js.map +1 -1
  40. package/es/contract/ga/index.js +101 -242
  41. package/es/contract/ga/index.js.map +1 -1
  42. package/es/contract/index.js +1 -1
  43. package/es/contract/index.js.map +1 -1
  44. package/es/index.js +1 -2
  45. package/es/index.js.map +1 -1
  46. package/es/node-pool/index.js +54 -73
  47. package/es/node-pool/index.js.map +1 -1
  48. package/es/node.js +56 -157
  49. package/es/node.js.map +1 -1
  50. package/es/other.d.ts +1 -1
  51. package/es/tx/builder/helpers.js +38 -75
  52. package/es/tx/builder/helpers.js.map +1 -1
  53. package/es/tx/builder/index.js +196 -294
  54. package/es/tx/builder/index.js.map +1 -1
  55. package/es/tx/builder/schema.js +577 -459
  56. package/es/tx/builder/schema.js.map +1 -1
  57. package/es/tx/index.js +1 -1
  58. package/es/tx/index.js.map +1 -1
  59. package/es/tx/tx-object.js +105 -132
  60. package/es/tx/tx-object.js.map +1 -1
  61. package/es/tx/tx.js +808 -1628
  62. package/es/tx/tx.js.map +1 -1
  63. package/es/tx/validator.js +132 -268
  64. package/es/tx/validator.js.map +1 -1
  65. package/es/utils/aepp-wallet-communication/connection/browser-runtime.js +17 -21
  66. package/es/utils/aepp-wallet-communication/connection/browser-runtime.js.map +1 -1
  67. package/es/utils/aepp-wallet-communication/connection/browser-window-message.js +38 -74
  68. package/es/utils/aepp-wallet-communication/connection/browser-window-message.js.map +1 -1
  69. package/es/utils/aepp-wallet-communication/content-script-bridge.js +14 -15
  70. package/es/utils/aepp-wallet-communication/content-script-bridge.js.map +1 -1
  71. package/es/utils/aepp-wallet-communication/helpers.js +60 -105
  72. package/es/utils/aepp-wallet-communication/helpers.js.map +1 -1
  73. package/es/utils/aepp-wallet-communication/rpc/aepp-rpc.js +179 -510
  74. package/es/utils/aepp-wallet-communication/rpc/aepp-rpc.js.map +1 -1
  75. package/es/utils/aepp-wallet-communication/rpc/rpc-client.js +70 -89
  76. package/es/utils/aepp-wallet-communication/rpc/rpc-client.js.map +1 -1
  77. package/es/utils/aepp-wallet-communication/rpc/wallet-rpc.js +353 -600
  78. package/es/utils/aepp-wallet-communication/rpc/wallet-rpc.js.map +1 -1
  79. package/es/utils/aepp-wallet-communication/schema.js +43 -39
  80. package/es/utils/aepp-wallet-communication/schema.js.map +1 -1
  81. package/es/utils/aepp-wallet-communication/wallet-detector.js +32 -58
  82. package/es/utils/aepp-wallet-communication/wallet-detector.js.map +1 -1
  83. package/es/utils/amount-formatter.js +41 -61
  84. package/es/utils/amount-formatter.js.map +1 -1
  85. package/es/utils/async-init.js +28 -64
  86. package/es/utils/async-init.js.map +1 -1
  87. package/es/utils/bignumber.js +3 -11
  88. package/es/utils/bignumber.js.map +1 -1
  89. package/es/utils/bytes.js +5 -9
  90. package/es/utils/bytes.js.map +1 -1
  91. package/es/utils/crypto.js +47 -62
  92. package/es/utils/crypto.js.map +1 -1
  93. package/es/utils/hd-wallet.js +45 -81
  94. package/es/utils/hd-wallet.js.map +1 -1
  95. package/es/utils/json-big.js +16 -49
  96. package/es/utils/json-big.js.map +1 -1
  97. package/es/utils/keystore.js +81 -246
  98. package/es/utils/keystore.js.map +1 -1
  99. package/es/utils/mptree.js +88 -134
  100. package/es/utils/mptree.js.map +1 -1
  101. package/es/utils/other.js +10 -60
  102. package/es/utils/other.js.map +1 -1
  103. package/es/utils/semver-satisfies.js +9 -28
  104. package/es/utils/semver-satisfies.js.map +1 -1
  105. package/es/utils/string.js +4 -13
  106. package/es/utils/string.js.map +1 -1
  107. package/es/utils/swagger.js +85 -224
  108. package/es/utils/swagger.js.map +1 -1
  109. package/package.json +44 -40
  110. package/src/account/multiple.js +18 -19
  111. package/src/ae/aens.js +25 -21
  112. package/src/ae/contract.js +32 -163
  113. package/src/ae/index.js +3 -3
  114. package/src/ae/oracle.js +18 -14
  115. package/src/chain/node.js +2 -4
  116. package/src/channel/handlers.js +0 -1
  117. package/src/channel/index.js +4 -5
  118. package/src/contract/aci/index.js +221 -102
  119. package/src/contract/aci/transformation.js +30 -422
  120. package/src/contract/compiler.js +45 -4
  121. package/src/contract/ga/helpers.js +1 -8
  122. package/src/contract/ga/index.js +13 -11
  123. package/src/index.js +0 -2
  124. package/src/node-pool/index.js +21 -12
  125. package/src/node.js +22 -26
  126. package/src/tx/builder/index.js +2 -1
  127. package/src/tx/builder/schema.js +2 -1
  128. package/src/tx/tx.js +147 -143
  129. package/src/tx/validator.js +9 -7
  130. package/src/utils/aepp-wallet-communication/rpc/aepp-rpc.js +1 -3
  131. package/src/utils/aepp-wallet-communication/rpc/wallet-rpc.js +3 -3
  132. package/src/utils/aepp-wallet-communication/schema.js +1 -3
  133. package/src/utils/bignumber.ts +2 -1
  134. package/src/utils/other.ts +1 -1
  135. package/src/utils/semver-satisfies.ts +1 -1
  136. package/src/utils/swagger.js +14 -7
  137. package/src/contract/aci/helpers.js +0 -140
@@ -1,29 +1,3 @@
1
- import _Object$keys from "@babel/runtime-corejs3/core-js-stable/object/keys";
2
- import _Object$getOwnPropertySymbols from "@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols";
3
- import _Object$getOwnPropertyDescriptor from "@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor";
4
- import _forEachInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/for-each";
5
- import _Object$getOwnPropertyDescriptors from "@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors";
6
- import _Object$defineProperties from "@babel/runtime-corejs3/core-js-stable/object/define-properties";
7
- import _Object$defineProperty from "@babel/runtime-corejs3/core-js-stable/object/define-property";
8
- import _slicedToArray from "@babel/runtime-corejs3/helpers/slicedToArray";
9
- import _defineProperty from "@babel/runtime-corejs3/helpers/defineProperty";
10
- import _toConsumableArray from "@babel/runtime-corejs3/helpers/toConsumableArray";
11
- import _asyncToGenerator from "@babel/runtime-corejs3/helpers/asyncToGenerator";
12
-
13
- function ownKeys(object, enumerableOnly) { var keys = _Object$keys(object); if (_Object$getOwnPropertySymbols) { var symbols = _Object$getOwnPropertySymbols(object); if (enumerableOnly) { symbols = _filterInstanceProperty(symbols).call(symbols, function (sym) { return _Object$getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
14
-
15
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { var _context19; _forEachInstanceProperty(_context19 = ownKeys(Object(source), true)).call(_context19, function (key) { _defineProperty(target, key, source[key]); }); } else if (_Object$getOwnPropertyDescriptors) { _Object$defineProperties(target, _Object$getOwnPropertyDescriptors(source)); } else { var _context20; _forEachInstanceProperty(_context20 = ownKeys(Object(source))).call(_context20, function (key) { _Object$defineProperty(target, key, _Object$getOwnPropertyDescriptor(source, key)); }); } } return target; }
16
-
17
- import _regeneratorRuntime from "@babel/runtime-corejs3/regenerator";
18
- import _concatInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/concat";
19
- import _includesInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/includes";
20
- import _someInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/some";
21
- import _Object$entries from "@babel/runtime-corejs3/core-js-stable/object/entries";
22
- import _JSON$stringify from "@babel/runtime-corejs3/core-js-stable/json/stringify";
23
- import _mapInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/map";
24
- import _filterInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/filter";
25
- import _Promise from "@babel/runtime-corejs3/core-js-stable/promise";
26
- import _flatInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/flat";
27
1
  import { verify, hash } from '../utils/crypto';
28
2
  import { encode, decode } from './builder/helpers';
29
3
  import BigNumber from 'bignumber.js';
@@ -36,104 +10,47 @@ import { calculateFee, unpackTx } from './builder';
36
10
  * @example import { verifyTransaction } from '@aeternity/aepp-sdk'
37
11
  */
38
12
 
39
- var validators = [/*#__PURE__*/function () {
40
- var _ref3 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(_ref, _ref2) {
41
- var _context;
42
-
43
- var encodedTx, signatures, account, node, parentTxTypes, prefix, txWithNetworkId, txHashWithNetworkId, decodedPub;
44
- return _regeneratorRuntime.wrap(function _callee$(_context2) {
45
- while (1) {
46
- switch (_context2.prev = _context2.next) {
47
- case 0:
48
- encodedTx = _ref.encodedTx, signatures = _ref.signatures;
49
- account = _ref2.account, node = _ref2.node, parentTxTypes = _ref2.parentTxTypes;
50
-
51
- if (!((encodedTx !== null && encodedTx !== void 0 ? encodedTx : signatures) === undefined)) {
52
- _context2.next = 4;
53
- break;
54
- }
55
-
56
- return _context2.abrupt("return", []);
57
-
58
- case 4:
59
- if (!(signatures.length !== 1)) {
60
- _context2.next = 6;
61
- break;
62
- }
63
-
64
- return _context2.abrupt("return", []);
65
-
66
- case 6:
67
- // TODO: Support multisignature?
68
- prefix = Buffer.from(_concatInstanceProperty(_context = [node.nodeNetworkId]).call(_context, _toConsumableArray(_includesInstanceProperty(parentTxTypes).call(parentTxTypes, TX_TYPE.payingFor) ? ['inner_tx'] : [])).join('-'));
69
- txWithNetworkId = _concatInstanceProperty(Buffer).call(Buffer, [prefix, encodedTx.rlpEncoded]);
70
- txHashWithNetworkId = _concatInstanceProperty(Buffer).call(Buffer, [prefix, hash(encodedTx.rlpEncoded)]);
71
- decodedPub = decode(account.id, 'ak');
72
-
73
- if (!(verify(txWithNetworkId, signatures[0], decodedPub) || verify(txHashWithNetworkId, signatures[0], decodedPub))) {
74
- _context2.next = 12;
75
- break;
76
- }
77
-
78
- return _context2.abrupt("return", []);
79
-
80
- case 12:
81
- return _context2.abrupt("return", [{
82
- message: 'Signature cannot be verified, please ensure that you transaction have' + ' the correct prefix and the correct private key for the sender address',
83
- key: 'InvalidSignature',
84
- checkedKeys: ['encodedTx', 'signatures']
85
- }]);
86
-
87
- case 13:
88
- case "end":
89
- return _context2.stop();
90
- }
91
- }
92
- }, _callee);
93
- }));
94
-
95
- return function (_x, _x2) {
96
- return _ref3.apply(this, arguments);
97
- };
98
- }(), /*#__PURE__*/function () {
99
- var _ref6 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2(_ref4, _ref5) {
100
- var _context3;
101
-
102
- var encodedTx, tx, node, parentTxTypes, txType;
103
- return _regeneratorRuntime.wrap(function _callee2$(_context4) {
104
- while (1) {
105
- switch (_context4.prev = _context4.next) {
106
- case 0:
107
- encodedTx = _ref4.encodedTx, tx = _ref4.tx;
108
- node = _ref5.node, parentTxTypes = _ref5.parentTxTypes, txType = _ref5.txType;
109
-
110
- if (!((encodedTx !== null && encodedTx !== void 0 ? encodedTx : tx) === undefined)) {
111
- _context4.next = 4;
112
- break;
113
- }
114
-
115
- return _context4.abrupt("return", []);
116
-
117
- case 4:
118
- return _context4.abrupt("return", verifyTransaction(encode((encodedTx !== null && encodedTx !== void 0 ? encodedTx : tx).rlpEncoded, 'tx'), node, _concatInstanceProperty(_context3 = []).call(_context3, _toConsumableArray(parentTxTypes), [txType])));
119
-
120
- case 5:
121
- case "end":
122
- return _context4.stop();
123
- }
124
- }
125
- }, _callee2);
126
- }));
127
-
128
- return function (_x3, _x4) {
129
- return _ref6.apply(this, arguments);
130
- };
131
- }(), function (tx, _ref7) {
132
- var _context5;
133
-
134
- var txType = _ref7.txType;
13
+ const validators = [async (_ref, _ref2) => {
14
+ let {
15
+ encodedTx,
16
+ signatures
17
+ } = _ref;
18
+ let {
19
+ account,
20
+ node,
21
+ parentTxTypes
22
+ } = _ref2;
23
+ if ((encodedTx ?? signatures) === undefined) return [];
24
+ if (signatures.length !== 1) return []; // TODO: Support multisignature?
25
+
26
+ const prefix = Buffer.from([node.nodeNetworkId, ...(parentTxTypes.includes(TX_TYPE.payingFor) ? ['inner_tx'] : [])].join('-'));
27
+ const txWithNetworkId = Buffer.concat([prefix, encodedTx.rlpEncoded]);
28
+ const txHashWithNetworkId = Buffer.concat([prefix, hash(encodedTx.rlpEncoded)]);
29
+ const decodedPub = decode(account.id, 'ak');
30
+ if (verify(txWithNetworkId, signatures[0], decodedPub) || verify(txHashWithNetworkId, signatures[0], decodedPub)) return [];
31
+ return [{
32
+ message: 'Signature cannot be verified, please ensure that you transaction have' + ' the correct prefix and the correct private key for the sender address',
33
+ key: 'InvalidSignature',
34
+ checkedKeys: ['encodedTx', 'signatures']
35
+ }];
36
+ }, async (_ref3, _ref4) => {
37
+ let {
38
+ encodedTx,
39
+ tx
40
+ } = _ref3;
41
+ let {
42
+ node,
43
+ parentTxTypes,
44
+ txType
45
+ } = _ref4;
46
+ if ((encodedTx ?? tx) === undefined) return [];
47
+ return verifyTransaction(encode((encodedTx ?? tx).rlpEncoded, 'tx'), node, [...parentTxTypes, txType]);
48
+ }, (tx, _ref5) => {
49
+ let {
50
+ txType
51
+ } = _ref5;
135
52
  if (tx.fee === undefined) return [];
136
- var minFee = calculateFee(0, txType, {
53
+ const minFee = calculateFee(0, txType, {
137
54
  gas: +tx.gas || 0,
138
55
  params: tx,
139
56
  showWarning: false,
@@ -141,104 +58,104 @@ var validators = [/*#__PURE__*/function () {
141
58
  });
142
59
  if (new BigNumber(minFee).lte(tx.fee)) return [];
143
60
  return [{
144
- message: _concatInstanceProperty(_context5 = "Fee ".concat(tx.fee, " is too low, minimum fee for this transaction is ")).call(_context5, minFee),
61
+ message: `Fee ${tx.fee} is too low, minimum fee for this transaction is ${minFee}`,
145
62
  key: 'InsufficientFee',
146
63
  checkedKeys: ['fee']
147
64
  }];
148
- }, function (_ref8, _ref9) {
149
- var _context6;
150
-
151
- var ttl = _ref8.ttl;
152
- var height = _ref9.height;
65
+ }, (_ref6, _ref7) => {
66
+ let {
67
+ ttl
68
+ } = _ref6;
69
+ let {
70
+ height
71
+ } = _ref7;
153
72
  if (ttl === undefined) return [];
154
73
  ttl = +ttl;
155
74
  if (ttl === 0 || ttl >= height) return [];
156
75
  return [{
157
- message: _concatInstanceProperty(_context6 = "TTL ".concat(ttl, " is already expired, current height is ")).call(_context6, height),
76
+ message: `TTL ${ttl} is already expired, current height is ${height}`,
158
77
  key: 'ExpiredTTL',
159
78
  checkedKeys: ['ttl']
160
79
  }];
161
- }, function (_ref10, _ref11) {
162
- var _ref12, _context7;
163
-
164
- var amount = _ref10.amount,
165
- fee = _ref10.fee,
166
- nameFee = _ref10.nameFee,
167
- tx = _ref10.tx;
168
- var account = _ref11.account,
169
- parentTxTypes = _ref11.parentTxTypes,
170
- txType = _ref11.txType;
171
- if (((_ref12 = amount !== null && amount !== void 0 ? amount : fee) !== null && _ref12 !== void 0 ? _ref12 : nameFee) === undefined) return [];
172
- var cost = new BigNumber(fee).plus(nameFee || 0).plus(amount || 0).plus(txType === TX_TYPE.payingFor ? tx.tx.encodedTx.tx.fee : 0).minus(_includesInstanceProperty(parentTxTypes).call(parentTxTypes, TX_TYPE.payingFor) ? fee : 0);
80
+ }, (_ref8, _ref9) => {
81
+ let {
82
+ amount,
83
+ fee,
84
+ nameFee,
85
+ tx
86
+ } = _ref8;
87
+ let {
88
+ account,
89
+ parentTxTypes,
90
+ txType
91
+ } = _ref9;
92
+ if ((amount ?? fee ?? nameFee) === undefined) return [];
93
+ const cost = new BigNumber(fee).plus(nameFee || 0).plus(amount || 0).plus(txType === TX_TYPE.payingFor ? tx.tx.encodedTx.tx.fee : 0).minus(parentTxTypes.includes(TX_TYPE.payingFor) ? fee : 0);
173
94
  if (cost.lte(account.balance)) return [];
174
95
  return [{
175
- message: _concatInstanceProperty(_context7 = "Account balance ".concat(account.balance, " is not enough to execute the transaction that costs ")).call(_context7, cost.toFixed()),
96
+ message: `Account balance ${account.balance} is not enough to execute the transaction that costs ${cost.toFixed()}`,
176
97
  key: 'InsufficientBalance',
177
98
  checkedKeys: ['amount', 'fee', 'nameFee']
178
99
  }];
179
- }, function (_ref13, _ref14) {
180
- var _context8, _context9;
181
-
182
- var nonce = _ref13.nonce;
183
- var account = _ref14.account,
184
- parentTxTypes = _ref14.parentTxTypes;
185
- if (nonce === undefined || _includesInstanceProperty(parentTxTypes).call(parentTxTypes, TX_TYPE.gaMeta)) return [];
100
+ }, (_ref10, _ref11) => {
101
+ let {
102
+ nonce
103
+ } = _ref10;
104
+ let {
105
+ account,
106
+ parentTxTypes
107
+ } = _ref11;
108
+ if (nonce === undefined || parentTxTypes.includes(TX_TYPE.gaMeta)) return [];
186
109
  nonce = +nonce;
187
- var validNonce = account.nonce + 1;
110
+ const validNonce = account.nonce + 1;
188
111
  if (nonce === validNonce) return [];
189
- return [_objectSpread(_objectSpread({}, nonce < validNonce ? {
190
- message: _concatInstanceProperty(_context8 = "Nonce ".concat(nonce, " is already used, valid nonce is ")).call(_context8, validNonce),
191
- key: 'NonceAlreadyUsed'
192
- } : {
193
- message: _concatInstanceProperty(_context9 = "Nonce ".concat(nonce, " is too high, valid nonce is ")).call(_context9, validNonce),
194
- key: 'NonceHigh'
195
- }), {}, {
112
+ return [{ ...(nonce < validNonce ? {
113
+ message: `Nonce ${nonce} is already used, valid nonce is ${validNonce}`,
114
+ key: 'NonceAlreadyUsed'
115
+ } : {
116
+ message: `Nonce ${nonce} is too high, valid nonce is ${validNonce}`,
117
+ key: 'NonceHigh'
118
+ }),
196
119
  checkedKeys: ['nonce']
197
- })];
198
- }, function (_ref15) {
199
- var _context10;
200
-
201
- var gasPrice = _ref15.gasPrice;
120
+ }];
121
+ }, _ref12 => {
122
+ let {
123
+ gasPrice
124
+ } = _ref12;
202
125
  if (gasPrice === undefined) return [];
203
126
  if (gasPrice >= MIN_GAS_PRICE) return [];
204
127
  return [{
205
- message: _concatInstanceProperty(_context10 = "Gas price ".concat(gasPrice, " must be bigger then ")).call(_context10, MIN_GAS_PRICE),
128
+ message: `Gas price ${gasPrice} must be bigger then ${MIN_GAS_PRICE}`,
206
129
  key: 'MinGasPrice',
207
130
  checkedKeys: ['gasPrice']
208
131
  }];
209
- }, function (_ref16, _ref17) {
210
- var _context11;
211
-
212
- var ctVersion = _ref16.ctVersion,
213
- abiVersion = _ref16.abiVersion;
214
- var txType = _ref17.txType,
215
- node = _ref17.node;
216
-
217
- var _node$getNodeInfo = node.getNodeInfo(),
218
- consensusProtocolVersion = _node$getNodeInfo.consensusProtocolVersion;
219
-
220
- var protocol = PROTOCOL_VM_ABI[consensusProtocolVersion];
221
- if (!protocol) throw new Error("Unsupported protocol: ".concat(consensusProtocolVersion)); // If not contract create tx
132
+ }, (_ref13, _ref14) => {
133
+ let {
134
+ ctVersion,
135
+ abiVersion
136
+ } = _ref13;
137
+ let {
138
+ txType,
139
+ node
140
+ } = _ref14;
141
+ const {
142
+ consensusProtocolVersion
143
+ } = node.getNodeInfo();
144
+ const protocol = PROTOCOL_VM_ABI[consensusProtocolVersion];
145
+ if (!protocol) throw new Error(`Unsupported protocol: ${consensusProtocolVersion}`); // If not contract create tx
222
146
 
223
147
  if (!ctVersion) ctVersion = {
224
- abiVersion: abiVersion
148
+ abiVersion
225
149
  };
226
- var txProtocol = protocol[txType];
150
+ const txProtocol = protocol[txType];
227
151
  if (!txProtocol) return [];
228
152
 
229
- if (_someInstanceProperty(_context11 = _Object$entries(ctVersion)).call(_context11, function (_ref18) {
230
- var _context12;
231
-
232
- var _ref19 = _slicedToArray(_ref18, 2),
233
- key = _ref19[0],
234
- value = _ref19[1];
235
-
236
- return !_includesInstanceProperty(_context12 = txProtocol[key]).call(_context12, +value);
153
+ if (Object.entries(ctVersion).some(_ref15 => {
154
+ let [key, value] = _ref15;
155
+ return !txProtocol[key].includes(+value);
237
156
  })) {
238
- var _context13;
239
-
240
157
  return [{
241
- message: _concatInstanceProperty(_context13 = "ABI/VM version ".concat(_JSON$stringify(ctVersion), " is wrong, supported is: ")).call(_context13, _JSON$stringify(txProtocol)),
158
+ message: `ABI/VM version ${JSON.stringify(ctVersion)} is wrong, supported is: ${JSON.stringify(txProtocol)}`,
242
159
  key: 'VmAndAbiVersionMismatch',
243
160
  checkedKeys: ['ctVersion', 'abiVersion']
244
161
  }];
@@ -247,17 +164,7 @@ var validators = [/*#__PURE__*/function () {
247
164
  return [];
248
165
  }];
249
166
 
250
- var getSenderAddress = function getSenderAddress(tx) {
251
- var _context14, _context15, _context16;
252
-
253
- return _mapInstanceProperty(_context14 = _filterInstanceProperty(_context15 = _mapInstanceProperty(_context16 = ['senderId', 'accountId', 'ownerId', 'callerId', 'oracleId', 'fromId', 'initiator', 'gaId', 'payerId']).call(_context16, function (key) {
254
- return tx[key];
255
- })).call(_context15, function (a) {
256
- return a;
257
- })).call(_context14, function (a) {
258
- return a.replace(/^ok_/, 'ak_');
259
- })[0];
260
- };
167
+ const getSenderAddress = tx => ['senderId', 'accountId', 'ownerId', 'callerId', 'oracleId', 'fromId', 'initiator', 'gaId', 'payerId'].map(key => tx[key]).filter(a => a).map(a => a.replace(/^ok_/, 'ak_'))[0];
261
168
  /**
262
169
  * Transaction Validator
263
170
  * This function validates some of transaction properties,
@@ -273,72 +180,29 @@ var getSenderAddress = function getSenderAddress(tx) {
273
180
  */
274
181
 
275
182
 
276
- export default function verifyTransaction(_x5, _x6) {
277
- return _verifyTransaction.apply(this, arguments);
278
- }
279
-
280
- function _verifyTransaction() {
281
- _verifyTransaction = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee3(transaction, node) {
282
- var _getSenderAddress, _context17;
283
-
284
- var parentTxTypes,
285
- _unpackTx,
286
- tx,
287
- txType,
288
- address,
289
- _yield$Promise$all,
290
- _yield$Promise$all2,
291
- account,
292
- height,
293
- _args3 = arguments;
294
-
295
- return _regeneratorRuntime.wrap(function _callee3$(_context18) {
296
- while (1) {
297
- switch (_context18.prev = _context18.next) {
298
- case 0:
299
- parentTxTypes = _args3.length > 2 && _args3[2] !== undefined ? _args3[2] : [];
300
- _unpackTx = unpackTx(transaction), tx = _unpackTx.tx, txType = _unpackTx.txType;
301
- address = (_getSenderAddress = getSenderAddress(tx)) !== null && _getSenderAddress !== void 0 ? _getSenderAddress : txType === TX_TYPE.signed ? getSenderAddress(tx.encodedTx.tx) : null;
302
- _context18.next = 5;
303
- return _Promise.all([address && node.api.getAccountByPubkey(address)["catch"](function () {
304
- return {
305
- id: address,
306
- balance: new BigNumber(0),
307
- nonce: 0
308
- };
309
- }), node.api.getCurrentKeyBlockHeight().then(function (_ref20) {
310
- var height = _ref20.height;
311
- return height;
312
- })]);
313
-
314
- case 5:
315
- _yield$Promise$all = _context18.sent;
316
- _yield$Promise$all2 = _slicedToArray(_yield$Promise$all, 2);
317
- account = _yield$Promise$all2[0];
318
- height = _yield$Promise$all2[1];
319
- _context18.t0 = _flatInstanceProperty;
320
- _context18.next = 12;
321
- return _Promise.all(_mapInstanceProperty(validators).call(validators, function (v) {
322
- return v(tx, {
323
- txType: txType,
324
- node: node,
325
- account: account,
326
- height: height,
327
- parentTxTypes: parentTxTypes
328
- });
329
- }));
330
-
331
- case 12:
332
- _context18.t1 = _context17 = _context18.sent;
333
- return _context18.abrupt("return", (0, _context18.t0)(_context18.t1).call(_context17));
334
-
335
- case 14:
336
- case "end":
337
- return _context18.stop();
338
- }
339
- }
340
- }, _callee3);
341
- }));
342
- return _verifyTransaction.apply(this, arguments);
183
+ export default async function verifyTransaction(transaction, node) {
184
+ let parentTxTypes = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
185
+ const {
186
+ tx,
187
+ txType
188
+ } = unpackTx(transaction);
189
+ const address = getSenderAddress(tx) ?? (txType === TX_TYPE.signed ? getSenderAddress(tx.encodedTx.tx) : null);
190
+ const [account, height] = await Promise.all([address && node.api.getAccountByPubkey(address).catch(() => ({
191
+ id: address,
192
+ balance: new BigNumber(0),
193
+ nonce: 0
194
+ })), node.api.getCurrentKeyBlockHeight().then(_ref16 => {
195
+ let {
196
+ height
197
+ } = _ref16;
198
+ return height;
199
+ })]);
200
+ return (await Promise.all(validators.map(v => v(tx, {
201
+ txType,
202
+ node,
203
+ account,
204
+ height,
205
+ parentTxTypes
206
+ })))).flat();
343
207
  }
344
208
  //# sourceMappingURL=validator.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/tx/validator.js"],"names":["verify","hash","encode","decode","BigNumber","MIN_GAS_PRICE","PROTOCOL_VM_ABI","TX_TYPE","calculateFee","unpackTx","validators","encodedTx","signatures","account","node","parentTxTypes","undefined","length","prefix","Buffer","from","nodeNetworkId","payingFor","join","txWithNetworkId","rlpEncoded","txHashWithNetworkId","decodedPub","id","message","key","checkedKeys","tx","txType","verifyTransaction","fee","minFee","gas","params","showWarning","vsn","VSN","lte","ttl","height","amount","nameFee","cost","plus","minus","balance","toFixed","nonce","gaMeta","validNonce","gasPrice","ctVersion","abiVersion","getNodeInfo","consensusProtocolVersion","protocol","Error","txProtocol","value","getSenderAddress","a","replace","transaction","address","signed","all","api","getAccountByPubkey","getCurrentKeyBlockHeight","then","v"],"mappings":"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","sourcesContent":["import { verify, hash } from '../utils/crypto'\nimport { encode, decode } from './builder/helpers'\n\nimport BigNumber from 'bignumber.js'\nimport { MIN_GAS_PRICE, PROTOCOL_VM_ABI, TX_TYPE } from './builder/schema'\nimport { calculateFee, unpackTx } from './builder'\n\n/**\n * Transaction validator\n * @module @aeternity/aepp-sdk/es/tx/validator\n * @export verifyTransaction\n * @example import { verifyTransaction } from '@aeternity/aepp-sdk'\n */\n\nconst validators = [\n async ({ encodedTx, signatures }, { account, node, parentTxTypes }) => {\n if ((encodedTx ?? signatures) === undefined) return []\n if (signatures.length !== 1) return [] // TODO: Support multisignature?\n const prefix = Buffer.from([\n node.nodeNetworkId,\n ...parentTxTypes.includes(TX_TYPE.payingFor) ? ['inner_tx'] : []\n ].join('-'))\n const txWithNetworkId = Buffer.concat([prefix, encodedTx.rlpEncoded])\n const txHashWithNetworkId = Buffer.concat([prefix, hash(encodedTx.rlpEncoded)])\n const decodedPub = decode(account.id, 'ak')\n if (verify(txWithNetworkId, signatures[0], decodedPub) ||\n verify(txHashWithNetworkId, signatures[0], decodedPub)) return []\n return [{\n message: 'Signature cannot be verified, please ensure that you transaction have' +\n ' the correct prefix and the correct private key for the sender address',\n key: 'InvalidSignature',\n checkedKeys: ['encodedTx', 'signatures']\n }]\n },\n async ({ encodedTx, tx }, { node, parentTxTypes, txType }) => {\n if ((encodedTx ?? tx) === undefined) return []\n return verifyTransaction(\n encode((encodedTx ?? tx).rlpEncoded, 'tx'),\n node,\n [...parentTxTypes, txType]\n )\n },\n (tx, { txType }) => {\n if (tx.fee === undefined) return []\n const minFee = calculateFee(0, txType, {\n gas: +tx.gas || 0, params: tx, showWarning: false, vsn: tx.VSN\n })\n if (new BigNumber(minFee).lte(tx.fee)) return []\n return [{\n message: `Fee ${tx.fee} is too low, minimum fee for this transaction is ${minFee}`,\n key: 'InsufficientFee',\n checkedKeys: ['fee']\n }]\n },\n ({ ttl }, { height }) => {\n if (ttl === undefined) return []\n ttl = +ttl\n if (ttl === 0 || ttl >= height) return []\n return [{\n message: `TTL ${ttl} is already expired, current height is ${height}`,\n key: 'ExpiredTTL',\n checkedKeys: ['ttl']\n }]\n },\n ({ amount, fee, nameFee, tx }, { account, parentTxTypes, txType }) => {\n if ((amount ?? fee ?? nameFee) === undefined) return []\n const cost = new BigNumber(fee).plus(nameFee || 0).plus(amount || 0)\n .plus(txType === TX_TYPE.payingFor ? tx.tx.encodedTx.tx.fee : 0)\n .minus(parentTxTypes.includes(TX_TYPE.payingFor) ? fee : 0)\n if (cost.lte(account.balance)) return []\n return [{\n message: `Account balance ${account.balance} is not enough to execute the transaction that costs ${cost.toFixed()}`,\n key: 'InsufficientBalance',\n checkedKeys: ['amount', 'fee', 'nameFee']\n }]\n },\n ({ nonce }, { account, parentTxTypes }) => {\n if (nonce === undefined || parentTxTypes.includes(TX_TYPE.gaMeta)) return []\n nonce = +nonce\n const validNonce = account.nonce + 1\n if (nonce === validNonce) return []\n return [{\n ...nonce < validNonce ? {\n message: `Nonce ${nonce} is already used, valid nonce is ${validNonce}`,\n key: 'NonceAlreadyUsed'\n } : {\n message: `Nonce ${nonce} is too high, valid nonce is ${validNonce}`,\n key: 'NonceHigh'\n },\n checkedKeys: ['nonce']\n }]\n },\n ({ gasPrice }) => {\n if (gasPrice === undefined) return []\n if (gasPrice >= MIN_GAS_PRICE) return []\n return [{\n message: `Gas price ${gasPrice} must be bigger then ${MIN_GAS_PRICE}`,\n key: 'MinGasPrice',\n checkedKeys: ['gasPrice']\n }]\n },\n ({ ctVersion, abiVersion }, { txType, node }) => {\n const { consensusProtocolVersion } = node.getNodeInfo()\n const protocol = PROTOCOL_VM_ABI[consensusProtocolVersion]\n if (!protocol) throw new Error(`Unsupported protocol: ${consensusProtocolVersion}`)\n // If not contract create tx\n if (!ctVersion) ctVersion = { abiVersion }\n const txProtocol = protocol[txType]\n if (!txProtocol) return []\n if (Object.entries(ctVersion).some(([key, value]) => !txProtocol[key].includes(+value))) {\n return [{\n message: `ABI/VM version ${JSON.stringify(ctVersion)} is wrong, supported is: ${JSON.stringify(txProtocol)}`,\n key: 'VmAndAbiVersionMismatch',\n checkedKeys: ['ctVersion', 'abiVersion']\n }]\n }\n return []\n }\n]\n\nconst getSenderAddress = tx => [\n 'senderId', 'accountId', 'ownerId', 'callerId',\n 'oracleId', 'fromId', 'initiator', 'gaId', 'payerId'\n]\n .map(key => tx[key])\n .filter(a => a)\n .map(a => a.replace(/^ok_/, 'ak_'))[0]\n\n/**\n * Transaction Validator\n * This function validates some of transaction properties,\n * to make sure it can be posted it to the chain\n * @function\n * @alias module:@aeternity/aepp-sdk/es/tx/validator\n * @rtype (tx: String, node) => void\n * @param {String} transaction Base64Check-encoded transaction\n * @param {Object} node Node to validate transaction against\n * @param {String[]} [parentTxTypes] Types of parent transactions\n * @return {Promise<Object[]>} Array with verification errors\n * @example const errors = await verifyTransaction(transaction, node)\n */\nexport default async function verifyTransaction (transaction, node, parentTxTypes = []) {\n const { tx, txType } = unpackTx(transaction)\n\n const address = getSenderAddress(tx) ??\n (txType === TX_TYPE.signed ? getSenderAddress(tx.encodedTx.tx) : null)\n const [account, height] = await Promise.all([\n address && node.api.getAccountByPubkey(address).catch(() => ({\n id: address,\n balance: new BigNumber(0),\n nonce: 0\n })),\n node.api.getCurrentKeyBlockHeight().then(({ height }) => height)\n ])\n\n return (await Promise.all(\n validators.map(v => v(tx, { txType, node, account, height, parentTxTypes })))\n ).flat()\n}\n"],"file":"validator.js"}
1
+ {"version":3,"sources":["../../src/tx/validator.js"],"names":["verify","hash","encode","decode","BigNumber","MIN_GAS_PRICE","PROTOCOL_VM_ABI","TX_TYPE","calculateFee","unpackTx","validators","encodedTx","signatures","account","node","parentTxTypes","undefined","length","prefix","Buffer","from","nodeNetworkId","includes","payingFor","join","txWithNetworkId","concat","rlpEncoded","txHashWithNetworkId","decodedPub","id","message","key","checkedKeys","tx","txType","verifyTransaction","fee","minFee","gas","params","showWarning","vsn","VSN","lte","ttl","height","amount","nameFee","cost","plus","minus","balance","toFixed","nonce","gaMeta","validNonce","gasPrice","ctVersion","abiVersion","consensusProtocolVersion","getNodeInfo","protocol","Error","txProtocol","Object","entries","some","value","JSON","stringify","getSenderAddress","map","filter","a","replace","transaction","address","signed","Promise","all","api","getAccountByPubkey","catch","getCurrentKeyBlockHeight","then","v","flat"],"mappings":"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","sourcesContent":["import { verify, hash } from '../utils/crypto'\nimport { encode, decode } from './builder/helpers'\n\nimport BigNumber from 'bignumber.js'\nimport { MIN_GAS_PRICE, PROTOCOL_VM_ABI, TX_TYPE } from './builder/schema'\nimport { calculateFee, unpackTx } from './builder'\n\n/**\n * Transaction validator\n * @module @aeternity/aepp-sdk/es/tx/validator\n * @export verifyTransaction\n * @example import { verifyTransaction } from '@aeternity/aepp-sdk'\n */\n\nconst validators = [\n async ({ encodedTx, signatures }, { account, node, parentTxTypes }) => {\n if ((encodedTx ?? signatures) === undefined) return []\n if (signatures.length !== 1) return [] // TODO: Support multisignature?\n const prefix = Buffer.from([\n node.nodeNetworkId,\n ...parentTxTypes.includes(TX_TYPE.payingFor) ? ['inner_tx'] : []\n ].join('-'))\n const txWithNetworkId = Buffer.concat([prefix, encodedTx.rlpEncoded])\n const txHashWithNetworkId = Buffer.concat([prefix, hash(encodedTx.rlpEncoded)])\n const decodedPub = decode(account.id, 'ak')\n if (verify(txWithNetworkId, signatures[0], decodedPub) ||\n verify(txHashWithNetworkId, signatures[0], decodedPub)) return []\n return [{\n message: 'Signature cannot be verified, please ensure that you transaction have' +\n ' the correct prefix and the correct private key for the sender address',\n key: 'InvalidSignature',\n checkedKeys: ['encodedTx', 'signatures']\n }]\n },\n async ({ encodedTx, tx }, { node, parentTxTypes, txType }) => {\n if ((encodedTx ?? tx) === undefined) return []\n return verifyTransaction(\n encode((encodedTx ?? tx).rlpEncoded, 'tx'),\n node,\n [...parentTxTypes, txType]\n )\n },\n (tx, { txType }) => {\n if (tx.fee === undefined) return []\n const minFee = calculateFee(0, txType, {\n gas: +tx.gas || 0, params: tx, showWarning: false, vsn: tx.VSN\n })\n if (new BigNumber(minFee).lte(tx.fee)) return []\n return [{\n message: `Fee ${tx.fee} is too low, minimum fee for this transaction is ${minFee}`,\n key: 'InsufficientFee',\n checkedKeys: ['fee']\n }]\n },\n ({ ttl }, { height }) => {\n if (ttl === undefined) return []\n ttl = +ttl\n if (ttl === 0 || ttl >= height) return []\n return [{\n message: `TTL ${ttl} is already expired, current height is ${height}`,\n key: 'ExpiredTTL',\n checkedKeys: ['ttl']\n }]\n },\n ({ amount, fee, nameFee, tx }, { account, parentTxTypes, txType }) => {\n if ((amount ?? fee ?? nameFee) === undefined) return []\n const cost = new BigNumber(fee).plus(nameFee || 0).plus(amount || 0)\n .plus(txType === TX_TYPE.payingFor ? tx.tx.encodedTx.tx.fee : 0)\n .minus(parentTxTypes.includes(TX_TYPE.payingFor) ? fee : 0)\n if (cost.lte(account.balance)) return []\n return [{\n message: `Account balance ${account.balance} is not enough to execute the transaction that costs ${cost.toFixed()}`,\n key: 'InsufficientBalance',\n checkedKeys: ['amount', 'fee', 'nameFee']\n }]\n },\n ({ nonce }, { account, parentTxTypes }) => {\n if (nonce === undefined || parentTxTypes.includes(TX_TYPE.gaMeta)) return []\n nonce = +nonce\n const validNonce = account.nonce + 1\n if (nonce === validNonce) return []\n return [{\n ...nonce < validNonce\n ? {\n message: `Nonce ${nonce} is already used, valid nonce is ${validNonce}`,\n key: 'NonceAlreadyUsed'\n }\n : {\n message: `Nonce ${nonce} is too high, valid nonce is ${validNonce}`,\n key: 'NonceHigh'\n },\n checkedKeys: ['nonce']\n }]\n },\n ({ gasPrice }) => {\n if (gasPrice === undefined) return []\n if (gasPrice >= MIN_GAS_PRICE) return []\n return [{\n message: `Gas price ${gasPrice} must be bigger then ${MIN_GAS_PRICE}`,\n key: 'MinGasPrice',\n checkedKeys: ['gasPrice']\n }]\n },\n ({ ctVersion, abiVersion }, { txType, node }) => {\n const { consensusProtocolVersion } = node.getNodeInfo()\n const protocol = PROTOCOL_VM_ABI[consensusProtocolVersion]\n if (!protocol) throw new Error(`Unsupported protocol: ${consensusProtocolVersion}`)\n // If not contract create tx\n if (!ctVersion) ctVersion = { abiVersion }\n const txProtocol = protocol[txType]\n if (!txProtocol) return []\n if (Object.entries(ctVersion).some(([key, value]) => !txProtocol[key].includes(+value))) {\n return [{\n message: `ABI/VM version ${JSON.stringify(ctVersion)} is wrong, supported is: ${JSON.stringify(txProtocol)}`,\n key: 'VmAndAbiVersionMismatch',\n checkedKeys: ['ctVersion', 'abiVersion']\n }]\n }\n return []\n }\n]\n\nconst getSenderAddress = tx => [\n 'senderId', 'accountId', 'ownerId', 'callerId',\n 'oracleId', 'fromId', 'initiator', 'gaId', 'payerId'\n]\n .map(key => tx[key])\n .filter(a => a)\n .map(a => a.replace(/^ok_/, 'ak_'))[0]\n\n/**\n * Transaction Validator\n * This function validates some of transaction properties,\n * to make sure it can be posted it to the chain\n * @function\n * @alias module:@aeternity/aepp-sdk/es/tx/validator\n * @rtype (tx: String, node) => void\n * @param {String} transaction Base64Check-encoded transaction\n * @param {Object} node Node to validate transaction against\n * @param {String[]} [parentTxTypes] Types of parent transactions\n * @return {Promise<Object[]>} Array with verification errors\n * @example const errors = await verifyTransaction(transaction, node)\n */\nexport default async function verifyTransaction (transaction, node, parentTxTypes = []) {\n const { tx, txType } = unpackTx(transaction)\n\n const address = getSenderAddress(tx) ??\n (txType === TX_TYPE.signed ? getSenderAddress(tx.encodedTx.tx) : null)\n const [account, height] = await Promise.all([\n address && node.api.getAccountByPubkey(address).catch(() => ({\n id: address,\n balance: new BigNumber(0),\n nonce: 0\n })),\n node.api.getCurrentKeyBlockHeight().then(({ height }) => height)\n ])\n\n return (await Promise.all(\n validators.map(v => v(tx, { txType, node, account, height, parentTxTypes })))\n ).flat()\n}\n"],"file":"validator.js"}
@@ -53,20 +53,17 @@ function disconnect() {
53
53
 
54
54
 
55
55
  function connect(onMessage, onDisconnect) {
56
- var _this = this;
57
-
58
56
  if (this.isConnected()) throw new Error('You already connected');
59
57
 
60
- this.handler = function (msg, source) {
61
- if (_this.debug) console.log('Receive message: ', msg);
58
+ this.handler = (msg, source) => {
59
+ if (this.debug) console.log('Receive message: ', msg);
62
60
  onMessage(msg, source);
63
61
  };
64
62
 
65
63
  this.port.onMessage.addListener(this.handler);
66
- this.port.onDisconnect.addListener(function () {
67
- typeof onDisconnect === 'function' && onDisconnect({}, _this);
68
-
69
- _this.port.disconnect();
64
+ this.port.onDisconnect.addListener(() => {
65
+ typeof onDisconnect === 'function' && onDisconnect({}, this);
66
+ this.port.disconnect();
70
67
  });
71
68
  }
72
69
  /**
@@ -111,24 +108,23 @@ function isConnected() {
111
108
 
112
109
 
113
110
  export default stampit({
114
- init: function init(_ref) {
115
- var _getBrowserAPI$runtim;
116
-
117
- var _ref$connectionInfo = _ref.connectionInfo,
118
- connectionInfo = _ref$connectionInfo === void 0 ? {} : _ref$connectionInfo,
119
- port = _ref.port,
120
- _ref$debug = _ref.debug,
121
- debug = _ref$debug === void 0 ? false : _ref$debug;
111
+ init(_ref) {
112
+ let {
113
+ connectionInfo = {},
114
+ port,
115
+ debug = false
116
+ } = _ref;
122
117
  if (!getBrowserAPI().runtime) throw new Error('Runtime is not accessible in your environment');
123
118
  this.debug = debug;
124
119
  this.connectionInfo = connectionInfo;
125
- this.port = port || (_getBrowserAPI$runtim = getBrowserAPI().runtime).connect.apply(_getBrowserAPI$runtim, [connectionInfo.id || undefined]);
120
+ this.port = port || getBrowserAPI().runtime.connect(...[connectionInfo.id || undefined]);
126
121
  },
122
+
127
123
  methods: {
128
- connect: connect,
129
- sendMessage: sendMessage,
130
- disconnect: disconnect,
131
- isConnected: isConnected
124
+ connect,
125
+ sendMessage,
126
+ disconnect,
127
+ isConnected
132
128
  }
133
129
  }, WalletConnection);
134
130
  //# sourceMappingURL=browser-runtime.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/utils/aepp-wallet-communication/connection/browser-runtime.js"],"names":["stampit","WalletConnection","getBrowserAPI","disconnect","port","e","console","warning","connect","onMessage","onDisconnect","isConnected","Error","handler","msg","source","debug","log","addListener","sendMessage","postMessage","hasListeners","hasListener","init","connectionInfo","runtime","id","undefined","methods"],"mappings":"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","sourcesContent":["/*\n * ISC License (ISC)\n * Copyright (c) 2018 aeternity developers\n *\n * Permission to use, copy, modify, and/or distribute this software for any\n * purpose with or without fee is hereby granted, provided that the above\n * copyright notice and this permission notice appear in all copies.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\n * AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\n * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\n * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\n * PERFORMANCE OF THIS SOFTWARE.\n */\n\n/**\n * Browser runtime connector module\n *\n * This is the complement to {@link module:@aeternity/aepp-sdk/es/utils/aepp-wallet-communication/connection}.\n * @module @aeternity/aepp-sdk/es/utils/aepp-wallet-communication/connection/browser-runtime\n * @export BrowserRuntimeConnection\n * @example import BrowserRuntimeConnection from '@aeternity/aepp-sdk/es/utils/aepp-wallet-communication/connection/browser-runtime'\n */\nimport stampit from '@stamp/it'\n\nimport WalletConnection from '.'\nimport { getBrowserAPI } from '../helpers'\n\n/**\n * Disconnect\n * @function disconnect\n * @instance\n * @rtype () => void\n * @return {void}\n */\nfunction disconnect () {\n try {\n this.port.disconnect()\n } catch (e) {\n console.warning('From BrowserRuntimeConnection: ', e)\n }\n}\n\n/**\n * Connect\n * @function connect\n * @instance\n * @rtype (onMessage: Function, onDisconnect: Function) => void\n * @param {Function} onMessage - Message handler\n * @param {Function} onDisconnect - trigger when runtime connection in closed\n * @return {void}\n */\nfunction connect (onMessage, onDisconnect) {\n if (this.isConnected()) throw new Error('You already connected')\n this.handler = (msg, source) => {\n if (this.debug) console.log('Receive message: ', msg)\n onMessage(msg, source)\n }\n this.port.onMessage.addListener(this.handler)\n this.port.onDisconnect.addListener(() => {\n typeof onDisconnect === 'function' && onDisconnect({}, this)\n this.port.disconnect()\n })\n}\n\n/**\n * Send message\n * @function sendMessage\n * @instance\n * @rtype (msg: Object) => void\n * @param {Object} msg - Message\n * @return {void}\n */\nfunction sendMessage (msg) {\n if (!this.port) throw new Error('You dont have connection. Please connect before')\n if (this.debug) console.log('Send message: ', msg)\n this.port.postMessage(msg)\n}\n\n/**\n * Check if connected\n * @function isConnected\n * @instance\n * @rtype () => Boolean\n * @return {Boolean} Is connected\n */\nfunction isConnected () {\n return typeof this.port.onMessage.hasListeners === 'function' ? this.port.onMessage.hasListeners() : this.port.onMessage.hasListener(this.handler)\n}\n\n/**\n * BrowserRuntimeConnection stamp\n * Handle browser runtime communication\n * @function\n * @alias module:@aeternity/aepp-sdk/es/utils/aepp-wallet-communication/connection/browser-runtime\n * @rtype Stamp\n * @param {Object} params={} - Initializer object\n * @param {Object} params.port - Runtime `port` object\n * @param {Object} [params.connectionInfo={}] - Connection info object\n * @param {Boolean} [params.debug=false] - Debug flag\n * @return {Object}\n */\nexport default stampit({\n init ({ connectionInfo = {}, port, debug = false }) {\n if (!getBrowserAPI().runtime) throw new Error('Runtime is not accessible in your environment')\n this.debug = debug\n this.connectionInfo = connectionInfo\n this.port = port || getBrowserAPI().runtime.connect(...[connectionInfo.id || undefined])\n },\n methods: { connect, sendMessage, disconnect, isConnected }\n}, WalletConnection)\n"],"file":"browser-runtime.js"}
1
+ {"version":3,"sources":["../../../../src/utils/aepp-wallet-communication/connection/browser-runtime.js"],"names":["stampit","WalletConnection","getBrowserAPI","disconnect","port","e","console","warning","connect","onMessage","onDisconnect","isConnected","Error","handler","msg","source","debug","log","addListener","sendMessage","postMessage","hasListeners","hasListener","init","connectionInfo","runtime","id","undefined","methods"],"mappings":"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","sourcesContent":["/*\n * ISC License (ISC)\n * Copyright (c) 2018 aeternity developers\n *\n * Permission to use, copy, modify, and/or distribute this software for any\n * purpose with or without fee is hereby granted, provided that the above\n * copyright notice and this permission notice appear in all copies.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\n * AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\n * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\n * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\n * PERFORMANCE OF THIS SOFTWARE.\n */\n\n/**\n * Browser runtime connector module\n *\n * This is the complement to {@link module:@aeternity/aepp-sdk/es/utils/aepp-wallet-communication/connection}.\n * @module @aeternity/aepp-sdk/es/utils/aepp-wallet-communication/connection/browser-runtime\n * @export BrowserRuntimeConnection\n * @example import BrowserRuntimeConnection from '@aeternity/aepp-sdk/es/utils/aepp-wallet-communication/connection/browser-runtime'\n */\nimport stampit from '@stamp/it'\n\nimport WalletConnection from '.'\nimport { getBrowserAPI } from '../helpers'\n\n/**\n * Disconnect\n * @function disconnect\n * @instance\n * @rtype () => void\n * @return {void}\n */\nfunction disconnect () {\n try {\n this.port.disconnect()\n } catch (e) {\n console.warning('From BrowserRuntimeConnection: ', e)\n }\n}\n\n/**\n * Connect\n * @function connect\n * @instance\n * @rtype (onMessage: Function, onDisconnect: Function) => void\n * @param {Function} onMessage - Message handler\n * @param {Function} onDisconnect - trigger when runtime connection in closed\n * @return {void}\n */\nfunction connect (onMessage, onDisconnect) {\n if (this.isConnected()) throw new Error('You already connected')\n this.handler = (msg, source) => {\n if (this.debug) console.log('Receive message: ', msg)\n onMessage(msg, source)\n }\n this.port.onMessage.addListener(this.handler)\n this.port.onDisconnect.addListener(() => {\n typeof onDisconnect === 'function' && onDisconnect({}, this)\n this.port.disconnect()\n })\n}\n\n/**\n * Send message\n * @function sendMessage\n * @instance\n * @rtype (msg: Object) => void\n * @param {Object} msg - Message\n * @return {void}\n */\nfunction sendMessage (msg) {\n if (!this.port) throw new Error('You dont have connection. Please connect before')\n if (this.debug) console.log('Send message: ', msg)\n this.port.postMessage(msg)\n}\n\n/**\n * Check if connected\n * @function isConnected\n * @instance\n * @rtype () => Boolean\n * @return {Boolean} Is connected\n */\nfunction isConnected () {\n return typeof this.port.onMessage.hasListeners === 'function' ? this.port.onMessage.hasListeners() : this.port.onMessage.hasListener(this.handler)\n}\n\n/**\n * BrowserRuntimeConnection stamp\n * Handle browser runtime communication\n * @function\n * @alias module:@aeternity/aepp-sdk/es/utils/aepp-wallet-communication/connection/browser-runtime\n * @rtype Stamp\n * @param {Object} params={} - Initializer object\n * @param {Object} params.port - Runtime `port` object\n * @param {Object} [params.connectionInfo={}] - Connection info object\n * @param {Boolean} [params.debug=false] - Debug flag\n * @return {Object}\n */\nexport default stampit({\n init ({ connectionInfo = {}, port, debug = false }) {\n if (!getBrowserAPI().runtime) throw new Error('Runtime is not accessible in your environment')\n this.debug = debug\n this.connectionInfo = connectionInfo\n this.port = port || getBrowserAPI().runtime.connect(...[connectionInfo.id || undefined])\n },\n methods: { connect, sendMessage, disconnect, isConnected }\n}, WalletConnection)\n"],"file":"browser-runtime.js"}