@aeternity/aepp-sdk 12.0.0 → 12.1.2

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 (283) hide show
  1. package/dist/aepp-sdk.browser-script.js +1 -1
  2. package/dist/aepp-sdk.browser-script.js.LICENSE.txt +0 -15
  3. package/dist/aepp-sdk.browser-script.js.map +1 -1
  4. package/dist/aepp-sdk.browser.js +2 -1
  5. package/dist/aepp-sdk.browser.js.LICENSE.txt +1 -0
  6. package/dist/aepp-sdk.browser.js.map +1 -1
  7. package/dist/aepp-sdk.js +20765 -1
  8. package/dist/aepp-sdk.js.map +1 -1
  9. package/es/AeSdk.d.ts +7 -7
  10. package/es/AeSdk.mjs.map +1 -1
  11. package/es/AeSdkAepp.d.ts +4 -3
  12. package/es/AeSdkAepp.mjs +2 -1
  13. package/es/AeSdkAepp.mjs.map +1 -1
  14. package/es/AeSdkBase.d.ts +22 -21
  15. package/es/AeSdkBase.mjs +25 -21
  16. package/es/AeSdkBase.mjs.map +1 -1
  17. package/es/AeSdkWallet.d.ts +4 -3
  18. package/es/AeSdkWallet.mjs +5 -1
  19. package/es/AeSdkWallet.mjs.map +1 -1
  20. package/es/Node.d.ts +7 -10
  21. package/es/Node.mjs +63 -57
  22. package/es/Node.mjs.map +1 -1
  23. package/es/account/Base.d.ts +7 -4
  24. package/es/account/Base.mjs +3 -3
  25. package/es/account/Base.mjs.map +1 -1
  26. package/es/account/Memory.d.ts +5 -4
  27. package/es/account/Memory.mjs +24 -2
  28. package/es/account/Memory.mjs.map +1 -1
  29. package/es/account/Rpc.d.ts +6 -6
  30. package/es/account/Rpc.mjs +3 -2
  31. package/es/account/Rpc.mjs.map +1 -1
  32. package/es/aens.d.ts +27 -14
  33. package/es/aens.mjs +27 -21
  34. package/es/aens.mjs.map +1 -1
  35. package/es/aepp-wallet-communication/connection/Browser.d.ts +2 -1
  36. package/es/aepp-wallet-communication/connection/Browser.mjs +5 -2
  37. package/es/aepp-wallet-communication/connection/Browser.mjs.map +1 -1
  38. package/es/aepp-wallet-communication/connection/BrowserRuntime.d.ts +1 -0
  39. package/es/aepp-wallet-communication/connection/BrowserRuntime.mjs +1 -0
  40. package/es/aepp-wallet-communication/connection/BrowserRuntime.mjs.map +1 -1
  41. package/es/aepp-wallet-communication/connection/BrowserWindowMessage.d.ts +1 -0
  42. package/es/aepp-wallet-communication/connection/BrowserWindowMessage.mjs +5 -1
  43. package/es/aepp-wallet-communication/connection/BrowserWindowMessage.mjs.map +1 -1
  44. package/es/aepp-wallet-communication/connection-proxy.d.ts +1 -0
  45. package/es/aepp-wallet-communication/connection-proxy.mjs +1 -0
  46. package/es/aepp-wallet-communication/connection-proxy.mjs.map +1 -1
  47. package/es/aepp-wallet-communication/rpc/RpcClient.d.ts +1 -0
  48. package/es/aepp-wallet-communication/rpc/RpcClient.mjs +5 -5
  49. package/es/aepp-wallet-communication/rpc/RpcClient.mjs.map +1 -1
  50. package/es/aepp-wallet-communication/rpc/types.d.ts +8 -8
  51. package/es/aepp-wallet-communication/rpc/types.mjs.map +1 -1
  52. package/es/aepp-wallet-communication/schema.d.ts +17 -2
  53. package/es/aepp-wallet-communication/schema.mjs +54 -17
  54. package/es/aepp-wallet-communication/schema.mjs.map +1 -1
  55. package/es/aepp-wallet-communication/wallet-detector.d.ts +2 -1
  56. package/es/aepp-wallet-communication/wallet-detector.mjs +2 -3
  57. package/es/aepp-wallet-communication/wallet-detector.mjs.map +1 -1
  58. package/es/apis/node/models/index.d.ts +6 -2
  59. package/es/apis/node/models/index.mjs.map +1 -1
  60. package/es/apis/node/models/mappers.mjs +4 -2
  61. package/es/apis/node/models/mappers.mjs.map +1 -1
  62. package/es/chain.d.ts +92 -64
  63. package/es/chain.mjs +190 -154
  64. package/es/chain.mjs.map +1 -1
  65. package/es/channel/handlers.d.ts +3 -3
  66. package/es/channel/handlers.mjs +42 -44
  67. package/es/channel/handlers.mjs.map +1 -1
  68. package/es/channel/index.d.ts +43 -52
  69. package/es/channel/index.mjs +46 -49
  70. package/es/channel/index.mjs.map +1 -1
  71. package/es/channel/internal.d.ts +16 -15
  72. package/es/channel/internal.mjs +67 -62
  73. package/es/channel/internal.mjs.map +1 -1
  74. package/es/contract/Compiler.d.ts +1 -0
  75. package/es/contract/Compiler.mjs +5 -4
  76. package/es/contract/Compiler.mjs.map +1 -1
  77. package/es/contract/aci.d.ts +17 -15
  78. package/es/contract/aci.mjs +58 -45
  79. package/es/contract/aci.mjs.map +1 -1
  80. package/es/contract/ga.d.ts +16 -15
  81. package/es/contract/ga.mjs +12 -7
  82. package/es/contract/ga.mjs.map +1 -1
  83. package/es/contract/methods.d.ts +9 -6
  84. package/es/contract/methods.mjs +9 -6
  85. package/es/contract/methods.mjs.map +1 -1
  86. package/es/deprecated/index.d.ts +143 -0
  87. package/es/deprecated/index.mjs +162 -0
  88. package/es/deprecated/index.mjs.map +1 -0
  89. package/es/deprecated/methods.d.ts +18 -0
  90. package/es/deprecated/methods.mjs +26 -0
  91. package/es/deprecated/methods.mjs.map +1 -0
  92. package/es/index.d.ts +4 -1
  93. package/es/index.mjs +4 -1
  94. package/es/index.mjs.map +1 -1
  95. package/es/oracle.d.ts +69 -62
  96. package/es/oracle.mjs +121 -103
  97. package/es/oracle.mjs.map +1 -1
  98. package/es/spend.d.ts +16 -15
  99. package/es/spend.mjs +19 -30
  100. package/es/spend.mjs.map +1 -1
  101. package/es/tx/builder/address.d.ts +25 -0
  102. package/es/tx/builder/address.mjs +45 -0
  103. package/es/tx/builder/address.mjs.map +1 -0
  104. package/es/tx/builder/constants.d.ts +55 -26
  105. package/es/tx/builder/constants.mjs +60 -38
  106. package/es/tx/builder/constants.mjs.map +1 -1
  107. package/es/tx/builder/field-types/coin-amount.d.ts +13 -0
  108. package/es/tx/builder/field-types/coin-amount.mjs +26 -0
  109. package/es/tx/builder/field-types/coin-amount.mjs.map +1 -0
  110. package/es/tx/builder/field-types/deposit.d.ts +15 -0
  111. package/es/tx/builder/field-types/deposit.mjs +19 -0
  112. package/es/tx/builder/field-types/deposit.mjs.map +1 -0
  113. package/es/tx/builder/field-types/fee.d.ts +25 -0
  114. package/es/tx/{min-fee.mjs → builder/field-types/fee.mjs} +62 -60
  115. package/es/tx/builder/field-types/fee.mjs.map +1 -0
  116. package/es/tx/builder/field-types/field.d.ts +6 -0
  117. package/es/tx/builder/field-types/field.mjs +15 -0
  118. package/es/tx/builder/field-types/field.mjs.map +1 -0
  119. package/es/tx/builder/field-types/gas-limit.d.ts +12 -0
  120. package/es/tx/builder/field-types/gas-limit.mjs +33 -0
  121. package/es/tx/builder/field-types/gas-limit.mjs.map +1 -0
  122. package/es/tx/builder/field-types/gas-price.d.ts +8 -0
  123. package/es/tx/builder/field-types/gas-price.mjs +18 -0
  124. package/es/tx/builder/field-types/gas-price.mjs.map +1 -0
  125. package/es/tx/builder/field-types/index.d.ts +70 -0
  126. package/es/tx/builder/field-types/index.mjs +25 -0
  127. package/es/tx/builder/field-types/index.mjs.map +1 -0
  128. package/es/tx/builder/field-types/name-fee.d.ts +20 -0
  129. package/es/tx/builder/field-types/name-fee.mjs +24 -0
  130. package/es/tx/builder/field-types/name-fee.mjs.map +1 -0
  131. package/es/tx/builder/field-types/name-id.d.ts +14 -0
  132. package/es/tx/builder/field-types/name-id.mjs +19 -0
  133. package/es/tx/builder/field-types/name-id.mjs.map +1 -0
  134. package/es/tx/builder/field-types/name.d.ts +13 -0
  135. package/es/tx/builder/field-types/name.mjs +18 -0
  136. package/es/tx/builder/field-types/name.mjs.map +1 -0
  137. package/es/tx/builder/field-types/short-u-int.d.ts +6 -0
  138. package/es/tx/builder/field-types/short-u-int.mjs +12 -0
  139. package/es/tx/builder/field-types/short-u-int.mjs.map +1 -0
  140. package/es/tx/builder/field-types/u-int.d.ts +8 -0
  141. package/es/tx/builder/field-types/u-int.mjs +14 -0
  142. package/es/tx/builder/field-types/u-int.mjs.map +1 -0
  143. package/es/tx/builder/helpers.d.ts +27 -33
  144. package/es/tx/builder/helpers.mjs +41 -47
  145. package/es/tx/builder/helpers.mjs.map +1 -1
  146. package/es/tx/builder/index.d.ts +25 -12
  147. package/es/tx/builder/index.mjs +74 -83
  148. package/es/tx/builder/index.mjs.map +1 -1
  149. package/es/tx/builder/schema.d.ts +995 -144
  150. package/es/tx/builder/schema.mjs +121 -170
  151. package/es/tx/builder/schema.mjs.map +1 -1
  152. package/es/tx/index.d.ts +28 -27
  153. package/es/tx/index.mjs +97 -117
  154. package/es/tx/index.mjs.map +1 -1
  155. package/es/tx/validator.d.ts +4 -3
  156. package/es/tx/validator.mjs +79 -92
  157. package/es/tx/validator.mjs.map +1 -1
  158. package/es/typings/@aeternity__argon2-browser/index.d.mjs.map +1 -1
  159. package/es/typings/@aeternity__uuid/index.d.mjs.map +1 -1
  160. package/es/typings/bip32-path/index.d.mjs.map +1 -1
  161. package/es/typings/blakejs/index.d.mjs.map +1 -1
  162. package/es/typings/sha-js/index.d.mjs +2 -0
  163. package/es/typings/sha-js/index.d.mjs.map +1 -0
  164. package/es/typings/tweetnacl-auth/index.d.mjs.map +1 -1
  165. package/es/utils/amount-formatter.d.ts +9 -9
  166. package/es/utils/amount-formatter.mjs +17 -17
  167. package/es/utils/amount-formatter.mjs.map +1 -1
  168. package/es/utils/autorest.mjs +7 -7
  169. package/es/utils/autorest.mjs.map +1 -1
  170. package/es/utils/bignumber.mjs +2 -1
  171. package/es/utils/bignumber.mjs.map +1 -1
  172. package/es/utils/bytes.mjs +1 -1
  173. package/es/utils/bytes.mjs.map +1 -1
  174. package/es/utils/crypto.d.ts +8 -23
  175. package/es/utils/crypto.mjs +15 -41
  176. package/es/utils/crypto.mjs.map +1 -1
  177. package/es/utils/encoder-types.d.ts +61 -0
  178. package/es/utils/encoder-types.mjs +36 -0
  179. package/es/utils/encoder-types.mjs.map +1 -0
  180. package/es/utils/encoder.d.ts +6 -7
  181. package/es/utils/encoder.mjs +42 -26
  182. package/es/utils/encoder.mjs.map +1 -1
  183. package/es/utils/errors.d.ts +1 -11
  184. package/es/utils/errors.mjs +4 -20
  185. package/es/utils/errors.mjs.map +1 -1
  186. package/es/utils/hd-wallet.d.ts +18 -2
  187. package/es/utils/hd-wallet.mjs +64 -34
  188. package/es/utils/hd-wallet.mjs.map +1 -1
  189. package/es/utils/json-big.mjs +2 -2
  190. package/es/utils/json-big.mjs.map +1 -1
  191. package/es/utils/keystore.mjs +4 -2
  192. package/es/utils/keystore.mjs.map +1 -1
  193. package/es/utils/mptree.d.ts +2 -2
  194. package/es/utils/mptree.mjs +11 -6
  195. package/es/utils/mptree.mjs.map +1 -1
  196. package/es/utils/other.d.ts +8 -2
  197. package/es/utils/other.mjs +15 -3
  198. package/es/utils/other.mjs.map +1 -1
  199. package/es/utils/semver-satisfies.d.ts +1 -1
  200. package/es/utils/semver-satisfies.mjs +2 -2
  201. package/es/utils/semver-satisfies.mjs.map +1 -1
  202. package/es/utils/string.mjs.map +1 -1
  203. package/package.json +36 -34
  204. package/src/AeSdk.ts +30 -27
  205. package/src/AeSdkAepp.ts +93 -84
  206. package/src/AeSdkBase.ts +148 -130
  207. package/src/AeSdkWallet.ts +172 -156
  208. package/src/Node.ts +108 -102
  209. package/src/account/Base.ts +42 -32
  210. package/src/account/Memory.ts +45 -30
  211. package/src/account/Rpc.ts +32 -30
  212. package/src/aens.ts +124 -108
  213. package/src/aepp-wallet-communication/connection/Browser.ts +18 -15
  214. package/src/aepp-wallet-communication/connection/BrowserRuntime.ts +22 -21
  215. package/src/aepp-wallet-communication/connection/BrowserWindowMessage.ts +63 -52
  216. package/src/aepp-wallet-communication/connection-proxy.ts +8 -7
  217. package/src/aepp-wallet-communication/rpc/RpcClient.ts +67 -61
  218. package/src/aepp-wallet-communication/rpc/types.ts +32 -32
  219. package/src/aepp-wallet-communication/schema.ts +117 -74
  220. package/src/aepp-wallet-communication/wallet-detector.ts +29 -28
  221. package/src/apis/node/code-model-v4.yaml +54 -20
  222. package/src/apis/node/models/index.ts +6 -2
  223. package/src/apis/node/models/mappers.ts +4 -2
  224. package/src/chain.ts +286 -228
  225. package/src/channel/handlers.ts +424 -372
  226. package/src/channel/index.ts +285 -251
  227. package/src/channel/internal.ts +248 -232
  228. package/src/contract/Compiler.ts +22 -21
  229. package/src/contract/aci.ts +267 -258
  230. package/src/contract/ga.ts +93 -72
  231. package/src/contract/methods.ts +32 -27
  232. package/src/deprecated/index.ts +172 -0
  233. package/src/deprecated/methods.ts +25 -0
  234. package/src/index.ts +37 -32
  235. package/src/oracle.ts +211 -189
  236. package/src/spend.ts +82 -70
  237. package/src/tx/builder/address.ts +50 -0
  238. package/src/tx/builder/constants.ts +82 -52
  239. package/src/tx/builder/field-types/coin-amount.ts +27 -0
  240. package/src/tx/builder/field-types/deposit.ts +21 -0
  241. package/src/tx/builder/field-types/fee.ts +143 -0
  242. package/src/tx/builder/field-types/field.ts +9 -0
  243. package/src/tx/builder/field-types/gas-limit.ts +41 -0
  244. package/src/tx/builder/field-types/gas-price.ts +16 -0
  245. package/src/tx/builder/field-types/index.ts +45 -0
  246. package/src/tx/builder/field-types/name-fee.ts +32 -0
  247. package/src/tx/builder/field-types/name-id.ts +20 -0
  248. package/src/tx/builder/field-types/name.ts +18 -0
  249. package/src/tx/builder/field-types/short-u-int.ts +11 -0
  250. package/src/tx/builder/field-types/u-int.ts +16 -0
  251. package/src/tx/builder/helpers.ts +112 -117
  252. package/src/tx/builder/index.ts +203 -197
  253. package/src/tx/builder/schema.ts +421 -465
  254. package/src/tx/index.ts +128 -135
  255. package/src/tx/validator.ts +165 -161
  256. package/src/typings/@aeternity__argon2-browser/index.d.ts +1 -1
  257. package/src/typings/@aeternity__uuid/index.d.ts +3 -1
  258. package/src/typings/bip32-path/index.d.ts +6 -6
  259. package/src/typings/blakejs/index.d.ts +4 -32
  260. package/src/typings/sha-js/index.d.ts +5 -0
  261. package/src/typings/tweetnacl-auth/index.d.ts +2 -2
  262. package/src/utils/amount-formatter.ts +41 -41
  263. package/src/utils/autorest.ts +57 -54
  264. package/src/utils/bignumber.ts +7 -6
  265. package/src/utils/bytes.ts +19 -19
  266. package/src/utils/crypto.ts +82 -94
  267. package/src/utils/encoder-types.ts +63 -0
  268. package/src/utils/encoder.ts +104 -56
  269. package/src/utils/errors.ts +246 -264
  270. package/src/utils/hd-wallet.ts +114 -82
  271. package/src/utils/json-big.ts +16 -15
  272. package/src/utils/keystore.ts +65 -62
  273. package/src/utils/mptree.ts +59 -56
  274. package/src/utils/other.ts +26 -18
  275. package/src/utils/semver-satisfies.ts +15 -11
  276. package/src/utils/string.ts +10 -10
  277. package/es/tx/builder/field-types.d.ts +0 -62
  278. package/es/tx/builder/field-types.mjs +0 -126
  279. package/es/tx/builder/field-types.mjs.map +0 -1
  280. package/es/tx/min-fee.d.ts +0 -20
  281. package/es/tx/min-fee.mjs.map +0 -1
  282. package/src/tx/builder/field-types.ts +0 -111
  283. package/src/tx/min-fee.ts +0 -136
