@aeternity/aepp-sdk 12.0.0 → 12.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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 +20764 -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 +35 -33
  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 +170 -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
@@ -1,71 +1,118 @@
1
- import { encode as bs58Encode, decode as bs58Decode } from 'bs58'
2
- import { sha256 as Sha256 } from 'sha.js'
1
+ import { encode as bs58Encode, decode as bs58Decode } from 'bs58';
2
+ // js extension is required for mjs build, not importing the whole package to reduce bundle size
3
+ // eslint-disable-next-line import/extensions
4
+ import Sha256 from 'sha.js/sha256.js';
3
5
  import {
4
6
  DecodeError,
5
7
  ArgumentError,
6
8
  InvalidChecksumError,
7
- PayloadLengthError
8
- } from './errors'
9
- import { concatBuffers } from './other'
9
+ PayloadLengthError,
10
+ } from './errors';
11
+ import { concatBuffers, isKeyOfObject } from './other';
12
+ import * as Encoded from './encoder-types';
13
+ import { Encoding } from './encoder-types';
14
+
15
+ export { Encoded, Encoding };
10
16
 
11
17
  /**
12
18
  * Calculate SHA256 hash of `input`
13
19
  * @param input - Data to hash
14
20
  * @returns Hash
21
+ * @deprecated use `SubtleCrypto.digest` or `sha.js` package instead
15
22
  */