@@ -15,30 +15,32 @@
15
15
  * PERFORMANCE OF THIS SOFTWARE.
16
16
  */
17
17
 
18
- import { encode as rlpEncode } from 'rlp'
19
- import type { Input } from 'rlp'
20
- import { hash } from './crypto'
18
+ /* eslint-disable default-case */
19
+ import { encode as rlpEncode } from 'rlp';
20
+ import type { Input } from 'rlp';
21
+ import { hash } from './crypto';
21
22
  import {
22
23
  MerkleTreeHashMismatchError,
23
24
  MissingNodeInTreeError,
24
25
  UnknownPathNibbleError,
25
- UnknownNodeLengthError
26
- } from './errors'
26
+ UnknownNodeLengthError,
27
+ } from './errors';
27
28
 
28
29
  enum NodeType {
29
30
  Branch,
30
31
  Extension,
31
- Leaf
32
+ Leaf,
32
33
  }
33
34
 
34
- export type MPTreeBinary = [Buffer, Array<[Buffer, Buffer[]]>]
35
+ export type MPTreeBinary = [Buffer, Array<[Buffer, Buffer[]]>];
35
36
 
36
37
  export default class MPTree {
37
- private readonly rootHash: string
38
- private readonly nodes: { [key: string]: Buffer[] }
38
+ private readonly rootHash: string;
39
39
 
40
- private static nodeHash (node: Input): string {
41
- return Buffer.from(hash(rlpEncode(node))).toString('hex')
40
+ private readonly nodes: { [key: string]: Buffer[] };
41
+
42
+ private static nodeHash(node: Input): string {
43
+ return Buffer.from(hash(rlpEncode(node))).toString('hex');
42
44
  }
43
45
 
44
46
  /**
@@ -46,56 +48,56 @@ export default class MPTree {
46
48
  * @param binary - Binary
47
49
  * @returns Merkle Patricia Tree
48
50
  */
49
- constructor (binary: MPTreeBinary) {
50
- this.rootHash = binary[0].toString('hex')
51
+ constructor(binary: MPTreeBinary) {
52
+ this.rootHash = binary[0].toString('hex');
51
53
  this.nodes = Object.fromEntries(
52
- binary[1].map((node) => [node[0].toString('hex'), node[1]])
53
- )
54
+ binary[1].map((node) => [node[0].toString('hex'), node[1]]),
55
+ );
54
56
 
55
- if (this.nodes[this.rootHash] === undefined) throw new MissingNodeInTreeError('Can\'t find a node by root hash')
57
+ if (this.nodes[this.rootHash] === undefined) throw new MissingNodeInTreeError('Can\'t find a node by root hash');
56
58
  Object.entries(this.nodes).forEach(([key, node]) => {
57
- if (MPTree.nodeHash(node) !== key) throw new MerkleTreeHashMismatchError()
58
- const { type, payload } = MPTree.parseNode(node)
59
+ if (MPTree.nodeHash(node) !== key) throw new MerkleTreeHashMismatchError();
60
+ const { type, payload } = MPTree.parseNode(node);
59
61
  switch (type) {
60
62
  case NodeType.Branch:
61
63
  payload
62
64
  .slice(0, 16)
63
- .filter(n => n.length)
65
+ .filter((n) => n.length)
64
66
  .forEach((n) => {
65
67
  if (this.nodes[n.toString('hex')] === undefined) {
66
- throw new MissingNodeInTreeError('Can\'t find a node by hash in branch node')
68
+ throw new MissingNodeInTreeError('Can\'t find a node by hash in branch node');
67
69
  }
68
- })
69
- break
70
+ });
71
+ break;
70
72
  case NodeType.Extension:
71
73
  if (this.nodes[payload[0].toString('hex')] === undefined) {
72
- throw new MissingNodeInTreeError('Can\'t find a node by hash in extension node')
74
+ throw new MissingNodeInTreeError('Can\'t find a node by hash in extension node');
73
75
  }
74
76
  }
75
- })
77
+ });
76
78
  }
77
79
 
78
- isEqual (tree: MPTree): boolean {
79
- return this.rootHash === tree.rootHash
80
+ isEqual(tree: MPTree): boolean {
81
+ return this.rootHash === tree.rootHash;
80
82
  }
81
83
 
82
- private static parseNode (node: Buffer[]): {
83
- type: NodeType
84
- payload: Buffer[]
85
- path: string | null
84
+ private static parseNode(node: Buffer[]): {
85
+ type: NodeType;
86
+ payload: Buffer[];
87
+ path: string | null;
86
88
  } {
87
89
  switch (node.length) {
88
90
  case 17:
89
- return { type: NodeType.Branch, payload: node, path: null }
91
+ return { type: NodeType.Branch, payload: node, path: null };
90
92
  case 2: {
91
- const nibble = node[0][0] >> 4
92
- if (nibble > 3) throw new UnknownPathNibbleError(nibble)
93
- const type = nibble <= 1 ? NodeType.Extension : NodeType.Leaf
94
- const slice = [0, 2].includes(nibble) ? 2 : 1
95
- return { type, payload: [node[1]], path: node[0].toString('hex').slice(slice) }
93
+ const nibble = node[0][0] >> 4; // eslint-disable-line no-bitwise
94
+ if (nibble > 3) throw new UnknownPathNibbleError(nibble);
95
+ const type = nibble <= 1 ? NodeType.Extension : NodeType.Leaf;
96
+ const slice = [0, 2].includes(nibble) ? 2 : 1;
97
+ return { type, payload: [node[1]], path: node[0].toString('hex').slice(slice) };
96
98
  }
97
99
  default:
98
- throw new UnknownNodeLengthError(node.length)
100
+ throw new UnknownNodeLengthError(node.length);
99
101
  }
100
102
  }
101
103
 
@@ -103,39 +105,40 @@ export default class MPTree {
103
105
  * Serialize Merkle Patricia Tree
104
106
  * @returns Binary
105
107
  */
106
- serialize (): MPTreeBinary {
108
+ serialize(): MPTreeBinary {
107
109
  return [
108
110
  Buffer.from(this.rootHash, 'hex'),
109
111
  Object.entries(this.nodes).map(([mptHash, value]) => ([
110
112
  Buffer.from(mptHash, 'hex'),
111
- value
112
- ]))
113
- ]
113
+ value,
114
+ ])),
115
+ ];
114
116
  }