16
- export function sha256hash (input: Uint8Array | string): Buffer {
17
- return new Sha256().update(input).digest()
23
+ export function sha256hash(input: Uint8Array | string): Buffer {
24
+ return new Sha256().update(input).digest();
18
25
  }
19
26
 
20
- // based on https://github.com/aeternity/protocol/blob/master/node/api/api_encoding.md
21
- const base64Types = ['ba', 'cb', 'or', 'ov', 'pi', 'ss', 'cs', 'ck', 'cv', 'st', 'tx'] as const
22
- const base58Types = ['ak', 'bf', 'bs', 'bx', 'ch', 'cm', 'ct', 'kh', 'mh', 'nm', 'ok', 'oq', 'pp', 'sg', 'th'] as const
27
+ /**
28
+ * @see {@link https://github.com/aeternity/aeserialization/blob/eb68fe331bd476910394966b7f5ede7a74d37e35/src/aeser_api_encoder.erl#L177-L202}
29
+ */
30
+ const base64Types = [
31
+ Encoding.ContractBytearray,
32
+ Encoding.ContractStoreKey,
33
+ Encoding.ContractStoreValue,
34
+ Encoding.Transaction,
35
+ Encoding.OracleQuery,
36
+ Encoding.OracleResponse,
37
+ Encoding.State,
38
+ Encoding.Poi,
39
+ Encoding.StateTrees,
40
+ Encoding.CallStateTree,
41
+ Encoding.Bytearray,
42
+ ] as const;
43
+ const base58Types = [
44
+ Encoding.KeyBlockHash,
45
+ Encoding.MicroBlockHash,
46
+ Encoding.BlockPofHash,
47
+ Encoding.BlockTxHash,
48
+ Encoding.BlockStateHash,
49
+ Encoding.Channel,
50
+ Encoding.ContractAddress,
51
+ Encoding.TxHash,
52
+ Encoding.OracleAddress,
53
+ Encoding.OracleQueryId,
54
+ Encoding.AccountAddress,
55
+ Encoding.Signature,
56
+ Encoding.Commitment,
57
+ Encoding.PeerPubkey,
58
+ Encoding.Name,
59
+ ] as const;
23
60
 
24
- export type EncodingType = typeof base64Types[number] | typeof base58Types[number]
25
- export type EncodedData<Type extends EncodingType> = `${Type}_${string}`
26
- // TODO: add all types with a fixed length
27
- const typesLength: { [name in EncodingType]?: number } = {
28
- ak: 32,
29
- ct: 32,
30
- ok: 32
31
- } as const
61
+ /**
62
+ * @see {@link https://github.com/aeternity/aeserialization/blob/eb68fe331bd476910394966b7f5ede7a74d37e35/src/aeser_api_encoder.erl#L261-L286}
63
+ */
64
+ const byteSizeForType = {
65
+ [Encoding.KeyBlockHash]: 32,
66
+ [Encoding.MicroBlockHash]: 32,
67
+ [Encoding.BlockPofHash]: 32,
68
+ [Encoding.BlockTxHash]: 32,
69
+ [Encoding.BlockStateHash]: 32,
70
+ [Encoding.Channel]: 32,
71
+ [Encoding.ContractAddress]: 32,
72
+ [Encoding.TxHash]: 32,
73
+ [Encoding.OracleAddress]: 32,
74
+ [Encoding.OracleQueryId]: 32,
75
+ [Encoding.AccountAddress]: 32,
76
+ [Encoding.Signature]: 64,
77
+ [Encoding.Commitment]: 32,
78
+ [Encoding.PeerPubkey]: 32,
79
+ [Encoding.State]: 32,
80
+ } as const;
32
81
 
33
- function ensureValidLength (data: Uint8Array, type: EncodingType): void {
34
- const reqLen = typesLength[type]
35
- if (reqLen == null || data.length === reqLen) return
36
- throw new PayloadLengthError(`Payload should be ${reqLen} bytes, got ${data.length} instead`)
82
+ function ensureValidLength(data: Uint8Array, type: Encoding): void {
83
+ if (!isKeyOfObject(type, byteSizeForType)) return;
84
+ const reqLen = byteSizeForType[type];
85
+ if (reqLen == null || data.length === reqLen) return;
86
+ throw new PayloadLengthError(`Payload should be ${reqLen} bytes, got ${data.length} instead`);
37
87
  }
38
88
 
39
- const getChecksum = (payload: Uint8Array): Buffer =>
40
- sha256hash(sha256hash(payload)).slice(0, 4)
89
+ const getChecksum = (payload: Uint8Array): Buffer => sha256hash(sha256hash(payload)).slice(0, 4);
41
90
 
42
- const addChecksum = (payload: Uint8Array): Buffer => {
43
- return concatBuffers([payload, getChecksum(payload)])
44
- }
91
+ const addChecksum = (payload: Uint8Array): Buffer => concatBuffers([payload, getChecksum(payload)]);
45
92
 
46
- function getPayload (buffer: Buffer): Buffer {
47
- const payload = buffer.slice(0, -4)
48
- if (!getChecksum(payload).equals(buffer.slice(-4))) throw new InvalidChecksumError()
49
- return payload
93
+ function getPayload(buffer: Buffer): Buffer {
94
+ const payload = buffer.slice(0, -4);
95
+ if (!getChecksum(payload).equals(buffer.slice(-4))) throw new InvalidChecksumError();
96
+ return payload;
50
97
  }
51
98
 
52
99
  const base64 = {
53
100
  encode: (buffer: Uint8Array) => addChecksum(buffer).toString('base64'),
54
- decode: (string: string) => getPayload(Buffer.from(string, 'base64'))
55
- }
101
+ decode: (string: string) => getPayload(Buffer.from(string, 'base64')),
102
+ };
56
103
 
57
104
  const base58 = {
58
105
  encode: (buffer: Uint8Array) => bs58Encode(addChecksum(buffer)),
59
- decode: (string: string) => getPayload(Buffer.from(bs58Decode(string)))
60
- }
106
+ decode: (string: string) => getPayload(Buffer.from(bs58Decode(string))),
107
+ };
61
108
 
62
- const parseType = (maybeType: unknown): [EncodingType, typeof base64] => {
63
- const base64Type = base64Types.find(t => t === maybeType)
64
- if (base64Type != null) return [base64Type, base64]
65
- const base58Type = base58Types.find(t => t === maybeType)
66
- if (base58Type != null) return [base58Type, base58]
67
- throw new ArgumentError('prefix', `one of ${[...base58Types, ...base64Types].join(', ')}`, maybeType)
68
- }
109
+ const parseType = (maybeType: unknown): [Encoding, typeof base64] => {
110
+ const base64Type = base64Types.find((t) => t === maybeType);
111
+ if (base64Type != null) return [base64Type, base64];
112
+ const base58Type = base58Types.find((t) => t === maybeType);
113
+ if (base58Type != null) return [base58Type, base58];
114
+ throw new ArgumentError('prefix', `one of ${[...base58Types, ...base64Types].join(', ')}`, maybeType);
115
+ };
69
116
 
70
117
  /**
71
118
  * Decode data using the default encoding/decoding algorithm
@@ -73,14 +120,14 @@ const parseType = (maybeType: unknown): [EncodingType, typeof base64] => {
73
120
  * (ex tx_..., sg_..., ak_....)
74
121
  * @returns Decoded data
75
122
  */
76
- export function decode (data: EncodedData<EncodingType>): Buffer {
77
- const [prefix, encodedPayload, extra] = data.split('_')
78
- if (encodedPayload == null) throw new DecodeError(`Encoded string missing payload: ${data}`)
79
- if (extra != null) throw new DecodeError(`Encoded string have extra parts: ${data}`)
80
- const [type, { decode }] = parseType(prefix)
81
- const payload = decode(encodedPayload)
82
- ensureValidLength(payload, type)
83
- return payload
123
+ export function decode(data: Encoded.Any): Buffer {
124
+ const [prefix, encodedPayload, extra] = data.split('_');
125
+ if (encodedPayload == null) throw new DecodeError(`Encoded string missing payload: ${data}`);
126
+ if (extra != null) throw new DecodeError(`Encoded string have extra parts: ${data}`);
127
+ const [type, encoder] = parseType(prefix);
128
+ const payload = encoder.decode(encodedPayload);
129
+ ensureValidLength(payload, type);
130
+ return payload;
84
131
  }
85
132
 
86
133
  /**
@@ -89,10 +136,11 @@ export function decode (data: EncodedData<EncodingType>): Buffer {
89
136
  * @param type - Prefix of Transaction
90
137
  * @returns Encoded string Base58check or Base64check data
91
138
  */
92
- export function encode<Type extends EncodingType> (
93
- data: Uint8Array, type: Type
94
- ): EncodedData<Type> {
95
- const [, { encode }] = parseType(type)
96
- ensureValidLength(data, type)
97
- return `${type}_${encode(data)}`
139
+ export function encode<Type extends Encoding>(
140
+ data: Uint8Array,
141
+ type: Type,
142
+ ): Encoded.Generic<Type> {
143
+ const [, encoder] = parseType(type);
144
+ ensureValidLength(data, type);
145
+ return `${type}_${encoder.encode(data)}`;
98
146
  }