115
117
 
116
118
  /**
117
119
  * Retrieve value from Merkle Patricia Tree
118
- * @param key - The key of the element to retrieve
120
+ * @param _key - The key of the element to retrieve
119
121
  * @returns Value associated to the specified key
120
122
  */
121
- get (key: string): Buffer | undefined {
122
- let searchFrom = this.rootHash
123
- while (true) {
124
- const { type, payload, path } = MPTree.parseNode(this.nodes[searchFrom])
123
+ get(_key: string): Buffer | undefined {
124
+ let searchFrom = this.rootHash;
125
+ let key = _key;
126
+ while (true) { // eslint-disable-line no-constant-condition
127
+ const { type, payload, path } = MPTree.parseNode(this.nodes[searchFrom]);
125
128
  switch (type) {
126
129
  case NodeType.Branch:
127
- if (key.length === 0) return payload[16]
128
- searchFrom = payload[+`0x${key[0]}`].toString('hex')
129
- key = key.substr(1)
130
- break
130
+ if (key.length === 0) return payload[16];
131
+ searchFrom = payload[+`0x${key[0]}`].toString('hex');
132
+ key = key.substring(1);
133
+ break;
131
134
  case NodeType.Extension:
132
- if (key.substr(0, path?.length) !== path) return undefined
133
- searchFrom = payload[0].toString('hex')
134
- key = key.substr(path.length)
135
- break
135
+ if (key.substring(0, path?.length) !== path) return undefined;
136
+ searchFrom = payload[0].toString('hex');
137
+ key = key.substring(path.length);
138
+ break;
136
139
  case NodeType.Leaf:
137
- if (path !== key) return undefined
138
- return payload[0]
140
+ if (path !== key) return undefined;
141
+ return payload[0];
139
142
  }
140
143
  }
141
144
  }
@@ -1,36 +1,44 @@
1
- export const pause = async (duration: number): Promise<void> =>
2
- await new Promise(resolve => setTimeout(resolve, duration))
1
+ export const pause = async (duration: number): Promise<void> => new Promise((resolve) => {
2
+ setTimeout(resolve, duration);
3
+ });
3
4
 
4
5
  export const mapObject = <InputV, OutputV>(
5
6
  object: { [k: string]: InputV },
6
7
  fn: (
7
8
  value: [string, InputV], index: number, array: Array<[string, InputV]>
8
- ) => [number | string, OutputV]
9
- ): { [k: string]: OutputV } => Object.fromEntries(Object.entries(object).map(fn))
9
+ ) => [number | string, OutputV],
10
+ ): { [k: string]: OutputV } => Object.fromEntries(Object.entries(object).map(fn));
10
11
 
11
12
  // remove after dropping webpack4 support
12
13
  const isWebpack4Buffer = (() => {
13
14
  try {
14
- Buffer.concat([Uint8Array.from([])])
15
- return false
15
+ Buffer.concat([Uint8Array.from([])]);
16
+ return false;
16
17
  } catch (error) {
17
- return true
18
+ return true;
18
19
  }
19
- })()
20
+ })();
20
21
 
21
22
  export const concatBuffers = isWebpack4Buffer
22
- ? (list: readonly Uint8Array[], totalLength?: number): Buffer =>
23
- Buffer.concat(list.map(el => Buffer.from(el)), totalLength)
24
- : Buffer.concat
23
+ ? (list: readonly Uint8Array[], totalLength?: number): Buffer => (
24
+ Buffer.concat(list.map((el) => Buffer.from(el)), totalLength)
25
+ )
26
+ : Buffer.concat;
25
27
 
26
28
  /**
27
29
  * Object key type guard
28
- * @param key - Object key
29
- * @param object - object
30
+ * @param key - Maybe object key
31
+ * @param object - Object
30
32
  */
31
- export function isKeyOfObject<T> (
32
- key: string | number | symbol,
33
- object: T
34
- ): key is keyof T {
35
- return key in object
33
+ export function isKeyOfObject<T>(key: string | number | symbol, object: T): key is keyof T {
34
+ return key in object;
35
+ }
36
+
37
+ /**
38
+ * Array item type guard
39
+ * @param item - Maybe array item
40
+ * @param array - Array
41
+ */
42
+ export function isItemOfArray<T>(item: any, array: readonly T[]): item is T {
43
+ return array.includes(item);
36
44
  }
@@ -1,17 +1,21 @@
1
- export default function (version: string, geVersion: string, ltVersion: string): boolean {
1
+ export default function semverSatisfies(
2
+ version: string,
3
+ geVersion: string,
4
+ ltVersion: string,
5
+ ): boolean {
2
6
  const getComponents = (v: string): number[] => v
3
- .split(/[-+]/)[0].split('.').map(i => +i)
7
+ .split(/[-+]/)[0].split('.').map((i) => +i);
4
8
 
5
- const versionComponents = getComponents(version)
6
- const geComponents = getComponents(geVersion)
7
- const ltComponents = getComponents(ltVersion)
9
+ const versionComponents = getComponents(version);
10
+ const geComponents = getComponents(geVersion);
11
+ const ltComponents = getComponents(ltVersion);
8
12
 
9
- const base = Math.max(...versionComponents, ...geComponents, ...ltComponents) + 1
13
+ const base = Math.max(...versionComponents, ...geComponents, ...ltComponents) + 1;
10
14
  const componentsToNumber = (components: number[]): number => components.reverse()
11
- .reduce((acc, n, idx) => acc + n * Math.pow(base, idx), 0)
15
+ .reduce((acc, n, idx) => acc + n * base ** idx, 0);
12
16
 
13
- const vNumber = componentsToNumber(versionComponents)
14
- const geNumber = componentsToNumber(geComponents)
15
- const ltNumber = componentsToNumber(ltComponents)
16
- return vNumber >= geNumber && vNumber < ltNumber
17
+ const vNumber = componentsToNumber(versionComponents);
18
+ const geNumber = componentsToNumber(geComponents);
19
+ const ltNumber = componentsToNumber(ltComponents);
20
+ return vNumber >= geNumber && vNumber < ltNumber;
17
21
  }
@@ -20,8 +20,8 @@
20
20
  * @param s - String to convert
21
21
  * @returns Converted string
22
22
  */
23
- export function snakeToPascal (s: string): string {
24
- return s.replace(/_./g, match => match[1].toUpperCase())
23
+ export function snakeToPascal(s: string): string {
24
+ return s.replace(/_./g, (match) => match[1].toUpperCase());
25
25
  }
26
26
 
27
27
  /**
@@ -29,8 +29,8 @@ export function snakeToPascal (s: string): string {
29
29
  * @param s - String to convert
30
30
  * @returns Converted string
31
31
  */
32
- export function pascalToSnake (s: string): string {
33
- return s.replace(/[A-Z]/g, match => `_${match.toLowerCase()}`)
32
+ export function pascalToSnake(s: string): string {
33
+ return s.replace(/[A-Z]/g, (match) => `_${match.toLowerCase()}`);
34
34
  }
35
35
 
36
36
  /**
@@ -38,8 +38,8 @@ export function pascalToSnake (s: string): string {
38
38
  * @param str - String to validate.
39
39
  * @returns True if the string is valid hex, false otherwise.
40
40
  */
41
- export function isHex (str: string): boolean {
42
- return str.length % 2 === 0 && /^[0-9a-f]+$/i.test(str)
41
+ export function isHex(str: string): boolean {
42
+ return str.length % 2 === 0 && /^[0-9a-f]+$/i.test(str);
43
43
  }
44
44
 
45
45
  /**
@@ -47,8 +47,8 @@ export function isHex (str: string): boolean {
47
47
  * @param str - String to validate.
48
48
  * @returns True if the string is valid base-64, false otherwise.
49
49
  */
50
- export function isBase64 (str: string): boolean {
51
- if (str.length % 4 > 0 || /[^0-9a-z+/=]/i.test(str)) return false
52
- const index = str.indexOf('=')
53
- return index === -1 || /={1,2}/.test(str.slice(index))
50
+ export function isBase64(str: string): boolean {
51
+ if (str.length % 4 > 0 || /[^0-9a-z+/=]/i.test(str)) return false;
52
+ const index = str.indexOf('=');
53
+ return index === -1 || /={1,2}/.test(str.slice(index));
54
54
  }
@@ -1,62 +0,0 @@
1
- /// <reference types="node" />
2
- import BigNumber from 'bignumber.js';
3
- import { AensName } from './constants';
4
- import { EncodedData } from '../../utils/encoder';
5
- declare type Int = number | string | BigNumber;
6
- export declare class Field {
7
- prototype: any;
8
- static serialize(value: any, _txFields?: object): Buffer;
9
- static deserialize(value: Buffer): any;
10
- }
11
- export declare class Name extends Field {
12
- /**
13
- * @param value - AENS name
14
- */
15
- static serialize(value: AensName): Buffer;
16
- /**
17
- * @param value - AENS name
18
- */
19
- static deserialize(value: Buffer): string;
20
- }
21
- export declare class NameId extends Field {
22
- /**
23
- * @param value - AENS name ID
24
- */
25
- static serialize(value: AensName | EncodedData<'nm'>): Buffer;
26
- /**
27
- * @param value - AENS name ID Buffer
28
- */
29
- static deserialize(value: Buffer): string;
30
- }
31
- export declare class NameFee extends Field {
32
- /**
33
- * @param value - AENS name fee Buffer
34
- * @param txFields - Transaction fields
35
- * @param txFields.name - AENS Name in transaction
36
- */
37
- static serialize(value: Int | undefined, { name }: {
38
- name: AensName;
39
- }): Buffer;
40
- /**
41
- * @param value - AENS name fee Buffer
42
- * @returns AENS name fee
43
- */
44
- static deserialize(value: Buffer): string;
45
- }
46
- export declare class Deposit extends Field {
47
- /**
48
- * @param value - Deposit value in string format. Should be equal to '0'.
49
- * @returns Deposit value Buffer.
50
- */
51
- static serialize(value?: string): Buffer;
52
- /**
53
- * @param value - Deposit value Buffer.
54
- * @returns Deposit value.
55
- */
56
- static deserialize(value: Buffer): string;
57
- }
58
- export declare class GasPrice extends Field {
59
- static serialize(value?: Int): Buffer;
60
- static deserialize(value: Buffer): string;
61
- }
62
- export {};
@@ -1,126 +0,0 @@
1
- import _buffer from "buffer";
2
- const {
3
- Buffer: _Buffer
4
- } = _buffer;
5
- import { writeId, readId, produceNameId, getMinimumNameFee, readInt, writeInt, isNameValid } from "./helpers.mjs";
6
- import { InsufficientNameFeeError, IllegalArgumentError } from "../../utils/errors.mjs";
7
- import BigNumber from 'bignumber.js';
8
- import { MIN_GAS_PRICE } from "./constants.mjs";
9
- // todo: update me
10
- // ? This is a TS workaround because this has to be a class with only static methods
11
- export class Field {
12
- static serialize(value) {
13
- let _txFields = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
14
-
15
- return _Buffer.from(value);
16
- }
17
-
18
- static deserialize(value) {
19
- return value.toString();
20
- }
21
-
22
- }
23
- export class Name extends Field {
24
- /**
25
- * @param value - AENS name
26
- */
27
- static serialize(value) {
28
- return _Buffer.from(value);
29
- }
30
- /**
31
- * @param value - AENS name
32
- */
33
-
34
-
35
- static deserialize(value) {
36
- return value.toString();
37
- }
38
-
39
- }
40
- export class NameId extends Field {
41
- /**
42
- * @param value - AENS name ID
43
- */
44
- static serialize(value) {
45
- return writeId(isNameValid(value) ? produceNameId(value) : value);
46
- }
47
- /**
48
- * @param value - AENS name ID Buffer
49
- */
50
-
51
-
52
- static deserialize(value) {
53
- return readId(value);
54
- }
55
-
56
- }
57
- export class NameFee extends Field {
58
- /**
59
- * @param value - AENS name fee Buffer
60
- * @param txFields - Transaction fields
61
- * @param txFields.name - AENS Name in transaction
62
- */
63
- static serialize(value, _ref) {
64
- var _value;
65
-
66
- let {
67
- name
68
- } = _ref;
69
- const minNameFee = getMinimumNameFee(name);
70
- (_value = value) !== null && _value !== void 0 ? _value : value = minNameFee;
71
-
72
- if (minNameFee.gt(value)) {
73
- throw new InsufficientNameFeeError(new BigNumber(value), minNameFee);
74
- }
75
-
76
- return writeInt(value);
77
- }
78
- /**
79
- * @param value - AENS name fee Buffer
80
- * @returns AENS name fee
81
- */
82
-
83
-
84
- static deserialize(value) {
85
- return readInt(value);
86
- }
87
-
88
- }
89
- export class Deposit extends Field {
90
- /**
91
- * @param value - Deposit value in string format. Should be equal to '0'.
92
- * @returns Deposit value Buffer.
93
- */
94
- static serialize() {
95
- let value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '0';
96
- if (parseInt(value) !== 0) throw new IllegalArgumentError(`Contract deposit is not refundable, so it should be equal 0, got ${value.toString()} instead`);
97
- return writeInt(0);
98
- }
99
- /**
100
- * @param value - Deposit value Buffer.
101
- * @returns Deposit value.
102
- */
103
-
104
-
105
- static deserialize(value) {
106
- return readInt(value);
107
- }
108
-
109
- }
110
- export class GasPrice extends Field {
111
- static serialize() {
112
- let value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : MIN_GAS_PRICE;
113
-
114
- if (+value < MIN_GAS_PRICE) {
115
- throw new IllegalArgumentError(`Gas price ${value.toString()} must be bigger then ${MIN_GAS_PRICE}`);
116
- }
117
-
118
- return writeInt(value);
119
- }
120
-
121
- static deserialize(value) {
122
- return readInt(value);
123
- }
124
-
125
- }
126
- //# sourceMappingURL=field-types.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"field-types.mjs","names":["writeId","readId","produceNameId","getMinimumNameFee","readInt","writeInt","isNameValid","InsufficientNameFeeError","IllegalArgumentError","BigNumber","MIN_GAS_PRICE","Field","serialize","value","_txFields","from","deserialize","toString","Name","NameId","NameFee","name","minNameFee","gt","Deposit","parseInt","GasPrice"],"sources":["../../../src/tx/builder/field-types.ts"],"sourcesContent":["import {\n writeId, readId, produceNameId, getMinimumNameFee, readInt, writeInt, isNameValid\n} from './helpers'\nimport { InsufficientNameFeeError, IllegalArgumentError } from '../../utils/errors'\nimport BigNumber from 'bignumber.js'\nimport { MIN_GAS_PRICE, AensName } from './constants'\nimport { EncodedData } from '../../utils/encoder'\n\ntype Int = number | string | BigNumber\n\n// todo: update me\n// ? This is a TS workaround because this has to be a class with only static methods\nexport class Field {\n public prototype: any\n\n static serialize (value: any, _txFields: object = {}): Buffer {\n return Buffer.from(value)\n }\n\n static deserialize (value: Buffer): any {\n return value.toString()\n }\n}\n\nexport class Name extends Field {\n /**\n * @param value - AENS name\n */\n static serialize (value: AensName): Buffer {\n return Buffer.from(value)\n }\n\n /**\n * @param value - AENS name\n */\n static deserialize (value: Buffer): string {\n return value.toString()\n }\n}\n\nexport class NameId extends Field {\n /**\n * @param value - AENS name ID\n */\n static serialize (value: AensName | EncodedData<'nm'>): Buffer {\n return writeId(isNameValid(value) ? produceNameId(value) : value)\n }\n\n /**\n * @param value - AENS name ID Buffer\n */\n static deserialize (value: Buffer): string {\n return readId(value)\n }\n}\n\nexport class NameFee extends Field {\n /**\n * @param value - AENS name fee Buffer\n * @param txFields - Transaction fields\n * @param txFields.name - AENS Name in transaction\n */\n static serialize (value: Int | undefined, { name }: { name: AensName }): Buffer {\n const minNameFee = getMinimumNameFee(name)\n value ??= minNameFee\n if (minNameFee.gt(value)) {\n throw new InsufficientNameFeeError(new BigNumber(value), minNameFee)\n }\n return writeInt(value)\n }\n\n /**\n * @param value - AENS name fee Buffer\n * @returns AENS name fee\n */\n static deserialize (value: Buffer): string {\n return readInt(value)\n }\n}\n\nexport class Deposit extends Field {\n /**\n * @param value - Deposit value in string format. Should be equal to '0'.\n * @returns Deposit value Buffer.\n */\n static serialize (value: string = '0'): Buffer {\n if (parseInt(value) !== 0) throw new IllegalArgumentError(`Contract deposit is not refundable, so it should be equal 0, got ${value.toString()} instead`)\n return writeInt(0)\n }\n\n /**\n * @param value - Deposit value Buffer.\n * @returns Deposit value.\n */\n static deserialize (value: Buffer): string {\n return readInt(value)\n }\n}\n\nexport class GasPrice extends Field {\n static serialize (value: Int = MIN_GAS_PRICE): Buffer {\n if (+value < MIN_GAS_PRICE) {\n throw new IllegalArgumentError(`Gas price ${value.toString()} must be bigger then ${MIN_GAS_PRICE}`)\n }\n return writeInt(value)\n }\n\n static deserialize (value: Buffer): string {\n return readInt(value)\n }\n}\n"],"mappings":"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"}
@@ -1,20 +0,0 @@
1
- import BigNumber from 'bignumber.js';
2
- import { TX_TYPE, TxParamsCommon } from './builder/schema';
3
- import { AE_AMOUNT_FORMATS } from '../utils/amount-formatter';
4
- /**
5
- * Calculate min fee
6
- * @param txType - Transaction type
7
- * @param options - Options object
8
- * @param options.params - Tx params
9
- * @example
10
- * ```js
11
- * calculateMinFee('spendTx', { gasLimit, params })
12
- * ```
13
- */
14
- export default function calculateMinFee(txType: TX_TYPE, { params, vsn, denomination }: CalculateMinFeeOptions): BigNumber;
15
- interface CalculateMinFeeOptions {
16
- params: TxParamsCommon;
17
- vsn?: number;
18
- denomination?: AE_AMOUNT_FORMATS;
19
- }
20
- export {};
@@ -1 +0,0 @@
1
- {"version":3,"file":"min-fee.mjs","names":["BigNumber","MIN_GAS_PRICE","TX_TYPE","buildTx","isKeyOfObject","BASE_GAS","GAS_PER_BYTE","KEY_BLOCK_INTERVAL","TX_FEE_BASE_GAS","txType","feeFactors","channelForceProgress","channelOffChain","channelOffChainCallContract","channelOffChainCreateContract","channelOffChainUpdateDeposit","channelOffChainUpdateWithdrawal","channelOffChainUpdateTransfer","contractCreate","contractCall","gaAttach","gaMeta","payingFor","factor","TX_FEE_OTHER_GAS","txSize","relativeTtl","innerTxSize","oracleRegister","oracleExtend","oracleQuery","oracleResponse","times","plus","Math","ceil","floor","minus","getOracleRelativeTtl","params","ttlKeys","buildFee","vsn","denomination","rlpEncoded","length","tx","encodedTx","calculateMinFee","fee","previousFee","eq"],"sources":["../../src/tx/min-fee.ts"],"sourcesContent":["import BigNumber from 'bignumber.js'\nimport { MIN_GAS_PRICE, TX_TYPE, TxParamsCommon } from './builder/schema'\nimport { AE_AMOUNT_FORMATS } from '../utils/amount-formatter'\nimport { buildTx } from './builder'\nimport { isKeyOfObject } from '../utils/other'\n\nconst BASE_GAS = 15000\nconst GAS_PER_BYTE = 20\nconst KEY_BLOCK_INTERVAL = 3\n\n/**\n * Calculate the Base fee gas\n * @see {@link https://github.com/aeternity/protocol/blob/master/consensus/README.md#gas}\n * @param txType - The transaction type\n * @returns The base fee\n * @example\n * ```js\n * TX_FEE_BASE('channelForceProgress') => new BigNumber(30 * 15000)\n * ```\n */\nconst TX_FEE_BASE_GAS = (txType: TX_TYPE): BigNumber => {\n const feeFactors = {\n [TX_TYPE.channelForceProgress]: 30,\n [TX_TYPE.channelOffChain]: 0,\n [TX_TYPE.channelOffChainCallContract]: 0,\n [TX_TYPE.channelOffChainCreateContract]: 0,\n [TX_TYPE.channelOffChainUpdateDeposit]: 0,\n [TX_TYPE.channelOffChainUpdateWithdrawal]: 0,\n [TX_TYPE.channelOffChainUpdateTransfer]: 0,\n [TX_TYPE.contractCreate]: 5,\n [TX_TYPE.contractCall]: 12,\n [TX_TYPE.gaAttach]: 5,\n [TX_TYPE.gaMeta]: 5,\n [TX_TYPE.payingFor]: 1 / 5\n } as const\n const factor = feeFactors[txType as keyof typeof feeFactors] ?? 1\n return new BigNumber(factor * BASE_GAS)\n}\n\n/**\n * Calculate fee for Other types of transactions\n * @see {@link https://github.com/aeternity/protocol/blob/master/consensus/README.md#gas}\n * @param txType - The transaction type\n * @param txSize - The transaction size\n * @returns parameters - The transaction parameters\n * @returns parameters.relativeTtl - The relative ttl\n * @returns parameters.innerTxSize - The size of the inner transaction\n * @returns The Other fee\n * @example\n * ```js\n * TX_FEE_OTHER_GAS('oracleResponse',10, { relativeTtl: 10, innerTxSize: 10 })\n * => new BigNumber(10).times(20).plus(Math.ceil(32000 * 10 / Math.floor(60 * 24 * 365 / 2)))\n * ```\n */\nconst TX_FEE_OTHER_GAS = (\n txType: TX_TYPE,\n txSize: number,\n { relativeTtl, innerTxSize }: { relativeTtl: number, innerTxSize: number }\n): BigNumber => {\n switch (txType) {\n case TX_TYPE.oracleRegister:\n case TX_TYPE.oracleExtend:\n case TX_TYPE.oracleQuery:\n case TX_TYPE.oracleResponse:\n return new BigNumber(txSize)\n .times(GAS_PER_BYTE)\n .plus(\n Math.ceil(32000 * relativeTtl / Math.floor(60 * 24 * 365 / KEY_BLOCK_INTERVAL))\n )\n case TX_TYPE.gaMeta:\n case TX_TYPE.payingFor:\n return new BigNumber(txSize).minus(innerTxSize).times(GAS_PER_BYTE)\n default:\n return new BigNumber(txSize).times(GAS_PER_BYTE)\n }\n}\n\nfunction getOracleRelativeTtl (params: any, txType: TX_TYPE): number {\n const ttlKeys = {\n [TX_TYPE.oracleRegister]: 'oracleTtlValue',\n [TX_TYPE.oracleExtend]: 'oracleTtlValue',\n [TX_TYPE.oracleQuery]: 'queryTtlValue',\n [TX_TYPE.oracleResponse]: 'responseTtlValue'\n } as const\n\n if (!isKeyOfObject(txType, ttlKeys)) return 1\n else return params[ttlKeys[txType]]\n}\n\n/**\n * Calculate fee based on tx type and params\n */\nfunction buildFee (\n txType: TX_TYPE,\n { params, vsn, denomination }:\n { params: TxParamsCommon, vsn?: number, denomination?: AE_AMOUNT_FORMATS }\n): BigNumber {\n const { rlpEncoded: { length } } = buildTx(params, txType, { vsn, denomination })\n\n return TX_FEE_BASE_GAS(txType)\n .plus(TX_FEE_OTHER_GAS(txType, length, {\n relativeTtl: getOracleRelativeTtl(params, txType),\n innerTxSize: [TX_TYPE.gaMeta, TX_TYPE.payingFor].includes(txType)\n ? params.tx.tx.encodedTx.rlpEncoded.length\n : 0\n }))\n .times(MIN_GAS_PRICE)\n}\n\n/**\n * Calculate min fee\n * @param txType - Transaction type\n * @param options - Options object\n * @param options.params - Tx params\n * @example\n * ```js\n * calculateMinFee('spendTx', { gasLimit, params })\n * ```\n */\nexport default function calculateMinFee (\n txType: TX_TYPE, { params, vsn, denomination }: CalculateMinFeeOptions\n): BigNumber {\n let fee = new BigNumber(0)\n let previousFee\n do {\n previousFee = fee\n fee = buildFee(txType, { params: { ...params, fee }, vsn, denomination })\n } while (!fee.eq(previousFee))\n return fee\n}\n\ninterface CalculateMinFeeOptions {\n params: TxParamsCommon\n vsn?: number\n denomination?: AE_AMOUNT_FORMATS\n}\n"],"mappings":";AAAA,OAAOA,SAAP,MAAsB,cAAtB;SACSC,a,EAAeC,O;SAEfC,O;SACAC,a;AAET,MAAMC,QAAQ,GAAG,KAAjB;AACA,MAAMC,YAAY,GAAG,EAArB;AACA,MAAMC,kBAAkB,GAAG,CAA3B;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,MAAMC,eAAe,GAAIC,MAAD,IAAgC;EAAA;;EACtD,MAAMC,UAAU,GAAG;IACjB,CAACR,OAAO,CAACS,oBAAT,GAAgC,EADf;IAEjB,CAACT,OAAO,CAACU,eAAT,GAA2B,CAFV;IAGjB,CAACV,OAAO,CAACW,2BAAT,GAAuC,CAHtB;IAIjB,CAACX,OAAO,CAACY,6BAAT,GAAyC,CAJxB;IAKjB,CAACZ,OAAO,CAACa,4BAAT,GAAwC,CALvB;IAMjB,CAACb,OAAO,CAACc,+BAAT,GAA2C,CAN1B;IAOjB,CAACd,OAAO,CAACe,6BAAT,GAAyC,CAPxB;IAQjB,CAACf,OAAO,CAACgB,cAAT,GAA0B,CART;IASjB,CAAChB,OAAO,CAACiB,YAAT,GAAwB,EATP;IAUjB,CAACjB,OAAO,CAACkB,QAAT,GAAoB,CAVH;IAWjB,CAAClB,OAAO,CAACmB,MAAT,GAAkB,CAXD;IAYjB,CAACnB,OAAO,CAACoB,SAAT,GAAqB,IAAI;EAZR,CAAnB;EAcA,MAAMC,MAAM,kBAAGb,UAAU,CAACD,MAAD,CAAb,qDAAoD,CAAhE;EACA,OAAO,IAAIT,SAAJ,CAAcuB,MAAM,GAAGlB,QAAvB,CAAP;AACD,CAjBD;AAmBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,MAAMmB,gBAAgB,GAAG,CACvBf,MADuB,EAEvBgB,MAFuB,WAIT;EAAA,IADd;IAAEC,WAAF;IAAeC;EAAf,CACc;;EACd,QAAQlB,MAAR;IACE,KAAKP,OAAO,CAAC0B,cAAb;IACA,KAAK1B,OAAO,CAAC2B,YAAb;IACA,KAAK3B,OAAO,CAAC4B,WAAb;IACA,KAAK5B,OAAO,CAAC6B,cAAb;MACE,OAAO,IAAI/B,SAAJ,CAAcyB,MAAd,EACJO,KADI,CACE1B,YADF,EAEJ2B,IAFI,CAGHC,IAAI,CAACC,IAAL,CAAU,QAAQT,WAAR,GAAsBQ,IAAI,CAACE,KAAL,CAAW,KAAK,EAAL,GAAU,GAAV,GAAgB7B,kBAA3B,CAAhC,CAHG,CAAP;;IAKF,KAAKL,OAAO,CAACmB,MAAb;IACA,KAAKnB,OAAO,CAACoB,SAAb;MACE,OAAO,IAAItB,SAAJ,CAAcyB,MAAd,EAAsBY,KAAtB,CAA4BV,WAA5B,EAAyCK,KAAzC,CAA+C1B,YAA/C,CAAP;;IACF;MACE,OAAO,IAAIN,SAAJ,CAAcyB,MAAd,EAAsBO,KAAtB,CAA4B1B,YAA5B,CAAP;EAdJ;AAgBD,CArBD;;AAuBA,SAASgC,oBAAT,CAA+BC,MAA/B,EAA4C9B,MAA5C,EAAqE;EACnE,MAAM+B,OAAO,GAAG;IACd,CAACtC,OAAO,CAAC0B,cAAT,GAA0B,gBADZ;IAEd,CAAC1B,OAAO,CAAC2B,YAAT,GAAwB,gBAFV;IAGd,CAAC3B,OAAO,CAAC4B,WAAT,GAAuB,eAHT;IAId,CAAC5B,OAAO,CAAC6B,cAAT,GAA0B;EAJZ,CAAhB;EAOA,IAAI,CAAC3B,aAAa,CAACK,MAAD,EAAS+B,OAAT,CAAlB,EAAqC,OAAO,CAAP,CAArC,KACK,OAAOD,MAAM,CAACC,OAAO,CAAC/B,MAAD,CAAR,CAAb;AACN;AAED;AACA;AACA;;;AACA,SAASgC,QAAT,CACEhC,MADF,SAIa;EAAA;;EAAA,IAFX;IAAE8B,MAAF;IAAUG,GAAV;IAAeC;EAAf,CAEW;EACX,MAAM;IAAEC,UAAU,EAAE;MAAEC;IAAF;EAAd,IAA6B1C,OAAO,CAACoC,MAAD,EAAS9B,MAAT,EAAiB;IAAEiC,GAAF;IAAOC;EAAP,CAAjB,CAA1C;EAEA,OAAOnC,eAAe,CAACC,MAAD,CAAf,CACJwB,IADI,CACCT,gBAAgB,CAACf,MAAD,EAASoC,MAAT,EAAiB;IACrCnB,WAAW,EAAEY,oBAAoB,CAACC,MAAD,EAAS9B,MAAT,CADI;IAErCkB,WAAW,EAAE,sCAACzB,OAAO,CAACmB,MAAT,EAAiBnB,OAAO,CAACoB,SAAzB,kBAA6Cb,MAA7C,IACT8B,MAAM,CAACO,EAAP,CAAUA,EAAV,CAAaC,SAAb,CAAuBH,UAAvB,CAAkCC,MADzB,GAET;EAJiC,CAAjB,CADjB,EAOJb,KAPI,CAOE/B,aAPF,CAAP;AAQD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,eAAe,SAAS+C,eAAT,CACbvC,MADa,SAEF;EAAA,IADM;IAAE8B,MAAF;IAAUG,GAAV;IAAeC;EAAf,CACN;EACX,IAAIM,GAAG,GAAG,IAAIjD,SAAJ,CAAc,CAAd,CAAV;EACA,IAAIkD,WAAJ;;EACA,GAAG;IACDA,WAAW,GAAGD,GAAd;IACAA,GAAG,GAAGR,QAAQ,CAAChC,MAAD,EAAS;MAAE8B,MAAM,EAAE,EAAE,GAAGA,MAAL;QAAaU;MAAb,CAAV;MAA8BP,GAA9B;MAAmCC;IAAnC,CAAT,CAAd;EACD,CAHD,QAGS,CAACM,GAAG,CAACE,EAAJ,CAAOD,WAAP,CAHV;;EAIA,OAAOD,GAAP;AACD"}